|
Почему может быть при Отказ = Истина ЭтоНовый() = Ложь? | ☑ | ||
---|---|---|---|---|
0
Fragster
гуру
13.11.12
✎
13:58
|
В одной "интересной" конфе вылез странный глюк - в ОбработкаПроведения не проходят проверки, выставляется Отказ = Истина; после чего в форме документа состояние ЭтоНовый() не восстанавливается.
На новом созданном документе и его форме такое поведение не воспроизводится, т.е. при отказе в обрабоке проведения после отката транзакции ЭтоНовый() - снова истина, несмотря на то, что в ОбработкаПроведения ложь. Запустил "замер производительности", нажал на "Ок", в начале ЭтоНовый() = Истина, транзакция откатилась, в конце ЭтоНовый() = Ложь. Выключил замер производительности, что искать в нем? Записать() есть только для подчиненного набора записей регистров, какие еще слова искать? |
|||
1
mikecool
13.11.12
✎
14:01
|
а почему отказ в проведении должен откатить запись документа?
|
|||
2
NcSteel
13.11.12
✎
14:02
|
"в конце ЭтоНовый() = Ложь". В конце это где?
|
|||
3
Fragster
гуру
13.11.12
✎
14:02
|
(1) Ну если РежимЗаписиДокумента = Проведение, разве нет?
|
|||
4
Fragster
гуру
13.11.12
✎
14:02
|
(2) после того, как он сказал "Не удалось провести ..." в обновлении отображения
|
|||
5
Песец
13.11.12
✎
14:05
|
(4) Для того, чтобы проводить т. е. записывать в регистры, нужна ссылка на регистратор, т. е. док должен быть записан.
|
|||
6
NcSteel
13.11.12
✎
14:06
|
Тоесть порядок такой:
1. Создаем новый документ. 2. Наполняем реквизиты данными. 3. Нажимаем кнопку "Ок" 4. В обработке проведения устанавливаем флаг "Отказ" в значение истина. 5. На форме в событии ОбновлениеОтображения метод "ЭтоНовый", расширения контекста объекта, возращается значение Истина? |
|||
7
Fragster
гуру
13.11.12
✎
14:06
|
просто после этого повторная попытка проведения дает "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи азы данных (возможно, запись была изменена или удалена)".
|
|||
8
mikecool
13.11.12
✎
14:06
|
(3) вот тут - как бы да, тогда не понимаю, как сабж-а добиваешься )
|
|||
9
NcSteel
13.11.12
✎
14:06
|
(6) к (4) с вопросом.
|
|||
10
NcSteel
13.11.12
✎
14:07
|
(7) Релиз платформы.
|
|||
11
Fragster
гуру
13.11.12
✎
14:07
|
(10) 8.2.16.368
|
|||
12
Fragster
гуру
13.11.12
✎
14:08
|
на той же платформе создал в метаданных новый документ, там поведение нормельное, т.е. после "Не удалось провести ..." в обновлении отображения ЭтоНовый() = Истина.
В сабже - после "не удалось провести" ЭтоНовый() = Ложь. и после этого - (7), т.е. не поправить даже ничего, чтобы провести измененный документ. |
|||
13
NcSteel
13.11.12
✎
14:09
|
(11) Может это глюк платформы?
Рационального объяснения не могу придумать. |
|||
14
Fragster
гуру
13.11.12
✎
14:09
|
вот и спрашиваю - замером получил все выполняемые строки обработки от нажатия на кнопку "ОК" до обновления отображения, что кроме "Записать" там искать, что может сбросить ЭтоНовый() флаг
|
|||
15
Fragster
гуру
13.11.12
✎
14:09
|
(13) ну так на новом документе все работает
|
|||
16
NcSteel
13.11.12
✎
14:10
|
а если сравнить версии. Они одинаковые?
|
|||
17
NcSteel
13.11.12
✎
14:10
|
(16) + тоесть
Объект.ВерсияДанных и Ссылка.ВерсияДанных. |
|||
18
Песец
13.11.12
✎
14:11
|
(5+) Возможно, где-то прописана принудительная запись в отдельной транзакции
|
|||
19
Fragster
гуру
13.11.12
✎
14:11
|
ВерсияДанных? там пишет "{(1)}: Ошибка при получении значения атрибута контекста (ВерсияДанных)"
А Ссылка пустая после отказа. |
|||
20
NcSteel
13.11.12
✎
14:11
|
(15) Ну это не показатель. Может ты наткнулся на трудно воспроизводимую ошибку платформы.
|
|||
21
НЕА123
13.11.12
✎
14:11
|
(14)
а ссылка пустая? |
|||
22
Reset
13.11.12
✎
14:11
|
(17) Из (7) можно предположить, что разные
|
|||
23
NcSteel
13.11.12
✎
14:11
|
(19) Упр формы?
|
|||
24
NcSteel
13.11.12
✎
14:12
|
(22) Не факт.
|
|||
25
Fragster
гуру
13.11.12
✎
14:12
|
(23) нет
(22) ->(19) |
|||
26
Fragster
гуру
13.11.12
✎
14:13
|
режим совместимости с 8.1, но все равно, (15) же
|
|||
27
Reset
13.11.12
✎
14:13
|
Глюк (с) какой-то. Как такое программно воспроизвести, не представляю
|
|||
28
Shurjk
13.11.12
✎
14:13
|
(0) Объект этоНовый только в событиях передзаписью, при записи так же как и при провдеении он в принципе уже не может быть новым. Ибо ссылка по сути уже есть.
|
|||
29
eklmn
гуру
13.11.12
✎
14:14
|
это 1С и этим все сказано
|
|||
30
NcSteel
13.11.12
✎
14:14
|
(26) Пакуй базу и в 1С.
|
|||
31
Reset
13.11.12
✎
14:14
|
(28) У него он Не новый уже после окончания (отмены) транзакции
|
|||
32
NcSteel
13.11.12
✎
14:14
|
(28) При откате транзакции теряем и ссылку, тоесть запись.
|
|||
33
Fragster
гуру
13.11.12
✎
14:15
|
НачатьТранзакцию не нашел в замере
|
|||
34
Shurjk
13.11.12
✎
14:15
|
(31) Ну да все правильно транзакцию откатили, и в этот момент ничего уже не делается, начнем снова писать он передзаписью опять новы будет, а в при записи уже нет.
|
|||
35
NcSteel
13.11.12
✎
14:16
|
(34) А после отката транзакции на стороне клиента он какой?
|
|||
36
Shurjk
13.11.12
✎
14:16
|
(32) Ну да, но в каком месте вы хотите увидеть что объект не новый?
|
|||
37
Shurjk
13.11.12
✎
14:16
|
(35) Новый, он всегда новый до начала транзакции, при выполнении уже нет.
|
|||
38
Reset
13.11.12
✎
14:17
|
(36) -> (6) на шаге 5
|
|||
39
NcSteel
13.11.12
✎
14:17
|
(37) У ТС не так. В форме он наблюдает обратную реакцию.
|
|||
40
Fragster
гуру
13.11.12
✎
14:17
|
(36) я хочу узнать, почему он после отката транзакции не новый
|
|||
41
Shurjk
13.11.12
✎
14:19
|
(36) Потому что транзакция уже началась, пока полностью все операции по записи не прекратились, он уже не новый.
|
|||
42
Shurjk
13.11.12
✎
14:20
|
(38) Шага 5 выполняется уже после окончания транзакции.
|
|||
43
Reset
13.11.12
✎
14:20
|
(42) Именно
|
|||
44
NcSteel
13.11.12
✎
14:20
|
(41) Мля , транзакция уже откатилась. и при попытке изменения объекта появляются ошибки. Ты видимо писатель , а не читатель.
|
|||
45
Shurjk
13.11.12
✎
14:21
|
(43) Ну все логично. Трназакция отменилась объект вновь стал новый.
|
|||
46
Fragster
гуру
13.11.12
✎
14:21
|
(45) в (0) он таки не стал обратно новый
|
|||
47
Shurjk
13.11.12
✎
14:21
|
(44) Какие ошибки? В каком событии?
|
|||
48
vmv
13.11.12
✎
14:22
|
наркоманская ветка
|
|||
49
Fragster
гуру
13.11.12
✎
14:22
|
(47) после этого при любых попытках действий с объектом (записать, провести и т.п.) выдается (7)
|
|||
50
Fragster
гуру
13.11.12
✎
14:23
|
(48) это нормально
|
|||
51
НЕА123
13.11.12
✎
14:23
|
(47)
см (7) |
|||
52
Reset
13.11.12
✎
14:23
|
А если отказ давать перед записью, а не при проведении, воспроизводится? Хотя я не знаю, что это даст
|
|||
53
Shurjk
13.11.12
✎
14:23
|
Дык естественно у него там корявка Записать() в регистре явно указано, оно и пишет ссылку в базу.
|
|||
54
Reset
13.11.12
✎
14:24
|
(53) Отмена транзакции должна отменять также и все корявки, по идее
|
|||
55
Shurjk
13.11.12
✎
14:24
|
+(53) А кстати в каком месте оно указано?
|
|||
56
Fragster
гуру
13.11.12
✎
14:25
|
(55) в ПриЗаписи - идет запись версионирования
|
|||
57
Shurjk
13.11.12
✎
14:25
|
(54) По идее да, но может она проходит до отказ = истина, либо отказ устанавлвается в истина не непосредственно в обработке проведения, а там это потом не обрабатывается.
|
|||
58
Shurjk
13.11.12
✎
14:25
|
(56) Все понятно.
|
|||
59
Песец
13.11.12
✎
14:26
|
Записывается док после ПередЗаписью но до ПриЗаписи модуля объекта... может в подписках на события до ПередЗаписью или в модуле регистра есть что-то вроде
Если Регистратор.ЭтоНовый() тогда НачатьТранзакцию(); Регистратор.Записать(); ЗафиксироватьТранзакцию(); КонецЕсли; |
|||
60
Fragster
гуру
13.11.12
✎
14:27
|
(59) "Начать" в замере нету
|
|||
61
Shurjk
13.11.12
✎
14:28
|
(59) Там все прикольней, записывается набор записей подчиненный регистратору.
|
|||
62
Reset
13.11.12
✎
14:29
|
(60) А записать() есть? Может заменить на УстановитьСсылкуНового
|
|||
63
NcSteel
13.11.12
✎
14:31
|
(61) Все наборы записей в РН подчинены регистратору и не вызывают данный батхед.
|
|||
64
Песец
13.11.12
✎
14:31
|
(59+) а, нет, регистр записывается внутри транзакции... может подписка?
|
|||
65
Fragster
гуру
13.11.12
✎
14:32
|
(64) подписки не видны в замере?
|
|||
66
Shurjk
13.11.12
✎
14:33
|
(63) Если их явно не писать, до окончания записи регистратора то не вызывает иначе запросто.
|
|||
67
NcSteel
13.11.12
✎
14:34
|
(66) Посмотри как пишутся партии в типовой конфе. они пишутся явно
|
|||
68
Shurjk
13.11.12
✎
14:36
|
(67) Посмотри как вызывается это запись - везде стоит - Если не Отказ тогда и после всех проверок, а тут прям перед записью у него все это безобразие выполняется.
|
|||
69
Shurjk
13.11.12
✎
14:37
|
+(68) То есть призаписи, а там объект уже всегда не новый.
|
|||
70
Fragster
гуру
13.11.12
✎
14:39
|
пока ищу методом половинного деления выставляя
Отказ = Истина; Возврат; в разные места |
|||
71
Fragster
гуру
13.11.12
✎
14:39
|
пока дошел до того, что если в середине обработки проведения поставить отказ - то все работает как надо
|
|||
72
Shurjk
13.11.12
✎
14:40
|
(70) Попробуй убрать версионирование, посмотришь что будет.
|
|||
73
Fragster
гуру
13.11.12
✎
14:41
|
(72) оно в ПриЗаписи - сейчас уже вставляю в разные места обработки проведения, пока все работает, т.е. после отката ЭтоНовый() = Истина
|
|||
74
Shurjk
13.11.12
✎
14:43
|
(73) А ошибка все равно возникает.
|
|||
75
Fragster
гуру
13.11.12
✎
14:45
|
(74) нет, все нормально
|
|||
76
Песец
13.11.12
✎
14:50
|
Создал новый документ.
В модуле формы Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ЭтоНовый() Тогда Записать(); КонецЕсли; КонецПроцедуры Процедура ПослеЗаписи() Сообщить(ЭтоНовый()); КонецПроцедуры в модуле объекта Процедура ОбработкаПроведения(Отказ, РежимПроведения) Отказ=Истина; КонецПроцедуры ввожу новый, жмакаю провести, месаджбокс неудача, до ПослеЗаписи не доходит, документ остается записанным в журнале. |
|||
77
Fragster
гуру
13.11.12
✎
14:52
|
(76) да, но у тебя не наблюдается (7), наверное.
|
|||
78
hhhh
13.11.12
✎
14:54
|
может после Отказ=Истина где-то есть Записать() ?
|
|||
79
Shurjk
13.11.12
✎
14:55
|
(78) Оно есть до этого места.
|
|||
80
Reset
13.11.12
✎
14:55
|
(76) ПередЗаписью формы, если мне не изменяет память, выполняется до начала транзакции, так что поведение нормально
|
|||
81
Fragster
гуру
13.11.12
✎
14:59
|
(78) после Отказ = Истина идет Возврат;
|
|||
82
Aprobator
13.11.12
✎
15:07
|
В обработке проведения документ уже не новый.
|
|||
83
Песец
13.11.12
✎
15:08
|
(80) Это я к тому, что чудес не бывает, надо искать где док записывается до начала транзакции. Может справочник или регистр сведений записывается, а в его событиях регистратор.записать()
|
|||
84
Песец
13.11.12
✎
15:09
|
(83+) Тупо зпкоментить половину всего, что до ОбработкаПроведения, потом вторую половину...
|
|||
85
Fragster
гуру
13.11.12
✎
15:09
|
только что в начало обработки проведения включил Отказ = Истина; Возврат; - ошибки нет
|
|||
86
ixijixi
13.11.12
✎
15:11
|
А нету у тебя часом в модуле "Прочитать()"? Если есть - ставь перед ним "Записать()".
|
|||
87
Песец
13.11.12
✎
15:12
|
(85) а ЭтоНовый() какое?
|
|||
88
Fragster
гуру
13.11.12
✎
15:12
|
(87) в обработке проведения - ложь, после отката - истина
|
|||
89
Shurjk
13.11.12
✎
15:18
|
(83) Бесполезно я уже давно пытаюсь эту мысль донести, но почему то все упорно хотят верить в чудо.
|
|||
90
Reset
13.11.12
✎
15:26
|
(83) (89) Если бы док записывался до начала транзакции, это бы не приводило к (7).
Разве если где-то вредительский код типа ЭтотОбъект.Ссылка.ПолучитьОбъект().Записать() (да и то, док то новый, получитьОбъект не удастся) |
|||
91
Shurjk
13.11.12
✎
15:29
|
(90) Там записываются записи подчиненного регистра.
|
|||
92
Fragster
гуру
13.11.12
✎
15:30
|
(91) и чо?
|
|||
93
Shurjk
13.11.12
✎
15:31
|
(92) В этом причина
|
|||
94
Fragster
гуру
13.11.12
✎
15:33
|
(93) сфига?
|
|||
95
Bober
13.11.12
✎
19:49
|
в коде идет получение/создание объекта и его запись в базу. Поэтому в форме остается экземпляр с признаком этоновый. Но в базе уже есть этот объект. При записи система отваливается с ошибкой.
PS Из этого следует, что форма открывается с установленной ссылкой нового. |
|||
96
Bober
13.11.12
✎
19:51
|
(96) где-то идет запись вне транзакции(причем не через этот экземпляр объекта) и только потом проведение
|
|||
97
Fragster
гуру
14.11.12
✎
10:57
|
короче, подергал я вызываемые модули, потом вернул все назад... и ошибка ушла. вероятно косяк конвертации.
|
|||
98
Песец
15.11.12
✎
07:25
|
Хмм... значит все-таки глюк платформы :(
|
|||
99
Тоненький Клиент
15.11.12
✎
08:12
|
нуф-
|
|||
100
Тоненький Клиент
15.11.12
✎
08:12
|
нуф
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |