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

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

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

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

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

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

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

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

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

  • Скорость и SEO

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

Блог-note

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