生成客户价格表

时间:2012-10-11 13:38:51

标签: axapta

我要求按项目价格表生成一个完整的客户,并将其导出到第三方程序,同时考虑到贸易协议/折扣等。

按照我尝试的项目获取客户列表:

  1. 创建一个双循环(例如所有客户的外循环,包含所有项目的内循环)
  2. 创建一个将custTable连接到inventTable
  3. 的select语句

    要生成价格,我一直在为给定的客户/项目创建假的SalesLine,并在x ++中执行salesLine.calcLineAmount(1)

    然而,处理完整的客户/物品清单需要约6个小时。

    我唯一的另一件事是运行此流程并存储在一个表格中,然后在价格/交易协议/折扣更改时,只更新相关记录。

    有没有人有更好的方法来达到这个结果呢?

1 个答案:

答案 0 :(得分: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()];
        }
    }
}