Как ограничить видимость и запретить открытие чужих документов в 1С 7.7

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

При организации многопользовательской работы в конфигурациях на платформе 1С:Предприятие 7.7 (в частности, в «Торговля и Склад 7.7») часто возникает задача скрыть чужие документы от менеджеров или операторов. В отличие от платформы 1С 8.x, где реализован механизм RLS (Record Level Security) на уровне СУБД, в 1С 7.7 встроенного разграничения доступа на уровне отдельных записей нет. Разберем основные штатные и программные методы решения этой задачи, а также способы защиты от обхода ограничений.

Вариант 1. Программная установка отбора по автору в общем журнале

Штатный механизм платформы 7.7 позволяет жестко зафиксировать отбор по реквизиту документа при открытии формы журнала. Для этого необходимо выполнить следующие условия:

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

Рассмотрим пример кода в модуле формы журнала:


Процедура ПриОткрытии()
    // Проверяем, требуется ли ограничение для текущего пользователя
    Если глТекущийПользователь.ОграничиватьДоступ = 1 Тогда
        // Устанавливаем жесткий отбор по общему реквизиту Автор
        УстановитьОтбор("Автор", глТекущийПользователь);
        // Блокируем элементы формы, позволяющие сбросить или изменить отбор
        Форма.КнопкаОтбор.Доступность(0);
    КонецЕсли;
КонецПроцедуры

Ограничение метода: Платформа 1С 7.7 поддерживает одновременно только один отбор в журнале. Нельзя штатно отобрать документы одновременно по автору и складу или контрагенту. Для составного отбора разработчикам приходится создавать специальный общий реквизит-склейку (например, ЗначениеВСтрокуВнутр(Автор) + ЗначениеВСтрокуВнутр(Склад)), что увеличивает нагрузку на базу данных и размер индексных файлов .CDX.

Вариант 2. Маскирование данных в графах журнала и запрет открытия документов

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

Разберем реализацию вывода данных через формулу в графе журнала:


Функция глПолучитьСуммуДляЖурнала(ТекДок) Экспорт
    Если (ТекДок.Автор = глТекущийПользователь) Или (глКонтрольДоступа(глТекущийПользователь) = 0) Тогда
        Возврат ТекДок.Итог("Сумма");
    Иначе
        Возврат "<Скрыто>";
    КонецЕсли;
КонецФункции

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


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

Вариант 3. Централизованный контроль через глобальные процедуры в ТиС 7.7

Чтобы не модифицировать формы всех существующих документов вручную, в конфигурации «Торговля и Склад 7.7» целесообразно использовать типовые глобальные механизмы.

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

Важные каналы утечки данных, которые необходимо перекрыть

При настройке прав в 1С 7.7 важно помнить о дополнительных интерфейсных возможностях платформы:

  1. Формы выбора (подбора): При заполнении реквизита типа «Документ» открывается форма выбора. В ней также должен отрабатывать отбор, иначе пользователь увидит запрещенные документы в диалоге выбора.
  2. Журнал проводок и операций: Если в базе ведется бухгалтерский учет, документы видны через проводки. Ограниченным ролям необходимо отключить доступ к бухгалтерским журналам.
  3. Ввод на основании: Механизм ВводНаОсновании может переносить данные из чужого документа в новый без интерактивного открытия оригинала. Требуется проверка прав в процедуре ВводНаОсновании.
  4. Внешние обработки: В полномочиях пользователей следует отключить право запуска внешних отчетов и обработок, а также встроенных сервисов (например, ПодборОбъектов), которые могут прочитать данные напрямую.
← На главную