Довольно часто возникает бизнес-требование: пользователи выделяют в списке 20-30 документов, нажимают кнопку печати и получают единую сводную печатную форму (например, сводный реестр или маршрутный лист). Сразу же появляется необходимость сохранить этот результат в базе 1С, чтобы спустя несколько дней руководитель или другой сотрудник мог открыть и посмотреть ровно ту же форму без повторной генерации. Проанализируем ситуацию и разберем по шагам доступные способы реализации этой задачи, от самых простых до архитектурно правильных.
В современных типовых конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), функционал сохранения уже предусмотрен «из коробки». Посмотрим, как это работает без написания лишнего кода:
Однако, здесь возникает сложность: у нас исходно выбрано множество документов, а прикрепить файл стандартным способом можно только к одному владельцу. Привязывать один и тот же файл реестра к каждому из 30 документов отдельно — нерационально. Выясним причину: это приведет к путанице и дублированию. Для групповых форм лучше использовать программное сохранение или другие объекты.
Если мы хотим автоматизировать процесс, напишем собственную логику обработки. Рассмотрим подробнее программное сохранение печатной формы. Перед возвратом готового табличного документа пользователю, мы можем сохранить его во внешний формат и поместить в специализированный справочник (например, ПрисоединенныеФайлы).
Для исключения возможности изменения данных «задним числом» (например, хитрыми менеджерами), табличный документ лучше сразу конвертировать в нередактируемый формат PDF с помощью метода ТабличныйДокумент.Записать(). Посмотрим на пример реализации логики:
// Предполагаем, что ТабДок - это сформированная печатная форма
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.PDF);
// Далее читаем файл в двоичные данные и помещаем в хранилище или справочник файлов
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
// Вызов процедуры сохранения двоичных данных в базу...
Кроме того, БСП позволяет сразу подписать такой сохраненный PDF-файл электронной подписью (ЭП). Это даст 100% гарантию того, что сохраненный сводный документ не был модифицирован.
Проанализируем главный риск прямого сохранения файлов — раздувание размера базы данных. Если в день формируется 100-150 таких печатных форм, база данных SQL очень быстро увеличится до неприличных размеров. Кроме того, хранить логику бизнес-операций в виде прикрепленных Excel/PDF файлов — не совсем корректно с точки зрения архитектуры 1С.
Наиболее логичный подход: создать в конфигурации новый вид документа (назовем его РеестрДокументов или ПутевойЛист).
Это решает проблему с объемами данных: ссылки весят байты, в то время как сохраненные табличные документы — мегабайты.
Если бизнес-заказчик настаивает именно на сохранении «снимка» печатной формы в виде файла (например, если первичные документы могут быть изменены после печати, и нам нужен исторический срез), воспользуемся функционалом «Тома хранения файлов». Разберем, что это такое.
В настройках 1С (подсистема «Работа с файлами») мы переключаем режим хранения с В информационной базе на В томах на диске.
Если связи первичных документов сложные (один документ участвует в нескольких реестрах — связь «многие ко многим»), программировать собственные регистры сведений бывает трудозатратно. В крупных инфраструктурах эту задачу решают связкой систем.
Сформированная по списку документов печатная форма автоматически выгружается через бесшовную интеграцию в 1С:Документооборот как единый внутренний документ (например, «Сводный акт»). При этом в учетной базе (УТ или ERP) у каждого первичного документа на вкладке документооборота появляется гиперссылка на этот архивный файл. Таким образом, решается проблема привязки одного файла к 30 разным документам без нарушения структуры основной базы.
Мы выяснили, что сохранить групповую печатную форму в базе можно разными путями. Если форма не должна меняться со временем, сохраняйте её в виде PDF-файла в тома на внешнем диске. Если же важна сама структура связи документов и актуальные данные — создавайте новый агрегирующий документ (Реестр). Выбор решения зависит только от бизнес-логики предприятия и доступных серверных ресурсов.