|
Проверить, изменен ли документ (сравниваем объект и ссылку) | ☑ | ||
---|---|---|---|---|
0
Kifsif
26.11.14
✎
11:50
|
УТ 10.
Задача: не дать пользователю без соответствующих прав проводить документы по БУ. Заведена роль - МенеджерБезПроведенияПоБУ. Заведена подписка на события на все документы - перед записью. В общем модуле: Процедура ОбработатьФлагБУ(Источник, Отказ) Экспорт ДокументОбражаетсяВБУ = (Источник.Метаданные().Реквизиты.Найти("ОтражатьВБухгалтерскомУчете") <> Неопределено); // Не все документы отражаются в БУ. Например, счет не отображается. Если НЕ ДокументОбражаетсяВБУ Тогда Возврат; КонецЕсли; ЕстьПравоИзменятьОтражениеВБУ = РольДоступна("МенеджерПоЗакупкам") ИЛИ РольДоступна("МенеджерПоПродажам") ИЛИ РольДоступна("ПолныеПрава"); Если ЕстьПравоИзменятьОтражениеВБУ Тогда Возврат; КонецЕсли; ОбъектОтражатьВБухгалтерскомУчете = Источник.ОтражатьВБухгалтерскомУчете; // Текущее состояние флага. // Если объект новый, то просто проверяем - есть ли права провести документ в БУ. Если Источник.ЭтоНовый() Тогда Если НЕ ЕстьПравоИзменятьОтражениеВБУ И ОбъектОтражатьВБухгалтерскомУчете Тогда Источник.ОтражатьВБухгалтерскомУчете = Ложь; Источник.ОтражатьВНалоговомУчете = Ложь; // Документ не может проводиться по налоговому учету, если он не проводится по бухгалтерскому учету. Источник.ОтражатьВУправленческомУчете = Истина; // Проверть, стоял ли флаг до этого не будем. Флаг всегда должен быть взведен. ИнформироватьПользователя("Нет прав на проведение документа в бухгалтерском учете. " + "Есть права только на проведение документа по управленческому учету. " + "Флаги изменены."); Отказ = Ложь; Возврат; КонецЕсли; Возврат; КонецЕсли; // Если объект уже существовал в базе, был проведен в БУ то пользователю вообще нельзя ничего с ним делать. СсылкаОтражатьВБухгалтерскомУчете = Источник.Ссылка.ОтражатьВБухгалтерскомУчете; // Существовавшее ранее состояние флага (если только документ не новый). Если СсылкаОтражатьВБухгалтерскомУчете Тогда ИнформироватьПользователя("Этот объект уже был проведен в бухгалтерском учете. " + "Нет прав изменять этот документ. " + "Документ не записан."); Отказ = Истина; КонецЕсли; КонецПроцедуры Проблема такая: если юзер открыл или создал документ, нажал записать. Не закрывая документ накидывает флаг БУ и проводит прекрасно по БУ. Иными словами, если документ закрывался, то код работает корректно.А вот если не закрывался, то ссылка-то сохранилась. Как можно победить? |
|||
1
Лефмихалыч
26.11.14
✎
11:52
|
а просто снять галочку с нужных полей в настройках роли - не вариант?
|
|||
2
Господин ПЖ
26.11.14
✎
11:54
|
а что побеждать то?
вся эта городьба работает только на Если Источник.ЭтоНовый() Тогда |
|||
3
Kifsif
26.11.14
✎
11:55
|
Типовые роли не правим. Обходимся только добавленными обхетами и модулями.
|
|||
4
Kifsif
26.11.14
✎
11:56
|
(2) Надо не только на новый, но и на существовавший документ сделать механизм.
|
|||
5
Господин ПЖ
26.11.14
✎
11:58
|
(4) ну так сравнивай, в чем проблема то
|
|||
6
Крошка Ру
26.11.14
✎
11:59
|
(4) Если РежимЗаписи = РежимЗаписиДокумента.Проведение ?
|
|||
7
Господин ПЖ
26.11.14
✎
11:59
|
тут вообще в принципе параллельно - новый он или старый, весь вопрос в разнице состояний между ссылкой и объектом в момент срабатывания подписки
|
|||
8
Крошка Ру
26.11.14
✎
11:59
|
Ну только ПередЗаписью() проверять
|
|||
9
Крошка Ру
26.11.14
✎
12:00
|
(7) А если перепроведение?
|
|||
10
Крошка Ру
26.11.14
✎
12:00
|
(7) Состояние и там, и там одинаково
|
|||
11
JeyRico
26.11.14
✎
12:01
|
В ПередЗаписью() снять галочку БУ у тех кому нельзя проводить по БУ.
|
|||
12
Господин ПЖ
26.11.14
✎
12:02
|
(9) нет роли - досвидос, какое перепроведение
|
|||
13
Господин ПЖ
26.11.14
✎
12:02
|
(10) там еще наличие роли анализируется...
|
|||
14
Крошка Ру
26.11.14
✎
12:04
|
(12) Так вроде ж роли не трогаем?
Создать и провести ведь может и тот у кого есть право, а потом "бесправный" тоже может ОК нажать. Это ведь тоже отлавливать надо. А здесь разницы состояний между ссылкой и объектом не будет. |
|||
15
Господин ПЖ
26.11.14
✎
12:07
|
(14) >Так вроде ж роли не трогаем?
эм... типовые он не трогает, новую завел: "Заведена роль - МенеджерБезПроведенияПоБУ" т.е. по идее так: в новом не должно быть БУ, в старом разницы между ссылкой и объектом... может он перепровести "не трогая" бу - я не понял |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |