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 回答