![]() |
#1 |
Участник
|
![]()
Понадобилось вручную подправить несколько десятков номеров ваучеров в неразнесённых журналах, т.к. из-за копирования из другой компании номера задвоились. Написал левой ногой простенький одноразовый джоб, а он почему-то уходит в бесконечный цикл.
![]() ![]() X++: static void LJ_VoucherRefresh(Args _args) { LedgerJournalTable ljt; LedgerJournalTrans ljtr; int num = 212; ; ttsbegin; while select ljt where ljt.Posted == false { while select forupdate ljtr where ljtr.JournalNum == ljt.JournalNum { num++; ljtr.Voucher = strfmt("V0000%1", num); ljtr.doUpdate(); } } ttscommit; } |
|
![]() |
#2 |
MCTS
|
а для чего транзакция на внешнем уровне? Попробуйте написать так:
X++: static void LJ_VoucherRefresh(Args _args) { LedgerJournalTable ljt; LedgerJournalTrans ljtr; int num = 212; ; while select ljt where ljt.Posted == false { ttsbegin; while select forupdate ljtr where ljtr.JournalNum == ljt.JournalNum { num++; ljtr.Voucher = strfmt("V0000%1", num); ljtr.doUpdate(); } ttscommit; } } можно попробовать изменить присваивание: ljtr.Voucher = strfmt("V0000%1", num); и так ли нужно делать doUpdate (чем не катит update()) |
|
![]() |
#3 |
Участник
|
Да, таким образом транзакцию обозначать тоже пробовал - зацикливается на первом же журнале. И update() пробовал ставить - результат тот же.
|
|
![]() |
#4 |
Участник
|
![]()
Попробуйте пострассировать SQL - возможно, есть какие-то циклические delete actions?
(может быть стоит их скипануть) |
|
![]() |
#5 |
Участник
|
Сталкивался с таким поведением. Поэтому присоеденяюсь к вопросу автора.
WorkAround: Keen я так полагаю, что у Вас в определенном журнале/журналах перехлестнулись Документы ГК. Вроде бы это известный глюк. И если время не ждет, то напишите Job, который создаст точную копию проблемного журнала/журналов, но с новыми номерами ГК. Последний раз редактировалось Lemming; 17.02.2007 в 20:27. |
|
![]() |
#6 |
Роман Долгополов (RDOL)
|
while select forupdate ljtr where ljtr.JournalNum == ljt.JournalNum
order by RecId не спасет случайно? Скорее всего SQL server в своих потрохах как то использует в этом запросе индекс VoucherIdx, который вы корячите увеличивая поле Voucher и обновленные записи снова попадают в выборку |
|
|
За это сообщение автора поблагодарили: kashperuk (3), Stitch_MS (1), Keen (1). |
![]() |
#7 |
Участник
|
|
|