В 1C:EDT
страницаВ 1C:EDT
Для того чтобы документ невозможно было просмотреть и в этой ситуации, вам нужно будет изменить существующее условие ограничения доступа.
Новое условие будет более сложным, поэтому вы будете использовать шаблоны в ограничениях доступа.
Итак, перейдите на закладку Шаблоны ограничений в редакторе роли Мастер. Добавьте новый шаблон ограничений с именем ЕстьПремия (рис. 23.24).

Рис. 23.2****4. Добавление шаблона ограничений доступа к данным для роли «Мастер»
Текст шаблона будет выглядеть следующим образом (листинг 23.2).
Листинг 23.2. Ограничение доступа к данным
ВЫБРАТЬ
1
ИЗ
Документ.НачисленияСотрудникам.Начисления
ГДЕ
Документ.НачисленияСотрудникам.Начисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Премия)
И Документ.НачисленияСотрудникам.Начисления.Ссылка = #Параметр(1).Ссылка
По сути это запрос к табличной части документа НачисленияСотрудникам, который либо не вернет вам ничего, либо вернет одну запись с одним полем, в котором будет значение 1.
Такую запись он вернет вам в том случае, если в табличной части документа есть вид расчета Премия.
Второе условие в этом запросе нужно вам для того, чтобы указать, табличная часть какого именно документа вас интересует. В этом условии используется возможность указания параметров в шаблоне.
Листинг 23.3. Ограничение доступа к данным
И Документ.НачисленияСотрудникам.Начисления.Ссылка = #Параметр(1).Ссылка
Вместо #Параметр(1) будет подставлена та строка, которую вы укажете при вызове этого шаблона в условии ограничения доступа.
Теперь нажмите Готово и вернитесь на закладку Права в редакторе роли Мастер.
В имеющемся ограничении прав доступа для других полей (в первой строке списка ограничений) замените старый текст новым (листинг 23.4) – рис. 23.25.
Листинг 23.4. Ограничение доступа к данным
ДокНачисления ГДЕ НЕ 1 В (#ЕстьПремия("ДокНачисления"))

Рис. 23.2****5. Установка ограничений доступа к данным для роли «Мастер»
Здесь с помощью конструкции #ЕстьПремия("ДокНачисления") вы обращаетесь к созданному вами шаблону. Текст шаблона просто механически будет подставлен в это место, причем строка ДокНачисления заменит собой первый параметр шаблона (#Параметр(1)).
Как уже говорилось, если в табличной части есть начисление Премия, запрос в шаблоне вернет единственную запись со значением 1.
Поэтому это условие (см. листинг 23.4) разрешит вам прочитать ДокНачисления тогда, когда запрос из шаблона не возвращает 1:
ГДЕ НЕ 1 В (#ЕстьПремия("ДокНачисления"))
То есть тогда, когда в табличной части нет начисления Премия.
Можно было бы записать это условие ограничения и без использования шаблонов.
Но, во-первых, такая запись была бы менее читаемой (листинг 23.5), а во-вторых, использование шаблонов позволяет выделить и не дублировать части условий ограничений, которые могут использоваться в разных условиях.
Листинг 23.5. Ограничение доступа к данным
ДокНачисления ГДЕ НЕ 1 В (
ВЫБРАТЬ
1
ИЗ
Документ.НачисленияСотрудникам.Начисления
ГДЕ
Документ.НачисленияСотрудникам.Начисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Премия)
И Документ.НачисленияСотрудникам.Начисления.Ссылка = ДокНачисления.Ссылка)