gifts2017

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

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

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

Навеяно вот этой статьей http://infostart.ru/public/124845/. В этой статье описано как можно сделать с помощью RLS ограничение на видимость счетов плана счетов, в надежде ограничить доступ к данным, однако данный подход не гарантирует надежного и 100% сокрытия данных от посторонних глаз, если ставиться именно такая задача. 

В большинстве организаций стремятся скрыть движения по счетам учета заработной платы.  Удалять субконто как то не совсем правильно и в некоторых случаях может быть совсем не приемлемо. Можно пытаться скрывать счета, как это описано в статье по вышеприведенной ссылке, однако такой подход приводит к некоторым проблемам, таким, как не соответствие итоговых оборотов и сальдо наличию оборотов в ОСВ, использование таких отчетов как Карточка счета или Анализ счета дает возможность обойти данное ограничение (т.е. используя такую технологию, нужно скрывать все счета, в корреспонденции с которыми может корреспондировать скрываемый счет), пользователи будут видеть какие то не понятные "Объект не найден", да и сам способ достаточно трудозатратный.

Поэтому, я в этой статье опишу один из простых способов добиться нужного и надежного результата с весьма скромными затратами времени. Итак, попробуем скрыть от левых глаз данные по заработной плате в регистре бухгалтерии с  помощью RLS.

Основная проблема при реализации данной задачи с помощью RLS - это ограничение технологии на работу с регистрами бухгалтерии, ограничения накладывать можно только на измерения регистров, что лишает нас возможности накладывать ограничения на конкретные счета. Исходя из этого, добавим новое измерение с типом данных "Булево" и назовем его "ПроводкаПоЗП". Назначение этого измерения, помечать все проводки в счете дебета или кредита которых присутствует счет учета ЗП. После чего в модуль набора движений регистра нужно внести небольшой код (можно сделать и на подписке, при желании, если совсем нет желания вносить изменения в регистр).

Счет661 = ПланыСчетов.Хозрасчетный.РасчетыПоОплатеТруда;
Если (
Проводка.СчетДт.Родитель = Счет661) ИЛИ (Проводка.СчетКт.Родитель = Счет661) Тогда
   
Проводка.ПроводкаПоЗП = Истина;
Иначе
   
Проводка.ПроводкаПоЗП = Ложь;
КонецЕсли;


Например, для типовой конфигурации УТП этот код можно поместить в событие ПередЗаписью(). Назначение кода, пометить нужные нам проводки.

Ну и теперь остается создать нужную роль и  написать простой запрос на языке RLS для нужного регистра бухгалтерии на право "Чтение:

ГДЕ  ПроводкаПоЗП = ЛОЖЬ

Ну и напоследок, соответствующую роль нужно подключить тем пользователям, для которых должно работать это ограничение. Если у пользователя несколько ролей, для которых определен доступ на регистр бухгалтерии, нужно в этих ролях на право чтения написать следующую конструкцию в роли:

ГДЕ Ложь

что означает, что пользователю разрешен доступ в случае "ИСТИНА". В "ГДЕ Ложь" Ложь будет всегда, а значит пользователю доступ будет запрещен всегда (заумно конечно, но логика есть, если учитывать приоритетность ролей - приоритетнее всегда та роль у которой прав больше).

Как видите, работы тут аж минут на 30 с отладкой.  

А что же придумать, если нужно ограничивать разным пользователям доступ к разным счетам? Используя вышеописанный способ, я бы предложил следующую технологию.

Мое допущение: Врядли нужно добиваться того, что бы была возможность накладывать ограничения аж до конкретного счета.

А раз так, имеет смысл логически учет разбить на разделы учета и накладывать ограничения именно на разделы учета!

Для этого нам понадобиться справочник "Разделы учета", с табличной частью счетов, которые входят в данный раздел. Теперь мы можем в регистре бухгалтерии, вместо измерения "ПроводкаПоЗП", добавить измерение "Раздел учета", немного модифицировать вышеприведенный код для пометки проводок. В принципе все, с одним но, запрос RLS будет немного сложнее. Пример запроса и организация доступа пользователей к разным разделам учета описана в вышеприведенной статье http://infostart.ru/public/124845/.

И ограничение к разным счетам готово!

 P.S. понадобиться еще обработка, с помощью которой пакетом можно будет обрабатывать набор записей регистра бухгалтерии. Для чего, сами догадаетесь :)

 

P.S. по просьбам трудящихся, исправил ошибку в одном слове, раз уж оно так сильно кидается в глаза и хотел бы добавить, что если добавить не балансовое измерение "Счет", тогда можно накладывать ограничение и на каждый счет. Измерение должно быть не балансовым, что бы в регистре не накапливались итоги по этому измерению!

 

постоянный адрес статьи: http://forum1c.com.ua/index.php?topic=3505.0

См. также

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

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

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

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

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

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

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

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