Перейти к содержимому

7.2 Какие значения могут использоваться при ограничении доступа к данным?

Опубликовано: Обновлено:

Telegram → Просто о платформе 1С

❓ 7.2 При настройке ограничения доступа к данным в качестве значений, по которым производится ограничение доступа к данным, могут использоваться:


Как платформа определяет доступность записи

Заголовок раздела «Как платформа определяет доступность записи»

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

Запись считается доступной, если в результате выполнения условия получается непустая таблица — одна или более записей. Если результатом является пустая таблица, запись считается недоступной.

Изменение записи допустимо, если она не противоречит ограничению как до выполнения изменения, так и после него.

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

В запросе ограничения всегда присутствует таблица объекта, на который накладывается ограничение, — основной объект ограничения.

При этом в тексте ограничения ее можно явно не указывать.

Сокращенный синтаксис языка ограничения доступа:

[Псевдоним таблицы основного объекта ограничения]
[ИЗ <Список источников>]
[ГДЕ <Условие отбора>]

Квадратные скобки [] означают, что соответствующая часть описания необязательна.

При этом таблица основного объекта ограничения всегда присутствует в запросе ограничения, даже если ее псевдоним явно не указан.

Язык ограничения доступа использует секции ИЗ и ГДЕ языка запросов.

Поэтому простейшее ограничение в условной конфигурации может выглядеть так:

ГДЕ Ответственный = &ТекущийСотрудник

Здесь:

  • Ответственный — значение поля проверяемой записи;
  • &ТекущийСотрудник — значение параметра сеанса, с которым оно сравнивается.

Именно такие данные и значения участвуют в вычислении условия ограничения.


Условие ограничения логически проверяется для каждой записи основного объекта. При обращении к базе данных платформа добавляет построенные условия ограничения к SQL-запросу.

Какие данные можно использовать в ограничении

Заголовок раздела «Какие данные можно использовать в ограничении»

В условиях ограничения могут использоваться:

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

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

Например, для условного справочника Проекты:

ГДЕ Наименование = "Проект внедрения"

В этом случае условие доступа определяется непосредственно по данным проверяемого объекта.

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

Например, если Ответственный ссылается на справочник Сотрудники:

ГДЕ Ответственный.Код = "00015"

Можно использовать и цепочку обращений:

ГДЕ Ответственный.Подразделение.Наименование = "Отдел продаж"

То есть условие может зависеть не только от значения ссылки, но и от полей объекта, на который она указывает.

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

Например:

Проекты
ИЗ
Справочник.Проекты КАК Проекты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
ПО Проекты.Ответственный = Сотрудники.Ссылка
ГДЕ
Сотрудники.Подразделение = &ТекущееПодразделение

Здесь доступность элемента справочника Проекты зависит от данных связанного элемента справочника Сотрудники.


Вложенные запросы позволяют сформировать набор записей, который затем можно использовать:

  • для связывания с таблицей основного объекта ограничения;
  • как операнд операций В и НЕ В.

Например, доступ к элементам условного справочника Проекты можно ограничить проектами, перечисленными в регистре сведений ДоступныеПроекты:

Проекты
ГДЕ
Проекты.Ссылка В
(ВЫБРАТЬ
ДоступныеПроекты.Проект
ИЗ
РегистрСведений.ДоступныеПроекты КАК ДоступныеПроекты
ГДЕ
ДоступныеПроекты.Сотрудник = &ТекущийСотрудник)

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


В составе запросов ограничения доступа могут использоваться параметры сеанса.

Например:

ГДЕ
Ответственный = &ТекущийСотрудник

ТекущийСотрудник здесь — параметр сеанса.

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


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

Например:

ГДЕ &ИспользоватьРазделениеПоПодразделениям = Истина

Здесь результат условия зависит от значения функциональной опции ИспользоватьРазделениеПоПодразделениям.


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