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