В процессе работы торгового предприятия часто возникает ситуация, когда необходимо ограничить доступ менеджеров или продавцов к клиентской базе. Основная цель — сделать так, чтобы каждый сотрудник видел только «своих» контрагентов и документы, созданные им самим, не имея возможности просматривать данные коллег. Это позволяет избежать внутренней конкуренции («крысятничества») и защитить коммерческую информацию. Рассмотрим подробнее, как реализовать такие ограничения в популярных конфигурациях, таких как 1С:Управление нашей фирмой (УНФ) и 1С:Бухгалтерия предприятия (БП).
Наиболее правильным и штатным способом решения задачи является использование механизма ограничения доступа на уровне записей (RLS). Этот инструмент позволяет накладывать фильтры непосредственно на уровне базы данных: если у пользователя нет прав на конкретную запись справочника Контрагенты, он не увидит её ни в списках, ни в отчетах. Для визуализации и проверки настроенных прав пригодится отчет по ограничениям пользователей и группам доступа.
Разберем по шагам, как активировать и настроить этот механизм в типовых решениях на платформе 8.3:
Контрагенты.Проанализируем важный технический нюанс. В современных версиях 1С (начиная с платформы 8.3.10) существует два режима работы RLS: Стандартный и Производительный. Рекомендуем использовать именно производительный режим, так как он значительно меньше влияет на скорость работы системы. В этом режиме права доступа кэшируются в специальных вспомогательных таблицах базы данных, что исключает «тормоза» при открытии больших списков документов, о которых часто предупреждают опытные администраторы.
Если нам нужно реализовать логику «вижу только тех, кого создал я», в стандартной поставке УНФ это реализуется через назначение Ответственного в карточке контрагента. Однако сама по себе запись в поле Ответственный не скрывает объект. Чтобы ограничение заработало, необходимо настроить профиль доступа так, чтобы условие чтения проверяло соответствие текущего пользователя и значения в поле Ответственный.
Посмотрим на пример логики, которая используется внутри системы при включении RLS:
// Пример логики условия в шаблоне ограничения (упрощенно)
#Если &ОграничениеДоступаНаУровнеЗаписейВключено #Тогда
ТекущаяТаблица ГДЕ (ТекущаяТаблица.Ответственный = &ТекущийПользователь
ИЛИ ТекущаяТаблица.Автор = &ТекущийПользователь)
#КонецЕсли
Важно понимать, что ограничение доступа к контрагенту автоматически влечет за собой ограничение доступа к связанным документам. Если пользователю запрещено видеть контрагента «Ромашка», то и документ ЗаказПокупателя, где выбрана эта компания, не будет отображаться в списке, так как система не сможет корректно обработать битую ссылку.
Рассмотрим более сложный, но радикальный метод — создание РИБ по условию. Этот вариант подходит для крупных сетей, где магазины или офисы физически удалены друг от друга. В этом случае для каждого магазина создается своя периферийная база данных.
При настройке синхронизации указываются фильтры. Например, в базу Магазина №1 передаются только документы, относящиеся к этому складу, и только те контрагенты, которые привязаны к данному региону. Преимущества:
Недостатки:
Если вы не хотите включать тяжеловесный механизм RLS или типовых настроек недостаточно, проанализируем вариант с расширениями конфигурации. Это современный способ доработки 1С без изменения основной конфигурации, что сохраняет возможность легкого обновления.
Программист может создать расширение, которое будет динамически накладывать фильтр на списки (динамические списки) при их открытии. Например, в процедуре ПриСозданииНаСервере для формы списка контрагентов можно добавить программный фильтр:
// Пример установки программного фильтра в расширении
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ответственный");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПараметрыСеанса.ТекущийПользователь;
Этот метод работает быстрее, чем RLS, и позволяет гибко настраивать условия видимости без глубокого погружения в систему прав доступа. Однако стоит помнить, что такой фильтр работает только на уровне интерфейса (форм списков). Если продвинутый пользователь решит построить произвольный отчет или воспользоваться консолью запросов, он сможет увидеть данные, скрытые простым фильтром формы.
Выясним причину, по которой в 1С:Бухгалтерия ограничение по контрагентам настраивается реже. В отличие от УНФ, где учет ведется оперативно менеджерами, бухгалтерия — это система сводного учета. Для корректного закрытия месяца, формирования книги покупок/продаж и сдачи отчетности бухгалтер должен иметь доступ ко всем данным по всем контрагентам.
Если вы все же решите ограничить доступ в БП 3.0, будьте готовы к тому, что стандартные роли могут конфликтовать с вашими ограничениями. Часто в бухгалтерии доступ ограничивают не по контрагентам, а по Организациям. Если в одной базе ведется учет по нескольким юридическим лицам, можно сделать так, чтобы сотрудники Организации А не видели данные Организации Б. Для гибкой настройки прав в этой конфигурации можно использовать расширение для ограничения доступа к документам в 1С:Бухгалтерии.
Подводя итог нашему анализу, для решения задачи «чтобы не крысятничали» в 1С:УНФ выполните следующие действия:
Автор или Ответственный в основные формы списков.Помните, что любая система безопасности — это компромисс между защищенностью данных и удобством работы. Тщательно тестируйте настройки прав под тестовым пользователем, прежде чем внедрять их в рабочую базу.