Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Подписка на событие ОбработкаПолученияФормы. Ошибка - Неизвестный идентификатор формы

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

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

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

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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.