2012-10-11 92 views
1

我有一個完整的客戶通過項目價格表的生成導出到第三方程序的要求,同時考慮到貿易協定/折扣等生成客戶價目表

爲了得到客戶的名單通過項目我曾嘗試:

  1. 創建一個雙循環(所有客戶如外環,內環與所有項目)
  2. 創建加入的CustTable SELECT語句inventTable

要生成價格,我一直在爲給定的客戶/項目創建一個假的SalesLine和執行salesLine.calcLineAmount(1) X ++

但是這需要約6小時內處理的完整的客戶/項目名單。

我唯一擁有的另一件事是運行這個過程一次並存儲在一個表中,然後任何時候價格/交易協議/折扣改變,只更新相關記錄。

有沒有人有更好的方法來實現這個結果的任何其他建議?

回答

3

您是如何將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()]; 
     } 
    } 
} 
+0

感謝亞歷克斯,我試過了你的建議的一個變種,但對於客戶的需求還是太慢了。 我認爲這證實了我的懷疑,這不是一個可行的解決方案,我需要採取不同的方法來解決整個問題。 – Zordey

+0

根據您擁有的客戶/物品的數量,它可以達到天文數字。我的方法至少是否更快?另外,如果你選擇一個項目的子集,而不是所有的項目,然後選擇一個一致的定價方案,你可以做一個同步。如果你的價格只是在這個地方,你可能是SOL。 您也可以深入研究PriceDisc以消除多餘的代碼。如果您沒有「全部」或「組」價格規則,那就是不需要的搜索。 –

+0

客戶僅使用其客戶/庫存清單的子集,但總數仍超過100萬條記錄。不誠實的是,我沒有太注意你的方法花了多長時間,客戶要求的時間仍然很長,所以它不是一個可行的解決方案。我想我將不得不隨着出口價格的變化而運行,並進行最小化查詢,而不是進行完整的查找 – Zordey