В практике оптовой торговли часто возникает задача ограничить доступ линейного персонала к данным о закупочных ценах и маржинальности. Руководители хотят, чтобы менеджеры видели объемы своих продаж, но не знали точную себестоимость товара и прибыль компании. В системе 1С:Управление торговлей 11.4 эта задача решается несколькими способами: от простой настройки прав до программной модификации отчетов. Разберем подробно каждый из методов.
Прежде чем приступать к сложным доработкам, проанализируем типовой механизм прав доступа. В конфигурации УТ 11.4 предусмотрена специализированная роль ЧтениеСебестоимостиТоваров. Если эта роль отсутствует в профиле групп доступа пользователя, система автоматически блокирует вывод данных, связанных с финансовым результатом, во многих типовых механизмах.
Разберем алгоритм проверки прав:
Чтение себестоимости товаров. Если она включена, ее необходимо деактивировать.Полные права или Отклонение от условий продаж. Система суммирует права, и если хотя бы в одной роли чтение разрешено, ограничение не сработает.После отключения роли в стандартном отчете Выручка и себестоимость продаж поля с себестоимостью могут выводиться пустыми или отчет вовсе откажется формироваться, ссылаясь на недостаток прав. Однако этот метод не всегда дает гибкость, необходимую заказчику.
Если нам нужно оставить менеджеру доступ к отчету Валовая прибыль, но скрыть конкретные колонки, воспользуемся механизмом вариантов отчетов. Рассмотрим пошагово, как это реализовать:
Себестоимость, Валовая прибыль и Рентабельность.Теперь проанализируем ситуацию с правами. Чтобы менеджеры не смогли самостоятельно зайти в настройки и вернуть скрытые поля, нам нужно ограничить их возможности по редактированию структуры отчета. Для этого в профиле групп доступа менеджеров найдем и отключим роль СохранениеВариантовОтчетов. Это лишит их возможности изменять состав колонок «на лету», но позволит продолжать пользоваться фильтрами и группировками.
Ситуация усложняется, когда менеджер обладает техническими навыками и может попытаться вытащить данные через консоль отчетов или другие инструменты. В этом случае выясним причину «утечки» на уровне базы данных. Данные о прибыли хранятся в регистре накопления ВыручкаИСебестоимостьПродаж.
Мы можем настроить RLS (Record Level Security), но не на уровне строк, а на уровне полей (ресурсов). Это более тонкая настройка, которая требует внесения изменений в роли. Разберем логику:
Для роли менеджера в объекте РегистрНакопления.ВыручкаИСебестоимостьПродаж на право Чтение устанавливается ограничение. В списке полей выбираются только Количество и СуммаВыручки. Поля Себестоимость и ДопРасходы исключаются из разрешенных. При попытке обращения к этим полям система будет возвращать NULL, и в отчетах вместо цифр будут пустые значения.
Наиболее современный и надежный способ — программное вмешательство в процесс компоновки данных через расширение конфигурации. Это позволяет скрыть поля даже в том случае, если менеджер пытается создать новый вариант отчета. Выясним, как это работает программно.
В расширении мы можем перехватить событие ПриКомпоновкеРезультата в модуле объекта отчета или использовать общий модуль для модификации схемы компоновки данных (СКД). Рассмотрим пример кода, который удаляет «запрещенные» поля из доступных полей выбора:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Проверяем наличие специальной роли у текущего пользователя
Если Не РольДоступна("ПросмотрСебестоимости") Тогда
// Получаем схему компоновки
Схема = ЭтотОбъект.СхемаКомпоновкиДанных;
// Список запрещенных полей
ЗапрещенныеПоля = Новый Массив;
ЗапрещенныеПоля.Добавить("Себестоимость");
ЗапрещенныеПоля.Добавить("ВаловаяПрибыль");
ЗапрещенныеПоля.Добавить("Рентабельность");
// Удаляем поля из наборов данных
Для Каждого НаборДанных Из Схема.НаборыДанных Цикл
Для Каждого Поле Из НаборДанных.Поля Цикл
Если ЗапрещенныеПоля.Найти(Поле.ПутьКДанным) <> Неопределено Тогда
Поле.ОграничениеИспользованияВВыборе = Истина;
Поле.ОграничениеИспользованияВПорядке = Истина;
Поле.ОграничениеИспользованияВГруппировке = Истина;
Поле.ОграничениеИспользованияВУсловии = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Этот метод хорош тем, что он «вырезает» данные на уровне метаданных отчета для конкретного сеанса пользователя. Даже если менеджер зайдет в конструктор настроек, он просто не увидит этих полей в списке доступных.
Если заказчик хочет максимально простое решение, можно пойти по пути «кастрации» отчета. Разберем этот вариант:
Таким образом, у менеджера физически не будет инструмента, способного показать себестоимость, даже если он попытается изменить настройки.
Скрыть себестоимость только в одном отчете недостаточно. Эффективный менеджер может найти лазейки в других местах системы. Проанализируем потенциальные точки утечки информации:
Подводя итог, наиболее сбалансированным решением для УТ 11.4 является использование расширения, которое программно ограничивает доступ к полям СКД (Способ 4). Это сохраняет гибкость настройки отчетов для пользователей, но гарантирует конфиденциальность финансовой информации на уровне программного кода.