Имя: Пароль:
1C
1С v8
Помогите разобраться с контекстом формы
,
0 vde69
 
18.07.18
13:11
преамбула:
1. УФ объекта, у объекта есть ТЧ "Расшифровка", в реквизите формы Объект.Расшифровка добавлена колонка СуммаПлатежаТекущая (в самом обьекте в ТЧ такой колонки нет)
2. есть команда объекта, вынесена на форму.

теперь магические действия:
1. что либо изменяю на форме (она становится модифицированой, со звездочкой),
2. жму на команду, при этом платформа сама вызывает процедуру записи объекта из формы выполняется полностью все процедуры как обьекта так и формы
3. только тут отладчик попадает в модуль команды, там я поставил только "Оповестить"
4. это оповещение нормально приходит в мою форму и там я принудительно заполняю поле реквизита СуммаПлатежаТекущая значение 55
5. после этого в форме реквизит СуммаПлатежаТекущая обнуляется

чего я только не пробовал, и ЭтаФорма.Прочитать() и ОбновитьОтображениеДанных() нифига не помогает... замер производительности не видит никакого постороннего кода после п.5

у меня только одно предположение, что выполнение команды происходит в каком-то отдельном контексте и этот контекст передается форме и ее процедурам, а после завершения команды форма получает старый контекст.

вполне возможно, что я не прав, но тогда растолкуйте что происходит и что делать....
1 Вафель
 
18.07.18
13:14
нужно заполнять "ПослеЗаписиНаСервере"
2 vde69
 
18.07.18
13:18
там все сделано, суть проблемы в том, что ПослеЗаписиНаСервере выполняется и там реквизит заполнен, но по окончании выполнения КОМАНДЫ он очищается (возвращается к старому контексту)
3 lodger
 
18.07.18
13:19
(2) а зачем вы записываете объект ради выполнения команды формы? отказаться от записи никак?
4 Вафель
 
18.07.18
13:20
(2) в твоем алгоритме такого нет
5 vde69
 
18.07.18
13:23
(3) это делаю не я а платформа, это у них такая неожиданная фича.... любая команда если получает на вход модифицированый объект его записывает автоматом.

(0) единственно как мне пока удалось вывернутся - через ПодключитьОбработчикОжидания после выполнения команды и в нем принутительно заполнить нужные мне поля. Но это как-то через жопу...
6 Вафель
 
18.07.18
13:25
(5) можено делать команды на заполнение объекта (без записи). кури БСП
7 vde69
 
18.07.18
13:25
(4) самое интересное если я просто жму записать - все ок, а вот если жму команду - обнуляет (точнее не заполняет в моем контексте а заполняет где-то в другом контексте)
8 vde69
 
18.07.18
13:26
(6) если тип параметра команды ДокументСсылка - то нельзя
9 Вафель
 
18.07.18
13:29
(8) команды в БСП - это восвсем не платформенные команды
10 Вафель
 
18.07.18
13:29
ну а так похоже на ошибку платформы. Пиши в 1с
11 Новиков
 
18.07.18
14:04
Приведи или весь код, или демо-cf.
12 lodger
 
18.07.18
14:27
(5) "неожиданная фича" - команда формы или конфы? пробовали менять параметры? свойства команды?
имхо, команда "сложи а и б положи в ц" в контексте открытого объекта никогда и не требовала предварительной записи.
13 Deon
 
18.07.18
14:34
(0) А флажок "Изменяет данные" у команды стоит же? Платформа же в этом случае, вроде, перечитывает данные формы после выполнения твоей команды
14 Tonik992
 
18.07.18
14:37
(0) обнуление этого реквизита - это нормально и правильно.
Потому что после записи объект перечитывается и Объект на форме обновляется.. А у самого объекта нету ваших добавленных реквизитов/колонок, поэтому они становятся незаполненными. Все ваши вручную добавленные колоночки, реквизиты очищаются правильным образом..
ПослеЗаписиНаСервере() вам надо перезаполнять эти поля, вот и всё.
15 Tonik992
 
18.07.18
14:43
и кстате в (1) уже советовали сделать. Никакая это не ошибка 1С.
Создайте прямо сейчас пустую конфу, документ с ТЧ. А на форме в эту ТЧ добавьте реквизит..
Попробуйте этот добавленный реквизит заполнить, и после этого записать/провести документ. Увидите, что значение реквизита будет очищено.
Никакой ошибки тут нет.
16 Eiffil123
 
18.07.18
15:10
(14) +1
17 Вафель
 
18.07.18
15:12
Но тс утверждает, что в после записи все заполнено
18 Новиков
 
18.07.18
15:19
Именно поэтому нужен или весь код, или cf-демо, т.к. тут, Вафель прости, но явна где-то вафля какая-то сказочная.
19 vde69
 
18.07.18
15:23
(13) проверил - "Изменяет данные" не помогает
(14) ПослеЗаписи - у меня стоит обработчик который заполняет этот реквизит, этот обработчик нормально отрабатывает и в модуле команды отладчиком видно, что все поля и реквизиты заполнены правильно.

а вот как только команда отработала - реквизиты меняются... при этом никакого кода не выполняется...
20 Tonik992
 
18.07.18
15:24
(17) Я думаю ТС неуглядел куда-то..
Максимум что может быть - это расширение, не более.
Никакого "подмена" контекста не может быть в процедура ПослеЗаписиНаСервере().
21 vde69
 
18.07.18
15:24
(18) у меня копипаст из 1с в инет не работает, не могу дать весь код...
22 Tonik992
 
18.07.18
15:25
(19) А что еще за модуль команды?
23 Вафель
 
18.07.18
15:25
а при чтении объекта вызывается?
24 vde69
 
18.07.18
15:26
(20) еще раз, вопрос не в ПослеЗаписи

а в перед ОбработкаКоманды !!!! именно тогда и возникает не понятная ситуация.
25 dezss
 
18.07.18
15:27
(24) тю...так ты делаешь Оповестить, при этом данные меняются и они перезаполняются на форме
26 dezss
 
18.07.18
15:28
(25) + перезаполняй в обработке оповещения
27 vde69
 
18.07.18
17:10
(23) точно !


добавил в форму

Процедура ПриЧтенииНаСервере()
  СкопироватьДанныеОбхектаВДанныеФормы() // тут идет заполнение реквизита
КонецПроцедуры