Синхронизация 1С с интернет-магазином на базе Bitrix — это стандартная задача, однако она превращается в серьезный технический вызов, если товары уже созданы и на стороне сайта, и на стороне 1С. Основная сложность заключается в том, что по умолчанию системы не знают о существовании друг друга и могут создать дубли. Кроме того, при первой же полной выгрузке велик риск перегрузить сервер или затереть качественный контент на сайте (фото, SEO-описания) данными из учетной системы.
В этой статье мы подробно разберем, как установить связь между существующими объектами, настроить безопасный обмен и сделать так, чтобы 1С дополняла сайт, а не разрушала его структуру.
Прежде всего, проанализируем, как Bitrix сопоставляет товары. Главным идентификатором является поле XML_ID (в административной панели Bitrix оно называется «Внешний код»). Если товар выгружается из 1С впервые, система генерирует для него XML_ID на основе уникального идентификатора GUID из 1С. Если же товар уже был создан на сайте вручную, его XML_ID либо пуст, либо содержит случайный набор символов.
Рассмотрим ситуацию: если мы просто запустим выгрузку, Bitrix не найдет совпадений по XML_ID и создаст еще одну карточку товара, даже если названия и артикулы полностью идентичны. Поэтому наша первоочередная задача — сопоставить эти идентификаторы.
В современных официальных модулях обмена от «Битрикс» (начиная с версии 6.х) предусмотрен специальный инструмент «Загрузка данных с сайта». Разберем этот процесс по шагам:
XML_ID всех позиций с сайта.Номенклатура и предложит сопоставить найденные на сайте товары с существующими в 1С по артикулу или наименованию.XML_ID товаров на сайте).Этот метод является наиболее безопасным для новичков, так как позволяет визуально проконтролировать связь каждой позиции.
Если товаров тысячи, ручное сопоставление невозможно. В настройках модуля обмена на стороне 1С можно настроить правила идентификации. Посмотрим, как это работает:
В настройках интеграции, на вкладке «Параметры товаров», можно указать, по каким полям искать соответствие, если XML_ID не совпал. Мы можем выбрать поиск по Артикулу или Наименованию. Проанализируем логику: при получении файла импорта Bitrix сначала ищет товар по XML_ID. Если поиск не дал результата, он проверяет наличие товара с таким же артикулом. Если товар найден, Bitrix автоматически обновляет его XML_ID значением из файла 1С. Все последующие обмены будут проходить уже по стандартному идентификатору.
Для продвинутых пользователей и программистов рассмотрим вариант массового обновления через скрипт на стороне Bitrix. Если у вас есть четкое соответствие (например, артикулы в 1С и на сайте гарантированно совпадают), можно запустить скрипт, который обновит поле EXTERNAL_ID (техническое имя XML_ID) в таблице b_iblock_element.
Пример логики скрипта на PHP для Bitrix:
CModule::IncludeModule("iblock");
$res = CIBlockElement::GetList([], ["IBLOCK_ID" => 10], false, false, ["ID", "PROPERTY_ARTNUMBER"]);
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
// Здесь мы должны знать, какой GUID соответствует этому артикулу в 1С
$xmlIdFrom1C = GetGuidByArtikulFromExternalSource($arFields["PROPERTY_ARTNUMBER_VALUE"]);
$el = new CIBlockElement;
$el->Update($arFields["ID"], ["XML_ID" => $xmlIdFrom1C]);
}
Когда связь установлена, возникает вторая проблема: объем данных. Полная выгрузка может длиться часами и потреблять все ресурсы сервера. Чтобы избежать этого, выполним следующие настройки:
ПланыОбмена.ОбменС Сайтом, но саму выгрузку запустить как «изменения».Часто на сайте работают SEO-специалисты: они пишут красивые тексты и оптимизируют изображения, которых нет в 1С. Чтобы 1С не превратила сайт в «пустыню» с короткими техническими названиями, настроим параметры компонента bitrix:catalog.import.1c на стороне сайта:
Для тонкой настройки первой выгрузки полезно использовать обработку «Регистрация изменений на узлах обмена». Рассмотрим сценарий: нам нужно выгрузить только остатки для уже существующих товаров. Мы можем:
ЦеныНоменклатуры и Запасы.Таким образом, мы добьемся синхронизации без риска создания дублей или удаления нужной информации. Помните, что первая синхронизация — это всегда процесс «притирки» данных, который лучше проводить на тестовой копии сайта.