我要求按项目价格表生成一个完整的客户,并将其导出到第三方程序,同时考虑到贸易协议/折扣等。
按照我尝试的项目获取客户列表:
要生成价格,我一直在为给定的客户/项目创建假的SalesLine,并在x ++中执行salesLine.calcLineAmount(1)
然而,处理完整的客户/物品清单需要约6个小时。
我唯一的另一件事是运行此流程并存储在一个表格中,然后在价格/交易协议/折扣更改时,只更新相关记录。
有没有人有更好的方法来达到这个结果呢?
答案 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()];
}
}
}