Имя: Пароль:
1C
 
Параметры обработчика подписки на события
0 selenat
 
02.08.10
13:06
Чего-то на ИТСе как-то скудно инфы по механизму подписки на события. Кто скажет с ходу, почему в событии ПриЗаписи нет параметров РежимЗаписи и РежимПроведения?
1 Maxus43
 
02.08.10
13:08
(0) в доп свойства пиши что хочеш, их видно из подписчиков
2 butterbean
 
02.08.10
13:08
потому что они ПередЗаписью
3 selenat
 
02.08.10
13:10
(1) как это делается?
4 selenat
 
02.08.10
13:13
(2) в перед записью - эт понятно. Мне в ПриЗаписи надо...
5 butterbean
 
02.08.10
13:15
(4) их там просто нет
6 Maxus43
 
02.08.10
13:15
(3) в УПП например везде напихано:

   //Сделаем переменные доступными из подписок на события
   ДополнительныеСвойства.Вставить("СтруктураШапкиДокумента", СтруктураШапкиДокумента);
7 selenat
 
02.08.10
13:17
(6) а в каком месте напихано?
8 selenat
 
02.08.10
13:19
Прочитал про ДополнительныеСвойства в СП. Я правильно понимаю, что можно создать подписку на событие ПередЗаписью, там пихнуть в ДополнительныеСвойства эти режимы и использовать в ПриЗаписи?
9 Maxus43
 
02.08.10
13:21
(7) в УПП напихано в основном в обработке проведения. Но юзать можно не только там
(8) ну это в отладчике погляди, точно не скажу.
10 Maxus43
 
02.08.10
13:21
(8) в самом документе это пихается, доп свойства. не в подписках. Подписки их видят просто
11 selenat
 
02.08.10
13:23
(9) в обработке проведения? Любопытно. Событие ПриЗаписи отрабатывается до обработки проведения. С чего бы в обработке проведения туда пихать что-то? О-о
12 selenat
 
02.08.10
13:24
(10) не хотелось бы курочить сам документ. Щас попробую через обработчик перед записью....
13 Maxus43
 
02.08.10
13:24
(11) там используется для других подписок, не для подписки "ПриЗаписи". Я про суть говорю, что эти доп.свойства - видны из подписок
14 selenat
 
02.08.10
13:28
(13) понял, спасибо.
15 selenat
 
02.08.10
13:37
Получилось передать из ПередЗаписью через дополнительные свойства в ПриЗаписи. Максус, спасибо!
16 Maxus43
 
02.08.10
13:38
(15) да незачто)
17 selenat
 
03.08.10
17:50
Еще вопрос по подписке на события. Хочу для набора записи регистра накопления отслеживать вызван ли он из нужного мне места. Для этого в этом месте пишу:

           СтруктураДополнительныхСвойств = новый Структура;
           СтруктураДополнительныхСвойств.Вставить("МойВызов",Истина);
           НаборЗаписей.ДополнительныеСвойства.Вставить("СтруктураДополнительныхСвойств",СтруктураДополнительныхСвойств);

В подписке на события Перед записью вставляю код:

   СтруктураДополнительныхСвойств = Новый Структура;
   ЕстьСтруктураДополнительныхСвойств = Источник.ДополнительныеСвойства.Свойство("СтруктураДополнительныхСвойств",СтруктураДополнительныхСвойств);
   //ЕстьМойВызов = Источник.ДополнительныеСвойства.СтруктураДополнительныхСвойств.Свойство("МойВызов",МойВызов);
   Если НЕ ЕстьСтруктураДополнительныхСвойств Тогда
       Отказ = Истина;
   ИначеЕсли (НЕ СтруктураДополнительныхСвойств.МойВызов) Тогда
       Отказ = Истина;
   КонецЕсли;    
   СтруктураДополнительныхСвойств.Удалить("МойВызов");
   Источник.ДополнительныеСвойства.Вставить("СтруктураДополнительныхСвойств",СтруктураДополнительныхСвойств);

Но откуда бы не вызывалась запись набора, МойВызов всегда есть и равен Истина. Почему он не прибивается после вызова из моего места?
18 selenat
 
04.08.10
08:54
Вопрос (17) актуален
19 selenat
 
04.08.10
09:48
Проверил в отладчике, что после записи набора, вызываемой из нужных мне мест, МойВызов очищается из структуры. Но почему-то при входе в ПередЗаписью из другого места программы, где я его не передаю, он все равно есть и равен истина. Как так может быть?
20 Maxus43
 
04.08.10
10:12
СтруктураДополнительныхСвойств = новый Структура; - это лишнее помоему вобще. Она уже есть эта структура, и не пустая помоему.

(17) Первый код куда вставлен? в документ? Эта структура принадлежит именно документу. В подписке на событие удалять чтото из структуры - смысла нет. В рамках Подписки - удалится, в рамках документа - останется. Подписка не возвращает это свойство назад в документ. Имхо... надо копать
21 selenat
 
04.08.10
10:14
(20) весь код в общем модуле. Инициируется подписками на события документа...
22 selenat
 
04.08.10
10:16
(20) СтруктураДополнительныхСвойств  - это просто переменная, которую нужно определить как структуру. Это не предопределенный в платформе объект...
23 Andry888
 
04.08.10
10:17
(17) "Для этого в этом месте пишу:" точное место где это воткнуто можно озвучить?
24 Maxus43
 
04.08.10
10:18
(22) путаеш только)
Если первый код пихает всегда истину, то почему не должно быть истиной... в каких местах это всё выполняется непонятно
25 selenat
 
04.08.10
10:23
(23) Код

СтруктураДополнительныхСвойств = новый Структура;
           СтруктураДополнительныхСвойств.Вставить("МойВызов",Истина);
           НаборЗаписей.ДополнительныеСвойства.Вставить("СтруктураДополнительныхСвойств",СтруктураДополнительныхСвойств);

написан в процедуре общего модуля, которая выполняется как обработчик подписки на событие ПриЗаписи некоторых документов. В этой процедуре я программно записываю движения в определенный регистр. Цель этих действий в том, чтобы не позволить прибить мои движения в обработкеПроведения. Чтобы процедура, которая прибивает все движения документа, мои движения оставила в покое...
26 selenat
 
04.08.10
10:26
(24) Потому что когда выполняется запись набора, я пытаюсь прибить из дополнительных свойств набора эту штуку. Т.е. работает как флаг. Перед нужным мне вызовом истина, когда отработали - ложь.
27 selenat
 
04.08.10
10:26
+26 точнее не ложь, а вообще удаляю. Но ложь тоже пробовал присваивать - та же фигня...
28 Maxus43
 
04.08.10
10:37
"процедура, которая прибивает все движения документа" - это какая?
29 selenat
 
04.08.10
10:39
(28)
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ);
30 selenat
 
04.08.10
10:40
+29 в начале обработки проведения любого документа. Мне нужно, чтоб мои движения она не трогала. При этом хочу обойтись без вставок в типовой код, одними подписками на события...
31 Maxus43
 
04.08.10
10:43
(29) Причем тут подписки? там кода то в док вставить... копейки. помоему не теми средствами задачку решаем...
32 mikecool
 
04.08.10
10:44
Процедура ПередЗаписью()
   ДополнительныеСвойства.Вставить("Модифицированность", Модифицированность);
   ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
КонецПроцедуры

в обрабботчике подписки
   Источник.ДополнительныеСвойства.Свойство("Модифицированность", Модифицированность);
   Если Модифицированность = Неопределено Тогда
       Модифицированность = Ложь;
   КонецЕсли;
   
   Источник.ДополнительныеСвойства.Свойство("РежимЗаписи", РежимЗаписи);
   
   Источник.ДополнительныеСвойства.Свойство("ОбработкаУдаленияПроведения", ОбработкаУдаленияПроведения);
   Если ОбработкаУдаленияПроведения = Неопределено Тогда
       ОбработкаУдаленияПроведения = Ложь;
   КонецЕсли;
33 selenat
 
04.08.10
10:48
(31) это без вопросов. Но хотелось бы обойтись без этого.
(32) я тебе даже больше скажу. Это работает не только из процедуры ПередЗаписью, но и из подписки на событие ПередЗаписью. А вот проблему (17) победить не удается...
34 mikecool
 
04.08.10
10:51
(33) в 17 - начало кода из модуля набора записей?
35 selenat
 
04.08.10
10:53
(34) первая часть кода в общем модуле, откуда вызывается запись набора. Вторая часть кода тоже в общем модуле, вызывается по подписке на событие ПередЗаписью моего набора записей регистра накопления...
36 selenat
 
04.08.10
11:11
Не, я конечно могу вставить несколько строчек в
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ);
Но все-таки хочется отработать чисто, чтобы все мои доработки сидели в отдельном модуле, а код типовой оставался нетронутым...
37 selenat
 
04.08.10
11:35
(32) кстати да. Я перемудрил слегка...
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн