Как запретить печать и сохранение конкретных документов в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Приветствуем вас! Довольно часто в практике администрирования и разработки на платформе 1С:Предприятие возникает задача ограничить распространение конфиденциальной информации. Представим ситуацию: пользователю необходимо дать возможность просматривать документ на экране (например, Приходный кассовый ордер или отчет по взаиморасчетам), но при этом требуется жестко запретить вывод этого документа на бумажный носитель, сохранение в файл на жесткий диск или копирование данных в буфер обмена. В то же время, другие документы пользователь должен печатать без каких-либо ограничений.

В рамках этой статьи мы подробно разберем, как решить эту задачу изящно и эффективно. Мы проанализируем как классические методы, так и современные штатные механизмы платформы 1С:Предприятие 8, которые позволяют добиться желаемого результата без глобального изменения конфигурации.

Метод 1. Использование встроенного свойства «Вывод» табличного документа

Начнем с самого простого, надежного и современного способа, доступного в платформе. Разработчику предоставляется штатный инструмент управления возможностями вывода для каждого конкретного табличного документа. За это отвечает свойство Вывод объекта ТабличныйДокумент, принимающее значения из системного перечисления ИспользованиеВывода.

Давайте посмотрим на пример кода, который мы можем использовать при формировании печатной формы документа:


ТабДок = Новый ТабличныйДокумент;
// Здесь происходит стандартное заполнение макета данными
// ...
// Устанавливаем запрет на вывод информации
ТабДок.Вывод = ИспользованиеВывода.Запретить;
// Выводим документ на экран
ТабДок.Показать("Просмотр документа без возможности печати");

Выясним, как ведет себя система при установке значения ИспользованиеВывода.Запретить. Платформа автоматически блокирует следующие действия пользователя для данного табличного документа:

  1. Стандартную кнопку «Печать» на панели инструментов и в главном меню;
  2. Режим «Предварительный просмотр»;
  3. Горячие клавиши Ctrl + P для отправки на принтер;
  4. Команды главного меню «Сохранить» и «Сохранить как...» (а также Ctrl + S);
  5. Копирование выделенных ячеек таблицы в буфер обмена с помощью Ctrl + C или через контекстное меню.

Таким образом, пользователь получает возможность полноценно изучить информацию на экране, прокрутить документ, но не может извлечь из него данные стандартными программными средствами 1С.

Метод 2. Применение глобального ограничения в ролях с точечным разрешением

Иногда перед нами стоит обратная задача: запретить печать практически всех документов для определенной роли, сделав исключение лишь для некоторых. Попытки динамически добавлять или удалять роли пользователя «на лету» в процессе активного сеанса (например, при открытии формы) не увенчаются успехом. Дело в том, что права доступа считываются и кэшируются платформой один раз — в момент авторизации пользователя при запуске системы.

Поэтому мы применим метод «от обратного». Давайте разберем его по шагам:

  1. Откроем Конфигуратор и перейдем к настройке роли целевого пользователя.
  2. На уровне всей конфигурации (в корне дерева прав роли) найдем и снимем флажок у права «Вывод» (это право отвечает за вывод на принтер, в файл и буфер обмена). Теперь наш пользователь по умолчанию лишен возможности печатать или сохранять абсолютно любые данные из системы.
  3. В коде тех печатных форм, печать которых этому пользователю все-таки разрешена, мы явно прописываем переопределение этого ограничения перед выводом табличного документа:

ТабДок.Вывод = ИспользованиеВывода.Разрешить;

Давайте проанализируем, почему это работает. Системная логика 1С устроена таким образом, что явное присвоение свойству Вывод значения ИспользованиеВывода.Разрешить в коде программно переопределяет глобальный запрет, установленный в настройках роли. Это дает нам полный контроль над процессом вывода информации.

Метод 3. Ограничение вывода для отчетов на СКД

Рассмотрим ситуацию, когда нам необходимо ограничить печать не первичного документа, а сложного отчета, построенного с использованием Системы компоновки данных (СКД). В управляемых формах результат компоновки обычно выводится непосредственно в элемент формы — поле табличного документа, которое чаще всего называется Результат.

Чтобы запретить печать такого отчета, нам потребуется написать небольшую процедуру в модуле управляемой формы отчета. Давайте посмотрим на пример реализации в обработчике события ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Устанавливаем запрет вывода для поля табличного документа на форме
    Элементы.Результат.Вывод = ИспользованиеВывода.Запретить;
КонецПроцедуры

После этого любые данные, сформированные отчетом СКД в этом поле, будут защищены от копирования, сохранения и вывода на печать аналогично обычному табличному документу.

Метод 4. Решение для устаревших конфигураций на обычных формах

Если вы работаете с унаследованными конфигурациями на базе обычных форм (например, Управление производственным предприятием или Управление торговлей ред. 10.3), прямое управление свойством Вывод может быть затруднено из-за специфики использования общих обработок печати.

В таком случае мы можем применить архитектурный обходной путь, который успешно зарекомендовал себя на практике. Давайте разберем этот алгоритм:

  1. В дереве метаданных найдем общую форму ПечатьДокументов.
  2. Создадим ее копию и назовем ее, например, ПечатьДокументовЗапретПечати.
  3. Откроем форму новой копии, выделим элемент управления «Поле табличного документа» и в его свойствах жестко установим запрет на вывод информации.
  4. В модуле объекта или менеджера нашего документа напишем процедуру, которая будет вызывать именно эту специальную форму для просмотра:

Процедура ПечатьБезПринтера(ТабДок) Экспорт
    ФормаПечати = ПолучитьОбщуюФорму("ПечатьДокументовЗапретПечати", , ТабДок);
    ФормаПечати.ПечатныйДокумент = ТабДок;
    ФормаПечати.Заголовок = ЭтотОбъект.Ссылка;
    ФормаПечати.Открыть();
КонецПроцедуры

Этот способ позволяет точечно перенаправить вывод конкретных документов в защищенную форму без необходимости переписывать глобальные механизмы печати всей системы.

Важное замечание о безопасности данных

Завершая наш разбор, необходимо коснуться важного аспекта информационной безопасности. Разработчику и администратору системы следует четко понимать границы возможностей платформы. Любые программные запреты, реализованные внутри 1С:Предприятия, эффективно защищают от непреднамеренных ошибок пользователей или попыток быстрого сохранения файлов стандартными методами.

Тем не менее, эти меры не способны защитить конфиденциальные данные от внешнего копирования. Если информация отображается на экране монитора, она в любом случае может быть скопирована сторонними программами операционной системы или зафиксирована внешними оптическими средствами. Поэтому технические ограничения внутри конфигурации должны применяться в комплексе с организационными мерами безопасности и политиками ограничения прав на уровне самой операционной системы.

← На главную