При настройке рабочего места кассира (РМК) в конфигурации «1С:Розница 1.0» нередко возникает задача жестко ограничить возможность изменения данных в табличной части чека. Например, требуется запретить кассиру ручное редактирование цен, скидок, бонусов и других реквизитов, оставив доступной для ввода только колонку с количеством товара. Разберем, какие возможности для этого предоставляет типовой функционал программы и как реализовать задачу программно, если стандартных настроек недостаточно.
В конфигурации «1С:Розница 1.0» предусмотрен стандартный механизм разграничения прав кассиров. Проверим его настройки:
Важное ограничение: типовой механизм дополнительных прав управляет логическими бизнес-действиями кассира (применение скидок, смена типа цен, отмена чека), но не предоставляет гибкой визуальной настройки колонок табличного поля чека (например, полное отключение редактирования бонусных баллов или запрет фокуса на определенных ячейках). Если требуется оставить доступной исключительно колонку «Количество», типовых настроек конфигурации недостаточно — потребуется программная доработка формы РМК.
Рассмотрим, как заблокировать ячейки на уровне формы рабочего места кассира. Форма РМК в «Рознице 1.0» построена на обычных формах, где управление табличной частью чека выполняется через свойства колонок элемента управления ТабличноеПоле.
Для управления поведением ячеек используются следующие свойства колонок:
ТолькоПросмотр = Истина — запрещает редактирование значения в ячейке, но оставляет возможность выделить ее курсором.Доступность = Ложь — полностью отключает колонку для взаимодействия и убирает ее из фокуса ввода.ПропускатьПриВводе = Истина — позволяет курсору при нажатии клавиш Enter или Tab автоматически перескакивать на следующую разрешенную колонку (в нашем случае — на количество).Разберем пример кода, который необходимо поместить в модуль формы РМК (в процедуру ПриОткрытии или внутреннюю процедуру инициализации интерфейса):
Процедура ПриОткрытии()
// Выполняем типовые действия открытия формы
// ...
// Ограничиваем доступ кассирам
Если Не РольДоступна("ПолныеПрава") И Не РольДоступна("Администратор") Тогда
ТаблицаТоваров = ЭлементыФормы.Товары; // Имя элемента табличного поля РМК
Для Каждого Колонка Из ТаблицаТоваров.Колонки Цикл
Если Колонка.Имя <> "Количество" Тогда
Колонка.ТолькоПросмотр = Истина;
Колонка.ПропускатьПриВводе = Истина;
Иначе
Колонка.ТолькоПросмотр = Ложь;
Колонка.ПропускатьПриВводе = Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
При реализации проверок прав доступа в коде важно придерживаться правильной архитектуры:
ИмяПользователя() = "Кассир1") или коду справочника создает жесткую зависимость от данных. При добавлении нового сотрудника придется снова вносить изменения в конфигурацию.РольДоступна("ИмяРоли") позволяет гибко управлять доступом. Достаточно назначить роль кассирам или старшим кассирам через конфигуратор или карточку пользователя, и поведение РМК применится ко всем сотрудникам с данной ролью автоматически.При доработке логики РМК обратите внимание на следующие особенности:
ПриОткрытии, но и в процедуры обновления состояния элементов формы.Поскольку конфигурация «Розница 1.0» не поддерживает механизм расширений (.cfe), изменение основной конфигурации требует снятия объектов с поддержки. Чтобы сохранить типовую конфигурацию на полной поддержке, можно пойти альтернативным путем:
.epf).Такой подход позволяет изолировать доработки и безопасно обновлять основную конфигурацию при выходе релизов.