| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | StaticMethod IterativeGeneration2 ( |
| | | GlobalOTDTable globalOTDTable, |
| | | ProductInStockingPoint_MP pisp, |
| | | Date targetDate, |
| | | CapacityAllocationResultsRuleConfiguration carrcs, |
| | | CapacityAllocationResultsRuleConfigurations carrcs, |
| | | Number numberOfLayers, |
| | | Real firstLevelSupply |
| | | NewSupply firstLevelSupply, |
| | | Real currentLayerDependentDemandQuantity |
| | | ) |
| | | { |
| | | TextBody: |
| | | [* |
| | | numberOfLayers++; |
| | | info( "层数:", numberOfLayers, " 目标时间:", targetDate.Format( "Y-M2-D2" ) ); |
| | | |
| | | 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 ) { |
| | | info( "当前供应的pisp:", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() ); |
| | | if ( numberOfLayers = 1 ) { |
| | | firstLevelSupply := ns.Quantity(); |
| | | firstLevelSupply := ns; |
| | | } |
| | | |
| | | if ( guard( ns.PeriodTask_MP().astype( PeriodTaskOperation ).DependentDemand( relsize ) > 0, false ) ) { |
| | | traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) { |
| | | CapacityAllocationResults::IterativeGeneration2( dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(), |
| | | ontype( ns.PeriodTask_MP() ) { |
| | | PeriodTaskOperation as pto : { |
| | | info( "Operation周期任务..." ); |
| | | traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) { |
| | | 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 := "", |
| | | 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 |
| | | firstLevelSupply, |
| | | currentLayerDependentDemandQuantity |
| | | ); |
| | | } |
| | | } |
| | | |
| | | firstLevelSupply := 0.0; |
| | | if ( numberOfLayers = 1 ) { |
| | | firstLevelSupply := null( NewSupply ); |
| | | } |
| | | } |
| | | } |
| | | *] |