среда, 18 июня 2014 г.

Закрыть бухгалтерский счет в ОСВ

Очень часто главные бухгалтера просят, что бы другим бухгалтерам было не видно оборотов по определенному счету, например зарплат или капитала, да по какому угодно.
Я слышал про такие просьбы, но ни разу не сталкивался по работе с такой ерундой. И вот на днях такая задача пришла и ко мне. Прочитав множество веток на Мисте и Инфостарте, пришел к следующим выводам:
1) Блокировать надо с помощью RLS или переписывать все отчеты.
2) Переписывать все отчеты- это безумие.
3) Блокировать нужно либо План Счетов либо Регистр Бухгалтерии.
4) В регистре бухгалтерии можно накладывать блокировки только на БАЛАНСОВЫЕ измерения. 

Итак, вначале попробовал наложить блокировку на план счетов, и вроде бы даже получилось.
Результат был таким: В ОСВ всё нормально, в ОСВ по счету тоже хорошо, но то ли в карточке счета, то ли в анализе счета, сделанному по корреспондирующему счету вылезают Объект не найден, и все суммы. Т.е. смысла в такой блокировке нету никакого. Но она довольно простая, и если надо заблочить только ОСВ, то в принципе подходит. Делается она довольно просто:
1) Ищем роли, которые дают доступ к чтению и изменению плана счетов.
2) В этих ролях добавляем новое ограничение доступа к данным.
3) В запросе на ограничение я просто перечислил счета:
"Хозрасчетный ГДЕ НЕ (Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоПрочимОперациям)
            ИЛИ Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоПредоставленнымЗаймам)
            ИЛИ Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоВозмещениюМатериальногоУщерба)
            ИЛИ Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоПрочимОперациям))"
Это я блокировал предопределенные 73 счета. Если счета не предопределенные, тогда надо делать регистр сведений, и получать эти счета оттуда, или искать по коду, например 
Хозрасчетный.Код= "ххх".

Как я и сказал, этот вариант мне не подошел, и я пошел на кардинальный шаг. Добавил балансовое измерение в регистр бухгалтерии, с типом Булево, и в модуле набора записей прописал код для выставление этого "Флага" в Истину при условие, что счет Дебета или Счет Кредита равен одному из блокируемых счетов.

После этого наложил блокировку в ролях чтения и изменения регистра бухгалтерии на это измерение, условие опять же элементарное "Хозрасчетный ГДЕ НЕ Хозрасчетный.Пометка".
Блокировка только на Чтение, на добавление записей блокировок не устанавливал.

Вот теперь обладатели этих ролей не смогут увидеть нигде записи регистра с блокируемыми счетами, но записать данные они смогут.

Опять же это влечет за собой некорректную ОСВ и всё такое у обладателей этих ролей, ведь блокируется полностью запись регистра бухгалтерии, но у Глав Буха все будет отображаться корректно. 

Объяснять Главному Бухгалтеру, что это неправильно - себе дороже, поэтому я просто сделал то, что попросили.

И еще нюанс один, в каком-то релизе Бух 3, после настройки блокировок никакого эффекта не последовало, и оказалось, что отчеты формируются в привилегированном режиме, так что это пришлось тоже подредактировать(В общем модуле БухгалтерскиеОтчетыВызовСервера присваивался параметр формирования ИспользоватьПривилегированныйРежим). 

PS: Чтобы у ГБ всё корректно отображалось нужно ей дать роль либо полные права, либо администратора, либо создать копии прав на чтение и добавление данных регистра бухгалтерии, и инвертированным условием "Хозрасчетный ГДЕ Хозрасчетный.Пометка", и дать эти роли ГБ.