您是如何將CustTable加入InventTable的?我相信這只是笛卡爾式的加入,這是所有可能的客戶對所有可能的項目,這本質上是緩慢的。
定價/貿易協議/折扣的性質是它們經常變化,保持每個客戶的每個價格的運行表並不真實,特別是如果您有日期範圍,特定數量的貿易協議門檻或單位,倉庫出來,等等。
這裏是代碼做你想做的事情,我相信它會比你做的更快。我很快寫了這個,但它應該工作,你應該刪除整數中斷,我只是不希望它永遠運行。
static void Job66(Args _args)
{
PriceDisc priceDisc;
container retVal;
CustTable custTable;
InventTable inventTable;
InventTableModule inventTableModule;
int i, n;
;
while select custTable
{
i++;
if (i>5)
break;
n = 0;
while select inventTable
join inventTableModule
where inventTableModule.ItemId == inventTable.ItemId &&
inventTableModule.ModuleType == ModuleInventPurchSales::Sales
{
n++;
if (n>10)
break;
retVal = priceDisc::findItemPriceAgreement(ModuleInventPurchSales::Sales,
inventTable.ItemId,
InventDim::findOrCreateBlank(false),
inventTableModule.UnitId,
SystemDateGet(),
1,
custTable.AccountNum,
custTable.Currency,
custTable.PriceGroup);
info(strfmt("%1 - %2 - %3 - %4 - %5 - %6 - %7 - %8 - %9", custTable.AccountNum,
custTable.Name,
inventTable.ItemId,
inventTable.ItemName,
conPeek(retVal, 1), // priceDisc.price(),
conPeek(retVal, 2), // priceDisc.markup(),
conPeek(retVal, 3), // priceDisc.priceUnit(),
conPeek(retVal, 4), // priceDisc.deliveryDays(),
conPeek(retVal, 5))); // priceDisc.calendarDays()];
}
}
}
感謝亞歷克斯,我試過了你的建議的一個變種,但對於客戶的需求還是太慢了。 我認爲這證實了我的懷疑,這不是一個可行的解決方案,我需要採取不同的方法來解決整個問題。 – Zordey
根據您擁有的客戶/物品的數量,它可以達到天文數字。我的方法至少是否更快?另外,如果你選擇一個項目的子集,而不是所有的項目,然後選擇一個一致的定價方案,你可以做一個同步。如果你的價格只是在這個地方,你可能是SOL。 您也可以深入研究PriceDisc以消除多餘的代碼。如果您沒有「全部」或「組」價格規則,那就是不需要的搜索。 –
客戶僅使用其客戶/庫存清單的子集,但總數仍超過100萬條記錄。不誠實的是,我沒有太注意你的方法花了多長時間,客戶要求的時間仍然很長,所以它不是一個可行的解決方案。我想我將不得不隨着出口價格的變化而運行,並進行最小化查詢,而不是進行完整的查找 – Zordey