Кастомное добавление товаров в админке для заказов Bitrix

Речь в статье пойдет о создании своего интерфейса для добавления товара в админке битрикса.

Обозначим основные моменты:
1) добавление кнопки

public static function initStartComplect()
    {
        return [
            "BLOCKSET" => __METHOD__,
            "getScripts"  => [static::class, "initComplectScripts"],
        ];
    }

    public static function initComplectScripts($args)
    {
        Asset::getInstance()->addJs('https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js');
        $result = '
            <скрипт>
            setTimeout(function() {
              $("[data-id=basket]").find(".adm-s-gray-title-btn-container").append("Добавить комплект");
            }, 1000);
            
            function addComplect(params)
            {
                var funcName = this.objName+\'.getParamsByProductId\';
                window[funcName] = BX.proxy(function(params, iblockId){this.getParamsByProductId(params, iblockId);}, this);
            
                var popup = new BX.CDialog({
                    content_url: \'/local/tools/comp_search_dialog.php?\'+
                        \'lang=\'+BX.Sale.Admin.OrderEditPage.languageId+
                        \'&LID=\'+BX.Sale.Admin.OrderEditPage.siteId+
                        \'&caller=order_edit\'+
                        \'&func_name=\'+funcName+
                        \'&STORE_FROM_ID=0\',
                    height: Math.max(500, window.innerHeight-400),
                    width: Math.max(800, window.innerWidth-400),
                    draggable: true,
                    resizable: true,
                    min_height: 500,
                    min_width: 800
                });
                BX.addCustomEvent(popup, \'onWindowRegister\', BX.defer(function(){
                    popup.Get().style.position = \'fixed\';
                    popup.Get().style.top = (parseInt(popup.Get().style.top) - BX.GetWindowScrollPos().scrollTop) + \'px\';
                }));
            
                popup.Show();
            };
            <скрипт>
        ';

        return $result;
    }

функция addComplect по сути дублирует стандартный вызов для добавления товара — за исключением что ссылаемся на свой скрипт в котором будет выбор товаров
2) Страница (скрипт) на котором будет расположена выборка выглядит примерно так


4) как передать товар из нашего списка обратно в заказ?
    function selectProduct(productId, productName, iblockId, type) {
        BX.Sale.Admin.OrderBasketObj.getParamsByProductId(
            {
                full_quantity: "",
                id: productId,
                measure: "шт", 
                measureRatio: "1", 
                name: productName,
                quantity: "1", 
                type: type, //4 - для ТП , 1 - для товаров
            },
            iblockId
        );
        return false;
    }

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

Надеюсь это кому то пригодится.