Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod IterativeGeneration2 ( 
 | 
  GlobalOTDTable globalOTDTable, 
 | 
  ProductInStockingPoint_MP pisp, 
 | 
  Date targetDate, 
 | 
  CapacityAllocationResultsRuleConfigurations carrcs, 
 | 
  Number numberOfLayers, 
 | 
  NewSupply firstLevelSupply, 
 | 
  Real currentLayerDependentDemandQuantity 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    numberOfLayers++; 
 | 
    //info( "目标时间:", targetDate.Format( "Y-M2-D2" ) ); 
 | 
    info( pisp.Name() ); 
 | 
    traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, pispippl.Start().Date() = targetDate ) { 
 | 
      traverse ( pispippl, NewSupply, ns, ns.Quantity() > 0 ) { 
 | 
        if ( numberOfLayers = 1 ) { 
 | 
          firstLevelSupply := ns; 
 | 
        } 
 | 
         
 | 
        ontype( ns.PeriodTask_MP() ) { 
 | 
          PeriodTaskOperation as pto : { 
 | 
    //        info( "Operation周期任务..." );      
 | 
            traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) { 
 | 
              if ( numberOfLayers = 1 ) { 
 | 
                currentLayerDependentDemandQuantity := ns.Quantity(); 
 | 
              } 
 | 
              currentLayerDependentDemandQuantity := currentLayerDependentDemandQuantity                     *  
 | 
                                                     ns.ProcessOutput().astype( OperationOutput ).Quantity() * 
 | 
                                                     dd.ProcessInput().astype( OperationInput ).Quantity(); 
 | 
    //          info( "层数:", numberOfLayers, "    当前供应的pisp:", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    总供应值:", ns.Quantity(), "    需要供应值:", currentLayerDependentDemandQuantity, 
 | 
    //                "    当前需求pisp:", dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    需求值:", currentLayerDependentDemandQuantity ); 
 | 
    //          info( "-----------------------------------------------------------------------------------------------------------------" ); 
 | 
              CapacityAllocationResults::IterativeGeneration2( globalOTDTable, 
 | 
                                                               dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(), 
 | 
                                                               targetDate, 
 | 
                                                               carrcs, 
 | 
                                                               numberOfLayers, 
 | 
                                                               firstLevelSupply, 
 | 
                                                               currentLayerDependentDemandQuantity 
 | 
                                                              ); 
 | 
            } 
 | 
            carrc := select( carrcs, Elements, carrc, carrc.PanelMaterialCode() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() ); 
 | 
            if ( not isnull( carrc ) ) { 
 | 
    //          info( "找到面板物料..." ); 
 | 
              globalOTDTable.CapacityAllocationResults( relnew, 
 | 
                                                        PanelBase             := pto.Operation().UnitID(), 
 | 
                                                        PanelMaterialCode     := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(), 
 | 
                                                        NumberOfPanels        := currentLayerDependentDemandQuantity, 
 | 
                                                        PanelMeasurementUnit  := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(), 
 | 
                                                        ModuleMaterialCode    := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(), 
 | 
                                                        NumberOfModules       := firstLevelSupply.Quantity(), 
 | 
                                                        ModuleMeasurementUnit := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(), 
 | 
                                                        ModuleBase            := guard( firstLevelSupply.PeriodTask_MP().astype( PeriodTaskOperation ).Operation().UnitID(), "车道运输" ), 
 | 
                                                        Division              := carrc.Division(), 
 | 
                                                        RequirementDate       := ns.Start().Date(), 
 | 
                                                        Date                  := ns.Start().Date(), 
 | 
                                                        Description           := "", 
 | 
                                                        ID                    := OS::GenerateGUIDAsString(), 
 | 
                                                        ProductID             := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(), 
 | 
                                                        StockingPointID       := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().StockingPointID(), 
 | 
                                                        UserQuantity          := currentLayerDependentDemandQuantity, 
 | 
                                                        ManufacturedDate      := Date::MinDate() 
 | 
                                                       ); 
 | 
                                                         
 | 
            } 
 | 
            info( "-----------------------------------------------------------------------------------------------------------------" ); 
 | 
          } 
 | 
           
 | 
          PeriodTaskLaneLeg as ptll : { 
 | 
            targetDependentDemand := select( ptll, DependentDemand, dd, dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() ); 
 | 
            currentLayerDependentDemandQuantity := ifexpr( numberOfLayers = 1, targetDependentDemand.Quantity(), currentLayerDependentDemandQuantity ); 
 | 
    //        info( "层数:", numberOfLayers,"    当前供应的pisp:", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    总供应值:", ns.Quantity(), "    需要供应值:", currentLayerDependentDemandQuantity, 
 | 
    //              "    当前需求pisp:", targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    需求值:", currentLayerDependentDemandQuantity ); 
 | 
    //        info( "LaneLeg周期任务..." ); 
 | 
            info( "-----------------------------------------------------------------------------------------------------------------" ); 
 | 
            CapacityAllocationResults::IterativeGeneration2( globalOTDTable, 
 | 
                                                             targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(), 
 | 
                                                             targetDate, 
 | 
                                                             carrcs, 
 | 
                                                             numberOfLayers, 
 | 
                                                             firstLevelSupply, 
 | 
                                                             currentLayerDependentDemandQuantity 
 | 
                                                            ); 
 | 
          } 
 | 
        } 
 | 
         
 | 
        if ( numberOfLayers = 1 ) { 
 | 
          firstLevelSupply := null( NewSupply ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
} 
 |