Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

Просмотров: 8708
Проблема: Заказы, на сайте, обрабатываются только в 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(); что бы в переборе не было этой системной отгрузки. Она не влияет на смену статуса и печать чека.

Сменить статус оплаты и отгрузки при выполнении заказа

Другая задача: после при смене статуса заказа на финальный, F (обычно "F значит Выполнен") нужно пометить все оплаты как оплаченные, разрешить и отгрузить все отгрузки.

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

AddEventHandler("sale", "OnSaleStatusOrder", "OrderComplete");
function OrderComplete($orderID, &$arFields)
{
    if ($arFields == 'F') {
        Bitrix\Main\Loader::includeModule('sale');
        $order = \Bitrix\Sale\Order::load($orderID);
        // Если не оплачен - полностью оплачиваем
        if (!$order->isPaid()) {
            $paymentCollection = $order->getPaymentCollection();
            // Проходим по всем оплатам- может быть не одна
            foreach ($paymentCollection as $payment) {
                $payment->setPaid('Y');
            }
        }
        // Разрешаем и отгружаем все отгрузки - кроме системной
        $collection = $order->getShipmentCollection()->getNotSystemItems();
        foreach ($collection as $shipment) {
            // Разрешаем отгрузку
            $shipment->allowDelivery();
            // Отгружаем
            $shipment->setField('DEDUCTED', 'Y');
        }
        // И сохраняем
        $order->save();
    }
}
Услуги

Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.

Включено в стоимость разработки

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

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс