Как настроить совместный доступ 1С:Бухгалтерия 3.0 и R-Keeper к одному УТМ ЕГАИС без удаления входящих ТТН

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

При автоматизации розничной торговли алкоголем часто возникает ситуация, когда с одним Транспортным Модулем (УТМ) должны работать сразу несколько систем. Типичный пример: 1С:Бухгалтерия 3.0 используется для ведения учета и сдачи отчетности, а R-Keeper — для операционной работы фронт-офиса. Проблема заключается в том, что типовая конфигурация 1С после успешного получения входящих документов из ЕГАИС отправляет команду на их удаление из очереди УТМ. В результате вторая программа (R-Keeper) «не видит» эти накладные.

Разберем детально, как можно решить эту задачу, изменив поведение программы или архитектуру обмена.

Вариант 1. Модификация программного кода 1С

Для начала проанализируем, как именно 1С взаимодействует с УТМ. Процесс получения данных строится на HTTP-запросах. Когда 1С скачивает XML-файл накладной, она обязана сообщить УТМ, что документ принят, иначе при следующем сеансе связи он придет снова. 1С делает это с помощью HTTP-метода DELETE, отправляя запрос по адресу конкретного сообщения в очереди.

Чтобы найти это место в конфигурации, нам необходимо обратиться к общим модулям, отвечающим за интеграцию с ЕГАИС. В версии Бухгалтерия предприятия 3.0.67.67 и аналогичных, основной интерес представляют следующие объекты:

  1. Общий модуль ИнтеграцияЕГАИСВызовСервера.
  2. Общий модуль ИнтеграцияЕГАИСУТМ (в более новых версиях логика вынесена сюда).

Рассмотрим функцию ПолучитьВходящиеДокументы(). Именно здесь инициируется цикл обхода очереди УТМ. Внутри этого цикла после успешной записи документа в базу 1С (в справочник ВходящиеДокументыЕГАИС) вызывается процедура удаления. Обычно она называется УдалитьДанныеИзУТМ или ПодтвердитьПолучениеДокумента.

Пример логики, которую необходимо найти и скорректировать (в упрощенном виде):


// Пример фрагмента кода в общем модуле
Процедура ОбработатьОтветУТМ(ДанныеОтвета)
    
    // ... Логика загрузки XML в 1С ...
    
    Если ЗагрузкаПрошлаУспешно Тогда
        // Именно этот вызов нужно закомментировать или ограничить условием
        ИнтеграцияЕГАИСУТМ.УдалитьДанныеИзУТМ(ПараметрыОбмена, ИдентификаторСообщения);
    КонецЕсли;

КонецПроцедуры

Важный нюанс: Если вы просто отключите удаление, 1С будет при каждом обмене загружать одни и те же документы повторно, создавая дубли в справочнике «Входящие документы ЕГАИС». Чтобы этого избежать, необходимо добавить проверку по ИдентификаторуДокумента или URL сообщения. Программа должна видеть, что документ уже есть в базе, и просто пропускать его, не пытаясь создать новый и не удаляя его из УТМ.

Вариант 2. Использование специализированного UTM-Proxy

Проанализируем более стабильный и «чистый» с точки зрения обновлений конфигурации способ — использование прокси-сервера для УТМ. Это промежуточное программное обеспечение, которое устанавливается между реальным УТМ и вашими учетными системами.

Принцип работы прокси:

  1. Прокси-сервер сам опрашивает реальный УТМ и сохраняет все входящие тикеты и ТТН в свою внутреннюю базу данных.
  2. Для 1С и R-Keeper прокси выглядит как обычный УТМ (на порту 8080 или другом назначенном).
  3. Когда 1С запрашивает список документов, прокси отдает их из своей базы.
  4. Когда 1С отправляет команду DELETE, прокси помечает документ как «удаленный для 1С», но сохраняет его для R-Keeper.

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

Вариант 3. Разделение ответственности и статусы документов

Даже если мы добьемся того, что обе программы увидят ТТН, возникнет критическая проблема — подтверждение актов. В системе ЕГАИС накладная может быть подтверждена только один раз. Рассмотрим ситуацию:

Проанализируем решение этой проблемы. Необходимо жестко регламентировать, какая система является «ведущей» в части юридически значимых действий. Рекомендуется следующая схема:

  1. Одна система (например, R-Keeper) только получает данные для формирования внутренних документов поступления.
  2. Вторая система (например, 1С) выполняет подтверждение, отказ или формирование актов расхождений.

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

Срок хранения данных в УТМ

Выясним важную техническую деталь, о которой часто забывают. УТМ ЕГАИС не является хранилищем данных. Встроенная база данных УТМ (Apache Derby) имеет механизмы автоматической очистки. Даже если вы отключите удаление со стороны 1С, документы не будут храниться в очереди вечно. Обычно срок составляет около 14 дней. Если за это время вторая программа не успеет забрать документ, он может быть безвозвратно удален самим модулем УТМ. Поэтому крайне важно обеспечивать регулярный запуск обмена в обеих системах.

Альтернатива: Перезапрос ТТН

Если накладная уже была удалена из УТМ и R-Keeper ее не получил, можно воспользоваться механизмом перезапроса. В 1С:Бухгалтерии это делается через документ Запрос акта ЕГАИС с типом «ТТН». Вам нужно знать WB-номер накладной (например, TTN-0123456789).

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

Таким образом, для реализации полноценной совместной работы 1С и R-Keeper наиболее профессиональным решением будет использование прокси-сервера УТМ, либо, при наличии в штате программиста, кастомизация модуля ИнтеграцияЕГАИСУТМ с внедрением проверки на дубли и отключением безусловного удаления документов.

← На главную