Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod Package ( 
 | 
  MacroPlan macroPlan, 
 | 
  PackagingPlanRow ppr, 
 | 
  PackagingPlanColumn ppc, 
 | 
  output Number needPackagingQuantity 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // 计划开始时间 
 | 
    plannedStartDate := macroPlan.StartOfPlanning().Date(); 
 | 
     
 | 
    traverse ( ppr, PackagingPlanCell, ppcell, ppcell.PackagingPlanColumn() = ppc ) { 
 | 
      // Product_MP 
 | 
      pmp                     := select( macroPlan, Product_MP, tempPMP, tempPMP.IsLeaf() and tempPMP.ID() = ppr.ProductID() ); 
 | 
      // 包装lotsize 
 | 
      ppls                    := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() = ppr.Factory() and  
 | 
                                         tempPPLS.ProductID() = ifexpr( exists( macroPlan, PackagingPlanLotSize, tempPPLS1, tempPPLS1.ProductID() = pmp.ID() ), 
 | 
                                                                        pmp.ID(), 
 | 
                                                                        pmp.ParentID() ) ); 
 | 
      // 一日包装容量 
 | 
      ppnc                    := select( macroPlan, PackagingPlanNewCapability, tempPPNC, tempPPNC.Factory() = ppr.Factory() and  
 | 
                                         tempPPNC.ProductID() = ifexpr( exists( macroPlan, PackagingPlanNewCapability, tempPPNC1, tempPPNC1.ProductID() = pmp.ID() ), 
 | 
                                                                        pmp.ID(), 
 | 
                                                                        pmp.ParentID() ) ); 
 | 
      // Unit 
 | 
      us                      := selectset( macroPlan, Unit, tempU, tempU.ID().Regex( ppr.FactoryAbbreviation() + " " + ppr.Category() ) ); 
 | 
        
 | 
      // 包装库存出现负值,需要设置包装量 
 | 
      if ( not isnull( ppls ) and not isnull( ppnc ) ) { 
 | 
        // 包装开始的索引 
 | 
        indexPPCell           := ppcell.Previous(); 
 | 
         
 | 
    //      info( "产线个数:", us.Size(), "    开始时间:", ppcell.StartDate().Format( "Y-M2-D2" ), "    包装库存数量:", ppcell.PackagingInventory(), "    需要包装的数量:", needPackagingQuantity,  
 | 
    //            "    包装lotsize:",guard( ppls.LotSize(), 0 ), "    最大包装容量:", ppnc.MaximumDailyPackagingQuantity() ); 
 | 
           
 | 
        while ( not isnull( indexPPCell )                                                   and  
 | 
                indexPPCell.StartDate() >= plannedStartDate                                 and  
 | 
                exists( us, Elements.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan, tempSP,  
 | 
                        tempSP.UnitPeriodTime().StartDate() = indexPPCell.StartDate(), 
 | 
                        tempSP.Outcome() <> "" )                                            and 
 | 
                needPackagingQuantity > 0 ) { 
 | 
          // 能包装的数量 
 | 
          canPackagingQuantity  := ifexpr( ceil( needPackagingQuantity / ppls.LotSize() ) < floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ), 
 | 
                                           ceil( needPackagingQuantity / ppls.LotSize() ), 
 | 
                                           floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ) ) * ppls.LotSize(); 
 | 
    //        info( "开始包装的日期:", indexPPCell.StartDate().Format( "Y-M2-D2" ), "    能包装的数量:", canPackagingQuantity ); 
 | 
             
 | 
          indexPPCell.Package( canPackagingQuantity ); 
 | 
          Transaction::Transaction().Propagate( attribute( PackagingPlanCell, PackagingInventory ) ); 
 | 
          Transaction::Transaction().Propagate( attribute( PackagingPlanCell, UnpackagedInventory ) ); 
 | 
             
 | 
          needPackagingQuantity := needPackagingQuantity - canPackagingQuantity; 
 | 
          indexPPCell           := indexPPCell.Previous(); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
} 
 |