В современных учетных системах 1С часто возникает необходимость создания кастомных печатных форм для документов и справочников. Библиотека стандартных подсистем (БСП) предоставляет два основных подхода к реализации таких форм:
Серверный подход (ВызовСерверногоМетода) - оптимален для формирования документов полностью на сервере без интерактивного взаимодействия с пользователем
Клиентский подход (ОткрытиеФормы) - подходит для интерактивных сценариев с выбором параметров или использования клиентских приложений
Выбор подхода зависит от конкретных требований к печатной форме, особенностей инфраструктуры и необходимости взаимодействия с пользователем. В данной статье мы рассмотрим оба подхода и их интеграцию с системой Doodocs HR для пакетного формирования документов.
Регистрация внешней печатной формы в БСП осуществляется через экспортную функцию СведенияОВнешнейОбработке(). Ключевые моменты регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
// Назначения (объекты, для которых доступна печатная форма)
ПараметрыРегистрации.Назначение.Добавить("Документ.ПриемНаРаботу");
// Команда для серверного подхода
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Название печатной формы (сервер)'");
НоваяКоманда.Идентификатор = "ИдентификаторПечатнойФормы";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
// Команда для клиентского подхода
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Название печатной формы (клиент)'");
НоваяКоманда.Идентификатор = "ИдентификаторПечатнойФормы";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
Серверный подход: ВызовСерверногоМетода
Серверный подход основан на вызове экспортной функции Печать() на сервере, которая формирует печатную форму без интерактивного взаимодействия с пользователем.
Ключевые элементы реализации
// Экспортная функция для формирования печатной формы
Функция Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Получение данных для заполнения
МассивДанных = ПолучитьМассивДанныхЗаполнения(МассивОбъектов);
// Результат для использования в клиентском подходе
Результат = Новый Массив;
Для Каждого ДанныеЗаполнения Из МассивДанных Цикл
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ИдентификаторПечатнойФормы");
Если ПечатнаяФорма <> Неопределено Тогда
// Формирование документа
АдресВХ = ПечатьМакета("ИмяМакета", ДанныеЗаполнения);
ИмяФайла = "Документ.docx";
// Помещение в коллекцию печатных форм
ОфисныеДокументы = Новый Соответствие;
ОфисныеДокументы.Вставить(АдресВХ, ИмяФайла);
ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
// Структура для клиентского подхода
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("АдресВХ", АдресВХ);
СтруктураДанных.Вставить("ИмяФайла", ИмяФайла);
СтруктураДанных.Вставить("СсылкаНаОбъект", ДанныеЗаполнения.Ссылка);
Результат.Добавить(СтруктураДанных);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Клиентский подход: ОткрытиеФормы
Клиентский подход основан на открытии формы на клиенте, которая может взаимодействовать с пользователем для выбора дополнительных параметров перед формированием документа.
Ключевые элементы реализации
// В модуле формы внешней печатной формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получение списка объектов из параметров
Если Параметры.Свойство("ОбъектыНазначения")
И ТипЗнч(Параметры.ОбъектыНазначения) = Тип("Массив") Тогда
СписокОбъектов.ЗагрузитьЗначения(Параметры.ОбъектыНазначения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Сформировать(Команда)
// Формирование документов на сервере
РезультатПечати = ПечатьНаСервере();
// Подготовка результата для возврата
Результат = Новый Массив;
Для Каждого ЭлементМассива Из РезультатПечати Цикл
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("СсылкаНаОбъект", ЭлементМассива.СсылкаНаОбъект);
СтруктураДанных.Вставить("ИмяФайла", ЭлементМассива.ИмяФайла);
СтруктураДанных.Вставить("ДвоичныеДанные",
ПолучитьИзВременногоХранилища(ЭлементМассива.АдресВХ));
Результат.Добавить(СтруктураДанных);
КонецЦикла;
// Закрытие формы с передачей результата
ЭтаФорма.Закрыть(Результат);
КонецПроцедуры
Для корректной интеграции с механизмом пакетной печати Doodocs HR клиентская форма должна вернуть структуру данных определенного формата:
// Пример структуры данных, возвращаемой при закрытии формы
[
{
"СсылкаНаОбъект": <Ссылка на объект базы>, // Справочник или Документ
"ИмяФайла": "Документ.docx", // Имя файла для присоединения
// Одно из следующих полей обязательно:
"ДвоичныеДанные": <Двоичные данные файла>, // Предпочтительный вариант
// ИЛИ
"АдресВХ": <Адрес временного хранилища>, // Альтернатива
// ИЛИ
"ПутьКФайлу": <Путь к файлу на клиенте> // Альтернатива
},
// Другие документы...
]
Система Doodocs HR предоставляет механизм пакетного формирования и отправки документов на портал. При вызове команды "Сформировать пакет документов и отправить на портал" происходит следующий процесс:
Проверяется наличие значения в колонке ОфисныеДокументы
Если значение заполнено — используются эти двоичные данные
Если нет — проверяется колонка ТабличныйДокумент, которая сохраняется в PDF
Сформированные двоичные данные присоединяются к исходному объекту и отправляются на портал Doodocs HR
Формы вызываются последовательно, ожидая закрытия предыдущей формы
При закрытии формы обрабатывается возвращаемая структура данных:
Извлекаются двоичные данные из поля ДвоичныеДанные
Или данные получаются из временного хранилища по адресу из поля АдресВХ
Или данные считываются из файла по пути из поля ПутьКФайлу
Полученные двоичные данные присоединяются к указанному объекту и отправляются на портал
Сравнение подходов к реализации печатных форм
Характеристика | ВызовСерверногоМетода | ОткрытиеФормы |
|---|---|---|
Место выполнения | Сервер | Клиент |
Интерактивность | Нет | Да |
Поддержка ввода параметров | Ограниченная | Полная |
Скорость формирования | Выше | Ниже |
Использование ресурсов клиента | Нет | Да |
Применение для массовой печати | Оптимально | Менее эффективно |
Сложность интеграции с Doodocs HR | Низкая | Средняя |
Необходимость доработки для Doodocs HR | Минимальная | Требуется |
Для массовой печати документов без участия пользователя
Когда не требуется интерактивный ввод дополнительных параметров
При высоких требованиях к производительности
В централизованных системах с ограниченным клиентским доступом
Когда необходимо интерактивное взаимодействие с пользователем
При необходимости выбора параметров перед печатью
Когда требуется интеграция с клиентскими приложениями (MS Word, Excel)
При использовании сложного форматирования или макетов
Для серверных печатных форм:
Корректно заполняйте колонку ОфисныеДокументы или ТабличныйДокумент
Используйте оптимальные форматы для хранения данных (PDF, DOCX)
Для клиентских печатных форм:
Соблюдайте структуру возвращаемых данных
Предпочтительно возвращать двоичные данные напрямую через поле ДвоичныеДанные
Учитывайте, что адрес временного хранилища может быть очищен при закрытии формы
При разработке кастомных печатных форм в 1С важно выбрать подходящий метод реализации с учетом конкретных требований. Серверный подход обеспечивает высокую производительность и надежность, в то время как клиентский подход предоставляет большую гибкость и возможности интерактивного взаимодействия.
Комбинирование обоих подходов в одной внешней печатной форме позволяет обеспечить максимальную универсальность. Интеграция с системой Doodocs HR дает возможность автоматизировать процесс формирования и отправки документов на портал, существенно упрощая работу пользователей.
К статье прилагается полный код примера печатной формы, который можно использовать как основу для разработки собственных решений.
Пример ВПФ можно скачать тут