D7 Выборка товаров со свойствами из корзины пользователя

$basket = \Bitrix\Sale\Internals\BasketTable::getList(array(
    'select' => ["*", "PROPS.CODE", "PROPS.VALUE"],
    'filter' => ['FUSER_ID' => \Bitrix\Sale\Fuser::getId(), "ORDER_ID" => 'null'],
    'runtime' => [
        new \Bitrix\Main\ORM\Fields\Relations\OneToMany(
            'PROPS',
            '\Bitrix\Sale\Internals\BasketPropertyTable',
            'BASKET'
        ),
    ]
))->fetchCollection();
foreach($basket as $itemObj) {
    $arItem = $item->collectValues();
    /**
     * @var $obPropsCollection \Bitrix\Main\ORM\Objectify\Collection - коллекция всех свойств
     */
    if ($obPropsCollection = $itemObj->get("PROPS")->getAll()) {
        foreach ($obPropsCollection as $propObj) {
            $arItem["PROPS"][$propObj->getCode()] = $propObj->collectValues();
        }
    }
    $basketItems[$PRODUCT_ID][$arItem["ID"]] = $arItem;
}

D7 Выбора товаров + SKU + разделы одним запросом

Рабочий пример:
$sql = [
    'select' => [
        "ID",
    ],
    'runtime' => [
        new \Bitrix\Main\Entity\ReferenceField( // получим свойство связи с SKU
            'CML2_LINK',
            '\Bitrix\Iblock\PropertyTable',
            [
                "=ref.CODE" => new \Bitrix\Main\DB\SqlExpression('?', 'CML2_LINK'),
            ],
            ["join_type" => "left"]
        ),
        new \Bitrix\Main\Entity\ReferenceField( // получим свойство артикула
            'CML2_ARTICLE',
            '\Bitrix\Iblock\PropertyTable',
            [
                "=ref.CODE" => new \Bitrix\Main\DB\SqlExpression('?', 'CML2_ARTICLE'),
            ],
            ["join_type" => "left"]
        ),
        new \Bitrix\Main\Entity\ReferenceField( // получим свойство штрихкода
            'CML2_BAR_CODE',
            '\Bitrix\Iblock\PropertyTable',
            [
                "=ref.CODE" => new \Bitrix\Main\DB\SqlExpression('?', 'CML2_BAR_CODE'),
            ],
            ["join_type" => "left"]
        ),
        new \Bitrix\Main\Entity\ReferenceField(
            'SKU_LINK_ID',
            '\Bitrix\Iblock\ElementPropertyTable',
            [
                "=this.ID" => "ref.VALUE",
                "=this.CML2_LINK.ID" => "ref.IBLOCK_PROPERTY_ID",
            ],
            ["join_type" => "inner"]
        ),
        new \Bitrix\Main\Entity\ReferenceField(
            'SKU_ITEM',
            '\Bitrix\Iblock\ElementTable',
            [
                "=this.SKU_LINK_ID.IBLOCK_ELEMENT_ID" => "ref.ID",
            ],
            ["join_type" => "left"]
        ),
        new \Bitrix\Main\Entity\ReferenceField(
            'SKU_ITEM_PROPERTY_CML2_ARTICLE',
            '\Bitrix\Iblock\ElementPropertyTable',
            [
                "=this.SKU_ITEM.ID" => "ref.IBLOCK_ELEMENT_ID",
                "=this.CML2_ARTICLE.ID" => "ref.IBLOCK_PROPERTY_ID",
            ],
            ["join_type" => "left"]
        ),
        new \Bitrix\Main\Entity\ReferenceField(
            'SKU_ITEM_PROPERTY_CML2_BAR_CODE',
            '\Bitrix\Iblock\ElementPropertyTable',
            [
                "=this.SKU_ITEM.ID" => "ref.IBLOCK_ELEMENT_ID",
                "=this.CML2_BAR_CODE.ID" => "ref.IBLOCK_PROPERTY_ID",
            ],
            ["join_type" => "left"]
        ),
        new \Bitrix\Main\Entity\ReferenceField(
      'SECTION',
      '\Bitrix\Iblock\SectionTable',
      [
         "=this.IBLOCK_SECTION_ID" => "ref.ID",
      ],
      ["join_type" => "left"]
   ),
   new \Bitrix\Main\Entity\ReferenceField(
      'TOP_SECTION',
      '\Bitrix\Iblock\SectionTable',
      [
         ">this.SECTION.LEFT_MARGIN" => "ref.LEFT_MARGIN",
         "<this.SECTION.RIGHT_MARGIN" => "ref.RIGHT_MARGIN",
         "=ref.DEPTH_LEVEL" => new \Bitrix\Main\DB\SqlExpression('?', '1'),
      ],
      ["join_type" => "left"]
   ),

    ],
    'group' => [
        'ID',
        //'SKU_ITEM.ID',
    ],
    'filter' => [
        "ACTIVE" => "Y",
        "IBLOCK_ID" => $arParams["IBLOCK_ID"], // только товары 
        "!=TOP_SECTION.CODE" => $_SESSION["SKIP_INDEX_SECTION_CODE"],
    ],
    'order' => ['ID' => "ASC"],
    'cache' => ($arParams["CACHE_TYPE"] != "N" ? ["ttl" => $arParams["CACHE_TIME"], "cache_joins" => true] : null),
    'limit' => 50000
];
$iterator = \Bitrix\Iblock\ElementTable::getList($sql);
while ($filtredElementArr = $iterator->fetch()) {
    $ids[] = $filtredElementArr["ID"];
}


Генерируется примерно такой запрос:
SELECT 
   `iblock_element`.`ID` AS `ELEMENT_ID`
FROM `b_iblock_element` `iblock_element` 
LEFT JOIN `b_iblock_property` `iblock_element_cml2_link` ON `iblock_element_cml2_link`.`CODE` = 'CML2_LINK'
LEFT JOIN `b_iblock_property` `iblock_element_cml2_article` ON `iblock_element_cml2_article`.`CODE` = 'CML2_ARTICLE'
LEFT JOIN `b_iblock_property` `iblock_element_cml2_bar_code` ON `iblock_element_cml2_bar_code`.`CODE` = 'CML2_BAR_CODE'
INNER JOIN `b_iblock_element_property` `iblock_element_sku_link_id` ON `iblock_element`.`ID` = `iblock_element_sku_link_id`.`VALUE`
AND `iblock_element_cml2_link`.`ID` = `iblock_element_sku_link_id`.`IBLOCK_PROPERTY_ID`
LEFT JOIN `b_iblock_element` `iblock_element_sku_item` ON `iblock_element_sku_link_id`.`IBLOCK_ELEMENT_ID` = `iblock_element_sku_item`.`ID`
LEFT JOIN `b_iblock_element_property` `iblock_element_sku_item_property_cml2_article` ON `iblock_element_sku_item`.`ID` = `iblock_element_sku_item_property_cml2_article`.`IBLOCK_ELEMENT_ID`
AND `iblock_element_cml2_article`.`ID` = `iblock_element_sku_item_property_cml2_article`.`IBLOCK_PROPERTY_ID`
LEFT JOIN `b_iblock_element_property` `iblock_element_sku_item_property_cml2_bar_code` ON `iblock_element_sku_item`.`ID` = `iblock_element_sku_item_property_cml2_bar_code`.`IBLOCK_ELEMENT_ID`
AND `iblock_element_cml2_bar_code`.`ID` = `iblock_element_sku_item_property_cml2_bar_code`.`IBLOCK_PROPERTY_ID`
LEFT JOIN `b_iblock_section` `iblock_element_section` ON `iblock_element`.`IBLOCK_SECTION_ID` = `iblock_element_section`.`ID`
LEFT JOIN `b_iblock_section` `iblock_element_top_section` ON `iblock_element_section`.`LEFT_MARGIN` > `iblock_element_top_section`.`LEFT_MARGIN`
AND `iblock_element_section`.`RIGHT_MARGIN` < `iblock_element_top_section`.`RIGHT_MARGIN`
AND `iblock_element_top_section`.`DEPTH_LEVEL` = '1'
WHERE UPPER(`iblock_element`.`ACTIVE`) like upper('Y')
AND `iblock_element`.`IBLOCK_ID` = 17
AND (`iblock_element_top_section`.`CODE` IS NULL OR `iblock_element_top_section`.`CODE` not in ('rasprodazha_20'))
ORDER BY `ELEMENT_ID` ASC
LIMIT 0, 50

CMS bitrix таблица b_sale_product2product

В CMS bitrix таблица b_sale_product2product - отвечает за функционал «с этим товаром также покупают»

Штатными средствами можно отключить: Настройки продукта > Настройки модулей > Интернет-магазин > Настройки также продаваемых продуктов.  

Пресет в main.ui.filter

Вот как бы нет нареканий к большущим компонентам main.ui.filter и main.ui.grid, но я нигде не видел рабочий код для передачи данных для пресета фильтра и последующей фильтрации выборки для main.ui.grid.

Фокус в том, что пресет задаётся до вызова этих компонентов, и выбранный "по умолчанию" должен примениться к выборке main.ui.grid.
Что бы это реализовать в компоненте в месте где получаем и проверяем значения фильтра делаем так:
$arResult['GRID']['FILTER_ID'] = (str)$arParams['FILTER_ID];
$arResult['GRID']['FILTER_FIELDS'] =  $arParams['FILTER_FIELDS] // массив полей фильтра
$arResult['GRID']['FILTER_OBJ'] = new Bitrix\Main\UI\Filter\Options($arResult['GRID']['FILTER_ID'], $arParams['FILTER_PRESETS']); // либо запилить пресет прямо в компонент.
$filterData = $arResult['GRID']['FILTER_OBJ']->getFilter($arResult['GRID']['FILTER_FIELDS']); // получили массив для фильтрации

Фильтруем! :)

Все JS события в Bitrix

Свет на поток событий

Скрипт, которым можно пропустить через себя вызовы JS битриксовских событий.
Выполняем в консоли и начинаем видеть поток событий. Благодаря замыканиям, все объекты в логе доступны для инспекции.
let originalBxOnCustomEvent = BX.onCustomEvent;

BX.onCustomEvent = function (eventObject, eventName, eventParams, secureParams)
{
    // onMenuItemHover например выбрасывает в другом порядке
    let realEventName = BX.type.isString(eventName) ?
        eventName : BX.type.isString(eventObject) ? eventObject : null;

    if (realEventName) {
        console.log(
            '%c' + realEventName, 
            'background: #222; color: #bada55; font-weight: bold; padding: 3px 4px;'
        );
    }

    console.dir({
        eventObject: eventObject,
        eventParams: eventParams,
        secureParams: secureParams
    });

    originalBxOnCustomEvent.apply(
        null, arguments
    );
};

Костыль 'автоотправление заявок в DPD' в модуле Bitrix

Есть модуль "Интеграция с DPD" от компании ipolh.
Всё здорово! Много настроек, но вот только нет одной... автоматической отправки заявки по статусу заказа! т.е. обязательно менеджер магазина (или админ) должен нажать кнопочку (точнее 3 кнопки) что бы отправить заявку в DPD!
В поддержке предложили платную доработку, но ковырять код мы привыкли и я допилил это одним событием, прошу к обозрению:
AddEventHandler("sale", "OnOrderAdd", "OnOrderAddHandler");
AddEventHandler("sale", "OnSaleStatusOrder", "LoadDPD");

    function OnOrderAddHandler($ID, $arFields) {
        self::LoadDPD($ID, $arFields['STATUS_ID']);
    }
    function LoadDPD($ORDER_ID, $STATUS_ID){
        if(!$ORDER_ID) return false;
        if($STATUS_ID=="P")
        {// только на статусе "Оплачено"
            \Bitrix\Main\Loader::includeModule('ipol.dpd');
            $_REQUEST['ID'] = $ORDER_ID;
            $_REQUEST['IPOLH_DPD_ACTION'] = 'CREATE_ORDER';
            $_REQUEST['IPOLH_DPD_ORDER']['PICKUP_DATE'] = date("d.m.Y H:i:s",time()+86400); // через сутки
            if (isset($_REQUEST['ID'])) 
            {
                $arOrder  = \CSaleOrder::GetByID($_REQUEST['ID']);
            }
            else
            {
                $arOrder = \CSaleOrder::GetList(
                    $arOrder = [],
                    $arFilter = [
                        \Bitrix\Main\Config\Option::get('ipol.dpd', 'ORDER_ID', 'ID') => $_REQUEST['dID'],
                    ]
                )->Fetch();
            }
            // кусок из модуля 
            $ORDER_ID = \Ipolh\DPD\Utils::getOrderId($arOrder);
            $deliveryCode = \Ipolh\DPD\Delivery\DPD::getDeliveryCode($arOrder['DELIVERY_ID']);
            $profile      = \Ipolh\DPD\Delivery\DPD::getDeliveryProfile($deliveryCode);
            $showButtonAlways = \Bitrix\Main\Config\Option::get('ipol.dpd', 'SHOW_ADMIN_BUTTON', '') == 'ALWAYS';
            if ($profile !== false || $showButtonAlways)
            {
                $entity = \Ipolh\DPD\DB\Order\Table::findByOrder($ORDER_ID, true);
                if (!$entity->id)
                {
                    $errors = $entity->save();
                }
                if (!$entity->isCreated())
                {
                    $entity->fillFromOrder($ORDER_ID);
                }
                $form = new \Ipolh\DPD\Admin\Order\Edit($entity);
                $form->processAndShow();
            }
        }
        elseif($order = CSaleOrder::GetByID($ORDER_ID) && $order['PAY_SYSTEM_ID']==2)
        {// На проверке менеджером
            CSaleOrder::StatusOrder($ORDER_ID, "CH");
        }
    }
Таким образом, этот костыль не ломает модуль, не отключает его обновления но может перестать работать в случае если разработчик модуля изменит метод отправки...

p.s. если разработчик читает это сообщение и собирается внедрить это в модуль "по умолчанию" - прошу отписаться в комментариях или написать в чат сайта!

Кастомизация импорта каталога из 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С.

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

Поддерживаемые узлы ecommerce_2 в импорте каталога из 1С в Bitrix

Расположение языковых конструкций в файле:
/bitrix/modules/iblock/lang/ru/classes/general/cml2.php
<?
$MESS["IBLOCK_XML2_SUM_FORMAT"] = "ФорматСуммы";
$MESS["IBLOCK_XML2_SUM_FORMAT_DELIM"] = "ЧРД";
$MESS["IBLOCK_XML2_CATALOG_NAME"] = "1С Каталог";
$MESS["IBLOCK_XML2_CATALOG_SECTION_NAME"] = "Группа";
$MESS["IBLOCK_XML2_CATALOG_ELEMENT_NAME"] = "Товар";
$MESS["IBLOCK_XML2_ATTRIBUTES"] = "Характеристики";
$MESS["IBLOCK_XML2_ITEM_ATTRIBUTES"] = "ХарактеристикиТовара";
$MESS["IBLOCK_XML2_ITEM_ATTRIBUTE"] = "ХарактеристикаТовара";
$MESS["IBLOCK_XML2_TRAITS"] = "Реквизиты";
$MESS["IBLOCK_XML2_TRAITS_VALUES"] = "ЗначенияРеквизитов";
$MESS["IBLOCK_XML2_BASE_UNIT"] = "БазоваяЕдиница";
$MESS["IBLOCK_XML2_BASE_UNIT_NAME"] = "Базовая единица";
$MESS["IBLOCK_XML2_TAXES"] = "Ставки налогов";
$MESS["IBLOCK_XML2_TAXES_VALUES"] = "СтавкиНалогов";
$MESS["IBLOCK_XML2_TAX_VALUE"] = "Ставка";
$MESS["IBLOCK_XML2_ANONS"] = "Анонс";
$MESS["IBLOCK_XML2_DETAIL"] = "Описание";
$MESS["IBLOCK_XML2_ARTICLE"] = "Артикул";
$MESS["IBLOCK_XML2_MANUFACTURER"] = "Изготовитель";
$MESS["IBLOCK_XML2_PROP_MANUFACTURER"] = "Производитель";
$MESS["IBLOCK_XML2_BX_TAGS"] = "БитриксТеги";
$MESS["IBLOCK_XML2_BX_WORKFLOW"] = "БитриксДокументооборот";
$MESS["IBLOCK_XML2_BX_DETAIL_URL"] = "БитриксURLДеталь";
$MESS["IBLOCK_XML2_BX_SECTION_URL"] = "БитриксURLРаздел";
$MESS["IBLOCK_XML2_BX_LIST_URL"] = "БитриксURLСписок";
$MESS["IBLOCK_XML2_BX_CANONICAL_URL"] = "БитриксURLКанонический";
$MESS["IBLOCK_XML2_BX_DEFAULT_VALUE"] = "БитриксЗначениеПоУмолчанию";
$MESS["IBLOCK_XML2_BX_INDEX_SECTIONS"] = "БитриксИндексироватьРазделы";
$MESS["IBLOCK_XML2_BX_INDEX_ELEMENTS"] = "БитриксИндексироватьЭлементы";
$MESS["IBLOCK_XML2_BX_PICTURE"] = "БитриксКартинка";
$MESS["IBLOCK_XML2_BX_DETAIL_PICTURE"] = "БитриксКартинкаДетальная";
$MESS["IBLOCK_XML2_BX_CODE"] = "БитриксКод";
$MESS["IBLOCK_XML2_BX_FIELDS_COUNT"] = "БитриксКоличествоПолей";
$MESS["IBLOCK_XML2_BX_COLUMNS"] = "БитриксКолонок";
$MESS["IBLOCK_XML2_BX_SECTION_NAME"] = "БитриксНазваниеРаздела";
$MESS["IBLOCK_XML2_BX_SECTIONS_NAME"] = "БитриксНазваниеРазделов";
$MESS["IBLOCK_XML2_BX_ELEMENT_NAME"] = "БитриксНазваниеЭлемента";
$MESS["IBLOCK_XML2_BX_ELEMENTS_NAME"] = "БитриксНазваниеЭлементов";
$MESS["IBLOCK_XML2_LABELS"] = "БитриксПодписи";
$MESS["IBLOCK_XML2_LABEL"] = "БитриксПодпись";
$MESS["IBLOCK_XML2_BX_WITH_DESCRIPTION"] = "БитриксОписаниеРазрешено";
$MESS["IBLOCK_XML2_BX_SEARCH"] = "БитриксПоискРазрешен";
$MESS["IBLOCK_XML2_BX_USER_TYPE"] = "БитриксРасширениеТипа";
$MESS["IBLOCK_XML2_BX_USER_TYPE_SETTINGS"] = "БитриксНастройкиРасширенияТипа";
$MESS["IBLOCK_XML2_BX_LINKED_IBLOCK"] = "БитриксСвязанныйИнфоблок";
$MESS["IBLOCK_XML2_BX_SORT"] = "БитриксСортировка";
$MESS["IBLOCK_XML2_BX_ROWS"] = "БитриксСтрок";
$MESS["IBLOCK_XML2_BX_PROPERTY_TYPE"] = "БитриксТипСвойства";
$MESS["IBLOCK_XML2_BX_LIST_TYPE"] = "БитриксТипСписка";
$MESS["IBLOCK_XML2_BX_FILE_EXT"] = "БитриксТипыФайлов";
$MESS["IBLOCK_XML2_BX_FILTER"] = "БитриксФильтрРазрешен";
$MESS["IBLOCK_XML2_BX_IS_REQUIRED"] = "БитриксОбязательное";
$MESS["IBLOCK_XML2_BX_PROPERTY_FEATURE_LIST"] = "БитриксРасширенныеПараметры";
$MESS["IBLOCK_XML2_CURRENCY"] = "Валюта";
$MESS["IBLOCK_XML2_VALUES_TYPES"] = "ТипыЗначений";
$MESS["IBLOCK_XML2_VALUES_TYPE"] = "ТипЗначений";
$MESS["IBLOCK_XML2_TYPE"] = "Тип";
$MESS["IBLOCK_XML2_TYPE_LIST"] = "Справочник";
$MESS["IBLOCK_XML2_TYPE_NUMBER"] = "Число";
$MESS["IBLOCK_XML2_TYPE_STRING"] = "Строка";
$MESS["IBLOCK_XML2_USER_TYPE_DATE"] = "Даты";
$MESS["IBLOCK_XML2_USER_TYPE_DATETIME"] = "ДатаВремя";
$MESS["IBLOCK_XML2_CHOICE"] = "Вариант";
$MESS["IBLOCK_XML2_CHOICE_VALUES"] = "ВариантыЗначений";
$MESS["IBLOCK_XML2_CHOICE_VALUE"] = "ВариантЗначения";
$MESS["IBLOCK_XML2_SCHEMA_VERSION"] = "ВерсияСхемы";
$MESS["IBLOCK_XML2_PARAMS_PACKAGE"] = "ПараметрПакета";
$MESS["IBLOCK_XML2_OWNER"] = "Владелец";
$MESS["IBLOCK_XML2_GROUP"] = "Группа";
$MESS["IBLOCK_XML2_GROUPS"] = "Группы";
$MESS["IBLOCK_XML2_TIMESTAMP"] = "ДатаФормирования";
$MESS["IBLOCK_XML2_MEASURE"] = "Единица";
$MESS["IBLOCK_XML2_VALUE"] = "Значение";
$MESS["IBLOCK_XML2_VALUE_ID"] = "ИдЗначения";
$MESS["IBLOCK_XML2_PROPERTIES_VALUES"] = "ЗначенияСвойств";
$MESS["IBLOCK_XML2_PROPERTY_VALUES"] = "ЗначенияСвойства";
$MESS["IBLOCK_XML2_PROPERTY_VALUE"] = "ЗначениеСвойства";
$MESS["IBLOCK_XML2_ID_1C_SITE"] = "ИдСайта";
$MESS["IBLOCK_XML2_ID_SITE_1C"] = "СистемныйИд";
$MESS["IBLOCK_XML2_ID"] = "Ид";
$MESS["IBLOCK_XML2_CATALOG_ID"] = "ИдКаталога";
$MESS["IBLOCK_XML2_METADATA_ID"] = "ИдКлассификатора";
$MESS["IBLOCK_XML2_PRICE_TYPE_ID"] = "ИдТипаЦены";
$MESS["IBLOCK_XML2_PICTURE"] = "Картинка";
$MESS["IBLOCK_XML2_PICTURES"] = "Картинки";
$MESS["IBLOCK_XML2_PREVIEW_PICTURE"] = "Картинка анонса";
$MESS["IBLOCK_XML2_CATALOG"] = "Каталог";
$MESS["IBLOCK_XML2_METADATA"] = "Классификатор";
$MESS["IBLOCK_XML2_AMOUNT"] = "Количество";
$MESS["IBLOCK_XML2_COMMERCE_INFO"] = "КоммерческаяИнформация";
$MESS["IBLOCK_XML2_COEFF"] = "Коэффициент";
$MESS["IBLOCK_XML2_MULTIPLE"] = "Множественное";
$MESS["IBLOCK_XML2_FOR_CATALOG"] = "ДляТоваров";
$MESS["IBLOCK_XML2_FOR_OFFERS"] = "ДляПредложений";
$MESS["IBLOCK_XML2_NAME"] = "Наименование";
$MESS["IBLOCK_XML2_TAX"] = "Налог";
$MESS["IBLOCK_XML2_START_TIME"] = "Начало активности";
$MESS["IBLOCK_XML2_END_TIME"] = "Окончание активности";
$MESS["IBLOCK_XML2_DESCRIPTION"] = "Описание";
$MESS["IBLOCK_XML2_TITLE"] = "ОфициальноеНаименование";
$MESS["IBLOCK_XML2_OFFER_LIST"] = "ПакетПредложений";
$MESS["IBLOCK_XML2_BY_DEFAULT"] = "ПоУмолчанию";
$MESS["IBLOCK_XML2_FULL_TITLE"] = "ПолноеНаименование";
$MESS["IBLOCK_XML2_FULL_TITLE2"] = "Полное наименование";
$MESS["IBLOCK_XML2_OFFER"] = "Предложение";
$MESS["IBLOCK_XML2_OFFERS"] = "Предложения";
$MESS["IBLOCK_XML2_VIEW"] = "Представление";
$MESS["IBLOCK_XML2_PROPERTIES"] = "Свойства";
$MESS["IBLOCK_XML2_PROPERTY"] = "Свойство";
$MESS["IBLOCK_XML2_SERIALIZED"] = "Сериализовано";
$MESS["IBLOCK_XML2_SYMBOL_CODE"] = "Символьный код";
$MESS["IBLOCK_XML2_UPDATE_ONLY"] = "СодержитТолькоИзменения";
$MESS["IBLOCK_XML2_SORT"] = "Сортировка";
$MESS["IBLOCK_XML2_STATUS"] = "Статус";
$MESS["IBLOCK_XML2_PRICE_TYPE"] = "ТипЦены";
$MESS["IBLOCK_XML2_PRICE_TYPES"] = "ТипыЦен";
$MESS["IBLOCK_XML2_POSITION"] = "Товар";
$MESS["IBLOCK_XML2_POSITIONS"] = "Товары";
$MESS["IBLOCK_XML2_DELETED"] = "Удален";
$MESS["IBLOCK_XML2_IN_SUM"] = "УчтеноВСумме";
$MESS["IBLOCK_XML2_PRICE"] = "Цена";
$MESS["IBLOCK_XML2_PRICE_FOR_ONE"] = "ЦенаЗаЕдиницу";
$MESS["IBLOCK_XML2_QUANTITY_FROM"] = "КоличествоОт";
$MESS["IBLOCK_XML2_QUANTITY_TO"] = "КоличествоДо";
$MESS["IBLOCK_XML2_PRICES"] = "Цены";
$MESS["IBLOCK_XML2_BAR_CODE"] = "ШтрихКод";
$MESS["IBLOCK_XML2_BAR_CODE2"] = "Штрихкод";
$MESS["IBLOCK_XML2_CATALOG_ELEMENT"] = "Элемент каталога";
$MESS["IBLOCK_XML2_PCS"] = "шт";
$MESS["IBLOCK_XML2_RUB"] = "руб";
$MESS["IBLOCK_XML2_TYPE_ADD_ERROR"] = "Ошибка создания типа информационных блоков.";
$MESS["IBLOCK_XML2_CURRENCY_ERROR"] = "При импорте встретилась валюта цены содержащая не латинские буквы. Цена была импортирована с валютой RUB.";
$MESS["IBLOCK_XML2_DISCOUNTS"] = "СкидкиНаценки";
$MESS["IBLOCK_XML2_DISCOUNT_CONDITION"] = "Условие";
$MESS["IBLOCK_XML2_DISCOUNT_COND_VOLUME"] = "Количество одного товара в документе превысило";
$MESS["IBLOCK_XML2_DISCOUNT_COND_VALUE"] = "ЗначениеУсловия";
$MESS["IBLOCK_XML2_DISCOUNT_COND_PERCENT"] = "Процент";
$MESS["IBLOCK_XML2_WEIGHT"] = "Вес";
$MESS["IBLOCK_XML2_BX_ACTIVE"] = "БитриксАктивность";
$MESS["IBLOCK_XML2_FILE"] = "Файл";
$MESS["IBLOCK_XML2_FILE_DESCRIPTION"] = "ОписаниеФайла";
$MESS["IBLOCK_XML2_FILES"] = "Файлы";
$MESS["IBLOCK_XML2_HTML_DESCRIPTION"] = "ОписаниеВФорматеHTML";
$MESS["IBLOCK_XML2_GROUPS_PROPERTIES"] = "СвойстваГрупп";
$MESS["IBLOCK_XML2_BX_SHOW_IN_LIST"] = "БитриксПоказыватьВСписке";
$MESS["IBLOCK_XML2_BX_EDIT_IN_LIST"] = "БитриксРедактироватьВСписке";
$MESS["IBLOCK_XML2_BX_SETTINGS"] = "БитриксНастройки";
$MESS["IBLOCK_XML2_BX_ORIGINAL_NAME"] = "БитриксОригинальноеНазвание";
$MESS["IBLOCK_XML2_BX_URL"] = "БитриксURL";
$MESS["IBLOCK_XML2_BX_FILE_SIZE"] = "БитриксРазмерФайла";
$MESS["IBLOCK_XML2_BX_FILE_WIDTH"] = "БитриксШиринаИзображения";
$MESS["IBLOCK_XML2_BX_FILE_HEIGHT"] = "БитриксВысотаИзображения";
$MESS["IBLOCK_XML2_BX_FILE_CONTENT_TYPE"] = "БитриксТипФайла";
$MESS["IBLOCK_XML2_UF_ERROR"] = "Ошибка импорта пользовательского свойства (xml_id: #XML_ID#): #ERROR_TEXT#";
$MESS["IBLOCK_XML2_STORE"] = "Склад";
$MESS["IBLOCK_XML2_STORES"] = "Склады";
$MESS["IBLOCK_XML2_STORE_ADDRESS"] = "Адрес";
$MESS["IBLOCK_XML2_STORE_AMOUNT_LIST"] = "КоличествоНаСкладах";
$MESS["IBLOCK_XML2_STORE_AMOUNT"] = "КоличествоНаСкладе";
$MESS["IBLOCK_XML2_STORE_ID"] = "ИдСклада";
$MESS["IBLOCK_XML2_STORE_DESCRIPTION"] = "Комментарий";
$MESS["IBLOCK_XML2_STORE_CANTACTS"] = "Контакты";
$MESS["IBLOCK_XML2_STORE_CONTACTS"] = "Контакты";
$MESS["IBLOCK_XML2_MULTI_STORE_IMPORT_ERROR"] = "Количество импортированных складов превышает разрешённое для данной редакции.";
$MESS["IBLOCK_XML2_SECTION_PROPERTIES"] = "СвойстваЭлементов";
$MESS["IBLOCK_XML2_SMART_FILTER"] = "УмныйФильтр";
$MESS["IBLOCK_XML2_SMART_FILTER_DISPLAY_TYPE"] = "ТипОтображения";
$MESS["IBLOCK_XML2_SMART_FILTER_DISPLAY_EXPANDED"] = "ПоказатьРазвёрнутым";
$MESS["IBLOCK_XML2_SMART_FILTER_HINT"] = "Подсказка";
$MESS["IBLOCK_XML2_PRICE_SB_ADD_ERROR"] = "В редакции Малый Бизнес нет возможности иметь более одного типа цены. Настройте выгрузку из 1С или перейдите на другую редакцию БУС.";
$MESS["IBLOCK_XML2_PRICE_DUP_ERROR"] = "В выгрузке настроены цены с одинаковым названием. Продолжение обмена невозможно.";
$MESS["IBLOCK_XML2_STORE_CONTACT"] = "Контакт";
$MESS["IBLOCK_XML2_STORE_PHONE"] = "Телефон";
$MESS["IBLOCK_XML2_PRODUCTS_SETS"] = "НаборыТоваров";
$MESS["IBLOCK_XML2_PRODUCT_SETS"] = "НаборыТовара";
$MESS["IBLOCK_XML2_PRODUCT_SET"] = "Набор";
$MESS["IBLOCK_XML2_PRODUCT_SET_ITEM"] = "ЭлементНабора";
$MESS["IBLOCK_XML2_INHERITED_TEMPLATES"] = "НаследуемыеШаблоны";
$MESS["IBLOCK_XML2_TEMPLATE"] = "Шаблон";
$MESS["IBLOCK_XML2_OFFERS_CHANGE"] = "ИзмененияПакетаПредложений";
$MESS["IBLOCK_XML2_VERSION"] = "НомерВерсии";
$MESS["IBLOCK_XML2_DELETE_MARK"] = "ПометкаУдаления";
$MESS["IBLOCK_XML2_RESTS"] = "Остатки";
$MESS["IBLOCK_XML2_REST"] = "Остаток";
$MESS["IBLOCK_XML2_BASE_UNITS"] = "ЕдиницыИзмерения";
$MESS["IBLOCK_XML2_CODE"] = "Код";
$MESS["IBLOCK_XML2_FULL_NAME"] = "НаименованиеПолное";
$MESS["IBLOCK_XML2_SHORT_NAME"] = "НаименованиеКраткое";
$MESS["IBLOCK_XML2_INTL_SHORT_NAME"] = "МеждународноеСокращение";
$MESS["IBLOCK_XML2_BASE_UNIT_ADD_ERROR"] = "Ошибка добавления новой единицы измерения (код единицы: #CODE#).";
$MESS["IBLOCK_XML2_EXTERNAL"] = "Внешний";
$MESS["IBLOCK_XML2_HBLOCK_NAME_IS_INVALID"] = "Название справочника должно начинаться с буквы и состоять только из латинских букв и цифр.";
$MESS["IBLOCK_XML2_MODULE_CATALOG_IS_ABSENT"] = "Отсутствует модуль \"Торговый каталог\". Импорт торговых предложений и цен невозможен.";
$MESS["IBLOCK_XML2_LINK"] = "Ссылка";
$MESS["IBLOCK_XML2_FULL_DESCRIPTION"] = "ПолноеОписание";
$MESS["IBLOCK_XML2_TEMPORARY_TABLE_EXIST_ERROR"] = "Временная таблица не существует";
?>

Bitrix Запуск не отправленных event-ов

Для повторной проверки всех событий и запуска записей из таблицы событий b_event, нужно выполнить код:
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define("BX_CRONTAB", true);
define('BX_NO_ACCELERATOR_RESET', true);

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

@set_time_limit(0);
@ignore_user_abort(true);

CEvent::CheckEvents();
вместе с этим можно проверить ошибки на событиях