Как отключить печать по CTRL+P и обеспечить логирование вывода документов в 1С?

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

Зачастую перед разработчиками 1С встает задача по обеспечению безопасности данных, а именно — контроль за тем, кто, когда и какие документы распечатывает. Стандартные средства платформы предоставляют пользователю возможность отправить отчет на принтер привычным сочетанием клавиш CTRL+P. Если нам необходимо строго контролировать этот процесс, нам потребуется изменить подход к организации печати.

Разберем стратегию решения задачи

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

Шаг 1: Блокировка стандартных возможностей

Первым делом необходимо ограничить пользователю возможность свободного манипулирования табличным документом. Для этих целей в объекте ТабличныйДокумент предусмотрено свойство Вывод. Установив значение ИспользованиеВывода.Запретить, мы программно блокируем не только возможность вызова стандартного диалога печати, но и экспорт данных в сторонние форматы (Excel, PDF), а также возможность копирования данных в буфер обмена.

Важно помнить, что данное свойство доступно только на клиенте. Реализуем это следующим образом:


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

Применение этой настройки делает стандартную кнопку «Печать» в командной панели формы неактивной или бесполезной, так как само действие вывода будет заблокировано платформой.

Шаг 2: Создание защищенного механизма печати

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

Рассмотрим алгоритм действий в обработчике такой кнопки:

  1. Записываем факт обращения к печати в журнал регистрации с помощью метода ЗаписьЖурналаРегистрации.
  2. Временно разрешаем вывод для текущего табличного документа.
  3. Программно вызываем метод печати.
  4. Снова запрещаем вывод.

Пример реализации логирования:


Процедура КомандаПечати(Команда)
    // Фиксируем действие в журнале регистрации
    ЗаписьЖурналаРегистрации("Печать отчета", УровеньЖурналаРегистрации.Информация,,, "Пользователь вывел отчет на печать");
    
    // Программная печать
    ТабДок.Вывод = ИспользованиеВывода.Разрешить;
    ТабДок.Напечатать();
    ТабДок.Вывод = ИспользованиеВывода.Запретить;
КонецПроцедуры

Шаг 3: Перехват горячих клавиш

Чтобы исключить попытки пользователя нажать CTRL+P, даже если мы убрали стандартные кнопки, нам необходимо управлять событиями клавиатуры на форме. Для этого в управляемых формах мы можем использовать обработчик ПриНажатииКлавиши. В нем мы проверяем, не были ли нажаты нужные нам клавиши.

Давайте разберем логику обработки:


&НаКлиенте
Процедура ПриНажатииКлавиши(Кнопка, КодКлавиши, СтандартнаяОбработка)
    // Проверяем нажатие CTRL + P (код P обычно 80)
    Если Кнопка.Клавиша = КодКлавиши.P И МодификаторКлавиши.Ctrl Тогда
        СтандартнаяОбработка = Ложь; // Отменяем системное действие
        // Вызываем нашу процедуру логирования и печати
        КомандаПечати(Неопределено); 
    КонецЕсли;
КонецПроцедуры

Важные рекомендации и предостережения

При реализации данного метода необходимо учитывать следующие аспекты:

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

← На главную