Имя вида доступа не найдено 1с

Обновлено: 30.06.2024

Код 1C v 8.х

Синтаксис:
Код 1C v 8.х
Параметры:
<Право> (обязательный)
Тип: Строка. Название права доступа.
<Объект метаданных> (обязательный) — Объект метаданных.
<Пользователь/Роль> (необязательный)
Тип: ПользовательИнформационнойБазы, Метаданные.Роли.Роль
Возвращаемое значение:
Тип: Булево. Истина - право доступа к объекту установлено; Ложь - в противном случае.
Описание:
Показывает установку права доступа к объекту метаданных для текущего пользователя.
Вызов метода всегда требует административных прав, если явно указан третий параметр - Пользователь/Роль, права которого проверяются. Если пользователь не указан, то проверяются права текущего пользователя, и для этого наличие административных прав не требуется.
Примечание:
Права доступа к объектам метаданных устанавливаются при конфигурировании ролей

Синтаксис:
Код 1C v 8.х
Параметры:
<Наименование права> (обязательный)
Тип: Строка. Наименование запрашиваемого на объект права, например "Read".
<Объект метаданных> (обязательный)
Объект метаданных, права на доступ к которому проверяются.
<Список полей> (обязательный)
Тип: Строка. Список полей объекта базы данных, права на доступ к которым проверяются. Поля указываются списком, через запятую. Могут присутствовать имена табличных частей, реквизитов табличных частей, в последнем случае поле описывается как <Имя табличной части>.<Имя реквизита табличной части>.
<Пользователь/Роль> (необязательный)
Тип: ПользовательИнформационнойБазы, Метаданные.Роли.Роль. Указывает пользователя или роль, для которых нужно определить доступность права. При этом возвращается значение права так, как оно определено в конфигурации.
Возвращаемое значение:
Тип: ПараметрыДоступа.
Описание:
Позволяет получить права текущего пользователя на заданный объект метаданных с указанием полей.

Разместил: E_Migachev  Версии: | 8.x |  Дата: 14.09.2012   Прочитано: 46666

Распечатать

Похожие FAQ

Как заполнить табличную часть формы программно?  6
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe  1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э PostgreSQL: установка, настройка, обслуживание  11
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц rphost занимает память и грузит процессор  19
У многих возникают проблемы с rphost.exe, разного вида: rphost занимает всю память rphost грузит процессор rphost жрет память причем 1С даже на запущена, а в диспетчере следующее: ежеминутно расчет на 2-3 мегабайта. Как быть и что делат Посмотреть все результаты поиска похожих

Еще в этой же категории

Как программно создать нового пользователя или скопировать настройки существующего?  4
Часто встречаю вопросы касаемые программного создания и настройки прав пользователей. В этот статье я приведу примеры для Обычного и Управляемого приложений, которые программно создают пользователя в конфигураторе и в режиме Предприятие (справочн Ограничение доступа на уровне записей - RLS (Отбор по организации)  1
Часто возникает необходимость в частичном ограничении доступа к данным. Например, когда пользователь должен видеть документы только своей организации. В таких случаях в 1С используется механизм ограничения доступа на уровне записей (так называемый, Посмотреть все в категории Пользователь, роль доступа, интерфейс

Итак, у нас есть задача добавить новый вид доступа в конфигурации УТ 11.

В старых версиях УТ 11 виды доступа задавались в плане видов характеристик "ВидыДоступа".

В новых версиях этот ПВХ уже не задействован. Вместо него используется определяемый тип "ЗначениеДоступа".

Первое, что приходит на ум - добавить новый предопределенный элемент в ПВХ "ВидыДоступа" или включить нужный тип в определяемый тип "ЗначениеДоступа".

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

В списке выбора видов доступа мы не находим наш добавленный новый вид доступа.

Что же нужно сделать для того, чтобы он появился?

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

Для старых версий УТ11 и для новых порядок действий несколько отличается.

Для старых версий:

Этот вариант предложил Замятин Илья. Орфография автора сохранена.

1. Из модуля менеджера ПлановВидовХарактеристик запускается процедура

она вызывает в свою очередь

И вот эта процедура делает то, что нам нужно, т.е. заполняет параметры для нашей мега константы. Например я добавляю новый параметр отбора ЦФО, соответственно я вставляю вот такой код:

Где значения ЦФО живут в справочнике Подразделения. Ну вот, как-то так.

Для новых версий:

1. Внести изменения в общий модуль "УправлениеДоступомПереопределяемый":

2. Обновить содержимое константы "ПараметрыОграниченияДоступа"

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

Итак, новый вид доступа добавлен. Теперь мы можем использовать его при настройке доступа к данным на уровне записей таблиц базы данных (RLS).

О том как это сделать подробно рассказано в следующей статье:

Но иногда бывают случаи когда нам не нужно ограничивать доступ на уровне записей по созданному нами виду доступа.

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

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

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

Если вы откроете текст этого шаблона, то увидите порядка 3000 строк кода, в которых не так то просто разобраться.

Что же делать? Предлагаю использовать следующую функцию:

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

Эта функция вернет нам список доступных элементов справочника согласно настройкам заданным в справочниках ГруппыДоступа или ПрофилиГруппДоступа.

Использование ограничений доступа к данным для различных объектов 1С:Предприятия 8

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

О принципах функционирования ограничений доступа к данным

Основные принципы функционирования и использования ограничений доступа к данным описаны в документации 1С:Предприятия 8 и в разделе "Ограничения доступа к данным. Сведения о принципах функционирования".

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

  • Каждое ограничение доступа к данным представляет собой запрос, записанный на языке запросов (с некоторыми упрощениями).
  • Проверка ограничений доступа к данным выполняется для каждой записи каждой таблицы базы данных, обращение к которым происходит при выполнении запроса или в процессе манипулирования любыми объектами 1С:Предприятия.
  • Для конкретной записи конкретной таблицы базы данных проверка ограничения заключается в исполнении запроса, представляющего это ограничение. Если в результате исполнения этого запроса получается непустая выборка, то считается, что доступ к записи разрешен. Если же выборка пустая, то доступ к записи запрещен.
  • Если обращение к данной записи требует проверки нескольких ограничений (из разных полей и/или из разных ролей текущего пользователя), то проверяется каждое из ограничений. Результаты проверки ограничений, наложенных на доступ к разным полям, объединяются логической операцией "И". Результаты проверки ограничений, относящихся к разным ролям текущего пользователя, объединяются логической операцией "ИЛИ". Если результат полученного логического выражения равен "Истина", то доступ к записи разрешен. Иначе - доступ запрещен.
  • Обращение по ссылке в ограничении имеет тот же смысл, что и обращение по ссылке в запросе, а именно, если ссылка указывает на несуществующую запись или имеет значение NULL, то значением поля по ссылке будет NULL.
  • Если в ограничении доступа к данным операция сравнения использует поле табличной части, то результат сравнения равен "Истина", если табличная часть содержит хотя бы одну запись, для которой результат этого сравнения - "Истина". При использовании в одном сравнении двух полей разных табличных частей значения сравнения будет "Истина", если в декартовом произведении этих табличных частей найдется запись, для которой сравнение имеет значение "Истина".

Приведем несколько примеров.

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

ГДЕ Реквизит = &ПравильноеЗначениеРеквизита

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

ВЫБРАТЬ 1
ИЗ ТаблицаИзОднойПроверяемойЗаписи
ГДЕ Реквизит = &ПравильноеЗначениеРеквизита

В данной таблице доступ к записи, в которой значение реквизита "Реквизит" совпадает со значением параметра сеанса "ПравильноеЗначениеРеквизита", разрешен. К другим записям этой таблицы доступ запрещен.

Другой пример. Усложним ограничение. Допустим нужно разрешить доступ к записи таблицы "Справочник.Контрагенты" не только если ее "Реквизит" имеет "правильное значение", но и в том случае, если "правильное значение" имеет "Реквизит" родителя этой записи (1-го или 2-го уровня). В этом случае ограничение может иметь следующий вид:

Контрагенты
ИЗ Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты1
ПО Контрагенты.Родитель = Контрагенты1.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты2
ПО Контрагенты1.Родитель = Контрагенты2.Ссылка
ГДЕ Контрагенты.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты1.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты2.Реквизит = &ПравильноеЗначениеРеквизита

Тогда запрос, который будет выполнятся в процессе проверки этого ограничения для конкретной записи справочника "Контрагенты", будет иметь вид:

ВЫБРАТЬ 1
ИЗ ТаблицаИзОднойПроверяемойЗаписи КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты1
ПО Контрагенты.Родитель = Контрагенты1.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты2
ПО Контрагенты1.Родитель = Контрагенты2.Ссылка
ГДЕ Контрагенты.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты1.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты2.Реквизит = &ПравильноеЗначениеРеквизита

Обращения по ссылкам в запросах и ограничения доступа к данным

При установке ограничений доступа к данным важно понимать, что ограничение проверяется при обращении к записи той таблицы базы данных, к которой относится ограничение. При этом если выполняется запрос к данным с ключевым словом РАЗРЕШЕННЫЕ , то запрет доступа к некоторой записи означает, что при выполнении этого запроса будет считаться, что эта запись таблицы базы данных (не результата запроса) отсутствует.

Пусть на справочник "Контрагенты" установлено следующее ограничение доступа:

ГДЕ Ответственный = &ТекущийПользователь

а сам справочник содержит такие записи:

Ответственный
(ссылка на Справочник.Пользователи)

Завод имени Лапкина Иванов Пекарня Косолапова Любимов Электроламповый завод Иванов Трикотажная фабрика Генералов

Пусть регистр сведений "КонтактнаяИнформация" содержит следующие записи:

КонтактноеЛицо
(ссылка на Справочник.ФизЛица)

Организация
(ссылка на Справочник.Контрагенты)

Зайкин А. В. Завод имени Лапкина Тонков Т. А. Пекарня Косолапова Петров А. А. Электроламповый завод Сидоров И. И. Трикотажная фабрика

Тогда если текущим пользователем является пользователь "Иванов", то результатом запроса:

ВЫБРАТЬ РАЗРЕШЕННЫЕ Имя, Ответственный
ИЗ Справочник.Контрагенты

Ответственный
(ссылка на Справочник.Пользователи)

Завод имени Лапкина Иванов Электроламповый завод Иванов

Однако, результатом следующего запроса:

ВЫБРАТЬ РАЗРЕШЕННЫЕ КонтактноеЛицо, Организация
ИЗ РегистрСведений.КонтактнаяИнформация

Зайкин А. В. Завод имени Лапкина Тонков Т. А. <Объект не найден> . Петров А. А. Электроламповый завод Сидоров И. И. <Объект не найден> .

Ответственный
(ссылка на Справочник.Пользователи)

Пекарня Косолапова Любимов Трикотажная фабрика Генералов

противоречат ограничению, и поэтому считаются отсутствующими, а представление непустой ссылки на несуществующую запись равно "<Объект не найден> . ". В то же время, результатом запроса:

ВЫБРАТЬ РАЗРЕШЕННЫЕ КонтактноеЛицо, Организация.Имя КАК Имя, Организация.Ответственный КАК Ответственный
ИЗ РегистрСведений.КонтактнаяИнформация

Зайкин А. В. Завод имени Лапкина Иванов Тонков Т. А. Петров А. А. Электроламповый завод Иванов Сидоров И. И.

поскольку противоречащие ограничению записи справочника "Контрагенты" считаются отсутствующими, а значениями полей "Имя" и "Ответственный" по ссылкам, указывающим на несуществующие записи, является значение NULL.

Если же необходимо по тому же признаку ограничить доступ к записям регистра сведений "КонтактнаяИнформация", то на этот регистр можно наложить ограничение вида:

ГДЕ Организация.Ответственный = &ТекущийПользователь

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

Зайкин А. В. Завод имени Лапкина Иванов Петров А. А. Электроламповый завод Иванов

Ограничения и табличные части

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

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

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

Пусть таблица "Документ.Накладная" содержит следующие записи:

Контрагент
(ссылка на Справочник.Контрагенты)

Состав (табличная часть)

Пекарня Косолапова Булка с маком 20 Пирожок с курагой 30 Трикотажная фабрика Штаны 20 Футболка 100

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

ГДЕ Состав.Количество > 50

будет иметь вид

ВЫБРАТЬ 1
ИЗ ТаблицаИзОднойПроверяемойЗаписи КАК Накладная
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Документ.Накладная.Состав КАК Состав
ПО Накладная.Ссылка = Состав.Ссылка
ГДЕ Состав.Количество > 50

Следовательно доступ будет разрешен только для записи "Трикотажная фабрика". Поэтому запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ Контрагент, Состав.(Номенклатура, Количество)
ИЗ Документ.Накладная

Трикотажная фабрика Штаны 20 Футболка 100

а запрос к вложенной таблице:

ВЫБРАТЬ РАЗРЕШЕННЫЕ Контрагент, Номенклатура, Количество
ИЗ Документ.Накладная.Состав

Трикотажная фабрика Штаны 20 Трикотажная фабрика Футболка 100

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

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

ГДЕ Состав.Количество > 50 ИЛИ Состав.Количество ЕСТЬ NULL

Если же необходимо разрешить доступ только к тем накладным, у которых в табличной части "Состав" нет записей с "Количеством", превышающем 50, то в ограничении необходимо использовать вложенный запрос:

Накладная1
ИЗ Документ.Накладная КАК Накладная1
ГДЕ Накладная1.Ссылка В
(
ВЫБРАТЬ Состав1.Ссылка
ИЗ Документ.Накладная.Состав КАК Состав1
СГРУППИРОВАТЬ ПО Состав1.Ссылка
ИМЕЮЩИЕ МАКСИМУМ(Состав1.Количество) <= 50
) ИЛИ Накладная1.Состав.Количество ЕСТЬ NULL

Объекты встроенного языка

Для работы с данными в объектной технике во встроенном языке 1С:Предприятия предусмотрены специальные объекты. Например для справочника это: СправочникиМенеджер , СправочникМенеджер.<Имя справочника> , СправочникСсылка.<Имя справочника> , СправочникОбъект.<Имя справочника> , и другие.

Все операции над объектами встроенного языка 1С:Предприятия выполняются в режиме "ВСЕ" (без использования режима "РАЗРЕШЕННЫЕ"). Для успешного получения разрешенных объектов в соответствующих методах объектов необходимо указывать отборы, не противоречащие ограничениям. Например, если на чтение из регистра сведений "КонтактнаяИнформация" установлено ограничение вида:

ГДЕ Тип = &ТипКонтактнойИнформации"

то для успешного выполнения метода

необходимо установить отбор:

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

Виртуальные таблицы запросов

При использовании в запросах без ключевого слова РАЗРЕШЕННЫЕ виртуальных таблиц в условиях установленных ограничений доступа к данным необходимо указывать отборы, не противоречащие ограничениям не только для запроса в целом, но и для виртуальных таблиц. Например:

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

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

Проверка прав доступа

Область применения: управляемое приложение, обычное приложение.

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

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

Эти меры позволяют:

  • существенно упростить работу из кода с элементами управления, которые пропадают из коллекции Элементы (код Элементы.ИмяЭлемента.ИмяСвойства становится нерабочим);
  • повысить устойчивость кода к пересмотру состава ролей в конфигурации;
  • организовать контроль использования ролей в конфигурации (в противном случае, выполнять анализ прав доступа по флажкам, назначенных для ролей в различных элементах произвольных форм конфигурации, крайне затруднительно).

2. Не рекомендуется использовать ролевую настройку видимости в командном интерфейсе конфигурации, командном интерфейсе основного раздела, а также рабочей области начальной страницы. Вместо этого следует использовать настройку прав на разделы командного интерфейса, общие формы и объекты, включенные в командный интерфейс или в рабочую область. Это позволяет повысить предсказуемость поведения управляемого интерфейса для пользователя, а также упростить расследование ошибок.

3. Для проверки прав доступа в коде следует использовать метод ПравоДоступа .
Например, неправильно:

Если РольДоступна("ДобавлениеИзменениеСтранМира") Тогда .
Если РольДоступна("ПросмотрОтчетаПопулярныеСтраны") Тогда .

Если ПравоДоступа("Редактирование", Метаданные.Справочники.СтраныМира) Тогда .
Если ПравоДоступа("Просмотр", Метаданные.Отчеты.ПопулярныеСтраны) Тогда .

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

4. В тех случаях, где роль не дает никаких прав на объекты метаданных, а служит только для определения того или иного дополнительного права, следует использовать метод РольДоступна . При использовании в конфигурации Библиотеки стандартных подсистем (БСП) следует использовать функцию РолиДоступны общего модуля Пользователи :
Например, без использования БСП:

Если РольДоступна(. ) Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда .

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