При работе в рабочем месте кассира (РМК) в конфигурации 1С:Розница 2.2 нередко возникает ситуация, когда кассир имеет возможность открыть карточку товара и через панель навигации («Перейти») перейти в регистр сведений ЦеныНоменклатуры. В открывшемся списке отображаются все сохраненные срезы цен, включая закупочные и себестоимость, что нарушает политику конфиденциальности торгового предприятия.
Разберем причины такого поведения платформы и подробно рассмотрим эффективные способы решения поставленной задачи.
В типовых конфигурациях на управляемых формах панель навигации формы элемента справочника Номенклатура формируется динамически. Если назначенные пользователю роли содержат право «Просмотр» на зависимый регистр сведений, платформа 1С автоматически добавляет гиперссылку на этот регистр в меню перехода. Если при этом не включены детальные ограничения доступа на уровне записей (RLS) по видам цен, пользователь получает доступ ко всем записям регистра.
Для корректной работы кассового узла и автоматического расчета скидок платформе требуется программный доступ к регистру цен. Однако интерактивный просмотр кассиру не требуется. Оптимальным решением является разделение прав Чтение и Просмотр на уровне ролей конфигуратора или пользовательского расширения.
Разберем по шагам, как выполнить данную настройку:
ЧтениеЦенНоменклатуры или специализированные роли кассира).РегистрыСведений -> ЦеныНоменклатуры.После снятия права на просмотр платформа исключит команду перехода к регистру ЦеныНоменклатуры из навигационной панели карточки товара, а также заблокирует возможность интерактивного открытия формы списка регистра. При этом алгоритмы РМК продолжат работать на максимальной скорости без блокировок и ошибок нарушения прав доступа.
Штатный функционал 1С позволяет настроить ограничения на уровне записей (RLS) по видам цен. В этом случае кассиру в явном виде назначаются права только на вид цены «Розничная».
Рассмотрим особенности этого метода:
Важное ограничение: механизм RLS модифицирует каждый SQL-запрос к таблицам базы данных, добавляя условия отбора. В условиях интенсивного потока покупателей в РМК (сканирование штрихкодов, непрерывный пересчет строк чека, расчет сложных маркетинговых акций) RLS создает дополнительную нагрузку на СУБД, что может вызывать задержки и зависания интерфейса.
Если конфигурация находится на полной поддержке поставщика и снятие с поддержки нежелательно, задачу можно решить с помощью расширения конфигурации.
Проанализируем порядок действий:
Номенклатура.ПриСозданииНаСервере выполним программную проверку роли текущего пользователя и отключим видимость навигационных команд:
&НаСервере
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Если Не РольДоступна("ПолныеПрава") И Не РольДоступна("ДобавлениеИзменениеЦенНоменклатуры") Тогда
// Отключаем видимость команд перехода к регистру цен
ЭлементКоманды = КомандныйИнтерфейс.НавигационнаяПанель.Перейти.Найти("РегистрСведений.ЦеныНоменклатуры.Команда.ЦеныНоменклатуры");
Если ЭлементКоманды <> Неопределено Тогда
ЭлементКоманды.Видимость = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Таким образом, наиболее производительным и простым вариантом является отключение права «Просмотр» для регистра ЦеныНоменклатуры с сохранением права «Чтение», что гарантирует скрытие конфиденциальных закупочных цен без деградации быстродействия рабочего места кассира.