// Copyright (C), 2015, CEU Co., Ltd.
// USR Changed by 2015-01-20T17:57:50 Fandy Xie 谢宇帆
// Version : 1.0
// Description : 展开BOM明细
// Return :
// BOM Explode using Recursive function.
// This job explode all the sub components of an item.
static void bomExplodeRecursive(Args _args)
{
qty netConsum = 10.00;
inventSiteId inventSiteId = companyInfo::find().fallBackSiteId();
ItemId itemId = "1107";
int linNum;
void explodeBOM(
Itemid parmItemId ,
BOMQty parmNetConsum ,
int parmLevel = 1)
{
BOMversion bomVersion;
inventDim inventDim;
BOM bomLocal;
int tmpLevel = 1;
inventTable inventTable;
;
if (!parmItemId)
return;
netConsum = parmNetConsum;
/*
select firstonly bomVersion
where bomVersion.ItemId == parmItemId &&
bomVersion.Active
join inventDim
where inventDim.inventDimId == bomVersion.InventDimId &&
((inventDim.InventSiteId == inventSiteId ||
!inventSiteId) ||
!inventDim.InventSiteId);
*/
/*
inventDim.InventSizeId = _inventSiteId;
bomVersion = bomVersion::findActive(parmItemId, systemdateget(), 1, inventDim::findOrCreate(inventDim));
*/
while select bomversion index hint BomIdx
where bomversion.ItemId == parmItemId &&
bomversion.Active == Noyes::Yes
join bomLocal index hint NumIdx
where bomLocal.BOMId == bomversion.BOMId
{
inventTable = inventTable::find(bomLocal.ItemId);
if(bomLocal.BOMQtySerie)
parmNetConsum = netConsum * (bomLocal.BOMQty / bomLocal.BOMQtySerie);
else if(bomLocal.BOMQty)
parmNetConsum = netConsum * bomLocal.BOMQty;
else
parmNetConsum = netConsum;
linNum++;
if(inventTable.ItemType == ItemType::BOM)
{
tmpLevel = parmLevel + 1;
warning(strfmt("序号[%1],层次[%2],类型[%3],物料编号[%4],用量[%5].",
linNum, parmLevel, inventTable.ItemType, inventTable.ItemId, parmNetConsum));
explodeBOM(bomLocal.ItemId, parmNetConsum, tmpLevel);
}
else
info( strfmt("序号[%1],层次[%2],类型[%3],物料编号[%4],用量[%5].",
linNum, parmLevel, inventTable.ItemType, inventTable.ItemId, parmNetConsum));
}
}
;
setprefix(strfmt("产品编号[%1], 数量[%2].",itemId, netConsum));
explodeBOM(itemId, netConsum);
}
转载于:https://my.oschina.net/fandyx/blog/369903