Интеграция с 1С: как связать учётную систему с сайтом, приложением и CRM
Сайт торгует по вчерашним остаткам, менеджер вбивает заказ второй раз руками, а бухгалтерия сводит оплаты в отдельной таблице — так выглядит компания, в которой 1С живёт отдельно от всего остального. Мы в Code Pilots делаем обмен между системами и надстройки поверх учётного ядра, поэтому чаще видим не первую настройку, а чужой обмен, который перестал справляться.
Если совсем коротко. Интеграция с 1С — это не одна задача, а набор обменов: каталог и цены на сайт, заказы обратно, контрагенты и оплаты в CRM, отгрузки в личный кабинет. Для каждого обмена отдельно выбираются механизм, направление, ключ сопоставления и частота.
Работоспособность обмена определяют три вещи, о которых редко говорят на старте: есть ли устойчивый ключ у каждой записи, выдержит ли база нагрузку от внешних запросов и узнаете ли вы о падении обмена раньше клиента.
В статье
- Что значит «интегрировать с 1С»
- Пять способов обмена
- Онлайн или пакетно
- Что ломается на объёмах
- Витрина и очередь
- Ключи: чем сшивают записи
- Безопасность обмена
- Окна регламентных работ
- Мониторинг и восстановление
- Сколько стоит
- Что писать в ТЗ
- Повторяющиеся ошибки
- С чего начать
- Часто задаваемые вопросы
Что значит «интегрировать с 1С»
Формулировка «нужно связать сайт с 1С» на первой встрече обычно скрывает пять-шесть разных обменов с разными требованиями. Их полезно выписать по отдельности сразу: дальше по каждому принимаются свои решения.
| Сценарий | Что передаётся | Направление | Чувствительность к задержке |
|---|---|---|---|
| Интернет-магазин | Номенклатура, цены, остатки, заказы, статусы | В обе стороны | Остатки и цены — высокая, каталог — низкая |
| CRM | Контрагенты, счета, оплаты, отгрузки | Чаще из 1С в CRM, заказы обратно | Средняя |
| Личный кабинет клиента или дилера | Заказы, отгрузки, взаиморасчёты, документы | Из 1С, заявки обратно | Средняя, но нужен быстрый отклик страницы |
| Мобильное приложение сотрудника | Задания, остатки, факт выполнения, фото | В обе стороны | Высокая, плюс работа без сети |
| Маркетплейсы | Цены, остатки, заказы, статусы | В обе стороны | Высокая, штрафы за просрочку |
| Банк, ЭДО, оператор фискальных данных | Платежи, документы, чеки | В обе стороны | Регламентная, по расписанию |
| Аналитика и отчётность | Продажи, себестоимость, движение товара | Из 1С в витрину | Низкая, обычно ночью |
Из таблицы видно главное: у обменов разные требования, и загонять их в один механизм «раз в 15 минут выгружаем всё» — источник половины проблем. Связка с продажами — отдельный сюжет: если рядом стоит CRM под процесс компании, обмен с ней проектируется вместе с воронкой, а не после запуска. Обзор самого учётного контура и того, что вокруг него достраивают, собран в материале про ERP-системы.
Пять способов обмена
У платформы есть несколько штатных механизмов плюс два «внешних» подхода. Выбор определяет и сроки разработки, и стоимость поддержки на годы вперёд.
| Механизм | Что даёт | Ограничения | Когда применять |
|---|---|---|---|
| CommerceML | Готовый стандарт обмена каталогом, ценами, остатками и заказами с интернет-магазином | Формат заточен под товарные данные, всё нестандартное дописывается | Магазин на CMS с готовым модулем обмена |
| Синхронизация EnterpriseData | Штатный обмен между конфигурациями 1С, настраивается без программиста | Только поддерживаемые конфигурации и заданный состав данных | 1С ↔ 1С, в том числе между юрлицами |
| OData | Доступ к справочникам и документам почти без разработки на стороне 1С | Не отдаёт отчёты, регламентные задания и пользователей; на больших выборках нагружает базу | Чтение данных, витрины, быстрый старт |
| HTTP-сервисы | Свой контракт: свои методы, свои проверки, своя логика записи | Пишется и сопровождается разработчиком 1С | Запись данных, нестандартные операции, мобильные приложения |
| Очередь сообщений | Развязывает системы: 1С пишет, потребители читают в своём темпе | Отдельный компонент в ландшафте, его надо сопровождать | Пиковые нагрузки, несколько потребителей, критичные обмены |
Отдельная строка — файловые выгрузки по расписанию. Их принято ругать, но для редких регламентных обменов с внешними контрагентами это до сих пор разумный вариант: дёшево, прозрачно, легко перезапустить руками.
Что бы вы ни выбрали, у обмена должен быть описанный контракт: перечень полей, их типы, обязательность, поведение при ошибке. Принципы, по которым такие контракты проектируют, разобраны в материале про проектирование API — они применимы и к HTTP-сервисам 1С.
Онлайн или пакетно
Требование «всё должно быть в реальном времени» звучит на каждом втором проекте и почти всегда оказывается дороже, чем нужно бизнесу. Полезнее пройтись по данным и назвать допустимую задержку для каждого типа.
| Данные | Разумная задержка | Как обычно делают |
|---|---|---|
| Остатки | Минуты | Кэш или витрина, обновление по расписанию, точная проверка при оформлении |
| Цены | Минуты — часы | Пакетная выгрузка изменений, срочная переоценка отдельным запуском |
| Каталог и характеристики | Часы — сутки | Ночной пакет, ручной запуск после большой правки |
| Заказ с сайта | Секунды | Сразу в очередь, приём подтверждается покупателю немедленно |
| Статус заказа и отгрузка | Минуты | Обратный обмен по событию или коротким интервалом |
| Оплаты и взаиморасчёты | Часы | Регламентный обмен, сверка раз в сутки |
| Данные для аналитики | Сутки | Ночная выгрузка в витрину |
Разница в деньгах здесь ощутимая. Онлайн-обмен по каждому событию требует доступности учётной системы двадцать четыре часа, обработки повторов и очереди на случай недоступности. Пакетный обмен изменений живёт спокойнее и в большинстве сценариев закрывает задачу полностью.
Полезный компромисс для магазина: остатки показывать из быстрого кэша, а фактическую доступность проверять один раз — в момент оформления заказа. Покупатель видит быстрый каталог, а обещание отгрузить подтверждается уже по актуальным данным.
Второй приём, который экономит и время обмена, и нервы поддержки, — передавать только изменения. У каждой записи хранится отметка последней правки или номер версии, и внешняя система забирает то, что появилось после её последней успешной синхронизации. Полная выгрузка при этом остаётся как аварийный режим: раз в неделю ночью или по кнопке, когда данные разъехались.
Для мобильных приложений добавляется третье требование — работа без сети. Устройство держит локальную копию нужного среза, отправляет накопленные изменения при появлении связи и умеет разбирать конфликт, когда одну и ту же запись правили в двух местах. Правило разрешения конфликтов формулируется на этапе ТЗ, а не в момент, когда он случился.
Что ломается на объёмах
Обмен, который отлично работал на тысяче позиций, начинает вести себя иначе после десяти тысяч. Проблемы повторяются от проекта к проекту.
Дубли номенклатуры. Одна позиция приезжает на сайт двумя-тремя карточками, потому что сопоставление идёт по наименованию: лишний пробел, другой регистр, «х» вместо «×». Лечится единственным способом — устойчивым ключом, о котором ниже отдельная глава.
Пики при массовых изменениях. Переоценка каталога или пересчёт остатков после инвентаризации создают волну изменений, которую внешняя система пытается принять синхронно. Нормальное поведение — складывать такие изменения в очередь и разбирать её в своём темпе.
Блокировки и «виснущие» сеансы. Тяжёлый внешний запрос конкурирует с работой пользователей за одни и те же данные. Особенно заметно, когда витрину сайта строят прямыми запросами к учётной базе на каждый клик посетителя.
Полная выгрузка вместо изменений. Пока номенклатуры немного, «выгружаем всё» выглядит проще. На больших каталогах полный пакет перестаёт успевать в окно, и обмен начинает наезжать сам на себя.
Повторы без защиты. Внешняя система не получила ответа, отправила заказ ещё раз — в 1С появился второй документ. Без ключа операции такое происходит регулярно, а находят это обычно на складе.
Обмен встал после обновления. Конфигурацию обновили в пятницу вечером, реквизит переименовали, структура выгрузки поехала. Если обмен нигде не описан и не покрыт проверкой, выясняется это через несколько дней — по жалобам, а не по мониторингу. Отсюда практика: обновление конфигурации проходит сначала на тестовом контуре, где обмен прогоняют целиком.
Витрина и очередь
Прямая связка «сайт ходит в 1С» работает, пока нагрузка невелика, а требования к скорости мягкие. Дальше между системами появляется промежуточный слой, и это нормальная эволюция, а не признак ошибки в проектировании.
Витрина данных. Отдельная база, в которую учётная система выкладывает то, что нужно внешнему миру: карточки, цены, остатки, статусы. Сайт и приложение читают только её, поэтому запросы посетителей не доходят до учётного контура. Обновляется витрина по расписанию или по событию.
Очередь сообщений. Буфер между отправителем и получателем: 1С публикует событие, потребители забирают его в своём темпе. Если внешняя система лежит, сообщения ждут; когда поднимается — разбирает накопленное. Это же место, где живут повторы и порядок обработки.
Когда систем становится больше четырёх-пяти, точечные обмены превращаются в паутину, и разговор переходит к общей интеграционной шине. Для двух-трёх систем шина избыточна: витрины и одной очереди достаточно.
Ключи: чем сшивают записи
Ключ — самая скучная и самая дорогая тема интеграции. Правило простое: у каждой сущности должен быть идентификатор, который не меняется никогда и не зависит от того, как её назвали.
Для номенклатуры это внутренний идентификатор записи или артикул, если он действительно уникален и не переиспользуется. Для контрагентов — ИНН плюс КПП, с оговоркой на филиалы. Для заказов — номер с префиксом источника, чтобы заказ с сайта и заказ из розницы не столкнулись.
Отдельно фиксируется ведущая система по каждому справочнику: где заводят новую позицию, кто имеет право её менять, что делать с записями, созданными на другой стороне. Это уже дисциплина управления мастер-данными, и без неё обмен превращается в перенос расхождений.
Практический приём: таблица соответствия идентификаторов на стороне внешней системы. Она позволяет пережить переименования, объединение дублей и даже смену учётной системы без переписывания всей интеграции.
Отдельно стоит договориться, что происходит при объединении дублей в 1С. Две карточки схлопнули в одну — на сайте остались две, и на одну из них ведут ссылки, отзывы и позиции в старых заказах. Обмен должен уметь передавать событие «эта запись теперь та», а внешняя система — переносить связанные данные и ставить редирект.
Безопасность обмена
Учётная база содержит всё: цены закупки, контрагентов, зарплаты, персональные данные сотрудников. Поэтому публиковать её в интернет напрямую нельзя, даже если это быстрее.
Рабочая схема: обмен идёт через шлюз или отдельный сервис во внешнем контуре, а сама база остаётся внутри сети. Доступ — только по защищённому каналу, с ограничением по адресам, с отдельным пользователем обмена, у которого права ровно на те объекты, что участвуют в интеграции.
Дальше — гигиена: пароли обмена не живут в коде и в файлах конфигурации репозитория, запросы логируются с указанием источника, тестовые контуры работают на обезличенных данных. Персональные данные передаются только в том объёме, который нужен для операции.
Окна регламентных работ
У учётной системы есть периоды, когда её лучше не трогать: закрытие месяца, расчёт зарплаты, инвентаризация, обновление конфигурации. В это время тяжёлый обмен конкурирует с людьми, которые обязаны закрыть период в срок.
Практика простая: расписание обменов согласуется с финансовой службой, тяжёлые выгрузки ставятся в ночное окно, а на время регламентных работ включается режим, в котором внешние системы продолжают принимать заказы, но кладут их в очередь. Клиент при этом ничего не замечает — заказ принят, обработка начнётся через час.
Мониторинг и восстановление
Обмен ломается всегда — вопрос в том, как быстро об этом узнают. Минимальный набор, который стоит требовать от подрядчика на приёмке:
- Журнал обмена с человекочитаемой ошибкой: что за документ, куда шёл, на чём упал.
- Алерт в почту или мессенджер при накоплении ошибок или остановке обмена дольше согласованного времени.
- Повторная отправка — руками из интерфейса и автоматически по расписанию, без участия разработчика.
- Ключ операции, по которому повтор не создаёт дубль.
- Сверка — регулярное сравнение количества документов и сумм на обеих сторонах.
Последний пункт часто считают избыточным, пока не выясняется, что за месяц на сайт не доехали двести карточек, а в 1С не приехали сорок заказов — и никакой ошибки при этом в журнале не было.
Мониторинг ставится вместе с обменом, а не после первого инцидента. Разница в стоимости небольшая: журнал и алерт — это несколько дней работы на этапе разработки против бессонной ночи разбора и потерянных заказов потом. На приёмке имеет смысл прямо попросить показать, как выглядит остановка обмена: подрядчик глушит внешний сервис, а вы смотрите, придёт ли уведомление и переживут ли данные повтор.
Сколько стоит
Диапазон между простой выгрузкой и двусторонним обменом с очередью — примерно десятикратный, поэтому цена всегда считается по списку объектов. Что двигает смету:
| Фактор | Дешевле | Дороже |
|---|---|---|
| Направление | Односторонняя выгрузка | Двусторонний обмен с подтверждениями |
| Состав данных | Один-два объекта | Каталог, заказы, оплаты, документы, статусы |
| Режим | Пакетно по расписанию | Онлайн по событию с повторами |
| Состояние справочников | Есть ключи и порядок | Дубли, разные ведущие системы |
| Конфигурация | Типовая | Изменённая, снятая с поддержки |
| Объёмы | Тысячи записей | Сотни тысяч, пики переоценки |
| Требования к отказоустойчивости | Обмен может подождать | Очередь, мониторинг, сверка, регламент восстановления |
По нашим работам отдельная интеграция стоит от 150 тыс. до 1,5 млн ₽ — это цена за одну связку, а не за проект целиком. Заказная разработка продукта под процесс начинается от 1,7 млн ₽, модули и личные кабинеты поверх 1С — от 3 млн ₽, аудит существующих обменов с разбором архитектуры — от 200 до 600 тыс. ₽. Точную цифру считаем по списку объектов и режимов: оценка проекта бесплатная.
Прикинуть порядок бюджета можно самостоятельно — бесплатный калькулятор оценки собирает вилку по составу работ за несколько минут.
Что писать в ТЗ
Документ на одну-две страницы по каждому обмену снимает большую часть будущих споров. Что в нём должно быть:
- 1. Объекты и поля. Что передаём, с точным перечнем полей и указанием обязательных.
- 2. Направление и инициатор. Кто кому отправляет и по какому событию.
- 3. Ключ сопоставления. Чем сшиваются записи и что делать, если ключа нет.
- 4. Режим и частота. Онлайн, по расписанию, по кнопке; допустимая задержка.
- 5. Объёмы. Сколько записей сейчас и сколько ожидается через год; пиковые сценарии.
- 6. Поведение при ошибке. Повтор, откладывание, ручной разбор; кто получает уведомление.
- 7. Окна недоступности. Когда обмен приостанавливается и что происходит с данными в это время.
- 8. Тестовый контур. Копия базы, на которой можно проверять, не трогая боевую.
- 9. Ответственные. Кто отвечает за 1С, кто за внешнюю систему, кто принимает результат.
Повторяющиеся ошибки
Сначала пишут код, потом ищут ключ. Обмен запускают на наименованиях, а через месяц разбирают дубли вручную.
Тестируют на боевой базе. Экономия недели на разворачивании копии оборачивается испорченными документами и разговором с бухгалтерией.
Считают, что обмен настраивают один раз. Меняются конфигурация, структура каталога, требования маркетплейсов — интеграция требует сопровождения так же, как и любой другой код.
Никто не отвечает за обмен. Подрядчик сделал и ушёл, внутренний специалист по 1С считает это зоной веб-студии, веб-студия — зоной 1С. Обмен встал в пятницу, узнали в понедельник от клиента.
Открывают базу наружу «на время запуска». Временное решение живёт годами и однажды становится историей про утечку прайсов и контрагентов.
С чего начать
Первое — выписать список обменов по образцу первой таблицы: что и куда передаётся, в какую сторону, с какой задержкой. Обычно в списке оказывается на два-три пункта больше, чем предполагалось на старте.
Второе — по каждому объекту назвать ключ и ведущую систему. Если ответа нет ни у кого, начинать надо с порядка в справочниках, иначе любая интеграция будет разъезжаться.
Третье — если обмен уже есть, собрать статистику: сколько ошибок за месяц, сколько документов расходится при сверке, сколько времени занимает разбор инцидента. С этими цифрами становится видно, чинить существующее или строить заново.
Часто задаваемые вопросы
Частично. Типовой обмен с интернет-магазином на популярных CMS настраивается штатными средствами, и для базового сценария «каталог, цены, остатки, заказы» этого хватает. Программист нужен, когда появляются нестандартные поля и правила, обмен с несколькими системами, требования к скорости или конфигурация уже дорабатывалась.
По задаче. Для магазина на CMS — типовой обмен CommerceML. Для чтения данных во внешнюю витрину — OData. Для записи и нестандартных операций — HTTP-сервисы со своим контрактом. Для обмена между конфигурациями 1С — штатная синхронизация. Для пиков и нескольких потребителей — очередь сообщений. На реальном проекте обычно сочетаются два-три механизма.
От 150 тыс. до 1,5 млн ₽ за одну связку. Разброс определяют направление обмена, состав объектов, режим, объёмы, состояние справочников и то, дорабатывалась ли конфигурация. Проект из нескольких обменов считается по каждому отдельно, оценка бесплатная.
Простая односторонняя выгрузка — от недели-двух. Двусторонний обмен заказами с подтверждениями и повторами — от месяца. Комплексная интеграция нескольких систем с витриной, очередью и мониторингом — от двух-трёх месяцев. Сроки чаще растягивает не разработка, а согласование ключей и приведение справочников в порядок.
Будет, если сайт ходит в учётную базу напрямую на каждый запрос посетителя. Правильная схема — быстрый кэш или витрина для чтения, обмен изменениями вместо полной выгрузки, тяжёлые пакеты в ночном окне и очередь на время пиков. При такой схеме нагрузка на учётную систему остаётся предсказуемой.
Разработка с Code Pilots
Code Pilots — студия заказной разработки полного цикла: веб- и мобильные продукты со сложной бизнес-логикой, интеграциями и высокими нагрузками. Обмен для нас не сопутствующая работа, а отдельная инженерная задача: витрины и кэш, очереди для развязки пиков, журнал с повторами и алертами, сверка данных на обеих сторонах.
Что делаем вокруг учётного ядра: личные кабинеты для клиентов и дилеров, мобильные рабочие места для склада и выездных сотрудников, витрины для аналитики, обмен с маркетплейсами и внешними сервисами. Внедрение ERP под ключ и обслуживание серверного парка не берём — это работа других команд.
Внутри — аналитики с отраслевой экспертизой, backend- и мобильные разработчики, QA и DevOps, middle+ и senior. Пришлите список систем, между которыми данные ходят руками, — по нему уже видно, с чего начинать. Обсудить проект →