При сопровождении конфигураций на платформе 1С:Предприятие 7.7 нередко возникает задача ограничить доступ конкретного пользователя к части информации: например, запретить новому сотруднику просматривать старых контрагентов, договоры и связанные с ними первичные документы, созданные до определенной даты. Поскольку в ядре платформы 7.7 отсутствует штатный механизм RLS (Row-Level Security), контроль прав осуществляется только на уровне метаданных целиком (чтение, запись, удаление объектов). Разберем архитектурные ограничения платформы и возможные практические подходы к решению этой задачи.
Проанализируем базовые механизмы встроенного языка, которые разработчики обычно пытаются использовать для фильтрации данных:
УстановитьОтбор("Ответственный", ТекПользователь)) и не позволяет задать условие сравнения по диапазону дат (>= или <=). Кроме того, пользователь может интерактивно отключить или изменить отбор.СписокЗначений, сформированный запросом. Однако этот метод блокирует стандартные механизмы навигации, иерархию и сортировку, а при больших объемах данных приводит к повышенному расходу оперативной памяти..dbf сторонними редакторами или драйверами прямого доступа.Рассмотрим комплексный подход к фильтрации интерфейса при помощи типовых средств встроенного языка. Для этого закрепим за пользователем границу разрешенного периода или ответственного менеджера.
Разберем по шагам реализацию схемы с отсечением по дате:
ДатаОграниченияВидимости типа «Дата».ПриУстановкеИнтервала() добавим проверку:
Процедура ПриУстановкеИнтервала(НачДата, КонДата, Способ)
Если ПустоеЗначение(Конст.ТекущийПользователь.ДатаОграниченияВидимости) = 0 Тогда
Если НачДата < Конст.ТекущийПользователь.ДатаОграниченияВидимости Тогда
НачДата = Конст.ТекущийПользователь.ДатаОграниченияВидимости;
Предупреждение("Просмотр документов ранее " + СокрЛП(НачДата) + " запрещен!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПриОткрытии() внедряем проверку даты документа:
Процедура ПриОткрытии()
Если ПустоеЗначение(Конст.ТекущийПользователь.ДатаОграниченияВидимости) = 0 Тогда
Если ДатаДок < Конст.ТекущийПользователь.ДатаОграниченияВидимости Тогда
Предупреждение("Доступ к документу ограничен политикой безопасности.");
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важный нюанс: Данный метод требует модификации практически каждого объекта метаданных, диалогов выбора и отчетов (включая отчеты по взаиморасчетам и остаткам, где могут всплыть начальные сальдо по «закрытым» контрагентам).
Если требуется изолировать рабочее место нового сотрудника с минимальными изменениями конфигурации, разберем вариант с использованием компоненты «Управление распределенными информационными базами» (УРБД):
При таком подходе сотрудник физически работает в локальной копии, где старые данные отсутствуют, а вся его новая работа при обмене передается в центральную базу. Однако следует учитывать, что в периферийном узле не будут видны актуальные взаиморасчеты и складские остатки по старым позициям без отдельной настройки трансляции начальных остатков.
Для конфигураций, работающих под управлением MS SQL Server, существует возможность внедрить перехватчики запросов на уровне сетевого драйвера базы данных или библиотеки 1С++ / FormEx.
Выясним принцип работы этого механизма:
_1SJOURN (журнал документов) и SC* (таблицы справочников) на уровне выполнения подставляется дополнительное условие:
WHERE (DATE_TIME_IDDOC >= '20240101') AND ...
Если конфигурация сильно доработана, а поддержка внешних компонент или ручная переписка сотен форм экономически нецелесообразна, наиболее надежным административным решением является свертка базы: