|
В данной транзакции уже происходили ошибки! - как определить какой объект не смог записать | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
15.03.18
✎
09:12
|
Загузка данных в базу через правила обмена. Вылетает с такой ошибкой. Как понимаю при записи какого-то объекта находяшегося в транзакции был установлен флаг Отказ = истина. Например, при записи физ. лица не удалось записать паспортные данные.
Как можно определить в каком объекте был установлен этот флаг? |
|||
1
rozer76
15.03.18
✎
09:27
|
(0) ну еще это когда при ошибке в транзикции идет обращение к данным напр. чтение. Где-то не хватает обработка try-exept
|
|||
2
Diman000
15.03.18
✎
09:37
|
В журнал регистрации пиши, потом посмотришь.
|
|||
3
FIXXXL
15.03.18
✎
10:17
|
(0) или номер(код) объекта не уникален
|
|||
4
ИС-2
naïve
15.03.18
✎
10:21
|
(2) как можно писать. Нет же ни какого обработчика, который сообщит что при записи такого-то объекта был установлен флаг Отказ = Истина;
Подписку тоже не сделать т.к если стоит Отказ = Истина, то подписка просто не вызывается... И не понятно как можно найти объект при записи в котором произошла ошибка |
|||
5
Cyberhawk
15.03.18
✎
10:23
|
Никакой флаг отказа не может приводить к той ошибке, что ты видишь. Просто внутри транзакции было исключение, а потом обращение к данным БД.
|
|||
6
Cyberhawk
15.03.18
✎
10:25
|
По поводу "Где-то не хватает обработка try-exept" из (1) тоже мимо - если обработки исключения нет, то ошибка была бы отображена
|
|||
7
Cyberhawk
15.03.18
✎
10:26
|
С крайне большой вероятностью виноват прикладной код конфигурации
|
|||
8
rozer76
15.03.18
✎
10:26
|
(6) как раз в этом ) если он это словит в попытке то не будет дальше читать данные напр
|
|||
9
Cyberhawk
15.03.18
✎
10:26
|
(либо код, выполняемый при загрузке по правилам обмена)
|
|||
10
Cyberhawk
15.03.18
✎
10:27
|
(8) Не переобувайся. Ты пишешь "Где-то не хватает обработка try-exept", Я на это и отвечаю.
|
|||
11
бомболюк
15.03.18
✎
10:37
|
(5) + 1, только уточнение: исключение возникло на стороне SQL сервера (например, из-за блокировок), что привело к тому, что открытая транзакция приобрела статус "нефиксируемой" (XACT_STATE() = -1). Таким образом, обработав каким то исключение на клиенте (то есть блок try - except есть), мы все равно не сможем зафиксировать данную транзакцию. Надо откатывать и открывать новую.
|
|||
12
rozer76
15.03.18
✎
10:41
|
(10) че такое переобувайся... рано еше летнюю резину - в москоу минус на дворе ) "Где-то не хватает обработка try-exept" добавит ТС проверку недостающую в эксепте откатит транзакцию и читать не будет из БД и все ок будет
) |
|||
13
Вафель
15.03.18
✎
10:46
|
(5) Именно так отказ и будет работать, если запись в попытке. а далее обращение к другим объектам
|
|||
14
Вафель
15.03.18
✎
10:46
|
хотя должно записываться более 1 документа в попытке тогда
|
|||
15
ИС-2
naïve
27.03.18
✎
07:56
|
еще интересная особенность новых конфигураций - в случае ошибки (например, не заполнено поле) происходит ВызватьИсключение.
Что приводит к тому, что не получается записать все объекты, которые пишешь в транзакции. Как победить ? |
|||
16
Сияющий в темноте
27.03.18
✎
08:49
|
наверное,если писать в транзакции только один обьект или группу связанных между собой обьектов,то будет понятно,кто виноват и что не записалось
|
|||
17
TormozIT
гуру
27.03.18
✎
13:09
|
Используй техножурнал. Анализируй по нему все события EXCP (исключительные ситуации). Среди них ты скорее всего найдешь нужное место. Также можешь запустить отладку с флагом "Останавливаться по ошибке" и перебирать таким образом все ошибки в процессе выполнения.
|
|||
18
ИС-2
naïve
29.03.18
✎
09:49
|
нет ли ни каких возможностей отключить вызвать исключение. Сейчас получается, что если хоть в одном документ произошла ошибка, то все остальные тоже не проведутся.
В рамках этой задачи, это есть плохо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |