2

貿易協定/割引などを考慮して、アイテムの価格表ごとに完全な顧客を生成し、サードパーティのプログラムにエクスポートする必要があります。

私が試したアイテムごとに顧客のリストを取得するには:

  1. ダブルループの作成(例:すべての顧客の外側のループ、すべてのアイテムの内側のループ)
  2. custTableをinventTableに結合するselectステートメントを作成する

価格を生成するために、特定の顧客/アイテムの偽のSalesLineを作成しsalesLine.calcLineAmount(1)、x++で実行しています。

ただし、これは完全な顧客/アイテムリストを処理するのに最大6時間かかります。

私が持っている他の唯一のことは、このプロセスを一度実行してテーブルに保存することです。その後、価格/貿易協定/割引が変更されるたびに、関連するレコードのみを更新します。

この結果を達成するためのより良い方法について他に何か提案はありますか?

4

1 に答える 1

4

どのようにして 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()];
        }
    }
}
于 2012-10-11T21:30:50.797 に答える