Обмен с 1С, часть 2. Структура файлов обмена

128
Алексей,

Это продолжение статьи о обмене 1С-Битрикс с 1С, на этот раз речь пойдет о файлах обмена, их видах и структуре xml.

Разница обмена в старых и новых версиях обмена

Структура файлов обмена зависит от версии обмена (старой или новой).
В старой, обмен происходит через 2 файла:

  1. import xml (Содержит структуру разделов, структуру свойств, товары (название, описание, значение свойств)
  2. offers xml (Содержит коммерческую информацию: типы цен, склады, торговые предложения (характеристики (вес, габариты, размер и т.п.), цены, остаток общий, остатки по складам)

В новых версиях модуля, обмен присходит 4 типами файлов, всего файлов 7:

  1. import.xml (1й)
  2. import.xml (2й)
  3. import.xml (3й)
  4. offers.xml (1й)
  5. offers.xml (2й)
  6. rests.xml
  7. prices.xml

Файл import.xml (1й)

Файл import.xml (1й)

Это первый файл который отправляет 1С на сайт, в нем содержится мета-информация: инфоблок, его название, структура разделов, а так же список складов, типы цен и единицы измерения. Конкретной информации по товарам в нем нет, только информация, в виде списков, необходимая для последующего импорта. Например создаётся инфоблок в который будут импортироваться товары.

Параметр [СодержитТолькоИзменения="true"] устаревший и не используется, он не означает что запущен обмен только изменениями.

Файл import.xml (2й)

Файл import.xml (2й)

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

Файл import.xml (3й)

В этом xml уже содержится информация о товарах:

  1. Название, краткое описание (в 1С нет поля под описание товара, поэтому используется поле "полное наименование")
  2. Спец. поля (встроенные в 1С поля: страна, артикул, штрихкод, производитель, единица измерения)
  3. Значения свойств
  4. Значения реквизитов (отличается от свойств тем, что в этом поле могут быть абсолютно разные поля и значения. Выгружается в свойство типа строка с описанием (множественное))
Значения реквизитов

Куда будет выгружаться значение: в свойство или в реквизиты зависит от программиста 1С, как ему было удобнее/как умеет.

Файл offers.xml (1й)

В нем находится мета-информация для торговых предложений: свойства торг. предложений и их варианты значения для свойств типа список. Аналогично как в файле import.xml (1й) для товаров.

Файл offers.xml (1й)

Файл offers.xml (2й)

Файл offers.xml (2й)

Содержит информацию о торговых предложениях:

  1. Название торг. предложения
  2. Спец. поля (штрихкод, и т.п.)
  3. Значения свойств
  4. Характеристики

В этом файле уже нет реквизитов, а будут характеристики. Характеристика это различающийся параметр торг. предложения. Например для обуви это будет размер и/или цвет.

Вне зависимости от того используются на сайте торговые предложения или нет, offers.xml будет всегда, т.к. в 1С данные о товаре разделены. Поэтому import.xml описывает товар как “информационную” единицу, а offers.xml как единицу к покупке.

Файл rests.xml

Файл rests.xml

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

Файл prices.xml

Описывает цены на торг. предложения: цена, значение НДС, включен ли НДС в цену или нет и валюта.

Файл prices.xml

На этом по структуре файлов всё, далее рассмотрим сопоставление значений. Как 1С и 1С-Битрикс понимают что это один и тот же товар, что это одно и тоже свойство.

Сопоставление значений

1С выгружает внешний код ко всем сущностям: к товарам, к свойствам, ко всем значениям свойств. Этот внешний код записывается в поле XML_ID (так же внешний код) в Битриксе. Все сопоставление идет по этому полю.

сопоставление по XML_ID

Например, если по какой-то причине, после обмена создаётся новый инфоблок с товарами (дубль), то необходимо изменить XML_ID в старом инфоблоке, а новый - удалить. Тогда выгрузка пойдёт в старый инфоблок. Т.е. если что-то начало дублироваться, необходимо сверить внешний код 1С и XML_ID в Битрикс.

Или еще пример. К уже существующему сайту пытаются подключить 1С и "синхронизировать" товары. Т.к. внешние коды не совпадают, товары из 1С не привяжутся к товаром в 1С-Битрикс. В этому случае необходимо изменять внешний код по каждому товару, по каждому свойству, значению. Это сложная, долгая и кропотливая работа. Внешний код можно поменять как на сайте, так и внутри 1С, в новых версиях модуля обмена это доступно.

изменение внешнего кода в 1С

Так же возможно настроить выгрузку в несколько инфоблоков. В 1С создаются несколько каталогов (у каждого будет свой идентификатор) и указывается какие группы в какие каталоги выгружать.

Настройка выгрузки свойств

Настройка выгрузки свойств в 1С

В настройках обмена:

  • возможно выбрать какие свойства необходимо выгружать;
  • можно указать какие свойства будут у товаров, а какие у торговых предложений;
  • выбрать тип свойства (справочник или строка, либо HL-cправочник)

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

Версионность обмена

В своё время для оптимизации обмена было добавлено новое поле "НомерВерсии" оно есть практически у каждой сущности: товаров, свойств, цен и т.д. С помощью этого поля битрикс может отслеживать изменилась ли сущность с момента последнего обмена или нет. Номер версии изменяется каждый раз когда сущность редактируется в 1С.
Например если в 1С редактируется товар, то у него меняется номер версии, если редактируется цена, то версия меняется у цены.

В настройках обмена в Битрикс есть галочка "Использовать контрольные суммы элементов для оптимизации обновления каталога".

Использовать контрольные суммы элементов для оптимизации обновления каталога

При включенной галочке Битрикс будет записывать "Номер версии", для того что бы в следующем обмене сначала сравнить номера версий и если они совпадут, то Битрикс не будет обновлять сущность. Если галочка выключена, то номера версий игнорируются. Версионность так же можно настраивать в 1С, там есть настройки для отключения версионности у определенных сущностей. У таких сущностей в поле "НомерВерсии" каждый раз будет добавляться случайное число.

"Не работает обмен 1С с Битрикс", отладка обмена

Если вдруг перестал работать обмен, то самый простой способ понять в чем проблема это посмотреть access_logs в nginx

посмотреть access_logs в nginx

В папке /upload/1c_catalog/ всегда есть файл htacces, по дате его создания можно узнать когда последний раз 1С пыталась выполнить обмен. В логах nginx ищем строки с обращениями к файлу 1c_exchange.php, в случае если сервер отвечает кодом 200 и при этом обмен не работает, то можно попробовать перейти по данному адресу вручную (в браузере) и посмотреть, что отвечает сайт (возможно там какая-то ошибка). Если код ответа не 200, то необходимо разобраться с причиной возврата сервером данного кода. Например код 301 (редирект) может отдаваться когда на сайте настроили редирект вида site.ru -> www.site.ru, а в настройках 1C остался старый путь, тогда обмен будет завершаться с ошибкой.

access_logs помогает понять на чьей стороне проблема. Прежде чем отправить проблему 1С-ку, убедитесь, что на стороне сайта всё работает.

Опубликовано 28 марта 2021 | Обновлено 8 мая 2021
обмен, разработчику, полезное,
Поделиться
Похожие статьи
Как работает обмен Битрикс с 1С. Часть 1 0
Эта вводная часть об устройстве обмена между 1С-Битрикс и 1С, настройке, ошибках и отладке. Всего пл...
Читать дальше »
Алексей,
Комментарии
Зарегистрируйтесь чтобы получать уведомления об ответе
Это продолжение статьи о обмене 1С-Битрикс с 1С, на этот раз речь пойдет о файлах обмена, их видах и структуре xml.