Как в 1С:Управление торговлей 11 разделить права доступа на оформление ПКО и РКО

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

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

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

Почему возникает ошибка при попытке скопировать типовую роль кассы

Проанализируем типовую ошибку: разработчик создает расширение, копирует роль ДобавлениеИзменениеДокументовПоКассе, снимает флаги добавления/изменения с документа РасходныйКассовыйОрдер, назначает новый профиль пользователю, однако при попытке провести Приходный кассовый ордер система выдает ошибку «Нарушение прав доступа».

Выясним причину такого поведения платформы:

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

Чтобы избежать настройки сотен прав на вспомогательные регистры и механизмы RLS, рассмотрим более простые, быстрые и надежные варианты решения.

Вариант 1. Программный запрет через роль-метку в расширении (Рекомендуемый способ)

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

Разберем по шагам реализацию этого метода:

  1. Подключаем расширение конфигурации (с отключенным безопасным режимом, назначение — Адаптация или Дополнение).
  2. Создаем в расширении новую роль, например, РазрешеноОформлениеРКО. Права внутри роли настраивать не нужно — она служит флагом (маркером) доступа.
  3. Добавляем в расширение документ РасходныйКассовыйОрдер и перехватываем обработчик события ПередЗаписью в модуле объекта с помощью директивы &Перед или создаем подписку на событие ПередЗаписьюДокумента.

Посмотрим на пример кода в модуле объекта документа РасходныйКассовыйОрдер расширения:


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

Преимущества данного способа:

  1. Конфигурация остается полностью на типовой поддержке поставщика.
  2. Пользователь без проблем проводит ПКО со всеми регламентными движениями.
  3. Роль РазрешеноОформлениеРКО можно легко добавить в нужные профили групп доступа через пользовательский режим 1С:Предприятия.

Вариант 2. Ограничение на уровне интерфейса (формы документов)

Если требуется заблокировать создание и редактирование РКО еще до момента записи объекта, разберем доработку форм через расширение.

  1. Заимствуем в расширение форму списка и форму документа РасходныйКассовыйОрдер.
  2. В обработчике события ПриСозданииНаСервере выполняем проверку прав текущего сеанса.

Посмотрим на пример кода для формы документа:


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

В форме списка можно аналогично скрыть кнопку создания нового документа:


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

Вариант 3. Штатная настройка через «Заявки на расходование ДС»

Проанализируем сценарий, когда доработка конфигурации нежелательна. В 1С:Управление торговлей 11 предусмотрен штатный регламент контроля выплат:

  1. Переходим в раздел НСИ и администрирование → Казначейство и взаиморасчеты.
  2. Включаем флаг Заявки на расходование денежных средств и переводим опцию в статус Обязательно к применению.
  3. Настраиваем права пользователя-кассира: оставляем доступ к кассовым документам, но исключаем роли по созданию и согласованию заявок на расходование ДС.

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

← На главную