Как синхронизировать 1С и Magentо избежав бэкапов

Ко мне часто приходят клиенты или "коллеги по цеху" с предубеждением, что связать 1С и Magento – это сложно и долго.  В процессе общения я узнаю, что до этого момента им не задавали нужные вопросы и не объясняли технические моменты.

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

  1. Подобрать подходящий готовый модуль, установить его и настроить.
  2. Написать кастомный код, если п.1. не подходит.

Но для интеграции с 1С (как и с любой CRM) этого недостаточно. Во-первых, потому что готовых модулей нет, есть только некое подобие у Рудженты, от которой обычно больше проблем, чем пользы. Во-вторых, просто сесть и написать кастомный код не получается, т.к. не понятно, что конкретно писать и как это дело потом скормить 1С.


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

1. Понять, какие данные синхронизировать

Уже на первом этапе переговоров вы слышите стандартную просьбу от клиента: "..нам нужно синхронизироваться с 1С". На вопрос, какие данные интегрировать, обычно получаете неуверенный ответ: "наверное, каталог…, - а заказы? - а ну да, еще их.."

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

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

2. Выбрать метод обмена данных 

Что передавать мы уже знаем, теперь подходим к вопросу, как передавать. Выбор метода обмена  – это всегда индивидуальный подход. У каждого есть свои плюсы и минусы. Мы выбираем из таких методов: SOAP или REST, файлами по ftp, POST или GET запросы.

Один из основных и, скажем, правильный для Magentо является метод SOAP. Его плюс в том, что у Magento в коробке есть набор готовых методов - API.  Чтобы его использовать, сторонам нужно установить SOAP CLIENT на свой сервер, на что менеджеры 1С далеко не всегда согласны. Но убедить стоит. Метод хорош с точки зрения безопасности. Происходит прямая интеграция - 1С вызывает метод Magentо. Он функциональный и позволяет быстро решить стандартные обмены. Например, сделать обновление данных по продуктам. 

Помимо SOAP распространённым остается файловый метод. Его механизм понятен клиенту и его легко "менеджерить". К примеру, если нужно оперативно выяснить на чьей стороне допущена ошибка (Magentо неправильно прочитала файл или 1С записала в него ложную информацию), любой менеджер на стороне клиента может открыть файл и увидеть ответ. Зачастую файл имеет понятный формат csv, txt или xls.

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

Метод REST по сравнению с SOAP более простой: выполняются обычные HTTP запросы. Но считается менее безопасным и функциональным.

Обмен GET или POST запросами применим, если экспортируете общие данные, которые не требуют особой безопасности. Чтобы обмениваться таким способом, 1С даже не нужно подключаться к серверу по FTP или API. Метод понятный для 1С-ников. На нем они быстрее пишут свою сторону.

3. Форматировать данные в нужную форму

Мы уже знаем, какие данные передавать и каким способом. Но, бывает, возникает одна маленькая проблемка - "подготовка данных".  

Пример из практики Perspective Studio:  

"Проект - интернет магазин драгоценных камней. На стороне 1С данные о весе камня указаны в граммах, потому что так приходит от поставщиков. Клиент ставит задачу, чтобы на сайте вес был в каратах - это более понятно покупателю. Простым математическим умножением отделаться не получается. Соотношение каратов к граммам зависит от плотности камня: у алмаза она одна, а топаза - другая. Для решения задачи мы писали некий препроцессор. Он с помощью справочника плотности разных камней делал вычисления и записывал в новый файл. Из него данные уходили в Magentо."

Еще пример:

"Проект – интернет-магазин одежды. При импорте новых товаров из 1С в Magento, последняя всегда ожидает какой-то уникальный SKU (код товара), для будущей связи. В данном случае было два варианта: ID товара в 1С, который, как сказал 1Cник, может меняться, и артикул, который пишется на бирке вещи. Артикул на первый взгляд подходил, но как оказалось, если вещь есть в разных размерах и цветах, то у нее будет одинаковые артикулы на бирке. Поэтому мы решили, что в Magentо SKU будет попадать как разультат сливания артикул+размер+цвет, например FF01_38_009, что и будет всегда уникальным."

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

Не стоит также думать, что подготовка данных нужна только, когда данные идут в направлении из 1С в Magentо. Например:
"Нам нужно было передавать вместе с данными о заказе еще и комментарии, которые пользователь указывал при оформлении заказа. Нюанс был в том, что это поле он мог заполнять с переносами на новую строку, и для Magentо это ок. Но передавая заказы в 1С построчно, нам пришлось эти переносы обрезать."
Мы в Perspective Studio стремимся вместе с клиентом распределять зоны ответственности: какие вопросы решаем мы, а какие - специалист 1С.

4. Продумать расписание синхронизации

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

5. Не забыть о масштабировании в будущем

В любой интеграции с CRM, ERP или другой системой есть одна сложность, которая проявляется со временем. Когда данных становится значительно больше, то логика, которая еще вчера работала "на ура", начинает уже глючить. Проектируя интеграцию, всегда представляйте, как будет себя вести система при масштабировании. Например, можно не просто отдавать все заказы за последний день, а отдавать только заказы со статусом new, чтобы не передавать лишние. Или, например, популярный товар могут покупать одновременно в офлайне и онлайне. В таком случаи подумайте о механизме резервирования в момент оформления заказа. Все данные, которые можно вынести в справочники, лучше в них вынести, и синхронизировать отдельно.

6. Подумать о безопасности

Важно не забывать о безопасности. Если вы используете вызовы по URL, делайте авторизацию. Если вы читаете файлы по FTP, выставьте минимальные права на папку.

Выводы

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

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

Успешных интеграций!