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

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

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

Проблема: Заказы, на сайте, обрабатываются только в 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-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Вывести минимальную и максимальную цену в разделе каталога Битрикс. Просмотров: 2135 Что бы вывести минимальную и максимальную стоимость товаров, из каталога 1С-Битрикс, доста... Данные о текущем разделе каталога вывести в section.php Просмотров: 3078 Если нужно получить какие-то данные о текущем разделе, которых нет в изначальном массиве, ... Дополнительные картинки в новостях Битрикс, почти фотогалерея. Просмотров: 48000 Частенько стоит задача, по мимо стандартных "Картинка для анонса" и "Деталь... Создание скидки на общую сумму покупки в Битрикс корзине Просмотров: 26907 Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать м... Вывести свойство привязка к Яндекс Картам в Битрикс Просмотров: 18143 Часто бывает нужно вывести свойство привязка к Яндекс карте в детальном описании элемента... Массово: применить наценку ко всем товарам каталога с пересчетом от б... Просмотров: 5542 Рассмотрим как, в магазине работающем на 1С-битрикс, массово применить наценку на все това... Вывести новости из конкретного раздела инфоблока Битрикс Просмотров: 53388 Бывает что требуется вывести конкретные новости или статьи из одного раздела инфоблока в Б... Получение местоположений через API Битрикс c поиском по select. Просмотров: 21257 Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Би... Смена вида карточек товаров в catalog.section с иммитацией AJAX Просмотров: 782 Смену вида карточек товаров, в разделе каталога, можно реализовать с помощью сессии, запис... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 6114 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... Автоматически отгрузить заказ и сменить статус отгрузки, при выполнен... Просмотров: 320 Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузка... Правильное подключение стилей и скриптов в Битрикс Просмотров: 80470 Есть несколько способов подключения файлов стилей и скриптов, при верстке шаблонов в систе... Привязка к разделам в компоненте "Добавления элементов пользователем" Просмотров: 12032 В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - котор... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 8207 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Старые шаблоны битрикс для простой верстки Просмотров: 16888 Новые версии типового интернет-магазина, который идет в комплекте с Битрикс (от 12 версии ... Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства э... Просмотров: 5694 Задачка: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особе... Как подобрать редакцию Битрикс под задачи Просмотров: 6320 Последнее время, все чаще, при общении с заказчиками, сталкиваюсь с вопросом "— К... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 14950 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Вывод даты создания элемента в правильном формате в Битрикс Просмотров: 21619 Если нужно вывести дату создания новости, статьи или товара в каталоге, в принципе любого ... Определить местоположение пользователя и показать магазины поблизости... Просмотров: 1143 Задача: в мобильном приложении, которое открывает сайт на 1С-Битрикс внутри себя, нужно оп...