|   |   | 
| 
 | Проверить, изменен ли документ (сравниваем объект и ссылку) | ☑ | ||
|---|---|---|---|---|
| 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) >Так вроде ж роли не трогаем?
 эм... типовые он не трогает, новую завел: "Заведена роль - МенеджерБезПроведенияПоБУ" т.е. по идее так: в новом не должно быть БУ, в старом разницы между ссылкой и объектом... может он перепровести "не трогая" бу - я не понял | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |