Синхронизация: 4 города, 4 интернет-магазина, 4 * 1С

Синхронизация: 4 города, 4 интернет-магазина, 4 * 1С


   SOS, беда, катастрофа, компания несет убытки. Отдел продаж не может работать! 4 региональных интернет-магазина синхронизированы с четырьмя системами 1С. Заказы, товары, цены, остатки, отгрузки московского интернет-магазина летят в екатеринбургскую 1С. Четыре 1С-ки одновременно подключаются к сайтам, конфликтуют, интеграция останавливается и сервер "ложиться". 

Вот с такой проблемой сегодня к нам пришел один крупный федеральный интернет-магазин и мы решили его проблему!

Заказчик - крупный интернет-магазин на CMS Битрикс, состоит из 4-х интернет-магазинов на четырех поддоменах для каждого города. Т.е. на сайте  есть несколько регионов продаж. Каждый регион продаж имеет свой   поддомен и свою собственную базу 1С. Каждая 1С-ка выгружает свой   собственный инфоблок товаров и торговых предложений и получает не все   заказы, а оформленные в определенном регионе продаж (в зависимости от 1С-ки). 

Баннер для Х5.jpg

Проблема №1

Заказы из магазина летят в ту 1С-ку,  которая подключилась первой, а должны лететь в 1С-ку своего города. В  итоге в системах учета информация некорректна.

Решение данной задачи лежит на поверхности :

  • У каждого сайта свой  уникальный файл выгрузки, с уникальным названием.  Внутри каждого файла  подключается стандартный файл выгрузки из админки   /bitrix/admin/1c_exchange.php
    <?
    define("IS_EXCHANGE", true);
    require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/admin/1c_exchange.php");
    ?>
  • На сайте написан обработчик на событие OnBeforeProlog, при помощи   которого определяется какие конфиги нужно отдать компоненту   bitrix:catalog.import.1c . 
    $siteID = self::getSiteId();
    Option::set('sale', '1C_SALE_SITE_LIST', $siteID); // Сайт, заказы которого выгружать в "1С:Предприятие"
    Option::set('sale', '1C_SITE_NEW_ORDERS', $siteID); // Сайт, на который добавлять новые заказы и контрагенты
    Option::set('catalog', '1C_SITE_LIST', $siteID); // Привязывать вновь создаваемые инфоблоки к сайтам
    получается так, что настройки переключаются на каждый запрос 1С-ки, но зато без кастомизации ядра.

Проблема  №2

Когда к сайту подключается несколько 1С, то они начинают  конфликтовать, затирать информацию друг друга и мы сталкиваемся с  проблемой - работа 1С-ок асинхронна, т.е 1С-ки могут  обращаться друг к  другу с разницей в секунду. А значит таблица  b_xml_tree перетирается  каждой выгрузкой и мы видим ошибку "SQL Query  Error: INSERT INTO  b_xml_tree (PARENT_ID, LEFT_MARGIN, RIGHT_MARGIN,  DEPTH_LEVEL, NAME)  VALUES (0, 50939, 0, 0, '')</font>[[1146] Table   '*****.b_xml_tree' doesn't exist"

Нужно было найти решение, чтобы каждая 1С-ка использовала свою собственную временную таблицу.

Что было сделано:

  • В решении проблемы помогла статья https://dev.1c-bitrix.ru/community/web...blog/6859/  
    Статья была написана в далеком 2013, прошло уже 5 лет. Код поменялся, но смысл остался прежним. 
    Исправили   конструкторы классов CIBlockCMLImport и CIBlockXMLFile, передали в   недостающие места (к именам временных таблиц SITE_ID) и выгрузка пошла   без ошибок


Готовы обсудить проект?
Готовы обсудить проект?
Заполняя данную форму вы принимаете условия Пользовательского соглашения об использовании сайта, в том числе в части обработки и использования персональных данных