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 ) {
|
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,
|
currentLayerDependentDemandQuantity
|
);
|
}
|
}
|
|
if ( numberOfLayers = 1 ) {
|
firstLevelSupply := null( NewSupply );
|
}
|
}
|
}
|
*]
|
}
|