陈清红
2025-04-14 880f3c0257eeb8c37761d484258fdd102a369a19
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
Quintiq file version 2.0
#parent: #root
StaticMethod SetPackage_Capacity (
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    // 计划开始时间
    plannedStartDate := macroPlan.StartOfPlanning().Date();
    
    // 设置包装值(符合大类下所有产品非包装量库存加和不能大于系统值)
    factorys               := selectuniquevalues( macroPlan, PackagingPlanRow, tempPPR, true, tempPPR.FactoryAbbreviation() );
    categorys              := selectuniquevalues( macroPlan, PackagingPlanRow, tempPPR, true, tempPPR.Category() );
    traverse ( factorys, Elements, f/*, f = "DL"*/ ) {
      traverse ( categorys, Elements, c/*, c = "ZKG"*/ ) {
        // 系统规定的最大非包装库存数量
        ppmqReflection     := Reflection::FindAttribute( "PackagingPlanMaximumQuantity", f + "_" + c );
        maxPackageQuantity := guard( ppmqReflection.GetNumber( macroPlan.PackagingPlanMaximumQuantity() ), 0 );
        // 当前工厂下一类产品行
        pprs               := selectset( macroPlan, PackagingPlanRow, tempPPR, tempPPR.FactoryAbbreviation() = f and tempPPR.Category() = c );
         
    //    info( "当前工厂:", f, "    当前大类:", c, "    大类下的最大包装数量:", maxPackageQuantity );
        traverse ( macroPlan, PackagingPlanColumn, ppc, ppc.StartDate() > plannedStartDate and maxPackageQuantity > 0 ) {
          sumUnpackagedInventoryQuantity := sum( pprs, Elements.PackagingPlanCell, tempPPCell, tempPPCell.PackagingPlanColumn() = ppc, tempPPCell.UnpackagedInventory() ).Round( 0 );
          
          // 需要包装
          if ( sumUnpackagedInventoryQuantity > maxPackageQuantity ) {
            // 需要包装的数量
            needPackagingQuantity := [Number] ( sumUnpackagedInventoryQuantity - maxPackageQuantity );
            // 按非包装库存排序后的行
            itemPPRs              := selectsortedset( pprs, Elements, tempPPR, true, 
                                                      -select( tempPPR, PackagingPlanCell, tempPPCell, tempPPCell.PackagingPlanColumn() = ppc ).UnpackagedInventory() );
            
    //        info( "需要包装时间:", ppc.StartDate().Format( "Y-M2-D2" ), "    需要包装的数量:", needPackagingQuantity );
            traverse ( itemPPRs, Elements, ppr, needPackagingQuantity > 0 ) {
              PackagingPlanCell::Package( macroPlan, ppr, ppc, needPackagingQuantity );
            }
          }
        }
      }
    }
  *]
}