Каталог решений

Покупка продления купона

Продолжительность:
Общая сумма:
0 руб.
Ваш запрос успешно отправлен!

Я согласен с условиями активации продлений
Продлить
Продолжить покупки

Расчёт доставки: МКАД, КАД и произвольные зоны

Модуль добавляет в интернет-магазин службы доставки с расчётом стоимости по адресу клиента. Адрес уточняется через сервис DaData: подсказки при вводе и определение координат. Тарифы DaData опубликованы на сайте сервиса.Доступны три службы:МКАД — стоимость относительно Московской кольцевой автодороги;КАД — стоимость относительно кольцевой автодороги Санкт-Петербурга;Зоны на карте — фиксированная цена, если адрес попадает в полигон, который администратор нарисовал в админке.Службы можно использовать по отдельности или вместе: например, МКАД для Москвы и зоны — для другого города.Тарификация МКАД и КАДцена за километр за пределами кольца;таблица дистанций — разная стоимость для диапазонов, например от 0 до 20 км и от 21 до 40 км.Можно задать стоимость доставки внутри кольца и при необходимости прибавлять её к цене за пределами МКАД или КАД.Произвольные зоныФункция выключена по умолчанию. После включения в настройках модуля администратор рисует зоны на Яндекс.Карте, задаёт название, цвет и цену. На оформлении заказа модуль берёт координаты адреса из DaData и определяет, в какую зону он попал. Если адрес вне всех зон, можно показать фиксированную цену.Для рисования зон в админке нужен ключ JavaScript API Яндекс.Карт.Нестандартная логика магазинаРасчёт можно дополнить своими обработчиками событий. Типичный пример: внутри МКАД доставка 300 ₽, а при сумме заказа от 3500 ₽ — бесплатно.Модуль совместим со стандартным шаблоном компонента sale.order.ajax. Если шаблон оформления заказа сильно переработан, может понадобиться доработка.ОБЯЗАТЕЛЬНЫЕ УСЛОВИЯ ДЛЯ КОРРЕКТНОЙ РАБОТЫ МОДУЛЯв PHP включено расширение curl;на счёте DaData положительный баланс — тарифицируется каждый запрос;в свойствах заказа есть свойство с флагом «Является адресом», его поле выведено на странице оформления заказа;если модуль в демо-режиме, демо-период не должен быть просрочен;для зон: опция включена в настройках модуля и указан ключ JavaScript API Яндекс.Карт.

Расчёт доставки: МКАД, КАД и произвольные зоны

Расчёт доставки: МКАД, КАД и произвольные зоны

Купить: 7 990 руб.
Попробовать (14 дней)
от TREEWEB
Купить продление
Скриншоты
Описание

Технические данные

Опубликовано:
07.12.2021
Обновлено:
08.09.2026
Версия:
2.0.0
Установлено:
100 - 499 раз
Подходящие редакции:
«Малый бизнес», «Бизнес»
Адаптивность:
Нет
Поддержка Композита:
Нет
Совместимо с Сайты24
Нет

Пользовательское соглашение

Описание

Модуль добавляет в интернет-магазин службы доставки с расчётом стоимости по адресу клиента. Адрес уточняется через сервис DaData: подсказки при вводе и определение координат. Тарифы DaData опубликованы на сайте сервиса.

Доступны три службы:

  • МКАД — стоимость относительно Московской кольцевой автодороги;
  • КАД — стоимость относительно кольцевой автодороги Санкт-Петербурга;
  • Зоны на карте — фиксированная цена, если адрес попадает в полигон, который администратор нарисовал в админке.
Службы можно использовать по отдельности или вместе: например, МКАД для Москвы и зоны — для другого города.

Тарификация МКАД и КАД

  • цена за километр за пределами кольца;
  • таблица дистанций — разная стоимость для диапазонов, например от 0 до 20 км и от 21 до 40 км.

Можно задать стоимость доставки внутри кольца и при необходимости прибавлять её к цене за пределами МКАД или КАД.

Произвольные зоны

Функция выключена по умолчанию. После включения в настройках модуля администратор рисует зоны на Яндекс.Карте, задаёт название, цвет и цену. На оформлении заказа модуль берёт координаты адреса из DaData и определяет, в какую зону он попал. Если адрес вне всех зон, можно показать фиксированную цену.

Для рисования зон в админке нужен ключ JavaScript API Яндекс.Карт.

Нестандартная логика магазина

Расчёт можно дополнить своими обработчиками событий. Типичный пример: внутри МКАД доставка 300 ₽, а при сумме заказа от 3500 ₽ — бесплатно.

Модуль совместим со стандартным шаблоном компонента sale.order.ajax. Если шаблон оформления заказа сильно переработан, может понадобиться доработка.

ОБЯЗАТЕЛЬНЫЕ УСЛОВИЯ ДЛЯ КОРРЕКТНОЙ РАБОТЫ МОДУЛЯ

  • в PHP включено расширение curl;
  • на счёте DaData положительный баланс — тарифицируется каждый запрос;
  • в свойствах заказа есть свойство с флагом «Является адресом», его поле выведено на странице оформления заказа;
  • если модуль в демо-режиме, демо-период не должен быть просрочен;
  • для зон: опция включена в настройках модуля и указан ключ JavaScript API Яндекс.Карт.
Отзывы (1)
Обсуждения (4)
Что нового
2.0.0 (08.09.2026) Добавлена служба доставки по зонам на Яндекс.Карте.
  • В настройках модуля вкладка «Зоны доставки»: включение функции (по умолчанию выключена), ключ JavaScript API Яндекс.Карт, центр карты
  • Администратор рисует полигоны зон с фиксированной ценой; обзорная карта на списке зон
  • Новая служба доставки определяет зону по координатам адреса DaData и считает стоимость
  • Вне зон — фиксированная цена или сообщение «по согласованию»
  • Таблица зон и файлы админки/обработчика/JS копируются при обновлении без переустановки модуля
1.2.0 (03.09.2026) Ограничение подсказок адресов DaData по местоположению заказа.
  • Подсказки адресов ограничены выбранным свойством типа «Местоположение»
  • При смене местоположения область поиска обновляется
  • Добавлена настройка: при отсутствии поля местоположения ограничивать подсказки городом магазина из модуля «Интернет-магазин»
  • Исправлены CSRF/XSS в админке тарифов, open redirect в настройках; API-ключ DaData убран с фронтенда (серверный proxy)
  • Исправлен proxy подсказок: endpoint status/address и корректная работа suggest без пустого списка
  • Для Москвы/Московской области и СПб/Ленинградской области подсказки включают оба региона
1.1.8 (13.04.2026)
  • Убраны ограничения на поиск адресов только в пределах Московской и Ленинградской областей
1.1.7 (22.12.2023)
  • Убрана нулевая цена, если расчет доставки еще не производился
1.1.6 (20.06.2023)
  • Небольшое исправление расчета доставки
1.1.5 (03.02.2023)
  • Критическое исправление
1.1.4 (14.03.2022)
  • Добавлена настройка отключения инпута ввода адреса в блоке "Доставка"
1.1.3 (29.12.2021)
  • Устранена ошибка подключения класса DeliveryHelper в обработчиках служб доставки при истечении демо-периода
  • Убрано лишнее подключение обработчиков Dadata в административной части сайта
1.1.2 (21.12.2021)
  • Важные исправления для совместимости с некоторыми готовыми решениями от партнеров
1.1.1 (21.12.2021)
  • Добавлена настройка учета стоимости доставки внутри МКАД (КАД), в случае, если адрес находится за МКАД (КАД)
1.1.0 (16.12.2021)
  • Добавлена настройка подключения Jquery
  • Добавлена настройка адреса страницы оформления заказа (при ее установке библиотеки модуля будут подключаться только на этой странице)
  • Мелкие исправления
1.0.3 (15.12.2021)
  • Критические исправления
1.0.2 (15.12.2021)
  • Незначительные исправления
1.0.1 (15.12.2021)
  • Незначительное исправление подключения библиотеки Dadata
Установка

1. Установите модуль из Маркетплейса.

2. Зарегистрируйтесь в сервисе DaData и получите API-ключ и секретный ключ в личном кабинете.

3. Откройте Настройки → Настройки продукта → Настройки модулей → Расчёт доставки: МКАД, КАД и произвольные зоны. На вкладке «Интеграция с Dadata» укажите API-ключ и секретный ключ.

В свойствах заказа должно быть свойство с флагом «Является адресом», его поле нужно вывести на страницу оформления заказа.

Служба МКАД или КАД

  1. Перейдите в Магазин → Настройки → Службы доставки, нажмите «Добавить» и выберите службу для МКАД или КАД.
  2. На вкладке «Общие настройки» при необходимости измените название и описание.
  3. На вкладке «Настройка обработчика» укажите цену доставки внутри кольца. Для расчёта за километр заполните цену за километр. Для таблицы дистанций отметьте чекбокс «Рассчитывать стоимость доставки на основе таблицы дистанций».
  4. Если включена таблица дистанций, откройте Магазин → Настройки → МКАД — стоимость доставки или КАД — стоимость доставки и задайте цены по диапазонам (например, 0–20 км и 21–40 км).

Служба по зонам на карте

  1. В настройках модуля на вкладке «Зоны доставки» включите расчёт по зонам и укажите ключ JavaScript API Яндекс.Карт (не ключ Геокодера и не ключ DaData). Ключ получают в кабинете разработчика Яндекса. При необходимости задайте центр карты.
  2. Сохраните настройки. В меню появится пункт Магазин → Настройки → Зоны доставки. Нарисуйте полигоны, укажите название и цену каждой зоны.
  3. В Магазин → Настройки → Службы доставки добавьте службу «Доставка по зонам на карте». На вкладке «Настройка обработчика» выберите, что делать, если адрес вне зон: фиксированная цена или сообщение (например, «по согласованию»).

Готово: модуль настроен.

Разработчикам

Можно изменить уже рассчитанную стоимость через события модуля tmg.kaddelivery:

  • OnDeliveryInMkadCalculated — стоимость внутри МКАД;
  • OnDeliveryOutMkadDistanceCalculated — за МКАД по таблице дистанций;
  • OnDeliveryOutMkadForKmCalculated — за МКАД по цене за километр;
  • OnDeliveryInKadCalculated — стоимость внутри КАД;
  • OnDeliveryOutKadDistanceCalculated — за КАД по таблице дистанций;
  • OnDeliveryOutKadForKmCalculated — за КАД по цене за километр;
  • OnDeliveryZoneCalculated — стоимость по зоне на карте (в том числе если адрес вне зон).

События МКАД и КАД получают три аргумента:

  • $order — экземпляр Bitrix\Sale\Order;
  • $arAddress — ответ DaData по адресу, см. документацию clean/address;
  • &$price — рассчитанная стоимость, её можно изменить.

OnDeliveryZoneCalculated получает четвёртый аргумент $zone — строка найденной зоны или null, если адрес вне зон. Порядок аргументов: $order, $arAddress, $zone, &$price.

Пример: внутри МКАД доставка бесплатна, если сумма заказа больше 3500 ₽. В файле /bitrix/php_interface/init.php или /local/php_interface/init.php:

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'tmg.kaddelivery',
    'OnDeliveryInMkadCalculated',
    'OnDeliveryInMkadCalculatedHandler'
);
function OnDeliveryInMkadCalculatedHandler($order, $arAddress, &$amp;price)
{
    if ($order->getPrice() > 3500) {
        $price = 0;
    }
}
Поддержка
Служба поддержки support@tree-web.ru

Другие решения разработчика

Решение добавлено в корзину

Перейдите в корзину и оформите заказ или продолжите покупки
Перейти в корзину
Продолжить покупки