Интернет-магазин работает с несколькими тысячами товаров, персональными ценами для разных категорий покупателей и остатками по десяткам складов. Все эти данные ведутся в 1С:ERP, и она остаётся единственным местом, где их заводят и изменяют. Сайт, в свою очередь, порождает собственные данные: заказы, заявки в сервис-центр, регистрации оборудования. Обмен решает две задачи: витрина показывает актуальные данные из 1С без ручного ввода, а всё, что оформил покупатель, попадает в 1С - дальше с заказом работает менеджер.
Менеджер работает только в 1С - привычная программа остаётся его рабочим местом. Покупатель работает только с сайтом. Обмен связывает эти две картины мира так, чтобы ни одна из сторон не занималась двойным вводом данных.
Требование к такому обмену одно: он должен работать без участия человека и не терять данные, даже когда одна из систем временно недоступна.
Ниже - сводный разбор, как этот обмен устроен: от общей архитектуры до поведения при сбоях. Всё описанное работает в промышленной эксплуатации: с октября 2025 года обмен обработал более 75 000 выгрузок.
Как устроена система
Обмен построен на трёх составляющих, размещённых на одной площадке. Сайт принимает выгрузки от 1С, хранит данные витрины и ведёт реестр пометок - перечень того, что нужно передать в 1С. Зона обмена - журнал и очередь выгрузок: здесь фиксируется каждая полученная выгрузка и её текущий статус, отдельно хранится архив всех выгрузок за всё время работы. Сервис синхронизации - отдельная программа, которая разбирает очередь и обновляет данные сайта; она же отдаёт 1С заказы и заявки по запросу.
Ключевое решение: приём и обработка разделены
1С передаёт выгрузку и сразу получает подтверждение приёма - на это уходят доли секунды. Разбор данных выполняется отдельно, своим темпом, и 1С его не ждёт. Такое разделение даёт три эффекта:
- →1С не простаивает в ожидании, пока сайт обработает четверть миллиона строк;
- →тяжёлая обработка не мешает посетителям магазина;
- →если обработка по какой-то причине остановится, приём продолжит работать - выгрузки будут спокойно копиться в очереди.
Ключевое решение: заказы 1С забирает сама
Сайт не пытается "протолкнуть" заказ в 1С. Вместо этого он ставит пометку "передать в 1С" и отправляет короткое уведомление. За полными данными 1С обращается сама - тогда, когда готова их принять. Уведомление лишь ускоряет обмен: даже если оно не дойдёт, пометка останется в реестре, и 1С заберёт заказ при ближайшем плановом опросе. Потерять заказ между системами невозможно.
Как данные из 1С попадают на сайт
Всё, что покупатель видит на сайте, приходит из 1С отдельными выгрузками. Выгрузка - это сжатый файл с данными: новые цены, изменившиеся товары, свежие остатки. Данные передаются по защищённому каналу с авторизацией, большие выгрузки делятся на части.
Почему записываются только изменения
Обработчик не переписывает данные вслепую. Он сравнивает содержимое выгрузки с тем, что уже есть на сайте, и обращается к базе только там, где данные действительно изменились. Это экономит время обработки и не создаёт лишней нагрузки на магазин в рабочие часы.
Переписывать данные вслепую: полная выгрузка - до 260 000 строк, и каждая строка превращалась бы в запись в базу, даже если ничего не изменилось.
Обработчик сверяет выгрузку с состоянием сайта и пишет только изменения: база нагружается ровно настолько, насколько изменились данные.
Каждая запись привязана к своему коду из 1С. Поэтому повторная обработка одной и той же выгрузки не создаёт дубликатов: система обновит существующую запись, а не добавит вторую такую же. Это свойство делает безопасными и повторные передачи со стороны 1С, и перезапуск обработки после сбоя.
Большие выгрузки передаются частями
Полная выгрузка цен - это около 260 000 строк. Передать такой объём одним файлом неудобно и ненадёжно, поэтому 1С делит его на части и помечает их общим номером выгрузки. Главное правило: выгрузка обрабатывается только целиком. Пока получены не все части, выгрузка ждёт. Обработать полученную часть означало бы показать покупателю каталог, из которого пропала половина товаров, или прайс-лист с частью цен. Как только недостающие части приезжают, выгрузка собирается воедино и уходит в работу на ближайшей проверке очереди.
Файл выгрузки при этом читается последовательно, запись за записью, а не загружается в память целиком. Поэтому расход памяти одинаков и для выгрузки на сто строк, и для выгрузки на четверть миллиона: объём данных может расти вместе с каталогом, не требуя переделки обмена.
Пять правил обработчика очереди
Обработчик очереди - программа, которая превращает файлы от 1С в данные витрины. Он запускается по расписанию, каждые несколько секунд, и сам решает: можно ли брать выгрузку в работу, актуальна ли она и что делать, если работа прервалась. Ответы укладываются в пять правил.
- 01Работает только один обработчик. Перед началом работы обработчик проверяет, не занят ли обмен предыдущим запуском. Если предыдущая обработка ещё идёт - новый запуск завершается сразу, ничего не делая. Так исключается ситуация, когда две программы одновременно правят одни и те же цены или остатки и мешают друг другу.
- 02Неполные выгрузки ждут. Если выгрузка состоит из нескольких частей и получены не все - она откладывается до следующей проверки. Каталог никогда не собирается из половины данных.
- 03Устаревшие снимки не обрабатываются. Полная выгрузка - это снимок всех данных на момент выгрузки. Если таких снимков накопилось несколько, обрабатывать их по очереди бессмысленно: каждый следующий заведомо содержит всё, что было в предыдущем. В работу идёт только самый свежий, остальные помечаются устаревшими.
- 04Одна ошибка не останавливает выгрузку. Ошибочная запись - например, цена для товара, которого нет в каталоге, - попадает в протокол, а обработка продолжается. Одна проблемная строка не должна лишать магазин остальных двухсот тысяч обновлений.
- 05Отметка о завершении ставится только по факту. Выгрузка считается обработанной лишь после того, как обработка дошла до конца. Если работа прервалась на середине - из-за сбоя или перезапуска сервера, - статус не меняется, и выгрузка автоматически вернётся в работу через несколько секунд. Повтор безопасен: записи привязаны к кодам из 1С, дубликатов не будет.
Третье правило - про устаревшие снимки - стоит показать на живом сценарии: именно оно позволяет обмену быстро восстанавливаться после простоя.
Как заказы и заявки попадают в 1С
Сайт передаёт в 1С всё, что оформил покупатель: заказы и предзаказы, заявки в сервис-центр - рекламации, ремонт, запчасти, - регистрации оборудования, файлы и переписку по заявкам. Для менеджера это выглядит просто: заказ с сайта появляется в 1С как обычный заказ, и дальше он работает с ним в привычной программе.
Двойная гарантия доставки
Когда покупатель оформляет заказ, сайт делает два независимых действия. Ставит пометку "заказ не передан" в реестре пометок - это запись в базе данных сайта, она переживёт и перезапуск, и сбой, и длительную недоступность 1С. И отправляет уведомление - короткое сообщение "появился заказ №N". Оно нужно только для скорости: получив его, 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 платформы.



