Как запретить кассирам просмотр чеков ККМ и отчетов о розничных продажах других магазинов в 1С:Управление торговлей?

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

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

В этой статье мы подробно разберем, как решить эту проблему, ограничив видимость «чужих» касс ККМ и документов. Мы рассмотрим два основных пути: настройку типового механизма RLS (Ограничение доступа на уровне записей) и альтернативный вариант — создание расширения конфигурации для программной установки отборов.

---

Метод 1. Настройка стандартного механизма RLS

Самый простой способ, не требующий программирования и изменения конфигурации, — это использование встроенной системы разграничения прав доступа на уровне записей (RLS). Этот механизм позволяет автоматически скрывать документы тех касс и складов, к которым у текущего пользователя нет явного доступа.

Давайте разберем по шагам, как настроить RLS для кассиров:

  1. Включение ограничения доступа на уровне записей:

    Перейдем в раздел НСИ и администрирование, затем выберем пункт Настройки пользователей и прав. Раскроем группу Группы доступа и установим флаг Ограничивать доступ на уровне записей.

  2. Настройка Профиля групп доступа:

    Перейдем в справочник Профили групп доступа (находится в том же разделе). Найдем предопределенный профиль Кассир (или тот пользовательский профиль, который назначен вашим кассирам). Откроем его и перейдем на вкладку Виды доступа.

    Нам необходимо настроить ограничения для двух видов объектов. Найдем в списке строку Кассы ККМ и установим для нее значение "Все запрещены, исключения назначаются в группах доступа" (или "Разрешены с ограничениями" в зависимости от релиза конфигурации). Аналогичное действие выполним для строки Склады (так как ОРП и чеки тесно связаны со складами магазинов).

  3. Создание Групп доступа:

    Теперь перейдем в справочник Группы доступа. Нам потребуется создать отдельные группы доступа для каждого магазина. Например, создадим группу "Кассиры Магазина №1".

    В поле Профиль выберем наш настроенный профиль Кассир. Перейдем на вкладку Участники и добавим туда учетные записи кассиров, работающих в первом магазине.

    После этого перейдем на вкладку Ограничения доступа. Выберем вид доступа Кассы ККМ и в табличной части укажем конкретные кассы, принадлежащие Магазину №1. Для вида доступа Склады укажем склад (или склады) этого же магазина. Запишем и закроем группу доступа.

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

Важное замечание по производительности RLS:

В старых релизах «1С:Управление торговлей 11» (например, в ветке 11.3) использование RLS могло приводить к существенному замедлению работы системы при проведении документов и открытии списков. Однако, начиная с версий 11.4 и выше, фирма «1С» внедрила производительный режим RLS. Он работает через специальные регистры ключей доступа, благодаря чему система работает практически так же быстро, как и без ограничений. Если у вас актуальный релиз, смело используйте данный метод.

---

Метод 2. Программное ограничение через расширение (Альтернатива RLS)

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

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

Разберем по шагам программную реализацию в расширении:

  1. Создадим новое расширение конфигурации и снимем с него флаг Безопасный режим (так как нам потребуется обращаться к серверным функциям).
  2. Добавим в расширение формы списков документов. Нам понадобятся:
    • Документ.ЧекККМ.Форма.ФормаСписка
    • Документ.ОтчетОРозничныхПродажах.Форма.ФормаСписка
  3. В модуле каждой из этих форм добавим обработчик события ПриСозданииНаСервере с директивой выполнения &НаСервере и типом вызова &После.

Проанализируем пример кода для формы списка документов Чек ККМ:


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

Этот код надежно блокирует отображение документов других магазинов. Кассир при открытии вкладки "Продажи" увидит только чеки, оформленные на его рабочем месте. При этом производительность системы абсолютно не страдает, так как отбор накладывается на уровне стандартного SQL-запроса динамического списка.

---

Метод 3. Правильная организация работы кассиров через РМК

Рассмотрим ситуацию с точки зрения бизнес-процессов розничной точки. Зачастую кассирам дают доступ к разделу «Продажи» только ради двух операций: просмотра истории своих чеков и оформления возвратов за прошлые смены.

Однако в современных версиях «1С:Управление торговлей» интерфейс РМК (Рабочее место кассира) полностью автономен и предоставляет весь этот функционал без необходимости выхода в общие журналы документов:

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

← На главную