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()?