Имя: Пароль:
1C
1С v8
Структура документа ДополнительныеСвойства: не "выживает" свойство.
0 Target1025
 
25.07.23
04:35
Занимаю в расширение процедуру "ПриКопировании", в ДопСвойства вставляю ссылку на копируемый документ "ДокументКопирования". Занимаю в расширение Процедуру ПриЗаписи, анализирую в момент исполнения процедуры ДополнительныеСвойства, этой записи "ДокументКопирования" уже нет.
ps. Это нужно для копирования значений регистра "дополнительныеСвойства" документа.

&После("ПриКопировании")
Процедура Расш_ПриКопировании(ОбъектКопирования)
    ДополнительныеСвойства.Вставить("ДокументКопирования", ОбъектКопирования.Ссылка);
КонецПроцедуры

&После("ПриЗаписи")
Процедура Расш_ПриЗаписи(Отказ)
    ДокументКопирования = Неопределено;
    Если НЕ ДополнительныеСвойства.Свойство("ДокументКопирования", ДокументКопирования) Тогда
        Возврат; // << вот тут вылетаем так как "ДокументКопирования" отсутствует
    КонецЕсли;


https://ibb.co/PWdpPD8
1 Target1025
 
25.07.23
05:07
(0) Поправка: "копирования регистра ДополнительныеСведения", не ДополнительныеСвойства.
2 RomanYS
 
25.07.23
09:19
(0) в УФ объект не живёт с формой, поэтому думай, как тебе это свойство закэшировать в форме
3 mistеr
 
25.07.23
13:38
(0) Структура ДополнительныеСвойства предназначена для передачи данных межлу обработчиками и/или подписками одного события.
При начале обработки другого события структура инициализируется заново.

Нужно, как уже советуют, сохранить эти данные в реквизите или в форме.
4 RomanYS
 
25.07.23
13:48
(3) >> При начале обработки другого события структура инициализируется заново.
Нет. Между событиями передается нормально, но только для одного объекта. Но в случае УФ экземпляр объекта создается заново
5 Target1025
 
28.07.23
12:21
Подниму тему. Если я занимаю РеализациюТоваровУслуг в расширение и там добавляю реквизит в объект, то я вижу проблему: у меня сохраняется в объекте ссылка на объект копирования. Из-за чего я не могу удалить объект копирования при обрезке базы, так как на  объект копирования лежит ссылка в скопированном. Удалить ссылку, вроде как не получится - мне требуется скопировать регистр в момент когда срабатывает метод "ПриЗаписи" модуля объекта, а в этот момент документ уже попал в базу со ссылкой на скопированный документ.
6 RomanYS
 
28.07.23
12:36
(5) не нужно добавлять реквизит в данные. Нужно добавить в реквизиты ФОРМЫ и аккуратно через него дотащить от объекта копирования до ДопСвойств перед запись ОБЪЕКТА
7 Target1025
 
28.07.23
13:08
(6) Не понимаю идеи. Процедура ПриКопировании() исполняется в модуле объекта и имеет доступ только к реквизитам объекта.
8 RomanYS
 
28.07.23
13:25
(7) однако в параметрах формы есть ссылка на объект копирования
Параметры.ЗначениеКопирования

Вот её нужно не потерять и донести до ПередЗаписьюНаСервере и засунуть в доп свойства ОБЪЕКТА
Задача решена))
9 Target1025
 
28.07.23
13:54
(8) Задумка красивая, но не выживает. В момент ПередЗаписьюНаСервере() в модуле формы я пишу в ДОпсведения:

    Объектик = РеквизитФормыВЗначение("Объект");
    Объектик.ДополнительныеСвойства.Вставить("ОбъектКопированияФорма",ЭтотОбъект.Расш_ОбъектКопированияФорма);


нажимаю F11, перехожу в процедуру "ПередЗАписью" в модуле объекта, а там содержимое ДополнительныеСвойства выглядит уже так:
https://ibb.co/mJkHm1B

Удалился мой ОбъектКопированияФорма, появились ЕстьСчетФактура, НомерСчетаФактуры, СтатусДокумента, ТребуетсяСчетФактура.
10 RomanYS
 
28.07.23
13:58
(9) Эээ... зачем "объектик"!?

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    ТекущийОбъект.ДополнительныеСвойства.Вставить("ОбъектКопированияФорма",ЭтотОбъект.Расш_ОбъектКопированияФорма);
КонецПроцедуры
11 Target1025
 
28.07.23
14:05
(10) Да, спасибо, нашел отладкой.