Защита конфиденциальной информации — одна из ключевых задач при работе с любой информационной системой. В 1С часто возникает потребность ограничить возможность пользователей сохранять результаты отчетов или печатные формы в файл, чтобы предотвратить несанкционированное распространение данных. Рассмотрим подробно различные подходы к решению этой задачи, объединив опыт разработчиков с форума 1С и дополнительные сведения.
Один из самых прямолинейных и часто используемых способов — это установка свойства Защита у объекта ТабличныйДокумент.
Что это значит?
Когда мы устанавливаем ТабличныйДокумент.Защита = Истина;, мы делаем документ доступным только для чтения. Это означает, что:
По умолчанию, для отдельных ячеек табличного документа свойство "Защита" имеет значение "Истина", а вот для самого документа – "Ложь". Поэтому, чтобы защитить весь документ, необходимо явно установить это свойство.
Как это применить?
Мы можем установить это свойство в коде модуля отчета или печатной формы, перед тем как документ будет показан пользователю. Например, в процедуре, которая формирует и выводит табличный документ:
// Предположим, что ПеременнаяТабличныйДокумент - это наш объект ТабличныйДокумент
ПеременнаяТабличныйДокумент.Защита = Истина;
Важный нюанс: Несмотря на общую защиту, в некоторых случаях копирование отдельных ячеек может быть возможно после входа в режим редактирования ячейки. Для более тонкого контроля копирования и вставки может потребоваться реализация собственных кнопок "Вставить" и "Копировать", которые будут учитывать права пользователя.
Другой эффективный подход — это явный запрет вывода табличного документа с помощью свойства Вывод.
Что это значит?
Свойство ТабличныйДокумент.Вывод позволяет нам управлять возможностями вывода документа. Установив его в значение ИспользованиеВывода.Запретить, мы полностью запрещаем любые операции вывода, что включает в себя не только сохранение в файл, но и печать документа.
Как это применить?
Этот метод может быть применен программно для конкретного отчета или печатной формы. Например, в процедуре, которая отвечает за формирование и отображение отчета:
// Предположим, что ПеременнаяТабличныйДокумент - это наш объект ТабличныйДокумент
ПеременнаяТабличныйДокумент.Вывод = ИспользованиеВывода.Запретить;
Для отчетов, разработанных с использованием Системы Компоновки Данных (СКД), мы можем установить это свойство для элемента формы, который отображает результат отчета (обычно это элемент типа ПолеТабличногоДокумента с именем "Результат"). Это можно сделать, например, в обработчике события ПриОткрытии() формы отчета или перед выводом результата.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Предполагаем, что элемент формы, отображающий отчет, называется "Результат"
Если Элементы.Результат.Вид = ВидПоляФормы.ПолеТабличногоДокумента Тогда
Элементы.Результат.Вывод = ИспользованиеВывода.Запретить;
КонецЕсли;
КонецПроцедуры
Этот метод позволяет нам реализовать более гибкий подход, привязывая запрет сохранения к правам пользователя через RLS (Record Level Security).
Что такое RLS?
RLS — это мощный механизм 1С, который позволяет настроить гибкие и тонкие ограничения доступа не только к объектам метаданных в целом, но и к конкретным данным внутри этих объектов. Например, мы можем настроить, чтобы менеджер видел отчеты только по своим клиентам, или чтобы пользователи не могли получить данные по выплатам партнерам. При корректной настройке RLS скрытые данные не будут отображаться в формах, отчетах и их невозможно будет получить никаким запросом.
Как RLS сочетается с запретом сохранения?
Мы можем использовать RLS для определения, имеет ли текущий пользователь право сохранять данные. Если у пользователя нет специальной роли, разрешающей сохранение, то мы программно устанавливаем защиту табличного документа. Рассмотрим пример кода, который был предложен на форуме:
&НаСервереФункция ЕстьЗапретСохраненияДанныхОтчетовВоВнешнийФайл ()
Возврат РольДоступна(Метаданные.Роли.Расш_ЗапретСохраненияДанныхОтчетовВоВнешнийФайл);
КонецФункции
&НаКлиенте
Процедура Расш_ПриОткрытииПосле(Отказ)
// Предполагаем, что элемент формы, отображающий отчет, называется "ОтчетТабличныйДокумент"
Элементы.ОтчетТабличныйДокумент.Защита = ЕстьЗапретСохраненияДанныхОтчетовВоВнешнийФайл();
КонецПроцедуры
Разберем по шагам:
Расш_ЗапретСохраненияДанныхОтчетовВоВнешнийФайл. Важно: Эта роль должна быть пустой или содержать минимальные права, но ее наличие у пользователя будет сигнализировать о запрете. Или, наоборот, можно создать роль Расш_РазрешитьСохранениеДанныхОтчетовВоВнешнийФайл и проверять ее наличие. В данном примере логика построена так, что если роль Расш_ЗапретСохраненияДанныхОтчетовВоВнешнийФайл доступна пользователю, то защита документа будет установлена.ЕстьЗапретСохраненияДанныхОтчетовВоВнешнийФайл() выполняется на сервере и использует метод РольДоступна() для проверки, включена ли у текущего пользователя роль, которая сигнализирует о запрете сохранения. Если роль доступна, функция возвращает Истина.Расш_ПриОткрытииПосле() (или любой другой обработчик, который срабатывает после открытия формы и формирования документа) вызывается на клиенте. В ней мы обращаемся к элементу формы типа ПолеТабличногоДокумента (в примере это Элементы.ОтчетТабличныйДокумент) и устанавливаем его свойство Защита в значение, возвращаемое серверной функцией.Таким образом, если у пользователя есть роль Расш_ЗапретСохраненияДанныхОтчетовВоВнешнийФайл, табличный документ будет защищен от сохранения. Если этой роли нет, документ будет доступен для сохранения. Это позволяет гибко управлять правами через профили доступа пользователей.
Обратите внимание: Если условие ограничения доступа RLS написано некорректно, пользователь может увидеть сообщение "Объект не найден", что является сигналом для проверки настроек RLS.
Этот способ является более глобальным и административным.
Что это значит?
В конфигурации 1С существует стандартное право "Вывод". Это право контролирует возможность печати и сохранения любых табличных документов и отчетов. Если мы отключим это право у определенных ролей пользователя в их профиле доступа, то для всех отчетов и печатных форм, к которым применяется данная роль, возможность сохранения и печати будет недоступна.
Как это применить?
Преимущества: Простота настройки для администратора, глобальное действие.
Недостатки: Менее гибкий подход, так как затрагивает все документы, для которых действует эта роль. Если необходимо разрешить вывод только для некоторых отчетов, придется в коде этих отчетов явно устанавливать ИспользованиеВывода.Разрешить, что может привести к путанице.
В некоторых типовых конфигурациях 1С могут быть предусмотрены специальные административные настройки, которые глобально влияют на возможность сохранения табличных документов.
Что это значит?
Мы можем обнаружить флаг, например, "Запретить редактирование таблиц", который часто располагается в меню "Сервис" -> "Настройка параметров конфигурации" -> вкладка "Вспомогательные" или аналогичном разделе. Если такой флаг установлен, кнопки "Сохранить" и "Сохранить как" могут быть неактивны для всех пользователей или для определенной группы.
Как это применить?
Обычно снять или установить такой запрет может только пользователь с правами "Администратор" или "Менеджер". Мы рекомендуем проверить наличие подобных настроек в вашей конкретной конфигурации, так как они могут значительно упростить задачу.
Завершая наш анализ, мы должны признать, что программные ограничения в 1С, хотя и очень эффективны, не могут полностью исключить возможность утечки информации через физические каналы. Пользователь всегда имеет возможность:
Поэтому, помимо программных средств защиты, важно учитывать организационные меры безопасности и политику работы с конфиденциальной информацией в вашей компании.
Мы рассмотрели несколько действенных методов для запрета сохранения отчетов и табличных документов в файл в 1С. Выбор конкретного метода или их комбинации будет зависеть от требуемой гибкости, сложности конфигурации и уровня детализации контроля доступа.
← К списку