Как исправить ошибку «поле @номердт должно присутствовать» в модуле Контур.Диадок для 1С:УТ 10.3

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

При работе с модулем Контур.Диадок в устаревших конфигурациях, таких как 1С:Управление торговлей 10.3, пользователи часто сталкиваются с ошибкой HTTP 400 при попытке отправить пакет документов (УПД). Текст ошибки сообщает: поле @номердт должно присутствовать. Проблема становится особенно актуальной для организаций на ОСНО, торгующих товарами, произведенными в странах ЕАЭС (Белоруссия, Казахстан, Армения, Киргизия).

В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем изменения в законодательстве и рассмотрим несколько способов решения проблемы — от «быстрых исправлений» в данных до корректировки программного кода модуля интеграции.

Выясним причину ошибки: формат 970@ и требования ФНС

Первым делом проанализируем ситуацию с технической точки зрения. Ошибка поле @номердт должно присутствовать напрямую связана с переходом на новый формат электронных документов, утвержденный Приказом ФНС России № ЕД-7-26/970@. Этот формат пришел на смену старому 820-му приказу и предъявляет более жесткие требования к заполнению XSD-схемы XML-файла.

Согласно правилам формирования УПД:

  1. Если в строке товара указан код страны происхождения, отличный от «643» (Россия), система считает товар импортным.
  2. Для импортных товаров в XML-файле должен быть создан узел СвДТ (Сведения о таможенной декларации).
  3. Внутри этого узла атрибут НомерДТ (номер таможенной декларации) является обязательным.

Проблема заключается в том, что для товаров из стран ЕАЭС таможенная декларация в привычном понимании не оформляется. Однако в учетной системе 1С код страны (например, «112» для Белоруссии) проставлен. Модуль Диадока видит иностранный код страны, пытается создать узел СвДТ, но не находит номера ГТД и оставляет поле пустым. Валидатор на стороне сервера Диадока или ФНС отклоняет такой файл, так как пустое поле нарушает структуру схемы.

Способ 1. Быстрое решение через использование прочерка

Если проблему нужно решить «здесь и сейчас» без привлечения программиста для изменения логики модуля, рассмотрим метод подстановки фиктивного значения. Как показывает практика пользователей, официальные рекомендации техподдержки и опыт участников форума, валидацию проходит символ прочерка.

Рассмотрим шаги для реализации этого метода:

  1. Откроем документ Счет-фактура выданный или Реализация товаров и услуг в 1С.
  2. Перейдем к списку серий или непосредственно в справочник Номера ГТД.
  3. Для товаров, происходящих из стран ЕАЭС, в поле «Номер ГТД» введем одиночный символ прочерка -.
  4. Перезаполним документ и попробуем отправить его через модуль Диадок снова.

Важный момент: если в вашей конфигурации УТ 10.3 учет по сериям и ГТД не ведется в явном виде, модуль может подтягивать страну происхождения напрямую из карточки Номенклатура. в этом случае проверьте настройки маппинга (сопоставления полей) в самом модуле Диадок.

Способ 2. Корректировка программного кода в модуле интеграции

Для системных администраторов и программистов 1С более правильным решением будет внесение изменений в логику формирования XML-файла. Нам необходимо найти место, где заполняется объект CustomDeclaration (или СвДТ в терминах XML).

Проанализируем пример кода, который часто встречается в процедурах заполнения сведений о таможенной декларации:


Процедура УПД970_ЗаполнитьСведенияОТаможеннойДекларации(Item, СтрокаТаблицы)
    // Проверяем, заполнена ли страна. Если это не Россия (643)
    Если ЗначениеЗаполнено(СтрокаТаблицы.СтранаПроисхожденияКод) 
        И СтрокаТаблицы.СтранаПроисхожденияКод <> "643" Тогда
        
        CustomDeclaration = Контракт_CustomDeclarations;
        CustomDeclaration.CountryCode = СтрокаТаблицы.СтранаПроисхожденияКод;
        
        // Если номер ГТД пустой, но страна - член ЕАЭС, подставляем прочерк
        Если Не ЗначениеЗаполнено(СтрокаТаблицы.НомерГТД) Тогда
            CustomDeclaration.DeclarationNumber = "-";
        Иначе
            CustomDeclaration.DeclarationNumber = СокрЛП(СтрокаТаблицы.НомерГТД);
        КонецЕсли;
        
        Item.CustomDeclarations.Добавить(CustomDeclaration);
    КонецЕсли;
КонецПроцедуры

Разберем, что мы сделали в этом коде. Мы добавили проверку: если номер ГТД отсутствует (Не ЗначениеЗаполнено), но блок декларации все равно должен быть создан из-за иностранного кода страны, мы принудительно устанавливаем DeclarationNumber в значение "-". Это гарантирует, что атрибут @номердт в итоговом XML не будет пустым.

Способ 3. Работа с «Компонентом формирования XML»

В современных версиях модуля Диадок логика формирования файлов вынесена в отдельную внешнюю обработку или внутреннюю библиотеку (часто называется КонтурДиадокВнешниеСервисы или аналогично). Если вы используете «вчерашний» (актуальный) модуль, но ошибка сохраняется, выполните следующие действия:

  1. Проверьте, не перекрываются ли стандартные функции формирования XML вашими кастомными доработками в модуле КонтурДиадокИнтеграция.
  2. Найду функцию, отвечающую за заполнение табличной части товаров (СведенияОТоварах).
  3. Убедитесь, что в логике формирования структуры CustomDeclarations нет жесткого условия, которое прерывает выполнение при пустом номере ГТД, но при этом оставляет созданный узел в структуре.

Посмотрим на типичную ошибку в старых интеграциях:


// ОШИБОЧНЫЙ ВАРИАНТ
Если ЗначениеЗаполнено(СтрокаТаблицы.НомерГТД) Тогда
    CustomDeclaration.DeclarationNumber = СтрокаТаблицы.НомерГТД;
КонецЕсли;
// Здесь узел CustomDeclaration уже может быть создан выше, 
// и если условие не выполнится, поле останется пустым!

Правильным подходом будет либо не добавлять CustomDeclaration в коллекцию Item.CustomDeclarations вовсе, либо гарантировать наличие текста в DeclarationNumber.

Особенности для организаций на ОСНО

Проанализируем, почему проблема чаще возникает у плательщиков НДС. Для организаций на упрощенной системе налогообложения (УСН) требования к заполнению счета-фактуры (в составе УПД) менее строгие, так как они зачастую передают только документ о передаче товаров (ДОП), а не СЧФ. Для СЧФДОП (счет-фактура + накладная) заполнение данных о ГТД является обязательным лицензионным требованием ФНС для контроля прослеживаемости и импорта.

Резюме и рекомендации

Подводя итог, отметим, что ошибка поле @номердт должно присутствовать — это следствие несоответствия данных в вашей 1С новым правилам валидации формата 970@.

Рекомендуемый алгоритм действий:

Помните, что техническая поддержка Диадока также может предоставить обновленную версию «Компонента формирования XML», где эта проверка уже реализована более гибко.

← На главную