Как в 1С запретить сохранение печатной формы в файл, сохранив возможность вывода на печать

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

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

Анализ стандартных свойств табличного документа

Для начала проанализируем, какие инструменты предоставляет нам объект ТабличныйДокумент. Многие начинающие разработчики пытаются использовать свойство ТолькоПросмотр, однако оно лишь запрещает интерактивное редактирование ячеек, не влияя на возможность сохранения файла через меню «Файл — Сохранить как». Выясним причину, почему стандартные методы иногда не работают, и как правильно комбинировать свойства.

Ключевым свойством для решения нашей задачи является Защита. Согласно документации платформы, установка этого свойства в значение Истина блокирует не только редактирование, но и экспорт табличного документа во внешние файлы. Однако здесь есть важный нюанс, выявленный опытным путем: если одновременно установлены Защита = Истина и ТолькоПросмотр = Истина, в некоторых версиях платформы (особенно в обычных формах) кнопка сохранения может оставаться активной. Для гарантированного результата рекомендуется использовать только защиту.

Реализация защиты программным способом

Разберем по шагам, как модифицировать процедуру вывода печатной формы. Если вы используете собственный алгоритм печати (и проводите отладку внешних печатных форм), достаточно установить свойства объекта ТабличныйДокумент перед его отображением пользователю. Рассмотрим пример кода:


Процедура НапечататьДокумент(ТабДок, Заголовок = "", Защита = Истина) Экспорт
    Если ТабДок = Неопределено Тогда 
        Возврат; 
    КонецЕсли;

    // Устанавливаем защиту, которая заблокирует экспорт в файл
    ТабДок.Защита = Защита;
    
    // Свойство ТолькоПросмотр устанавливаем с осторожностью
    // В ряде случаев для блокировки 'Сохранить как' достаточно только Защиты
    ТабДок.ТолькоПросмотр = Ложь; 
    
    // Отключаем отображение сетки и заголовков для чистоты ПФ
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    
    // Выводим документ на экран
    ТабДок.Показать(Заголовок);
КонецПроцедуры

В данном примере установка ТабДок.Защита = Истина приведет к тому, что пункты меню «Сохранить» и «Сохранить копию» станут неактивными, а горячие клавиши сохранения перестанут работать. При этом стандартная кнопка «Печать» останется доступной.

Работа в типовых конфигурациях (БП 3.0, УПП, УТ 11)

В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), печать реализована через общие механизмы. Чтобы не переписывать каждый документ, проанализируем, где можно внести изменения глобально. Посмотрим на пример конфигурации Бухгалтерия предприятия 3.0 или УПП 1.3.

Для УПП 1.3 необходимо обратить внимание на общую форму ПечатьДокументов. В ней формируется коллекция табличных документов. Найдите процедуру, отвечающую за подготовку формы, и вставьте условие проверки прав пользователя. Если пользователю запрещено сохранение, установите свойство Защита для всех выводимых областей.

Для БП 3.0 и других конфигураций на управляемых формах, найдите общий модуль ПечатьДокументов и процедуру СоздатьРеквизитыИЭлементыФормыДляПечатныхФорм. Именно здесь программно создаются элементы формы печати. Вы можете добавить «костыль» (логическую проверку), который будет скрывать кнопку с изображением дискеты (команда «Сохранить») для определенных ролей.

Использование прав доступа и ролей

Если вы не хотите вносить изменения в программный код, можно воспользоваться механизмом ролей. В платформе существует право Вывод. Если у пользователя в его ролях право Вывод установлено в значение Запретить, он вообще не сможет напечатать документ или сохранить его. Однако нам нужно оставить печать.

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

Блокировка копирования через буфер обмена

Даже если мы запретили сохранение файла, продвинутый пользователь может выделить все ячейки (Ctrl+A), скопировать их (Ctrl+C) и вставить в пустой лист Excel. Чтобы предотвратить этот сценарий, одной защиты документа может быть недостаточно. Рассмотрим дополнительные свойства:

  1. Используйте свойство РазрешитьНачалоПеретаскивания = Ложь и РазрешитьПеретаскивание = Ложь для объекта ТабличныйДокумент.
  2. В некоторых случаях помогает установка защиты на конкретные области ячеек. Для этого выделите область и установите Область.Защита = Истина.
  3. Помните, что полное интерактивное ограничение возможно только при сочетании программных методов и ограничении прав ОС (например, запрет на использование буфера обмена в терминальной сессии).

Проблема виртуальных принтеров

Выясним еще одну важную причину, по которой «защита» может быть обойдена. Если в системе установлен виртуальный принтер (например, PDFCreator или Microsoft Print to PDF), пользователь может нажать на кнопку «Печать» и вместо физического принтера выбрать виртуальный. В результате он получит PDF-файл, что равносильно сохранению.

Для решения этой проблемы на уровне можно использовать метод ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать). При этом способе документ сразу отправляется на принтер, установленный в системе по умолчанию, без вывода диалогового окна выбора принтера. Пример реализации:


// Предварительно настроим параметры печати
ТабДок.ИмяПринтера = "HP_LaserJet_Professional_P1102";
ТабДок.КоличествоЭкземпляров = 1;

// Печатаем без вывода диалога, чтобы исключить выбор PDF-принтера
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Подведение итогов

Мы рассмотрели несколько способов запрета сохранения печатных форм. Проанализируем, какой из них выбрать:

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

← На главную