Показать сообщение отдельно
Старый 06.04.2009, 21:14   #1  
Карис is offline
Карис
Участник
 
8 / 10 (1) +
Регистрация: 11.05.2007
Адрес: Иркутск, Россия
Разнести несколько журналов коммерческих соглашений из кода
Microsoft Dynamix AX 4.0 sp 1.

Имеется несколько журналов соглашений по ценам/скидкам. Журналы нужно разнести.

Перебираем журналы в цикле. Для каждого выполняем
X++:
// проверить и разнести журнал
priceDiscAdmCheckPost = new PriceDiscAdmCheckPost(false); 
// передаем номер журнала
priceDiscAdmCheckPost.initJournalNum(priceDiscAdmTable.JournalNum);
// обрабатываем журнал
priceDiscAdmCheckPost.run();
Первый журнал разносится нормально. Остальные не разносятся. Ошибка возникает в методе run() класса PriceDiscAdmCheckPost. Смысл ошибки в том, что при разноске первого журнала был создан Infolog, содержащий запись об успешной разноске. Поэтому !infolog.line() не может быть true. В итоге, второй и последующий журналы, будучи абсолютно правильными, не разносятся.

Это кусок метода run()
X++:
// результат этого if для второго и последующих журналов - false
    if (!infolog.line() && !checkOnly)
        this.postJournal();

    ttscommit;

    endLengthyOperation();

// результат этого if для второго и последующих журналов - false
    if (!infolog.line())
    {
        if (checkOnly)
        {
            info("@SYS17146");
        }
        else
        {
            info("@SYS5815");
        }
    }
    else
    {
        if (!checkOnly)
            throw error("@SYS24802");
    }
При этом через форму журналы разносятся нормально, независимо от того открыт infolog или закрыт.

Что я делаю неправильно? Может быть разноску нужно делать с помощью другого класса? Или как-то управлять infolog перед повторным вызовом run()?