1С отчет в привилегированном режиме

Область применения: управляемое приложение, обычное приложение.

1.1. Привилегированный режим позволяет

  • выполнить операции с данными от лица пользователей, которым данные недоступны;
  • ускорить работу, так как в привилегированном режиме не накладываются ограничения на доступ к данным.

1.2. Привилегированный режим следует использовать

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

2. Далее приведем некоторые типовые сценарии использования привилегированного режима.

2.1. Если подчиненные регистры (движения документов) требуются пользователю для получения отчетов , то такие регистры следует оставлять доступными только для чтения, а запись в такие регистры следует выполнять переходом в привилегированный режим. При таком подходе, проверка прав на запись выполняется только для регистратора.

Например, в конфигурации имеются объекты метаданных:

  • Документ.ОприходованиеТоваров
  • РегистрНакопления.ОстаткиНаСкладах
  • Отчет.ОстаткиНаСкладах.

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

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

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

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

Например, в случае если в конфигурации есть объекты метаданных

  • Документ.РеализацияТоваровИУслуг
  • РегистрНакопления.Продажи
  • РегистрНакопления.Взаиморасчеты

и необходимо, чтобы

  • проведение документа от лица кладовщика изменяло регистр продаж, но кладовщику регистр продаж оставался недоступным.
  • при проведении документа от лица кладовщика проверялось состояние взаиморасчетов, но кладовщику регистр взаиморасчетов оставался недоступным.

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

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

Пример 2. Параметр сеанса "Текущий пользователь" не доступен ни в одной роли. Для получения значения используется функция:

Функция ТекущийПользователь() Экспорт
УстановитьПривилегированныйРежим(Истина);
Возврат ПараметрыСеанса.ТекущийПользователь;
КонецФункции

3. В то же время, неоправданное использование привилегированного режима может привести к проблемам безопасности пользовательских данных.

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

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
.

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

// Изменяем данные
// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение)
.

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

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

Как правило, для этого не требуется предусматривать в коде каких-либо проверок, так как при наличии в конфигурации ролей и ограничений доступа к данным на уровне записей (RLS) при попытке обращения к недоступным данным возникнет исключение:

  • при выполнении запроса без ключевого слова РАЗРЕШЕННЫЕ ;
  • при вызове метода ПолучитьОбъект «от» недоступной ссылки на объект;
  • при вызове недоступного метода глобального контекста;
  • и в других аналогичных случаях.

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

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

ВыполнитьПроверкуПравДоступа(. ); // Если у пользователя недостаточно прав, то будет вызвано исключение
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа

// Изменяем данные в привилегированном режиме
.

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

  • установить привилегированный режим точно перед выполнением действия;
  • выполнить действие без проверки прав;
  • отключить привилегированный режим сразу же после выполнения действия;
  • продолжить выполнение кода в непривилегированном режиме.

// Код подготовки запроса, которому требуется проверка прав

// Код выполнения запроса, для которого требуется отключить проверку прав
Выборка = Запрос.Выполнить().Выбрать();

// Обработка результатов запроса, где требуется проверка прав.

// Код подготовки запроса

УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);

// Обработка результатов запроса

4. Для перехода в привилегированный режим следует использовать следующие возможности платформы 1С:Предприятие :

    При реализации логики проведения и отмены проведения документов в обработчиках модуля документа ОбработкаПроведения и ОбработкаУдаленияПроведения :

    УстановитьПривилегированныйРежим(Истина)
    // фрагмент кода в привилегированном режиме
    // …
    УстановитьПривилегированныйРежим(Ложь)

    Что при разработке отчетов требуется чтобы у пользователя с ограниченными правами, отчет формировался полностью без проверки прав!

    Особенно если настроен RLS

    Есть несколько способов как это сделать:

    1. Установить привилегированный режим в модуле отчета

    Форма отчета должна быть Управляемой, далее в модуле отчета процедура обработчика «При компоновке результата»:

    2. Формирование в привилегированном режиме через Общий модуль с галкой Привелигерованный

    Создаем общий модуль

    так же как в пункте 1 в обработчике «При компоновке результата» пишем:

    В общем модуле МЕ_ДляОтчетаСКД_ПривелРежим код:

    3. Если включен режим Использовать ограничение на уровне прав доступа — RLS

    Часто используется в типовых. Тут в модуле для текущего пользователя можно на время формирования отчету установить параметр сеанса ИспользоватьОграниченияПравДоступаНаУровнеЗаписей в Ложь и RLS не сработает.

    После завершения формирования, не забудьте включить rls обратно установив = Истина

    4. Если в запросе используется конструкция вида регистратор.дата и это поле не отображается в полях отчета СКД

    Допустим Вы сделали запрос по регистру накоплений и через регистратор обратились к дате или сумме документа и при формировании отчета СКД, эти поля недоступны !? как же быть?

    Проблема в том — что у регистратором может выступать несколько документов и видимо права чтение/просмотр есть не на все — поэтому через скд эта таблица целиком недоступна, решение:

    1. открыть доступ на все регистраторы регистра

    Михаил Сайко

    Возможность добавления отчетов и обработок в типовую конфигурацию 1С без изменения ее структуры реализована через встроенный механизм БСП. Каждая типовая база от 1С, написанная на управляемых формах, содержит в себе данный механизм. Это позволяет добавлять собственный функционал, не переживая за сохранение целостности структуры ИБ, что будет особенно ценно, если используется сложная конфигурация. Добавление дополнительных отчетов и обработок пригодиться не только начинающим программистам, но из-за возможности значительно повысить скорость также заинтересует и опытных разработчиков.

    Пример разработки дополнительного отчета

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

    Чтобы создать эту функцию, необходимо открыть режим конфигуратора и через основное меню «Файл» — «Новый…», создать внешний отчет. Открыть модуль объекта и добавить функцию «СведенияОВнешнейОбработке» с отметкой «Экспорт». В каждом дополнительном внешнем отчете в 1С 8.3 эта экспортная функция должна возвращать структуру с определенными ключами и значениями:

    • Вид – определение типа доработки. Может принимать значения «ЗаполнениеОбъекта», «ДополнительнаяОбработка», «СозданиеСвязанныхОбъектов», «ДополнительныйОтчет» и многие другие;
    • Назначение – задается в случае, если мы добавляем функционал к конкретному документу или справочнику. Указывается 1 или перечень объектов конфигурации, к которым предназначен новый функционал. В случае обычного отчета не прописывают;
    • Команды – таблица, содержащая все необходимые команды с определенным набором характеристик. Отвечает за кнопку, запускающую обработку или отчет;
    • БезопасныйРежим – принимает значения «Истина» или «Ложь», отвечает за безопасный режим запуска. Это специальный режим, когда для пользователя ограничиваются возможности. Если его включить, то в процессе работы отчета будут недоступны:
    • Привилегированный режим;
    • Библиотеки Dll;
    • COM-соединение;
    • Доступ к файлам и интернету.
  1. Версия – данные строкового типа для поддержания версионирования дополнительного отчета или обработки. Вспомогательный параметр;
  2. ВерсияБСП – иногда указывают для контроля совместимости механизма библиотеки стандартных подсистем. Зачастую не указывается;
  3. Информация – комментарий, дающий определение дополнительному отчету или обработке. Вспомогательный параметр.
  4. После того, как функция написана, во внешний отчет нужно добавить основную схему компоновки данных. Для этого во внешней обработке нажмите на лупу, расположенную в поле «Основная схема компоновки данных». Откроется окно создания макета, нажмите «Готово» и в сформировавшемся окне настройки схемы вызовите контекстное меню на наборах данных.

    Остается лишь написать запрос с выводом требуемых полей, после чего перейти на закладку «Настройки». С помощью конструктора настроек необходимо выбрать поля, которые будет видеть пользователь. Также он предложит указать и группировку.

    Именно так устанавливается то, откуда брать данные, по каким критериям и каким образом их выводить. Остается лишь заполнить реквизит «Имя» нового внешнего отчета и сохранить файл на компьютере или на сетевом ресурсе. Обычно компании выделяют специальное место и называют его «Хранилище дополнительных отчетов и обработок» и сохраняют туда все подобные файлы.


    Подключение дополнительного внешнего отчета к конфигурации

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

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

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

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

    Чтобы внести изменения в добавленную обработку или отчет, не потребуется завершать работу всех пользователей. Достаточно просто выгрузить внешнюю обработку на компьютер, внести изменения в нее через конфигуратор и загрузить обратно. Для этого в перечне дополнительных обработок существуют специальные кнопки «Выгрузить в файл…» и «Загрузить из файла…». Чтобы пользователи увидели изменения, достаточно закрыть и снова открыть объект – отчет, документ или справочник.

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


    [an error occurred while processing the directive]
    Карта сайта