| | |
| | | } |
| | | |
| | | // 赋值单元格 |
| | | cellQuantity := opc.OfflinePlanCell( relnew, Value := [String]ns.Quantity().Round( 0 ), Shift := ns.PeriodTask_MP().UnitPeriod().astype( UnitPeriodTimeBase ).ShiftPattern().Name(), Quantity := ns.Quantity() ); |
| | | cellQuantity.OfflinePlanRow( relset, oprQuantity ); |
| | | cellOrder := opc.OfflinePlanCell( relnew, Value := "单号" + [String]ns.Quantity().Round( 0 ) + "_" + [String]( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ), |
| | | Quantity := ns.Quantity(), |
| | | InventoryWeight := ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ); |
| | | cellOrder.OfflinePlanRow( relset, oprOrder ); |
| | | cellQuantity := oprQuantity.OfflinePlanCell( relnew, Value := [String]ns.Quantity().Round( 0 ), Shift := ns.PeriodTask_MP().UnitPeriod().astype( UnitPeriodTimeBase ).ShiftPattern().Name() ); |
| | | cellQuantity.OfflinePlanColumn( relset, opc ); |
| | | cellOrder := oprOrder.OfflinePlanCell( relnew, |
| | | // Value := "单号" + [String]ns.Quantity().Round( 0 ) + "_" + [String]( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ), |
| | | Value := [String]ns.Quantity().Round( 0 ), |
| | | InventoryWeight := ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ); |
| | | cellOrder.OfflinePlanColumn( relset, opc ); |
| | | } |
| | | } |
| | | |
| | |
| | | typeOPC := opt.OfflinePlanColumn( relnew, ColumnDate := macroPlan.StartOfPlanning().Date() - 1 ); |
| | | traverse ( opt, OfflinePlanRow, opr ) { |
| | | if ( opr.Type() = "0" ) { |
| | | productLineCell := productOPC.OfflinePlanCell( relnew, Value := opr.ProductionLine() ); |
| | | productLineCell.OfflinePlanRow( relset, opr ); |
| | | productLineCell := opr.OfflinePlanCell( relnew, Value := opr.ProductionLine() ); |
| | | productLineCell.OfflinePlanColumn( relset, productOPC ); |
| | | } else if( opr.Type() = "1" ) { |
| | | productCell := productOPC.OfflinePlanCell( relnew, Value := opr.ProductID() + ifexpr( opr.Notes() = "", "", "-" + opr.Notes() ) ); |
| | | productCell.OfflinePlanRow( relset, opr ); |
| | | typeCell := typeOPC.OfflinePlanCell( relnew, Value := "Quantity" ); |
| | | typeCell.OfflinePlanRow( relset, opr ); |
| | | productCell := opr.OfflinePlanCell( relnew, Value := opr.ProductID() + ifexpr( opr.Notes() = "", "", "-" + opr.Notes() ) ); |
| | | productCell.OfflinePlanColumn( relset, productOPC ); |
| | | typeCell := opr.OfflinePlanCell( relnew, Value := "Quantity" ); |
| | | typeCell.OfflinePlanColumn( relset, typeOPC ); |
| | | } else if ( opr.Type() = "2" ) { |
| | | typeCell := typeOPC.OfflinePlanCell( relnew, Value := "Order" ); |
| | | typeCell.OfflinePlanRow( relset, opr ); |
| | | typeCell := opr.OfflinePlanCell( relnew, Value := "Order" ); |
| | | typeCell.OfflinePlanColumn( relset, typeOPC ); |
| | | } else if ( opr.Type() = "3" ) { |
| | | totalCell := productOPC.OfflinePlanCell( relnew, Value := "合计" ); |
| | | totalCell.OfflinePlanRow( relset, opr ); |
| | | totalCell := typeOPC.OfflinePlanCell( relnew, Value := "总量" ); |
| | | totalCell.OfflinePlanRow( relset, opr ); |
| | | totalCell := opr.OfflinePlanCell( relnew, Value := "合计" ); |
| | | totalCell.OfflinePlanColumn( relset, productOPC ); |
| | | totalCell := opr.OfflinePlanCell( relnew, Value := "总量" ); |
| | | totalCell.OfflinePlanColumn( relset, typeOPC ); |
| | | } else if ( opr.Type() = "4" ) { |
| | | shiftCell := typeOPC.OfflinePlanCell( relnew, Value := "班次" ); |
| | | shiftCell.OfflinePlanRow( relset, opr ); |
| | | shiftCell := opr.OfflinePlanCell( relnew, Value := "班次" ); |
| | | shiftCell.OfflinePlanColumn( relset, typeOPC ); |
| | | } else if ( opr.Type() = "5" ) { |
| | | shiftStartDateCell := typeOPC.OfflinePlanCell( relnew, Value := "班次开始时间" ); |
| | | shiftStartDateCell.OfflinePlanRow( relset, opr ); |
| | | shiftStartDateCell := opr.OfflinePlanCell( relnew, Value := "班次开始时间" ); |
| | | shiftStartDateCell.OfflinePlanColumn( relset, typeOPC ); |
| | | } else if ( opr.Type() = "6" ) { |
| | | shiftEndDateCell := typeOPC.OfflinePlanCell( relnew, Value := "班次结束时间" ); |
| | | shiftEndDateCell.OfflinePlanRow( relset, opr ); |
| | | shiftEndDateCell := opr.OfflinePlanCell( relnew, Value := "班次结束时间" ); |
| | | shiftEndDateCell.OfflinePlanColumn( relset, typeOPC ); |
| | | } |
| | | } |
| | | |
| | |
| | | // 补全总量 |
| | | traverse ( totalOPRs, Elements, totalOPR ) { |
| | | total := sum( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = totalOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1", [Real]tempOPC.Value() ); |
| | | totalCell := opc.OfflinePlanCell( relnew, Value := [String]total ); |
| | | totalCell.OfflinePlanRow( relset, totalOPR ); |
| | | totalCell := totalOPR.OfflinePlanCell( relnew, Value := [String]total ); |
| | | totalCell.OfflinePlanColumn( relset, opc ); |
| | | } |
| | | |
| | | // &班次 |
| | | traverse ( shiftOPRs, Elements, shiftOPR ) { |
| | | shift := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = shiftOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1" ); |
| | | if ( not isnull( shift ) ) { |
| | | shiftCell := opc.OfflinePlanCell( relnew, Value := shift.Shift() ); |
| | | shiftCell.OfflinePlanRow( relset, shiftOPR ); |
| | | shiftCell := shiftOPR.OfflinePlanCell( relnew, Value := shift.Shift() ); |
| | | shiftCell.OfflinePlanColumn( relset, opc ); |
| | | } |
| | | } |
| | | |
| | |
| | | shift := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = ssdOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1" ); |
| | | if ( not isnull( shift ) ) { |
| | | startDate := guard( minselect( macroPlan, ShiftPattern.ShiftDayTime, tempSDT, tempSDT.ShiftPattern().Name() = shift.Shift(), tempSDT.Sequence() ).StartDateTime().Format( "H:m" ), "" ); |
| | | startDateCell := opc.OfflinePlanCell( relnew, Value := startDate ); |
| | | startDateCell.OfflinePlanRow( relset, ssdOPR ); |
| | | startDateCell := ssdOPR.OfflinePlanCell( relnew, Value := startDate ); |
| | | startDateCell.OfflinePlanColumn( relset, opc ); |
| | | } |
| | | } |
| | | |
| | |
| | | shift := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = sedOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1" ); |
| | | if ( not isnull( shift ) ) { |
| | | endDate := guard( maxselect( macroPlan, ShiftPattern.ShiftDayTime, tempSDT, tempSDT.ShiftPattern().Name() = shift.Shift(), tempSDT.Sequence() ).EndDateTIme().Format( "H:m" ), "" ); |
| | | endDateCell := opc.OfflinePlanCell( relnew, Value := endDate ); |
| | | endDateCell.OfflinePlanRow( relset, sedOPR ); |
| | | endDateCell := sedOPR.OfflinePlanCell( relnew, Value := endDate ); |
| | | endDateCell.OfflinePlanColumn( relset, opc ); |
| | | } |
| | | } |
| | | } |
| | |
| | | traverse ( opt, OfflinePlanColumn, opc ) { |
| | | cell := select( opr, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanColumn() = opc ); |
| | | if ( isnull( cell ) ) { |
| | | cell := opc.OfflinePlanCell( relnew, Value := "" ); |
| | | cell.OfflinePlanRow( relset, opr ); |
| | | cell := opr.OfflinePlanCell( relnew, Value := "" ); |
| | | cell.OfflinePlanColumn( relset, opc ); |
| | | } |
| | | } |
| | | } |
| | | |
| | | Transaction::Transaction().Propagate( attribute( OfflinePlanCell, Quantity ) ); |
| | | Transaction::Transaction().PropagateAll(); |
| | | |
| | | // 设置生产顺序 |
| | |
| | | nextColumn := indexColumn.NextColumn(); |
| | | |
| | | while ( not isnull( indexColumn.NextColumn() ) |
| | | // and indexColumn.ColumnDate() <= Date::Construct( 2024, 4, 16 ) // 测试实际场景时可以过滤 |
| | | // and indexColumn.ColumnDate() <= Date::Construct( 2020, 4, 1 ) // 测试实际场景时可以过滤 |
| | | ) { |
| | | productionSerialNumber := 1; |
| | | opcs := selectsortedset( indexColumn, OfflinePlanCell, tempOPC, tempOPC.FindType( "2", pl ), tempOPC.InventoryWeight() ); |
| | | initialSize := opcs.Size(); |
| | | if ( opcs.Size() > 0 ) { |
| | | info( "计划开始时间:", macroPlan.StartOfPlanning().Date().Format( "Y-M2-D2" ), " 索引时间:", indexDate.Format( "Y-M2-D2" ), " 个数:", opcs.Size() ); |
| | | if ( opcs.Size() > 0 ) { |
| | | // 判定1 |
| | | previousOPC := maxselect( previousColumn, OfflinePlanCell, tempOPC, tempOPC.FindType( "2", pl ), tempOPC.ProductionSerialNumber() ); |
| | | if ( isnull( previousOPC ) or indexColumn.ColumnDate() = macroPlan.StartOfPlanning().Date() ) { |