Как изменить стоимость доставки битрикс
Перейти к содержимому

Как изменить стоимость доставки битрикс

  • автор:

Как при синхронизации битрикс и 1С изменить стоимость доставки, если в 1С нет документов на отгрузку?

Простая задача: в 1С меняют стоимость доставки и она должна передаться в Битрикс. Но есть нюанс — Битрикс, вместе с данными о доставке, передает документы на отгрузку и ожидает, что 1С вернет их обратно при изменения стоимости доставки. Но этого не происходит, тк в 1С их просто нет (особенность конфигурации и бизнес-процессов клиента). Результат — у всех заказов с измененной в 1С стоимостью доставки удаляется доставка в битриксе. Как решить эту проблему?

Решение

Одно из решений, которое нашли на форуме Битрикса — сохранять эти документы на стороне сайта и, при необходимости, восстанавливать их в момент выгрузки из 1С. Клиенту этот способ не подошел из-за особенностей бизнес-процесса работы с заказом. Поэтому пошли другим путем. На стороне 1С при выгрузке информации о заказе добавляем еще один товар — доставка, который обрабатываем на стороне магазина. В этом случае ожидаемые битриксом документы формируются на лету в момент синхронизации с 1С. Особых проблем с реализацией не было, кроме маленькой особенности работы с доставкой в Битриксе. При обработке заказа в момент его синхронизации с 1С нельзя просто взять и изменить стоимость и тип доставки. Необходимо сначала удалить текущий способ доставки из заказа и сохранить его. После этого скрипт добавляет в заказ обновленный способ доставки, пришедший из 1С.

Эффект от проведенных работ

  • Интеграция
  • 1С Bitrix

Можно ли изменить стоимость доставки?

Можно ли обнулить стоимость доставки в Битрикс по событию OnSaleOrderBeforeSaved?
setDeliveryPrice не работает.

  • Вопрос задан более трёх лет назад
  • 1280 просмотров

Комментировать

Решения вопроса 1

Тебе надо менять не стоимость доставки, а стоимость отгрузки. Как-то так:

$eventManager = \Bitrix\Main\EventManager::getInstance(); $eventManager->addEventHandler('sale', 'OnSaleOrderBeforeSaved', ['OrderEvents', 'onBeforeOrderSaveHandler']); class OrderEvents < public static function onBeforeOrderSaveHandler(\Bitrix\Main\Event $event) < $order = $event->getParameter('ENTITY'); $shipmentCollection = $order->getShipmentCollection(); foreach($shipmentCollection as $shipment) < if(!$shipment->isSystem()) $shipment->setBasePriceDelivery(0, false); > > >

UPD
Насчет if(!$shipment->isSystem()) я не уверен, взял с компонента sale.order.ajax. Помню, что там типа две отгрузки создаются — одна системная, а вот зачем не помню.

Ответ написан более трёх лет назад

Форум

В файле /bitrix/php_interface/init.php сделал функцию изменения стоимости доставки но она не срабатывает. Может где то ошибся?

AddEventHandler("sale", "OnOrderAdd", "OnBeforeOA"); function OnBeforeOA($id,$arFields) < $db_props = CSaleOrderPropsValue::GetOrderProps($id); while ($arProps = $db_props->Fetch()) < if (($arProps["CODE"] == "typord") & ($arProps["VALUE"] == "gar")) < $arFieldsDev = array( "PRICE_DELIVERY" =>0, ); CSaleOrder::Update($id, $arFieldsDev); > > >

Заглянувший
Сообщений: 20 Баллов: 1 Регистрация: 01.03.2012
31.05.2013 12:55:16
Очень нужна помощь. Хоть по логике, все правильно?
Администратор
Сообщений: 1376 Баллов: 113 Регистрация: 07.03.2008
31.05.2013 13:01:50

В каком случае у вас меняется стоимость доставки?

Есть штатный функционал «Правила работы с корзиной» который умеет уменьшать или увеличивать стоимость доставки на различных условиях.

Заглянувший
Сообщений: 20 Баллов: 1 Регистрация: 01.03.2012
31.05.2013 13:05:56

При оформлении заказа человек выбирает так называемый тип заказа. Которое я добавил в «Свойства заказа» в виде выпадающего списка.
Если тип гарантийный то доставка 0 руб. Если не гарантийный то берет стоимость из настроек службы доставки.

В «Правилах работы с корзиной» нет возможности выбрать Свойства заказа добавленные через раздел «Свойства заказа»

Администратор
Сообщений: 1376 Баллов: 113 Регистрация: 07.03.2008
31.05.2013 13:20:49

Цитата
TOI_I_IA пишет:
В «Правилах работы с корзиной» нет возможности выбрать Свойства заказа добавленные через раздел «Свойства заказа»

Да пока нет, планируется в следующих выпусках модуля добавления любых полей данного типа + профилей пользователя, но это не очень быстро.

Администратор
Сообщений: 9255 Баллов: 1789 Регистрация: 05.08.2005
Epic fail — сказать «это так просто» и не суметь сделать
31.05.2013 13:21:44

Выйдут в ближайших обновлениях. Что касается Вашего кода, то при изменении стоимости доставки Вы должны менять и общую стоимость заказа.

Не надо сверлить зубы через задний проход дрелью от Сваровски
Заглянувший
Сообщений: 20 Баллов: 1 Регистрация: 01.03.2012
31.05.2013 13:37:36

$ordProp = CSaleOrder::GetByID($id); $db_props = CSaleOrderPropsValue::GetOrderProps($id); while ($arProps = $db_props->Fetch()) < if (($arProps["CODE"] == "typord") & ($arProps["VALUE"] == "gar")) < $arFieldsDev = array( "PRICE_DELIVERY" =>0, "PRICE" => $ordProp["PRICE"] - $ordProp["PRICE_DELIVERY"] ); CSaleOrder::Update($id, $arFieldsDev); > >

результат тот же
Заглянувший
Сообщений: 20 Баллов: 1 Регистрация: 01.03.2012
31.05.2013 16:51:03
Видимо придется придумывать велосипед
Заглянувший
Сообщений: 19 Баллов: 1 Регистрация: 16.01.2014
10.06.2015 20:46:30

Не надо велосипедов, не то событие используете. Тоже столкунулся с этим. Пару часов с дебагером и нашел кое-что.
В методе CSaleDelivery::CalculateFull вызывается следующее:
function __executeCalculateEvents($SID, $profile, $arOrder, $arReturn)
$arEventsList = array(
«onSaleDeliveryHandlerCalculate»,
«onSaleDeliveryHandlerCalculate_».$SID,
);

foreach ($arEventsList as $event)
foreach(GetModuleEvents(«sale», $event, true) as $arEventHandler)
$arReturnTmp = ExecuteModuleEventEx($arEventHandler, array($SID, $profile, $arOrder, $arReturn));
if (is_array($arReturnTmp))
$arReturn = $arReturnTmp;
>
>
>

return $arReturn;
>
Если проще то цепляемся к событию onSaleDeliveryHandlerCalculate .

Заглянувший
Сообщений: 8 Регистрация: 04.08.2011
17.12.2020 12:24:32
Как успехи?
Страницы: 1

Центр поддержки

Продукты

Управление сайтом
Битрикс24
Интернет-магазин + CRM

Решения

Для интернет-магазинов
Каталог готовых решений

Внедрение

Выбрать партнера
Проверить партнера
Стать партнером

1С-Битрикс http://www.1c-bitrix.ru Общие вопросы info@1c-bitrix.ru Приобретение и лицензирование продуктов : sales@1c-bitrix.ru Маркетинг/мероприятия/PR marketing@1c-bitrix.ru Партнерская программа partners@1c-bitrix.ru Мы работаем с 10:00 до 19:00 по московскому времени. Офис в Москве 127287 Россия Московская область Москва 2-я Хуторская улица дом 38А строение 9 Офис в Калининграде +7 (4012) 51-05-64 Офис в Калининграде 236001 Россия Калининградская область Калининград Московский проспект 261 Офис в Киеве ukraine@1c-bitrix.ru Телефон в Киеве +3 (8044)221-55-33 Офис в Киеве 01033 Украина Калининградская область Киев улица Шота Руставели 39/41 офис 1507

Контент для лиц от 16 лет и старше

© 2001-2023 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Политика конфиденциальности

Службы доставки

Доставка товара клиенту — финальная часть работы со сделкой. Перед запуском магазина необходимо настроить способы доставки. По умолчанию доступно два варианта доставки: самовывоз или доставка курьером. Настройте другие способы доставки, чтобы клиент мог выбрать наиболее подходящий для него вариант.

Перейдите в раздел Сайты и Магазины > Платежи и доставка > Службы доставки.

служба_доставки.png

На странице вы увидите сообщение, что нужно задать местоположение вашего магазина для корректного расчёта стоимости доставки.

Чтобы это сделать, перейдите в Настройки > Экспертные настройки > Настройки магазина.

настройки_магазина_доставка.png

В разделе Адрес магазина укажите местоположение магазина или склада, от куда будет осуществляться доставка. Сохраните изменения.

адрес_магазина.png

Существует несколько типов служб доставки:

    Автоматическая — вы подключаете к магазину внешнюю службу, расчёт стоимости и длительности происходит на стороне сервиса.

Вы можете настроить следующие внешние службы доставки: Почта России, DPD, СДЭК, Яндекс Доставка. Предварительно необходимо создать аккаунт и заключить договор на стороне сервиса.

Создадим новую настраиваемую службу, например, доставка квадрокоптером. Для этого нажмите Добавить > Настраиваемая служба доставки.

настраиваемая_служба_доставки.png

На вкладке Общие настройки укажите название и описание. Их увидят клиенты при выборе доставки.

новая_доставка.png

Перейдите на вкладку Настройки обработчика. Задайте стоимость и сроки доставки.

настройки_обработчика.png

Примените настройки, и после появятся ещё две вкладки. Вкладка Ограничения — здесь вы можете задать ограничения по разным свойствам. Квадрокоптер не сможет доставлять слишком тяжелые заказы, поэтому можно добавить ограничение по весу. Чтобы данный вид доставки был доступен, не забудьте указать вес в карточке товара.

ограничения.png

Еще одна вкладка — Дополнительные услуги. Например, клиент может оформить страховку товара на время доставки.

дополнительные_услуги.png

Готово. Теперь покупатель сможет выбрать новый способ доставки при оформлении заказа, а также решить, хочет ли он дополнительную услугу, которая идет с данным типом доставки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *