У вас 1С в бухгалтерии и магазин в интернете. Оба считают, что знают ваши остатки. Кто-то сводит их руками, обычно вечером, обычно неправильно.
Интеграция несложная технически. Она сложная потому, что начинается с вопроса, на который разработчик ответить не может.
Вопрос, который идёт первым
По каждому полю: какая система права?
Остатки: 1С или магазин? Если клиент покупает онлайн, а в тот же момент продавец списывает тот же товар со склада через 1С, чьё число побеждает?
Цена: меняется в 1С и спускается в магазин или наоборот? Что происходит с акциями, которые существуют только онлайн?
Описания и фотографии: почти наверняка магазин, потому что 1С не для этого — но тогда новый товар, созданный в 1С, приезжает в магазин без текста, и кто-то должен знать, что написать его — его работа.
Заказ: создаётся в магазине и уходит в 1С, но статус его дальше меняется в 1С. То есть для заказов направление разворачивается на полпути.
Это бизнес-решение раньше, чем техническое, и если его не примете вы, его молча примет тот, кто пишет код, — и примет неверно, потому что не знает, как работает ваш склад.
Когда ответы есть, остальное — исполнение.
Три пути внутрь, по предпочтительности
1. Интерфейс REST/OData, если версия позволяет
Начиная с платформы 8.3.5, 1С сама генерирует REST-интерфейс над вашей базой, по протоколу OData. Внутри 1С ничего не программируется: базу публикуют на веб-сервере и ставят галочку в Конфигураторе, в Администрирование → Публикация на веб-сервере → Публиковать стандартный интерфейс OData.
Это самый чистый вариант: чтение и запись по объектам конфигурации, в реальном времени, без промежуточных файлов и без второй копии данных, которая может отстать.
2. HTTP-сервисы, написанные внутри 1С
Когда стандартного интерфейса не хватает — нужна операция, которая в 1С означает пять шагов, а не простое чтение, — HTTP-сервис пишется прямо в конфигурации.
Для этого нужен человек, работающий внутри 1С. Обычно ваш партнёр по 1С, а не мы. Эту границу стоит провести сразу: мы берём всё, что снаружи 1С, они — то, что внутри.
3. Обмен файлами, если установка старая
CommerceML — стандартный XML-формат, через который 1С выгружает каталог, цены, остатки и заказы. Работает на установках, где ни REST, ни HTTP-сервисы недоступны или не разрешены.
Это самый медленный путь и единственный не в реальном времени: обмен идёт по расписанию, раз в несколько минут или часов. Для остатков это значит, что вы иногда продадите то, что только что закончилось. Компенсируется буфером — не показывать онлайн последние две штуки, — но компенсация это решение, а не исправление.
Что нужно, чтобы начать
Список короткий, и каждый пункт блокирует, если его нет.
Какая конфигурация и какая версия. «1С» — это не один продукт. Управление торговлей, Бухгалтерия и конфигурация, доработанная кем-то шесть лет назад, — три разные вещи с разными объектами.
Путь внутрь. Один из трёх выше. Если база работает на машине в вашем офисе без доступа снаружи, нужен VPN или агент, который выходит наружу сам.
Решения по полям. Те, что в начале статьи, записанные. Это не обязательно формальный документ, но это должно быть явно.
Тестовая копия базы. Не рабочая. Первый прогон интеграции пишет неправильные вещи — это нормально, — и место, куда он их пишет, имеет значение.
Человек с вашей стороны, который может менять в 1С. Даже если мы выберем путь, не требующий программирования внутри 1С, наступит момент, когда что-то надо опубликовать, выдать право или добавить поле.
Что обычно ломается
Обе системы пишут в одно поле. Самое частое, и проявляется только на второй месяц: остатки синхронизируются в обе стороны, и при пересечении в несколько секунд побеждает тот, кто записал последним. Лечится правилом из начала статьи, а не более умным кодом.
1С не отвечает ночью. Многие установки закрываются или блокируются на время закрытия дня. Интеграция, которая считает, что 1С доступна всегда, потеряет заказы ровно в тот промежуток, когда никто не смотрит.
Коды товаров не сходятся. В 1С у товара свой внутренний код, в магазине другой, и кто-то когда-то связал их по наименованию. Первое переименование рвёт связь молча. Связывать нужно по устойчивому идентификатору, а не по тексту.
Цена с НДС и без. 1С обычно хранит цену без НДС, магазин показывает с ним. Если эти двое не договорились с самого начала, разница всплывёт в счёте, а не в коде.
Сколько занимает и сколько стоит
Код обычной синхронизации — товары, цены, остатки, заказы — это дни работы, а не месяцы.
Растягивает срок всё, что вне кода: получение доступа к базе, доработанная конфигурация, где объекты уже не там, где должны быть, и ожидание решений по полям. Мы видели интеграции, где половина календарного времени ушла на вопрос «чьи остатки главные», заданный уже на середине.
Лучшее, что вы можете сделать до того, как просить оценку, — ответить на вопросы из первого раздела самостоятельно. С ними на руках вы получаете цену. Без них — прикидку.