Имя: Пароль:
1C
1С v8
Подписка на событие ОбработкаПолученияФормы. Ошибка - Неизвестный идентификатор формы
,
0 IvanGorbunov
 
20.01.19
22:37
Надо, чтобы при открытии любого из документов при определенном условии элементы формы делалась недоступными. Делаю через подписку на событие "ОбработкаПолученияФормы" так:

Процедура ОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт

    Если ВидФормы = "ФормаОбъекта" Тогда
            
        СтандартнаяОбработка = Ложь;
            
        ДокументОбъект = Параметры.Ключ;
        
        ЭлементОбъект = ДокументОбъект.ПолучитьОбъект();
        ВыбраннаяФорма = ЭлементОбъект.ПолучитьФорму("ФормаДокумента");
        ВыбраннаяФорма.ТолькоПросмотр = Истина;
        
        ВыбраннаяФорма.Открыть();
            
    КонецЕсли;

КонецПроцедуры

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

P.S. это нужно для всех документов, поэтому подписка на событие
1 palsergeich
 
20.01.19
22:46
Этот метод не для этого.
Здесь вы можете переопределить открываемую форму, но самой формы еще нет. И действий с ней делать нельзя.
2 IvanGorbunov
 
20.01.19
22:49
(1) а как можно запретить редактирование непроведенных документов, для всех документов, не снимая с поддержки каждый?
3 palsergeich
 
20.01.19
22:51
Подпиской на событие.
Если объект не новый и Проведен = Ложь - отказ передЗаписью в модуле объекта.
4 palsergeich
 
20.01.19
22:52
Что то типо такого
Если не ЭтоНовый() И Не Проведен Тогда
Отказ = Истина
КонецЕсли
5 IvanGorbunov
 
20.01.19
22:52
(3) надо чтоб при открытии человек не начинал перебивать, допустим товары в документе, а потом узнал, что редактировать нельзя, а сразу это понял
6 palsergeich
 
20.01.19
22:52
(5) Самое простое - административный путь.
7 IvanGorbunov
 
20.01.19
22:53
(6) ?
8 palsergeich
 
20.01.19
22:54
Но я в первый раз вижу требование на запрет изменений непроведенных. Логически - пока документ не проведен - он не влияет на учет и в принципе можно делать что угодно.
Обычно ставят запрет на проведенные документы.
(7) На уровне регламентов и инстукций с которыми ознакамливают ответственных лиц. Ну подписку втыкаешь. Регламент видели - Ваши проблемы.
9 IvanGorbunov
 
20.01.19
22:55
(8) ой, блин, я имел ввиду запрет изменений проведенных)
10 palsergeich
 
20.01.19
22:59
Никак.
Без переработки.
11 IvanGorbunov
 
20.01.19
23:01
понял, спасибо
12 palsergeich
 
20.01.19
23:07
Печаль в чем - в том что в обработке в (0) ты можешь сделать так
Процедура ОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт
Параметры.Вставить("ТолькоПросмотр", Истина)
КонецПроцедуры
И форма будет открыта только на просмотр.
Но в этом событии ты не знаешь состояние объекта проведен он или нет.
13 palsergeich
 
20.01.19
23:10
А нет. Все клево.
14 palsergeich
 
20.01.19
23:10
Ща код напишу
15 IvanGorbunov
 
20.01.19
23:11
(14) да я тоже вроде догадался)
16 palsergeich
 
20.01.19
23:16
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    Если Параметры.Свойство("Ключ") Тогда
        Если Параметры.Ключ.Проведен Тогда
            Параметры.Вставить("ТолькоПросмотр", Истина);
        КонецЕсли;
    КонецЕсли;
    // Вставить содержимое обработчика.
КонецПроцедуры

Но как показал тест - закрывается не все, а только приведет все элементы управления, связанные с реквизитами формы, а также элементы управления, для которых установлено свойство ИзменяетДанные
17 IvanGorbunov
 
20.01.19
23:17
(16) отлично, спасибо, выручили. Насколько лучше у умных людей спросить, чем несколько часов рыть интернет и писать кучу неправильного кода.)
18 palsergeich
 
20.01.19
23:18
Но бОльшая часть реквизитов и все ТЧ - заблокированы.
ДС, таблицы значений - нет. И в этом печаль
19 palsergeich
 
20.01.19
23:18
(17) Потестируй, у меня на стенде результат оказался близкий к тому что Вам нужно, но не идеальный.
20 IvanGorbunov
 
20.01.19
23:20
(19) та вроде абсолютно все закрыто, если разработчики и забыли где-то указать "ИзменяетДанные", то и ладно.
21 palsergeich
 
20.01.19
23:23
(20) Ну отлично.
Удачи
22 IvanGorbunov
 
20.01.19
23:25
(21) теперь можно хоть пойти спать спокойно)