При автоматизации документооборота часто возникают задачи, требующие гибкости: например, необходимо разграничить возможности вывода на печать для разных групп сотрудников. Давайте разберем, как реализовать механизм, при котором администраторы получают файлы в формате PDF, а бухгалтеры — в формате Word.
Самый прямой и быстрый способ реализовать такую логику — использовать встроенный в платформу 1С метод РольДоступна(). Этот метод позволяет проверить, назначена ли текущему пользователю определенная роль, и на основе этого выполнить нужный фрагмент кода.
Предположим, что у нас уже созданы роли «Администратор» и «Бухгалтер». Рассмотрим процесс реализации:
Ниже представлен пример кода, который необходимо интегрировать в вашу серверную процедуру:
// Определяем формат в зависимости от роли пользователя
Если РольДоступна("Администратор") Тогда
// Выполняем сохранение в PDF
MSWord.SaveAs("D:\" + "Документ №" + Объект.Номер + ".pdf", 17);
ИначеЕсли РольДоступна("Бухгалтер") Тогда
// Выполняем сохранение в Word
MSWord.SaveAs("D:\" + "Документ №" + Объект.Номер + ".docx", 16);
КонецЕсли;
Разберем этот код подробнее. Метод РольДоступна("ИмяРоли") возвращает значение Истина, если пользователю назначена указанная роль, и Ложь в противном случае. Передача параметров 17 и 16 в метод SaveAs соответствует константам WdExportFormat.wdExportFormatPDF и WdSaveFormat.wdFormatXMLDocument в объектной модели MS Office.
Хотя метод РольДоступна() является рабочим решением, проанализируем ситуацию с точки зрения долгосрочной поддержки системы:
Регистров сведений или персональных настроек пользователя. В них можно хранить предпочтительный формат печати, который пользователь или администратор может изменить в пользовательском режиме (1С:Предприятие) без внесения изменений в конфигурацию.MSWord корректно закрывался. В блоке Исключение вы используете MSWord.Application.Quit() — это верно, но убедитесь, что и в штатном режиме работы при успешном завершении вызывается закрытие документа и приложения, чтобы в памяти сервера не копировались «зависшие» процессы WINWORD.EXE.Проанализируем современные способы реализации печати, чтобы повысить надежность вашего решения:
Если вы хотите избежать проблем с COM-объектами (зависания, зависимость от установленного Office на сервере), рассмотрим другие варианты:
ТабличныйДокумент, вы можете сформировать печатную форму один раз и выгрузить её как в PDF, так и в XLSX (который открывается Word).DOCX-файлов напрямую из 1С позволяет обойтись без запуска MS Word. Это значительно ускоряет работу и делает код независимым от настроек операционной системы.Таким образом, использование метода РольДоступна() отлично подходит для оперативного решения задачи. Если же система планируется к долгому использованию, мы рекомендуем вынести выбор формата в настройки пользователя, что позволит гибко управлять процессом без изменения программного кода.