Имя: Пароль:
1C
 
Программно создать событие ПриСозданииНаСервере?
, ,
0 spiller26
 
21.04.21
15:29
Есть форма "ФормаГруппы" справочника "ВидыВходящихДокументов"
Нужно программно создать событие для этой формы. В модуле формы пусто, расширение не предлагать.
1 RomanYS
 
21.04.21
15:33
Программно можно назначить обработчик (вроде УстановитьДействие). Что значит "программно создать" не очень понятно
2 spiller26
 
21.04.21
15:36
(1) Ну да установить УстановитьДействие, вот так примерно.
ЭтаФорма.УстановитьДействие("ПриСозданииНаСервере", "ПриСозданииНаСервере");
3 RomanYS
 
21.04.21
15:37
(2) И.. вопрос закрыт?
4 spiller26
 
21.04.21
15:39
(2) где прописывать в модуле?
5 butterbean
 
21.04.21
15:40
(4) где угодно, главное чтобы выполнялось на сервере
6 spiller26
 
21.04.21
15:41
(5) Т.е. само подтянется?
7 spiller26
 
21.04.21
15:47
Короче сделал так. правильно-неправильно решать не мне, но работает.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭлементОрг = Элементы.Добавить("абтОрганизацияПравообладатель", Тип("ПолеФормы"),);
    ЭлементОрг.Вид = ВидПоляФормы.ПолеВвода;
    ЭлементОрг.ПутьКДанным = "Объект.абтОрганизацияПравообладатель";
    ЭлементОрг.РастягиватьПоГоризонтали = Истина;
    ЭлементОрг.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
    ЭлементОрг.КнопкаОчистки = Истина;
    ЭлементОрг.ЦветТекстаЗаголовка = Новый Цвет(255,140,0);
КонецПроцедуры

Попытка
    УстановитьДействие("ПриСозданииНаСервере", "ПриСозданииНаСервере");
Исключение
КонецПопытки;
8 spiller26
 
21.04.21
15:48
(7) Попытку сделал, т.к. проходя клиента, начинает ругаться.
9 lubitelxml
 
21.04.21
15:49
(8) потому что на сервере надо делать
10 lubitelxml
 
21.04.21
15:50
Если "В модуле формы пусто" - то откуда "Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)" появилось? и зачем вообще все это, почему просто не использовать "ПриСозданииНаСервере"?
11 spiller26
 
21.04.21
15:51
(10) Я писал его.
12 RomanYS
 
21.04.21
15:55
(8) тогда так

&НаСервере
Процедура _ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗаписьЖурналаРегистрации("!");
КонецПроцедуры

#Если Сервер Тогда
    УстановитьДействие("ПриСозданииНаСервере", "_ПриСозданииНаСервере");
#КонецЕсли
13 spiller26
 
21.04.21
15:59
(12) Спасибо! Забыл про это совсем.
14 RomanYS
 
21.04.21
16:01
(13) Для меня несколько неожиданно было что код "подвала" выполняется и на сервере и на клиенте
15 spiller26
 
21.04.21
16:19
(14) Честно для меня тоже.
16 mikecool
 
21.04.21
16:22
(14) что же неожиданного? директив разделения нет, значит - везде
17 RomanYS
 
21.04.21
16:24
(16) Везде т.е. дважды? В каком порядке например известно?
18 acht
 
21.04.21
16:38
(11) Что мешало выбрать в форме нужный обработчик, если ты все равно писал код в модуле?
19 lodger
 
21.04.21
16:48
(17) весь код формы сперва компилится и исполняется на сервере.
20 RomanYS
 
21.04.21
17:03
(19) А почему на сервере несколько раз выполняется (2 иногда 4 раза)?
&НаСервере
Процедура _ЗаписьЖурналаРегистрации(текст)
    ЗаписьЖурналаРегистрации(текст);
КонецПроцедуры

#Если Сервер Тогда
    ЗаписьЖурналаРегистрации("Сервер");
#КонецЕсли
#Если Клиент Тогда
    _ЗаписьЖурналаРегистрации("Клиент");
#КонецЕсли
21 toypaul
 
гуру
21.04.21
18:43
хм. интересно. а для чего такой изврат? почему просто не прописать событие в свойствах формы?
22 VladZ
 
21.04.21
18:46
(0) Расскажи в целом про задачу.
Очень интересно, в каких случаях это нужно.
23 lodger
 
22.04.21
12:12
(20) сперва форма создаётся, компилится и выполняется. это При Создании На Сервере.
потом форма инициализируется с учётом данных. это При Чтении На Сервере.
24 acht
 
22.04.21
12:16
(23) Тока оно сначала при чтении, а потом при создании =)
25 acht
 
22.04.21
12:19
А потом открывается. На клиенте. Это и есть момент второй компиляции.
26 RomanYS
 
22.04.21
12:20
(23) Спасибо. Только насколько можно судить по этой теме "При Создании На Сервере" происходит до события  ПриСозданииНаСервере иначе бы у ТС ничего не получилось.
Единственное что точно понятно, что этот код может выполняться по несколько раз и разных контекстах. И общая рекомендация без необходимости туда ничего не писать.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший