Настройка обмена 1С:Розница с ЕГАИС для продажи пива и решение ошибки "Не найден документ с идентификатором запроса"

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

При настройке обмена между "1С:Розница 3.0" и кассовым ПО Frontol для продажи пивной продукции пользователи часто сталкиваются с двумя основными вопросами. Первый — как правильно организовать списание пива в системе ЕГАИС. Второй — технические ошибки при обмене данными с Универсальным транспортным модулем (УТМ), из-за которых документы "зависают" и не обновляют статусы. Рассмотрим обе проблемы и найдем для них решение.

Как правильно списывать проданное пиво в ЕГАИС?

Часто возникает желание настроить систему так, чтобы пиво списывалось с остатков Регистра №1 ЕГАИС сразу в момент продажи на кассе, по аналогии с крепким алкоголем. Однако для немаркированной алкогольной продукции (пиво, сидр, медовуха) действует иной порядок.

Проанализируем ситуацию. Понятие "пивной чек", которое существовало в ранних версиях ЕГАИС, на сегодняшний день неактуально. Современная система учета не предполагает отправку в ЕГАИС данных о каждой проданной бутылке пива в момент пробития чека. Основная причина в том, что остатки пива на Регистре №1 ведутся в разрезе партий, которые идентифицируются по справкам "Б" (внутренний идентификатор F2). Кассовое программное обеспечение (Frontol) не имеет информации о том, из какой именно партии продается конкретная бутылка.

Правильная схема работы выглядит следующим образом:

  1. Продажи пива в течение дня (кассовой смены) фиксируются на кассе.
  2. По окончании смены данные о продажах выгружаются из кассового ПО в товароучетную систему, в нашем случае — в "1С:Розница".
  3. На основании суммарного объема проданной продукции за смену в 1С формируется один документ — "Акт списания ЕГАИС" с причиной списания "Реализация".
  4. Именно этот сводный акт отправляется в УТМ для передачи в ЕГАИС. Списание должно быть произведено не позднее следующего рабочего дня после продажи.

Товароучетная система (бэк-офис) сама определяет, из каких партий (по каким справкам F2) необходимо списать проданное количество, как правило, используя метод ФИФО (первым поступил — первым выбыл). Таким образом, попытки настроить почековое списание являются некорректными с точки зрения текущей методологии ЕГАИС.

Решение технической ошибки "Не найден документ с идентификатором запроса"

Более серьезной проблемой является технический сбой, когда "1С:Розница" перестает получать и обрабатывать ответы от УТМ. Рассмотрим симптомы и найдем причину.

Симптомы проблемы:

Выясняем причину ошибки

Корень проблемы кроется в изменении формата идентификатора запроса (request ID) в новых версиях УТМ, в частности, начиная с версии 4.x.

Ранние версии конфигураций "1С:Розница" были разработаны для работы со старым форматом УТМ и ожидали, что идентификатор запроса будет составным и будет выглядеть так: [FSRAR_ID организации]-[UUID запроса].

В новых версиях УТМ формат идентификатора в ответах изменился. Теперь УТМ возвращает "чистый" UUID без префикса с кодом ФСРАР, например: 951699a7-7ab4-4425-97fd-b8cbebdebece.

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

Пошаговое решение: исправляем код конфигурации

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

Если обновление по каким-либо причинам невозможно, а проблема актуальна, можно внести исправления вручную. Для этого потребуются права на изменение конфигурации.

Шаг 1. Открываем конфигуратор и находим нужный модуль.

Запустите 1С в режиме "Конфигуратор". В дереве конфигурации найдите раздел "Общие" -> "Общие модули". Нас интересует модуль с именем ИнтеграцияЕГАИС.

Шаг 2. Находим проблемную функцию.

Откройте модуль ИнтеграцияЕГАИС и с помощью поиска (Ctrl + F) найдите функцию ПараметрыИдентификатораЗапросаV4. В проблемной версии конфигурации ее код выглядит примерно так:


Функция ПараметрыИдентификатораЗапросаV4(ИдентификаторЗапроса) Экспорт

    Если СтрНайти(ИдентификаторЗапроса, "-") = 13 И СтрДлина(Сред(ИдентификаторЗапроса, 14)) = 36 Тогда
        
        ВозвращаемоеЗначение = Новый Структура;
        ВозвращаемоеЗначение.Вставить("КодФСРАР",      Лев(ИдентификаторЗапроса, 12));
        ВозвращаемоеЗначение.Вставить("Идентификатор", Сред(ИдентификаторЗапроса, 14));
        
        Возврат ВозвращаемоеЗначение;
        
    Иначе
        Возврат Неопределено;
    КонецЕсли;

КонецФункции

Именно условие СтрНайти(ИдентификаторЗапроса, "-") = 13 и приводит к ошибке, так как в новом формате идентификатора дефис находится на 9-й позиции, а не на 13-й. В результате функция возвращает Неопределено.

Шаг 3. Вносим изменения в код.

Модифицируем функцию так, чтобы она корректно обрабатывала и новый формат идентификатора. Замените код функции на следующий:


Функция ПараметрыИдентификатораЗапросаV4(ИдентификаторЗапроса) Экспорт

    Если СтрНайти(ИдентификаторЗапроса, "-") = 13 И СтрДлина(Сред(ИдентификаторЗапроса, 14)) = 36 Тогда
        
        ВозвращаемоеЗначение = Новый Структура;
        ВозвращаемоеЗначение.Вставить("КодФСРАР",      Лев(ИдентификаторЗапроса, 12));
        ВозвращаемоеЗначение.Вставить("Идентификатор", Сред(ИдентификаторЗапроса, 14));
        
        Возврат ВозвращаемоеЗначение;
        
    Иначе
        // Добавленная часть для обработки нового формата идентификатора
        ВозвращаемоеЗначение = Новый Структура;
        ВозвращаемоеЗначение.Вставить("КодФСРАР","");
        ВозвращаемоеЗначение.Вставить("Идентификатор", ИдентификаторЗапроса);
        
        Возврат ВозвращаемоеЗначение;
        // Возврат Неопределено; // Старую строку нужно закомментировать или удалить
    КонецЕсли;

КонецФункции

Что делает это изменение? Мы добавили ветку Иначе, которая выполняется, если идентификатор не соответствует старому формату. В этом случае мы предполагаем, что пришел "чистый" UUID. Мы создаем структуру, где поле КодФСРАР оставляем пустым, а в поле Идентификатор помещаем всю полученную строку. Этого достаточно, чтобы система смогла найти исходный документ по его идентификатору.

Шаг 4. Сохраняем конфигурацию.

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

← На главную