ошибка импорта метаданных ошибка добавления новой единицы измерения код единицы
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения
Здравствуйте, выдает ошибку при интеграции с сайтом:
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: )
Начало обмена узла Обмен с сайтом
Очистка регистра пакетов обмена.
Очистка регистра пакетов обмена завершена.
Выгрузка информации по товарам.
Формирование пакета для общих данных для товаров.
Формирование пакетов для каталога: Основной каталог товаров
Формирование пакетов для каталога: Основной каталог товаров Завершено
Формирование пакета для для общих данных для товаров завершено.
Выгрузка пакетов общей информации в в XML.
Выгрузка пакета общей информации каталога: Основной каталог товаров
Выгрузка пакетов каталога: Основной каталог товаров
Выгрузка справочных данных.
Выгрузка групп в XML.
Выгрузка групп в XML завершено. Выгружено 109 элементов.
Выгрузка единиц измерения в XML.
Выгрузка единиц измерения в XML завершено. Выгружено 11 элементов.
Выгрузка складов в XML.
Выгрузка складов в XML завершено. Выгружено 8 элементов.
Выгрузка типов цен в XML.
Выгрузка типов цен в XML завершено. Выгружено 1 элементов.
Отправка запроса на авторизацию.
Отправка запроса на инициализацию, для определения версии обмена данных.
Процес выполнения обмена: Распаковка архива завершена.
Процес выполнения обмена: Временные таблицы удалены.
Процес выполнения обмена: Временные таблицы созданы.
Процес выполнения обмена: Файл импорта прочитан.
Процес выполнения обмена: Временные таблицы проиндексированы.
import___d8813995-aacc-43ce-a33b-11ed1817f5f3.xml: Произошла ошибка на стороне сервера.
Ответ сервера:
failure
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: ).
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения
Здравствуйте, выдает ошибку при интеграции с сайтом:
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: )
Начало обмена узла Обмен с сайтом
Очистка регистра пакетов обмена.
Очистка регистра пакетов обмена завершена.
Выгрузка информации по товарам.
Формирование пакета для общих данных для товаров.
Формирование пакетов для каталога: Основной каталог товаров
Формирование пакетов для каталога: Основной каталог товаров Завершено
Формирование пакета для для общих данных для товаров завершено.
Выгрузка пакетов общей информации в в XML.
Выгрузка пакета общей информации каталога: Основной каталог товаров
Выгрузка пакетов каталога: Основной каталог товаров
Выгрузка справочных данных.
Выгрузка групп в XML.
Выгрузка групп в XML завершено. Выгружено 109 элементов.
Выгрузка единиц измерения в XML.
Выгрузка единиц измерения в XML завершено. Выгружено 11 элементов.
Выгрузка складов в XML.
Выгрузка складов в XML завершено. Выгружено 8 элементов.
Выгрузка типов цен в XML.
Выгрузка типов цен в XML завершено. Выгружено 1 элементов.
Отправка запроса на авторизацию.
Отправка запроса на инициализацию, для определения версии обмена данных.
Процес выполнения обмена: Распаковка архива завершена.
Процес выполнения обмена: Временные таблицы удалены.
Процес выполнения обмена: Временные таблицы созданы.
Процес выполнения обмена: Файл импорта прочитан.
Процес выполнения обмена: Временные таблицы проиндексированы.
import___d8813995-aacc-43ce-a33b-11ed1817f5f3.xml: Произошла ошибка на стороне сервера.
Ответ сервера:
failure
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: ).
6d99b299-9f50-11e5-80c0-60a44c2f8494
AAAAAAAAAAE=
false
шт
Хотя в 1С УТ 11.3 все свойства единиц измерения занесены
Нашел проблему, в этом постаралась фирма 1С. До обновления по моему было два справочника упаковка и единицы измерения.
Если вы создавали когда то виды для упаковок, то они застряли без кода))
Если вопрос не решен можем по содействовать
Анна Шевченко (Автор тем)
Здравствуйте, выдает ошибку при интеграции с сайтом:
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: )
Начало обмена узла Обмен с сайтом
Очистка регистра пакетов обмена.
Очистка регистра пакетов обмена завершена.
Выгрузка информации по товарам.
Формирование пакета для общих данных для товаров.
Формирование пакетов для каталога: Основной каталог товаров
Формирование пакетов для каталога: Основной каталог товаров Завершено
Формирование пакета для для общих данных для товаров завершено.
Выгрузка пакетов общей информации в в XML.
Выгрузка пакета общей информации каталога: Основной каталог товаров
Выгрузка пакетов каталога: Основной каталог товаров
Выгрузка справочных данных.
Выгрузка групп в XML.
Выгрузка групп в XML завершено. Выгружено 109 элементов.
Выгрузка единиц измерения в XML.
Выгрузка единиц измерения в XML завершено. Выгружено 11 элементов.
Выгрузка складов в XML.
Выгрузка складов в XML завершено. Выгружено 8 элементов.
Выгрузка типов цен в XML.
Выгрузка типов цен в XML завершено. Выгружено 1 элементов.
Отправка запроса на авторизацию.
Отправка запроса на инициализацию, для определения версии обмена данных.
Процес выполнения обмена: Распаковка архива завершена.
Процес выполнения обмена: Временные таблицы удалены.
Процес выполнения обмена: Временные таблицы созданы.
Процес выполнения обмена: Файл импорта прочитан.
Процес выполнения обмена: Временные таблицы проиндексированы.
import___d8813995-aacc-43ce-a33b-11ed1817f5f3.xml: Произошла ошибка на стороне сервера.
Ответ сервера:
failure
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: ).
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения
Здравствуйте, выдает ошибку при интеграции с сайтом:
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: )
Начало обмена узла Обмен с сайтом
Очистка регистра пакетов обмена.
Очистка регистра пакетов обмена завершена.
Выгрузка информации по товарам.
Формирование пакета для общих данных для товаров.
Формирование пакетов для каталога: Основной каталог товаров
Формирование пакетов для каталога: Основной каталог товаров Завершено
Формирование пакета для для общих данных для товаров завершено.
Выгрузка пакетов общей информации в в XML.
Выгрузка пакета общей информации каталога: Основной каталог товаров
Выгрузка пакетов каталога: Основной каталог товаров
Выгрузка справочных данных.
Выгрузка групп в XML.
Выгрузка групп в XML завершено. Выгружено 109 элементов.
Выгрузка единиц измерения в XML.
Выгрузка единиц измерения в XML завершено. Выгружено 11 элементов.
Выгрузка складов в XML.
Выгрузка складов в XML завершено. Выгружено 8 элементов.
Выгрузка типов цен в XML.
Выгрузка типов цен в XML завершено. Выгружено 1 элементов.
Отправка запроса на авторизацию.
Отправка запроса на инициализацию, для определения версии обмена данных.
Процес выполнения обмена: Распаковка архива завершена.
Процес выполнения обмена: Временные таблицы удалены.
Процес выполнения обмена: Временные таблицы созданы.
Процес выполнения обмена: Файл импорта прочитан.
Процес выполнения обмена: Временные таблицы проиндексированы.
import___d8813995-aacc-43ce-a33b-11ed1817f5f3.xml: Произошла ошибка на стороне сервера.
Ответ сервера:
failure
Ошибка импорта метаданных.Ошибка добавления новой единицы измерения (код единицы: ).
6d99b299-9f50-11e5-80c0-60a44c2f8494
AAAAAAAAAAE=
false
шт
Хотя в 1С УТ 11.3 все свойства единиц измерения занесены
Нашел проблему, в этом постаралась фирма 1С. До обновления по моему было два справочника упаковка и единицы измерения.
Если вы создавали когда то виды для упаковок, то они застряли без кода))
Если вопрос не решен можем по содействовать
Что нужно знать программисту про интеграцию сайта и 1С
Нельзя просто взять и интегрировать сайт с 1С
Интеграция сайта на 1С-Битрикс: Управление сайтом и 1С — неисчерпаемый источник вопросов и проблем. На сайте идей для Битрикс в соответствующем разделе 16 страниц, на форуме про это больше 23 000 сообщений. В форме обращения в техподдержку Битрикса есть даже отдельный тип заявки «Обмен с 1С».
Считается, что интеграция 1С и сайта на Битриксе должна работать из коробки. Самые простые функции действительно можно запустить за час-два. А вот на доработку обмена можно потратить и 10, и 100 часов.
Доработка обмена сайта и 1С — это уже магия уровня «эксперт», пугает даже бородатого опытного разработчика. В этой статье мы поговорим о том, как происходит обмен данными между этими двумя монстрами и как можно расширять возможности этого обмена. Статья содержит множество технических деталей обмена и будет полезна в основном программистам, которые хотят разобраться в предмете.
В данной статье будет рассмотрена общая теория обмена между двумя IT-системами и два стандартных обмена между 1С и сайтом на 1С-Битрикс: обмен товарами и обмен справочниками.
Немного теории
Интеграция — обмен информацией между двумя IT-системами. Иногда называют просто обмен. Определяется форматом данных, протоколом (стандартом) передачи данных, алгоритмом работы
Формат = как выглядят данные (например, XML, YML, JSON, CSV).
Протокол = как данные оказываются в другом месте (например, HTTP, SIP, SMTP, FTP).
Алгоритм = что при этом происходит. Представляется блок-схемой или диаграммой UML Activity.
обмен товарами между самописной учетной системой и сайтом (протокол FTP, формат CSV);
парсинг курсов валюты с сайта ЦБ РФ (протокол HTTP, формат XML);
интеграция сайта с Яндекс.Маркет (протокол HTTP, формат YML).
Процедуру обмена можно разделить на 3 части:
Экспорт данных из системы А в требуемый формат
Импорт данных требуемого формата в систему Б.
Часто весь обмен называют «импорт» («загрузка») и «экспорт» («выгрузка»). Это не ошибка, по такой формулировкой говорящий показывает, точка зрения какой системы ему ближе. То, что для 1С экспорт товаров, для Битрикса импорт. В дальнейшем тексте статьи мы не будем использовать эти понятия, чтобы не порождать двусмысленности.
Резюме
Интеграция — обмен данными между двумя системами.
Формат — как выглядят данные.
Протокол — как передаются данные.
Стандартные возможности обмена 1С и Битрикса
«Из коробки» (без доработок программиста) работают 4 типа обмена:
товары из 1С на сайт (тип «catalog»);
справочники из 1С на сайт (тип «reference»);
пользователей/контрагентов из 1С на сайт (тип «sale»);
Протокол
Все взаимодействия между 1С и Битриксом проводятся по HTTP, синхронно. Т.о. 1С подобна браузеру, она «открывает» специальную страницу, отправляет данные (методами POST и GET) и получает текстовый ответ. Есть даже способ имитировать выгрузку из 1С браузером (и мы часто используем этот трюк во время разработки и отладки). Подробнее про отладку мы рассказали в предыдущей статье « Типовые ошибки интеграции между 1С и 1С-Битрикс ».
В терминах сетевых взаимодействий 1С — клиент, а сайт — сервер. Обращения всегда инициируются на стороне 1С. В 1С есть настройки адреса сайта, сайт про 1С не знает ничего.
Протокол синхронный. 1С отправляет следующий запрос на сайт только после получения ответа на предыдущий (или получения ошибки таймаута).
Формат
Данные передаются в двух форматах.
Первый формат — текстовый для ответов сайта на запросы из 1С. Сайт выводит в первой строке ответа «success», если завершил некую процедуру, «progress», если продолжает ее выполнять и «error» или «failure», если была ошибка. В последующих строках могут быть дополнительные данные (зависит от каждого конкретного запроса).
Алгоритм
Подготовка к обмену
Выше мы уже сказали, что протокол обмена — синхронный HTTP. Все перечисленные типы обмена подразумевают выполнение нескольких запросов (шагов обмена) друг за другом. Первые два шага одинаковы для любого типа обмена, различия начинаются дальше
Авторизация
Basic access логин:
Логин сайта из настроек 1С
Basic access пароль:
Пароль сайта из настроек 1С
Любой обмен начинается с авторизации 1С на сайте методом Basic access. В случае успеха сайт выводит «success», имя и значение Cookie (которую будет проверять во всех последующих запросах), id сессии и прочие параметры (зависят от type — типа обмена).
Возможные ошибки
Ошибка авторизации. Неверное имя пользователя или пароль.
Проверить логин и пароль в Битрикс
У Вас нет прав для импорта каталога. Проверьте настройки компонента импорта.
Проверить права пользователя в Битрикс
Ошибка проверки источника запроса. Обновите модуль обмена или отключите проверку в настройках компонента
Обновить модуль обмена в 1С или выполнить php-код на сайте:
COption::SetOptionString(«catalog», «DEFAULT_SKIP_SOURCE_CHECK», «Y»);
COption::SetOptionString(«sale», «secure_1c_exchange», «N»);
Модуль Информационных блоков не установлен.
Проверить модуль iblock в Битрикс. Должен быть скачан и установлен
Включена смена идентификатора сессий. В файле подключения компонента обмена, до подключения пролога определите константу BX_SESSION_ID_CHANGE: define(‘BX_SESSION_ID_CHANGE’, false);
Выполнить предложенное действие
Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут. Вероятно неправильно настроены временные зоны. Выполните настройку и повторите обмен.
Проверить настройку часовых поясов на веб-сервере и на сервере БД
Запрос настроек сайта
На этом шаге 1С узнает важные для обмена настройки сайта. Управление этими параметрами на сайте происходит на странице «Интеграция с 1С» в панели управления сайтом.
Сайт умеет распаковывать zip-архивы. Если yes — 1С будет загружать файлы обмена в архивах, что сильно экономит время и трафик.
Максимально допустимый размер файла в байтах для передачи за один HTTP-запрос. Если системе 1С понадобится передать файл большего размера, они будут разбиты на несколько частей.
Получив эти параметры, 1С начинает формирование данных для передачи на сайт. Если «zip=yes», то все файлы будут переданы как zip-архив. Иначе каждый выгружается по отдельности. Желательно включать всегда.
Возможные ошибки
Ошибка инициализации временного каталога
При создании каталога для хранения файлов выгрузки произошла ошибка. Проверить права и путь для хранения файлов или закончилось место на диске. По умолчанию сайт складывает файлы в папку /upload/1c_catalog/.
Данный тип обмена (type=catalog) используется для создания и обновления на сайте следующих сущностей:
UF-поля разделов в этом инфоблоке;
свойства элементов в этом инфоблоке;
разделы в инфоблоке товаров;
элементы в инфоблоке товаров (товары);
наличие товаров по складам.
При обмене товарами 1С формирует XML-файлы, передает их на сайт и контролирует их обработку сайтом. 1С может передать 4 вида файлов:
В файлах с префиксом import_ — разделы каталога, товары, свойства товаров.
В файлах с префиксом offers_ — SKU.
В файлах с префиксом prices_ — цены товаров и предложений.
В файлах с префиксом rests_ — остатки товаров и предложений по складам.
На шаге авторизации в случае успеха сервер вернет дополнительный параметр timestamp (текущее время). 1С сохранит timestamp и передаст на сайт на последнем шаге обмена товарами.
Шаг 1. Передача файла (повторяющийся)
Содержимое файла в виде строки
Шаг может выполняется несколько раз. Каждый файл выгружается частями не более file_limit байт (см. предыдущий шаг) в бинарном виде через сырой POST-запрос. Сайт создает файл, если его нет. Имя файла берет из GET-параметра filename и дописывает в него переданный контент. Так продолжается до тех пор, пока 1С не передаст все части этого файла.
Возможные ошибки
Ошибка чтения HTTP данных
Проверить сетевое соединение между сайтом и 1С.
Ошибка открытия файла для записи
Проверить права на файл и папку файла у пользователя apache, под которыйм работает Битрикс.
Ошибка записи в файл
Проверить права на файл и папку файла у пользователя apache, под которыйм работает Битрикс.
Шаг 2. Основной
Если импорт завершен:
Если импорт продолжается:
Шаг 2.1 Распаковка архива (повторяющийся, необязательный)
Если файл распакован:
Идет распаковка архива
Если файл распаковывается:
Распаковка архива завершена
Шаг исполняется, только если 1С передала файл в формате ZIP. Распаковка происходит в той же директории, где лежат все файлы обмена товарами (по умолчанию — /upload/1c_catalog/). Эта операция не нумеруется внутри Битрикса (значение STEP в сессии не изменяется).
Возможные ошибки
Ошибка распаковки архива
Шаг 2.2 Удаление временных таблиц
Временные таблицы удалены
Работать напрямую с файлом XML (тем более, если он большой) неудобно и неэффективно. Поэтому все данные прочитываются во временную таблицу b_xml_tree. На этом подготовительном шаге таблица b_xml_tree, если она существует, удаляется.
Шаг 2.3 Создание временных таблиц
Временные таблицы созданы
Возможные ошибки
Ошибка создания временных таблиц
Проверить права и подключение СУБД.
Шаг 2.4 Загрузка файла во временную таблицу (повторяющийся)
Если файл читается:
Файл импорта прочитан
Битрикс шаг за шагом начинает читать переданный из 1С файл, добавляя записи в таблицу b_xml_tree. Чтобы избежать проблем с временем исполнения, процесс происходит пошагово. Управление продолжительностью шага происходит на странице «Интеграция с 1С» в панели управления сайтом.
Возможные ошибки
Ошибка открытия файла импорта
Проверить доступ к файлу
Шаг 2.5 Индексация временных таблиц
Временные таблицы проиндексированы
Для повышения скорости работы импорта таблица b_xml_tree индексируется после прочтения файла.
Возможные ошибки
Ошибка создания индекса для временных таблиц
Возможная причина: проблемы с СУБД, правами в ней или подключением.
Шаг 2.6 Импорт метаданных
Метаданные импортированы успешно
Ошибка импорта метаданных
На этом шаге создаются или обновляются следующие данные:
Инфоблоки товаров и SKU
Служебные свойства каталога (с префиксом CML2_: CML2_BAR_CODE, CML2_ARTICLE, CML2_ATTRIBUTES…)
UF-поля разделов инфоблоков
Важно: никакие сущности при импорте метаданных не удаляются. Случайно выгруженный из 1С склад или тип цены остается на сайте, пока администратор не удалит его вручную.
Возможные ошибки
Отсутствует модуль «Торговый каталог». Импорт торговых предложений и цен невозможен
Пояснения не требуются
Ошибка создания типа информационных блоков
После этого сообщения следует текст ошибки API, который пояснит причину ошибки.
Ошибка добавления новой единицы измерения (код единицы: )
Текст ошибки Битрикс не выведет, необходимо разобрать XML файл самостоятельно и найти причину ошибки.
Количество импортированных складов превышает разрешенное для данной редакции
Пояснения не требуются
Ошибка импорта пользовательского свойства (xml_id: )
Проверить параметры пользовательского свойства
Название справочника должно начинаться с буквы и состоять только из латинских букв и цифр.
Пояснения не требуются
В выгрузке настроены цены с одинаковым названием. Продолжение обмена невозможно.
Пояснения не требуются
В редакции Малый Бизнес нет возможности иметь более одного типа цены. Настройте выгрузку из 1С или перейдите на другую редакцию БУС.
Пояснения не требуются
Шаг 2.7 Импорт разделов каталога
Ошибка импорта метаданных
На этом шаге в инфоблоке создаются и обновляются все разделы каталога, которые были в XML файле. Сопоставление разделов из XML-файла и в БД происходит по XML_ID.
Если на сайте нет раздела с XML_ID из файла, он создается. Если есть, то выполняется сравнение полей из XML файла с аналогичными полями в БД. Если изменения нет, то Битрикс только обновляет поле TIMESTAMP_X и пропускает раздел. Если изменения есть — происходит полноценное обновление. Это происходит независимо от настроек сайта.
Для экономии ресурсов сервера добавление разделов происходит без пересчета дерева (речь о полях LEFT_MARGIN и RIGHT_MARGIN).
Возможные ошибки
Так как импорт разделов не пошаговый, при обмене большом дереве разделов на сайте может возникать ошибка превышения времени исполнения. Решения три.
Увеличить время исполнения на странице «Интеграция с 1С» и в настройках сервера (nginx).
Доработать 1С, чтобы ошибки на этом этапе игнорировались пока не будет получен ответ «progress».
Повторить всю выгрузку несколько раз.
Объясним, как поможет повтор шага или всей выгрузки. Допустим, в XML-файле и на сайте 20001 раздел. Пусть за один проход Битрикс успевает импортировать только 10000 разделов.
Пропущено т.к. нет изменений
Битрикс каждый раз обрабатывает столько разделов, сколько успевает. При повторении выгрузки первые 10000 разделов он пропустит (обновит только TIMESTAMP_X) и обновит еще 10000 разделов, пока не наступил таймаут. И только на 3-ей выгрузке из 1С шаг будет завершен корректно.
Шаг 2.8 Пересчет дерева разделов
Деактивация/удаление групп завершено
Ошибка импорта метаданных
На этом шаге Битрикс выполняет две задачи:
Удаление/деактивация разделов (в старых версиях модуля обмена в 1С)
Перестройка дерева разделов
В старых версиях 1С отличить полную выгрузку от частичной просто: при частичной в узле «Классификатор» был атрибут СодержитТолькоИзменения=»true», при полной его не было.
В 2019 году 1С всегда выгружает этот атрибут. Если этого атрибута нет, Битрикс мог (и до сих пор может, просто этот код не используется) удалить, деактивировать старые разделы (или пропустить их). На выбор влиял параметр на странице «Интеграция с 1С». Сейчас эта настройка уже ни на что не влияет и ни деактивации, ни удаления не происходит.
Также на этом шаге пересчитываются служебные поля LEFT_MARGIN и RIGHT_MARGIN всех разделов.
Шаг 2.9 Импорт товаров (повторяющийся)
Если идет процесс импорта:
Обработано из элементов
Если импорт завершен:
Загрузка элементов завершена
Ассоциативный массив, счетчик обработанных товаров и всех товаров в файле
На этом шаге в инфоблоке создаются и обновляются все товары, которые были в XML файле. Сопоставление товаров в файле товарам на сайте происходит по полю XML_ID.
Если на сайте нет товара с XML_ID из файла, он создается. Если есть, то выполняется сравнение полей из XML файла с аналогичными полями в БД.
Если изменения нет, и задан параметр «Использовать контрольные суммы элементов для оптимизации обновления каталога», Битрикс только обновляет поле TIMESTAMP_X и пропускает товар. Иначе происходит полноценное обновление.
Возможные ошибки
Временная таблица не существует
Ошибка возникает если с сайтом работает несколько 1С или одна 1С присылает несколько запросов одновременно. В одном потоке выполняется шаг 4.9, а другой запустил шаг 4.2.
Шаг 2.10 Деактивация/удаление товаров (повторяющийся)
Если идет обработка:
Обработано из элементов
Если обработка завершена:
Деактивация/Удаление элементов завершены
Ассоциативный массив, счетчик обработанных товаров и всех товаров в файле
На этом шаге раньше (как и на шаге 2.8 Пересчет дерева разделов ) Битрикс проводил чистку товаров. Чистка товаров происходила только если в узле “Классификатор” XML файла не было пометки СодержитТолькоИзменения=»true» (старый формат выгрузки). Есть аналогичная настройка для выбора, что делать с товарами.
В 2019 году на этом шаге ничего не происходит.
Шаг 2.11 Завершение импорта
Импорт успешно завершен
Шаг 3. Деактивация старых данных
Деактивация элементов завершена
Ошибка деактивации элементов
На этом шаге в 2019 году Битрикс деактивирует все товары и разделы каталога, не затронутые в текущей сессии. Для этого время последнего изменения сравнивается с timestamp, который передает 1С — время начала текущей сессии, полученное на шаге авторизации.
Напомним, что эти настройки в панели управления сайта сейчас ни на что не влияют (всегда происходит деактивация):
Этот шаг будет выполнен, только если современная 1С делает полную выгрузку. Для выгрузки изменений и в старых версиях 1С этого шага нет.
Шаг 4. Завершение импорта
Завершение процедуры импорта
Данный тип обмена (type=reference) используется для создания и обновления на сайте HL-блоков. Этот тип намного короче чем обмен товарами и повторяет многие из его шагов.
Часто обмен справочниками — простой и быстрый способ расширить стандартные функции обмена.
Шаг 1. Передача файла (повторяющийся)
Шаг 2. Основной
Шаг 2.1 Распаковка архива (повторяющийся, необязательный)
Шаг 2.2 Подготовка справочника
Найден или создан справочник. Код справочника:
На этом шаге Битрикс создает HL-блок (если не существует) и все UF-поля. В начале шага испускается событие модуля catalog OnBeforeCatalogImportHL. Событие недокументированное, в обработчики передаются массив параметров компонента и путь к XML-файлу. Обработчик может вызвать ошибку и вернуть произвольное сообщение.
Важно знать следующие особенности импорта справочников:
1С не может удалить справочник или поле, только создать;
1С может создать только поля следующих типов: Строка, Булево, Дата, Число;
все поля, создаваемые 1С будут одиночными, необязательными, скрытыми в фильтре, показанными и редактируемыми в таблице;
Битрикс автоматически создает поля: UF_NAME, UF_XML_ID, UF_VERSION, UF_DESCRIPTION.
Возможные ошибки
Ошибка при создании поля в справочнике
Изучить текст и исправить в 1С или на сайте
Ошибка при создании справочника
Изучить текст и исправить в 1С или на сайте
Ошибка разбора XML. Код ошибки:
Расшифровать код и исправить в 1С или на сайте
Расшифровка кодов ошибок.
Неизвестная ошибка парсинга XML файла
Невалидный XML файл
В XML файле отсутствует или пустой узел справочника
В XML файле отсутствует или пустой узел справочника
Во время импорта UF-полей не был найден higloadblock
В XML файле отсутствует или пустой узел в
В XML файле отсутствует или пустой узел в
Неизвестный в узле (допустимы только: Строка, Булево, Дата, Число)
Неизвестная ошибка при создании UF-поля highload блока
Во время элементов справочника не был найден higloadblock
В XML файле отсутствует или пустой узел в
В XML файле отсутствует или пустой узел в в
Шаг 2.3 Импорт элементов (повторяющийся)
Если импорт завершен:
Импорт успешно завершен
Если импорт в процессе:
На этом шаге Битрикс импортирует все элементы HL-блока.
Если выгрузка была полной, Битрикс удаляет все элементы HL-блока, у которых значение поля UF_VERSION не начинается с + «#»
В конце шага Битрикс испускает событие модуля catalog OnSuccessCatalogImportHL. Аргументы — массив параметров компонента и путь к файлу.
Возможные ошибки
Аналогичны ошибкам на предыдущем шаге.
Формат файлов
Формат файла обмена товарами
Официальная документация Битрикса по файлу обмена товарами (с примером): https://dev.1c-bitrix.ru/api_help/sale/xml/import.php
Формат файла обмена предложениями
Официальная документация Битрикса по файлу обмена предложениями (с примером): https://dev.1c-bitrix.ru/api_help/sale/xml/offers.php
Формат файла обмена ценами товаров и предложений
Официальная документация Битрикса по файлу обмена ценами (с примером): https://dev.1c-bitrix.ru/api_help/sale/xml/prices.php
Формат файла обмена остатками товаров и предложений
Официальная документация Битрикса по файлу обмена остатками (с примером): https://dev.1c-bitrix.ru/api_help/sale/xml/rests.php
Формат файла обмена справочниками
Поясним некоторые места этого XML.
Значение становится названием сущности (после транслитерации).
С префиксом «b_» становится названием таблицы (после транслитерации).
Узел Не используется. Вообще. Но если узла не будет в файле, Битрикс выдаст ошибку (sic!)
Каждый описывается тремя узлами:
Значение становится XML ID поля
С префиксом «UF_» становится кодом поля
Значение становится названием UF-поля.
4 допустимых значения: Строка, Булево, Дата, Число
Каждый описывается полями:
Становится значением поля UF_XML_ID
C префиксом + «#» становится значением поля UF_VERSION
Становится значением поля UF_NAME
Становится значением поля UF_DESCRIPTION
Поля типа «Дата» представлены в формате YYYY-MM-DD HH:MI:SS.
Поля типа «Булево» представлены строками true или false (или пустой строкой).
Как дорабатывать обмен?
Все запросы (при стандартном обмене) 1С присылает на служебную страницу /bitrix/admin/1c_exchange.php. Но если заглянуть в файл, выяснится что вся логика скрыта в недрах модуля «Торговый каталог» в файле /bitrix/modules/sale/admin/1c_exchange.php. Эти страницу нельзя изменять, но можно скопировать (обычно мы копируем в /bitrix/admin/1c_exchange_custom.php) и изменить адрес в 1С.
На этой странице, в зависимости от переданных GET-параметров (совсем как комплексные компоненты в режиме не-ЧПУ) подключаются разные простые компоненты. Компоненты без шаблонов.
Значительная часть логики вынесена из этих компонентов в классы. Связь видов обмена, GET-параметров, компонентов и основных классов приведена ниже в таблице.
Товары, предложения, склады, цены, наличие
В папке с компонентом
Существует 3 принципиально разных способа доработать обмен с 1С:
Не трогать стандартный обмен, использовать обработчики событий.
Кастомизировать файлы обмена на стороне сайта и доработать по требованиям
Выгружать нужные данные как справочники и обрабатывать самостоятельно.
Первый способ нужен для самых простых случаев, ничего серьезного сделать так не получится.
Второй способ реализуется так:
Создать собственную страницу обмена. Обычно это /bitrix/admin/1c_exchange_custom.php.
На эту страницу перенести код из /bitrix/modules/sale/admin/1c_exchange.php.
Кастомизировать нужный компонент обмена и заменить вызов системного компонента на вызов собственного (например, bitrix:catalog.import.1c на intervolga:catalog.import.1c) на новой странице обмена.
Может понадобиться изменение логики класса. Используйте наследование (например, класс \Intervolga\Custom\Exchange\Cml может быть наследником \CIBlockCMLImport и переопределять метод ImportElements).
После правок на сайте нужно изменить параметр «Адрес сайта и путь до скрипта обмена» в 1С. Имя пользователя и пароль одинаковые как для стандартного обмена, так и для доработанного.
Третий способ(через справочники) подходит, если у нужной сущности 1С совсем нет аналога на сайте или по каким-то причинам стандартный импорт совсем не годится. У модуля highloadblock есть все необходимые события (создание, редактирование, удаление) и для ненагруженных проектов это достаточно неплохое решение.
С помощью выгрузки справочников решаются такие задачи, как создание пользователей на сайте через 1С, выгрузка персональных цен и скидок, бонусов и информации для личного кабинета партнеров.
Отладка обмена — отдельный больной вопрос. Обычно решается логированием всех происходящих в недрах Битрикса процессов. В ИНТЕРВОЛГЕ разработали свою систему логирования обмена, которая представляет весь процесс в виде диаграммы Гантта. На ней сразу видно, если идут одновременно 2 обмена или 1С не дожидается ответа и начинает слать новые запросы.
Заключение
Часто самой сложной задачей в процессе разработки является именно интеграция с 1С. Отчетливое понимание происходящих в Битриксе процессов необходимо для серьезных проектов.
Хотели бы работать у нас? Мы ищем разработчиков и предлагаем интересные проекты.