@MMnka

Как вывести статус доставки в составе заказа в 1с битрикс?

Добрый день!
Мне нужно вывести статус отгрузки в составе заказа. Я попыталась это сделать с помощью
<?= htmlspecialcharsbx($shipment['STATUS_NAME'])?>
но мне выводится последнее значение массива. Как я поняла нужно переписывать класс Basket либо Shipment. Подскажите в каком направлении двигаться?
60c839923c7f0327707460.png
60c839ad49689523427420.png
  • Вопрос задан
  • 715 просмотров
Решения вопроса 1
@Firsov36
full-stack web developer
Вы какой-то компонент меняете или свое что-то пишете? Код хотя бы приведите или название компонента, который правите из стандартных, не понятно же. Отталкиваться от "знакомого" $shipment как-то не верно, нужно понимать что в этой переменной.

Как я поняла нужно переписывать класс Basket либо Shipment


Точно не нужно.

Вот накидал код, как получить текст статуса для отгрузок заказа

$orderId = 57024;

\Bitrix\Main\Loader::includeModule('sale');

$order = \Bitrix\Sale\Order::load($orderId);
$shipmentCollection = $order->getShipmentCollection();

/** @var \Bitrix\Sale\Shipment $shipment */
foreach ($shipmentCollection as $shipment) {
    if($shipment->isSystem()) {
        continue;
    }
    
    $statusCode = $shipment->getField('STATUS_ID');
    $statusLang = \Bitrix\Sale\StatusLangTable::getList(
        [
            'filter' => [
                'ID' => $statusCode,
                'LID' => LANGUAGE_ID
            ]
        ]
    )->fetchAll();
    
    var_dump($statusLang);
}


Результат выполнения
array (size=1)
  0 => 
    array (size=4)
      'STATUS_ID' => string 'DN' (length=2)
      'LID' => string 'ru' (length=2)
      'NAME' => string 'Ожидает обработки' (length=33)
      'DESCRIPTION' => string 'Ожидает обработки' (length=33)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rpsv
@rpsv
делай либо хорошо, либо никак
Как я поняла нужно переписывать класс Basket либо Shipment. Подскажите в каком направлении двигаться?

Зачем?

но мне выводится последнее значение массива.

Из какого массива? Значение доставки фактически совпадает со значением в базе? (в админку зайдите в список заказов и проверьте статус, либо напрямую через просмотр таблиц).

Иначе при выводе статуса просто создайте объект заказа Order::load() оттуда вытащите инфу по доставке Order::getShipmentCollections (не точно, загуглите какой метод используется) --- но есть очень большие сомнения что в стандартном компоненте заказа попала не та инфа, скорее всего вы что-то не то читаете

Есть еще такой момент что у вас скорее всего будет 2 доставки - одна служебная, другая выбранная при заказе (если ничего не пофиксили), отфильтровать ее можно по свойству isSystem (тоже не точно, но IDE подскажет какой метод/свойство читать, в документации вроде такого нет, хотя может уже что-то поменялось)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы