renhao
2023-10-13 d84116e0214c2228d4b4b07ade372c96a15c32f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Quintiq file version 2.0
#parent: #root
StaticMethod IterativeGeneration3 (
  Supply_MP smp,
  Number numberOfPlies,
  Real fulfillmentQuantity
)
{
  TextBody:
  [*
    info( "层数:", numberOfPlies );
    ontype ( smp ) {
      NewSupply as ns : {
        info( "供应类型(NewSupply)", "    供应量:", ns.Quantity(), "    实际用量:", fulfillmentQuantity );
        ontype ( ns.PeriodTask_MP() ) {
          PeriodTaskOperation as pto : {
            info( "操作周期任务    ", "供应时间:", ns.Start().Format( "Y-M2-D2" ), "    周期任务KEY:", pto.Key(), "    ",
                  ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
            traverse ( pto, DependentDemand, dd, dd.Quantity() > 0 ) {
              traverse ( dd, Fulfillment, f ) {
                smp1 := f.Supply_MP();
                numberOfPlies++;
                info( "--------------------------------------------------------------" );
                fulfillmentQuantity := fulfillmentQuantity * ns.ProcessOutput().astype( OperationOutput ).Quantity() *
                                                             dd.ProcessInput().astype( OperationInput ).Quantity();
                CapacityAllocationResults::IterativeGeneration3( smp1, numberOfPlies, fulfillmentQuantity );
                numberOfPlies--;
              }
            }
          }
           
          PeriodTaskLaneLeg as ptll : {
            targetDependentDemand := select( ptll, DependentDemand, dd, dd.ProcessInput().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and
                                             dd.Quantity() = ns.Quantity() );
            info( "车道周期任务    ", "供应时间:", ns.Start().Format( "Y-M2-D2" ), "    周期任务KEY:", ptll.Key(), "    ", 
                  targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
            traverse ( targetDependentDemand, Fulfillment, f ) {
              smp1 := f.Supply_MP();
              numberOfPlies++;
              info( "--------------------------------------------------------------" );
              CapacityAllocationResults::IterativeGeneration3( smp1, numberOfPlies, f.Quantity() );
              numberOfPlies--;
            } 
          }
        }
      }
          
      InventorySupply as is : {
        info( "供应类型(InventorySupply)    ", "供应时间:", is.Date().Format( "Y-M2-D2" ), "    供应量:", is.Quantity(), 
              "    实际用量:", fulfillmentQuantity, "    ", is.ProductInStockingPoint_MP().Name() );
      }
    }
  *]
}