Имя: Пароль:
1C
1С v8
Права на редактирование документа
0 prilforreal
 
15.02.18
19:41
Добренько, волшебники!
Столкнулся с такой проблемой:
Нужно было позволить одному пользователю редактировать одно поле в проведенном документе и только один раз, создал роль для него, поставил в роли галку интерактивное изменение проведенных, в процедуре при открытии написал код:

Если НЕ РольДоступна("ПолныеПрава") тогда
        Если Проведен и (НЕ РольДоступна("ИзменениеКонтрагентаОплаты")) и НЕ Контрагент=Константы.НеизвестныйКонтрагент.Получить() тогда    
            ЭтаФорма.ТолькоПросмотр=Истина;
        ИначеЕсли Проведен и РольДоступна("ИзменениеКонтрагентаОплаты") и Контрагент=Константы.НеизвестныйКонтрагент.Получить() тогда
            Для каждого Элф из ЭтаФорма.ЭлементыФормы Цикл
                Если Элф.Имя="Док_Основание" или Элф.Имя="Закрыть" или Элф.Имя="КНДолги" Тогда
                    Продолжить;
                КонецЕсли;    
                Если (Элф.Имя="Контрагент" или Элф.Имя="ОК") и НЕ Правка тогда
                    Продолжить;
                КонецЕсли;
                Попытка
                    Элф.ТолькоПросмотр=Истина;
                Исключение
                    Элф.Доступность=Ложь;
                КонецПопытки;    
            КонецЦикла;    
        КонецЕсли;
    КонецЕсли;    

В итоге получаю такое, документы, в которых стоит контрагент "НЕИЗВЕСТНЫЙ" выглядят как надо, то есть доступно только одно поле контрагента, но во всех остальных документах доступны все поля! И неограниченное число раз можно его проводить и редактировать, помогите прошу вас найти ошибки)
1 _Дайвер_
 
15.02.18
19:47
(0) ИначеЕсли Проведен и РольДоступна("ИзменениеКонтрагентаОплаты") Тогда Если Контрагент=Константы.НеизвестныйКонтрагент.Получить() тогда
ТвоеУсловие;
Иначе
ТвоеУсловие;
КонецЕсли;
КонецЕсли;
2 _Дайвер_
 
15.02.18
19:47
(1) Контрагент=Константы.НеизвестныйКонтрагент.Получить()
В отдельное условие выведи
3 _Дайвер_
 
15.02.18
19:54
Как-то так делай...

Если НЕ РольДоступна("ПолныеПрава") тогда
    Если Проведен и (НЕ РольДоступна("ИзменениеКонтрагентаОплаты")) тогда
        Если  НЕ Контрагент=Константы.НеизвестныйКонтрагент.Получить() Тогда
            ЭтаФорма.ТолькоПросмотр=Истина;
        ИначеЕсли Контрагент=Константы.НеизвестныйКонтрагент.Получить() Тогда
            ТвоеУсловие;
        КонецЕсли;
    ИначеЕсли Проведен и РольДоступна("ИзменениеКонтрагентаОплаты") Тогда
        Если  Контрагент=Константы.НеизвестныйКонтрагент.Получить() Тогда
            Для каждого Элф из ЭтаФорма.ЭлементыФормы Цикл
                Если Элф.Имя="Док_Основание" или Элф.Имя="Закрыть" или Элф.Имя="КНДолги" Тогда
                    Продолжить;
                КонецЕсли;    
                Если (Элф.Имя="Контрагент" или Элф.Имя="ОК") и НЕ Правка тогда
                    Продолжить;
                КонецЕсли;
                Попытка
                    Элф.ТолькоПросмотр=Истина;
                Исключение
                    Элф.Доступность=Ложь;
                КонецПопытки;    
            КонецЦикла;
        ИначеЕсли НЕ Контрагент=Константы.НеизвестныйКонтрагент.Получить() Тогда
            ТвоеУсловие;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;
4 prilforreal
 
15.02.18
20:10
(3) Пробую
5 prilforreal
 
15.02.18
20:27
(3) Спасибо большое очень помогло, но не до конца, с таким кодом:

    Если НЕ РольДоступна("ПолныеПрава") тогда
    Если Проведен и (РольДоступна("ИзменениеКонтрагентаОплаты")) тогда
        Если  НЕ Контрагент=Константы.НеизвестныйКонтрагент.Получить() Тогда
            ЭтаФорма.ТолькоПросмотр=Истина;
        КонецЕсли;
    ИначеЕсли Контрагент=Константы.НеизвестныйКонтрагент.Получить() Тогда
        Для каждого Элф из ЭтаФорма.ЭлементыФормы Цикл
                Если Элф.Имя="Док_Основание" или Элф.Имя="Закрыть" или Элф.Имя="КНДолги" Тогда
                    Продолжить;
                КонецЕсли;    
                Если (Элф.Имя="Контрагент" или Элф.Имя="ОК") и НЕ Правка тогда
                    Продолжить;
                КонецЕсли;
                Попытка
                    Элф.ТолькоПросмотр=Истина;
                Исключение
                    Элф.Доступность=Ложь;
                КонецПопытки;    
            КонецЦикла;    

    КонецЕсли;
    КонецЕсли;

В документах на неизвестного контрагента доступны все поля вместо одного поля- контрагент.
6 prilforreal
 
15.02.18
20:56
Аж смешно.....Убрал первое не в первой строке и все заработало как нужно