![]() |
|
ДобавитьОбработчик | ☑ | ||
---|---|---|---|---|
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
|
Но в общем мысль у тебя верная.
ОбработкаЗаполнения запихала данные в один экземпляр объекта, при создании формы перевалила его в реквизит объекта и этот экземпляр уничтожился. При записи у тебя создался и скомипилировался второй экземпляр, платформа перелила туда данные из основного реквизита формы и записала уже его. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |