При работе с модулем Контур.Диадок в устаревших конфигурациях, таких как 1С:Управление торговлей 10.3, пользователи часто сталкиваются с ошибкой HTTP 400 при попытке отправить пакет документов (УПД). Текст ошибки сообщает: поле @номердт должно присутствовать. Проблема становится особенно актуальной для организаций на ОСНО, торгующих товарами, произведенными в странах ЕАЭС (Белоруссия, Казахстан, Армения, Киргизия).
В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем изменения в законодательстве и рассмотрим несколько способов решения проблемы — от «быстрых исправлений» в данных до корректировки программного кода модуля интеграции.
Первым делом проанализируем ситуацию с технической точки зрения. Ошибка поле @номердт должно присутствовать напрямую связана с переходом на новый формат электронных документов, утвержденный Приказом ФНС России № ЕД-7-26/970@. Этот формат пришел на смену старому 820-му приказу и предъявляет более жесткие требования к заполнению XSD-схемы XML-файла.
Согласно правилам формирования УПД:
СвДТ (Сведения о таможенной декларации).НомерДТ (номер таможенной декларации) является обязательным.Проблема заключается в том, что для товаров из стран ЕАЭС таможенная декларация в привычном понимании не оформляется. Однако в учетной системе 1С код страны (например, «112» для Белоруссии) проставлен. Модуль Диадока видит иностранный код страны, пытается создать узел СвДТ, но не находит номера ГТД и оставляет поле пустым. Валидатор на стороне сервера Диадока или ФНС отклоняет такой файл, так как пустое поле нарушает структуру схемы.
Если проблему нужно решить «здесь и сейчас» без привлечения программиста для изменения логики модуля, рассмотрим метод подстановки фиктивного значения. Как показывает практика пользователей, официальные рекомендации техподдержки и опыт участников форума, валидацию проходит символ прочерка.
Рассмотрим шаги для реализации этого метода:
Счет-фактура выданный или Реализация товаров и услуг в 1С.-.Важный момент: если в вашей конфигурации УТ 10.3 учет по сериям и ГТД не ведется в явном виде, модуль может подтягивать страну происхождения напрямую из карточки Номенклатура. в этом случае проверьте настройки маппинга (сопоставления полей) в самом модуле Диадок.
Для системных администраторов и программистов 1С более правильным решением будет внесение изменений в логику формирования XML-файла. Нам необходимо найти место, где заполняется объект CustomDeclaration (или СвДТ в терминах XML).
Проанализируем пример кода, который часто встречается в процедурах заполнения сведений о таможенной декларации:
Процедура УПД970_ЗаполнитьСведенияОТаможеннойДекларации(Item, СтрокаТаблицы)
// Проверяем, заполнена ли страна. Если это не Россия (643)
Если ЗначениеЗаполнено(СтрокаТаблицы.СтранаПроисхожденияКод)
И СтрокаТаблицы.СтранаПроисхожденияКод <> "643" Тогда
CustomDeclaration = Контракт_CustomDeclarations;
CustomDeclaration.CountryCode = СтрокаТаблицы.СтранаПроисхожденияКод;
// Если номер ГТД пустой, но страна - член ЕАЭС, подставляем прочерк
Если Не ЗначениеЗаполнено(СтрокаТаблицы.НомерГТД) Тогда
CustomDeclaration.DeclarationNumber = "-";
Иначе
CustomDeclaration.DeclarationNumber = СокрЛП(СтрокаТаблицы.НомерГТД);
КонецЕсли;
Item.CustomDeclarations.Добавить(CustomDeclaration);
КонецЕсли;
КонецПроцедуры
Разберем, что мы сделали в этом коде. Мы добавили проверку: если номер ГТД отсутствует (Не ЗначениеЗаполнено), но блок декларации все равно должен быть создан из-за иностранного кода страны, мы принудительно устанавливаем DeclarationNumber в значение "-". Это гарантирует, что атрибут @номердт в итоговом XML не будет пустым.
В современных версиях модуля Диадок логика формирования файлов вынесена в отдельную внешнюю обработку или внутреннюю библиотеку (часто называется КонтурДиадокВнешниеСервисы или аналогично). Если вы используете «вчерашний» (актуальный) модуль, но ошибка сохраняется, выполните следующие действия:
КонтурДиадокИнтеграция.СведенияОТоварах).CustomDeclarations нет жесткого условия, которое прерывает выполнение при пустом номере ГТД, но при этом оставляет созданный узел в структуре.Посмотрим на типичную ошибку в старых интеграциях:
// ОШИБОЧНЫЙ ВАРИАНТ
Если ЗначениеЗаполнено(СтрокаТаблицы.НомерГТД) Тогда
CustomDeclaration.DeclarationNumber = СтрокаТаблицы.НомерГТД;
КонецЕсли;
// Здесь узел CustomDeclaration уже может быть создан выше,
// и если условие не выполнится, поле останется пустым!
Правильным подходом будет либо не добавлять CustomDeclaration в коллекцию Item.CustomDeclarations вовсе, либо гарантировать наличие текста в DeclarationNumber.
Проанализируем, почему проблема чаще возникает у плательщиков НДС. Для организаций на упрощенной системе налогообложения (УСН) требования к заполнению счета-фактуры (в составе УПД) менее строгие, так как они зачастую передают только документ о передаче товаров (ДОП), а не СЧФ. Для СЧФДОП (счет-фактура + накладная) заполнение данных о ГТД является обязательным лицензионным требованием ФНС для контроля прослеживаемости и импорта.
Подводя итог, отметим, что ошибка поле @номердт должно присутствовать — это следствие несоответствия данных в вашей 1С новым правилам валидации формата 970@.
Рекомендуемый алгоритм действий:
Помните, что техническая поддержка Диадока также может предоставить обновленную версию «Компонента формирования XML», где эта проверка уже реализована более гибко.