Вебформат

Главная/Блог/Сайты и e-commerce

Сайты и e-commerce16 июля 202618 мин

Обмен интернет-магазина с 1С: как устроен и почему не теряет данные

Каталог, цены, остатки и заказы живут в 1С:ERP и приезжают на сайт сами. С октября 2025 года обмен обработал более 75 000 выгрузок - около 750 в сутки; остатки обновляются каждые 5 минут, доля выгрузок с замечаниями - менее 0,2%. Сводный разбор: как устроен обмен, который работает без участия человека и не теряет данные даже при сбоях.

Обмен с 1С, который не теряет данные
Обмен с 1С, который не теряет данные

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

Менеджер работает только в 1С - привычная программа остаётся его рабочим местом. Покупатель работает только с сайтом. Обмен связывает эти две картины мира так, чтобы ни одна из сторон не занималась двойным вводом данных.

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

Ниже - сводный разбор, как этот обмен устроен: от общей архитектуры до поведения при сбоях. Всё описанное работает в промышленной эксплуатации: с октября 2025 года обмен обработал более 75 000 выгрузок.

Как устроена система

Обмен построен на трёх составляющих, размещённых на одной площадке. Сайт принимает выгрузки от 1С, хранит данные витрины и ведёт реестр пометок - перечень того, что нужно передать в 1С. Зона обмена - журнал и очередь выгрузок: здесь фиксируется каждая полученная выгрузка и её текущий статус, отдельно хранится архив всех выгрузок за всё время работы. Сервис синхронизации - отдельная программа, которая разбирает очередь и обновляет данные сайта; она же отдаёт 1С заказы и заявки по запросу.

Обмен интернет-магазина с 1С:ERP - общая схема
1С:ERP
Ведёт товары, цены, остатки, клиентов
Принимает заказы и заявки с сайта
выгрузки - сжатые файлы; подтверждение приёма - за доли секунды
Сайт: приём выгрузок
Файл - целиком в очередь, запись - в журнал обмена
каждая выгрузка и её статус фиксируются
Зона обмена
Журнал и очередь выгрузок
Архив всех выгрузок за всё время работы
очередь проверяется каждые несколько секунд
Сервис синхронизации
Разбирает очередь и обновляет данные витрины
Отдаёт 1С заказы и заявки по запросу
покупатель видит свежие цены и наличие
Витрина магазина
Каталог, персональные цены, остатки, личные кабинеты
Данные на сайте никто не заводит руками: всё, что видит покупатель, приходит из 1С. Обратный поток устроен иначе: сайт ставит пометку "передать в 1С", а полные данные 1С забирает сама - когда готова их принять.

Ключевое решение: приём и обработка разделены

1С передаёт выгрузку и сразу получает подтверждение приёма - на это уходят доли секунды. Разбор данных выполняется отдельно, своим темпом, и 1С его не ждёт. Такое разделение даёт три эффекта:

  • 1С не простаивает в ожидании, пока сайт обработает четверть миллиона строк;
  • тяжёлая обработка не мешает посетителям магазина;
  • если обработка по какой-то причине остановится, приём продолжит работать - выгрузки будут спокойно копиться в очереди.

Ключевое решение: заказы 1С забирает сама

Сайт не пытается "протолкнуть" заказ в 1С. Вместо этого он ставит пометку "передать в 1С" и отправляет короткое уведомление. За полными данными 1С обращается сама - тогда, когда готова их принять. Уведомление лишь ускоряет обмен: даже если оно не дойдёт, пометка останется в реестре, и 1С заберёт заказ при ближайшем плановом опросе. Потерять заказ между системами невозможно.

Как данные из 1С попадают на сайт

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

Путь одной выгрузки: из 1С - на витрину сайта
1С:ERP
Собрала изменения: товары, цены, остатки, клиенты
Упаковала данные в сжатый файл и передала на сайт
приём занимает доли секунды - обработку 1С не ждёт
Сайт: приём файла
Сохранил файл в очередь целиком - "полуфайлов" не бывает
Записал в журнал обмена: статус "ожидает обработки"
Подтвердил 1С приём выгрузки
очередь проверяется каждые несколько секунд
Обработчик очереди
Собрал части выгрузки воедино, определил тип данных
Сверил с текущим состоянием сайта, записал только изменения
Отметка в журнале: "обработана" + подробный протокол
между изменением в 1С и витриной - минуты
Витрина
Покупатель видит свежие цены, остатки и сроки поставки

Почему записываются только изменения

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

Было

Переписывать данные вслепую: полная выгрузка - до 260 000 строк, и каждая строка превращалась бы в запись в базу, даже если ничего не изменилось.

Стало

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

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

Большие выгрузки передаются частями

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

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

Пять правил обработчика очереди

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

  • 01Работает только один обработчик. Перед началом работы обработчик проверяет, не занят ли обмен предыдущим запуском. Если предыдущая обработка ещё идёт - новый запуск завершается сразу, ничего не делая. Так исключается ситуация, когда две программы одновременно правят одни и те же цены или остатки и мешают друг другу.
  • 02Неполные выгрузки ждут. Если выгрузка состоит из нескольких частей и получены не все - она откладывается до следующей проверки. Каталог никогда не собирается из половины данных.
  • 03Устаревшие снимки не обрабатываются. Полная выгрузка - это снимок всех данных на момент выгрузки. Если таких снимков накопилось несколько, обрабатывать их по очереди бессмысленно: каждый следующий заведомо содержит всё, что было в предыдущем. В работу идёт только самый свежий, остальные помечаются устаревшими.
  • 04Одна ошибка не останавливает выгрузку. Ошибочная запись - например, цена для товара, которого нет в каталоге, - попадает в протокол, а обработка продолжается. Одна проблемная строка не должна лишать магазин остальных двухсот тысяч обновлений.
  • 05Отметка о завершении ставится только по факту. Выгрузка считается обработанной лишь после того, как обработка дошла до конца. Если работа прервалась на середине - из-за сбоя или перезапуска сервера, - статус не меняется, и выгрузка автоматически вернётся в работу через несколько секунд. Повтор безопасен: записи привязаны к кодам из 1С, дубликатов не будет.

Третье правило - про устаревшие снимки - стоит показать на живом сценарии: именно оно позволяет обмену быстро восстанавливаться после простоя.

Правило устаревших снимков: восстановление после суток простоя
Сервис обработки стоял сутки
За это время 1С прислала четыре полных прайс-листа: в 09:00, 13:00, 17:00 и 21:00
Каждый снимок - четверть миллиона строк
сервис снова работает: что накопилось в очереди?
Снимки 09:00, 13:00 и 17:00
Помечаются устаревшими и не обрабатываются
Снимок 21:00
Самый свежий - только он идёт в работу
один проход вместо часов обработки
Цены на сайте снова актуальны
Наивная обработка очереди потратила бы часы на заведомо устаревшие данные
Так отбрасываются только полные снимки. Обычные обновления - "изменились три товара", "пришла новая цена" - обрабатываются все до единого, ни одно не теряется.

Как заказы и заявки попадают в 1С

Сайт передаёт в 1С всё, что оформил покупатель: заказы и предзаказы, заявки в сервис-центр - рекламации, ремонт, запчасти, - регистрации оборудования, файлы и переписку по заявкам. Для менеджера это выглядит просто: заказ с сайта появляется в 1С как обычный заказ, и дальше он работает с ним в привычной программе.

Двойная гарантия доставки

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

Заказ с сайта - в 1С: двойная гарантия доставки
Покупатель оформил заказ
Сайт дополняет заказ реквизитами для 1С: контрагент, склад самовывоза, город
сайт делает два независимых действия
Пометка в реестре
Запись "заказ не передан" в базе данных сайта - переживёт сбой, перезапуск и простой 1С
Мгновенное уведомление
Короткое сообщение "появился заказ №N" - нужно только для скорости
1С сама обращается за данными - когда готова их принять
1С забирает заказ целиком
Покупатель, состав, цены, доставка, оплата
Забрав данные, 1С снимает пометку - "передан"
дальше заказ живёт в 1С
Изменения возвращаются на сайт
Статус, счёт на оплату, корректировки менеджера - обычной выгрузкой в личный кабинет
Уведомление лишь ускоряет передачу, но не гарантирует её. Гарантия - реестр пометок: пока 1С не подтвердила приём, заказ числится непереданным и попадёт в ближайший плановый опрос. Потерять заказ между системами невозможно.

Пометка снимается только после того, как 1С действительно забрала данные. Любой сбой на этом пути - недоставленное уведомление, обрыв связи при передаче, недоступность 1С - просто оставляет пометку активной. Обмен повторит попытку.

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

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

Жизненный цикл выгрузки

Каждая выгрузка от 1С регистрируется в журнале обмена и проходит через понятную последовательность состояний. Журнал ведётся в базе данных сайта и доступен администратору в панели управления. Это даёт три вещи сразу: прозрачность - по любой выгрузке видно, дошла ли она, обработана ли и с каким результатом; надёжность - статус хранится в базе, а не в памяти программы, поэтому перезапуски ничего не теряют; возможность разбора - если возник вопрос "почему на сайте такая цена", всегда можно поднять историю.

Состояния выгрузки: от формирования в 1С до архива
Формируется в 1С
Данные собираются в файл; большая выгрузка - по частям
сайт недоступен - 1С повторит позже, данные не теряются
Передаётся на сайт
Файл - в очередь, запись - в журнал обмена
поступают остальные части
Собираются части
Пока получены не все части - выгрузка ждёт
все части на месте
Готова к обработке
Обработчик подхватит её в течение секунд
сбой посреди обработки - автоматический повтор без дубликатов
Обрабатывается
Данные сверяются с сайтом, записываются только изменения
итог фиксируется в журнале
Обработана
Штатное завершение
Обработана, есть замечания
Подробный протокол: что именно пошло не так
Устарела
1С прислала более свежий снимок тех же данных
файлы сжимаются для длительного хранения
В архиве
Все выгрузки за всё время работы; любую можно изучить и обработать повторно

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

Поведение обмена при сбоях

Любой обмен между двумя системами рано или поздно сталкивается со сбоями: сайт уходит на обслуживание, 1С закрывают на регламентные работы, обрывается связь, перезапускается сервер. Вопрос не в том, случится ли это, а в том, что произойдёт с данными. Обмен построен на трёх правилах:

  • ни один сбой не приводит к потере данных;
  • восстановление происходит автоматически, без участия человека;
  • если вмешательство всё же нужно, проблема видна администратору, а не обнаруживается по звонку клиента.
Что сломалосьЧто происходит с даннымиЧто нужно сделать людям
Сайт недоступенОстаются в 1С, передаются повторноНичего
Сервис синхронизации остановленНакапливаются в очереди до запускаНичего
Сбой посреди обработкиВыгрузка обрабатывается зановоНичего
Получена часть выгрузкиВыгрузка ждёт остальные частиНичего
Ошибочные записи в выгрузкеОстальные записи обработаны, ошибки в протоколеИсправить данные в 1С
1С недоступнаЗаказы ждут в реестре пометокНичего
Шесть типовых сценариев сбоев и поведение обмена в каждом

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

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

Какие данные передаются и как часто

Между 1С и сайтом курсирует 21 вид данных в сторону сайта и четыре вида запросов в обратную сторону. Частоты ниже - фактическая статистика работающего магазина.

Поток из 1С на сайтЧастотаЧто внутри
Остатки и складыкаждые 5 минутОстатки по городам и складам, товары в пути с датами поступления, точки самовывоза. Около 90% всего объёма обмена
Каталогоколо 20 обновлений в деньТовары с характеристиками, фото, сертификатами, инструкциями и схемами деталей; товарные группы, составы наборов, совместимости
Ценыоколо 8 обновлений в деньПрайс-лист по всем видам цен и матрица скидок для типов покупателей
Клиенты и персоналоколо 20 обновлений в деньКонтрагенты, партнёры, менеджеры, консультанты
Заказы и сервисоколо 8 обновлений в деньСтатусы, счета на оплату, корректировки менеджера; ответы сервис-центра и переписка по заявкам
Аналитикаоколо 8 обновлений в деньСтатистика закупок дилеров по группам и периодам, сезонный спрос, неликвиды - на этих данных строятся отчёты в кабинете дилера

Отдельно передаётся структура каталога: набор характеристик, справочники, единицы измерения, ставки НДС. Благодаря этому новая характеристика, заведённая в 1С, появляется на сайте сама - без работы программиста.

На основе прайс-листа и матрицы скидок сайт заранее рассчитывает персональные цены, поэтому в каталоге покупатель сразу видит свою цену, а не базовую. Как устроен этот расчёт - в разборе про персональные цены для 19 сегментов покупателей.

Обратный поток сайт отдаёт по запросу 1С, в любой момент: заказ целиком - покупатель, контрагент, состав, цены, доставка, оплата; заявка сервис-центра вместе с перепиской; произвольные записи - предзаказы и регистрации оборудования; файлы вложений.

Шесть уровней защиты от сбоев

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

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

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


Как это устроено внутри

СлойРешение
ПриёмТочка приёма на стороне сайта: файл сохраняется в очередь атомарно, недописанного файла обработчик увидеть не может; подтверждение 1С уходит сразу, обработку она не ждёт
Очередь и журналХранятся в базе данных сайта, статусы переживают перезапуски; части большой выгрузки связаны общим номером и обрабатываются только после полной сборки
ОбработчикОдин экземпляр по расписанию каждые несколько секунд, защита от параллельного запуска; из полных снимков в работу идёт только самый свежий, остальные помечаются устаревшими
Запись данныхПотоковое чтение файла - расход памяти не зависит от объёма; сверка с текущим состоянием сайта и запись только изменений; привязка записей к кодам 1С даёт повтор без дубликатов
ЭкспортРеестр пометок "передать в 1С" в базе сайта плюс точка выдачи данных: заказы, заявки, файлы. Уведомление ускоряет передачу, плановый опрос гарантирует её
КонтрольПротокол по каждой выгрузке, отметка о замечаниях в журнале, архив всех выгрузок со сжатием; повторная обработка любой выгрузки по команде администратора
ПредохранителиПолный снимок с подозрительно большим числом удалений отклоняется - пустая выгрузка не может очистить каталог

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

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

Что это дало бизнесу

Свойство обменаЧто это значит на практике
Данные не теряютсяЗаказ покупателя дойдёт до менеджера при любых сбоях
Восстановление автоматическоеПростой не превращается в задачу для программиста
Дубликаты невозможныТовары и цены не задваиваются при повторных передачах
Расхождения самоустраняютсяДанные на сайте не расходятся с 1С со временем
Обмен прозраченПроблема видна в панели управления, а не по звонку клиента
Рост объёмов не требует переделкиКаталог может расти вместе с бизнесом

В цифрах

ПоказательЗначение
В промышленной эксплуатациис октября 2025 года
Обработано выгрузокболее 75 000
Выгрузок в суткиоколо 750
Выгрузок в неделюоколо 5 200
Типов передаваемых данных21 в сторону сайта и 4 вида запросов обратно
Обновление остатковкаждые 5 минут - около 90% всего потока
Задержка между приёмом и обработкойсекунды
Самая крупная выгрузкаполный прайс-лист, до 260 000 строк
Доля выгрузок с замечаниямименее 0,2% - и каждая видна администратору

Этот обмен - часть большой B2B-платформы: каталог, персональные цены и дилерский кабинет на одной витрине. Что вошло в проект целиком - в кейсе B2B e-commerce платформы.

Нужен обмен с 1С, который не теряет заказы?

Расскажите, что ведётся в вашей 1С и что должно попадать на сайт. Покажем работающий обмен на живом проекте и оценим перенос на ваш каталог.