Зачастую перед разработчиками 1С встает задача по обеспечению безопасности данных, а именно — контроль за тем, кто, когда и какие документы распечатывает. Стандартные средства платформы предоставляют пользователю возможность отправить отчет на принтер привычным сочетанием клавиш CTRL+P. Если нам необходимо строго контролировать этот процесс, нам потребуется изменить подход к организации печати.
Поскольку в 1С отсутствует универсальное событие «При печати», которое срабатывало бы при нажатии системных клавиш, нам необходимо перехватить инициативу у платформы. Для этого мы будем использовать комбинацию из двух подходов: ограничение прав на вывод и создание собственного интерфейса печати.
Первым делом необходимо ограничить пользователю возможность свободного манипулирования табличным документом. Для этих целей в объекте ТабличныйДокумент предусмотрено свойство Вывод. Установив значение ИспользованиеВывода.Запретить, мы программно блокируем не только возможность вызова стандартного диалога печати, но и экспорт данных в сторонние форматы (Excel, PDF), а также возможность копирования данных в буфер обмена.
Важно помнить, что данное свойство доступно только на клиенте. Реализуем это следующим образом:
// При открытии или создании отчета/печатной формы
ТабДок = Новый ТабличныйДокумент;
ТабДок.Вывод = ИспользованиеВывода.Запретить;
Применение этой настройки делает стандартную кнопку «Печать» в командной панели формы неактивной или бесполезной, так как само действие вывода будет заблокировано платформой.
После того как мы ограничили стандартный вывод, нам необходимо предоставить пользователю легальный способ распечатать документ, который будет под нашим контролем. Для этого мы создаем на форме кнопку (например, «Печать отчета»), выполнение которой будет логироваться в журнале регистрации.
Рассмотрим алгоритм действий в обработчике такой кнопки:
ЗаписьЖурналаРегистрации.Пример реализации логирования:
Процедура КомандаПечати(Команда)
// Фиксируем действие в журнале регистрации
ЗаписьЖурналаРегистрации("Печать отчета", УровеньЖурналаРегистрации.Информация,,, "Пользователь вывел отчет на печать");
// Программная печать
ТабДок.Вывод = ИспользованиеВывода.Разрешить;
ТабДок.Напечатать();
ТабДок.Вывод = ИспользованиеВывода.Запретить;
КонецПроцедуры
Чтобы исключить попытки пользователя нажать CTRL+P, даже если мы убрали стандартные кнопки, нам необходимо управлять событиями клавиатуры на форме. Для этого в управляемых формах мы можем использовать обработчик ПриНажатииКлавиши. В нем мы проверяем, не были ли нажаты нужные нам клавиши.
Давайте разберем логику обработки:
&НаКлиенте
Процедура ПриНажатииКлавиши(Кнопка, КодКлавиши, СтандартнаяОбработка)
// Проверяем нажатие CTRL + P (код P обычно 80)
Если Кнопка.Клавиша = КодКлавиши.P И МодификаторКлавиши.Ctrl Тогда
СтандартнаяОбработка = Ложь; // Отменяем системное действие
// Вызываем нашу процедуру логирования и печати
КомандаПечати(Неопределено);
КонецЕсли;
КонецПроцедуры
При реализации данного метода необходимо учитывать следующие аспекты:
Применяя эти методы, вы сможете создать надежный контур контроля над выводом информации, обеспечив прозрачность действий пользователей в системе 1С.