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

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

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

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

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

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

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

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

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

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

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

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

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

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