В крупных информационных базах 1С:ERP справочник номенклатуры может насчитывать сотни тысяч позиций. Если пользователям разных отделов доступен весь перечень товаров, возрастает риск ошибок при выборе позиций, а поиск нужного товара замедляется. Использование механизма RLS (ограничение доступа на уровне записей) гарантирует строгую безопасность данных, однако существенно увеличивает нагрузку на СУБД и усложняет администрирование базы. Если задача заключается не в коммерческой секретности, а в удобстве ежедневной работы пользователей, ограничение видимости можно эффективно реализовать на уровне интерфейса без включения RLS.
Разберем комплексный подход, позволяющий скрыть лишние элементы справочника через типовые механизмы и программные доработки в расширении конфигурации.
Основная точка взаимодействия пользователя со справочником — это формы списка, формы выбора и формы подбора. Чтобы пользователь видел только разрешенные ему элементы, наложим программные отборы на динамические списки.
Рассмотрим по шагам реализацию этого механизма:
ФормаСписка) и форму выбора (ФормаВыбора) справочника Номенклатура.ПриСозданииНаСервере определим принадлежность текущего пользователя к определенной роли или группе доступа и установим фиксированный отбор в динамическом списке Список.Посмотрим на пример программной установки отбора на динамический список:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверяем роль или право пользователя
Если Не РольДоступна("ПолныеПрава") Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипНоменклатуры");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга");
ЭлементОтбора.Использование = Истина;
// Запрещаем пользователю отключать или менять данный отбор
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
КонецПроцедуры
Важный момент: установка свойства РежимОтображения в значение Недоступный скрывает элемент отбора из пользовательских настроек формы, что не позволяет оператору сбросить фильтрацию самостоятельно.
Если ограничить только формы выбора и списка, пользователь все еще сможет подобрать скрытую позицию, начав вводить ее наименование, артикул или штрихкод прямо в ячейку табличной части документа. Чтобы исключить такую возможность, переопределим обработчик автоподбора.
Разберем реализацию в модуле менеджера справочника Номенклатура:
ОбработкаПолученияДанныхВыбора через аннотацию &Вместо или &Перед в расширении.Посмотрим на пример реализации перехвата ввода по строке:
&Вместо("ОбработкаПолученияДанныхВыбора")
Процедура Расш1_ОбработкаПолученияДанныхВыбора(ДанныеВыбора, ПараметрыВыбора, СтандартнаяОбработка)
Если РольДоступна("ПолныеПрава") Тогда
Возврат; // Полным правам оставляем типовую логику
КонецЕсли;
СтандартнаяОбработка = Ложь;
ДанныеВыбора = Новый СписокЗначений;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 50
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Представление
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование ПОДОБНО &СтрокаПоиска
| И Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
| И НЕ Номенклатура.ЭтоГруппа
| И НЕ Номенклатура.ПометкаУдаления";
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + ПараметрыВыбора.СтрокаАвтоПодбора + "%");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Представление);
КонецЦикла;
КонецПроцедуры
Проанализируем специфику конфигурации 1С:ERP. Во многих складских и торговых документах (например, в Заказе клиента или Реализации товаров и услуг) подбор товаров выполняется через специализированную обработку ПодборТоваровВДокументПродажи. Наложение отборов только на стандартную форму выбора справочника не повлияет на эту форму.
Для комплексного решения задачи без доработки каждого документа рассмотрим следующие типовые механизмы:
ПараметрыВыбора (например, фильтрация по типу номенклатуры или конкретной группе).Интерфейсные ограничения скрывают элементы в формах, но не исключают программного добавления данных. Выясним, какие пути обхода необходимо проконтролировать дополнительно:
ОбработкаПроверкиЗаполнения документа или общую подписку на событие ПередЗаписью.Комбинация интерфейсных отборов в расширении и перехвата ОбработкаПолученияДанныхВыбора обеспечивает комфортную работу пользователей с каталогом товаров без снижения производительности базы данных, характерного для RLS.