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

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

Задача: При оформлении заказа пользователь может выбрать пункт самовывоза (склады магазина). Нужно заполнить свойство заказа адресом пункта и передать в 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.
  • Проходим по результатам запроса и обновляем значение свойства адресом выбранного склада.
  • Сохраняем изменения в заказе.

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

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

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

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

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

Мобильное приложение

от 550 000 руб. от 5-ти недель

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

Сайт компании

от 300 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.