Как настроить разграничение прав доступа к документам в 1С 7.7 в распределенной базе?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При организации работы в распределенных информационных базах (УРБД) на платформе 1С 7.7 часто возникает необходимость ограничить видимость кассовых документов (например, Чек ККМ и Отчет ККМ). Типичный сценарий: кассиры и продавцы в филиалах должны видеть исключительно свои документы, тогда как управляющие магазинами или центральный офис должны иметь доступ ко всей информации.

В отличие от более современных версий платформы, в 1С 7.7 отсутствует встроенный механизм RLS (Record Level Security — ограничение доступа на уровне записей). Разберем архитектурные особенности платформы и варианты решения этой задачи.

Ограничения платформы 1С 7.7 при работе с правами и УРБД

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

  1. Отсутствие RLS на уровне СУБД: Штатные права в 7.7 выдаются на вид объекта в целом. Если пользователь имеет право на чтение документов типа Чек ККМ, он технически может получить доступ к любой строке этой таблицы.
  2. Ограничения правил миграции УРБД: Правила обмена данными работают на уровне информационных баз (узлов), а не отдельных пользователей. Если документ загружен в узловую базу филиала, его физически видят все пользователи этой базы.
  3. Интерфейсный характер фильтров: Стандартный отбор в журнале документов с помощью функции УстановитьОтбор() лишь скрывает строки из видимости в окне журнала. Это не запрещает просмотр данных через отчеты, печатные формы или внешние обработки.
  4. Лимит реквизитов отбора: В штатных журналах документов 1С 7.7 одновременно можно установить отбор только по одному реквизиту, отмеченному в конфигураторе как реквизит отбора (например, по автору или по складу).

Вариант 1: Настройка правил миграции УРБД и RDP для управляющих

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

Для документов Чек ККМ и Отчет ККМ в правилах миграции УРБД устанавливается режим «Место создания + Центр». В этом случае кассовые документы, созданные в конкретном магазине, отправляются только в Центральную базу (ЦБ) и не попадают в базы других филиалов.

Однако возникает коллизия: если управляющий магазина руководит несколькими точками или ему требуется видеть общую картину, данных в локальной базе филиала будет недостаточно. В этой ситуации применяется комбинированная схема:

  1. Продавцы и кассиры работают в локальных базах филиалов, видя только документы своей торговой точки.
  2. Управляющие магазинов подключаются через удаленный рабочий стол (RDP) напрямую к Центральной базе, где видят сводную информацию по всем подконтрольным узлам.

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

Если данные все же мигрируют в филиальную базу, но нужно ограничить права конкретных пользователей (продавцов) внутри одной базы, необходимо внести доработки в конфигурацию.

Шаг 1. Запрет открытия чужих документов

В модуле формы документа (Чек ККМ или Отчет ККМ) в предопределенной процедуре ПриОткрытии() добавляем проверку текущего пользователя и автора документа:


Процедура ПриОткрытии()
    // Проверяем роль или принадлежность к группе продавцов
    Если НазваниеОсновнойРоли() = "Продавец" Тогда
        Если Автор <> ТекущийПользователь() Тогда
            Предупреждение("Просмотр чужих документов запрещен!");
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Использование команды СтатусВозврата(0) отменяет открытие формы документа, если пользователь не является его автором и не обладает правами администратора или управляющего.

Шаг 2. Автоматическая установка фильтра в журнале

Чтобы продавцы не видели список чужих документов в журнале, в модуле формы журнала документов при открытии устанавливается принудительный отбор:


Процедура ПриОткрытии()
    Если НазваниеОсновнойРоли() = "Продавец" Тогда
        УстановитьОтбор("Автор", ТекущийПользователь());
    КонецЕсли;
КонецПроцедуры

Важно: Чтобы линейный персонал не мог отключить отбор кнопками на панели инструментов, в форме журнала следует отключить или перехватить стандартные кнопки управления фильтром.

Вариант 3: Использование внешних компонент и псевдо-журналов

Для создания полноценного разграничения прав «на лету» без кардинальной переработки структуры базы применяются специализированные решения и внешние компоненты:

  1. Псевдо-журналы на внешних обработках: Для роли продавца полностью отключается доступ к штатным журналам документов. Вместо них создается внешняя обработка с таблицей значений, которая заполняется программно через объект Запрос строго по документам текущего пользователя. Открытие документа происходит по двойному клику из этой формы.
  2. Компонента FormEx: Позволяет управлять элементами формы, перехватывать события клавиатуры и мыши, скрывать системные кнопки и колонки, а также динамически раскрашивать и фильтровать строки списков.
  3. Компоненты 1С++ и vk_hook1C (для SQL-версий): Позволяют выполнять прямые SQL-запросы к базе данных или перехватывать запросы платформы, добавляя условие WHERE на уровне СУБД. Это создает аналог RLS прямо в 1С 7.7.

Проанализировав все варианты, можно сделать вывод: для решения задачи без программирования оптимально сочетать правильную настройку УРБД с терминальным доступом для управляющих. Если же требуется разграничение внутри одной локальной базы, наилучшим выбором станет комбинация проверки в процедуре ПриОткрытии() и использование отборов в журналах или специализированных внешних обработках.

← На главную