При автоматизации розничной торговли алкоголем часто возникает ситуация, когда с одним Транспортным Модулем (УТМ) должны работать сразу несколько систем. Типичный пример: 1С:Бухгалтерия 3.0 используется для ведения учета и сдачи отчетности, а R-Keeper — для операционной работы фронт-офиса. Проблема заключается в том, что типовая конфигурация 1С после успешного получения входящих документов из ЕГАИС отправляет команду на их удаление из очереди УТМ. В результате вторая программа (R-Keeper) «не видит» эти накладные.
Разберем детально, как можно решить эту задачу, изменив поведение программы или архитектуру обмена.
Для начала проанализируем, как именно 1С взаимодействует с УТМ. Процесс получения данных строится на HTTP-запросах. Когда 1С скачивает XML-файл накладной, она обязана сообщить УТМ, что документ принят, иначе при следующем сеансе связи он придет снова. 1С делает это с помощью HTTP-метода DELETE, отправляя запрос по адресу конкретного сообщения в очереди.
Чтобы найти это место в конфигурации, нам необходимо обратиться к общим модулям, отвечающим за интеграцию с ЕГАИС. В версии Бухгалтерия предприятия 3.0.67.67 и аналогичных, основной интерес представляют следующие объекты:
ИнтеграцияЕГАИСВызовСервера.ИнтеграцияЕГАИСУТМ (в более новых версиях логика вынесена сюда).Рассмотрим функцию ПолучитьВходящиеДокументы(). Именно здесь инициируется цикл обхода очереди УТМ. Внутри этого цикла после успешной записи документа в базу 1С (в справочник ВходящиеДокументыЕГАИС) вызывается процедура удаления. Обычно она называется УдалитьДанныеИзУТМ или ПодтвердитьПолучениеДокумента.
Пример логики, которую необходимо найти и скорректировать (в упрощенном виде):
// Пример фрагмента кода в общем модуле
Процедура ОбработатьОтветУТМ(ДанныеОтвета)
// ... Логика загрузки XML в 1С ...
Если ЗагрузкаПрошлаУспешно Тогда
// Именно этот вызов нужно закомментировать или ограничить условием
ИнтеграцияЕГАИСУТМ.УдалитьДанныеИзУТМ(ПараметрыОбмена, ИдентификаторСообщения);
КонецЕсли;
КонецПроцедуры
Важный нюанс: Если вы просто отключите удаление, 1С будет при каждом обмене загружать одни и те же документы повторно, создавая дубли в справочнике «Входящие документы ЕГАИС». Чтобы этого избежать, необходимо добавить проверку по ИдентификаторуДокумента или URL сообщения. Программа должна видеть, что документ уже есть в базе, и просто пропускать его, не пытаясь создать новый и не удаляя его из УТМ.
Проанализируем более стабильный и «чистый» с точки зрения обновлений конфигурации способ — использование прокси-сервера для УТМ. Это промежуточное программное обеспечение, которое устанавливается между реальным УТМ и вашими учетными системами.
Принцип работы прокси:
DELETE, прокси помечает документ как «удаленный для 1С», но сохраняет его для R-Keeper.Это позволяет обеим программам работать независимо. Выясним преимущества этого метода: вам не нужно вносить изменения в типовой код 1С, что существенно облегчает дальнейшее обновление конфигурации. Популярные решения, такие как UTM-Proxy, позволяют гибко настраивать правила видимости документов для разных потребителей.
Даже если мы добьемся того, что обе программы увидят ТТН, возникнет критическая проблема — подтверждение актов. В системе ЕГАИС накладная может быть подтверждена только один раз. Рассмотрим ситуацию:
Проанализируем решение этой проблемы. Необходимо жестко регламентировать, какая система является «ведущей» в части юридически значимых действий. Рекомендуется следующая схема:
Либо, если R-Keeper должен подтверждать накладные для корректного списания остатков во фронт-офисе, то в 1С следует отключить возможность отправки ответных актов, оставив только функцию загрузки данных для формирования бухгалтерских проводок.
Выясним важную техническую деталь, о которой часто забывают. УТМ ЕГАИС не является хранилищем данных. Встроенная база данных УТМ (Apache Derby) имеет механизмы автоматической очистки. Даже если вы отключите удаление со стороны 1С, документы не будут храниться в очереди вечно. Обычно срок составляет около 14 дней. Если за это время вторая программа не успеет забрать документ, он может быть безвозвратно удален самим модулем УТМ. Поэтому крайне важно обеспечивать регулярный запуск обмена в обеих системах.
Если накладная уже была удалена из УТМ и R-Keeper ее не получил, можно воспользоваться механизмом перезапроса. В 1С:Бухгалтерии это делается через документ Запрос акта ЕГАИС с типом «ТТН». Вам нужно знать WB-номер накладной (например, TTN-0123456789).
Однако помните о лимитах: не более 100 запросов в сутки и не более одного раза в сутки для одной и той же накладной. Этот метод хорош как разовое решение проблемы, но не подходит для постоянной автоматизации параллельной работы двух систем.
Таким образом, для реализации полноценной совместной работы 1С и R-Keeper наиболее профессиональным решением будет использование прокси-сервера УТМ, либо, при наличии в штате программиста, кастомизация модуля ИнтеграцияЕГАИСУТМ с внедрением проверки на дубли и отключением безусловного удаления документов.