Quintiq file version 2.0
|
#parent: #root
|
Method DoASyncMappingOperationBOMData (
|
Strings businessTypes,
|
Boolean isKeyProduct,
|
Boolean createPurchaseSupplyMaterial,
|
const GlobalOTDTable globalOTDTable,
|
Strings organcodelist
|
)
|
{
|
TextBody:
|
[*
|
// yypsybs Aug-21-2023 (created)
|
keyProductList := construct( Strings );
|
if( isKeyProduct ) {
|
keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="成品" or item.ProductMajorType()="半成品", item.ID() );
|
}
|
bomList := selectsortedset( globalOTDTable, Global_MappingOperationBOM, item,
|
ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0,
|
true,
|
// businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
|
( businessTypes.Find( item.BusinessType() ) >= 0 ) and
|
( organcodelist.Find( item.OrganCode() ) >= 0 ) )
|
// and ifexpr( isKeyProduct,
|
// keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
|
// true )
|
,
|
item.OrganCode() + "_" + item.ProductCode() + "_" + item.ProcessSection() );
|
// 按routing及routingStep分组
|
routingIds := selectuniquevalues( bomList, Elements, item, true, item.OrganCode() + "_" + item.ProductCode() );
|
traverse( routingIds, Elements, routingId ) {
|
routingRows := selectset( bomList, Elements, item, true, routingId = item.OrganCode() + "_" + item.ProductCode() );
|
if( routingRows.Size() > 0 ) {
|
firstRow := routingRows.Element( 0 );
|
// stockingPointId := firstRow.OrganCode() + "_" + firstRow.ProductType() + "_Stock";
|
// inputStockingPointId := firstRow.OrganCode() + "_" + firstRow.ComponentType() + "_Stock";
|
stockingPointId := firstRow.OrganCode() + "_Stock";
|
|
// ========检查========
|
product := Product_MP::FindProductTypeIndex( firstRow.ProductCode() );
|
if( not isnull( product ) ) {
|
// error( "product : " + firstRow.ProductCode() + " not found" );
|
stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( stockingPointId );
|
|
// info( stockingPointId.AsQUILL() );
|
// if( isnull( stockingPoint ) ) {
|
// error( "stockingPoint : " + stockingPointId + " not found" );
|
// }
|
routing := Routing::FindRoutingTypeIndex( routingId );
|
if( not isnull( routing ) ) {
|
// error( "routing : " + routingId + " not found" );
|
// ========处理输出========
|
if( not isnull( stockingPoint ) ) {
|
// info( 1 );
|
operationsInLastSteps := Operation::FindFinalOperationsByRoutingId( this, routingId );
|
traverse( operationsInLastSteps, Elements, operationsInLastStep ) {
|
operationsInLastStep.CreateOperationBOM( product, stockingPoint, false, true );
|
operationsInLastStep.GetOperationBOM( product.ID(), stockingPoint.ID(), false ).Quantity( 1 );
|
}
|
// ========分组处理输入========
|
|
}
|
|
if( not isnull( stockingPoint)){
|
if( isKeyProduct){
|
keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
|
this.DoASyncMappingOperationBOMDataRouting( routing,globalOTDTable,keyRows);
|
}else{
|
this.DoASyncMappingOperationBOMDataRouting( routing,globalOTDTable,routingRows);
|
}
|
|
}
|
}
|
}
|
}
|
}
|
if( createPurchaseSupplyMaterial ) {
|
toCreateBomList := construct( Strings );
|
alterCodes := construct( Strings );
|
|
if( isKeyProduct){
|
toCreateBomList := selectuniquevalues( bomList, Elements, item,
|
item.ComponentType() = "P" and keyProductList.Find( item.ComponentCode())>=0, item.OrganCode() + item.ComponentCode());
|
|
alterCodes := selectuniquevalues( bomList, Elements, item,
|
not item.AlternativeMaterialCode() = "" and item.AlternativeMaterialType() = "P" and keyProductList.Find( item.ComponentCode())>=0, item.OrganCode() + item.AlternativeMaterialCode());
|
}else{
|
toCreateBomList := selectuniquevalues( bomList, Elements, item,
|
item.ComponentType() = "P" , item.OrganCode() + item.ComponentCode());
|
|
alterCodes := selectuniquevalues( bomList, Elements, item,
|
not item.AlternativeMaterialCode() = "" and item.AlternativeMaterialType() = "P", item.OrganCode() + item.AlternativeMaterialCode());
|
}
|
toCreateBomList := toCreateBomList.Union( alterCodes);
|
traverse( toCreateBomList, Elements, key ) {
|
boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.ComponentCode() = key );
|
bom := boms.First();
|
this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
|
}
|
}
|
|
|
//
|
//keyProductList := construct( Strings );
|
//if( isKeyProduct ) {
|
// keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="成品" or item.ProductMajorType()="半成品", item.ID() );
|
//}
|
//bomList := selectsortedset( globalOTDTable, Global_MappingOperationBOM, item,
|
// ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0,
|
// true,
|
//// businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
|
// businessTypes.Find( item.BusinessType() ) >= 0 )
|
//// and ifexpr( isKeyProduct,
|
//// keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
|
//// true )
|
// ,
|
// item.OrganCode() + "_" + item.ProductCode() + "_" + item.ProcessSection() );
|
//// 按routing及routingStep分组
|
//routingIds := selectuniquevalues( bomList, Elements, item, true, item.OrganCode() + "_" + item.ProductCode() );
|
//traverse( routingIds, Elements, routingId ) {
|
// routingRows := selectset( bomList, Elements, item, true, routingId = item.OrganCode() + "_" + item.ProductCode() );
|
// if( routingRows.Size() > 0 ) {
|
// firstRow := routingRows.Element( 0 );
|
//// stockingPointId := firstRow.OrganCode() + "_" + firstRow.ProductType() + "_Stock";
|
//// inputStockingPointId := firstRow.OrganCode() + "_" + firstRow.ComponentType() + "_Stock";
|
// stockingPointId := firstRow.OrganCode() + "_Stock";
|
//
|
// // ========检查========
|
// product := Product_MP::FindProductTypeIndex( firstRow.ProductCode() );
|
// if( not isnull( product ) ) {
|
//// error( "product : " + firstRow.ProductCode() + " not found" );
|
// stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( stockingPointId );
|
//
|
//// info( stockingPointId.AsQUILL() );
|
// // if( isnull( stockingPoint ) ) {
|
// // error( "stockingPoint : " + stockingPointId + " not found" );
|
// // }
|
// routing := Routing::FindRoutingTypeIndex( routingId );
|
// if( not isnull( routing ) ) {
|
//// error( "routing : " + routingId + " not found" );
|
// // ========处理输出========
|
// if( not isnull( stockingPoint ) ) {
|
//// info( 1 );
|
// operationsInLastSteps := Operation::FindFinalOperationsByRoutingId( this, routingId );
|
// traverse( operationsInLastSteps, Elements, operationsInLastStep ) {
|
// operationsInLastStep.CreateOperationBOM( product, stockingPoint, false, true );
|
// operationsInLastStep.GetOperationBOM( product.ID(), stockingPoint.ID(), false ).Quantity( 1 );
|
// }
|
// // ========分组处理输入========
|
//
|
// }
|
// if( not isnull( stockingPoint)){
|
// if( isKeyProduct){
|
// keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
|
// this.MappingOperationBOMDataRouting( routing,globalOTDTable,keyRows);
|
// }else{
|
// this.MappingOperationBOMDataRouting( routing,globalOTDTable,routingRows);
|
// }
|
//
|
// }
|
// }
|
// }
|
// }
|
//}
|
//if( createPurchaseSupplyMaterial ) {
|
// toCreateBomList := selectuniquevalues( bomList, Elements, item,
|
// item.ComponentType() = "P", item.OrganCode() + item.ComponentCode());
|
// traverse( toCreateBomList, Elements, key ) {
|
// boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.ComponentCode() = key );
|
// bom := boms.First();
|
// this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
|
// }
|
//}
|
*]
|
}
|