1с ограничить доступ к номенклатуре 1с
Тема актуальна уже много лет. Интерес к ней у слушателей не ослабевает.
Вопрос
Имеется такая задача: есть ветка номенклатуры, которая привязана к магазину, и всю номенклатуру в этой группе и подгруппах необходимо разрешить изменять только одному-двум пользователям.У соответствующей роли можно убрать галку прав на чтение. Но как сделать, чтобы эти правила распространялись только на группу магазин, а не блокировали абсолютно все?
Спасибо за помощь и видео, очень интересно!
Ответ
Предлагаю сделать регистр сведений РазрешеннаяНоменклатура, куда записывать все номенклатуры, которые можно изменять указанным пользователям.
Например, в регламентном задании выбираем номенклатуры из определенных групп, записываем в регистр. Получается что-то похожее на состав сегментов номенклатуры из УТ 11.
Затем в роли для справочника Номенклатура для права Изменение прописать ограничение доступа, например, вот так:
То есть пользователю с этой ролью можно изменять только те элементы справочника Номенклатура, которые содержатся в указанном регистре.
Комментарий слушателя
Спасибо за совет, сделал, как вы сказали, все работает! Единственное, не смог самостоятельно доработать. Я в регистр сведений ЗапрещеннаяНоменклатура добавил измерение ЗапрещеннаяНоменклатура с типом данных СправочникСсылка.Номенклатура, установил свойство ВыборГрупп, создал форму регистра и выставил тип ВыборГрупп.Это все работает, выбираются только группы, как и нужно. Единственное, не понимаю, как доработать условие в роли для права Изменение. Нужно запретить редактирование всего, что есть в регистре сведений, по группам.
Комментарий тренера
Отлично, что заработало! Поскольку в регистре хранятся группы номенклатуры, а не элементы, то будем работать с реквизитом Родитель. Ограничение доступа может выглядеть, например, вот так:
Комментарий слушателя
Добрый человек, все работает как нужно и спасибо еще раз за помощь! Вы крутые!
Не могу понять, куда добавить наше условие: “при перемещении смотреть ограничение на запрещенные группы”.
Комментарий тренера
Поскольку перемещение номенклатуры в другую папку – это запись в базу, для справочника Номенклатура нужно создать ограничение доступа для права Изменение:
Для реализации данной задачи пришлось редактировать конфигурацию. Для примера выкладываю демо базу ут 10.3.24.1 с измененной конфигурацией. Все изменения можно получить путем сравнения с типовой конфигурацией. Ниже идет описание использования доступа к номенклатуры для пользователя:
Основные сведения для ограничения доступа к номенклатуре
Перед настройкой ограничения доступа к номенклатуре нужно знать несколько основных принципов:
- Настраивать ограничения доступа может только администратор (пользователь с полными правами).
- Настройки доступа не распространяются на пользователей с полными правами. Пользователь, имеющий полные права, имеет доступ ко всей номенклатуре, независимо от выполненных в базе настроек.
- Настроенные ограничения действуют, только если в базе включен флаг «Ограничивать права доступа на уровне записей».
- Настроенные ограничения вступают в силу при следующем входе пользователя в базу.
Чтобы сделанные нами настройки работали, включим в базе флаг «Ограничивать права доступа на уровне записей». Для этого откроем настройки параметров учета.
Меню: Сервис – Настройка учета – Настройка параметров учета
В форме настроек на закладке «Общее» поставим соответствующий флаг:
Группы доступа к номенклатуре
Группы доступа к номенклатуре создаются в соответствующем справочнике.
Меню: Сервис – Пользователи – Группы доступа к номенклатуре
При создании группы указывается только ее наименование. Создадим группу доступа:
Указание группы доступа производится в форме номенклатуры на закладке «Прочее».
Желательно указывать группу доступа сразу, в момент создания номенклатуры, чтобы потом не проставлять ее везде.
Укажем для номенклатуры «Вентилятор BINATONE ALPINE 160вт, напольный » группу «БытоваяТехника»
Группы пользователей
Далее создадим группу пользователя на каждого пользователя в справочнике «Группы пользователей».
Меню: Сервис – Пользователи – Группы пользователей
Добавим группу, укажем ее наименование – «ТорговыйБытовойТехники». В таблице «Виды объектов доступа» поставим флаг «Номенклатура».
Если флаг «Номенклатура» не установлен, то пользователи данной группы будут иметь доступ ко всем номенклатурам, независимо от настроек прав доступа. Если флаг установлен, то по умолчанию пользователи группы вообще не имеют доступа к номенклатуре, все доступные группы номенклатур указываются отдельно.
Далее укажем состав группы – выберем пользователя «Торговый».
Пример заполненной группы пользователей:
Настройка ограничений прав доступа
Теперь нам остался последний шаг – указать, что группа пользователей «ТорговыйБытовойТехники» имеет доступ к группе номенклатур «БытоваяТехника».
Перейти к форме настройки прав доступа можно из формы группы пользователя по кнопке «Перейти» и заполнить регистры сведений «Назначение видов объектов доступа» и «Настройки прав доступа пользователей»:
Регистр сведений «Назначение видов объектов доступа»
Регистр сведений «Настройки прав доступа пользователей»
Флаг «запись» не работает.
Результат настройки ограничения доступа к номенклатуре
После сделанных настроек пользователь Торговый, зайдя в справочник номенклатуры, увидит в нем все группы и свои номенклатуры.
Эта разработка позволяет настроить выборочную блокировку (открытия или изменения) справочников и документов для разных пользователей (или групп пользователей).
Тут вы можете спросить - А не проще ли обойтись установкой нужных ролей для пользователей?
Отвечаю - не всегда. Нередко типовые роли являются избыточными, и в придачу к установке нужных прав для пользователей предоставляют им дополнительные ненужные полномочия. К тому же иногда бывает нужно ограничить возможность редактирования уже проведенных документов - такую задачу типовыми средствами не решить.
Расширение позволяет дополнить функциональность типовых ролей конфигурации и в пользовательском режиме ограничить доступ конкретных пользователей (или групп) к конкретным типам объектов системы (документам или справочникам).
Для примера, ограничим группе пользователей доступ к документу Заказ клиента:
Откроем форму настройки прав доступа:
На форме настроек расположена таблица, в разных строках которой мы можем добавить настройки доступа для разных пользователей /групп. Добавляем новую строку и выбираем в ней:
- тип объекта - документ или справочник,
- имя объекта - в данном случае выбираем из выпадающего списка нужный тип документов информационной базы,
- настраиваем адресата ограничения - можно выбрать конкретного пользователя или группу пользователей (в таком случае ограничение будет срабатывать для всех пользователей, принадлежащих этой группе),
- тип запрета - запрет открытия или запрет изменения (в последнем случае форма будет открываться только на просмотр, таким образом пользователь не сможет редактировать старый документ).
Если включен запрет изменения, пользователь также не сможет перепровести/распровести документ, пометить объект на удаление или снять пометку (из журнала документов или в списке элементов какого-то справочника).
Применительно к документам запрет изменения имеет место только для проведенных документов.
Теперь попытка пользователя открыть заказ заканчивается ничем:
Ограничение не распространяется на пользователей с полными правами.
Несмотря на запрет доступа к заказам, пользователь без проблем может просматривать список заказов, ограничение касается только просмотра формы конкретного документа.
Для корректной работы расширения необходимо отключить Безопасный режим .
Вас может заинтересовать
В данной статье показано, как производится загрузка курсов валют в 1С:Предприятие 8 на примере конфигурации Бухгалтерия предприятия 3.0
В данном видео даются разъяснения, необходимые для понимания того, что такое права, роли и профили групп доступа. Затем создается пользователь и происходит базовая настройка прав него.
В данной статье описывается зачем делать свертку базы и на конкретном примере показано, как выполнить свертку информационной базы 1С:Бухгалтерия 3.0 штатными средствами.
Часто возникает необходимость в частичном ограничении доступа к данным. Например, когда пользователь должен видеть документы только своей организации. В таких случаях в 1С используется механизм ограничения доступа на уровне записей (так называемый, RLS – Record Level Securiy).
Для примера предположим, что перед нами стоит следующая задача. На предприятии ведется многофирменный учет и каждый контрагент и пользователь базы данных относится к определенной организации. Необходимо обеспечить доступ к справочнику “Контрагенты” таким образом, чтобы каждый пользователь мог просматривать, редактировать и добавлять контрагентов только своей организации.
Для решения задачи будем использовать платформу “1С:Предприятие 8.2″. Создадим новую конфигурацию в свойствах которой в качестве основного режима запуска будет выбран вариант “Управляемое приложение”.
Далее создадим справочник “Организации” и ещё два справочника – “Контрагенты” и “Пользователи” с реквизитом “Организация”. Кроме справочников нам понадобятся два параметра сеанса – “Организация” и “Пользователь” (соответствующих типов). Значения этих параметров устанавливаются при запуске сеанса работы с конфигурацией и хранятся до его завершения. Именно значения этих параметров мы и будем использовать при добавлении условий ограничения доступа на уровне записей.
Установка параметров сеанса выполняется в специальном модуле – “Модуль сеанса”
В этом модуле опишем предопределенную процедуру “УстановкаПараметровСеанса” в которой вызовем функцию заранее подготовленного общего модуля “ПолныеПрава”. Это необходимо в силу особенностей работы базы данных в режиме управляемого приложения, когда часть программного кода может выполняться только на стороне сервера (подробно на объяснении этих принципов в данной статье я останавливаться не буду).
В свойствах модуля “ПолныеПрава” необходимо отметить флажки “Сервер”, “Вызов сервера” и “Привилегированный” (последнее означает, что процедуры и функций данного модуля будут выполнятся без контроля прав доступа). Текст модуля будет выглядеть так:
В модуле управляемого приложения будем проверять наличие пользователя конфигурации в справочнике “Пользователи” (для простоты будем искать его по наименованию) и завершать работу системы если он не найден. Это необходимо для того, чтобы обеспечить заполнение параметров сеанса.
Перейдем на закладку “Права” роли “Пользователь” и откроем список прав справочника “Контрагенты”. Будем использовать шаблон ограничений “КонтрагентыЧтениеИзменеие” для прав “Чтение”, “Изменение” и “Доблавление”.
Для права “Чтение” будем использовать шаблон с параметром “ИЛИ ЭтоГруппа”. При этом пользователям данной роли будет разрешено чтение не только элементов справочника “Контрагенты” своей организации, но и всех групп этого справочника.
Поскольку при добавлении новых элементов справочника системой выполняется неявное чтение предопределенных реквизитов (это нужно, например, для нумерации), то необходимо обеспечить беспрепятственное чтение этих полей. Для этого добавим дополнительную строку с пустым текстом ограничения в таблицу ограничения доступа к данным и перечислим поля для которых действует данное правило – Ссылка, Версия данных, Родитель, Код.
Таким образом, поставленная задача ограничения доступа на уровне записей решена. Пользователи с действующими ограничениями получат доступ на просмотр и редактирование данных только своей организации.
Читайте также: