1. Главная
  2. Блог
  3. Полезные статьи
  4. Интеграция Битрикса с лысым чертом

Интеграция Битрикса с лысым чертом

7 Марта 2019
665

Интеграция Битрикса с лысым чертом


 Подписаться


Степан ОвчинниковАлексей ШкарупаАнатолий ЕрофеевСергей Покоев

122.png

Сайт на 1С-Битрикс можно связать с чем угодно

Интеграция, обмен информацией, импорт-экспорт данных

Определение: Интеграция — обмен информацией с другими сайтами, базами данных, программами.

В 21 веке любая серьезная разработка обменивается данными с другими системами.

Интеграция нужна почти всем и почти всегда.

Почему Битрикс?

Платформа 1С-Битрикс прекрасно подходит для интеграции с любыми информационными системами. Возможности, партнерская сеть и поддержка Битрикса позволяют делать на нем почти любые бизнес-проекты. 20 000 из 49 000 российских интернет-магазинов сделаны на Битриксе (Data Insight, 2013).

Открытая архитектура дает свободу разработчику для интеграции сайта на Битриксе с любой внешней системой.

Интеграция двух сложных систем редко бывает простой, но с Битриксом — всегда возможна.

Эта статья про интеграцию сайта с чем угодно и про технологии 1С-Битрикс для этого.  
Текст статьи ориентирован на менеджера с хорошим уровнем понимания технологий. Идеальный случай — «программист в завязке».

Почему ИНТЕРВОЛГА?

Веб-интеграция - это создание крупных информационных веб-систем , глубоко интегрированных в бизнес Заказчика.

Это снижение затрат на работу с клиентами, рост продаж и автоматизация процессов.

ИНТЕРВОЛГА – компетентный веб-интегратор . Мы можем решить все задачи веб-интеграции собственными силами. Большинство наших проектов – комплексные, интеграционные.

Мы приносим пользу бизнесу клиента за счет осмысленного применения веб-технологий. 

В этой статье рассказано о технологических возможностях интеграции сайтов на Битриксе с внешними системами. 

С чем можно интегрировать сайт на 1С-Битрикс?

C чем угодно. Нужна задача, “песочница”, проектировщик и программист.

«Песочница» это игрушечная, тестовая система, которая на этапе разработки изображает, эмулирует реальную систему. Это может быть пример файла выгрузки, структуру которого обе стороны подписали. Лучше — кровью.

Отсутствие песочницы — путь к проблемам.

Проектировщик и программист должны быть умными и опытными. Это значит: знать Битрикс, иметь опыт работы с большими объемами данных и высокой нагрузкой и уметь думать вперед на несколько шагов.

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

Что обычно имеется в виду под интеграцией:

  • интеграция Битрикса с 1С;

  • как сделать на Битриксе выгрузку в Яндекс.Маркет;

  • импорт и экспорт данных в Битрикс в csv и xml;

  • интеграция с социальными сетями, вставка «лайков» на сайт на Битриксе;

  • получение данных с других сайтов;

  • подключение к внешней базе данных;

  • интеграция Битрикса с внешним API.

интеграция Битрикса с яндекс-маркетом, 1С

Какие будут проблемы с интеграцией и как их решать

«Никогда не пытайтесь повторить удачный эксперимент»

Закон Мерфи

Вы сделали интеграцию, не дождавшись получения реальной выгрузки

«Чисто писано в бумаге, да забыли про овраги»

Лев Толстой, 1857 г

Если нужна интеграция и мало времени, то есть искушение взять ТЗ (согласованный формат обмена, протокол, спецификацию) и «сделать свою часть», не дожидаясь данных от второй системы.

Это очень опасно.

Вам потребуется многое переделывать после поступления реальных данных. Изменится структура, данные будут неверно распределены по полям, вместо xml по POST придет json по SOAP и так далее.

Дело не в программистах. «Овраги» в реальных данных всегда мешают точному исполнению ТЗ. Даже если его писали вы сами.

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

Мы стараемся даже ТЗ на интеграцию не писать до получения доступа к «песочнице».

png;base643ec810055e420e6b.png


Произошли неожиданные изменения в структуре данных. Все сломалось

— Они формат ответа поменяли

devanswers.ru/a/8b

Интеграция готова, все хорошо.

Сколько времени все проработает без изменений, которые сломают интеграцию? На практике — не более года. А если вам повезет, что-то может измениться уже после первого успешного теста.

Универсального решения нет. Бизнес изменчив, и протокол любого обмена будет меняться.  x_78fecdba.pngЧтобы избежать тяжелых технических проблем, обе стороны должны понять, что изменение протокола разрешено только после согласования, планирования и аккуратного выполнения изменений.

Хуже нет, чем утром в понедельник 1-го числа узнать что во-первых, РосАлкогольРегулирование изменило отчеты, а во-вторых, программисты как раз вчера что-то обновили до новой версии.

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

Производительность выгрузки. Импорт тупит

— Нужно докупить два сервера,

чтобы нормально работало

devanswers.ru/a/gg


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

png;base64b57d2aeae536e9e7.png

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

Универсального решения нет, но есть несколько простых советов:

  • Запомните: задача интеграции — серьезная. Пишите ТЗ, качественный код, делайте тестирование, ведите историю изменений. 
    «Тяп-ляп» допустим только для простой однократной загрузки.

  • По возможности всегда используйте штатные возможности интеграции 1С-Битрикс. 
    Когда потребуется расширить функции или повысить скорость — измените их.

  • Ведите журналы ошибок обмена данными. Это сэкономит массу времени на поиск проблемных мест. Не злоупотребляйте длинными и подробными лог-файлами.


Штатные механизмы интеграции

— Не сломано - не чини.

Армейская мудрость.

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

Это:

  • импорт и экспорт данных в инфоблоки Битрикс в форматах csv и xml;

  • стандартная выгрузка в Яндекс.Маркет;

  • контроллер сайтов;

  • агенты для запуска заданий по расписанию (можно использовать агенты, вызываемые при открытии страниц, но лучше агенты, запускаемые с помощью cron);

  • штатный обмен с 1С: Управление торговлей;

  • штатный обмен Корпоративного портала с 1С: Зарплата и управление персоналом.

  • … много всего. Следите за обновлениями, как говорится1c.png

Проблемы со штатными механизмами могут оказаться двух видов:

  1. Они не умеют чего-то, что вам кажется очевидным. Писать нужно в Битрикс (конкретно — на страницу idea.1c-bitrix.ru ), а винить себя. Про песочницу я уже писал, проблема зеркальна. 

    Ничего не мешает протестировать особо важные вещи до принятия решения. 
    Для опытного менеджера слепое доверие маркетингу граничит с профнепригодностью. 

    Настоящие ошибки в стандартных обменах бывают крайне редко. 

  2. Ваши задачи нестандартны. Это не проблема, так и должно быть. Серьезным задачам — особые инструменты. Не хватает скорости, настроек, функциональности? Развивайте штатную реализацию или в крайнем случае пишите свою.

Файловый обмен с инфоблоками

Может, там исо конвертится в вин, 
а потом уже бьется в юникоде

devanswers.ru/a/Nf

проблемы с интеграцией с 1С

Представьте ситуацию:

  • вам нужно сделать интеграцию Битрикса с чем-то непонятным,

  • времени и денег мало,

  • определенность низкая,

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

AK-47-Kalashnikov-[LIMITED-to-500px].jpg

Что делать? Делать на файлах, на инфоблоках, по расписанию. Именно этот вид интеграции проще всего запустить и понять каковы реальные потребности.

Вполне можно сделать простую и надежную, как автомат Калашникова, реализацию «на коленке».

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

  • Инфоблоки = Торговые каталоги 
    Не делать разницы между инфоблоками и торговыми каталогами. Сейчас по факту это разные реализации

  • Поддержка всех типов свойств 
    Импортировать ВСЕ свойства элементов и ВСЕ свойства категорий (в т.ч. пользовательских). 
    Сейчас Битрикс не импортирует пользовательские свойства категорий и поля типа text/html для элементов.

  • Кодировка 
    Выбор кодировки импортируемого файла (несколько популярных)

  • Связанные поля 
    Возможность импортировать xml_id, заданный в другом ИБ, и указать что связать элементы ИБ нужно по ID.

i_027.jpg
  • Шаги 
    Пошаговая работа, порционность и настройки. Кнопки «пауза» и «возобновить».

  • Категории 
    Импорт категорий любой вложенности (максимальный уровень вложенности должен указываться в настройках)

  • Профили

    • Создание профилей настроек для повторного использования (чтобы в будущем снова не указывать соответствие. полей и т.д.)

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

  • Загрузка картинок

    • из папки, находящейся на сервере. в настройках указывается папка, в ячейке csv - относительный путь и имя файла

    • из внешних источников (если указан не путь до картинки, а http, ftp, https - она должна скачиваться, а потом загружаться в поле ИБ)

  • Разделитель 
    Выбор произвольного символа разделителя, а не только табы и запятая

  • Значение по умолчанию 
    Возможность для любого поля (элемента или категории) произвольное значение «по умолчанию». может понадобиться если свойство обязательное, а в файле отсутствует.

  • Логи 
    Протоколирование работы и мониторинг ошибок с уведомлением на емайл об успешности или ошибке (и указания базовой отладочной информации, шаг такой-то строка такая-то и т.л.) 
    Нужно чтобы при сообщении об ошибке фиксировался и присылался на почту также контекст: 20 символов после-до или 1 строка

  • Ссылка 
    Умение получить входной файл по ссылке http:// или ftp://

  • Расширяемость 
    Поддержка файла result_modifier, где написан код, который применяется к данным перед вставкой в ИБ 
    Такой файл при создании профиля должен генерироваться автоматически с указанием всех возможных входных параметров и примером такого кода. 
    Все это может быть взято в комментарий или if(0) 

    Это позволит решить много задач: парсить видео с Youtube; выполнять любое преобразование данных; формировать различных цен;  проставить остатки.

  • Флаг импорта 
    Поддержка флага «импортировать эту строку»

Если все это сделать, многие задачи интеграции будут решаться просто настройкой, а не проектированием и программированием.

Такие вещи вряд ли в обозримом будущем станут частью платформы. 
Мы понимаем это и планируем выпустить свой модуль для Маркетплейса 1С-Битрикс.

Особенности файлового обмена с инфоблоками

— Это не баг, это фича

Подслушано в трамвае

SKU, разноцветные диваны и печаль

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

IE_XML_ID

IE_NAME

IP_MATERIAL

IP_COLOR

000123

Стул Президент

Дерево

Коричневый

000124

Простыня бежевая

Хлопок

Бежевый



Все просто до тех пор, пока не встретятся товары с множественными характеристиками, например сразу нескольких типов:

IE_XML_ID

IE_NAME

IP_MATERIAL

IP_COLOR

000125

Диван Престиж

Дерево

Светло-коричневый

000125

Диван Престиж

Хлопок

Светло-коричневый

000125

Диван Престиж

Пластик

Светло-коричневый



Как ни странно, в идеологии Битрикса это будет воспринято как один и тот же диван «Престиж», но выполняемый в трех разных материалах. Обратите внимание, что у дивана в таблице одинаковы все столбцы, кроме материала. А если вы хотите продавать товары из трех материалов и двух цветов, то узнаете, что такое Декартово произведение :

IE_XML_ID

IE_NAME

IP_TYPE

IP_COLOR

000126

Диван Колосс

Узкий

Красный

000126

Диван Колосс

Узкий

Синий

000126

Диван Колосс

Узкий

Зеленый

000126

Диван Колосс

Широкий

Красный

000126

Диван Колосс

Широкий

Синий

000126

Диван Колосс

Широкий

Зеленый





импорт SKU товарных предложений в Битрикс

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


IE_XML_ID

IE_NAME

IP_TYPE

IP_COLOR

000126

Диван Колосс

Узкий///Широкий

Красный///Синий///Зеленый



Получив такой (или примерно такой) вид файла, программист веб-студии сможет сделать разбиение текста по символам-разделителям (в нашем случае это «///») и поставлять данные в Битрикс как полагается.

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

Злоупотребление этим — путь к бардаку.

Передача данных в отсутствующие справочники. Проблема брендов

debranded-no-noise_popsop_com.png

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

Иногда там вместо названия фирмы написано просто «Китай».

В то время как на сайте хорошо было бы сделать отдельный раздел о производителях товаров, с изображениями и историей создания фирмы. SEO такое SEO.

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

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






Связывание сайта на Битриксе с внешней базой данных на другом сайте

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

Анекдот.

Когда нужно интегрироваться с внешней базой данных? Чаще всего — когда ваш интернет-магазин (реже — личный кабинет на сайте) должен брать товары из внешнего источника, и важен прямой доступ.

Есть несколько вариантов:

  • прямое подключение к внешней базе и работа с ней прямыми запросами на SQL. 
    Решение неаккуратное, но идеологии Битрикса ничем не противоречит (разумеется, если не делать этого в шаблонах компонентов и прочих ненужных местах);

integration-1kscm1o.png
  • применение API внешней базы — если API сделано с умом и работает как часы — радуйтесь, вам повезло;

  • периодический импорт данных к себе в базу для того, чтобы работать с ними родными для Битрикса средствами. 
    Способ этот ничем не проще чем получать информацию из любого другого формата. Подразумевает много ручной малоприятной возни. 
    Плюс в том, что на стороне Битрикса переписывать ничего не надо. Это минимизирует объем работы и отладки.

  • получение из внешней системы дампа базы данных и дальнейший его разбор с попутным решением коллизий.

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

Тогда на стороне Битрикса создается небольшая культурная конструкция, делающая обмен стройным, предсказуемым и стабильно работающим.

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

Если, конечно, вам нужен один нормальный туннель вместо двух кривых.


png;base64c57a6a06b4595517.png


Связывание нескольких сайтов на Битриксе между собой

— А скажите, это любую стенку так убрать можно? 
И в интернет-магазине тоже?

png;base64a8c95808c6f0d0a3.png

1С-Битрикс — хорошая, но платная система. А аппетит приходит во время еды. Это значит что часто заказчик хочет получить второй, третий, пятый сайт, но при этом не тратить лишние деньги на лицензию.

Вообще говоря, Битрикс позволяет развернуть на одной лицензии несколько сайтов через механизм «многосайтовости». При этом сайт (панель управления, база данных, пользователи, хостинг) остается один, но у него несколько доменных имен. У каждого доменного имени свой дизайн и контент, но физически это один сайт.

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

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

Это примерно как варить компот и сосиски в одной кастрюле. Можно, но лучше этого не делать.

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

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

Получение и использование информации с посторонних сайтов

«Знания без размышлений вредны. 
Размышления без знаний опасны.»

Конфуций

Оставим в стороне погодные и валютные информеры, видео с Youtube и аналогичные задачи — для них есть простые и качественные решения.

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

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

png;base64d2c54f924992edda.png

Вопрос в том, как это сделать чтобы решение получилось качественное? Основная проблема — как правило, отсутствие какого-либо цивилизованного формата получения данных. Приходится «парсить» (от английского to parse) сайты «как есть».

Даже если вам разрешили использовать эту информацию, это не означает что к ней будет предоставлен удобный доступ. Обычно наоборот: через полгода обсуждений вам говорят «можно». А как — неясно.

1.png

Давайте рассмотрим самый популярный случай: нужно разместить у себя каталог товаров поставщика, находящийся на его сайте. Тут есть 2 способа: простой и качественный.

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

Есть и другой способ — качественный и сложный. 
Нужно полностью получить каталог поставщика, разобрать его на составные части (разбить HTML-страничку товара на изображение, название, описание и характеристики). Затем сформировать данные в структурированные таблицы и загрузить в Битрикс, например через стандартный CSV-импорт. Несмотря на кажущуюся простоту, риски у этого метода достаточно большие. Мы чаще всего сталкиваемся со следующими проблемами:

  1. Какие-то данные на странице подгружаются по AJAX (нужна полная эмуляция работы браузера, ожидание того, когда данные появятся на странице). Крайне неприятная работа. 

  2. Отсутствие полной информации обо всех данных и их возможных представлениях. Постоянно бывает следующая ситуация: проанализировали 50 страниц на сайте поставщика, выделили все нужные данные, написали код. А когда начали парсить, выяснилось, что состав и оформление полей на сайте-доноре «гуляет». Исследование сайта перед парсингом можно вести долго и все равно не получить исчерпывающей картины. 

  3. Для сайта нужны характеристики, а на сайте поставщика эти характеристики либо написаны как бог на душу положит, либо выведены в такой верстке что невозможно отличить од

Нажмите для звонка
Ваш заказ готов к оформлению
Бесплатная доставка по России
Инструкции по установке включены
Помощь в настройке техники
Дополнительная гарантия на 3 года
Кешбек до 20% на бонусную карту
Возврат и обмен без чека
Гарантированный подарок каждому, кто оформит заказ на сумму более 500 рублей!