С 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, для обеспечения долгосрочной стабильности и безопасности.
Основная проблема, с которой сталкиваются пользователи, заключается в изменении структуры ИдФайл, который теперь должен содержать дополнительные признаки для маркированных товаров, таких как табак и алкоголь. Эти признаки необходимы для корректного формирования имени файла обмена УПД в соответствии с версией формата 5.03 (действующей с 22.01.2025 года).
Согласно 970 Приказу, имя файла обмена имеет сложную структуру: R_Т_A_О_GGGGMMDD_N1_ N2_ N3_ N4_ N5_N6_ N7. Для нас сейчас наиболее интересны следующие элементы:
N3: Формируется значение "1", если в документе передаются сведения о маркированных товарах (по умолчанию "0").N4: Соответствует алкогольной продукции, подлежащей маркировке (например, пиво, напитки на основе пива, слабоалкогольные напитки). Если есть такая номенклатура, заполняется значение "1".N5: Соответствует табачной продукции, никотинсодержащим товарам и сырью. Если есть такая номенклатура, заполняется значение "1".Таким образом, наша задача заключается в том, чтобы модуль Диадок для 1С 7.7 правильно «понимал» наличие этих видов маркированной продукции в документе и включал соответствующие признаки как в формируемый XML-файл, так и в имя файла обмена.
ЗаполнитьШапку970() в модуле ДиадокКак правило, интеграционные модули для 1С 7.7, такие как модуль Диадок, представляют собой внешние обработки или встроенные в конфигурацию программные модули. Внутри этих модулей существует логика, отвечающая за подготовку данных документа перед его отправкой в систему ЭДО. Для формата 970 Приказа, мы предполагаем, что существует специализированная функция, отвечающая за формирование заголовка или метаданных документа, которая, вероятно, называется ЗаполнитьШапку970() или имеет схожее наименование.
Эта функция обычно принимает в качестве параметра некую структуру данных (например, тз – таблица значений или другой объект), в которую и следует добавить необходимые метаданные. Если ваш модуль Диадок уже обновлен до версии 2.22.23 или выше, базовая поддержка 970 формата там должна быть. Однако для специфических «дополнительных признаков» для табака и алкоголя, возможно, потребуется ручная доработка, как это часто бывает с устаревшими платформами.
ЗаполнитьШапку970(): Откройте код обработки или модуля Диадок в конфигураторе 1С 7.7. Используйте полнотекстовый поиск по ключевым словам ЗаполнитьШапку970, Формирование970, или УПД970. Нас интересует функция, которая принимает и обрабатывает данные, специфичные для формирования заголовка или служебных данных УПД в соответствии с 970 приказом.После того как мы обнаружили функцию, отвечающую за формирование шапки или метаданных 970 формата, мы можем приступить к добавлению необходимых признаков маркировки. Один из участников форума нашел конкретное место и метод для этого:
В функции ЗаполнитьШапку970(), или в схожей по назначению функции, вам потребуется добавить следующую строку кода:
УЗ(тз, "MetaData.IncludeIdentificationNumbers[1].IncludeIdentificationNumber", "2");
Давайте подробно разберем эту строку:
УЗ(тз, ...): Это, вероятно, внутренняя функция модуля Диадок (возможно, сокращение от "УстановитьЗначение"), которая позволяет устанавливать значения в сложную структуру данных тз (таблицу значений или другой объект, представляющий метаданные документа). Эта функция абстрагирует процесс работы с внутренним представлением XML или другого формата данных, который затем будет передан в Диадок."MetaData.IncludeIdentificationNumbers[1].IncludeIdentificationNumber": Это строковый путь к элементу в структуре метаданных документа.
MetaData: Указывает на корневой объект метаданных документа.IncludeIdentificationNumbers: Представляет собой коллекцию (или массив) идентификационных номеров, которые должны быть включены в документ. Это новый элемент, введенный для соответствия требованиям маркировки.[1]: Индекс элемента в этой коллекции. В 1С 7.7 индексация коллекций обычно начинается с 1. В данном случае, [1] указывает на первый элемент коллекции.IncludeIdentificationNumber: Собственно, сам идентификационный номер или признак."2": Это значение, которое присваивается признаку. В контексте обсуждения, "2" соответствует табачной продукции. Если вам нужно указать алкогольную продукцию, то используйте значение "1".Таким образом, эта строка кода сообщает модулю Диадок, что в документе присутствуют товары, требующие особого идентификационного номера, и указывает его тип (табак).
Что делать, если в одном универсальном передаточном документе (УПД) присутствует одновременно и табачная, и алкогольная продукция? Изначальное решение, предложенное в форуме, добавляет только один элемент с индексом [1]. Формат 970 Приказа предполагает наличие разных флагов (N4 для алкоголя и N5 для табака) в имени файла, что подразумевает возможность их одновременного присутствия. Вероятно, внутренняя структура IncludeIdentificationNumbers должна быть способна содержать несколько таких признаков.
Мы предполагаем, что IncludeIdentificationNumbers является коллекцией, и для добавления второго признака потребуется использовать следующий индекс. Мы можем расширить логику следующим образом:
Для этого потребуется написать небольшой фрагмент кода, который будет перебирать строки табличной части документа и проверять номенклатуру на принадлежность к алкоголю или табаку.
Рассмотрим примерную логику в коде 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, следуйте следующим шагам:
ЗаполнитьШапку970(): Используйте глобальный поиск по тексту модулей (Ctrl+Shift+F в конфигураторе 7.7) для поиска функции ЗаполнитьШапку970 или схожей по названию, которая относится к формированию 970 формата УПД.УЗ(), вам нужно будет добавить код, который определяет, содержит ли текущий документ табак или алкоголь. Это может быть функция, которая анализирует табличную часть документа, например:
// Примерная функция для определения наличия табака или алкоголя
Функция ОпределитьНаличиеМаркировки(ДокументОбъект, ТипПродукции)
// ДокументОбъект - ссылка на текущий документ (например, РеализацияТоваров)
// ТипПродукции - строка "Табак" или "Алкоголь"
Перем Результат;
Результат = 0;
ДокументОбъект.ВыбратьСтроки();
Пока ДокументОбъект.ПолучитьСтроку() = 1 Цикл
// Здесь ваша логика определения по номенклатуре
// Например, если в номенклатуре есть признак "ВидПродукции"
Если ДокументОбъект.Номенклатура.ВидПродукции = ТипПродукции Тогда
Результат = 1;
Прервать;
КонецЕсли;
// Или по другим признакам, кодам, группам
КонецЦикла;
Возврат Результат;
КонецФункции
// В основной функции ЗаполнитьШапку970():
ЕстьТабак = ОпределитьНаличиеМаркировки(ДокументОбъект, "Табак");
ЕстьАлкоголь = ОпределитьНаличиеМаркировки(ДокументОбъект, "Алкоголь");
Вам потребуется адаптировать функцию ОпределитьНаличиеМаркировки под структуру вашей конфигурации и способы учета маркированных товаров.
УЗ(): Добавьте или измените строки с вызовом УЗ(), как показано в примере выше, используя переменные ЕстьТабак и ЕстьАлкоголь для условного добавления признаков.ИдФайл и отсутствии ошибок. Проверьте сформированные XML-файлы и их имена.Мы еще раз хотим подчеркнуть, что поддержка платформы 1С:Предприятие 7.7 и соответствующих модулей сторонних разработчиков, таких как Диадок, активно сворачивается. Подобные доработки, хотя и решают текущие проблемы, являются временными мерами и не гарантируют долгосрочной работоспособности в условиях постоянно меняющегося законодательства и технологических стандартов. Мы настоятельно рекомендуем рассмотреть следующие шаги для вашего бизнеса:
Надеемся, что данное подробное руководство поможет вам решить проблему формирования ИдФайл в модуле Диадок для 1С 7.7 и обеспечить соответствие требованиям 970 Приказа ФНС.