Как в РМК конфигурации 1С:Розница 1.0 ограничить доступность колонок для кассиров?

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

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

Анализ возможностей типового функционала

В конфигурации «1С:Розница 1.0» предусмотрен стандартный механизм разграничения прав кассиров. Проверим его настройки:

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

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

Программное ограничение доступности колонок

Рассмотрим, как заблокировать ячейки на уровне формы рабочего места кассира. Форма РМК в «Рознице 1.0» построена на обычных формах, где управление табличной частью чека выполняется через свойства колонок элемента управления ТабличноеПоле.

Для управления поведением ячеек используются следующие свойства колонок:

  1. ТолькоПросмотр = Истина — запрещает редактирование значения в ячейке, но оставляет возможность выделить ее курсором.
  2. Доступность = Ложь — полностью отключает колонку для взаимодействия и убирает ее из фокуса ввода.
  3. ПропускатьПриВводе = Истина — позволяет курсору при нажатии клавиш Enter или Tab автоматически перескакивать на следующую разрешенную колонку (в нашем случае — на количество).

Разберем пример кода, который необходимо поместить в модуль формы РМК (в процедуру ПриОткрытии или внутреннюю процедуру инициализации интерфейса):


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

Разграничение прав: по пользователям или по ролям?

При реализации проверок прав доступа в коде важно придерживаться правильной архитектуры:

  1. Не привязывайте проверки к конкретным пользователям: сравнение по имени пользователя (ИмяПользователя() = "Кассир1") или коду справочника создает жесткую зависимость от данных. При добавлении нового сотрудника придется снова вносить изменения в конфигурацию.
  2. Используйте проверку ролей: функция РольДоступна("ИмяРоли") позволяет гибко управлять доступом. Достаточно назначить роль кассирам или старшим кассирам через конфигуратор или карточку пользователя, и поведение РМК применится ко всем сотрудникам с данной ролью автоматически.

Нюансы динамического обновления логики формы

При доработке логики РМК обратите внимание на следующие особенности:

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

Альтернативный вариант: внешняя обработка РМК

Поскольку конфигурация «Розница 1.0» не поддерживает механизм расширений (.cfe), изменение основной конфигурации требует снятия объектов с поддержки. Чтобы сохранить типовую конфигурацию на полной поддержке, можно пойти альтернативным путем:

  1. Сохранить типовую обработку РМК из конфигуратора в виде внешнего файла (.epf).
  2. Внести все необходимые изменения свойств колонок и проверки ролей в модуль формы внешней обработки.
  3. Настроить запуск кассового места через внешнюю обработку (через параметры командной строки запуска 1С или ярлык на рабочем столе кассира).

Такой подход позволяет изолировать доработки и безопасно обновлять основную конфигурацию при выходе релизов.

← На главную