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

Опубликовал Ярослав Радкевич (WKBAPKA) в раздел Программирование - Практика программирования

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

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

См. также

Комментарии
1. Ярослав Радкевич (WKBAPKA) 201 13.06.12 13:28 Сейчас в теме
за литературный стиль сильно не бейте, писал на коленке, да и вообще я писать статьи не умею...
2. sound sound (sound) 522 13.06.12 13:57 Сейчас в теме
За литературный не буду, но, раз уж мы тут делимся опытом и знаниями, на всякий случай ссылочкой поделюсь, пригодится :) http://school-assistant.ru/?predmet=russian&theme=glagoli_sovershennogo_I_nesovershennog­o_vida
3. Ярослав Радкевич (WKBAPKA) 201 13.06.12 14:03 Сейчас в теме
(2) sound,
:) почитаю как то на досуге...

я стремился в статье передать идею
4. Ярослав Радкевич (WKBAPKA) 201 13.06.12 15:00 Сейчас в теме
5. Ярослав Радкевич (WKBAPKA) 201 14.06.12 09:22 Сейчас в теме
Хотелось бы добавить, что если сделать не балансовое измерение с типом данных "ПланСчетовСсылка.Хозрасчетный", тогда можно накладывать ограничения на конкретные счета.
6. q_i 312 14.06.12 12:58 Сейчас в теме
(1) WKBAPKA, стиль не смущает, а вот http://tsya.ru почитать очень советую ;)
7. Ярослав Радкевич (WKBAPKA) 201 14.06.12 14:37 Сейчас в теме
привязались вы к этому слову "стремятся". исправил ошибку :)
8. kiv82 (AltF1) 18.06.12 11:23 Сейчас в теме
Семь комментариев - и всё ни о чем!
romankoav; vdolynsky; +2 Ответить
9. Валерий Дубовой (Valerich) 1619 26.06.12 06:47 Сейчас в теме
ИМХО такое ограничение будет не вредным только для сотрудников, которые с зарплатой даже в корреспонденции не пересекаются. Иначе часть "своих" движений они не увидят... да и записать не смогут.
10. Ярослав Радкевич (WKBAPKA) 201 26.06.12 09:05 Сейчас в теме
(9) Valerich,
все зависит как наложить ограничение... вполне достаточно это сделать только на чтение, тогда записывать можно будет без проблем... это может быть актуально для разнесения банка. А что касается "не будут видеть своих движений", то тут я не понял вопроса... пользователи не будут видеть всех движений с любыми корреспонденциями по счету учета ЗП. А этого то мы и добивались )
11. Ярослав Радкевич (WKBAPKA) 201 26.06.12 09:21 Сейчас в теме
все же я больше склоняюсь к мысли, что ограничения накладывать надо на разделы учета, в которые входит несколько счетов. Так будет и проще и логичнее, чем если это делать для каждого счета. Правда для каждого счета ограничение более гибче
12. Валерий Дубовой (Valerich) 1619 26.06.12 11:49 Сейчас в теме
(10) гм... а как тогда будет выглядеть, скажем, карточка своего счета или отчет по проводкам?

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

ну и про быстродействие не надо забывать. Эксперименты были?
13. Ярослав Радкевич (WKBAPKA) 201 26.06.12 12:00 Сейчас в теме
(12) Valerich,
конечно были, я таким образом накладывал ограничение на счет учета ЗП.
Карточка счета и отчет по проводкам будут показывать движения без учета движений по ЗП и что самое главное, итоги будут без учета проводок по ЗП. Это и есть главное отличие от технологии предложенной в статье на которую я ссылаюсь.
По быстродействию мне сложно сказать, насколько RLS в принципе влияет на производительность, но как видите, запрос на ограничения супер простой, без соединений, из чего можно сделать вывод, что производительность не должна упасть
14. Sasha Erem (erem) 380 04.09.12 18:07 Сейчас в теме
А не проще убрать аналитику с 66 счета вообще... Доделать отражение, что бы только общая сумма в проводки попадала. Общую сумму пусть все бухгалтера видят... А вот к регистру накопления "Взаиморасчеты с работниками орг." доступ ограничить. Конечно возникает проблема с учетом развернутого сальдо (в отчете "Баланс" например), но ее можно как-то решить. Мы так решили проблему секретности с зарплатой и займами...
15. Ярослав Радкевич (WKBAPKA) 201 05.09.12 09:01 Сейчас в теме
(14) erem,
ну вот видите, всеже проще сделать так как описано в статье, что бы не придумывать ,как решать нюансы, это и была основная задача
16. Николай Ф. (finik1) 24.09.12 15:36 Сейчас в теме
Как решаете проблему распухания таблицы итогов? Если была проводка скажем Дт 20 Кт 70 "закрыто", а затем Дт 43 Кт 20 "открыто", итоги по регистру бухгалтерии не сойдутся у вас в ноль из-за несоответствия значений доп. измерения "открыто/закрыто".
17. Ярослав Радкевич (WKBAPKA) 201 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) 201 25.09.12 10:17 Сейчас в теме
(19) finik1,
относительно не балансовых измерений не пробывал, поэтому ничего не могу сказать... относительно балансого измерения, смысл сводится к тому что бы помечать проводки с конкретным счетом...
соответственно 661 счет всегда будет закрываться...

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

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

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

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