Ограничение данных регистра бухгалтерии с помощью RLS
Администрирование - Роли и права
Навеяно вот этой статьей //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
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285636 1606 423
Зарплата Роли и права Системный администратор Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)
Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".
9675 руб.
27.05.2021 60571 536 129
Инструменты администратора БД Роли и права Системный администратор Разработчик Пользователь 1С 8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)
Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.04.2026, версия 1.4.1, работает в 1С:ФРЕШ!
23180 руб.
06.12.2023 25069 85 14
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28736 103 46
SALE! 20%
Роли и права 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)
Универсальная обработка по настройке прав доступа пользователей в 1СЗУП, КА, УТ, ЕРП, ERP, УНФ, Розница, Управление холдингом) и разграничений позволяет в несколько кликов настроить даже самые нестандартные права.
5750
4600 руб.
22.12.2021 38603 209 78
Логистика, склад и ТМЦ Роли и права Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)
Расширение для 1С:Бухгалтерия 3.0, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".
5084 руб.
21.05.2019 1703933 607 197
Роли и права Системный администратор Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)
Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)
9516 руб.
14.09.2022 9388 16 6
Ценообразование, анализ цен Роли и права Системный администратор 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Расширение возможностей программы 1С:УНФ 1.6 и 3.0. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.
5100 руб.
23.02.2018 69268 184 264
все зависит как наложить ограничение... вполне достаточно это сделать только на чтение, тогда записывать можно будет без проблем... это может быть актуально для разнесения банка. А что касается "не будут видеть своих движений", то тут я не понял вопроса... пользователи не будут видеть всех движений с любыми корреспонденциями по счету учета ЗП. А этого то мы и добивались )
в них-то часть проводок будет отсутствовать... хотя итоги и могут быть правильными
ну и про быстродействие не надо забывать. Эксперименты были?
конечно были, я таким образом накладывал ограничение на счет учета ЗП.
Карточка счета и отчет по проводкам будут показывать движения без учета движений по ЗП и что самое главное, итоги будут без учета проводок по ЗП. Это и есть главное отличие от технологии предложенной в статье на которую я ссылаюсь.
По быстродействию мне сложно сказать, насколько RLS в принципе влияет на производительность, но как видите, запрос на ограничения супер простой, без соединений, из чего можно сделать вывод, что производительность не должна упасть
т.к. у нас вроде как двойная запись принята в бухгалтерии, счета в любом случае должны закрыться... т.е. всегда для одного счета будет две записи, по дебету и по кредиту...
пример
(Ложь) 92 - 661 (Истина)
(Истина) 661 - 301 (Ложь)
как видно из примера должно закрыться
В приведеном в (17) примере измерение балансовым не является (указывается в проводке как по дебету, так и по кредиту).
Как удалось написать RLS к таким измерениям? У меня в этом случае просто выводится ошибка.
А с балансовым измерением ваш случай выглядит например так:
92 - 661 (Истина)
661 - 301 (Ложь)
Соответственно счет 661 не закроется.
Ничего не понимаю. Может делаю где-то ошибку. Какая у вас установлена версия платформы?
относительно не балансовых измерений не пробывал, поэтому ничего не могу сказать... относительно балансого измерения, смысл сводится к тому что бы помечать проводки с конкретным счетом...
соответственно 661 счет всегда будет закрываться...
92 - 661 (Истина)
661 - 301 (Истина) (т.к. присутствует в проводке счет)
т.е. всегда где присутствует счет который помечаем, всегда будет истина...
другой вопрос, что корреспондируемые счета могут не закрываться...
но указать это в статье надо.
Плюс ставлю за то, что почерпнул для себя, что RLS на бух регистры работает криво, я до последнего надеялся, что можно как-то ограничить.
Добавил балансовое измерение, настроил ограничение (ТекущаяТаблица ГДЕ НЕ ТекущаяТаблица.Ограничение)
Результат: при просмотре регистра проводку не вижу. Но - в ОСВ по счету она присутствует.
А то ругается:
{РегистрБухгалтерии.Хозрасчетный.МодульНабораЗаписей(53,7)}: Переменная не определена (Проводка)
Если (<<?>>Проводка.СчетДт.Родитель = Счет661) ИЛИ (Проводка.СчетКт.Родитель = Счет661) Тогда (Проверка: Сервер)
С
чет661 = ПланыСчетов.Хозрасчетный.РасчетыПоОлатеТруда;
Для Каждого Проводка Из ЭтотОбъект Цикл
Если (Проводка.СчетДт.Родитель = Счет661) ИЛИ (Проводка.СчетКт.Родитель = Счет661) Тогда
Проводка.ПроводкаПоЗП = Истина;
Иначе
Проводка.ПроводкаПоЗП = Ложь;
КонецЕсли;
КонецЦикла;Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 139581
Создание 13.06.12 13:42
Обновление 14.06.12 14:33
Просмотры 39426
Загрузки 0
Рейтинг
32
Комментарии 44
Код открыт Не указано
Рубрики Роли и права
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Бухгалтерский учет
Доступ к файлу Бесплатно (free)