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

Обновлено: 04.07.2024

(1) vkozak, надо отчет формировать программно.
КомпоновщикМакетаКомпоновкиДанных (DataCompositionTemplateComposer)
Выполнить (Execute)
Синтаксис:

Выполнить(<Схема>, <Настройки>, <ДанныеРасшифровки>, <МакетОформления>, <ТипГенератора>, <ПроверятьДоступностьПолей> , <ПараметрыФункциональныхОпций>)
Параметры:

Тип: СхемаКомпоновкиДанных.
Схема, для которой требуется построить макет.
<Настройки> (обязательный)

Тип: НастройкиКомпоновкиДанных.
Настройки, для которых необходимо создать макет.
<ДанныеРасшифровки> (необязательный)

Тип: ДанныеРасшифровкиКомпоновкиДанных.
Содержит переменную, в которую будут помещены данные расшифровки. Если параметр не указан, расшифровка заполняться не будет.
<МакетОформления> (необязательный)

Тип: МакетОформленияКомпоновкиДанных.
Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных. Если не указан, будет использоваться макет оформления по умолчанию.
<ТипГенератора> (необязательный)

Тип: Тип.
Указывает тип генератора макета компоновки данных.
Возможные типы:
ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator);
ГенераторМакетаКомпоновкиДанных (DataCompositionTemplateGenerator)
.
Значение по умолчанию: Тип("ГенераторМакетаКомпоновкиДанных").
<ПроверятьДоступностьПолей> (необязательный)

Тип: Булево.
Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
Значение по умолчанию: Истина.
<ПараметрыФункциональныхОпций> (необязательный)

Тип: Структура.
Содержит параметры функциональных опций, используемые при исполнении отчета.
Возвращаемое значение:

Тип: МакетКомпоновкиДанных.
Созданный макет компоновки.
Описание:

Появилось несколько задач сделать внешние отчеты без ограничения прав, обычные формы, клиент- сервер, УПП 1.3.

Дано: пользователь с ролями "Пользователь ", "Вывод информации", надо сделать для него отчет, например, по Основным средствам.

1. Роли добавить пользователю нельзя;

2. УстановитьПривилегированныйРежим(Истина) - во внешних отчетах на обычных формах не работает;

3. Сделать отчет на управляемых формах и встроить отчет в конфигурацию - заказчик против, т.к. у него уже настроен доступ ко внешним отчетам и обработкам через RLS.

в остается формирование отчета в привилегированном модуле.

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

2. В отчете, как обычно, в основной схеме компоновки добавляем набор данных - Запрос, делаем настройки. При запуске отчета создается программно еще одна схема - но с набором данных - Объект. Копируются все поля, параметры и ресурсы. Эта схема используется в отчете для инициализации компоновщика настроек и пользователь может настроить структуру без красных крестиков на полях.

Настройки, которые установил пользователь передаются на сервер, загружаются в настройки компоновщика основной схемы

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

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

Функция СформироватьОтчет из модуля отчета:

Функция из модуля отчета, которая создает схему с набором данных Объект:

В процедуре ПрименитьНастройку модуля отчета:

В модуле отчета основную схему компоновки данных подменяем на созданную нами схему:

Функция в общем модуле ДоработкиПривилегированный (почти копия ТиповыеОтчеты.УниверсальныйМеханизмФормированияОтчета)

В архиве внешний отчет и текст для общего модуля. Тестировался на Управление производственным предприятием, редакция 1.3 (1.3.82.1). Не проверяла на сложных схемах с произвольными макетами, вложенными схемами.

О чем эта статья

В статье рассмотрен пример доработки типового отчета «Расчетный листок» в конфигурации «Зарплату и Управление Персоналом 3.0». На данном примере показываются общие шаги разработчика, в случае если он слабо знаком с конкретной реализацией конкретного типового отчета на базе СКД.

Применимость

В материалах статьи в качестве примера используется конфигурация, «Зарплата и Управление Персоналом», редакции 3 3.0.25.122. Но от этого примеры доработки, продемонстрированные в видео, не стали устаревшими, т.к. акцент сделал именно на логике рассуждений разработчика перед которым поставлена подобного рода задача. Смело смотрите видео, это must have!


Что конкретно мы будем делать

Очень простая задача :)

А параллельно мы разберем и приемы работы с СКД:

Итак, поехали! 21 минута видео :)

Видео 1: Как за 10 минут понять логику формирования типового отчета

В этом уроке приступаем к решению задачи по модификации Расчетного листка в ЗУП 3.0.

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

Видео 2: Как с помощью 2 строк кода изменить заполнение отчета

В итоге задача решается с минимальными изменениями:

  • Новая строка в макете
  • Левое соединение в запросе
  • Две строки в программном коде.

Эта тема детально раскрыта в курсе:

Не откладывайте свое обучение!

Комментарии / обсуждение (65):

Добрый день! Вопрос по УТ 11. В типовых отчётах добавляются доп. реквизиты. Вопрос: как их исключить из отчетов?
Подробнее.
Существует, примерно, 100 видов номенклатуры, к каждому из которых привязан свой набор доп. реквизитов от 5 до 10).
При изменении варианта отчета, где используется номенклатура, при раскрытии её, вываливается список всех доп. реквизитов. Жуткий тормоз. Можно ли сделать так, чтобы при отборе или добавлении поля, не выводились эти доп. реквизиты?

Характеристики

В УТ 11 не требуется заполнять закладку Характеристики в тексте запроса набора данных.
Дело в том, что в этой конфигурации настроены характеристики на уровне объектов метаданных. Например, можно в конфигураторе обратиться к справочнику Номенклатура, в контекстном меню выбрать пункт Характеристики:

Здесь указано, откуда система будет получать перечень характеристик и их значения.
СКД учитывает эту настройку, поэтому дополнительно прописывать характеристики в запросе не нужно.

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

Можно на копии базы сделать тестовый пример, проверить производительность и все остальные аспекты, принять решение, стоит ли выполнять такие действия на рабочей базе.

>> Также из видео Вы узнаете, для чего в запросе может использоваться конструкция “Выбрать Первые 0”
А я так и не понял для чего используется такая конструкция?
Ведь на выходе такой запрос будет возвращать пустую таблицу с колонками.
А как тогда выбираются данные для этой таблицы?

Да, конечно, не изменится. Но можно выделить 2 способа использования именно такой конструкции:
1. Она обеспечивает формирование пустого результата запроса с набором колонок нужного типа. Если использовать просто ВЫБРАТЬ, то в результате будут данные (одна строка с пустыми значениями).
2. Это может быть удобным маркером, признаком, что именно этот запрос нужно подменить. Потому что в обычном запросе для получения данных из базы такая конструкция точно не будет применяться.

Пожалуйста. Обращайтесь:)
И приходите к нам на курс по СКД. В Мастер-группе отвечаем на Ваши вопросы по СКД.

РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[0].Выбрать();

ОбластьИнформацияСтудента.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьИнформацияСтудента, Выборка.Уровень());

ТабДок.Вывести(ОбластьРезультат);
ТабДок.Вывести(ОбластьРезультатыСдачиШапка);
//Выборка = Выборка.РезультатыСдачи.Выбрать();

//Каждому студенту свои предметы
Выборка2.Следующий();

ОбластьРезультатыСдачи.Параметры.Заполнить(Выборка2);
ТабДок.Вывести(ОбластьРезультатыСдачи, Выборка2.Уровень());

В системе 1С Предприятие 8.3 можно задавать выполнение кода в привилегированном режиме. Привилегированный режим 1С – это режим, при котором отключается проверка прав на уровне записей (RLS), не производится контроль прав пользователя 1С (роли пользователя), что позволяет ускорить выполнение кода и позволяет прочесть или записать нужные данные.

2. Работа в привилегированном режиме

Имеется несколько возможностей работы в привилегированном режиме.

· Вызов процедуры или функции из общего модуля с включенным флагом «Привилегированный».

Работа в привилегированном режиме

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

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

Другой пример – документ продажи оформляет кладовщик, у которого нет прав на регистр накопления «Продажи». В привилегированном режиме он сможет провести документ и записать данные в регистр продаж, при этом доступа к данным регистра он не получит.

· Использование процедуры глобального контекста УстановитьПривилегированныйРежим (<Включить>), где «Включить» – обязательный параметр типа Булево. В этом случае:

Истина – включает привилегированный режим;

Ложь – отключает привилегированный режим в 1С.

В клиент-серверном варианте работы информационной базы при вызове этого метода на клиенте привилегированный режим не включается.

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

В основном количество вызовов включения привилегированного режима должно быть равным количеству вызовов выключения режима, однако, они могут различаться. Привилегированный режим автоматически выключится при возврате из функции/процедуры, в который он был включен. Если количество вызовов выключения привилегированного режима будет больше чем количество вызовов включения, то будет вызвано исключение.

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

Существует метод проверки активности привилегированного режима:

ПривилегированныйРежим(), который возвращает Истина или Ложь.

Также, начиная с версии 8.2, в платформе для документов в свойствах объекта конфигурации добавлены свойства «Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения». Эти свойства автоматически устанавливаются в значение Истина при создании документа. В результате проведение и отмена проведения документа будет выполнено в привилегированном режиме.

Для объекта конфигурации «Бизнес-процесс» добавлено свойство «Привилегированный режим при создании задач». Оно также автоматически устанавливается в значение Истина при создании нового бизнес-процесса.

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

· Если установку привилегированного режима пытаться вызвать из внешней обработки с включенной защитой от опасных действий у пользователя (ЗащитаОтОпасныхДействий);

· Если информационная база работает в клиент-серверном режиме, а в консоли кластера серверов в свойствах информационной базы выбран профиль безопасности без флага «к привилегированному режиму»:

база в клиент-серверном режиме

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

В системе 1С Предприятие 8.3 можно задавать выполнение кода в привилегированном режиме. Привилегированный режим 1С – это режим, при котором отключается проверка прав на уровне записей (RLS), не производится контроль прав пользователя 1С (роли пользователя), что позволяет ускорить выполнение кода и позволяет прочесть или записать нужные данные.

2. Работа в привилегированном режиме

Имеется несколько возможностей работы в привилегированном режиме.

· Вызов процедуры или функции из общего модуля с включенным флагом «Привилегированный».

Работа в привилегированном режиме

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

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

Другой пример – документ продажи оформляет кладовщик, у которого нет прав на регистр накопления «Продажи». В привилегированном режиме он сможет провести документ и записать данные в регистр продаж, при этом доступа к данным регистра он не получит.

· Использование процедуры глобального контекста УстановитьПривилегированныйРежим (<Включить>), где «Включить» – обязательный параметр типа Булево. В этом случае:

Истина – включает привилегированный режим;

Ложь – отключает привилегированный режим в 1С.

В клиент-серверном варианте работы информационной базы при вызове этого метода на клиенте привилегированный режим не включается.

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

В основном количество вызовов включения привилегированного режима должно быть равным количеству вызовов выключения режима, однако, они могут различаться. Привилегированный режим автоматически выключится при возврате из функции/процедуры, в который он был включен. Если количество вызовов выключения привилегированного режима будет больше чем количество вызовов включения, то будет вызвано исключение.

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

Существует метод проверки активности привилегированного режима:

ПривилегированныйРежим(), который возвращает Истина или Ложь.

Также, начиная с версии 8.2, в платформе для документов в свойствах объекта конфигурации добавлены свойства «Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения». Эти свойства автоматически устанавливаются в значение Истина при создании документа. В результате проведение и отмена проведения документа будет выполнено в привилегированном режиме.

Для объекта конфигурации «Бизнес-процесс» добавлено свойство «Привилегированный режим при создании задач». Оно также автоматически устанавливается в значение Истина при создании нового бизнес-процесса.

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

· Если установку привилегированного режима пытаться вызвать из внешней обработки с включенной защитой от опасных действий у пользователя (ЗащитаОтОпасныхДействий);

· Если информационная база работает в клиент-серверном режиме, а в консоли кластера серверов в свойствах информационной базы выбран профиль безопасности без флага «к привилегированному режиму»:

база в клиент-серверном режиме

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

Читайте также: