Обмен заказами БУС с 1С (какие поля участвуют)

URL: /bitrix/admin/1c_exchange.php?type=sale

Обмен заказами начинается с авторизации с помощью логина и пароля, который указали в настройках обмена. После авторизации сайт выдает ID сессии, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=checkauth.

После получения ID сессии идёт инициализация обмена, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=init&sessid=ID_Сессии. На этом этапе сайт отдаёт настройки обмена со стороны сайта.

Для получения списка заказов запрашивается URL /bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=ID_Сессии. Выгружаются заказы с полями EXTERNAL_ORDER = "N", UPDATED_1C = "N" и обновившиеся после последней успешной выгрузки в 1С (это проверяется по времени из свойства "last_export_time_committed_/bitrix/admin/1c_excha" модуля sale).

Флаг EXTERNAL_ORDER указывает, что заказ создан в 1С и его выгрузка в 1С не требуется.

Флаг UPDATED_1C после успешного импорта из 1С на сайте устанавливается в "Y" и такие заказы не участвуют в дальнейших экспортах до их обновления на сайте. Во время обновлений заказов на сайте UPDATED_1C устанавливается в "N".

Кастомизация импорта каталога из 1С в Bitrix

Для начала ссылки на сторонние статьи:
Итак, из всех статей выше мы можем заключить, что обмен проходит через файл /bitrix/admin/1c_exchange.php
посмотрев этот файл мы понимаем, что импорт каталога происходит через компонент catalog.import.1c

Вынесем этот компонент для кастомизации (перенесём папку /bitrix/components/bitrix/catalog.import.1cв /local/components/bitrix/catalog.import.1c)
Далее смотрим в созданной папке файл component.php и прочитав немного код, понимаем, что вся логика происходит в классе CIBlockCMLImport... значит нам нужно "отпочковаться" от него и откорректировать некоторые методы (например ImportSection и ImportElement - отвечающие за сбору массива из XML)

Собственно делаем вышеописанное, создав в папке /local/components/bitrix/catalog.import.1c/ файл EX_CIBlockCMLImport.php со следующим кодом:
<?php
use Bitrix\Main,
   Bitrix\Iblock,
   Bitrix\Catalog;

IncludeModuleLangFile(__FILE__);

/**
 * дорабатываем класс под свои нужды
 */
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/classes/general/cml2.php");

class EX_CIBlockCMLImport extends CIBlockCMLImport
{
   // Обмен разделами
   function ImportSection($xml_tree_id, $IBLOCK_ID, $parent_section_id)
   {
      
   }
   // Обмен элементами
   function ImportElement($arXMLElement, &$counter, $bWF, $arParent)
   {

   }
}
Расширяемый класс CIBlockCMLImport находится в файле /bitrix/modules/iblock/classes/general/cml2.php
Далее нам следует заменить ВСЕ вызовы класса CIBlockCMLImport в файле /local/components/bitrix/catalog.import.1c/component.php на строку EX_CIBlockCMLImport, и в начале этого файла подключить наш файл строчкой
require_once(__DIR__."/EX_CIBlockCMLImport.php"); // подключаем расширение класса

Всё! Теперь обмен с 1С будет происходить через наш класс EX_CIBlockCMLImport где мы можем легко изменить любую логику скопировав соответствующий метод из файла /bitrix/modules/iblock/classes/general/cml2.php Очень сжато и кратко это и есть весь ужас и недопонимание кастомизации обмена каталогом БУС и 1С.

Если есть вопросы или что-то написано не верно - прошу в комментарии!