Меню

Заполнить свойство заказа выбранным пунктом самовывоза и передать в 1С

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

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

Создаем свойство и передаем в 1С как дополнительный реквизит

Переходим в свойства заказа и создаем новое свойство: тип строка, системное, код свойства "ADRESS_STORE_GET", обязательное со значением по умолчанию "-".

1.png

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

2.png

Далее, в настройках обмена с 1С, на вкладке "Профили обмена", в самом низу добавляем новый реквизит:
"Пункт самовывоза" => "Свойство заказа" => "Пункт самовывоза".

3.png

Теперь при выборе службы доставки "Самовывоз" будет создаваться скрытое (от пользователя) свойство "Пункт самовывоза" со значением "-".

Получаем выбранный пункт самовывоза и меняем значение свойства

Нам нужно вместо "-" перезаполнить свойство адресом выбранного магазина/склада. Для этого открываем шаблон компонента оформления заказа и в файл confirm.php добавляем код:

$order = \Bitrix\Sale\Order::load($arResult['ORDER']['ID']);
$collection = $order->getPropertyCollection();
$shipments = $order->getShipmentCollection();
foreach ($shipments as $shipment) {
    if (!$shipment->isSystem()) {
        $storeId = $shipment->getStoreId();
        if ($storeId > 0) {
            $dbList = \CCatalogStore::GetList(
                array(
                    'ID' => 'DESC'
                ),
                array(
                    'ID' => $storeId
                ),
                false,
                false,
                array(
                    'ID',
                    'ADDRESS',
                    'DESCRIPTION' // Не обязательно, но можете получить все поля склада через '*'
                )
            );
            if ($store = $dbList->Fetch()) {
                // Меняем значение свойства ADRESS_STORE_GET
                $dbResOrdVals = \Bitrix\Sale\PropertyValueCollection::getList([
                    'select' => [
                        'ID',
                        'CODE' // В целом, тоже не нужен
                    ],
                    'filter' => [
                        '=ORDER_ID' => $arResult['ORDER']['ID'],
                        '=CODE' => 'ADRESS_STORE_GET'
                    ]
                ]);
                while ($itemProp = $dbResOrdVals->fetch()) {
                    $propertyValue = $collection->getItemById($itemProp['ID']);
                    $r = $propertyValue->setField('VALUE', $store['ADDRESS']);
                    $order->save();
                }
            }
        }
    }
}

Этот файл срабатывает после успешного оформления заказа, когда собственно заказ уже создан. Мы знаем его ID и далее:

  • Загружаем заказ с использованием ID заказа из массива $arResult["ORDER"]['ID'].
  • Получаем коллекцию свойств заказа.
  • Получаем коллекцию отгрузок заказа.
  • Проходим по каждой отгрузке в коллекции.
  • Проверяем, что отгрузка не является системной.
  • Получаем ID склада из отгрузки. Здесь я получаю и описание склада, но это не обязательно - мне нужен только адрес.
  • Если ID склада больше нуля, выполняем запрос к базе данных, чтобы получить информацию о складе.
  • Если запрос вернул результат, получаем адрес склада.
  • Выполняем запрос для получения свойства заказа с кодом ADRESS_STORE_GET.
  • Проходим по результатам запроса и обновляем значение свойства адресом выбранного склада.
  • Сохраняем изменения в заказе.
Михаил Базаров 01.08.2024
Получение информации о cкладе на D7 (в заметке использован старый метод):
Код
 $store = Bitrix\Catalog\StoreTable::getList([
  'filter' => [
       'ID' => $storeId
   ],
   'select' => [
       'ID', 
       'ADDRESS', 
       'DESCRIPTION'
   ],
])->fetch();

Стоимость и сроки разработки сайтов и приложений

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

Интернет магазин: разработка с нуля от 450 000 руб.
от 5-ти недель

Cоздание интернет-магазина на 1С-Битрикс. Разработка с нуля, оптимизация кода и производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Интернет-магазин на готовом решении от 60 000 руб.
от 7-ми дней

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

Мобильное приложение от 300 000 руб.
от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Опросник на разработку. После ознакомления, задам уточняющие вопросы и оценю проект по стоимости и срокам разработки.