644 документа
← К списку

В режиме "Конфигуратор"

страница

В режиме «Конфигуратор»

Вернемся в конфигуратор.

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

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

Итак, откроем роль Мастер и перейдем на закладку Шаблоны ограничений (рис. 22.23).

Рис. 22.23. Добавление шаблона ограничений доступа к данным для роли «Мастер»

Здесь добавим новый шаблон, назовем его ЕстьПремия.

Текст шаблона будет выглядеть следующим образом (листинг 22.2).

Листинг 22.2. Ограничение доступа к данным

ВЫБРАТЬ

1

ИЗ

Документ.НачисленияСотрудникам.Начисления

ГДЕ

Документ.НачисленияСотрудникам.Начисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Премия)

И Документ.НачисленияСотрудникам.Начисления.Ссылка = #Параметр(1).Ссылка

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

Такую запись он вернет нам в том случае, если в табличной части документа есть вид расчета Премия.

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

Листинг 22.3. Ограничение доступа к данным

И Документ.НачисленияСотрудникам.Начисления.Ссылка = #Параметр(1).Ссылка

Вместо #Параметр(1) будет подставлена та строка, которую мы укажем при вызове этого шаблона в условии ограничения доступа.

Теперь вернемся на закладку Права.

В имеющемся ограничении прав доступа для прочих полей (в первой строке списка ограничений) заменим старый текст новым (листинг 22.4), рис. 22.24.

Листинг 22.4. Ограничение доступа к данным

ДокНачисления ГДЕ НЕ 1 В (#ЕстьПремия("ДокНачисления"))

Рис. 22.24. Установка ограничений доступа к данным для роли «Мастер»

Здесь с помощью конструкции #ЕстьПремия("ДокНачисления") мы обращаемся к нашему шаблону. Текст шаблона просто механически будет подставлен в это место, причем строка ДокНачисления заменит собой первый параметр шаблона (#Параметр(1)).

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

Поэтому это условие (см. листинг 22.4) разрешит нам прочитать ДокНачисления тогда, когда запрос из шаблона не возвращает 1:

ГДЕ НЕ 1 В (#ЕстьПремия("ДокНачисления"))

То есть тогда, когда в табличной части нет начисления Премия.

Можно было бы записать это условие ограничения и без использования шаблонов.

Но, во-первых, такая запись была бы менее читаемой (листинг 22.5), а во-вторых, использование шаблонов позволяет выделить и не дублировать части условий ограничений, которые могут использоваться в разных условиях.

Листинг 22.5. Ограничение доступа к данным

ДокНачисления ГДЕ НЕ 1 В (

ВЫБРАТЬ

1

ИЗ

Документ.НачисленияСотрудникам.Начисления

ГДЕ

Документ.НачисленияСотрудникам.Начисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Премия)

И Документ.НачисленияСотрудникам.Начисления.Ссылка = ДокНачисления.Ссылка)

Закроем окно редактирования прав. Проверим, как это работает.