您是如何将 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()];
}
}
}