Когда pull по OData перестаёт работать

28.09.26

Интеграция - WEB-интеграция

Сравниваются HTTP-сервис, REST OData, обмен файлами и очередь сообщений для подтверждения отбора из WMS в 1С; выбор определяется SLA после скана, периметром сети и необходимостью идемпотентности.

Как с подтверждением брони отеля: письмо на почту, звонок администратора и запись в журнале на стойке решают одну задачу, но по-разному переносят ответственность и задержку. Для связки 1С:ERP с внешней WMS та же логика лежит в выборе канала, по которому в учётную базу попадает факт отбора по строкам «Заказа клиента»: закрытие задания на отбор, списание резерва и смена статуса отгрузки не должны зависеть от случайного порядка файлов в каталоге или от того, успел ли оператор обновить список вручную.

 

Сравнение

 

Push-событие и pull-опрос по задержке статуса в 1С

 

Push-событие и pull-опрос по задержке статуса в 1С

Критерий HTTP-сервис в 1С REST OData Обмен файлами Очередь сообщений
Задержка до статуса в 1С Секунды после сканирования последней позиции Минуты, bound регламентного опроса Минуты, bound расписания забора каталога Секунды при живом consumer, секунды-минуты при простое
Идемпотентность при повторе Явная, через ключ задания WMS в теле запроса Зависит от дизайна сущности и $filter Часто слабая без контрольного реестра файлов Сильная при ключе в заголовке и dedup в обработчике
Нагрузка на сеанс 1С Короткие транзакции по событию Пакетные чтения, риск «широких» выборок Пик при разборе крупного XML за ночь Ровнее, но нужен выделенный обработчик
Диагностика сбоев Код ответа и журнал HTTP-сервиса Журнал OData и текст ошибки платформы Поиск «зависшего» файла в каталоге DLQ и метаданные сообщения
Изменение контракта полей Версия URL или заголовок API Новые поля в модели публикации Новое имя файла или XSD Новая схема тела и версия routing key

Ниже сравниваются четыре распространённых способа доставки подтверждения отбора из WMS в 1С для сценария «одно задание на отбор - одна отгрузка - десятки строк с характеристиками и упаковками». Цифры в таблице приведены как ориентиры с типового проекта (средняя нагрузка, пик в конце смены), а не как норматив платформы. Сравнение намеренно не затрагивает первичную выгрузку задания из 1С в WMS: там другая сторона инициативы и другие ограничения по объёму справочников.

Единый прикладной модуль закрытия отбора позволяет менять транспорт без переписывания проверок количества и серий. На стенде нагрузочного теста имеет смысл прогнать три сценария: одиночное задание, пачка из сорока заданий за минуту и повтор того же IdempotencyKey после искусственного обрыва соединения. Без такого набора выбор канала часто сводится к политике «у соседа так работает», что для резервов и расходных ордеров обходится дороже, чем неделя настройки брокера или HTTP.

 

HTTP-сервис приёма событий от WMS

WMS отправляет POST после закрытия задания на отбор: в теле передаются идентификатор задания, ссылка на «Заказ клиента» в 1С (GUID или внешний код), табличная часть с фактически отобранными количествами и марками упаковок. В конфигурации создаётся опубликованный HTTP-сервис с методом, который валидирует подпись или статический токен, сверяет строки с незакрытыми позициями заказа и в одной транзакции записывает документ «Расходный ордер на товары» или обновляет статус связанной отгрузки.

Плюсы

  • Минимальный разрыв между физическим действием на складе и учётным статусом: внешняя витрина и служба доставки видят «собрано» без ожидания регламента.
  • Контракт узкий: только поля, нужные для закрытия отбора, без универсальной модели OData.
  • Ошибку WMS получает сразу в ответе (409 при расхождении количества, 404 при неизвестном заказе), что снижает накопление «тихих» расхождений.

Минусы

  • WMS должна уметь повторять запрос при таймауте; без согласованного ключа идемпотентности возможны двойные движения.
  • HTTP-сервис висит на том же кластере, что и пользователи: всплеск сканирований в конце смены превращается в серию одновременных транзакций записи.
  • TLS, ротация секретов и белый список адресов ложатся на инфраструктуру, а не на файловый обмен через SFTP.

На практике HTTP-сервис имеет смысл фиксировать как единственную точку входа для прикладной логики: и очередь, и временный файловый мост в итоге вызывают ту же процедуру «ЗакрытьОтборПоДаннымWMS», чтобы не дублировать проверки расхождений по упаковкам. Таймаут ответа со стороны WMS обычно ставят с запасом относительно p95 длительности транзакции записи ордера; иначе при нормальном проведении клиент уходит в retry и создаёт ложные инциденты в мониторинге.

 

REST OData как канал подтверждений

 

Слои от WMS до движений по регистрам

Слои от WMS до движений по регистрам

 

Вариант с публикацией стандартного OData: WMS не пушит событие, а 1С по регламентному заданию «ЗагрузкаПодтвержденийОтбораWMS» опрашивает сущность вроде «Document_ЗаданиеНаОтбор» с отбором по статусу «Выполнено» и метке времени больше последней синхронизации. Альтернатива - OData-прокси на стороне WMS, откуда 1С читает готовые строки факта. Подход удобен, когда в организации уже есть шина OData для отчётности и мобильных клиентов.

Плюсы

  • Не нужен входящий HTTP на периметре 1С, если опрос исходит изнутри контура 1С наружу.
  • Единый стиль доступа к данным для аналитики и для интеграции: те же фильтры, что в Power BI или внешнем портале.
  • Пакетная обработка десятков заданий за один проход регламента снижает число отдельных сеансов по сравнению с потоком одиночных POST.

Минусы

  • Задержка статуса в 1С не может быть меньше интервала регламента; для SLA «до двух минут» при интервале 15 минут OData без доработок не подходит.
  • Риск постраничного обхода: при сортировке только по дате часть записей с одинаковой меткой времени может остаться на следующей странице, если не зафиксирован стабильный ключ сортировки.
  • Расширение табличной части заказа через OData быстро упирается в права и в объём payload; для марок и серий часто всё равно нужен кастомный HTTP-сервис.

Pull по OData «перестаёт работать» не в смысле падения платформы, а в смысле бизнес-требований: как только служба доставки начинает забирать собранные заказы по таймеру, а не по утреннему регламенту, интервал опроса становится видимым дефектом. Компромисс «OData каждые две минуты» на крупной базе умножает число чтений и нагружает СУБД сильнее, чем редкий пакет, но всё равно хуже, чем событие по факту скана. Имеет смысл хранить в регистре сведений «СостояниеСинхронизацииWMS» не только метку времени, но и последний обработанный Ref задания, чтобы при одинаковых timestamp не терять строки на границе страницы.

 

Обмен файлами через каталог обмена

 

Параллельные дорожки WMS, 1С и мониторинга

Параллельные дорожки WMS, 1С и мониторинга

 

Классическая схема: WMS выкладывает файл «PickConfirm_<номер>.json» в каталог на SFTP или SMB, регламент 1С забирает, парсит, переносит в документ и перемещает файл в «Processed» или «Error». Формат часто наследуют из старых TMS или из обмена с транспортной компанией, где UI уже привык к «папке исходящих».

Плюсы

  • Простая отладка на тестовом контуре: достаточно положить файл руками и посмотреть результат разбора.
  • Естественная буферизация при недоступности 1С: файлы копятся, пока база не поднимется.
  • Минимальные требования к WMS: достаточно записи файла без стека retry HTTP.

Минусы

  • Слабая конкуренция: два процесса не должны читать один файл; нужны mutex на уровне ОС или атомарное переименование.
  • Идемпотентность редко встроена: повторная выкладка файла с тем же именем может дважды провести ордер, если регламент не ведёт реестр хешей.
  • Задержка и «слепые зоны»: пока файл лежит в «Incoming», оператор в 1С считает заказ «в сборке», хотя на складе он уже закрыт.

Файловая схема остаётся рабочей на этапе опытной эксплуатации, когда WMS ещё не готова к сетевым вызовам, но уже выдаёт структурированный JSON с табличной частью. Критично договориться о схеме имени: включение GUID задания WMS в имя файла снижает риск перезаписи, а суффикс «.tmp» с финальным rename в «.json» сигнализирует регламенту 1С, что запись завершена. Без отдельного каталога «Error» и без уведомления ответственного за обмен операторы начинают вручную дублировать отгрузки в 1С, что хуже любого технического долга интеграции.

 

Очередь сообщений между WMS и 1С

 

Матрица «SLA × периметр» для выбора канала

Матрица «SLA × периметр» для выбора канала

 

WMS публикует сообщение в RabbitMQ или аналог с routing key «pick.confirmed», отдельный фоновый процесс (ras/ragent или внешний worker на Python) читает очередь и вызывает тот же прикладной код записи, что и HTTP-сервис. Обязательство доставки переносится с «WMS дождалась ответа 200» на «брокер принял ack после успешной обработки». Для команд, которые уже используют очередь для исходящих статусов заказа, симметричный входящий канал часто проще согласовать с архитектурой, чем второй стиль интеграции.

Плюсы

  • Развязка по времени: пики сканирования сглаживаются длиной очереди и числом consumer-ов.
  • Dead-letter queue сохраняет «ядовитые» сообщения с телом для ручного разбора без потери факта отбора на складе.
  • Повторная обработка с тем же message_id не создаёт движений, если в 1С заведён регистр сведений «ОбработанныеСобытияWMS».

Минусы

  • Отдельный контур эксплуатации: мониторинг брокера, политики TTL, версии протокола.
  • Задержка end-to-end включает и lag consumer; при остановке обработчика очередь растёт, а статусы в 1С отстают непредсказуемо.
  • Отладка сложнее, чем у HTTP: нужен доступ к management UI и согласованный формат заголовков.

Очередь оправдана, когда число закрытых заданий за час измеряется тысячами, а кластер 1С уже упирался в конкуренцию за запись по тому же заказу. Ограничение prefetch и явная политика «не больше N необработанных сообщений на consumer» защищают базу от лавины параллельных транзакций; без этого выигрыш по сравнению с HTTP-сервисом исчезает. Симметрия с исходящим потоком статусов отгрузки в ту же шину упрощает трассировку: по correlation id видно цепочку от резерва до факта отбора.

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

Фрагмент обработчика HTTP-сервиса

Функция PickConfirmPOST(Запрос)
    Тело = Запрос.ПолучитьТелоКакСтроку();
    Данные = ПрочитатьJSONВСтруктуру(Тело);
    КлючСобытия = Данные.IdempotencyKey;
    Если РегистрыСведений.ОбработанныеСобытияWMS.УжеОбработано(КлючСобытия) Тогда
        Ответ = Новый HTTPСервисОтвет(200);
        Возврат Ответ;
    КонецЕсли;
    НачатьТранзакцию();
    Попытка
        ЗакрытьОтборПоДаннымWMS(Данные);
        РегистрыСведений.ОбработанныеСобытияWMS.Зафиксировать(КлючСобытия);
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Новый HTTPСервисОтвет(200);
КонецФункции

Псевдокод consumer очереди

LOOP сообщение ИЗ очередь pick_inbound
  ЕСЛИ регистр.ОбработанныеСобытияWMS содержит message_id
    ACK без записи
  ИНАЧЕ
    НАЧАТЬ транзакция 1С
    ЗакрытьОтборПоДаннымWMS(тело)
    записать message_id
    КОММИТ
    ACK
  ПРИ ошибка валидации
    NACK без requeue U94; DLQ
  ПРИ временная недоступность 1С
    NACK с requeue, backoff
КОНЕЦ

 

Как выбрать

  • Если SLA требует обновления статуса «собрано» в 1С в течение одной-двух минут после последнего скана, то push через HTTP-сервис или очередь с живым consumer; OData и файлы без учащения регламента не закрывают требование.
  • Если периметр запрещает входящие порты на кластер 1С, а исходящий опрос из 1С разрешён, то OData или забор файлов с внутреннего каталога; при этом закладывается явная задержка в интерфейсе заказа.
  • Если WMS не умеет надёжный retry HTTP, но умеет только запись в каталог, то обмен файлами с атомарным rename и реестром хешей; переход на HTTP откладывают до модернизации WMS.
  • Если в конце смены наблюдаются сотни одновременных закрытий отбора и конкуренция записи на регистре «ТоварыНаСкладах», то очередь с ограничением параллелизма consumer (например, не больше пяти одновременных транзакций записи) предпочтительнее прямого POST на каждый скан.
  • Если команда уже стандартизировала исходящие статусы в ту же шину сообщений, то входящие подтверждения отбора в ту же топологию уменьшают число паттернов сопровождения.
  • Если объём строк с сериями и марками превышает разумный размер одного OData-ответа, то не расширять публикацию OData, а зафиксировать узкий JSON-контракт в HTTP или в теле сообщения очереди.

 

Ограничения и когда подход не подходит

Общий знаменатель всех вариантов: граница транзакции в 1С должна совпадать с одним логическим событием WMS. Смешивать в одном вызове закрытие отбора и корректировку маршрута доставки удобно на бумаге, но при частичном сбое сложнее понять, что уже записано. Независимо от транспорта полезно вести журнал интеграции с полным телом запроса (с маскированием персональных данных получателя) и ссылкой на созданный «Расходный ордер на товары».

Ни один канал не заменяет сверку остатков: подтверждение отбора закрывает логистический факт по заказу, но не отменяет периодическую сверку ячеек WMS и регистра «ТоварыНаСкладах». HTTP и очередь плохо сочетаются с ручным редактированием того же заказа в 1С в момент прихода события: нужен явный запрет перепроведения или версионность строк. OData-опрос при жёстком требовании near-real-time без уменьшения интервала регламента остаётся компромиссом только для некритичных статусов. Файловый обмен при обязательном аудите «кто и когда подтвердил» требует подписи файла или журнала на стороне WMS, иначе спорные ситуации сводятся к дате изменения в каталоге. Если WMS и 1С принадлежат разным подрядчикам без общего стенда, начинать с очереди или HTTP без е2е-тестов на идемпотентность обычно дороже, чем временный файловый мост с реестром.

 

Итог: ситуация и риск

Ситуация Рекомендуемое решение Риск
Жёсткий SLA после скана, WMS поддерживает retry HTTP-сервис с ключом идемпотентности Пик нагрузки на кластер в конце смены
Запрет входящих на 1С, допустима задержка 10–15 минут REST OData регламентным опросом Пропуск записей при нестабильной пагинации
Устаревшая WMS, только выгрузка в каталог Файлы + реестр хешей и папка Error Двойное проведение при повторе имени файла
Уже есть брокер для статусов заказа, нужно сглаживание пиков Очередь и ограниченный consumer Отставание статусов при остановке worker
Много серий и марок в одном задании HTTP или очередь с узким JSON, не OData Раздувание контракта и прав доступа

Вступайте в нашу телеграмм-группу Инфостарт

1С:ERP WMS HTTP-сервис OData интеграция очередь сообщений обмен файлами 1С WMS подтверждение отбора HTTP-сервис 1С REST OData интеграция очередь сообщений RabbitMQ 1С обмен файлами SFTP 1С

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

WEB-интеграция Разработчик Аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    7313    33    4    

34

WEB-интеграция Анализ продаж Системный администратор Разработчик Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

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

60000 руб.

07.05.2019    44338    76    45    

32

WEB-интеграция Системный администратор Разработчик Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена по API между конфигурацией 1С:Альфа-Авто 6 и порталом LogicStar. Позволяет работать с несколькими обменами LogicStars разных брендов (CHERY, OMODA, JAECOO, EXEED, TENET) в одной информационной базе в ручном и автоматическом режиме. Поддерживается выгрузка заказ-нарядов, реализаций товаров и товарных остатков.

20740 руб.

13.05.2025    2817    4    0    

7

WEB-интеграция Сайты и интернет-магазины Системный администратор Разработчик Пользователь Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1C:ERP Розничная и сетевая торговля (FMCG) Россия Платные (руб)

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

2278 руб.

08.07.2025    2137    1    0    

2

Обмен с ГосИС Мастера заполнения WEB-интеграция Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Универсальное расширение конфигурации для автоматической загрузки и заполнения реквизитов контрагентов (партнеров) из ОГРН для 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.4), 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.2), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.5), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.4), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.3), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.4), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.0) и 1С:Бухгалтерия 8 (Бухгалтерия предприятия, редакция 3.0).

5000 руб.

08.11.2017    79412    419    298    

85
Для отправки сообщения требуется регистрация/авторизация