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