Вход | Регистрация
 

ДобавитьОбработчик

ДобавитьОбработчик
Я
   ДНН
 
27.07.20 - 20:00
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    ДобавитьОбработчик ЭтотОбъект.ПередЗаписью, Тест;
КонецПроцедуры

Процедура ПередЗаписью(Отказ)
    Сообщить("ПередЗаписью");
КонецПроцедуры

Процедура Тест(Пар, Пар2)
    Сообщить("Тест");
КонецПроцедуры

2 вопроса:
1. Почему при записи в сообщениях только "ПередЗаписью". А где "Тест"? Я ведь добавил обработчик через ДобавитьОбработчик.
2. В описании написано, что количество параметров у обработчика события и у процедуры должно совпадать. В обработчике ПередЗаписью - один параметр. С одним параметром была ошибка, что не совпадает коло-во параметров, пришлось два указать, тогда заработало. Неужели в событии ПередЗаписью есть второй скрытый параметр?

Спасибо.
   ДНН
 
1 - 27.07.20 - 20:12
Добавил вот это :

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    ДобавитьОбработчик ЭтотОбъект.ПередЗаписью, Тест;
КонецПроцедуры

И заработало.

То есть ЭтотОбъект в обработке заполнения отличается от ЭтотОбъект  в обработке проверки заполнения?
   acht
 
2 - 27.07.20 - 20:17
(1) Это не ЭтотОбъект отличается, это ОбработкаЗаполнения выполняется совсем не тогда, каогда ты думаешь
   acht
 
3 - 27.07.20 - 20:20
Если в обработчик вешается на объект 1С, то там всегда добавляется первый параметр - объект, вызвавший событие. В твоем случае получается:

Процедура Тест(Источник, Отказ)

Но если вешаешь обработчик на COMобъект, там ЕМНИП такого нет, колчиство параметров совпадает.
   ДНН
 
4 - 27.07.20 - 20:21
(2) тогда уж ЭтотОбъект  отличается, потому что ОбработкаЗаполнения выполняется совсем не тогда, когда я думаю
   acht
 
5 - 27.07.20 - 20:23
(4) Ну вот видишь, ты сам все понял, умничка
   ДНН
 
6 - 27.07.20 - 20:25
(5) ни хрена я не понял. Создается новый объект, у него вызывается событие ОбработкаЗаполнения, объект хранится в памяти. Я записываю его, у него вызывается событие ПередЗаписью. Где я ошибаюсь?
   ДНН
 
7 - 27.07.20 - 20:32
Вроде понял. Если не открывать форму, то работает код из (0). Получается из-за того что была открыта форма объект сначала был передан на клиента, а потом с клиента обратно на сервер, соответственно это уже другой объект.
   acht
 
8 - 27.07.20 - 20:34
(6) Изумительно работает:

Процедура Обработать() Экспорт
    ДанныеЗаполнения = Новый Структура("Реквизит1", Новый УникальныйИдентификатор);
    ЭтотОбъект.Заполнить(ДанныеЗаполнения);
    ЭтотОбъект.Записать();
КонецПроцедуры

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    Сообщить("ОбработкаЗаполнения");
    ДобавитьОбработчик ЭтотОбъект.ПриЗаписи, Тест;
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
    Сообщить("ПриЗаписи");
КонецПроцедуры

Процедура Тест(Источник ,Отказ)
    Сообщить("Тест");
КонецПроцедуры
   ДНН
 
9 - 27.07.20 - 20:34
(8) см (7)
   ДНН
 
10 - 27.07.20 - 20:35
(8) и попробуй не программно создать,а интерактивно
   acht
 
11 - 27.07.20 - 20:35
(7) Я те больше скажу. В УФ он никуда не передается, а создается и компилируется заново при каждом РеквизитФормыВЗначение.
   ДНН
 
12 - 27.07.20 - 20:38
(11) я это и имел ввиду
   acht
 
13 - 27.07.20 - 20:38
Но в общем мысль у тебя верная.
ОбработкаЗаполнения запихала данные в один экземпляр объекта, при создании формы перевалила его в реквизит объекта и этот экземпляр уничтожился.
При записи у тебя создался и скомипилировался второй экземпляр, платформа перелила туда данные из основного реквизита формы и записала уже его.

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