При работе с электронным документооборотом (ЭДО), в частности через модуль Контур.Диадок на обычных формах 1С, разработчики часто сталкиваются с необходимостью передачи специфических данных, которые требуют контрагенты. Кастомизация электронных документов и заполнение поля «Иные сведения» в Универсальном корректировочном документе (УКД) — одна из таких задач. По умолчанию это поле может не заполняться типовым модулем, а его поиск в структуре объектов XDTO или Content вызывает затруднения.
В этой статье мы подробно рассмотрим, как найти нужное поле, в каком событии подключаемого модуля (ПМ) выполнять доработку, и приведем конкретные примеры кода для решения этой задачи.
Прежде всего, проанализируем, за что отвечает интересующее нас поле. Согласно формату ФНС для УКД, поле «Иные сведения» соответствует XML-тегу ИнфПолСтр. В объектной модели API Диадока это поле не входит в общую коллекцию дополнительных сведений (AdditionalInfoId), а вынесено в отдельное свойство.
Важно различать два похожих понятия:
Если вы не уверены, какое именно свойство структуры Content отвечает за вывод данных в печатную форму, воспользуйтесь проверенным приемом. Разберем его по шагам:
.epf. Если вы столкнулись с форматом XML при выгрузке, используйте конвертер обработок XML в EPF.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С. Для анализа ситуации без сбоев используйте следующие советы:
Content.<ИнфПолСтр> в блоке корректировки.Нужно учитывать, что структура EventContent может отличаться в зависимости от выбранного формата УКД. Если ваша компания осуществляет групповую выгрузку файлов из 1С в XML по приказам №820 и №970 ФНС, важно следить за соответствием передаваемых полей актуальным требованиям законодательства, включая поддержку маркировки и новых ставок НДС.
Если через объектную модель XDTO поле не появляется в итоговом файле, можно прибегнуть к модификации уже сформированного XML-текста перед его подписанием, хотя это крайняя мера. Правильным путем остается работа через структуру Content в событии ПодготовитьЭлектронныйДокумент, так как именно на её основе модуль Диадока генерирует файл для отправки.
Резюмируем: для программного заполнения «Иных сведений» в УКД необходимо в подключаемом модуле обратиться к объекту Content, перейти к узлу EventContent и присвоить значение свойству CostChangeInfo. А для обеспечения надежности хранения переданных данных рекомендуем внедрить локальный архив электронных документов, который позволит всегда иметь доступ к истории переписки с контрагентами внутри вашей организации — для этого подойдёт локальный архив электронных документов для 1С.