| | |
| | | ) |
| | | { |
| | | Description: '铺线后续处理' |
| | | TextBody: |
| | | [* |
| | | // 所有上线计划产线 |
| | | pls := selectuniquevalues( macroPlan, NewAssemblyOnlinePlanRow, tempNAOPR, true, tempNAOPR.ProductionLine() ); |
| | | |
| | | // 是否执行处理标志 |
| | | isFlag := false; |
| | | |
| | | traverse ( pls, Elements, pl |
| | | // , pl = "CC MoMo" |
| | | ) { |
| | | traverse ( macroPlan, NewAssemblyOnlinePlanColumn, naopc |
| | | // , naopc.StartDate() <= Date::Construct( 2025, 2, 15 ) |
| | | ) { |
| | | // 需要处理的数量 |
| | | targetQuantity := ifexpr( pl = "CC MoMo", guard( macroPlan.AssemblyOnlineQuantity().CCMoMo(), 0 ), |
| | | ifexpr( pl = "DL MoMo", guard( macroPlan.AssemblyOnlineQuantity().DLMoMo(), 0 ), guard( macroPlan.AssemblyOnlineQuantity().DLZKM(), 0 ) ) |
| | | ); |
| | | |
| | | currentCells := selectset( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl and tempNAOPCell.Quantity() > 0 ); |
| | | isFlag := ifexpr( exists( currentCells, Elements, tempNAOPCell, tempNAOPCell.LineLayingOrEmptying() = "铺线" ), true, |
| | | ifexpr( exists( currentCells, Elements, tempNAOPCell, tempNAOPCell.LineLayingOrEmptying() = "拉空" ), false, isFlag ) ); |
| | | // info( "日期:", naopc.StartDate().Format( "Y-M2-D2" ), " 是否处理:", isFlag, " 当前单元格数量:", currentCells.Size(), "----------------------------" ); |
| | | |
| | | // 处理铺线后的逻辑 |
| | | if ( isFlag and currentCells.Size() > 0 ) { |
| | | targetNAOPC := minselect( macroPlan, NewAssemblyOnlinePlanColumn, tempNAOPC, |
| | | exists( tempNAOPC, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl and tempNAOPCell.OrderNr() > 0, tempNAOPCell.Quantity() > 0 ) and |
| | | tempNAOPC.StartDate() > naopc.StartDate(), tempNAOPC.StartDate() ); |
| | | |
| | | if ( not isnull( targetNAOPC ) ) { |
| | | // info( "最小列时间:", targetNAOPC.StartDate().Format( "Y-M2-D2" ) ); |
| | | targetCells := selectset( targetNAOPC, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl ); |
| | | |
| | | // 目标单元格 |
| | | targetCell := minselect( targetCells, Elements, tempNAOPCell, tempNAOPCell.OrderNr() > 0 and tempNAOPCell.Quantity() > 0, tempNAOPCell.OrderNr() ); |
| | | finalQuantity := minvalue( targetQuantity, targetCell.Quantity() ); |
| | | currentCell := select( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow() = targetCell.NewAssemblyOnlinePlanRow() ); |
| | | |
| | | while ( targetQuantity > 0 and finalQuantity > 0 ) { |
| | | targetCell.Quantity( targetCell.Quantity() - finalQuantity ); |
| | | currentCell.Quantity( currentCell.Quantity() + finalQuantity ); |
| | | if ( currentCell.OrderNr() <= 0 ) { |
| | | orderNr := maxselect( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, |
| | | tempNAOPCell.NewAssemblyOnlinePlanRow().ProductionLine() = pl and tempNAOPCell.Quantity() > 0, |
| | | tempNAOPCell.OrderNr() ).OrderNr() + 1; |
| | | // info( orderNr ); |
| | | currentCell.OrderNr( orderNr ); |
| | | currentCell.Order( "#" + orderNr.Format( "N(LPad0(2))" ) ); |
| | | } |
| | | |
| | | targetQuantity := targetQuantity - [Number]finalQuantity; |
| | | targetCell := minselect( targetCells, Elements, tempNAOPCell, tempNAOPCell.OrderNr() > 0 and tempNAOPCell.Quantity() > 0, tempNAOPCell.OrderNr() ); |
| | | finalQuantity := minvalue( targetQuantity, targetCell.Quantity() ); |
| | | currentCell := select( naopc, NewAssemblyOnlinePlanCell, tempNAOPCell, tempNAOPCell.NewAssemblyOnlinePlanRow() = targetCell.NewAssemblyOnlinePlanRow() ); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | *] |
| | | } |