Имя: Пароль:
1C
1C 7.7
v7: Не сходятся данные по объекту
,
0 Злопчинский
 
26.02.21
04:25
глЯ - экспортная, ГМ.

Наблюдал такую картину, типа
глЯ = СоздатьОбъект("Документ.хОперация");
глЯ.НайтиДокумент(Ссылка);
глЯ.Реквизит = ЧтоТоНовое;
глЯ.Записать();
глЯ.Провести();
.
в результате
глЯ.Реквизит дает значение ЧтотоНовое
глЯ.ТекущийДокумент().Реквизит дает значение ЧтотоСтарое
.
да, транзакции вместе с попытками, по вложенности, парности - все ок. но вот такая трабла.
пролечилась полным ТИИ (никаких ошибок, все гладко).
.
отчего может быть? в каком направлении смотреть? (@Ёпрст, приди!)
воспроизвести пока не удается... но трабла очень неприятная, результат - неверные данные.
ловушку пока поставил, посмотрю еще...
1 big
 
26.02.21
05:55
Буквально на этой неделе было нечто похожее.

Док.РеквизитШапки = НовоеЗначение;
Док.СделатьНеПроведенным();
Док.УдалитьСтроки();

ДокЗаполнитьСтроки(Док);

Док.Записать();
Док.Провести();

Значение РеквизитШапки остается старым.

Когда сделал

Док.СделатьНеПроведенным();
Док.РеквизитШапки = НовоеЗначение;

всё заработало.

ХЗ, может потому что этот реквизит строка неограниченной длины.
2 victuan1
 
26.02.21
05:55
Я так понимаю, если сделать повторно глЯ.НайтиДокумент(Ссылка), то глЯ.ТекущийДокумент().Реквизит даст ЧтотоНовое.
Эту особенность я давно заметил. Это не баг, а фича, поэтому ТИИ тут не поможет.
3 victuan1
 
26.02.21
05:56
У себя даже в коде эту фичу использовал, сравнивая глЯ.ТекущийДокумент().Реквизит и глЯ.Реквизит, делал вывод - изменилось ли значение реквизита в ходе выполнения моего кода.
4 Злопчинский
 
26.02.21
11:05
да, но теперь то, тот же код отрабатывает ожидаемо..
5 Злопчинский
 
26.02.21
11:07
(1) спсб, за
Док.СделатьНеПроведенным();
- натолкнул на мысль, есть там такое...
хм, и блин как-то обсуждали вроде такую хрень...
по идее надо делать
Записать();
СделатьНепроведенным()
итд...
.
но сейчас-то работает как ожидается, правильно все дает, код без изменений вроде...
.
буду ждать отработки на ловушке
6 Злопчинский
 
26.02.21
11:08
(2) "Я так понимаю, если сделать повторно глЯ.НайтиДокумент(Ссылка), то глЯ.ТекущийДокумент().Реквизит даст ЧтотоНовое."
вся проблема в том что в результате трабла какраз-таки оставалась старое значение...
7 Mikeware
 
26.02.21
11:20
(6) т.е закэшированное значение не менялось? объект не перечитывался?
8 Злопчинский
 
26.02.21
11:45
(7) В результате наблюдавшегося трабла - _в_базе_ оставалось старое значение, то что через .ТекущийДокумент()
.
засаду скорее всего как раз СделатьНепроведенным давал, было такое обсуждение то ли в ветке, то ли отдельно с @hodgik терли эту тему
9 Злопчинский
 
26.02.21
13:00
(1) сделал как ты написал, бо у меня аналогичная ситуевина по последовательности кода.
думаю, будет все норм. Продакшен покажет.
10 tgu82
 
26.02.21
15:19
(0) А если еще разз глЯ.НайтиДокумент(Ссылка) ???
11 Злопчинский
 
26.02.21
15:45
(10) предлагали уже выше.
была такая мысль, но тестить не стал, бо это костыль. а это - по возможности - не наш путь...
12 Mikeware
 
26.02.21
15:52
(11) костыль - это "достать данные прямым запросом из базы" :-)
13 Злопчинский
 
26.02.21
16:16
(12) это - оптимизация. В плане, если удастся запуститься - тогда уже попозже можно оптимизироваться по скорости выборок всяких.
Сейчас главное - функцинал чтоб работал. а я вчера над этим "траблм" часа два ковырял
14 Mikeware
 
26.02.21
16:26
(13) а наххрена? ты проверял "а точно ли записалось?"?
15 Злопчинский
 
26.02.21
16:28
(14) Проверял! даже процедура есть специальная
ЗаписатьНесмотряНиНаЧто()
16 Mikeware
 
26.02.21
16:30
(15) перепиши на запись прямым запросом :-)
ну, чисто для верности...
17 tgu82
 
26.02.21
16:46
(16) Так а у него ж ДБФ
18 Djelf
 
26.02.21
16:47
(11) Костыль, не костыль... Главное чтобы работало!
А вот 1С 7.7 клюшками назвали не правильно! У них же горизонтальная палочка сверху, а не снизу... Т.е. это костыли, а не клюшки!
19 Злопчинский
 
26.02.21
16:49
7 - это клюшка ПОБЕДНО ПОДНЯТАЯ ВВЕРХ!!!
это вам не мутный снеговик который то тает то не тает то морковку ему надо то уголек, ато еще и ведро...
а клюшка - изолентой обмотал насмерть - на годы хватает! не надо каждый раз с приходм новой зимы лепить нового снеговика!
20 Mikeware
 
26.02.21
16:57
(17) да не проблема. (если индекса нет (а Ёп'у, говорят, и индексы не мешают))
(18) правильно повернутый костыль является клюшкой!
21 hogik
 
27.02.21
00:09
«да, транзакции вместе с попытками, по вложенности, парности - все ок.»(с)

Не верю. :-)
Если ошибка «плавающая», то проблема скорее всего в наших любимых :-) блокировках.
Покажи весь текст с «попытками, вложенностями, парностями».
22 hogik
 
27.02.21
00:42
Ничего удивительного. :-)
В твоём алгоритме не выполнилось Записать() и/или Провести().
И в базе лежит старое значение. А в памяти лежит значение «ЧтоТоНовое».
23 Chieftain
 
27.02.21
01:11
Я даже больше скажу, при поточке на dbf порой ссылки ссылаются на несуществующий документ.
Т.е. пользователь вручную вводит поступление, оно не записывается ибо не существует.
А робот, который грузит заказы вместо заказов в ссылках на созданный заказ видит любой другой вид документов.
И все чертовы "транзакции"
24 big
 
27.02.21
22:06
(21) Описываемое мною в (1) делалось в тестовой базе, с одним пользователем в немонопольном режиме, без использования Попытка-Исключение. Ошибка была не плавающая, а стабильно не работало. И структура моего кода в (1) практически на 100% соответствует реальной.
(22) Записать() выполнилось, т.к. ТЧ перезаполнилась, Провести() выполнилось, т.к. движения соответствовали ТЧ.

з.ы. для эксперимента надо попробовать перезаполнить ТЧ до отмены проведения, скорее всего будет та же ошибка, хотя... хз. Есть впечатление, что переменная с объектом документа "перезаполняется" после метода СделатьНеПроведенным() значением объекта ДО выполнения этого метода. Возможно, что поведение ТЧ в таких случаях отличается от поведения реквизитов шапки и общих реквизитов.
25 hogik
 
27.02.21
22:33
(24)
Ваш алгоритм не имеет ничего общего с алгоритмом из 0 сообщения.
А утверждение «переменная с объектом документа "перезаполняется" после метода СделатьНеПроведенным()»(с) верно для ВАШЕГО алгоритма.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс