Ограничение данных регистра бухгалтерии с помощью RLS

14.06.12

Администрирование - Роли и права

Как сделать простое и надежное ограничение на данные регистра бухгалтерии!

Навеяно вот этой статьей //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

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122179    670    389    

714

Запрет доступа к данным по зарплате для БП 3.0 и КА 2.5

Зарплата Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5700 руб.

27.05.2021    32738    204    89    

165

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 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, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2980    13    1    

34

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3545    11    1    

34

Расширение для разграничения доступа к контрагентам и обработка для группового назначения доступа для Бухгалтерии (RLS) 3.0.143.42

Роли и права Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)

9360 руб.

14.09.2022    5760    7    4    

9

Роли для кладовщика

Логистика, склад и ТМЦ Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

2520 руб.

21.05.2019    1692311    552    192    

133

Универсальная система оповещений в базе или по почте по произвольным условиям, расписанием, ролям и пользователям (Расширение / конфигурация для платформ 8.3.6+, для ЛЮБЫХ баз)

Роли и права Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

18000 руб.

29.11.2019    24693    13    8    

33
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 214 13.06.12 13:28 Сейчас в теме
за литературный стиль сильно не бейте, писал на коленке, да и вообще я писать статьи не умею...
user712426; +1 Ответить
6. q_i 577 14.06.12 12:58 Сейчас в теме
(1) стиль не смущает, а вот http://tsya.ru почитать очень советую ;)
2. sound 535 13.06.12 13:57 Сейчас в теме
За литературный не буду, но, раз уж мы тут делимся опытом и знаниями, на всякий случай ссылочкой поделюсь, пригодится :) http://school-assistant.ru/?predmet=russian&theme=glagoli_sovershennogo_I_nesovershennog­o_vida
3. WKBAPKA 214 13.06.12 14:03 Сейчас в теме
(2) sound,
:) почитаю как то на досуге...

я стремился в статье передать идею
4. WKBAPKA 214 13.06.12 15:00 Сейчас в теме
мысль была и пропала )
5. WKBAPKA 214 14.06.12 09:22 Сейчас в теме
Хотелось бы добавить, что если сделать не балансовое измерение с типом данных "ПланСчетовСсылка.Хозрасчетный", тогда можно накладывать ограничения на конкретные счета.
7. WKBAPKA 214 14.06.12 14:37 Сейчас в теме
привязались вы к этому слову "стремятся". исправил ошибку :)
8. AltF1 8 18.06.12 11:23 Сейчас в теме
Семь комментариев - и всё ни о чем!
ашот; romankoav; vdolynsky; +3 Ответить
9. Valerich 1633 26.06.12 06:47 Сейчас в теме
ИМХО такое ограничение будет не вредным только для сотрудников, которые с зарплатой даже в корреспонденции не пересекаются. Иначе часть "своих" движений они не увидят... да и записать не смогут.
10. WKBAPKA 214 26.06.12 09:05 Сейчас в теме
(9) Valerich,
все зависит как наложить ограничение... вполне достаточно это сделать только на чтение, тогда записывать можно будет без проблем... это может быть актуально для разнесения банка. А что касается "не будут видеть своих движений", то тут я не понял вопроса... пользователи не будут видеть всех движений с любыми корреспонденциями по счету учета ЗП. А этого то мы и добивались )
12. Valerich 1633 26.06.12 11:49 Сейчас в теме
(10) гм... а как тогда будет выглядеть, скажем, карточка своего счета или отчет по проводкам?

в них-то часть проводок будет отсутствовать... хотя итоги и могут быть правильными

ну и про быстродействие не надо забывать. Эксперименты были?
13. WKBAPKA 214 26.06.12 12:00 Сейчас в теме
(12) Valerich,
конечно были, я таким образом накладывал ограничение на счет учета ЗП.
Карточка счета и отчет по проводкам будут показывать движения без учета движений по ЗП и что самое главное, итоги будут без учета проводок по ЗП. Это и есть главное отличие от технологии предложенной в статье на которую я ссылаюсь.
По быстродействию мне сложно сказать, насколько RLS в принципе влияет на производительность, но как видите, запрос на ограничения супер простой, без соединений, из чего можно сделать вывод, что производительность не должна упасть
11. WKBAPKA 214 26.06.12 09:21 Сейчас в теме
все же я больше склоняюсь к мысли, что ограничения накладывать надо на разделы учета, в которые входит несколько счетов. Так будет и проще и логичнее, чем если это делать для каждого счета. Правда для каждого счета ограничение более гибче
14. erem 424 04.09.12 18:07 Сейчас в теме
А не проще убрать аналитику с 66 счета вообще... Доделать отражение, что бы только общая сумма в проводки попадала. Общую сумму пусть все бухгалтера видят... А вот к регистру накопления "Взаиморасчеты с работниками орг." доступ ограничить. Конечно возникает проблема с учетом развернутого сальдо (в отчете "Баланс" например), но ее можно как-то решить. Мы так решили проблему секретности с зарплатой и займами...
15. WKBAPKA 214 05.09.12 09:01 Сейчас в теме
(14) erem,
ну вот видите, всеже проще сделать так как описано в статье, что бы не придумывать ,как решать нюансы, это и была основная задача
16. finik1 24.09.12 15:36 Сейчас в теме
Как решаете проблему распухания таблицы итогов? Если была проводка скажем Дт 20 Кт 70 "закрыто", а затем Дт 43 Кт 20 "открыто", итоги по регистру бухгалтерии не сойдутся у вас в ноль из-за несоответствия значений доп. измерения "открыто/закрыто".
17. WKBAPKA 214 24.09.12 21:35 Сейчас в теме
что то как то заумно написано...
т.к. у нас вроде как двойная запись принята в бухгалтерии, счета в любом случае должны закрыться... т.е. всегда для одного счета будет две записи, по дебету и по кредиту...
пример

(Ложь) 92 - 661 (Истина)
(Истина) 661 - 301 (Ложь)

как видно из примера должно закрыться
18. finik1 25.09.12 01:48 Сейчас в теме
"В регистрах бухгалтерии в ограничениях можно использовать только балансовые измерения основного объекта ограничения" (ИТС, статья "Ограничение доступа к данным. Сведения о принципах функционирования"). Проверил это на практике в 8.2.15/16.

В приведеном в (17) примере измерение балансовым не является (указывается в проводке как по дебету, так и по кредиту).
Как удалось написать RLS к таким измерениям? У меня в этом случае просто выводится ошибка.

А с балансовым измерением ваш случай выглядит например так:
92 - 661 (Истина)
661 - 301 (Ложь)
Соответственно счет 661 не закроется.

Ничего не понимаю. Может делаю где-то ошибку. Какая у вас установлена версия платформы?
19. finik1 25.09.12 02:14 Сейчас в теме
Да, и приведеный в статье пример кода показывает что речь идет о балансовом измерении (без характерных окончаний Дт и Кт для небалансовых измерений). Тогда должна как-то решаться проблема незакрытых по измерению в ноль итогов.
20. WKBAPKA 214 25.09.12 10:17 Сейчас в теме
(19) finik1,
относительно не балансовых измерений не пробывал, поэтому ничего не могу сказать... относительно балансого измерения, смысл сводится к тому что бы помечать проводки с конкретным счетом...
соответственно 661 счет всегда будет закрываться...

92 - 661 (Истина)
661 - 301 (Истина) (т.к. присутствует в проводке счет)

т.е. всегда где присутствует счет который помечаем, всегда будет истина...

другой вопрос, что корреспондируемые счета могут не закрываться...
21. WKBAPKA 214 25.09.12 10:37 Сейчас в теме
относительно итогов, вы правы, но итоги накапливаются только на корреспондирующих счетах с ограничиваемомым счетом...
22. finik1 25.09.12 10:59 Сейчас в теме
(21) Да, именно об этом я и хотел сказать.
Если не нашли способа, как с ними бороться, то для тяжелых баз данных такой подход может быть опасен из-за избыточного распухания таблиц итогов.
23. finik1 25.09.12 11:03 Сейчас в теме
Причем, чем больше градаций аналитик введете (не истина/ложь, а например, разделы учета), тем больше будет не закрытых итогов.
24. WKBAPKA 214 25.09.12 11:05 Сейчас в теме
на эту тему уже задумался... жалко, что нельзя накладывать RLS на небалансовые измерения
25. WKBAPKA 214 25.09.12 12:27 Сейчас в теме
попробывал с небалансовым измерением, работает RLS... счаз перепроведу документы и сверю остатки
26. finik1 25.09.12 12:36 Сейчас в теме
Точно с небалансовым? Переписывали на <ИмяИзмерения>Дт/Кт? У меня с небалансовым не работает (как и написано в ИТС).
27. WKBAPKA 214 25.09.12 12:39 Сейчас в теме
что сделал, взял снял признак балансового измерения, зашел под ограниченными правами сформировал ОСВ, шаблон работает... поменял в коде на Дт и Кт, перепроведу документы за месяц скажу точно
28. WKBAPKA 214 25.09.12 12:45 Сейчас в теме
сорри, ошибся, не в той базе проверил... да, шаблон выдает ошибку
29. amigo667 8 17.11.14 23:19 Сейчас в теме
30. WKBAPKA 214 18.11.14 09:40 Сейчас в теме
в ЖКК. там подробно описано.
можно еще тут: http://forum1c.com.ua/
введите в поиск RLS
ну и на инфостарте есть много инфы на эту тему
31. IRLes 207 26.05.15 19:42 Сейчас в теме
Измерение должно быть не балансовым, что бы в регистре не накапливались итоги по этому измерению!

Ага, при этом пропадает возможность накладывать ограничения по РЛС в рамках добавленного измерения ;)
32. WKBAPKA 214 27.05.15 09:34 Сейчас в теме
(31) IRLes,
так еще сошлись на этом 25.09.2012 :)
33. Kindman1980 81 03.02.16 19:45 Сейчас в теме
Довольно часто проповедую добавление измерений. Особенно пригодится где регистр бухгалтерии является источником какого-нибудь GAAP и нужно много аналитик.
34. KrugGans 09.03.17 18:41 Сейчас в теме
Очень помогла статья... Все гениальное - просто!!!
35. romankoav 4 31.03.17 13:59 Сейчас в теме
Думаю надо удалить статью или написать, что предложенное решение не работает. Нельзя наложить РЛС на не балансовое измерение, а если сделать балансовым то накапливаются итоги.... которые никогда не закроются.
36. fixin 4252 14.07.17 11:00 Сейчас в теме
(35) ну и пусть накапливаются себе, иногда это не критично, а важнее безопасность.
но указать это в статье надо.

Плюс ставлю за то, что почерпнул для себя, что RLS на бух регистры работает криво, я до последнего надеялся, что можно как-то ограничить.
37. ikm 42 27.05.18 10:06 Сейчас в теме
Тоже поэкспериментировал - и наткнулся на непонятку.
Добавил балансовое измерение, настроил ограничение (ТекущаяТаблица ГДЕ НЕ ТекущаяТаблица.Ограничение)
Результат: при просмотре регистра проводку не вижу. Но - в ОСВ по счету она присутствует.
38. ikm 42 27.05.18 14:06 Сейчас в теме
(37) Отвечу сам себе. Отчеты выполняются в привилегированном режиме, поэтому на RLS им фиолетово. Организация стандартно добавляется в отборы. Так что для отчетов пришлось вмешиваться в ОбщийМодуль.БухгалтерскиеОтчетыВызовСервера
Hoppius; WKBAPKA; +2 Ответить
39. WKBAPKA 214 31.05.18 10:27 Сейчас в теме
(38) В типовых для Украины работает, я проверял. В них отчеты не выполняются в привилегированном режиме
40. soulsb 12.07.18 07:52 Сейчас в теме
(38) +1 Спасибо! А я думаю, что эти отчеты все равно выводят данные ... Закомментировал привилегированный режим в общем модуле. Заработало!
41. ikm 42 12.07.18 11:08 Сейчас в теме
Думаю, напрасно, где нибудь аукнется. Таки не зря установлен.
Правильнее донастроить в отчетах, помнится там несколько строк изменить..
42. zodiac99-99 2 13.02.19 15:46 Сейчас в теме
Такая же задача встала, пришлось в ручную переписывать так как рлс полностью скрывает счета, мне же необходимо было выводить общую сумму по зп счетом, но не выводить расшифровку... геморрой еще тот
43. кольщик 17.08.20 13:51 Сейчас в теме
А куда этот код в КА впихивать?
А то ругается:
{РегистрБухгалтерии.Хозрасчетный.МодульНабораЗаписей(53,7)}: Переменная не определена (Проводка)
Если (<<?>>Проводка.СчетДт.Родитель = Счет661) ИЛИ (Проводка.СчетКт.Родитель = Счет661) Тогда (Проверка: Сервер)
44. Bor_ka 100 18.11.21 14:08 Сейчас в теме
(43)
С
чет661 = ПланыСчетов.Хозрасчетный.РасчетыПоОлатеТруда;
	Для Каждого Проводка Из ЭтотОбъект Цикл
		Если (Проводка.СчетДт.Родитель = Счет661) ИЛИ (Проводка.СчетКт.Родитель = Счет661) Тогда
			Проводка.ПроводкаПоЗП = Истина;
		Иначе
			Проводка.ПроводкаПоЗП = Ложь;
		КонецЕсли;
	КонецЦикла;
Оставьте свое сообщение