我有一个要求生成一个完整的客户逐个项目价目表出口到第三方计划,考虑到贸易协议/折扣等。
要按我尝试过的项目获取客户列表:
为了获得一个价格,我一直在为给定的客户/项目创建一个假的SalesLine,并在x++中执行salesLine.calcLineAmount(1)
然而,这需要6个小时来处理完整的客户/项目列表。
我唯一想到的另一件事是运行这个过程一次并存储在一个表中,然后在任何价格/贸易协议/折扣被更改时,只更新相关的记录。
有没有人有其他更好的方法来达到这个结果的建议?
发布于 2012-10-11 21:30:50
你是如何加入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()];
}
}
}https://stackoverflow.com/questions/12840895
复制相似问题