Навеяно вот этой статьей //infostart.ru/public/124845/. В этой статье описано как можно сделать с помощью RLS ограничение на видимость счетов плана счетов, в надежде ограничить доступ к данным, однако данный подход не гарантирует надежного и 100% сокрытия данных от посторонних глаз, если ставиться именно такая задача.
В большинстве организаций стремятся скрыть движения по счетам учета заработной платы. Удалять субконто как то не совсем правильно и в некоторых случаях может быть совсем не приемлемо. Можно пытаться скрывать счета, как это описано в статье по вышеприведенной ссылке, однако такой подход приводит к некоторым проблемам, таким, как не соответствие итоговых оборотов и сальдо наличию оборотов в ОСВ, использование таких отчетов как Карточка счета или Анализ счета дает возможность обойти данное ограничение (т.е. используя такую технологию, нужно скрывать все счета, в корреспонденции с которыми может корреспондировать скрываемый счет), пользователи будут видеть какие то не понятные "Объект не найден", да и сам способ достаточно трудозатратный.
Поэтому, я в этой статье опишу один из простых способов добиться нужного и надежного результата с весьма скромными затратами времени. Итак, попробуем скрыть от левых глаз данные по заработной плате в регистре бухгалтерии с помощью RLS.
Основная проблема при реализации данной задачи с помощью RLS - это ограничение технологии на работу с регистрами бухгалтерии, ограничения накладывать можно только на измерения регистров, что лишает нас возможности накладывать ограничения на конкретные счета. Исходя из этого, добавим новое измерение с типом данных "Булево" и назовем его "ПроводкаПоЗП". Назначение этого измерения, помечать все проводки в счете дебета или кредита которых присутствует счет учета ЗП. После чего в модуль набора движений регистра нужно внести небольшой код (можно сделать и на подписке, при желании, если совсем нет желания вносить изменения в регистр).
Счет661 = ПланыСчетов.Хозрасчетный.РасчетыПоОплатеТруда;
Если (Проводка.СчетДт.Родитель = Счет661) ИЛИ (Проводка.СчетКт.Родитель = Счет661) Тогда
Проводка.ПроводкаПоЗП = Истина;
Иначе
Проводка.ПроводкаПоЗП = Ложь;
КонецЕсли;
Например, для типовой конфигурации УТП этот код можно поместить в событие ПередЗаписью(). Назначение кода, пометить нужные нам проводки.
Ну и теперь остается создать нужную роль и написать простой запрос на языке RLS для нужного регистра бухгалтерии на право "Чтение:
ГДЕ ПроводкаПоЗП = ЛОЖЬ
Ну и напоследок, соответствующую роль нужно подключить тем пользователям, для которых должно работать это ограничение. Если у пользователя несколько ролей, для которых определен доступ на регистр бухгалтерии, нужно в этих ролях на право чтения написать следующую конструкцию в роли:
ГДЕ Ложь
что означает, что пользователю разрешен доступ в случае "ИСТИНА". В "ГДЕ Ложь" Ложь будет всегда, а значит пользователю доступ будет запрещен всегда (заумно конечно, но логика есть, если учитывать приоритетность ролей - приоритетнее всегда та роль у которой прав больше).
Как видите, работы тут аж минут на 30 с отладкой.
А что же придумать, если нужно ограничивать разным пользователям доступ к разным счетам? Используя вышеописанный способ, я бы предложил следующую технологию.
Мое допущение: Врядли нужно добиваться того, что бы была возможность накладывать ограничения аж до конкретного счета.
А раз так, имеет смысл логически учет разбить на разделы учета и накладывать ограничения именно на разделы учета!
Для этого нам понадобиться справочник "Разделы учета", с табличной частью счетов, которые входят в данный раздел. Теперь мы можем в регистре бухгалтерии, вместо измерения "ПроводкаПоЗП", добавить измерение "Раздел учета", немного модифицировать вышеприведенный код для пометки проводок. В принципе все, с одним но, запрос RLS будет немного сложнее. Пример запроса и организация доступа пользователей к разным разделам учета описана в вышеприведенной статье //infostart.ru/public/124845/.
И ограничение к разным счетам готово!
P.S. понадобиться еще обработка, с помощью которой пакетом можно будет обрабатывать набор записей регистра бухгалтерии. Для чего, сами догадаетесь :)
P.S. по просьбам трудящихся, исправил ошибку в одном слове, раз уж оно так сильно кидается в глаза и хотел бы добавить, что если добавить не балансовое измерение "Счет", тогда можно накладывать ограничение и на каждый счет. Измерение должно быть не балансовым, что бы в регистре не накапливались итоги по этому измерению!
постоянный адрес статьи: http://forum1c.com.ua/index.php?topic=3505.0