Наполнение битрикса через внутренние механизмы интеграции с 1С без 1С

В данной статье мы расскажем вам о своем опыте интеграции с Битриксом и о некоторых особенностях этой системы с точки зрения интегратора. Наша компания занимается информационной поддержкой e-commerce каталогов, а по-простому мы наполняем интернет магазины и электронные каталоги автоматически, используя внутренние продукты. В наши обязанности входит наполнение интернет магазинов товарами, интеграция баз поставщиков с базами магазинов, анализ прайсов конкурентов, актуализация склада, цен и др.

Следует также отметить, что у нас уже были клиенты, e-commerce приложения которых работали на базе Битрикс. Однако они почему-то всегда просили нас предоставлять данные в виде текстовых файлов разного формата. Мы так и делали и всех все устраивало. Однако все же возникал закономерный вопрос: Почему битрикс один, а форматы у всех разные?

И наконец, одному из наших заказчиков потребовалось организовать импорт данных напрямую в Битрикс. Мы скачали Демо-версию Битрикса для магазинов и выяснили, что в нем есть возможность импорта данных csv формате. А так как в этот формат мы уже давно и успешно используем, то и было решено воспользоваться им для решения нашей задачи. Оценив стоимость проекта и уточнив все детали с заказчиком, мы принялись за работу.

Пробуем CSV.

Начав реально заливать данные было выяснено, что использовать csv формат не очень удобно, ввиду требования заказчика переносить и параметры товаров. csv отбросили потому, что импортировать товары с параметрами очень неудобно в этом режиме, битрикс требовал непонятные заголовки для csv файла, а они были более похожие на внутренние названия полей и разбираться с этим сразу не было желания и маловероятно, что этот бы способ принес требуемый результат. Т.е. если вам нужно сделать простой импорт где требуется перенести “Название товара”, “описание”, “цену” и “картинку” – то да – этот способ подойдет, но если что-то большее, то уже надо искать другой способ.

Битрикс поддерживает следующие варианты импорта, это мы выяснили уже изучив систему более подробно:
— Импорт через csv;
— Импорт CommerceML;
— Импорт XML;
— Импорт через 1С.

Сразу скажу, что в конечном итоге выбрали импорту товаров в магазин через 1С, а вот почему – читайте ниже.

Импорт используя CommerceML.

Этот способ который изначально казался наиболее перспективным, в интернете много различных статей о том, что есть CommerceML формат и как классно, что он вот такой единый формат для e-commerce. Странно правда, что официальный сайт этого формата не открывался, но честно нашли и скачали xsd формат, нашли несколько примеров и начал анализировать. Первое что вызывает культурный шок – это русский язык в названиях тегов, но сделав ставку на локальность продуктов и доступность их для пользователей можно принять, что для русскоязычного населения и соответственно пользователей этот способ наиболее подходящий. Далее сделали руками несколько тестовых файлов и начали тестировать заливку. Она не работала как нам нужно было и не было понятно почему нельзя залить сразу цены и склад.
Методом проб и ошибок подложили тестовый CommerceML файл в импорт XML и о чудо – что-то начало отображаться на сайте как нам хотелось, но все еще не удавалось отобразить цены – только номенклатура висела на сайте. Это подсовывание CommerceML файл в импорт XML работало, но чувствовалось что что-то не таки так не должно быть.

Механизмы 1С.

Позже выяснилось, что есть способ которым пользуются чуть ли не все – а это выгрузка из 1С. Разобравшись, что выгрузка состоит из двух файлов import.xml и offers.xml и сделав примеры этих файлов начали опять тестировать их на реальном сайте битрикса поочередно подсовывая то в процедуру импорта CommerceML, то в процедуру импорт XML, а требуемый результат так и не получался. Где-то на форумах встретилась фраза о том, что процедура импорта CommerceML требует формат файла 1.х, а тот который мы генерировали – был версии 2.х, поэтому я начали разбираться, а как же импортироваться эти import.xml и offers.xml, которые были явно валидные, но почему-то все никак не хотели отображаться в магазине.
Явно поняв, что следует научиться импортировать именно эти два файла и зная, что они генерируются из 1с, появилось понимание что необходима 1с чтобы их заимпортировать. 1С это умеет делать через веб. 1С получает в качестве параметра ссылку на веб обработчик (можно сказать сервис), в процессе импорта 1с передает файлы на сайт, а потом последовательно импортирует два файла. Я уже хотел писать программу эмуляции 1с, но вдруг наткнулся на интересное расширения для битрикса, которое эмулирует работу импорта из 1с прямо из битрикса! Бинго, теперь все сошлось.
Далее будет описан процесс настройки процесса импорта из файлов import.xml и offers.xml без 1с в магазин под управлением битрикса, без использования 1с.

Важные шаги процесса импорта в битрикс механизмом через 1С:

1) Для того чтобы обойтись без 1С следует использовать великолепное расширение – bx_1c_import_lite.php (ссылка на него в конце статьи), его копируем в корень и далее открываем в браузере. Открыв эту ссылку мы получает возможность импорта файлов import.xml и offers.xml.



2) Согласно документации файлы import.xml и offers.xml следует скопировать в папку uploads/1c_catalog, но на деле получилось, что нужно это два файла копировать в корневую папку 1c_catalog, предварительно ее создав.

3) Далее следует дать пользователю (в нашем случае Администратору) возможность импорта (задаем права доступа) через интерфейс 1с, показано на следующей картинке.



4) Следующая задача которую необходимо решить — отображения каталога, этот пункт в действительности мы сделали в самом начале наших исследований битрикса, но важен он именно здесь и сейчас. Для отображения каталога следует выбрать правильные компоненты отображения, общая идея настройки показана на следующем рисунке:
т.е. надо открыть страницу catalog в визуальном редакторе, после этого поменять визуальный компонент этот страницы на “каталог” из доступных компонентов, на рисунке они справа. После этого перетащив компонент на страницу, двойным кликом по нему начать редактирования, задав последовательно все требуемые настройки.

5) Свойства. В действительности на данном этапе нам требовалось засветить на сайте более одной тысячи свойств на карточках продуктов. А Светилось только Артикул и Цена, хотя в админке показывалось что на товаре свойства есть и свойства есть на инфоблоке каталога. Впоследствии выяснилось, что свойства в битриксе отображаются на странице товара только если им задан “Мнемонический код свойства”. Выставив парочку руками и убедившись в правильности выставления, мы произвели попытки найти как выставить эти свойства через файлы import.xml и offers.xml, но ничего подходящего не нашли, после чего был написан следующий скрипт который заполнял в странице браузера мнемонические коды автоматически (странно что в битриксе нет такой функциональности из коробки),
вот код JavaScript:

var elems = document.getElementsByTagName(‘*’);
var t = 0;
for(var i=0; i<elems.length; i++)
{
var el = elems[i];
if (el.type == ‘text’)
{
if (el.value == »)
{
el.value = ‘CATL_’ + t;
t = t + 1;
}
}
}
alert(t);


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



Получив опыт первого знакомства с битриксом хочется поделиться своими впечатлениями о системе (с точки зрения интегратора и поставщика данных):
1) Битрикс имеет огромные возможности прямо из коробки;
2) Изначально Битрикс – это CMS общего назначения и для использования в качестве магазина следует делать косметические настройки после инсталляции;
3) Битрикс – это для бизнеса. Огромное число студий, которые работают с битриксом. У них всегда можно заказать разработку и консультации;
4) Поддержка формата CommerceML 2.0 используемый битриксом во время импорта через 1С – это лучший из тех с чем нам приходилось работать (а сегодня мы поддерживаем 17 cms), ну а сама реализация просто великолепна.

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

Использованные ссылки:

http://habrahabr.ru/company/bitrix/blog/131344/
http://dev.1c-bitrix.ru/community/webdev/group/78/blog/1654/
http://catalogloader.com
Поделиться публикацией
Комментарии 34
  • НЛО прилетело и опубликовало эту надпись здесь
      0
      Не доводилось видеть)) думаю это еще та песня
      • НЛО прилетело и опубликовало эту надпись здесь
          –3
          т.е. программист не может использовать национальные имена переменных, так что ли? и на всякий случай если вам удобнее можете использовать англоязычные аналоги ключевых слов, никто вас не ограничивает. Сам я рисовал на 1С лет 7, и не занимаюсь им уже лет 5… в самом 1С нет ничего непрограммистского, обычный бекус-нэур…
          • НЛО прилетело и опубликовало эту надпись здесь
              –1
              1С это Предметно-ориентированный язык программирования, но это не значит что получить низкоуровневый доступ к БД невозможно. это вполне реально просто не приветствуется…
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  мы же про 7.7?
                  • НЛО прилетело и опубликовало эту надпись здесь
                      +1
                      про 8 вообще не в теме, когда я перестал быть адинэсником 8-ка только появилась…
                      про 7.7 — хранилище вполне себе парсится и потом так де обратно собирается. я в своё время писал расспаковщик на перле, Федя ака fez на c++ (gcomp) т.е. выбранные средства вполне отвечают потребностям. Думаю те кто их выбрал имели какие то свои представления на эту тему, мне они неведомы, но оно работает…
                      Есть еще формат mxl (не путать с XML) для хранения электронных таблиц, тоже вполне парсится и я ради фана (чтобы проще сравнивать различия) делал конвертор mxl ->html.
                    0
                    1) потому что «конфиги» в 1С либо XML либо ini, либо «внутренний сериализованный json образный формат» pfl файлы, распакованные cf файлы)

                    2) а storage не JSON
                    потому что система наружу только COM интерфейсом нормально светит… и в то время когда ядро и основные термины системы проектировались, понятия JSON еще не существовало

                    вы в свою очередь приведите пример кода на вашем любимом CRUD ORM реализующий концепцию регистра накопления или регистра бухгалтерии с пересчетом итогов…

                    ну или напишите SQL запрос который реализуется концепцию «срез первых» и «срез последних»…
                    можете прямо тут написать =) в топике
                  +1
                  «Я — программист 1С.» и?
                  есть люди которые умеют просто настраивать некоторые вещи, а есть программисты которые могут с нуля написать например партионный складской учет… разная квалификация у разных 1С-ников…

                  заменяем слово 1С на любое другое и имеем

                  «Я — программист С++. Я люблю базы данных», а потом спрашиваешь его, к примеру, про Nested Sets, а он на тебя смотрит как на фашиста… Упаси спросить про типы данных, паттерны или вроде того.

                  «Я — программист Axapta. Я люблю базы данных», а потом спрашиваешь его, к примеру, про Nested Sets, а он на тебя смотрит как на фашиста… Упаси спросить про типы данных, паттерны или вроде того.

                  Что изменилось?
                  • НЛО прилетело и опубликовало эту надпись здесь
                      +3
                      я злой? я просто за свою жизнь писал код на многих языках и 1С ничем не хуже или лучше других языков… и мне непонятен некий снобизм иногда царящий в интернетах относительно 1С… нишевый язык со своими плюсами и минусами… и 1С-ники все очень разные…
                      • НЛО прилетело и опубликовало эту надпись здесь
                          +1
                          нет, но лада калина нишевый автомобиль и имеет своего потребителя. и от того что она лада калина она не становится неавтомобилем…
                      0
                      т.е. вы хотите сказать, что программист C++ не знает ни паттернов, ни типов данных?
                        0
                        Вы хотите сказать что программист XYZ не знает типов данных? Как он тогда стал программистом? я говорю о том что программисты бывают с разным уровнем. Я видел девочек которые на Visual C++ мышкой «программировали» экранные формы, не понимая что делают, потом добивали пару строк кода из методички… Думаете они знают что такое перерны и диты данных?
                          0
                          это не программисты, а дилетанты
                  0
                  кроме того вполне есть шахматы (chessns) написанные на 1С с уровнем ~ 3 разряда написаные NS-ом…
              +1
              Ну и холивар тут развели про программистов 1С.
              Добавлю от себя, я как-то по необходимости, как раз интеграций с сайтами, посетил начало курсов разработчиков 1С у нас в компании. Прослушал вводный курс 2 недели, так вот мне до сих пор задачи, решаемые сайтами кажутся ничтожными, по сравнению с задачами, решаемыми на платформе 1С. Но в 1С нужно глубокое знание предметной области.

              Ладно по теме поста:
              1. Пост действительно очень полезный. Мысли о таком подходе к иморту каталога были, но не осмеливался реализовывать.
              2. Как файлы генерируете в формате CommerceML для загрузки в Битрикс?
                0
                да холивар страшный поднялся) прямо неудобно как-то,

                а файлы генерируются из CatalogLoader — это наш внутренний продукт, парсер, анализатор прайсер, конвертер и т.д.

                Если интересуют технические подробности, то CommerceML — это обычный XML,
                который получаем путем конвертирования из внутренних объектов
                используя коммерческие библиотеки для генерации XML.
                +1
                Пару неточностей.

                > (странно что в битриксе нет такой функциональности из коробки)
                Функциональность есть. При экспорте из 1С в Битрикс, коды генерируются автоматически, на основании структуры документа import.xml и offers.xml, и общих шаблонов.

                Файлы для изучения:
                /bitrix/modules/iblock/classes/general/cml2.php
                /bitrix/modules/iblock/lang/ru/classes/general/cml2.php

                Пример: habrastorage.org/storage1/d3e8e311/ee2a2f87/e8d4ad11/1484834f.png

                > el.value = ‘CATL_’ + t;
                Но если все таки генерируете через js, то лучше подставлять «CML2_», это автоматический префикс Битрикса.
                  0
                  Спасибо за уточнения, буду пользоваться.
                  0
                  В действительности на данном этапе нам требовалось засветить на сайте более одной тысячи свойств на карточках продуктов

                  И это все в одном инфоблоке?
                  0
                  Ого, мощно.
                  А есть информация про нагрузки, которые держит при этом сайт. Нагрузочное тестирование делали?
                  Какие фильтры, отборы и сортировки есть на сайте?
                    0
                    Такой информации предоставить не могу (по поводу нагрузки),
                    фильтров в нашем опыте битрикса не было,
                    в действительности на этой сайте было около 5000 товаров и был хороший хостинг,
                    поэтому было все красиво.

                    Много это когда товаров становится более 15 тысяч, тогда уже нужно оптимизировать магазины,
                    личный рекорд наполнения более 90 тысяч товаров, где было более 400 тыс оригинальных картинок.

                      0
                      90 ктоваров это на коробочном битриксе?
                        0
                        Рекорд был поставлен не на битриксе)
                        0
                        А где картинки хранились в 1С?
                          0
                          Видимо вы несколько пропустили основную идею статьи,
                          здесь рассказано как наполнить Битрикс используя механизмы 1С,
                          а сам 1С отсутствует, потому что его заменяет CatalogLoader.
                      +2
                      >>2) Согласно документации файлы import.xml и offers.xml следует скопировать в папку uploads/1c_catalog, но на >>деле получилось, что нужно это два файла копировать в корневую папку 1c_catalog, предварительно ее создав.

                      Вообще-то путь может быть разный, в зависимости от того, какая папка для загрузки файлов выставлена в настройках главного модуля. Пересохраните настройки главного модуля и вашу путь /1c_catalog станет некорректным, а корректным будет /uploads/1c_catalog. Т.е. скрипт bx_1c_import_lite.php перестанет видеть ваши файлы.
                        0
                        Здравствуйте.

                        Мне достался интернет-магазин на битриксе. Впервые. Я ковыряюсь, изучаю, разглядываю, понимаю, учусь. Опыт работы с другими CMS есть, так что не смотрю как баран на новые ворота.

                        Задача у меня именно та же, что и описана в Вашем случае.
                        Необходимо добавить около 1000 товаров. У каждого товара — несколько изображений/ Цена / Несколько характеристик / и есть PDF-ки техдокументации.

                        Скажите, вот с момента написания статьи прошло 3,5 года. Вы не могли бы мне сказать — появилось ли какое либо решение, по прошествию этого времени, которое могло бы ускорить процесс работы в плане импорта товаров на сайт?

                        Или ваш мануал (включая вкрапления на js) имет смысл использовать?

                        Благодарствую %)

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

                        Самое читаемое