Pull to refresh

Как мы разрабатывали интеграцию интернет-магазина с 1С: Предприятие и почему она стала массовой. Часть 2

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

В первом посте на эту тему мы рассуждали о том, как были проанализированы задачи, которые стоят перед владельцами интернет-магазинов, выбрана концепция обмена данными и разработан протокол обмена между 1С и интернет-магазином.

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

Напомню, что в общем и целом была выбрана следующая схема интеграции:

1) Сайт и 1С работают независимо и обмениваются данными в формате CommerceML
2) Сайт не имеет прямого доступа к 1С
3) 1С регулярно обращается к публичному скрипту на сайте, отдавая или принимая данные
3) Инициатором обмена и соединения всегда выступает 1С

Рассмотрим реализацию этой концепции на практике.

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

Модуль есть в типовой поставке 1С: Управление торговлей как для версии 10.3, так и для версии 11 (платформа 8.2). Помимо 1С: Управление торговлей функционал обмена с сайтами также есть и в других конфигурациях, включая локализованные. Мы свели информацию о поддержке функционала обмена с сайтами в конфигурациях 1С в специальную таблицу — 1c.1c-bitrix.ru/ecommerce/require_1C.php.

Рассмотрим функционал модуля, входящего с состав 1С: Управление торговлей 11.



Первая вкладка интерфейса модуля содержит основные настройки взаимодействия.

Раздел Режим обмена данными — позволяет указать какой режим обмена будет использоваться в данном профиле. Или проще говоря — какая бизнес-задача будет решаться в сеансе обмена: выгрузка товаров, обмен заказами или и то и то.

В разделе Назначение указываются параметры сайта, с которым будет производиться обмен: URL скрипта обмена, учетная запись, которой разрешен обмен. Можно тут же проверить успешность соединения.

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

В разделе Автоматический обмен можно очень гибко задать расписание, по которому функционал обмена будет запускаться автоматически, без участия пользователя.

Рассмотрим более подробно решение первой задачи интеграции —

Выгрузка товаров (справочника номенклатуры) из 1С на сайт интернет-магазина


Для этого необходимо в режиме обмена поставить опцию «Выгрузка товаров», в результате чего будет доступна одноименная вкладка:



Выбор товаров для выгрузки и настройки выгрузки в 1С

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

В варианте «по умолчанию» выгружается весь справочник номенклатуры как есть: все группы и все товары, без каких-либо ограничений. Разумеется, такой вариант понравится не всем, и доступен гибкий выбор — что именно и по каким условиям выгружать на сайт.



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

Далее, по умолчанию, все товары выгружаются в файл XML в единый каталог (тег <Каталог>). У каждого каталога есть свой классификатор, включающий структуру групп и подгрупп для товаров, а также свойства для всех товаров этого каталога.

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

Настройки каталогов в этом случае будут примерно такие:



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

Ставить галочки «Выгружать файлы изображений» и «Выгружать прочие файлы» имеет смысл, если в 1С есть качественные описания товаров, изображения, связанные файлы (инструкции и т.п.). Очень многие владельцы интернет-магазинов не хранят в 1С описания товаров, свойства, качественные описания. В 1С они им не столь нужны, а на сайте как правило есть и HTML-редактор для описаний, и разнообразные утилиты по обработке изображений, нанесению водяных знаков. К тому же, организовать удаленную работу контент-редакторов удобнее всего при работе с веб-сайтом, чем пускать их внутрь 1С. И, тем не менее, находятся и те, кто предпочитает всю описательную часть хранить в одном месте — в 1С, а сайт использовать как инструмент визуализации. Есть и другая задача — когда одни и те же товары выгружаются в несколько интернет-магазинов одновременно. Тогда лучше один раз сделать описания в 1С, а потом их автоматически выгружать на несколько площадок.

Какую выбрать модель управления каталогом — решает конечный пользователь. Главное, что функционал интеграции это позволяет.

Процесс выгрузки

Если теперь запустить выгрузку (нажать кнопку «Выполнение обмена данными»), то 1С начинает подготавливать выгружаемые данные.

Генерируются 2 файла: import.xml и offers.xml (для каждого выгружаемого каталога). Первый файл содержит информацию о товарном каталоге (структура, товары, свойства), а второй — торговые предложения по данному товару. Если у одного товара есть варианты, зависящие от характеристик (цвет, размер и т.п.), то все они будут предложениями в файле offers. Детали — в стандарте CommerceML 2.04.

Если с товарами связаны изображения или файлы, то они размещаются в подпапке import_files, и на них ссылаются данные из XML.

Вот например были выгружены 2 каталога товаров из 1С:



Теперь нужно эти файлы передать на сервер. В протоколе обмена (см.часть 1) для этого есть специальный режим: http://<сайт>/bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=<имя файла>.

Если объем данных большой (происходит первоначальная выгрузка большого справочника номенклатуры), то конечно хотелось бы оптимизировать передачу файлов.

Во-первых, используется ZIP-сжатие. Как мы помним, перед началом передачи файлов 1С запрашивает у сайта параметры обмена, среди которых есть флаг поддержки ZIP-сжатия. Все файлы упаковываются и получается один zip-архив, который и отправляется на сайт. Если сжатие не поддерживается, отправляются все файлы из папки (включая картинки) последовательно.

Во-вторых, многие хостинг-провайдеры лимитируют объем данных, передаваемых POST-запросом. И даже zip-архив может легко не пройти, если он составляет десятки мегабайт. В этом случае 1С может разбивать выгружаемые файлы на порции, если их размер превышает максимально допустимый. На стороне сайта происходит прием пронумерованных порций и последующая их сборка обратно в единый файл. Максимальный размер порции данных 1С также получает от сайт в режиме инициализации обмена.

Теперь принятые файлы нужно обработать на стороне сайта и загрузить в базу сайта.

Здесь также есть момент ограничений хостинга. Обработкой (разбором XML и загрузкой в базу) занимается PHP-скрипт, время работы которого обычно лимитировано. Конечно, в начале скрипта стоит set_time_limit(0), но не везде это работает. Поэтому в настройках 1С-Битрикс можно указать максимальное время, которое может отработать скрипт — по умолчанию 30 секунд. Тогда при достижении этого лимита, скрипт будет перезагружен и продолжит импорт с предыдущей позиции в файле.

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

Настройки импорта данных на стороне сайта

Параметры импорта каталога из 1С настраиваются в 1С-Битрикс в административной части на специальной странице «Интеграция с 1С»



Я не буду далее вдаваться в подробности настроек импорта, коих множество: обработка изображений, генерация ЧПУ для товаров, обработка данных, отсутствующих в файле импорта, но имеющихся на сайте и тому подобное. В общем и целом, каталоги из 1С максимально полно отражаются в каталоги на сайте.

Выгружаются:
  • Структура групп каталога
  • Список товаров группы
  • Свойства товаров (числовые, строковые, тип «список», дата-время, булево)
  • Описание товара (включая описание в HTML)
  • Связанные изображения и файлы
  • Набор цен (розница, опт, дилерская и т.п.
  • Остатки на складах
  • Набор предложений по товару, различающихся характеристиками

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

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



Это дает еще большую гибкость, поскольку, можно например разные категории товаров обновлять в разное время, выгружать товары на разные сайты и в разные CMS системы и т.п. Кроме того, в разное время, не связанное с выгрузкой товаров, можно производить и обмен заказами: например принимать заказы с сайта каждые 5 минут.

Но об обмене заказами я расскажу в третьей, заключительной части.
Tags: интеграция1с-битрикс1с:предприятиеинтернет-магазин
Hubs: 1С-Битрикс corporate blog
Total votes 66: ↑53 and ↓13 +40
Comments 48
Comments Comments 48

Information

Founded
1999
Location
Россия
Website
www.1c-bitrix.ru
Employees
201–500 employees
Registered