Exhibit BOM number code
/****
The following X++ code was used to exhibit BOM number
Remark by Jimmy August 27th 2010
*/
Class name QVS_ExhibitBOM
/****
The following X++ code was used to exhibit BOM number
Remark by Jimmy August 27th 2010
*/
class QVS_ExhibitBOM
{
int i;
Real NetConsum; }
The method of ParmExhibitBOM
void ParmExhibitBOM(ItemId _ItemId = "") //Exhibit standard BOM method
{
query q;
queryRun queryRun;
QueryBuildDataSource qbdsIT,qbdsVersion,qbdsBOM;
InventTable _InventTable;
BOM _BOM;
BomVersion _BomVersion;
;
q = new query();
qbdsIT = q.addDataSource(tablenum(InventTable));
if(_ItemId)
qbdsIT.addRange(fieldnum(InventTable,Itemid)).value(_ItemId);
qbdsIT.addRange(fieldnum(InventTable,Itemtype)).value(queryValue(ItemType::BOM));
qbdsVersion = qbdsIT.addDataSource(tablenum(BomVersion));
qbdsVersion.addLink(fieldnum(InventTable,ItemId),fieldnum(BomVersion,ItemId));
qbdsVersion.addRange(fieldnum(BomVersion,Active)).value(queryValue(Noyes::Yes));
qbdsVersion.addRange(fieldnum(BomVersion,Approved)).value(queryValue(Noyes::Yes));
qbdsBOM = qbdsVersion.addDataSource(Tablenum(BOM));
qbdsBOM.addLink(fieldnum(BomVersion,BomId),fieldnum(BOM,BomId));
queryRun = new QueryRun(q);
while (queryRun.next())
{
_BOM = queryRun.get(tablenum(BOM));
_InventTable = queryRun.get(tablenum(InventTable));
_BomVersion = queryRun.get(tablenum(BomVersion));
i = 1;
if(_BOM.BOMQtySerie)
NetConsum = _BOM.BOMQty / _BOM.BOMQtySerie;
else if(_BOM.BOMQty)
NetConsum = _BOM.BOMQty;
else
NetConsum = 1;
if(Inventtable::find(_BOM.ItemID).ItemType == ItemType::BOM)//Exhibit next BOM number
{
this.insertConsumeListNext(_InventTable,_BOM,_BOM.BomId,_BomVersion.BOMId,i,NetConsum);
i++;
this.RankGetItem(_BOM.ItemId,_InventTable,i,NetConsum);
}
else
this.insertConsumeListNext(_InventTable,_BOM,_BOM.BomId,_BomVersion.BOMId,i,NetConsum);//get Item number of Item type is Item
}
}
The method of RankGetItem
void RankGetItem(ItemId _ItemId,//finished BOM number
InventTable InventTable,
int level,
Price _NetConsum)
{
BOM _bom;
BomVersion _bomversion;
Inventtable _Inventtable;
Int TmpLevel = 1;
;
NetConsum = _NetConsum;
while select _bomversion index hint BomIdx
where _bomversion.ItemId == _ItemId
&& _bomversion.Active == Noyes::Yes && _bomversion.Approved == Noyes::Yes
join _bom index hint NumIdx
order by BOMId where _bom.BOMId == _bomversion.BOMId
join _Inventtable
where _Inventtable.ItemId == _bom.ItemId //&& _Inventtable.ItemType != ItemType::Service
{
if(_bom.BOMQtySerie)
_NetConsum = NetConsum * (_bom.BOMQty / _bom.BOMQtySerie);
else if(_bom.BOMQty)
_NetConsum = NetConsum * _bom.BOMQty;
else
_NetConsum = NetConsum;
if(_Inventtable.ItemType == ItemType::BOM)
{
this.insertConsumeListNext(InventTable,_bom,_bom.ItemId,_bomversion.BOMId,level,_NetConsum);
TmpLevel = level + 1;
this.RankGetItem(_bom.ItemId,InventTable,TmpLevel,_NetConsum);
}
else
this.insertConsumeListNext(InventTable,_bom,_bom.ItemId,_bomversion.BOMId,level,_NetConsum);
}
}
The method of insertConsumeListNext
void insertConsumeListNext(InventTable _InventTable ,//finished production
BOM _BOM ,
ItemId _ItemId = ',' ,
BomId _BomId = "" ,
int _level ,
Price _NetConsum)//BomBersion
{
QVS_ExhibitBOMList _ExhibitBOMList;
;
_ExhibitBOMList.clear();
_ExhibitBOMList.BomId = _InventTable.ItemId;
_ExhibitBOMList.SubBomId = _BOM.BOMId;
_ExhibitBOMList.ItemID = _BOM.ItemId;
_ExhibitBOMList.BOMVersion = _BOMId;
_ExhibitBOMList.BomQty = _BOM.BOMQty;
_ExhibitBOMList.BOMQtySerie = _BOM.BOMQtySerie;
if(_BOM.BOMQtySerie)
_ExhibitBOMList.BOMUsege = _BOM.BOMQty / _BOM.BOMQtySerie;
else
_ExhibitBOMList.BOMUsege = _BOM.BOMQty;
_ExhibitBOMList.ItemType = _BOM.itemType();
_ExhibitBOMList.LevelRecId = _BOM.RecId;
_ExhibitBOMList.NetConsumption = _NetConsum;
_ExhibitBOMList.Level = _level;
_ExhibitBOMList.flag = StrFmt("%1 Level",_level);
_ExhibitBOMList.insert();
}
Job demo(version)
Jimmy 2010-09-14
static void Jimmy_ExhibitBOMItemList(Args _args)
{
InventTable InventTable,g_IT;
BOMVersion BOMVersion;
Bom SelectBom;
Int g_Level,_TmpLevel;
Test Test;
BOM BOM;
ItemId g_ItemId;
int MM;
Dialog dlg = new Dialog("Please enter the Productin Number!");
DialogField dlgItemId = dlg.addField(typeid(ItemId));
void insertTable(BOM _Bom,
InventTable _InventTable)
{
;
test.g_ItemId = g_ItemId;
test.BomId = _Bom.BOMId;
test.ItemId = _Bom.ItemId;
test.Id = g_Level;
test.ItemType = _InventTable.ItemType;
test.Insert();
MM++;
}
void LevelBomGen(Int _level, Bom _Bom)
{
BOM _TmpBom;
int TmpLevel;
InventTable IT;
;
if (_level ==20)
return;
IT = InventTable::find(_Bom.ItemId);
if (IT.ItemType == ItemType::BOM)
{
insertTable(_Bom,IT);
g_Level++;
while select _TmpBom where _TmpBom.BOMId == _Bom.ItemId
{
TmpLevel = g_Level;
LevelBomGen(g_Level,_TmpBom);
g_Level = TmpLevel;
}
}
else
insertTable(_Bom,IT);
}
;
dlg.doInit();
dlgItemId.value("20-3805");
if(!dlg.run())
return ;
g_ItemId = dlgItemId.value();
delete_from test;
while select InventTable
where InventTable.ItemId == g_ItemId //"20-3805"
join BOMVersion
where BOMVersion.ItemId == InventTable.ItemId
join BOM
where BOM.BOMId == BOMVersion.BOMId
{
g_Level = 1;
g_IT = InventTable::find(BOM.ItemId);
if(g_IT.ItemType == ItemType::BOM)
{
insertTable(BOM,g_IT);
g_Level++;
while select * from SelectBom where SelectBom.BOMId == BOM.ItemId
{
_TmpLevel = g_Level;
LevelBomGen(g_Level,SelectBom);
g_Level = _TmpLevel;
}
}
else
insertTable(BOM,g_IT);
}
info(strfmt("Total %1 records!s",MM));
}

浙公网安备 33010602011771号