Как скрыть закупочные цены от кассира в 1С:Розница 2.2?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При работе в рабочем месте кассира (РМК) в конфигурации 1С:Розница 2.2 нередко возникает ситуация, когда кассир имеет возможность открыть карточку товара и через панель навигации («Перейти») перейти в регистр сведений ЦеныНоменклатуры. В открывшемся списке отображаются все сохраненные срезы цен, включая закупочные и себестоимость, что нарушает политику конфиденциальности торгового предприятия.

Разберем причины такого поведения платформы и подробно рассмотрим эффективные способы решения поставленной задачи.

В типовых конфигурациях на управляемых формах панель навигации формы элемента справочника Номенклатура формируется динамически. Если назначенные пользователю роли содержат право «Просмотр» на зависимый регистр сведений, платформа 1С автоматически добавляет гиперссылку на этот регистр в меню перехода. Если при этом не включены детальные ограничения доступа на уровне записей (RLS) по видам цен, пользователь получает доступ ко всем записям регистра.

Способ 1. Разграничение прав «Чтение» и «Просмотр» в ролях (Рекомендуемый)

Для корректной работы кассового узла и автоматического расчета скидок платформе требуется программный доступ к регистру цен. Однако интерактивный просмотр кассиру не требуется. Оптимальным решением является разделение прав Чтение и Просмотр на уровне ролей конфигуратора или пользовательского расширения.

Разберем по шагам, как выполнить данную настройку:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. Найдем роли, входящие в профиль кассира (например, ЧтениеЦенНоменклатуры или специализированные роли кассира).
  3. В дереве метаданных роли перейдем к объекту РегистрыСведений -> ЦеныНоменклатуры.
  4. Оставим флаг напротив права «Чтение» — это позволит РМК без ошибок считывать розничные цены и рассчитывать скидки в фоновом режиме.
  5. Снимем флаг напротив права «Просмотр».
  6. Сохраним изменения и обновим конфигурацию базы данных.

После снятия права на просмотр платформа исключит команду перехода к регистру ЦеныНоменклатуры из навигационной панели карточки товара, а также заблокирует возможность интерактивного открытия формы списка регистра. При этом алгоритмы РМК продолжат работать на максимальной скорости без блокировок и ошибок нарушения прав доступа.

Способ 2. Использование ограничения доступа на уровне записей (RLS)

Штатный функционал 1С позволяет настроить ограничения на уровне записей (RLS) по видам цен. В этом случае кассиру в явном виде назначаются права только на вид цены «Розничная».

Рассмотрим особенности этого метода:

  1. В режиме 1С:Предприятие перейдем в раздел Администрирование -> Настройки пользователей и прав -> Группы доступа.
  2. В профиле групп доступа кассиров активируем ограничение доступа по видам цен.
  3. В настройках ограничений укажем только разрешенные для кассира виды цен (например, «Розничная цена магазина»).

Важное ограничение: механизм RLS модифицирует каждый SQL-запрос к таблицам базы данных, добавляя условия отбора. В условиях интенсивного потока покупателей в РМК (сканирование штрихкодов, непрерывный пересчет строк чека, расчет сложных маркетинговых акций) RLS создает дополнительную нагрузку на СУБД, что может вызывать задержки и зависания интерфейса.

Способ 3. Скрытие элементов через механизм расширений

Если конфигурация находится на полной поддержке поставщика и снятие с поддержки нежелательно, задачу можно решить с помощью расширения конфигурации.

Проанализируем порядок действий:

  1. Создадим новое расширение с назначением Адаптация.
  2. Добавим в расширение форму элемента справочника Номенклатура.
  3. В событии формы ПриСозданииНаСервере выполним программную проверку роли текущего пользователя и отключим видимость навигационных команд:

&НаСервере
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    Если Не РольДоступна("ПолныеПрава") И Не РольДоступна("ДобавлениеИзменениеЦенНоменклатуры") Тогда
        // Отключаем видимость команд перехода к регистру цен
        ЭлементКоманды = КомандныйИнтерфейс.НавигационнаяПанель.Перейти.Найти("РегистрСведений.ЦеныНоменклатуры.Команда.ЦеныНоменклатуры");
        Если ЭлементКоманды <> Неопределено Тогда
            ЭлементКоманды.Видимость = Ложь;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Таким образом, наиболее производительным и простым вариантом является отключение права «Просмотр» для регистра ЦеныНоменклатуры с сохранением права «Чтение», что гарантирует скрытие конфиденциальных закупочных цен без деградации быстродействия рабочего места кассира.

← На главную