Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Автоматически отгрузить заказ и сменить статус отгрузки, при выполнении заказа.

Просмотров: 950

Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузками и обменивается только статусами: "Принят", "Оплачен" и "Выполнен". Но, по закону, после выполнения заказа нужно отправлять на печать второй чек (чек отгрузки). Что бы сайт напечатал второй чек- статус отгрузки заказа должен быть переведен в "Отгружено".

Задача: так как менеджеры не хотят заходить на сайт и вручную переключать статус отгрузки, нужно делать это автоматически, при переходе статуса заказа в "Выполнен", который приходит из 1С.

Переключам статус доставки в "Разрешена" и "Отгружена"

Тут все штатно: переходим в "Настройки -> Настройки продукта -> Настройки модулей -> Интернет-магазин" и на вкладке Автоматизация процессов выставляем разрешение доставки при переводе заказа в статус "Оплачен" и смену отгрузки на "Отгружен" при отгрузке заказа.

Автоматически отгрузить заказ и сменить статус отгрузки, при выполнении заказа.

Отгружаем заказ при выполнении

А теперь, осталось только отгрузить заказ при смене статуса на "Выполнен". Для этого создаем или добавляем в /local/php_interface/init.php (если уже есть):

use Bitrix\Main\Loader;
AddEventHandler("sale", "OnSaleStatusOrder", "OrderComplete");
function OrderComplete($orderID, &$arFields)
{
    if ($arFields == 'F') {
        Loader::includeModule("sale");
        $order = \Bitrix\Sale\Order::load($orderID);
        $collection = $order->getShipmentCollection()->getNotSystemItems();
        foreach ($collection as $shipment)
        {
            $shipment->setField('DEDUCTED', 'Y');
        }
        $order->save();
    }
}  
  • С помощью события OnSaleStatusOrder отслеживаем изменение статуса заказа.
  • Если заказ перешел в статус "Выполнен" $arFields == 'F'
  • Загружаем заказ по его ID, получаем все отгрузки заказа и в цикле переключаем статус на "Отгружен" $shipment->setField('DEDUCTED', 'Y');
  • Сохраняем заказ $order->save();

Обратите внимание: у каждого заказа есть скрытая, системная отгрузка и ее нельзя изменять (в общем-то и не получится, выдаст исключение). Отгрузки получаем с помощью $order->getShipmentCollection()->getNotSystemItems(); что бы в переборе не было этой системной отгрузки. Она не влияет на смену статуса и печать чека.

На этом все. Выполненные заказы будут сами отгружаться и переводиться в статус "Отгружен", с последующей печатью второго чека.

Михаил Базаров 25.09.2022
В заметке использовано старое событие, оно работает немного быстрее.
Но, тоже самое на D7

Код
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnSaleStatusOrderChange', ['Handler', 'OnSaleStatusOrderChange']);
class Handler {
    function OnSaleStatusOrderChange($event)
    {
        $parameters = $event->getParameters();
        if ($parameters['VALUE'] === 'F')
        {
            Loader::includeModule("sale");
            $order = \Bitrix\Sale\Order::load($orderID);
            $collection = $order->getShipmentCollection()->getNotSystemItems();
            foreach ($collection as $shipment)
            {
                $shipment->setField('DEDUCTED', 'Y');
            }
            $order->save();
        }
        return new \Bitrix\Main\EventResult(
            \Bitrix\Main\EventResult::SUCCESS
        );
    }
}

Записная книжка разработчика

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

Вывести разделы инфоблока по первым буквам не меняя структуру каталог... Просмотров: 2502 Например: у нас есть инфоблок с большим количеством разделов. И мы хотим, на сайте разбить... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 12604 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв... Вывести новости из конкретного раздела инфоблока Битрикс Просмотров: 55236 Бывает что требуется вывести конкретные новости или статьи из одного раздела инфоблока в Б... Сравнение двух типов цен для иммитации системы скидок, в Битрикс Просмотров: 6819 Встала задачка, иммититровать систему скидок в интернет магазине на Битрикс. Из 1С-УТ, на ... Memcached на сайте под управлением битрикс, при использовании Веб Окр... Просмотров: 7819 Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования ... Вывод даты создания элемента в правильном формате в Битрикс Просмотров: 23239 Если нужно вывести дату создания новости, статьи или товара в каталоге, в принципе любого ... Перенос Битрикс сайта с хостинга на хостинг, инструкция Просмотров: 27390 Достаточно часто спрашивают как перенести сайт работающий на 1С Битрикс с одного хостинга ... Подключение jquery из ядра битрикс и объединение своих скриптов в оди... Просмотров: 20892 Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие г... Создание PWA для сайта на 1С-Битрикс Просмотров: 3266 Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего ... Ссылка и название раздела в списке новостей Битрикс Просмотров: 11467 Если нужно вывести название раздела инфоблока в котором находится конкретный элемент/новос... Малая корзина Битрикс, упрощенный шаблон Просмотров: 13606 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 18757 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: И... Просмотров: 3430 В этой заметке расскажу как настроить синхронизацию между 1С:предприятие и "1С-Битрикс24: ... Адаптивное гамбургер меню для битрикс Просмотров: 15139 Заметка коротенькая, но решил оставить ее - так как самому часто нужно нечто подобное. В а... FTP доступ на Виртуальной машине Битрикс Просмотров: 17247 Бывает что нужно открыть FTP доступ к заранее известной папке на сайте под управлением 1С ... Добавить свойство в административную форму заказа Просмотров: 3759 Задача, кастомизировать административную форму заказа: добавить свойство заказа в шапку фо... Композитный сайт на 1С-Битрикс Просмотров: 3600 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Сгенерировать скидочные купоны, при заказе и отправить на почту Просмотров: 1693 Задача: после того как пользователь сделал заказ, нужно сгенерировать одноразовые купоны д... Самодельная форма добавления элемента на API Битрикс Просмотров: 45278 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Как подобрать редакцию Битрикс под задачи Просмотров: 7019 Последнее время, все чаще, при общении с заказчиками, сталкиваюсь с вопросом "— К...