Обмен с 1С, часть 2. Структура файлов обмена
Это продолжение статьи о обмене 1С-Битрикс с 1С, на этот раз речь пойдет о файлах обмена, их видах и структуре xml.
Разница обмена в старых и новых версиях обмена
Структура файлов обмена зависит от версии обмена (старой или новой).
В старой, обмен происходит через 2 файла:
- import xml (Содержит структуру разделов, структуру свойств, товары (название, описание, значение свойств)
- offers xml (Содержит коммерческую информацию: типы цен, склады, торговые предложения (характеристики (вес, габариты, размер и т.п.), цены, остаток общий, остатки по складам)
В новых версиях модуля, обмен присходит 4 типами файлов, всего файлов 7:
- import.xml (1й)
- import.xml (2й)
- import.xml (3й)
- offers.xml (1й)
- offers.xml (2й)
- rests.xml
- prices.xml
Файл import.xml (1й)
Это первый файл который отправляет 1С на сайт, в нем содержится мета-информация: инфоблок, его название, структура разделов, а так же список складов, типы цен и единицы измерения. Конкретной информации по товарам в нем нет, только информация, в виде списков, необходимая для последующего импорта. Например создаётся инфоблок в который будут импортироваться товары.
Параметр [СодержитТолькоИзменения="true"] устаревший и не используется, он не означает что запущен обмен только изменениями.
Файл import.xml (2й)
В этом файле 1С присылает структуру свойств и их варианты значений (для типа список). Опять же, в этом файле нет конкретной информации по значениям свойств товаров, только мета-информация.
Файл import.xml (3й)
В этом xml уже содержится информация о товарах:
- Название, краткое описание (в 1С нет поля под описание товара, поэтому используется поле "полное наименование")
- Спец. поля (встроенные в 1С поля: страна, артикул, штрихкод, производитель, единица измерения)
- Значения свойств
- Значения реквизитов (отличается от свойств тем, что в этом поле могут быть абсолютно разные поля и значения. Выгружается в свойство типа строка с описанием (множественное))
Куда будет выгружаться значение: в свойство или в реквизиты зависит от программиста 1С, как ему было удобнее/как умеет.
Файл offers.xml (1й)
В нем находится мета-информация для торговых предложений: свойства торг. предложений и их варианты значения для свойств типа список. Аналогично как в файле import.xml (1й) для товаров.
Файл offers.xml (2й)
Содержит информацию о торговых предложениях:
- Название торг. предложения
- Спец. поля (штрихкод, и т.п.)
- Значения свойств
- Характеристики
В этом файле уже нет реквизитов, а будут характеристики. Характеристика это различающийся параметр торг. предложения. Например для обуви это будет размер и/или цвет.
Вне зависимости от того используются на сайте торговые предложения или нет, offers.xml будет всегда, т.к. в 1С данные о товаре разделены. Поэтому import.xml описывает товар как “информационную” единицу, а offers.xml как единицу к покупке.
Файл rests.xml
Остатки торговых предложения на складах. В 1С-Битрикс остатки на складах выводятся только в качестве информации, а основной остаток один, находится в поле "Доступное количество" Поэтому во время импорта все остатки по складам складываются и записываются в это поле.
Файл prices.xml
Описывает цены на торг. предложения: цена, значение НДС, включен ли НДС в цену или нет и валюта.
На этом по структуре файлов всё, далее рассмотрим сопоставление значений. Как 1С и 1С-Битрикс понимают что это один и тот же товар, что это одно и тоже свойство.
Сопоставление значений
1С выгружает внешний код ко всем сущностям: к товарам, к свойствам, ко всем значениям свойств. Этот внешний код записывается в поле XML_ID (так же внешний код) в Битриксе. Все сопоставление идет по этому полю.
Например, если по какой-то причине, после обмена создаётся новый инфоблок с товарами (дубль), то необходимо изменить XML_ID в старом инфоблоке, а новый - удалить. Тогда выгрузка пойдёт в старый инфоблок. Т.е. если что-то начало дублироваться, необходимо сверить внешний код 1С и XML_ID в Битрикс.
Или еще пример. К уже существующему сайту пытаются подключить 1С и "синхронизировать" товары. Т.к. внешние коды не совпадают, товары из 1С не привяжутся к товаром в 1С-Битрикс. В этому случае необходимо изменять внешний код по каждому товару, по каждому свойству, значению. Это сложная, долгая и кропотливая работа. Внешний код можно поменять как на сайте, так и внутри 1С, в новых версиях модуля обмена это доступно.
Так же возможно настроить выгрузку в несколько инфоблоков. В 1С создаются несколько каталогов (у каждого будет свой идентификатор) и указывается какие группы в какие каталоги выгружать.
Настройка выгрузки свойств
В настройках обмена:
- возможно выбрать какие свойства необходимо выгружать;
- можно указать какие свойства будут у товаров, а какие у торговых предложений;
- выбрать тип свойства (справочник или строка, либо HL-cправочник)
HL-справочник используется когда необходимо дополнить информацией значения свойств. Например в 1С цвета забиты в виде строки, а нам в фильтре на сайте необходимо выводить в виде палитры. Т.е. 1С выгрузит значения в справочник, а менеджер вручную может добавить иконки к каждому цвету, которые и будут показываться в фильтре.
Версионность обмена
В своё время для оптимизации обмена было добавлено новое поле "НомерВерсии" оно есть практически у каждой сущности: товаров, свойств, цен и т.д.
С помощью этого поля битрикс может отслеживать изменилась ли сущность с момента последнего обмена или нет.
Номер версии изменяется каждый раз когда сущность редактируется в 1С.
Например если в 1С редактируется товар, то у него меняется номер версии, если редактируется цена, то версия меняется у цены.
В настройках обмена в Битрикс есть галочка "Использовать контрольные суммы элементов для оптимизации обновления каталога".
При включенной галочке Битрикс будет записывать "Номер версии", для того что бы в следующем обмене сначала сравнить номера версий и если они совпадут, то Битрикс не будет обновлять сущность. Если галочка выключена, то номера версий игнорируются. Версионность так же можно настраивать в 1С, там есть настройки для отключения версионности у определенных сущностей. У таких сущностей в поле "НомерВерсии" каждый раз будет добавляться случайное число.
"Не работает обмен 1С с Битрикс", отладка обмена
Если вдруг перестал работать обмен, то самый простой способ понять в чем проблема это посмотреть access_logs в nginx
В папке /upload/1c_catalog/ всегда есть файл htacces, по дате его создания можно узнать когда последний раз 1С пыталась выполнить обмен. В логах nginx ищем строки с обращениями к файлу 1c_exchange.php, в случае если сервер отвечает кодом 200 и при этом обмен не работает, то можно попробовать перейти по данному адресу вручную (в браузере) и посмотреть, что отвечает сайт (возможно там какая-то ошибка). Если код ответа не 200, то необходимо разобраться с причиной возврата сервером данного кода. Например код 301 (редирект) может отдаваться когда на сайте настроили редирект вида site.ru -> www.site.ru, а в настройках 1C остался старый путь, тогда обмен будет завершаться с ошибкой.
access_logs помогает понять на чьей стороне проблема. Прежде чем отправить проблему 1С-ку, убедитесь, что на стороне сайта всё работает.
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.