Как программно заполнить поле «Иные сведения» в УКД при использовании модуля Контур.Диадок для 1С?

Программист Налоговый учет
← На главную

При работе с электронным документооборотом (ЭДО), в частности через модуль Контур.Диадок на обычных формах 1С, разработчики часто сталкиваются с необходимостью передачи специфических данных, которые требуют контрагенты. Кастомизация электронных документов и заполнение поля «Иные сведения» в Универсальном корректировочном документе (УКД) — одна из таких задач. По умолчанию это поле может не заполняться типовым модулем, а его поиск в структуре объектов XDTO или Content вызывает затруднения.

В этой статье мы подробно рассмотрим, как найти нужное поле, в каком событии подключаемого модуля (ПМ) выполнять доработку, и приведем конкретные примеры кода для решения этой задачи.

Анализ структуры документа УКД и целевого поля

Прежде всего, проанализируем, за что отвечает интересующее нас поле. Согласно формату ФНС для УКД, поле «Иные сведения» соответствует XML-тегу ИнфПолСтр. В объектной модели API Диадока это поле не входит в общую коллекцию дополнительных сведений (AdditionalInfoId), а вынесено в отдельное свойство.

Важно различать два похожих понятия:

  1. AdditionalInfoId (ИнфПолФХЖ1): это дополнительные сведения, которые обычно отображаются в «шапке» документа в виде списка «ключ — значение».
  2. CostChangeInfo (Иные сведения об изменении стоимости): текстовое поле, которое выводится под табличной частью документа. Именно оно нас интересует при работе с УКД.

Методика поиска полей через печатные формы

Если вы не уверены, какое именно свойство структуры Content отвечает за вывод данных в печатную форму, воспользуйтесь проверенным приемом. Разберем его по шагам:

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

Проанализировав логику модуля, можно выяснить, что для УКД поле «Иные сведения» напрямую привязано к свойству Content.EventContent.CostChangeInfo.

Реализация через подключаемый модуль (ПМ)

Для внесения изменений без правки основной обработки Диадок рекомендуется использовать Подключаемый модуль (ПМ). Наш практикум по УКД в 1С показывает, что необходимо перехватить формирование контента документа — для этого есть обработка автоматического формирования XML-файлов УПД и УКД. Наиболее подходящими событиями для этого являются ПослеЗаполненияКонтента или ПодготовитьЭлектронныйДокумент.

Рассмотрим пример кода, который позволяет заполнить это поле:


Процедура ПослеЗаполненияКонтента(Параметры) Экспорт
    ДокументСсылка = Параметры.ДокументСсылка;
    Content = Параметры.Content;
    
    // Проверим тип документа, чтобы работать именно с УКД
    Если Параметры.DocumentType = "UniversalCorrectionDocument" Тогда
        // Прямое обращение к структуре события документа
        // Если свойство EventContent еще не инициализировано, 
        // модуль может выдать ошибку, поэтому проверяем структуру.
        
        Попытка
            Content.EventContent.CostChangeInfo = "Текст иных сведений из 1С: " + ДокументСсылка.Комментарий;
        Исключение
            // В случае отсутствия узла в данной версии API, используем безопасную установку
            УстановитьЗначениеXDTO(Content.EventContent, "CostChangeInfo", "Ваши данные");
        КонецПопытки;
    КонецЕсли;
КонецПроцедуры

Использование системных функций модуля

В современных версиях универсального модуля Диадок разработчики предусмотрели вспомогательные процедуры для работы с XDTO. Это позволяет избежать ошибок, если какое-то свойство в структуре еще не создано. Рекомендуется использовать метод УстановитьЗначениеXDTO.

Пример комплексного заполнения сведений в ПМ:


// Пример использования системной функции модуля
УстановитьЗначениеXDTO(Контент.EventContent, "CostChangeInfo", "Оно работает!");

// Если нужно заполнить содержание операции (другое часто требуемое поле)
УстановитьЗначениеXDTO(Контент.EventContent, "OperationContent", "Уведомление об изменении стоимости");

Если вам требуется заполнить дополнительные поля в шапке (ИнфПолФХЖ1), это выполняется через коллекцию AdditionalInfoId. Рассмотрим пример для сравнения:


// Добавление поля в коллекцию дополнительных сведений
НовоеПоле = Content.AdditionalInfoId.StructedAdditionalInfos.Добавить();
НовоеПоле.Key = "НомерЗаказа";
НовоеПоле.Value = "12345";

Проблемы отладки и их решение

Часто при включении отладки в настройках модуля Диадок 1С может аварийно завершать работу. Это связано с особенностями загрузки внешних компонент. Чтобы упростить процесс, можно использовать помощник отладки, который позволяет быстрее настраивать среду после перезапуска системы — для этого подойдёт инструмент пошаговой отладки кода в 1С. Для анализа ситуации без сбоев используйте следующие советы:

  1. Запись в лог: используйте стандартную запись в текстовый файл или в Журнал регистрации 1С прямо внутри кода ПМ, чтобы отследить состояние объекта Content.
  2. Проверка прав: убедитесь, что у пользователя 1С есть права на запись в каталог временных файлов, куда модуль выгружает отладочные данные.
  3. Выгрузка XML: перед отправкой документа воспользуйтесь встроенной функцией получения сформированного XML. Проанализируйте наличие тега <ИнфПолСтр> в блоке корректировки.

Нюансы для разных версий формата

Нужно учитывать, что структура EventContent может отличаться в зависимости от выбранного формата УКД. Если ваша компания осуществляет групповую выгрузку файлов из 1С в XML по приказам №820 и №970 ФНС, важно следить за соответствием передаваемых полей актуальным требованиям законодательства, включая поддержку маркировки и новых ставок НДС.

Если через объектную модель XDTO поле не появляется в итоговом файле, можно прибегнуть к модификации уже сформированного XML-текста перед его подписанием, хотя это крайняя мера. Правильным путем остается работа через структуру Content в событии ПодготовитьЭлектронныйДокумент, так как именно на её основе модуль Диадока генерирует файл для отправки.

Резюмируем: для программного заполнения «Иных сведений» в УКД необходимо в подключаемом модуле обратиться к объекту Content, перейти к узлу EventContent и присвоить значение свойству CostChangeInfo. А для обеспечения надежности хранения переданных данных рекомендуем внедрить локальный архив электронных документов, который позволит всегда иметь доступ к истории переписки с контрагентами внутри вашей организации — для этого подойдёт локальный архив электронных документов для 1С.

← На главную