AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.02.2007, 23:56   #1  
Keen is offline
Keen
Участник
 
4 / 10 (1) +
Регистрация: 06.09.2006
? простейший job уходит в бесконечный цикл
Понадобилось вручную подправить несколько десятков номеров ваучеров в неразнесённых журналах, т.к. из-за копирования из другой компании номера задвоились. Написал левой ногой простенький одноразовый джоб, а он почему-то уходит в бесконечный цикл. Реально записей таких меньше сотни. При отборе непосредственно из LedgerJournalTrans по RecId всё отлично отрабатывает. Где могут крыться грабли? Или я к полуночи пятницы уже просто зверски туплю?

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;
}
P.S. Стоит SP3 Critical Update 1 Build #9.3, билд ядра #1951.2410/514-193.
Старый 17.02.2007, 10:32   #2  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
а для чего транзакция на внешнем уровне? Попробуйте написать так:





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())
Старый 17.02.2007, 18:00   #3  
Keen is offline
Keen
Участник
 
4 / 10 (1) +
Регистрация: 06.09.2006
Да, таким образом транзакцию обозначать тоже пробовал - зацикливается на первом же журнале. И update() пробовал ставить - результат тот же.
Старый 17.02.2007, 18:55   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Lightbulb
Попробуйте пострассировать SQL - возможно, есть какие-то циклические delete actions?

(может быть стоит их скипануть)
Старый 17.02.2007, 20:24   #5  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Сталкивался с таким поведением. Поэтому присоеденяюсь к вопросу автора.

WorkAround:
Keen я так полагаю, что у Вас в определенном журнале/журналах перехлестнулись Документы ГК. Вроде бы это известный глюк. И если время не ждет, то напишите Job, который создаст точную копию проблемного журнала/журналов, но с новыми номерами ГК.

Последний раз редактировалось Lemming; 17.02.2007 в 20:27.
Старый 17.02.2007, 21:19   #6  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
while select forupdate ljtr where ljtr.JournalNum == ljt.JournalNum
order by RecId
не спасет случайно?
Скорее всего SQL server в своих потрохах как то использует в этом запросе индекс VoucherIdx, который вы корячите увеличивая поле Voucher и обновленные записи снова попадают в выборку
За это сообщение автора поблагодарили: kashperuk (3), Stitch_MS (1), Keen (1).
Старый 17.02.2007, 21:32   #7  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
396 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Цитата:
Сообщение от db Посмотреть сообщение
order by RecId
не спасет случайно?
В точку
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как передать параметр из Job-a в Class с возможностью перезаписи? Yury J DAX: Программирование 14 11.01.2009 17:11
Глючит Job и TreeNode Alex_KD DAX: Программирование 0 29.08.2007 11:00
dax-lessons: Setting Configurations - by simple Job run Blog bot DAX Blogs 0 27.08.2007 23:00
Складская аналитика. Авторезервирование. Бесконечный цикл. andenis DAX: Функционал 8 27.06.2007 08:12

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:14.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.