Артём Барышев, подобную задачу с причиной отмены заказа решили через это [URL=https://dev.1c-bitrix.ru/community/webdev/user/72017/blog/30375/]расширение[/URL].
Добавили отдельную выгрузку реквизитов заказа в HL блок. [URL=https://c2n.me/3WFHTdb.png]https://c2n.me/3WFHTdb.png[/URL]
Динамический реквизит причина отмены заказа имеет запрос:
[CODE]// Параметр, возвращающий результат [Результат]
//
// Параметр на данные [СсылкаНаОбъект]
//ПРОСТЕНЬКИЙ ПРИМЕР.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиентаТовары.Ссылка КАК Ссылка,
| СУММА(1) КАК КоличествоСтрок
|ПОМЕСТИТЬ втКоличествоСтрокЗаказа
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ЗаказКлиентаТовары.Ссылка
|;
|
|////////////////////////////////////////////////////////////
////////////////////
|ВЫБРАТЬ
| ЗаказКлиентаТовары.Ссылка КАК Ссылка,
| СУММА(1) КАК КоличествоОтмененныхСтрок,
| МАКСИМУМ(ЗаказКлиентаТовары.ПричинаОтмены) КАК ПричинаОтмены
|ПОМЕСТИТЬ втОтмененныеСтроки
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Ссылка
| И ЗаказКлиентаТовары.Отменено = ИСТИНА
|
|СГРУППИРОВАТЬ ПО
| ЗаказКлиентаТовары.Ссылка
|;
|
|////////////////////////////////////////////////////////////
////////////////////
|ВЫБРАТЬ
| втКоличествоСтрокЗаказа.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ЕСТЬNULL(втКоличествоСтрокЗаказа.КоличествоСтрок, 0) <> 0
| И ЕСТЬNULL(втКоличествоСтрокЗаказа.КоличествоСтрок, 0) = ЕСТЬNULL(втОтмененныеСтроки.КоличествоОтмененныхСтрок, 0)
| И ЕСТЬNULL(втОтмененныеСтроки.КоличествоОтмененныхСтрок, 0) <> 0
| ТОГДА втОтмененныеСтроки.ПричинаОтмены
| КОНЕЦ КАК ПричинаОтмены
|ИЗ
| втКоличествоСтрокЗаказа КАК втКоличествоСтрокЗаказа
| ЛЕВОЕ СОЕДИНЕНИЕ втОтмененныеСтроки КАК втОтмененныеСтроки
| ПО втКоличествоСтрокЗаказа.Ссылка = втОтмененныеСтроки.Ссылка
|;
|
|////////////////////////////////////////////////////////////
////////////////////
|УНИЧТОЖИТЬ втКоличествоСтрокЗаказа
|;
|
|////////////////////////////////////////////////////////////
////////////////////
|УНИЧТОЖИТЬ втОтмененныеСтроки";
Запрос.УстановитьПараметр("Ссылка", [СсылкаНаОбъект]);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
[Результат] = ВыборкаДетальныеЗаписи.ПричинаОтмены;
КонецЦикла;
[/CODE]
На сайте добавили обработчик, который обрабатываем полученную запись в HL блок и записывает причину отмены в заказ.
[CODE]<?php
use Bitrix\Sale;
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('', 'ZakazKlientaOnAfterUpdate', 'OnAfterUpdateZakazKlienta');
function OnAfterUpdateZakazKlienta(\Bitrix\Main\Entity\Event $event) {
$id = $event->getParameter("id");
$isCanceled = false;
$isFulfilled = false;
$update = false;
$entity = $event->getEntity();
$entityDataClass = $entity->GetDataClass();
$eventType = $event->getEventType();
$arFields = $event->getParameter("fields");
/*
* Получаем данные заказа
*/
if(!empty($arFields['UF_BIDENTIFIKATOR'])){
Bitrix\Main\Loader::includeModule("sale");
$order = Sale\Order::load(intval($arFields['UF_BIDENTIFIKATOR']));
$status_id = $order->getField("STATUS_ID");
$canceled = $order->getField("CANCELED");
$reason_canceled = $order->getField("REASON_CANCELED");
if(!empty($arFields['UF_PRICHINAOTMENY'])){
/*
* Заказ отменен
*/
if($canceled !='Y'){
$order->setField('CANCELED', 'Y');
$update = true;
}
if($reason_canceled !=$arFields['UF_PRICHINAOTMENY']){
$order->setField('REASON_CANCELED', $arFields['UF_PRICHINAOTMENY']);
$update = true;
}
}
if($update){
$order->save();
}
}
}
[/CODE]