В режиме "Конфигуратор"
страницаВ режиме «Конфигуратор»
Вернемся в конфигуратор.
Для того чтобы документ невозможно было просмотреть и в этой ситуации, нам нужно будет изменить существующее условие ограничения доступа.
Новое условие будет более сложным, поэтому заодно мы продемонстрируем использование шаблонов в ограничениях доступа.
Итак, откроем роль Мастер и перейдем на закладку Шаблоны ограничений (рис. 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
ИЗ
Документ.НачисленияСотрудникам.Начисления
ГДЕ
Документ.НачисленияСотрудникам.Начисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Премия)
И Документ.НачисленияСотрудникам.Начисления.Ссылка = ДокНачисления.Ссылка)
Закроем окно редактирования прав. Проверим, как это работает.