При организации работы в распределенных информационных базах (УРБД) на платформе 1С 7.7 часто возникает необходимость ограничить видимость кассовых документов (например, Чек ККМ и Отчет ККМ). Типичный сценарий: кассиры и продавцы в филиалах должны видеть исключительно свои документы, тогда как управляющие магазинами или центральный офис должны иметь доступ ко всей информации.
В отличие от более современных версий платформы, в 1С 7.7 отсутствует встроенный механизм RLS (Record Level Security — ограничение доступа на уровне записей). Разберем архитектурные особенности платформы и варианты решения этой задачи.
Прежде чем переходить к настройке, проанализируем базовые ограничения платформы, с которыми приходится сталкиваться:
Чек ККМ, он технически может получить доступ к любой строке этой таблицы.УстановитьОтбор() лишь скрывает строки из видимости в окне журнала. Это не запрещает просмотр данных через отчеты, печатные формы или внешние обработки.Разберем наиболее надежный архитектурный подход, который не требует глубокой переработки кода конфигурации и обеспечивает полную изоляцию данных.
Для документов Чек ККМ и Отчет ККМ в правилах миграции УРБД устанавливается режим «Место создания + Центр». В этом случае кассовые документы, созданные в конкретном магазине, отправляются только в Центральную базу (ЦБ) и не попадают в базы других филиалов.
Однако возникает коллизия: если управляющий магазина руководит несколькими точками или ему требуется видеть общую картину, данных в локальной базе филиала будет недостаточно. В этой ситуации применяется комбинированная схема:
Если данные все же мигрируют в филиальную базу, но нужно ограничить права конкретных пользователей (продавцов) внутри одной базы, необходимо внести доработки в конфигурацию.
Шаг 1. Запрет открытия чужих документов
В модуле формы документа (Чек ККМ или Отчет ККМ) в предопределенной процедуре ПриОткрытии() добавляем проверку текущего пользователя и автора документа:
Процедура ПриОткрытии()
// Проверяем роль или принадлежность к группе продавцов
Если НазваниеОсновнойРоли() = "Продавец" Тогда
Если Автор <> ТекущийПользователь() Тогда
Предупреждение("Просмотр чужих документов запрещен!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Использование команды СтатусВозврата(0) отменяет открытие формы документа, если пользователь не является его автором и не обладает правами администратора или управляющего.
Шаг 2. Автоматическая установка фильтра в журнале
Чтобы продавцы не видели список чужих документов в журнале, в модуле формы журнала документов при открытии устанавливается принудительный отбор:
Процедура ПриОткрытии()
Если НазваниеОсновнойРоли() = "Продавец" Тогда
УстановитьОтбор("Автор", ТекущийПользователь());
КонецЕсли;
КонецПроцедуры
Важно: Чтобы линейный персонал не мог отключить отбор кнопками на панели инструментов, в форме журнала следует отключить или перехватить стандартные кнопки управления фильтром.
Для создания полноценного разграничения прав «на лету» без кардинальной переработки структуры базы применяются специализированные решения и внешние компоненты:
Запрос строго по документам текущего пользователя. Открытие документа происходит по двойному клику из этой формы.WHERE на уровне СУБД. Это создает аналог RLS прямо в 1С 7.7.Проанализировав все варианты, можно сделать вывод: для решения задачи без программирования оптимально сочетать правильную настройку УРБД с терминальным доступом для управляющих. Если же требуется разграничение внутри одной локальной базы, наилучшим выбором станет комбинация проверки в процедуре ПриОткрытии() и использование отборов в журналах или специализированных внешних обработках.