Unten stehendes Beispiel bringt die gewünschten Fälligkeitsdaten der Tabelle CustTransOpen, aber die Belege der Tabelle CustTrans fehlen:
CustTable custTable;
CustTrans custTrans;
CustTransOpen custTransOpen;
;
while select CustGroup from custtable group by CustGroup // group by
join Voucher from custTrans // order by
where custTrans.AccountNum == custtable.AccountNum
join DueDate from custTransOpen group by DueDate // group by
where custTransOpen.RefRecId == custTrans.RecId
{
info(custTable.CustGroup); // works
info(custTrans.Voucher); // works not
info(Date2StrUsr(custTransOpen.DueDate)); // works
}
Wenn man der Tabelle CustTrans ein 'group by' hinzufügt, erhält man dann auch Daten:
CustTable custTable;
CustTrans custTrans;
CustTransOpen custTransOpen;
;
while select CustGroup from custtable group by CustGroup // group by
join Voucher, RecId from custTrans group by Voucher, RecId // group by
where custTrans.AccountNum == custtable.AccountNum
join DueDate from custTransOpen group by DueDate // group by
where custTransOpen.RefRecId == custTrans.RecId
{
info(custTable.CustGroup); // works
info(custTrans.Voucher); // works now
info(Date2StrUsr(custTransOpen.DueDate)); works
}
Dieselbe Problematik besteht auch mit Datenabfragen die mit dem QueryRun-Objekt verarbeitet werden.
Es bleibt offen, ob die Ursache für dieses Problem bei AX oder an der SQL-Engine liegt; feststeht, dass man mit dem Mischen von Group By und Order By Bugs erzeugt, die man leider nicht so schnell herausfindet.

Wo genau ist der Unterschied zwischen den beiden Code-Beispielen?
ReplyDeleteHallo Andy
ReplyDeleteSieh dir den join auf 'custTrans' an (jeweils Zeile 7). Im ersten Beispiel wird ohne die 'group by'-Anweisung gearbeitet (kommentiert).
Im zweiten Beispiel ist die 'group by'-Aweisung dann aktiv.