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.