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

9k
Алексей,

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

Это продолжение статьи о обмене 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 | Обновлено 14 ноября 2021
обмен, разработчику, полезное,
Поделиться
Похожие статьи
Как работает обмен Битрикс с 1С. Часть 1
Эта вводная часть об устройстве обмена между 1С-Битрикс и 1С, настройке, ошибках и отладке. Всего пл...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
4 сен 2024
Добрый день! есть крайне непростая задача: 1с ут 11.4 обмениваться номенклатурой с каталогам сайта но в 1с в номенклатуре и по видам и по папкам просто лютейший бардак, который нельзя показывать клиентам на сайте в номенклатуре предусмотрительно создали реквизиты, которыми хочу задать структуру разделов сайта но обмен на стороне 1с этого сделать не дает есть вопрос, можно ли как-то на стороне 1с-битрикс обработать каталог так, чтобы пересобрать структуру разделов из реквизитов в товаре?
Алексей
4 сен 2024
roman@bykov.pro, можно, если реквизиты со структурой выгружаются на сайт. Нужно будет кастомизировать обмен с сайтом на стороне битрикс и в методе создания/обновления разделов поменять код так, чтобы данные тянулись из реквизитов. Но, проще эту задачу решить иначе. Кастомизируете обмен так, чтобы весь каталог выгружался в один раздел (1С например), деактивируете его и далее руками создаёте нужную структуру каталогов на сайте и руками переносите товары в новую структуру. Не забудьте отключить обновление привязок к разделам при обмене с 1С (опять же в кастомизированном классе обмена). В любом случае, вам нужен разработчик с опытом кастомизации обмена на стороне сайта.
17 мая 2024
Добрый день. Есть самописный обмен с сайтом (Битрикс24) из 1С7.7.файлы грузятся через импорт (xml) инфоблока, в через программный обмен (скрипты битрикс) не грузятся, хотя сайт отвечает, что обмен успешен. (ответы сайта на разных стадиях : progress Распаковка архива завершена. progress Временные таблицы удалены. progress Временные таблицы созданы. progress Файл импорта прочитан. progress Временные таблицы проиндексированы. progress Метаданные импортированы успешно. progress Группы импортированы. progress Деактивация/удаление групп завершено. progress Загрузка элементов завершена. progress Деактивация/Удаление элементов завершены. success Импорт успешно завершен.) В чем может быть проблема? Где смотреть?
Алексей
17 мая 2024
Константин, добрый, не подскажу, не спец по Б24. Если скрипт пишет, что импорт прошел успешно, значит новые сущности были созданы, возможно не там где вы ожидаете их увидеть (ищите).
5 июл 2023
Приветствую! Наткнулся на твой блог, бороздя просторы интернета:) Скажи, при выгрузке заказов из 1С на сайт, в orders.xml добавляем реквизит формата https://skr.sh/sKfTZ3hY817 А как выдернуть этот реквизит на сайте?
Алексей
5 июл 2023
Денис, добрый день. Если стандартно поле никуда не выгружается, выдернуть его можно через кастомизацию компонента bitrix:sale.export.1c Либо создайте новое свойство заказа "Трекномер" и заполняйте в 1С его.
5 июл 2023
Алексей, ну мы и завели свойство в заказе в 1С, заполняем и оно попадает в xml который уходит на сайт. А кастомизировать компонент сложно?
Алексей
5 июл 2023
Денис, а в настройках обмена указали соответствие полей? На странице /bitrix/admin/1c_admin.php?lang=ru вкладка "Профили обмена", внизу "1С доп параметры", пишите "Трекномер" и выбираете нужное свойство заказа.
5 июл 2023
Алексей, Если сопоставлять через профиль обмена, значение из сайта в 1С уходит. А с 1С на сайт нет
Алексей
5 июл 2023
Денис, тогда остаётся только кастомизация компонента. Если опыта нет, то это может оказаться сложной задачей.
14 ноя 2021
Я выгружаю только один файл, rests.xml, достаточно ли его одного? Мне сайт возвращает полный фарш статусов, но при этом ничего не меняется :( progress ¬ременные таблицы удалены. ¬ременные таблицы созданы. Файл импорта прочитан. ¬ременные таблицы проиндексированы. Метаданные импортированы успешно. √руппы импортированы. Деактивация/удаление групп завершено. Обработано 963 из 963 элементов. Загрузка элементов завершена. Деактивация/Удаление элементов завершены. success Импорт успешно завершен.
Алексей
14 ноя 2021
Алексей, опять же, должны совпадать поля "Внешний код" на сайте у торговых предложений с таковым в 1С (поле Ид в xml). Скорее всего у вас они не совпадают, поэтому ничего и не изменяется. Возьмите любой из xml и попробуйте его найти на сайте. Например сделав запрос вида CIBlockElement::GetList([], ['XML_ID' => '#ID предложения из xml#']);
Алексей
14 ноя 2021
Алексей, будет не понятно, напишите на почту, данные есть на странице https://blog.budagov.ru/obo-mne/
14 ноя 2021
Добрый день. Пытаюсь из самописной конфигурации 1С выгрузить остатки на сайт битрикс с использованием типовых механизмов. Все товары на сайте уже созданы, я загрузил их в программу и теперь пытаюсь оправить обратно их остатки. Но не выходит :( Вопрос первый. Как получить ИД уже существующего корневого каталога на сайте? Я пытался наугад писать 0000, пытался анализировать возвращаемую стандартной командой get_catalog информацию, не помогает.
Алексей
14 ноя 2021
Алексей, добрый. Синхронизация происходит по внешнему коду. Для того что бы он показывался на сайте, нужно в настройках модуля "Инфоблоки" поставить галочку у "Показывать код загрузки из внешних источников".
Это продолжение статьи о обмене 1С-Битрикс с 1С, на этот раз речь пойдет о файлах обмена, их видах и структуре xml.