При работе с системой электронного документооборота (ЭДО) Диадок через интеграционный модуль 1С пользователи часто сталкиваются с необходимостью изменить внешний вид печатной формы документа. Однако, в отличие от типовых печатных форм 1С, поиск макета в модуле Диадока часто заводит в тупик. Разберемся подробно, как устроена визуализация документов в ЭДО, где физически находятся «формы» и что именно нужно редактировать, чтобы изменить данные в документе.
Для начала проанализируем фундаментальное отличие ЭДО от бумажного документооборота. В мире 1С мы привыкли, что печатная форма — это объект типа ТабличныйДокумент, который формируется на основе макета. В системе Диадок (и ЭДО в целом) юридически значимым документом является файл формата XML, составленный по строгому регламенту ФНС. То, что мы видим на экране монитора или при печати на принтере — это лишь визуализация данных, содержащихся в этом XML-файле.
Рассмотрим, из чего состоит процесс отображения формы:
Таким образом, когда мы ищем «печатную форму» внутри модуля, мы на самом деле ищем либо алгоритм заполнения XML, либо шаблон визуализации.
Если мы используем стандартный модуль обработки от СКБ Контур, логика формирования визуализации глубоко интегрирована в код. Выясним, где именно «спрятаны» данные, если вы все же решили докопаться до истины внутри .epf файла.
Проанализируем структуру модуля:
ПечатныеФормы или имеют зашифрованные имена. Это двоичные файлы, которые модуль распаковывает во временные папки при запуске.Как советуют опытные разработчики, чтобы заглянуть внутрь, можно попробовать сохранить макет ПечатныеФормы как отдельный файл ПечатныеФормы.epf. Однако, как показывает практика, редактирование этого внутреннего файла мало что дает, так как современные версии модуля стремятся использовать серверную визуализацию.
Вместо того чтобы пытаться перерисовать саму форму (сетку таблицы), разберем, как повлиять на содержимое. В Сообщении 8 автор отмечает: «Реквизиты заполняю как хочу! А форму — никак не поменять». Это и есть ключ к решению задачи в ЭДО.
Большинство изменений, которые требуются бизнесу (изменить основание, добавить номер заказа, вывести дополнительные сведения), решаются через настройку полей в модуле Диадока. Рассмотрим, как это работает:
В модуле существует механизм сопоставления полей 1С и тегов XML-файла. Если вы хотите, чтобы в строке «Основание» выводилось «Наименование договора», а не «Номер и Дата», вам нужно не править макет, а изменить функцию, отвечающую за заполнение этого поля в структуре данных документа.
Пример логики переопределения данных перед отправкой (условно):
// Пример логики изменения данных в структуре перед отправкой
Если ИмяПоля = "Основание" Тогда
// Вместо стандартного формирования строки из Номера и Даты
// Берем полное наименование договора из реквизита документа
ЗначениеПоля = ДокументОбъект.ДоговорКонтрагента.Наименование;
КонецЕсли;
Способы изменения визуализации сильно зависят от типа документа. Проанализируем две ситуации:
1. Формализованные документы (УПД, счета-фактуры, акты ММВ):
Их внешний вид жестко регламентирован ФНС. Диадок использует стандартные «визуализаторы». Изменить их самостоятельно «в коде» практически невозможно, так как они отрисовываются на стороне сервера Диадока. Если вам критически важна индивидуальная форма (например, вы хотите добавить логотип или специфические колонки), Контур предоставляет платную услугу — ИПФ (Индивидуальная печатная форма). В этом случае на сервере оператора прописывается специальный шаблон для вашего ID организации.
2. Неформализованные документы (произвольные акты, счета на оплату):
Здесь у разработчика гораздо больше свободы. Модуль 1С может генерировать печатную форму прямо на стороне 1С (используя обычный табличный документ), конвертировать её в PDF и отправлять в Диадок как вложение. В этом случае вы правите обычный макет в 1С, и он будет отображаться в Диадоке именно так, как вы его сформировали.
Современные версии модуля Диадок поддерживают механизмы расширения через события. Это позволяет внедряться в процесс формирования XML, не снимая основной модуль с поддержки. Выясним, какие этапы можно перехватить:
Разберем пример изменения логики заполнения основания через программный интерфейс модуля:
Функция ПередЗаполнениемРеквизитов(Документ1С, СтруктураРеквизитов) Экспорт
// Изменяем основание документа для визуализации в Диадоке
Если ТипЗнч(Документ1С) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
СтруктураРеквизитов.Вставить("Основание", "Согласно договору №" + Документ1С.ДоговорКонтрагента.Номер);
КонецЕсли;
КонецФункции
Подводя итог нашему анализу, сформулируем основные выводы для работы с печатными формами в Диадоке:
Таким образом, работа с формами в ЭДО требует перехода от мышления «рисовальщика макетов» к мышлению «архитектора данных XML». Правильное заполнение структур данных — залог того, что визуализация будет корректной и информативной для вашего контрагента.