Как сформировать и заполнить параметр ИдФайл в модуле Диадок для 1С 7.7 с учетом требований 970 Приказа ФНС о маркированных товарах?

Программист 1С v7.7 Налоговый учет Торговля и дистрибуция
← На главную

С 1 января 2019 года, а особенно с появлением Приказа ФНС России от 19.12.2023 № ЕД-7-26/970@ (далее — 970 Приказ), перед участниками оборота маркированных товаров встала задача по корректной передаче сведений в систему ГИС МТ «Честный ЗНАК». Это изменение коснулось и формирования электронных универсальных передаточных документов (УПД), в частности, параметра ИдФайл. Пользователи устаревшей, но все еще широко используемой платформы 1С:Предприятие 7.7, сталкиваются с необходимостью адаптации своих интеграционных модулей, таких как Диадок, для соответствия новым требованиям. В этой статье мы подробно разберем, как внести необходимые изменения в модуль Диадок для 1С 7.7, чтобы обеспечить правильное формирование ИдФайл с учетом признаков маркированного алкоголя и табака.

Важно помнить, что 1С:Предприятие 7.7 является технологически устаревшей платформой. Поддержка интеграционного модуля Диадок для 1С 7.7 прекращается с 1 сентября 2026 года, а продажи новым клиентам уже остановлены с декабря 2024 года. Мы настоятельно рекомендуем рассмотреть переход на современные версии 1С или использование альтернативных способов работы с ЭДО, таких как Диадок.Коннектор или интеграция через API, для обеспечения долгосрочной стабильности и безопасности.

Понимание проблемы: Изменения в формировании ИдФайл по Приказу 970

Основная проблема, с которой сталкиваются пользователи, заключается в изменении структуры ИдФайл, который теперь должен содержать дополнительные признаки для маркированных товаров, таких как табак и алкоголь. Эти признаки необходимы для корректного формирования имени файла обмена УПД в соответствии с версией формата 5.03 (действующей с 22.01.2025 года).

Согласно 970 Приказу, имя файла обмена имеет сложную структуру: R_Т_A_О_GGGGMMDD_N1_ N2_ N3_ N4_ N5_N6_ N7. Для нас сейчас наиболее интересны следующие элементы:

  1. N3: Формируется значение "1", если в документе передаются сведения о маркированных товарах (по умолчанию "0").
  2. N4: Соответствует алкогольной продукции, подлежащей маркировке (например, пиво, напитки на основе пива, слабоалкогольные напитки). Если есть такая номенклатура, заполняется значение "1".
  3. N5: Соответствует табачной продукции, никотинсодержащим товарам и сырью. Если есть такая номенклатура, заполняется значение "1".

Таким образом, наша задача заключается в том, чтобы модуль Диадок для 1С 7.7 правильно «понимал» наличие этих видов маркированной продукции в документе и включал соответствующие признаки как в формируемый XML-файл, так и в имя файла обмена.

Где искать решение: Функция ЗаполнитьШапку970() в модуле Диадок

Как правило, интеграционные модули для 1С 7.7, такие как модуль Диадок, представляют собой внешние обработки или встроенные в конфигурацию программные модули. Внутри этих модулей существует логика, отвечающая за подготовку данных документа перед его отправкой в систему ЭДО. Для формата 970 Приказа, мы предполагаем, что существует специализированная функция, отвечающая за формирование заголовка или метаданных документа, которая, вероятно, называется ЗаполнитьШапку970() или имеет схожее наименование.

Эта функция обычно принимает в качестве параметра некую структуру данных (например, тз – таблица значений или другой объект), в которую и следует добавить необходимые метаданные. Если ваш модуль Диадок уже обновлен до версии 2.22.23 или выше, базовая поддержка 970 формата там должна быть. Однако для специфических «дополнительных признаков» для табака и алкоголя, возможно, потребуется ручная доработка, как это часто бывает с устаревшими платформами.

  1. Обновление модуля Диадок: Прежде чем приступать к доработкам, убедитесь, что ваш модуль Диадок для 1С 7.7 обновлен до максимально доступной версии. Начиная с версии 2.22.23, в нем появилась базовая поддержка 970 формата. Обновление может решить часть проблем или предоставить более актуальные механизмы для интеграции.
  2. Поиск функции ЗаполнитьШапку970(): Откройте код обработки или модуля Диадок в конфигураторе 1С 7.7. Используйте полнотекстовый поиск по ключевым словам ЗаполнитьШапку970, Формирование970, или УПД970. Нас интересует функция, которая принимает и обрабатывает данные, специфичные для формирования заголовка или служебных данных УПД в соответствии с 970 приказом.

Конкретное решение: Добавление признаков маркировки для табака и алкоголя

После того как мы обнаружили функцию, отвечающую за формирование шапки или метаданных 970 формата, мы можем приступить к добавлению необходимых признаков маркировки. Один из участников форума нашел конкретное место и метод для этого:

В функции ЗаполнитьШапку970(), или в схожей по назначению функции, вам потребуется добавить следующую строку кода:


УЗ(тз, "MetaData.IncludeIdentificationNumbers[1].IncludeIdentificationNumber", "2");

Давайте подробно разберем эту строку:

Таким образом, эта строка кода сообщает модулю Диадок, что в документе присутствуют товары, требующие особого идентификационного номера, и указывает его тип (табак).

Усложненные сценарии: Документ с несколькими видами маркированной продукции (табак и алкоголь)

Что делать, если в одном универсальном передаточном документе (УПД) присутствует одновременно и табачная, и алкогольная продукция? Изначальное решение, предложенное в форуме, добавляет только один элемент с индексом [1]. Формат 970 Приказа предполагает наличие разных флагов (N4 для алкоголя и N5 для табака) в имени файла, что подразумевает возможность их одновременного присутствия. Вероятно, внутренняя структура IncludeIdentificationNumbers должна быть способна содержать несколько таких признаков.

Мы предполагаем, что IncludeIdentificationNumbers является коллекцией, и для добавления второго признака потребуется использовать следующий индекс. Мы можем расширить логику следующим образом:

  1. Определяем наличие маркированной продукции: Прежде всего, необходимо определить, какие виды маркированной продукции (табак, алкоголь) присутствуют в текущем документе. Это можно сделать, анализируя табличную часть документа по номенклатуре. Например, вы можете проверять:
    • Коды номенклатуры.
    • Виды продукции (если они классифицированы в вашей 1С).
    • Признаки маркировки, установленные для конкретных товаров.

    Для этого потребуется написать небольшой фрагмент кода, который будет перебирать строки табличной части документа и проверять номенклатуру на принадлежность к алкоголю или табаку.

  2. Условное добавление признаков: После определения наличия, мы можем условно добавить соответствующие элементы в структуру метаданных.

Рассмотрим примерную логику в коде 1С 7.7:


// Предположим, что у нас есть переменные:
// ЕстьТабак = 1 (или 0) - если в документе есть табак
// ЕстьАлкоголь = 1 (или 0) - если в документе есть алкоголь
// Эти переменные должны быть заполнены на основе анализа табличной части документа

Перем ТекущийИндексИдентификатора;
ТекущийИндексИдентификатора = 1;

Если ЕстьТабак = 1 Тогда
    // Добавляем признак для табака
    УЗ(тз, "MetaData.IncludeIdentificationNumbers[" + ТекущийИндексИдентификатора + "].IncludeIdentificationNumber", "2");
    ТекущийИндексИдентификатора = ТекущийИндексИдентификатора + 1;
КонецЕсли;

Если ЕстьАлкоголь = 1 Тогда
    // Добавляем признак для алкоголя
    УЗ(тз, "MetaData.IncludeIdentificationNumbers[" + ТекущийИндексИдентификатора + "].IncludeIdentificationNumber", "1");
    ТекущийИндексИдентификатора = ТекущийИндексИдентификатора + 1;
КонецЕсли;

// Если в документе присутствует и табак, и алкоголь, то в структуре 'тз'
// будут добавлены два элемента:
// MetaData.IncludeIdentificationNumbers[1].IncludeIdentificationNumber со значением "2" (табак)
// MetaData.IncludeIdentificationNumbers[2].IncludeIdentificationNumber со значением "1" (алкоголь)

Важное примечание: Этот пример основывается на предположении, что функция УЗ() корректно обрабатывает добавление элементов в коллекцию по инкрементирующемуся индексу. В некоторых реализациях может потребоваться использование метода Добавить() для коллекции, если IncludeIdentificationNumbers является объектом типа "Список значений" или "Таблица значений". Без доступа к исходному коду модуля Диадок для 1С 7.7, мы исходим из наиболее вероятной логики, которая часто применяется при работе со структурами данных.

Шаги по реализации в 1С 7.7

Для внедрения этих изменений в вашу рабочую базу 1С 7.7, следуйте следующим шагам:

  1. Создайте резервную копию базы данных: Это критически важный шаг перед любыми изменениями в коде.
  2. Откройте конфигуратор: Запустите 1С:Предприятие 7.7 в режиме конфигуратора.
  3. Найдите модуль Диадок: Как правило, модуль Диадок реализован в виде внешней обработки (.ert, .epf) или является частью глобального модуля/модуля документа/журнала. Вам нужно будет найти соответствующий файл или модуль в конфигурации.
  4. Найдите функцию ЗаполнитьШапку970(): Используйте глобальный поиск по тексту модулей (Ctrl+Shift+F в конфигураторе 7.7) для поиска функции ЗаполнитьШапку970 или схожей по названию, которая относится к формированию 970 формата УПД.
  5. Реализуйте логику определения наличия маркировки: Перед вызовом УЗ(), вам нужно будет добавить код, который определяет, содержит ли текущий документ табак или алкоголь. Это может быть функция, которая анализирует табличную часть документа, например:
    
    // Примерная функция для определения наличия табака или алкоголя
    Функция ОпределитьНаличиеМаркировки(ДокументОбъект, ТипПродукции)
        // ДокументОбъект - ссылка на текущий документ (например, РеализацияТоваров)
        // ТипПродукции - строка "Табак" или "Алкоголь"
        Перем Результат;
        Результат = 0;
        ДокументОбъект.ВыбратьСтроки();
        Пока ДокументОбъект.ПолучитьСтроку() = 1 Цикл
            // Здесь ваша логика определения по номенклатуре
            // Например, если в номенклатуре есть признак "ВидПродукции"
            Если ДокументОбъект.Номенклатура.ВидПродукции = ТипПродукции Тогда
                Результат = 1;
                Прервать;
            КонецЕсли;
            // Или по другим признакам, кодам, группам
        КонецЦикла;
        Возврат Результат;
    КонецФункции
    
    // В основной функции ЗаполнитьШапку970():
    ЕстьТабак = ОпределитьНаличиеМаркировки(ДокументОбъект, "Табак");
    ЕстьАлкоголь = ОпределитьНаличиеМаркировки(ДокументОбъект, "Алкоголь");
    

    Вам потребуется адаптировать функцию ОпределитьНаличиеМаркировки под структуру вашей конфигурации и способы учета маркированных товаров.

  6. Вставьте или измените код для УЗ(): Добавьте или измените строки с вызовом УЗ(), как показано в примере выше, используя переменные ЕстьТабак и ЕстьАлкоголь для условного добавления признаков.
  7. Сохраните изменения: Сохраните измененный модуль. Если это внешняя обработка, сохраните файл .ert/.epf. Если это модуль конфигурации, сохраните конфигурацию и обновите базу данных.
  8. Тестирование: Проведите тщательное тестирование. Создайте и отправьте тестовые УПД с табаком, с алкоголем и с обоими видами продукции, а также с обычными товарами, чтобы убедиться в корректности формирования ИдФайл и отсутствии ошибок. Проверьте сформированные XML-файлы и их имена.

Рекомендации и будущее платформы 1С 7.7

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

  1. Планирование перехода: Начните планировать переход на более современные версии 1С (например, 1С:Предприятие 8.3), которые предлагают полноценную поддержку маркировки, интеграцию с «Честным ЗНАКом» и актуальные форматы ЭДО без необходимости ручных доработок.
  2. Использование альтернативных решений: Если переход на новую версию 1С пока невозможен, изучите возможности использования Диадок.Коннектор или прямого API для интеграции с Диадоком. Эти решения часто более гибкие и менее зависимы от конкретной версии 1С, но могут потребовать более глубокой технической экспертизы.
  3. Актуализация знаний: Регулярно отслеживайте обновления законодательства в области маркировки и ЭДО, а также информацию от разработчиков 1С и операторов ЭДО.

Надеемся, что данное подробное руководство поможет вам решить проблему формирования ИдФайл в модуле Диадок для 1С 7.7 и обеспечить соответствие требованиям 970 Приказа ФНС.

← На главную