Shopware имеет мощный модуль стоимости доставки, который вы можете специально вмешать в расчет. В нашем случае мы хотим реализовать следующий сценарий: стоимость доставки товара изначально определяется в зависимости от веса товара (указаны ограничения веса). Только для особых исключений должна быть возможность установить фиксированную стоимость доставки для каждого товара.
Таблица стоимости доставки выглядит так:
| Вес | Взвесить | Цена |
| 0 кг | <3 кг | 4,99 € |
| 3 кг | <5 кг | 6,90 € |
| 5 кг | <10 кг | 9,50 € |
| 10 кг | <15 кг | 10,90 € |
| 15 кг | <20 кг | 12,90 € |
| 20 кг | <31 кг | 17,90 € |
| 31 кг | <40 кг | 49,90 € |
| от 40 кг | 49,90 € базовая цена + 0,59 € за кг |
Сначала вы можете подумать о том, чтобы выбрать значение «Вес» в поле «Расчет стоимости доставки в соответствии с:» и ввести соответствующие ограничения ниже.:

Здесь возникает несколько проблем: правило «от 40 кг: базовая цена 49,90 евро + 0,59 евро за кг» сложно реализовать, значения, такие как 2,999, неточны, и отсутствует возможность назначать индивидуальную стоимость доставки для каждого товара. Для решения этой проблемы мы сначала создадим новое текстовое поле (например, «attr5») в разделе «Настройки» > «Товары» > «Текстовые поля для товаров».:

Теперь мы заполним это поле значением в евро для всех товаров, для которых требуется индивидуальная стоимость доставки. Для десятичных чисел используйте точку вместо запятой.:

Наконец, мы создаем новый способ доставки с важными настройками «Расчет стоимости доставки на основе: собственного расчета» и «Фактор (%): 100»:

Наконец, в разделе «Дополнительные настройки» мы сохраняем нашу новую функцию расчета в разделе «Собственный расчет».:
a359cdf87765551f0706
Эта функция принимает вес каждого товара и рассчитывает цену. Три разных предмета весом 2,5 кг стоят 14,97 евро, трижды один и тот же предмет весом 2,5 кг — 9,50 евро. Если вместо этого вы хотите выполнить расчет на основе общего веса (с результатом в обоих случаях 9,50 евро), вы лишь минимально меняете функцию расчета.:
a359cdf87765551f0706
Если дилеры также должны быть включены, вы должны быть осторожны с ценами, указанными в запросе SQL, независимо от того, являются ли они чистыми или брутто-значениями (в зависимости от значений, установленных в Основные настройки> Настройки магазина> Группы клиентов> Введите цены брутто).
Если вы также хотите принять во внимание функцию товара «Отметить товар как бесплатную доставку» (для каждого товара), вы обращаетесь к столбцу b.shippingfree и устанавливаете следующую опцию в «Настройки» > «Стоимость доставки» > «Дополнительные настройки» > «Товары с бесплатной доставкой».:

С помощью SQL вы можете строить любые сложные запросы. Желательно подготовить окончательный запрос с помощью переменных SQL, чтобы все это оставалось простым в обслуживании. Ниже приведен пример более сложного запроса, который различает покупателей магазина и розничных продавцов, учитывает товары с бесплатной доставкой, взимает плату за доставку только для максимальной корзины покупок и использует разные шкалы цен (в зависимости от бренда).:
a359cdf87765551f0706