При работе с электронным документооборотом (ЭДО) через модуль «Контур.Диадок» в конфигурации «1С:Бухгалтерия 3.0» пользователи часто сталкиваются с ситуацией, когда в поле Основание передачи (сдачи) / получения (приемки) автоматически подставляется номер и дата договора из карточки контрагента. В ряде случаев, например, при разовых отгрузках или работе по счету-оферте, это поле требуется оставить пустым или выполнить изменение «Основания передачи (сдачи) / получения (приемки)» в УПД или заполнить иным текстом (например, «Без документа-основания»).
В этой статье мы подробно разберем, как управлять заполнением этих данных, рассмотрим выгрузку УПД в XML из Реализации товаров и услуг (удобно через модуль выгрузки УПД в XML для 1С:Бухгалтерия), механизм работы встроенных плагинов модуля Диадок и выясним причину возникновения распространенной ошибки валидации XML-файла.
Проанализируем ситуацию: в стандартных настройках модуля Диадок нет простой «галочки», которая бы отключала вывод договора. Однако разработчики предусмотрели гибкую систему расширения функционала через плагины, что позволяет осуществить выгрузку ЭД УПД в XML без лишних телодвижений. Рассмотрим пошагово, как активировать эту возможность:
Выясним, какой именно плагин нам нужен. Обычно он называется «Изменение основания отгрузки» или имеет схожее название, связанное с заполнением полей документа. После его активации мы получаем возможность вмешаться в алгоритм формирования XML-файла непосредственно перед отправкой.
Рассмотрим важный технический нюанс. При попытке просто «очистить» программно поле основания, пользователи часто получают ошибку: реквнаимдок, message = the required attribute 'реквнаимдок' is missing. Разберем, почему это происходит.
Согласно приказу ФНС №820, регламентирующему формат УПД и счетов-фактур, блок TransferBase (Основание) имеет строгую структуру. Посмотрим на технические требования к атрибутам:
DocumentName (в XML — НаимОсн): Наименование документа-основания. Является обязательным, если блок оснований вообще присутствует.DocumentNumber (в XML — НомОсн): Номер документа.DocumentDate (в XML — ДатаОсн): Дата документа.Проанализируем причину ошибки: если ваш плагин очищает номер договора, но оставляет само поле «Основание» активным, формат требует, чтобы атрибут НаимОсн (Наименование документа) не был пустым. Если вы хотите передать документ без ссылки на конкретный договор, в поле «Наименование» следует записывать строку «Без документа-основания».
Посмотрим на пример того, как должен выглядеть фрагмент кода в плагине, чтобы корректно изменить данные и избежать ошибок валидации. Нам необходимо обратиться к структуре, отвечающей за основание, и переопределить её значения.
// Пример модификации структуры основания в обработчике плагина
// Предположим, переменная ДанныеОснования содержит структуру TransferBase
ДанныеОснования.Наименование = "Без документа-основания";
ДанныеОснования.Номер = "";
ДанныеОснования.Дата = "";
// Если нужно оставить поле полностью пустым (если формат позволяет для данного типа документа)
// необходимо удалять весь узел, но для УПД рекомендуется вариант выше.
Важно помнить, что плагин — это, по сути, внешняя обработка .epf, которая подключается к модулю. Если вы редактируете код внутри модуля, при обновлении «Диадока» все изменения затрутся. Поэтому правильным путем будет сохранение кода плагина в отдельный файл через кнопку Сохранить в настройках плагина (если модуль позволяет) или создание своего файла на базе шаблона.
В некоторых версиях модуля (особенно в последних релизах) предусмотрена возможность настройки через пользовательский интерфейс без написания кода. Разберем этот вариант:
Важный момент: если вы используете УПД со статусом «1» (счет-фактура и передаточный документ), налоговые органы крайне внимательно относятся к заполнению основания. Полное отсутствие данных в этом поле в печатной форме может вызвать вопросы, поэтому вариант с текстом «Без документа-основания» является наиболее безопасным с точки зрения налогового учета.
Если вышеописанные методы не подходят (например, используется очень старая версия модуля), программисту придется найти в коде модуля функцию, отвечающую за сборку структуры TransferBase. Обычно она вызывается при формировании электронного сообщения.
Проанализируем ситуацию: внутри модуля выполняется запрос к метаданным договора. Чтобы изменить это поведение, нужно найти место, где переменной присваивается значение ДоговорКонтрагента.Наименование, и заменить его на условие или фиксированную строку. Однако, повторимся, использование плагинов — это рекомендуемый и наиболее стабильный способ решения задачи, так как он сохраняет целостность основного кода модуля Диадок.
Подводя итог, отметим, что задача «убрать договор» сводится не к простому удалению данных, а к их корректной замене согласно требованиям ФНС. Мы рекомендуем следующий алгоритм действий:
"Без документа-основания", а номер и дату оставьте пустыми строками.НаимОсн присутствовал в файле.Такой подход гарантирует успешное прохождение валидации на сервере оператора ЭДО и отсутствие претензий со стороны контролирующих органов.