Как связать 1с и сайт
Перейти к содержимому

Как связать 1с и сайт

  • автор:

 

Протокол обмена с сайтом

Данный открытый протокол разработан компаниями «1С» и «1С-Битрикс».

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

  • выгрузка на сайт торговых предложений (каталогов продукции), данных об остатках на складах (с разбивкой и сводно), данных только о ценах и остатках (без описания номенклатуры);
  • обмен информацией о заказах.

Первый блок обеспечивает публикацию на сайте каталога номенклатурных позиций и данных. Второй блок необходим для передачи с сайта в систему «1С: Предприятие» информации о заказах интернет-магазина, и дальнейшую синхронизацию статусов и параметров заказов.

В обоих случаях инициатором обмена выступает система «1С: Предприятие». Обмен электронными документами осуществляется в соответствии с правилами и форматами, описанными в стандарте CommerceML 2.

При инициализации взаимодействия устанавливается HTTP соединение. Система «1С: Предприятие» запрашивает у сайта необходимые параметры, такие, как максимальный объем пакета, поддержка сжатия и др. На основании этих данных система 1С: Предприятие формирует XML сообщения и передает их на сайт.

Выгрузка на сайт

Данные для публикации на сайте выгружаются одним пакетом.

A. Начало сеанса

Выгрузка данных начинается с того, что система «1С: Предприятие» отправляет http-запрос следующего вида:
http://<сайт>/<путь> /1c_exchange.php? type=catalog& mode=checkauth.

  • слово «success»;
  • имя Cookie;
  • значение Cookie.

Примечание. Все последующие запросы к системе управления сайтом со стороны «1С: Предприятия» содержат в заголовке запроса имя и значение Cookie.

B. Запрос параметров от сайта

Далее следует запрос следующего вида:
http://<сайт>/<путь> /1c_exchange.php? type=catalog& mode=init

  1. zip=yes, если сервер поддерживает обмен в zip-формате — в этом случае на следующем шаге файлы должны быть упакованы в zip-формате
    или
    zip=no — в этом случае на следующем шаге файлы не упаковываются и передаются каждый по отдельности.
  2. file_limit=<число>, где <число> — максимально допустимый размер файла в байтах для передачи за один запрос. Если системе «1С: Предприятие» понадобится передать файл большего размера, его следует разделить на фрагменты.

C. Выгрузка на сайт файлов обмена

Затем «1С: Предприятие» запросами с параметрами вида
http://<сайт>/<путь> /1c_exchange.php? type=catalog& mode=file& filename=<имя файла>
выгружает на сайт файлы обмена в формате CommerceML 2, посылая содержимое файла или его части в виде POST.

В случае успешной записи файла система управления сайтом выдает строку «success».

D. Пошаговая загрузка данных

На последнем шаге по запросу из «1С: Предприятия» производится пошаговая загрузка данных по запросу с параметрами вида http://<сайт>/<путь> /1c_exchange.php? type=catalog& mode=import& filename=<имя файла>

  1. Если в первой строке содержится слово «progress» — это означает необходимость послать тот же запрос еще раз. В этом случае во второй строке будет возвращен текущий статус обработки, объем загруженных данных, статус импорта и т. д.
  2. Если в ответ передается строка со словом «success», то это будет означать сообщение об успешном окончании обработки файла.

Примечание. Если в ходе какого-либо запроса произошла ошибка, то в первой строке ответа системы управления сайтом будет содержаться слово «failure», а в следующих строках — описание ошибки, произошедшей в процессе обработки запроса. Если произошла необрабатываемая ошибка уровня ядра продукта или sql-запроса, то будет возвращен html-код.

Примеры файлов выгрузки

Обмен информацией о заказах

Заказы, оформленные на сайте, загружаются в систему «1С: Предприятие».

  1. Заказ оформляется на сайте
  2. При передаче в систему «1С: Предприятие» в заказе устанавливается категория «Заказ с сайта».
    При формировании заказа в системе «1С: Предприятие» записываются номер и дата заказа, с которыми он оформлен на сайте. Поиск контрагента осуществляется по ИНН или наименованию, в зависимости от указанных настроек.
  3. При загрузке заказа производится поиск договора с контрагентом. Договор ищется среди существующих договоров с клиентом, с признаком ведения взаиморасчетов по заказам (по указанной в настройках загрузки Организации). Если не находится ни один договор, то создается новый.
  4. При загрузке заказа загружаются все его свойства, переданные с сайта. Свойства ищутся в системе «1С: Предприятие» по наименованию. Если с таким наименованием свойства нет, то заводится новое свойство со значениями типа строка или число.
  5. Заказ может модифицироваться в системе «1С: Предприятие», при этом его изменения будут выгружаться на сайт
  6. Если заказ оплачивается или отгружается в системе «1С: Предприятие», то состояния заказа по оплате и по отгрузке выгружаются на сайт только при полном выполнении операции (полной оплате и полной отгрузке). До этого момента заказ считается не оплаченным и не отгруженным.
  7. При попытке в системе «1С: Предприятие» изменить заказ, по которому произведена оплата или отгрузка, заказ на сайт не загрузится как измененный. При этом пользователь получит об этом сообщение.
  8. После каждой выгрузка заказа на сайт, на стороне сайта определяются значения его категорий (ссылка на категории). Эти значения устанавливаются в системе «1С: Предприятие» так, как они присвоены заказу на сайте

A. Начало сеанса

Выгрузка данных начинается с того, что система «1С: Предприятие» отправляет http-запрос следующего вида:
http://<сайт>/<путь> /1c_exchange.php? type=sale& mode=checkauth.

  • слово «success»;
  • имя Cookie;
  • значение Cookie.

Примечание. Все последующие запросы к системе управления сайтом со стороны «1С: Предприятия» содержат в заголовке запроса имя и значение Cookie.

B. Уточнение параметров сеанса

Далее следует запрос следующего вида:
http://<сайт>/<путь> /1c_exchange.php? type=sale& mode=init

  1. zip=yes, если сервер поддерживает обмен в zip-формате — в этом случае на следующем шаге файлы должны быть упакованы в zip-формате
    или
    zip=no — в этом случае на следующем шаге файлы не упаковываются и передаются каждый по отдельности.
  2. file_limit=<число>, где <число> — максимально допустимый размер файла в байтах для передачи за один запрос. Если системе «1С: Предприятие» понадобится передать файл большего размера, его следует разделить на фрагменты.

C. Получение файла обмена с сайта

Затем на сайт отправляется запрос вида
http://<сайт>/<путь> /1c_exchange.php? type=sale& mode=query.

Сайт передает сведения о заказах в формате CommerceML 2. В случае успешного получения и записи заказов «1С: Предприятие» передает на сайт запрос вида
http://<сайт>/<путь> /1c_exchange.php? type=sale& mode=success

D. Отправка файла обмена на сайт

Затем система «1С: Предприятие» отправляет на сайт запрос вида
http://<сайт>/<путь> /1c_exchange.php? type=sale& mode=file& filename=<имя файла>,
который загружает на сервер файл обмена, посылая содержимое файла в виде POST.

В случае успешной записи файла система управления сайтом передает строку со словом «success». Дополнительно на следующих строчках могут содержаться замечания по загрузке.

Примечание. Если в ходе какого-либо запроса произошла ошибка, то в первой строке ответа системы управления сайтом будет содержаться слово «failure», а в следующих строках — описание ошибки, произошедшей в процессе обработки запроса.
Если произошла необрабатываемая ошибка уровня ядра продукта или sql-запроса, то будет возвращен html-код.

Как настроить работу сайта в связке с 1С

Электронная коммерция – популярный вектор развития для всех сегментов бизнеса. Множество торговых предприятий используют сайт, как канал для увеличения объема продаж. Помимо сайта могут быть и другие точки продаж и чем их больше, тем сложнее контролировать движение товара, поступления и остатки. Допустимо использование ручного учета, и это хорошо работает пока ассортимент продукции небольшой. Для автоматизации работы компании все каналы продаж необходимо интегрировать в единую систему управления торговлей. Внедрив ее, предпринимателю станет доступным складской учет, контроль продаж магазина в реальном времени, планирование закупок, статистика продаж и данные о перемещении товара.

В данной статье описана работа сайта в связке «1С: Управление торговлей», «1С Управление нашей фирмой», «1С: EPR».

Как настроить работу сайта в связке с 1С

На InSales можно настроить синхронизацию и реализовать:

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

Синхронизация с 1С доступна пользователям программы «1С: Управление торговлей» не ниже версии 10.3.4, «1С: Управление нашей фирмой», «1С: EPR». Возможна настройка синхронизации и с другими программными продуктами 1С, но для ее реализации требуется специалист в области 1С.

Обмен данными происходит в формате commerceML – это единый стандарт обмена коммерческой информацией, разработанный 1С.

Синхронизация с 1С: Управление торговлей 10

«1С: Управление торговлей» предназначен для автоматизации работы организаций, занимающихся всеми видами торговой деятельности.

Для настройки синхронизации 1С Управление торговлей с интернет-магазином на InSales установите приложение «Синхронизация с 1С», осуществив вход в бэк-офис InSales и перейдя в раздел «Приложения» — «Центр приложений». В магазине приложений в разделе «Учет» выбираем интересующее приложение и нажимаем кнопку «Установить».

Система направит нас в бэк-офис интернет-магазина. После входа в приложение необходимо войти в установленное приложение и настроить синхронизацию с 1С.

На сайте InSales есть рекомендации по настройке синхронизации, зависящие от программного продукта 1С и от наличия товаров в интернет-магазине.

Если каталог товаров в InSales отсутствует и используется продукт «1С Управление торговлей 11 » или «1С Управление торговлей 10» , обратитесь к инструкции «Синхронизация 1С Управление торговлей 11 с магазином без товаров» , «Синхронизация 1С Управление торговлей 10 с магазином без товаров» соответственно.

Рекомендуем начинать процесс заполнения каталога товаров именно с заведения их в 1С, и только потом настраивать синхронизацию с интернет-магазином. Дело в том, что изменения, внесенные в каталог товаров на стороне InSales, не отображаются в 1C. При этом корректировки на стороне 1С влияют на товары в магазине. Выгрузить товары из 1С несложно, а вот сопоставить товары, уже существующие в магазине с товарами, существующими в 1С – более трудная задача.

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

Если каталог товаров в InSales заведен и используется продукт 1С , то нужно создать связку между товарами в 1С и товарами в магазине.

Синхронизация с 1С: Управление нашей фирмой

«1С: Управление нашей фирмой» помогает систематизировать и автоматизировать предприятия малого бизнеса, наладить процесс учета, контроля, анализа и планирования.

Принцип настройки синхронизации схож с «1С Управление торговлей 10», «1С Управление торговлей 11». Подробная информация в разделе «Синхронизация 1С: Управление нашей фирмой с магазином без товаров» .

Синхронизация 1С: EPR

«1С: EPR» — это решение для автоматизации крупного и среднего бизнеса.

Процесс синхронизация «1С: EPR» с магазином, в котором отсутствует каталог товаров аналогичен предыдущим, и включает в себя такие этапы:

  • установка приложения «Синхронизация с 1С»;
  • настройка соединения с web;
  • настройка выгрузки товаров;
  • настройка обмена заказами;
  • первый обмен данными;
  • работа с выгруженными товарами в приложении;

Подробная информация по настройке синхронизации в разделе «Синхронизация 1С: EPR с магазином без товаров» .

Что делать, если товары не создаются из 1С? Бывает, что при реализации синхронизации с «1С» товары не создаются или не отображаются в интернет- магазине. Факторов может быть несколько, например, в «1С» могут быть не указаны цены, а для магазина указание стоимости является обязательным. Мы сделали подборку с указанием основных причин, связанных с отсутствием товаров из 1С и разместили ее здесь . В случае, если вы столкнетесь с подобными сложностями внимательно изучите ее.

Почему не обновляются статусы заказов из 1С? Так бывает, если вы не включили в приложении по синхронизации соответствующую настройку. Каким образом обновить статусы заказов описано в статье «Обновление статусов заказов из 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С» — в зависимости от контекста, это может быть компания-легенда «ООО 1С», их разработка «1С:Предприятие» или конкретная конфигурация (например, «1С: Управление торговлей» или «1С:ERP Управление предприятием») с установленным модулем обмена с сайтом . В мире веб-разработки имеется в виду как раз последнее определение. В статье будет действовать аналогичное соглашение. Так же и с сайтом на платформе 1С-Битрикс: Управление сайтом — обычно это просто «Битрикс».

Резюме

Интеграция — обмен данными между двумя системами.

Формат — как выглядят данные.

Протокол — как передаются данные.

Стандартные возможности обмена 1С и Битрикса

«Из коробки» (без доработок программиста) работают 4 типа обмена:

товары из 1С на сайт (тип «catalog»);

справочники из 1С на сайт (тип «reference»);

пользователей/контрагентов из 1С на сайт (тип «sale»);

заказы (тип «sale»):

Протокол

Все взаимодействия между 1С и Битриксом проводятся по HTTP, синхронно. Т.о. 1С подобна браузеру, она «открывает» специальную страницу, отправляет данные (методами POST и GET) и получает текстовый ответ. Есть даже способ имитировать выгрузку из 1С браузером (и мы часто используем этот трюк во время разработки и отладки). Подробнее про отладку мы рассказали в предыдущей статье «Типовые ошибки интеграции между 1С и 1С-Битрикс».

В терминах сетевых взаимодействий 1С — клиент, а сайт — сервер. Обращения всегда инициируются на стороне 1С. В 1С есть настройки адреса сайта, сайт про 1С не знает ничего.

Протокол синхронный. 1С отправляет следующий запрос на сайт только после получения ответа на предыдущий (или получения ошибки таймаута).

Формат

Данные передаются в двух форматах.

Первый формат — текстовый для ответов сайта на запросы из 1С. Сайт выводит в первой строке ответа «success», если завершил некую процедуру, «progress», если продолжает ее выполнять и «error» или «failure», если была ошибка. В последующих строках могут быть дополнительные данные (зависит от каждого конкретного запроса).

Второй формат — CommerceML 2 . Основан на XML, в этом формате передаются товары, предложения, цены, склады, заказы и контрагенты (пользователи+платежные профили).

Алгоритм

Подготовка к обмену

Выше мы уже сказали, что протокол обмена — синхронный HTTP. Все перечисленные типы обмена подразумевают выполнение нескольких запросов (шагов обмена) друг за другом. Первые два шага одинаковы для любого типа обмена, различия начинаются дальше

Авторизация

Basic access логин:

Логин сайта из настроек 1С

Basic access пароль:

Пароль сайта из настроек 1С

<имя Cookie авторизации>

<значение Cookie авторизации>

Любой обмен начинается с авторизации 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 минут. Вероятно неправильно настроены временные зоны. Выполните настройку и повторите обмен.

Проверить настройку часовых поясов на веб-сервере и на сервере БД

Запрос настроек сайта

<имя Cookie авторизации>=<значение Cookie авторизации>

На этом шаге 1С узнает важные для обмена настройки сайта. Управление этими параметрами на сайте происходит на странице «Интеграция с 1С» в панели управления сайтом.

Сайт умеет распаковывать zip-архивы. Если yes — 1С будет загружать файлы обмена в архивах, что сильно экономит время и трафик.

Максимально допустимый размер файла в байтах для передачи за один HTTP-запрос. Если системе 1С понадобится передать файл большего размера, они будут разбиты на несколько частей.

Получив эти параметры, 1С начинает формирование данных для передачи на сайт. Если «zip=yes», то все файлы будут переданы как zip-архив. Иначе каждый выгружается по отдельности. Желательно включать всегда.

Ошибка инициализации временного каталога

При создании каталога для хранения файлов выгрузки произошла ошибка. Проверить права и путь для хранения файлов или закончилось место на диске. По умолчанию сайт складывает файлы в папку /upload/1c_catalog/.

Обмен товарами (1С -> Битрикс)

Данный тип обмена (type=catalog) используется для создания и обновления на сайте следующих сущностей:

UF-поля разделов в этом инфоблоке;

свойства элементов в этом инфоблоке;

разделы в инфоблоке товаров;

элементы в инфоблоке товаров (товары);

наличие товаров по складам.

При обмене товарами 1С формирует XML-файлы, передает их на сайт и контролирует их обработку сайтом. 1С может передать 4 вида файлов:

В файлах с префиксом import_ — разделы каталога, товары, свойства товаров.

В файлах с префиксом offers_ — SKU.

В файлах с префиксом prices_ — цены товаров и предложений.

В файлах с префиксом rests_ — остатки товаров и предложений по складам.

На шаге авторизации в случае успеха сервер вернет дополнительный параметр timestamp (текущее время). 1С сохранит timestamp и передаст на сайт на последнем шаге обмена товарами.

Обмен товарами

Обмен товарами

Шаг 1. Передача файла (повторяющийся)

Содержимое файла в виде строки

<имя Cookie>=<значение Cookie>

Шаг может выполняется несколько раз. Каждый файл выгружается частями не более file_limit байт (см. предыдущий шаг) в бинарном виде через сырой POST-запрос. Сайт создает файл, если его нет. Имя файла берет из GET-параметра filename и дописывает в него переданный контент. Так продолжается до тех пор, пока 1С не передаст все части этого файла.

Ошибка чтения HTTP данных

Проверить сетевое соединение между сайтом и 1С.

Ошибка открытия файла <имя файла> для записи

Проверить права на файл и папку файла у пользователя apache, под которым работает Битрикс.

Ошибка записи в файл <имя файла>

Проверить права на файл и папку файла у пользователя apache, под которым работает Битрикс.

Шаг 2. Основной

<имя Cookie>=<значение Cookie>

Если импорт завершен:

Если импорт продолжается:

Этот шаг — особенный. Файл уже целиком загружен на сайт и Битрикс готов его обработать. Его обработка может состоять из 11 более мелких операций, о которых 1С ничего не знает. Поэтому в параметре GET приходит mode=import (один и тот же запрос!), но сайт выполняет совершенно разные операции. Текущий прогресс Битрикс сохраняет в сессии в переменной $_SESSION[BX_CML2_IMPORT][NS]. Например, узел STEP в этом массиве отвечает как раз за номер внутренней операции импорта.

Шаг 2.1 Распаковка архива (повторяющийся, необязательный)

Если файл распакован:

Идет распаковка архива

Если файл распаковывается:

Распаковка архива завершена

Шаг исполняется, только если 1С передала файл в формате ZIP. Распаковка происходит в той же директории, где лежат все файлы обмена товарами (по умолчанию — /upload/1c_catalog/). Эта операция не нумеруется внутри Битрикса (значение STEP в сессии не изменяется).

Ошибка распаковки архива

Проверьте работоспособность функции PHP zip_open и расширение Zip . Если все корректно — скачайте архив с сайта и проверьте его корректность вручную.

Шаг 2.2 Удаление временных таблиц

Временные таблицы удалены

Работать напрямую с файлом XML (тем более, если он большой) неудобно и неэффективно. Поэтому все данные прочитываются во временную таблицу b_xml_tree. На этом подготовительном шаге таблица b_xml_tree, если она существует, удаляется.

Шаг 2.3 Создание временных таблиц

Временные таблицы созданы

Таблица b_xml_tree создается. Если объявлена PHP константа BX_XML_CREATE_INDEXES_IMMEDIATELY, таблица сразу же индексируется. В конце этого шага Битрикс испускает событие OnBeforeCatalogImport1C .

Ошибка создания временных таблиц

Проверить права и подключение СУБД.

Шаг 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 и пропускает товар. Иначе происходит полноценное обновление.

При импорте товара заполняется поле TMP_ID. Значение для этого поля хранится в узле <НомерВерсии>. Если узла нет — Битрикс вычисляет контрольную сумму от всей информации о товаре из XML файла.

Временная таблица не существует

Ошибка возникает если с сайтом работает несколько 1С или одна 1С присылает несколько запросов одновременно. В одном потоке выполняется шаг 4.9, а другой запустил шаг 4.2.

Шаг 2.10 Деактивация/удаление товаров (повторяющийся)

Если идет обработка:

Обработано <число> из <число> элементов

Если обработка завершена:

Деактивация/Удаление элементов завершены

Ассоциативный массив, счетчик обработанных товаров и всех товаров в файле

На этом шаге раньше (как и на шаге 2.8 Пересчет дерева разделов ) Битрикс проводил чистку товаров. Чистка товаров происходила только если в узле “Классификатор” XML файла не было пометки СодержитТолькоИзменения=»true» (старый формат выгрузки). Есть аналогичная настройка для выбора, что делать с товарами.

В 2019 году на этом шаге ничего не происходит.

Шаг 2.11 Завершение импорта

Импорт успешно завершен

Служебный шаг. Обработки данных нет, только испускается событие OnSuccessCatalogImport1C .

Шаг 3. Деактивация старых данных

timestamp=<время на сервере>

<имя Cookie>=<значение Cookie>

Деактивация элементов завершена

Ошибка деактивации элементов

На этом шаге в 2019 году Битрикс деактивирует все товары и разделы каталога, не затронутые в текущей сессии. Для этого время последнего изменения сравнивается с timestamp, который передает 1С — время начала текущей сессии, полученное на шаге авторизации.

Напомним, что эти настройки в панели управления сайта сейчас ни на что не влияют (всегда происходит деактивация):

Этот шаг будет выполнен, только если современная 1С делает полную выгрузку. Для выгрузки изменений и в старых версиях 1С этого шага нет.

Шаг 4. Завершение импорта

<имя Cookie>=<значение Cookie>

Завершение процедуры импорта

Служебный шаг. Обработки данных нет, только испускается недокументированное событие модуля catalog OnCompleteCatalogImport1C. Аргументы обработчика аналогичны обработчикам события OnSuccessCatalogImport1C , возвращаемого значения нет.

Обмен справочниками (1С -> Битрикс)

Данный тип обмена (type=reference) используется для создания и обновления на сайте HL-блоков. Этот тип намного короче чем обмен товарами и повторяет многие из его шагов.

Часто обмен справочниками — простой и быстрый способ расширить стандартные функции обмена.

Обмен справочниками

Обмен справочниками

Шаг 1. Передача файла (повторяющийся)

см. аналогичный шаг обмена товарами, (отличается только mode, в данном типе обмена mode=reference).

Шаг 2. Основной

<имя Cookie>=<значение Cookie>

Шаг 2.1 Распаковка архива (повторяющийся, необязательный)

Шаг 2.2 Подготовка справочника

Найден или создан справочник. Код справочника: <ID>

На этом шаге Битрикс создает 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 не начинается с <ID текущей сессии> + «#»

В конце шага Битрикс испускает событие модуля catalog OnSuccessCatalogImportHL. Аргументы — массив параметров компонента и путь к файлу.

Аналогичны ошибкам на предыдущем шаге.

Формат файлов

Формат файла обмена товарами

Формат файла обмена предложениями

Формат файла обмена ценами товаров и предложений

pasted image 0 (35).png

pasted image 0 (35).png

Формат файла обмена остатками товаров и предложений

Формат файла обмена справочниками

Поясним некоторые места этого XML.

Значение становится названием сущности (после транслитерации).

С префиксом «b_» становится названием таблицы (после транслитерации).

Узел <Наименование> Не используется. Вообще. Но если узла не будет в файле, Битрикс выдаст ошибку (sic!)

Каждый <Реквизит> описывается тремя узлами:

Значение становится XML ID поля

С префиксом «UF_» становится кодом поля

Значение становится названием UF-поля.

4 допустимых значения: Строка, Булево, Дата, Число

Каждый <ЭлементСправочника> описывается полями:

Становится значением поля UF_XML_ID

C префиксом <ID текущей сессии> + «#» становится значением поля 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С с интернет-магазином

Настройка обмена в 1С с интернет-магазином

Третий способ (через справочники) подходит, если у нужной сущности 1С совсем нет аналога на сайте или по каким-то причинам стандартный импорт совсем не годится. У модуля highloadblock есть все необходимые события (создание, редактирование, удаление) и для ненагруженных проектов это достаточно неплохое решение.

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

Отладка обмена — отдельный больной вопрос. Обычно решается логированием всех происходящих в недрах Битрикса процессов. В ИНТЕРВОЛГЕ разработали свою систему логирования обмена, которая представляет весь процесс в виде диаграммы Гантта. На ней сразу видно, если идут одновременно 2 обмена или 1С не дожидается ответа и начинает слать новые запросы.

Заключение

Часто самой сложной задачей в процессе разработки является именно интеграция с 1С. Отчетливое понимание происходящих в Битриксе процессов необходимо для серьезных проектов.

Интеграция 1С с сайтом: зачем и как

В статье описываем процедуру интеграции 1С, отвечаем на общие вопросы и даем практические советы программистам, которые будут работать с 1С.

Что такое интеграция сайта с 1С

1С — это семейство продуктов. Они различаются по версии платформы (7, 8.0, 8.1) и конфигурации (УТ, УПП, Бухгалтерия, ЗУП и др.). А интеграция — это передача данных между двумя системами. Интеграция характеризуется:

  • направлениями передачи —
    • система A → (или ←) система Б (односторонняя выгрузка/загрузка);
    • система A ↔ система Б (двусторонний обмен);
    • периодический обмен;
    • обмен в режиме реального времени;
    • всегда полный;
    • обмен только изменениями.

    Чаще всего 1С интегрируются с корпоративными сайтами, различными сервисами или интернет-магазинами на разных cms.

    Какие сайты можно интегрировать с 1С

    Чаще предприятия заказывают следующие варианты интеграций.

    Интеграция интернет-магазина с 1С:УТ — выгрузка каталога номенклатуры в магазин и двусторонний обмен заказами в режиме реального времени.

    Интеграция Битрикс24 с 1С:УТ и 1С:Бухгалтерией — выгрузка заказов, счетов и контрагентов из 1С в Битрикс24.

    Трехсторонняя интеграция 1С, Битрикс24 и интернет-магазина — полная интеграция 1С одновременно и с магазином, и с Битрикс24. Для реализации этого сценария компания 1С-Битрикс выпустила версию «Битрикс24: Интернет-магазин». В нем магазин и CRM будут объединены, и интеграция снова станет двухсторонней.

    Интеграция 1С с личным кабинетом — это или выгрузка контрагентов/заказов/персональных цен из 1С на сайт, или предоставление частичного доступа к данным внутри 1С. Например, проверка/активация карт лояльности, уточнение статуса заявки.

    Интеграция абстрактного сайта с абстрактной 1С — это вариант, если ни один из вышеперечисленных не подошел.

    Стандартные возможности обмена 1С и Битрикса

    «Из коробки», когда не нужна ручная доработка, работают четыре обмена.

    1. Товары из 1С на сайт (тип «catalog»).
    2. Справочники из 1С на сайт (тип «reference»).
    3. Пользователей/контрагентов из 1С на сайт (тип «sale»).
    4. Заказы (тип «sale»): из 1С на сайт и наоборот.

    Протокол

    Все взаимодействия между 1С и Битриксом проводятся по HTTP, синхронно. 1С, как и браузер, «открывает» специальную страницу, отправляет данные (методами POST и GET) и получает текстовый ответ. Существует вариант имитировать выгрузку из 1С браузером.

    В терминах сетевых взаимодействий 1С — клиент, а сайт — сервер. Обращения всегда инициируются на стороне 1С через настройки адреса сайта. С сайта инициировать взаимодействие с 1С нельзя.

    Протокол синхронный. Это значит, что 1С отправляет следующий запрос на сайт только после получения ответа на предыдущий или ошибки таймаута.

    Формат

    Данные передаются в двух форматах.

    Формат 1. Текстовый, для ответов сайта на запросы из 1С. Сайт выводит в первой строке ответа:

    • «success», если завершил некую процедуру;
    • «progress», если продолжает ее выполнять;
    • «error» или «failure», если была ошибка.

    В зависимости от каждого конкретного запроса в последующих строках могут быть дополнительные данные.

    Формат 2. CommerceML 2. Он основан на XML. Подходит для передачи товаров, предложений, цен, складов, заказов и контрагентов.

    Алгоритм

    Подготовка к обмену

    Протокол обмена — синхронный HTTP. Перечисленные типы обмена подразумевают следование строгому алгоритму запросов. Первые два шага одинаковы для любого типа обмена. Начиная с третьего, они будут различаться.

    Запрос
    GET-параметры: type=<тип обмена>
    mode=checkauth
    Basic access логин: Логин сайта из настроек 1С
    Basic access пароль: Пароль сайта из настроек 1С
    Ответ
    Если успех: success
    <имя Cookie авторизации>
    <значение Cookie авторизации>
    sessid=<ID сессии>
    <параметр1>=<значение1>
    <параметр2>=<значение2> .
    Если ошибка: failure <текст ошибки>

    Любой обмен начинается с авторизации 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 минут. Вероятно, неправильно настроены временные зоны. Выполните настройку и повторите обмен. Проверить настройку часовых поясов на веб-сервере и на сервере БД.

    Запрос настроек сайта

    Запрос
    GET-параметры: type=<тип обмена>
    mode=init
    sessid=<ID сессии>
    Cookie: <имя Cookie авторизации>=<значение Cookie авторизации>
    Ответ
    Если успех: zip=<yes|no>
    file_limit=<число>

    На этом шаге 1С узнает важные для обмена настройки сайта. Управление этими параметрами на сайте происходит на странице «Интеграция с 1С» в панели управления сайтом.

    Параметр Назначение Возможные значения
    zip Сайт умеет распаковывать zip-архивы. Если yes — 1С будет загружать файлы обмена в архивах, что сильно экономит время и трафик. yes no
    file_limit Максимально допустимый размер файла в байтах для передачи за один HTTP-запрос. Если системе 1С понадобится передать файл большего размера, они будут разбиты на несколько частей. целое число >= 0

    Получив эти параметры, 1С сформирует данные для передачи на сайт. Если «zip=yes», то все файлы будут переданы как zip-архив. Или каждый выгружается по отдельности. Желательно всегда включать zip.

    Текст ошибки Что делать
    Ошибка инициализации временного каталога При создании каталога для хранения файлов выгрузки произошла ошибка. Проверить права и путь для хранения файлов, или закончилось место на диске. По умолчанию сайт складывает файлы в папку /upload/1c_catalog/.

    Обмен товарами (1С -> Битрикс)

    Этот обмен (type=catalog) используется для создания и обновления на сайте сущностей:

    • инфоблок товаров;
    • UF-поля разделов в этом инфоблоке;
    • свойства элементов в этом инфоблоке;
    • инфоблок SKU;
    • типы цен;
    • склады;
    • разделы в инфоблоке товаров;
    • элементы в инфоблоке товаров (товары);
    • цены товаров;
    • наличие товаров по складам.

    При обмене товарами 1С формирует XML-файлы, передает их на сайт и контролирует их обработку сайтом. 1С может передать 4 вида файлов с префиксами:

    • import_ — разделы каталога, товары, свойства товаров;
    • offers_ — SKU;
    • prices_ — цены товаров и предложений;
    • rests_ — остатки товаров и предложений по складам.

    На шаге авторизации в случае успеха сервер вернет дополнительный параметр timestamp (текущее время). 1С сохранит timestamp и передаст на сайт на последнем шаге обмена товарами.

    Шаг 1. Передача файла (повторяющийся)

    Запрос
    GET-параметры: type=catalog
    mode=file
    sessid=<ID сессии>
    filename=<имя файла>
    POST: Содержимое файла в виде строки
    Cookie: <имя Cookie>=<значение Cookie>
    Ответ
    Если успех: success
    Если ошибка: failure
    <текст ошибки>

    Шаг может выполняться несколько раз. Каждый файл выгружается частями не более file_limit байт в бинарном виде через сырой POST-запрос. Сайт создает файл, если его нет. Имя файла берет из GET-параметра filename и дописывает в него переданный контент. Так продолжается до тех пор, пока 1С не передаст все части этого файла.

    Текст ошибки Что делать
    Ошибка чтения HTTP данных Проверить сетевое соединение между сайтом и 1С.
    Ошибка открытия файла <имя файла> для записи Проверить права на файл и папку файла у пользователя apache, под которым работает Битрикс.
    Ошибка записи в файл <имя файла> Проверить права на файл и папку файла у пользователя apache, под которым работает Битрикс.

    Шаг 2. Основной

    Запрос
    GET-параметры: type=<тип обмена>
    mode=import
    sessid=<ID сессии>
    filename=<имя файла>
    Cookie: <имя Cookie>=<значение Cookie>
    Ответ
    Если импорт завершен: success
    Если импорт продолжается: progress
    <текущий статус>
    Если ошибка: failure
    <текст ошибки>

    На этом этапе файл уже целиком загружен на сайт, и Битрикс готов его обработать. Обработка может состоять из 11 более мелких операций, о которых 1С ничего не знает. Поэтому в параметре GET приходит mode=import (один и тот же запрос!), но сайт выполняет совершенно разные операции.

    Текущий прогресс Битрикс сохраняет в сессии в переменной $_SESSION[BX_CML2_IMPORT][NS]. Например, узел STEP в этом массиве отвечает как раз за номер внутренней операции импорта.

    Шаг 2.1 Распаковка архива (повторяющийся, необязательный)

    Ответ
    Если файл распакован: progress Распаковка архива завершена.
    Если файл распаковывается: progress
    Идет распаковка архива.
    Если ошибка: failure
    <текст ошибки>

    Шаг исполняется, только если система 1С передала файл в формате ZIP. Распаковка происходит в той же директории, где лежат все файлы обмена товарами. По умолчанию это /upload/1c_catalog/. Эта операция не нумеруется внутри Битрикса. Значение STEP в сессии не изменяется).

    Текст ошибки Что делать
    Ошибка распаковки архива Проверьте работоспособность функции PHP zip_open и расширение Zip. Если все корректно — скачайте архив с сайта и проверьте его корректность вручную.

    Шаг 2.2 Удаление временных таблиц

    Ответ
    Если успех: progress
    Временные таблицы удалены.
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 0

    Работать напрямую с файлом XML неудобно и неэффективно. Поэтому все данные вносятся во временную таблицу b_xml_tree. На этом подготовительном шаге таблица b_xml_tree, если она существует, удаляется.

    Шаг 2.3 Создание временных таблиц

    Ответ
    Если успех: progress
    Временные таблицы созданы
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 1

    Таблица b_xml_tree создается. Если объявлена PHP константа BX_XML_CREATE_INDEXES_IMMEDIATELY, таблица сразу же индексируется. В конце этого шага Битрикс испускает событие OnBeforeCatalogImport1C.

    Текст ошибки Что делать
    Ошибка создания временных таблиц Проверить права и подключение СУБД

    Шаг 2.4 Загрузка файла во временную таблицу (повторяющийся)

    Ответ
    Если файл читается: progress
    Обработано <число>% файла.
    Если файл прочитан: progress
    Файл импорта прочитан.
    Если ошибка: failure
    <текст ошибки>
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 2

    Битрикс шаг за шагом начинает читать переданный из 1С файл, добавляя записи в таблицу b_xml_tree. Чтобы избежать проблем со временем исполнения, процесс происходит пошагово. Управление продолжительностью шага происходит на странице «Интеграция с 1С» в панели управления сайтом.

    Текст ошибки Что делать
    Ошибка открытия файла импорта. Проверить доступ к файлу.

    Шаг 2.5 Индексация временных таблиц

    Ответ
    Если успех: progress
    Временные таблицы проиндексированы.
    Если ошибка: failure
    <текст ошибки>
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 3

    Для повышения скорости работы импорта таблица b_xml_tree индексируется после прочтения файла.

    Текст ошибки Что делать
    Ошибка создания индекса для временных таблиц Возможная причина: проблемы с СУБД, правами в ней или подключением.

    Шаг 2.6 Импорт метаданных

    Ответ
    Если успех: progress
    Метаданные импортированы успешно.
    Если ошибка: failure
    Ошибка импорта метаданных
    <текст ошибки>
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 4

    На этом шаге создаются или обновляются следующие данные:

    1. Инфоблоки товаров и SKU.
    2. Служебные свойства каталога (с префиксом CML2_: CML2_BAR_CODE, CML2_ARTICLE, CML2_ATTRIBUTES…).
    3. Торговый каталог.
    4. Свойства инфоблоков.
    5. UF-поля разделов инфоблоков.
    6. Типы цен.
    7. Склады.
    8. Единицы измерения.

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

    Текст ошибки Что делать
    Отсутствует модуль «Торговый каталог». Импорт торговых предложений и цен невозможен. Пояснения не требуются.
    Ошибка создания типа информационных блоков. После этого сообщения следует текст ошибки API, который пояснит причину ошибки.
    Ошибка добавления новой единицы измерения (код единицы: <код>). Текст ошибки Битрикс не выведет, необходимо разобрать XML- файл самостоятельно и найти причину ошибки.
    Количество импортированных складов превышает разрешенное для данной редакции. Пояснения не требуются.
    Ошибка импорта пользовательского свойства (xml_id: <код>). Проверить параметры пользовательского свойства.
    Название справочника должно начинаться с буквы и состоять только из латинских букв и цифр. Пояснения не требуются.
    В выгрузке настроены цены с одинаковым названием. Продолжение обмена невозможно. Пояснения не требуются.
    В редакции «Малый Бизнес» нет возможности иметь более одного типа цены. Настройте выгрузку из 1С или перейдите на другую редакцию БУС. Пояснения не требуются.

    Шаг 2.7 Импорт разделов каталога

    Ответ
    Если успех: progress
    Группы импортированы
    Если ошибка: failure
    Ошибка импорта метаданных
    <текст ошибки>
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 5

    На этом шаге в инфоблоке создаются и обновляются все разделы каталога, которые были в XML- файле. Сопоставление разделов из XML-файла и в БД происходит по XML_ID.

    Если на сайте нет раздела с XML_ID из файла, он создается. Если есть, то выполняется сравнение полей из XML- файла с аналогичными полями в БД. Если изменения нет, то Битрикс только обновляет поле TIMESTAMP_X и пропускает раздел. Если изменения есть — происходит полноценное обновление. Это случается независимо от настроек сайта.

    Для экономии ресурсов сервера добавление разделов происходит без пересчета дерева (речь о полях LEFT_MARGIN и RIGHT_MARGIN).

    Так как импорт разделов не пошаговый, при обмене большого дерева разделов на сайте может возникать ошибка превышения времени исполнения. Решения три.

    1. Увеличить время исполнения на странице «Интеграция с 1С» и в настройках сервера (nginx).
    2. Доработать 1С, чтобы ошибки на этом этапе игнорировались, пока не будет получен ответ «progress».
    3. Повторить всю выгрузку несколько раз.

    Объясним, как поможет повтор шага или всей выгрузки. Допустим, в XML-файле и на сайте — 20001 раздел. Пусть за один проход Битрикс успевает импортировать только 10000 разделов.

    № Обмена/шага Пропущено т.к. нет изменений Обработано Ответ
    1 0 10000 Ошибка сервера.
    2 10000 10000 Ошибка сервера.
    3 20000 1 progress Группы импортированы.

    Битрикс каждый раз обрабатывает столько разделов, сколько успевает. При повторении выгрузки первые 10000 разделов он пропустит (обновит только TIMESTAMP_X) и обновит еще 10000 разделов, пока не наступил тайм-аут. И только на 3-ей выгрузке из 1С шаг будет завершен корректно.

    Шаг 2.8 Пересчет дерева разделов

    Ответ
    Если успех: progress
    Деактивация/удаление групп завершено
    Если ошибка: failure
    Ошибка импорта метаданных
    <текст ошибки>
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 6

    На этом шаге Битрикс выполняет две задачи.

    1. Удаление/деактивация разделов (в старых версиях модуля обмена в 1С).
    2. Перестройка дерева разделов.

    В старых версиях 1С отличить полную выгрузку от частичной просто: при частичной в узле «Классификатор» был атрибут СодержитТолькоИзменения=»true», при полной его не было.

    1С выгружает этот атрибут. Если этого атрибута нет, Битрикс мог (и до сих пор может, просто этот код не используется) удалить, деактивировать старые разделы (или пропустить их). На выбор влиял параметр на странице «Интеграция с 1С». Сейчас эта настройка уже ни на что не влияет, и ни деактивации, ни удаления не происходит.

    Также на этом шаге пересчитываются служебные поля LEFT_MARGIN и RIGHT_MARGIN всех разделов.

    Шаг 2.9 Импорт товаров (повторяющийся)

    Ответ
    Если идет процесс импорта: progress
    Обработано <число> из <число> элементов
    Если импорт завершен: progress
    Загрузка элементов завершена
    Если ошибка: failure
    <текст ошибки>
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 7
    DONE Ассоциативный массив, счетчик обработанных товаров и всех товаров в файле

    На этом шаге в инфоблоке создаются и обновляются все товары, которые были в XML-файле. Сопоставление товаров в файле товарам на сайте происходит по полю XML_ID.

    Если на сайте нет товара с XML_ID из файла, он создается. Если есть, то выполняется сравнение полей из XML-файла с аналогичными полями в БД.

    Если изменения нет, и задан параметр «Использовать контрольные суммы элементов для оптимизации обновления каталога», Битрикс только обновляет поле TIMESTAMP_X и пропускает товар. Иначе происходит полноценное обновление.

    При импорте товара заполняется поле TMP_ID. Значение для этого поля хранится в узле <НомерВерсии>. Если узла нет — Битрикс вычисляет контрольную сумму от всей информации о товаре из XML-файла.

    Текст ошибки Что делать
    Временная таблица не существует Ошибка возникает, если с сайтом работает несколько 1С или одна 1С присылает несколько запросов одновременно. В одном потоке выполняется шаг 4.9, а другой запустил шаг 4.2.

    Шаг 2.10 Деактивация/удаление товаров (повторяющийся)

    Ответ
    Если идет обработка: progress
    Обработано <число> из <число> элементов.
    Если обработка завершена: progress
    Деактивация/Удаление элементов завершены.
    Если ошибка: failure
    <текст ошибки>
    Сессия ($_SESSION[BX_CML2_IMPORT][NS])
    STEP 8
    DONE Ассоциативный массив, счетчик обработанных товаров и всех товаров в файле.

    На этом шаге Битрикс деактивирует все товары и разделы каталога, не затронутые в текущей сессии. Для этого время последнего изменения сравнивается с timestamp, который передает 1С — время начала текущей сессии, полученное на шаге авторизации.

    Напомним, что эти настройки в панели управления сайта сейчас ни на что не влияют.

    Этот шаг будет выполнен, только если современная 1С делает полную выгрузку. Для выгрузки изменений и в старых версиях 1С этого шага нет.

    Шаг 3. Завершение импорта

    Запрос
    GET-параметры: type=<тип обмена>
    mode=complete
    sessid=<ID сессии>
    Cookie: <имя Cookie>=<значение Cookie>
    Ответ
    Если успех: success
    Завершение процедуры импорта.
    Если ошибка: failure
    <текст ошибки>

    Служебный шаг. Обработки данных нет, только испускается недокументированное событие модуля catalog OnCompleteCatalogImport1C. Аргументы обработчика аналогичны обработчикам события OnSuccessCatalogImport1C, возвращаемого значения нет.

    Обмен справочниками (1С -> Битрикс)

    Данный тип обмена (type=reference) используется для создания и обновления на сайте HL-блоков. Этот тип намного короче, чем обмен товарами, и повторяет многие из его шагов.

    Часто обмен справочниками — простой и быстрый способ расширить стандартные функции обмена.

    Шаг 1. Передача файла (повторяющийся)

    Этот шаг, аналогичный шагу обмена товарами, отличается только mode, в данном типе обмена mode=reference.

    Шаг 2. Основной

    Запрос
    GET-параметры: type=reference
    mode=import
    sessid=<ID сессии>
    Cookie: <имя Cookie>=<значение Cookie>

    Шаг 2.1 Распаковка архива (повторяющийся, необязательный)

    Аналогичный шаг обмена товаров.

    Шаг 2.2 Подготовка справочника.

    Ответ
    Если успех: progress
    Найден или создан справочник. Код справочника: <ID>
    Если ошибка: failure
    <текст ошибки>

    На этом шаге Битрикс создает HL-блок (если не существует) и все UF-поля. В начале шага испускается событие модуля catalog OnBeforeCatalogImportHL. Событие недокументированное, в обработчики передаются массив параметров компонента и путь к XML-файлу. Обработчик может вызвать ошибку и вернуть произвольное сообщение.

    Важно знать следующие особенности импорта справочников:

    • 1С не может удалить справочник или поле, только создать;
    • 1С может создать только поля следующих типов — Строка, Булево, Дата, Число;
    • все поля, создаваемые 1С, будут одиночными, необязательными, скрытыми в фильтре, показанными и редактируемыми в таблице;
    • Битрикс автоматически создает поля — UF_NAME, UF_XML_ID, UF_VERSION, UF_DESCRIPTION.
    Текст ошибки Что делать
    Ошибка при создании поля в справочнике <Текст ошибки> Изучить текст и исправить в 1С или на сайте.
    Ошибка при создании справочника <Текст ошибки> Изучить текст и исправить в 1С или на сайте.
    Ошибка разбора XML. Код ошибки: <Код ошибки> Расшифровать код и исправить в 1С или на сайте.

    Расшифровка кодов ошибок

    Код Объяснение
    10 Неизвестная ошибка парсинга XML-файла.
    20 Невалидный XML-файл.
    110 В XML-файле отсутствует или пустой узел <Ид> справочника.
    120 В XML-файле отсутствует или пустой узел <Наименование> справочника.
    210 Во время импорта UF-полей не был найден higloadblock.
    220 В XML-файле отсутствует или пустой узел <Ид> в <Реквизит>.
    230 В XML-файле отсутствует или пустой узел <Наименование> в <Реквизит>.
    240 Неизвестный <ТипЗначений> в узле <Реквизит> (допустимы только: Строка, Булево, Дата, Число).
    250 Неизвестная ошибка при создании UF-поля highload-блока.
    310 Во время создания элементов справочника не был найден higloadblock.
    320 В XML-файле отсутствует или пустой узел <Ид> в <ЭлементСправочника>.
    330 В XML-файле отсутствует или пустой узел <ЗначениеРеквизита> в <ЗначенияРеквизитов> в <ЭлементСправочника>.

    Шаг 2.3 Импорт элементов (повторяющийся)

    Ответ
    Если импорт завершен: success
    Импорт успешно завершен.
    Если импорт в процессе: progress
    Импортировано элементов: <число>
    Если ошибка: failure
    <текст ошибки>

    На этом шаге Битрикс импортирует все элементы HL-блока.

    Если выгрузка была полной, Битрикс удаляет все элементы HL-блока, у которых значение поля UF_VERSION не начинается с <ID текущей сессии> + «#»

    В конце шага Битрикс испускает событие модуля catalog OnSuccessCatalogImportHL. Аргументы — массив параметров компонента и путь к файлу.

    Возможные ошибки аналогичны ошибкам в предыдущем шаге.

    Формат файлов

    Приводим ссылки на официальную документацию Битрикса.

      .
    • Формат файла обмена предложениями.
    • Формат файла обмена ценами товаров и предложений.
    • Формат файла обмена остатками товаров и предложений.
    • Формат файла обмена справочниками.

    Заключение

    Интеграция с 1С часто — самая сложная задача в процессе разработки. Хорошее понимание процессов необходимо для улучшения навыков любого специалиста и работы над серьезными проектами.

     

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *