|
![]() |
#1 |
MCT
|
Итого резюмируя, как же все таки сделать озвученный код оптимальнее и с минимальными затратами, а так же с учетом фич, которые появились в AX 2012.
X++: While select InvGuid, ParentInvGUID,recId from current WHERE current.InvGuid == InvGUID Join RecId from parent WHERE parent.InvGUID == current.ParentInvGUID { SELECT FIRSTONLY RecId, AMOUNTCUR from parentDistr WHERE parentDistr.InvGUID == InvGUID && parentDistr.TransRecId == inventoryGuidInvoice.TransRecId //........... && parentDistr.JuridicalPersonId == inventoryGuidInvoice.JuridicalPersonId; //........... if(parentDistr.RecId) { update_recordset parentDistrUpd setting parentDistrUpd.AMOUNTCUR += inventoryGuidInvoice.AmountCur;//слияние к предку } else { RecordInsertList.add(InventoryGuidInvoice); } } X++: RecordInsertList.insertDatabase(); Я вообще считаю, что циклы должны быть конечными при любом раскладе, любое использование обратного приводит к некоторой расхлябанности в коде и как следствие падению производительности. Пусть лучше разработчик доказывает, что необходимо использовать именно while(true), чем закрывать на это глаза с самого начала. В принципе правильно спланированное приложение позволит выполнять запросы без while(true) и Left Join, на самом деле это уже вопрос более к архитектору приложения, нежели к разработчику. Про использование fieldList, соединений таблиц не говорю, так как этого полно можно прочитать в тренингах. PS Да и всеж таки код с таблицами tempDB будет с точки зрения целостности, за которую идет война не одну страницу, будет более правильным, в одной транзакции одной операцией. Единственный минус - создание дополнительных объектов в репозитарии. И не надо ждать ночи на пакетные задания ![]()
__________________
Axapta book for developer Последний раз редактировалось MikeR; 26.01.2014 в 19:40. |
|
Теги |
базовая информация, транзакции |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|