xiaoding721
2024-10-23 cc17c847442b07f7cc1765dca678cd45b199a995
修复一些bug
已重命名3个文件
已添加45个文件
已修改4个文件
953 ■■■■■ 文件已修改
_Main/BL/Relations/Relation_ArchivePackagingPlanCell_ArchivePackagingPlanColumn_ArchivePackagin.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchivePackagingPlanCell_ArchivePackagingPlanRow_ArchivePackagingPl.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchivePackagingPlanColumn_Archive_Archive_ArchivePackagingPlanColu.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchivePackagingPlanRow_Archive_Archive_ArchivePackagingPlanRow.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_CC_PackagingInventory.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_CC_UnpackagedInventory.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_EndingInventory.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_InitialPackagingInventory.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_NetDemand.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_NewSupply.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_Out.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_Package.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_PackagingInventory.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_StartDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_TransferIn.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_UnpackagedInventory.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_Unpacking.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Function_CalcPackagingInventory.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Function_CalcStartDate.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/Function_CalcUnpackagedInventory.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_CalculationPackagingPlanProperties.qbl 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_GenerateReport.qbl 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_Package.qbl 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_SetPackagingAndUnpackingValues.qbl 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanCell/_ROOT_Type_ArchivePackagingPlanCell.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanColumn/Attribute_StartDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanColumn/_ROOT_Type_ArchivePackagingPlanColumn.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_Category.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_Factory.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_FactoryAbbreviation.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_StockingPointID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_Category.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_Factory.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_FactoryAbbreviation.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_Name.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_ProductID.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_StockingPointID.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Function_CalcFactoryAbbreviation.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Function_CalcName.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/Method_FilterProduct.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePackagingPlanRow/_ROOT_Type_ArchivePackagingPlanRow.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTool/StaticMethod_IsOverlap.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon510.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon763.def 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon510_rbgTimeUnit_OnUserChanged.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon763_bComparison_OnClick.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon763_bExport_OnClick.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ArchivePackagingPlanCell_ArchivePackagingPlanColumn_ArchivePackagin.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ArchivePackagingPlanCell_ArchivePackagingPlanColumn_ArchivePackagingPlanColumn_ArchivePackagingPlanCell
{
  #keys: '1[414996.1.150965285]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ArchivePackagingPlanColumn
  {
    #keys: '3[414996.1.150965287][414996.1.150965286][414996.1.150965288]'
    Cardinality: '0to1'
    ObjectDefinition: ArchivePackagingPlanCell
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ArchivePackagingPlanCell
  {
    #keys: '3[414996.1.150965290][414996.1.150965289][414996.1.150965291]'
    Cardinality: '1toN'
    ObjectDefinition: ArchivePackagingPlanColumn
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_ArchivePackagingPlanCell_ArchivePackagingPlanRow_ArchivePackagingPl.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ArchivePackagingPlanCell_ArchivePackagingPlanRow_ArchivePackagingPlanRow_ArchivePackagingPlanCell
{
  #keys: '1[414996.1.150965272]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ArchivePackagingPlanRow
  {
    #keys: '3[414996.1.150965274][414996.1.150965273][414996.1.150965275]'
    Cardinality: '0to1'
    ObjectDefinition: ArchivePackagingPlanCell
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ArchivePackagingPlanCell
  {
    #keys: '3[414996.1.150965277][414996.1.150965276][414996.1.150965278]'
    Cardinality: '1toN'
    ObjectDefinition: ArchivePackagingPlanRow
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ArchivePackagingPlanColumn_Archive_Archive_ArchivePackagingPlanColu.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ArchivePackagingPlanColumn_Archive_Archive_ArchivePackagingPlanColumn
{
  #keys: '1[414996.1.150965298]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Archive
  {
    #keys: '3[414996.1.150965300][414996.1.150965299][414996.1.150965301]'
    Cardinality: '0to1'
    ObjectDefinition: ArchivePackagingPlanColumn
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ArchivePackagingPlanColumn
  {
    #keys: '3[414996.1.150965303][414996.1.150965302][414996.1.150965304]'
    Cardinality: '1toN'
    ObjectDefinition: Archive
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ArchivePackagingPlanRow_Archive_Archive_ArchivePackagingPlanRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ArchivePackagingPlanRow_Archive_Archive_ArchivePackagingPlanRow
{
  #keys: '1[414996.1.150965311]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Archive
  {
    #keys: '3[414996.1.150965313][414996.1.150965312][414996.1.150965314]'
    Cardinality: '0to1'
    ObjectDefinition: ArchivePackagingPlanRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ArchivePackagingPlanRow
  {
    #keys: '3[414996.1.150965316][414996.1.150965315][414996.1.150965317]'
    Cardinality: '1toN'
    ObjectDefinition: Archive
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_CC_PackagingInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute CC_PackagingInventory
{
  #keys: '3[414996.1.150965195][414996.1.150965194][414996.1.150965196]'
  Description: '长春工厂包装库存'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_CC_UnpackagedInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute CC_UnpackagedInventory
{
  #keys: '3[414996.1.150965198][414996.1.150965197][414996.1.150965199]'
  Description: '长春工厂非包装库存'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_EndingInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute EndingInventory
{
  #keys: '3[414996.1.150965201][414996.1.150965200][414996.1.150965202]'
  Description: '期末库存'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_InitialPackagingInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute InitialPackagingInventory
{
  #keys: '3[414996.1.150965204][414996.1.150965203][414996.1.150965205]'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_NetDemand.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute NetDemand
{
  #keys: '3[414996.1.150965207][414996.1.150965206][414996.1.150965208]'
  Description: '净需求'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_NewSupply.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute NewSupply
{
  #keys: '3[414996.1.150965210][414996.1.150965209][414996.1.150965211]'
  Description: '供应'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_Out.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Out
{
  #keys: '3[414996.1.150965213][414996.1.150965212][414996.1.150965214]'
  Description: '调出'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_Package.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Package
{
  #keys: '3[414996.1.150965216][414996.1.150965215][414996.1.150965217]'
  Description: '包装'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_PackagingInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute PackagingInventory
{
  #keys: '3[414996.1.150965219][414996.1.150965218][414996.1.150965220]'
  Description: '包装库存'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_StartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StartDate
{
  #keys: '3[414996.1.150965222][414996.1.150965221][414996.1.150965223]'
  ValueType: Date
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_TransferIn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute TransferIn
{
  #keys: '3[414996.1.150965225][414996.1.150965224][414996.1.150965226]'
  Description: '调进'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_UnpackagedInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute UnpackagedInventory
{
  #keys: '3[414996.1.150965228][414996.1.150965227][414996.1.150965229]'
  Description: '非包装库存'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Attribute_Unpacking.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Unpacking
{
  #keys: '3[414996.1.150965231][414996.1.150965230][414996.1.150965232]'
  Description: '拆包'
  ValueType: Real
}
_Main/BL/Type_ArchivePackagingPlanCell/Function_CalcPackagingInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
Function CalcPackagingInventory
{
  TextBody:
  [*
    // lihongji Jul-26-2024 (created)
    value := ifexpr( this.ArchivePackagingPlanRow().Factory() = "长春工厂", this.CC_PackagingInventory(),
                     this.InitialPackagingInventory() + guard( this.Previous().PackagingInventory()                 +
                                                       guard( this.Package(), 0.0 )                         -
                                                       ifexpr( this.TransferIn() > 0.0, 0, this.Unpacking() ),
                                                       0.0 )
                                              - this.Out()
                    );
    this.PackagingInventory( value );
  *]
}
_Main/BL/Type_ArchivePackagingPlanCell/Function_CalcStartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcStartDate
{
  TextBody:
  [*
    // lihongji Jul-26-2024 (created)
    value := guard( this.ArchivePackagingPlanColumn().StartDate(), Date::MinDate() );
    this.StartDate( value );
  *]
}
_Main/BL/Type_ArchivePackagingPlanCell/Function_CalcUnpackagedInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Function CalcUnpackagedInventory
{
  TextBody:
  [*
    // lihongji Jul-24-2024 (created)
    value := ifexpr( this.ArchivePackagingPlanRow().Factory() = "长春工厂", this.CC_UnpackagedInventory(),
                     guard( this.EndingInventory() - this.PackagingInventory(), 0.0 ) );
    this.UnpackagedInventory( value );
  *]
}
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_CalculationPackagingPlanProperties.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CalculationPackagingPlanProperties
{
  TextBody:
  [*
    Transaction::Transaction().Propagate( attribute( PackagingPlanCell, PackagingInventory ) );
    Transaction::Transaction().Propagate( attribute( PackagingPlanCell, StartDate ) );
    Transaction::Transaction().Propagate( attribute( PackagingPlanCell, UnpackagedInventory ) );
  *]
}
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_GenerateReport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateReport (
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    macroPlan.PackagingPlanRow( relflush );
    macroPlan.PackagingPlanColumn( relflush );
    // åˆ›å»ºè®¡åˆ’前一天列
    planPre     := macroPlan.PackagingPlanColumn( relnew, StartDate := macroPlan.StartOfPlanning().Date() - 1 );
    // ç”ŸæˆæŠ¥è¡¨
    traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() and
               ( pisp.StockingPointID().Regex( "CC" ) or pisp.StockingPointID().Regex( "DL" ) or pisp.StockingPointID().Regex( "大连" ) or pisp.StockingPointID().Regex( "长春" ) ) ) {
      // å½“前pisp所处地点
      factory             := ifexpr( pisp.StockingPointID().Regex( "CC" ) or pisp.StockingPointID().Regex( "长春" ), "长春工厂", "大连工厂" );
      factoryAbbreviation := ifexpr( pisp.StockingPointID().Regex( "CC" ) or pisp.StockingPointID().Regex( "长春" ), "CC", "DL" );
      // åˆ›å»ºè¡Œ
      ppr := select( macroPlan, PackagingPlanRow, tempPPR, tempPPR.ProductID() = pisp.ProductID() and tempPPR.Factory() = factory );
      if ( isnull( ppr ) ) {
        ppr := macroPlan.PackagingPlanRow( relnew, ProductID := pisp.ProductID(), Factory := factory, Category := guard( pisp.Product_MP().ParentID(), "" ) );
      }
      // å¾ªçޝpispippl
      traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispipl, not pispipl.IsPeriodFrozen() ) {
        // åˆ›å»ºåˆ—
        ppc := select( macroPlan, PackagingPlanColumn, tempPPC, tempPPC.StartDate() = pispipl.Start().Date() );
        if ( isnull( ppc ) ) {
          ppc := macroPlan.PackagingPlanColumn( relnew, StartDate := pispipl.Start().Date() );
        }
        // åˆ›å»ºå•元格
        cell := select( ppr, PackagingPlanCell, tempPPCell, tempPPCell.PackagingPlanColumn() = ppc );
        if ( isnull( cell ) ) {
          cell := ppr.PackagingPlanCell( relnew );
          cell.PackagingPlanColumn( relset, ppc );
        }
        // è®¾ç½®è°ƒå‡º
        traverse ( pispipl, AsDeparturePISPIP, pit,
                   pit.Quantity()                > 0                                                                         and
                   pit.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID().Regex( factoryAbbreviation )      and
                   TransferPlanRow::IdentifyTheFactory( pit.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP() ) <> TransferPlanRow::IdentifyTheFactory( pit.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP() )
                  )
        {
          cell.Out( cell.Out() + pit.Quantity() );
        }
        // è®¾ç½®è°ƒè¿›
        traverse ( pispipl, AsArrivalPISPIP, pit,
                   pit.Quantity()              > 0                                                                           and
                   pit.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID().Regex( factoryAbbreviation ) and
                   TransferPlanRow::IdentifyTheFactory( pit.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP() ) <> TransferPlanRow::IdentifyTheFactory( pit.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP() )
                  )
        {
          cell.TransferIn( cell.TransferIn() + pit.Quantity() );
        }
        // å¤§è¿žå·¥åŽ‚è®¾ç½®å€¼
        if ( factory = "大连工厂" ) {
          // å‡€éœ€æ±‚&剩余库存&供应量
          cell.NetDemand( cell.NetDemand() + pispipl.DependentDemandAndSalesDemandQuantity() );
          cell.EndingInventory( cell.EndingInventory() + pispipl.InventoryLevelEnd() );
          cell.NewSupply( cell.NewSupply() + pispipl.NewSupplyQuantity() );
        }
        // é•¿æ˜¥å·¥åŽ‚è®¾ç½®å€¼
        if ( factory = "长春工厂" ) {
          // å‰©ä½™åº“å­˜&供应量
          cell.EndingInventory( cell.EndingInventory() + pispipl.InventoryLevelEnd() );
          cell.NewSupply( cell.NewSupply() + pispipl.NewSupplyQuantity() );
          // å‡€éœ€æ±‚【只取线边库】&包装库存&非包装库存
          if ( pisp.StockingPointID().Regex( "外租库" ) ) {
            cell.CC_PackagingInventory( pispipl.InventoryLevelEnd() );
          } else if ( pisp.StockingPointID().Regex( "线边库" ) ) {
            cell.CC_UnpackagedInventory( pispipl.InventoryLevelEnd() );
            cell.NetDemand( cell.NetDemand() + pispipl.DependentDemandAndSalesDemandQuantity() );
          }
        }
        // è®¾ç½®å‰ä¸€å¤©åº“å­˜
        if ( pispipl.Start().Date() = macroPlan.StartOfPlanning().Date() ) {
          prePISPIPL  := pispipl.PreviousPlanningPISPIP().astype( ProductInStockingPointInPeriodPlanningLeaf ); // å‰ä¸€ä¸ªpispippl
          // åˆ›å»ºè®¡åˆ’前一天格子
          preCell := select( ppr, PackagingPlanCell, tempPPCell, tempPPCell.PackagingPlanColumn() = planPre );
          if ( isnull( preCell ) ) {
            preCell := ppr.PackagingPlanCell( relnew );
            preCell.EndingInventory( prePISPIPL.InventoryLevelEnd() );
            preCell.PackagingPlanColumn( relset, planPre );
          } else {
            preCell.EndingInventory( preCell.EndingInventory() + prePISPIPL.InventoryLevelEnd() );
          }
        }
      }
    }
    Transaction::Transaction().Propagate( attribute( PackagingPlanRow, FactoryAbbreviation ) );
    PackagingPlanCell::CalculationPackagingPlanProperties();
    Transaction::Transaction().Propagate( relation( PackagingPlanCell, Next ) );
    // è®¾ç½®åŒ…装&拆包-数量
    PackagingPlanCell::SetPackagingAndUnpackingValues( macroPlan );
    //traverse ( macroPlan, PackagingPlanRow, ppr, ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Bosch" ) or ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Components (Spain)" ) ) {
    //  traverse ( ppr, PackagingPlanCell, ppc/*, ppc.StartDate() = Date::Construct( 2020, 4, 1 )*/ ) {
    //    // è®¾ç½®åŒ…装数量
    //    if ( ppc.PackagingInventory() < ppc.Out() ) { // åŒ…装库存是否小于调出
    //      prePPC                := ppc.Previous();
    //      needPackagingQuantity := ppc.Out() - prePPC.PackagingInventory();
    //      while ( not isnull( prePPC ) and needPackagingQuantity > 0.0 ) {
    //        // èŽ·å–åŒ…è£…lotsize
    //        ppls                   := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() =  ppc.PackagingPlanRow().Factory()    and
    //                                                                                    tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
    //
    //        // èŽ·å–æœ€å¤§åŒ…è£…æ•°é‡
    //        maxPackageReflection   := Reflection::FindAttribute( "PackagingPlanCapability", ppc.PackagingPlanRow().FactoryAbbreviation() + "_" + ppc.PackagingPlanRow().Category() + "_Package" );
    ////        maxPackageQuantity     := maxPackageReflection.GetNumber( macroPlan.PackagingPlanCapability() ); // æ­¤å¤„需要修改
    //        maxPackageQuantity     := 100000;
    //
    //        // èŽ·å–æœ€ç»ˆåŒ…è£…æ•°é‡
    //        finalPackagingQuantity := minvalue( ceil( needPackagingQuantity / ppls.LotSize() ), ceil( ( maxPackageQuantity - prePPC.Package() ) / ppls.LotSize() ) ) * ppls.LotSize();
    //        needPackagingQuantity  := needPackagingQuantity - finalPackagingQuantity;
    //
    //        // è®¾ç½®åŒ…装值
    //        prePPC.Package( prePPC.Package() + finalPackagingQuantity );
    //
    //        //debuginfo( "需要包装数量:", needPackagingQuantity, "    lotsize: ", ppls.LotSize(), "    æœ€å¤§åŒ…装数量:", maxPackageQuantity, "    æœ€ç»ˆè¡¥çš„æ•°é‡ï¼š", finalPackagingQuantity );
    //        PackagingPlanCell::CalculationPackagingPlanProperties();
    //
    //        prePPC := prePPC.Previous();
    //      }
    //    }
    //
    //    // è®¾ç½®æ‹†åŒ…数量
    //    if ( ppc.TransferIn() > 0.0 ) { // æœ‰è°ƒå…¥æ•°é‡
    //      // èŽ·å–åŒ…è£…lotsize
    //      ppls                 := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() =  ppc.PackagingPlanRow().Factory()    and
    //                                                                                 tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
    //
    //      // è®¾ç½®æ‹†åŒ…值
    //      ppc.Unpacking( ppc.TransferIn() );
    //    }
    //  }
    //}
  *]
}
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_Package.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Package (
  MacroPlan macroPlan,
  PackagingPlanRow ppr,
  PackagingPlanColumn ppc,
  output Number needPackagingQuantity
)
{
  TextBody:
  [*
    // è®¡åˆ’开始时间
    plannedStartDate := macroPlan.StartOfPlanning().Date();
    traverse ( ppr, PackagingPlanCell, ppcell, ppcell.PackagingPlanColumn() = ppc ) {
      // Product_MP
      pmp                     := select( macroPlan, Product_MP, tempPMP, tempPMP.IsLeaf() and tempPMP.ID() = ppr.ProductID() );
      // åŒ…装lotsize
      ppls                    := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() = ppr.Factory() and
                                         tempPPLS.ProductID() = ifexpr( exists( macroPlan, PackagingPlanLotSize, tempPPLS1, tempPPLS1.ProductID() = pmp.ID() ),
                                                                        pmp.ID(),
                                                                        pmp.ParentID() ) );
      // ä¸€æ—¥åŒ…装容量
      ppnc                    := select( macroPlan, PackagingPlanNewCapability, tempPPNC, tempPPNC.Factory() = ppr.Factory() and
                                         tempPPNC.ProductID() = ifexpr( exists( macroPlan, PackagingPlanNewCapability, tempPPNC1, tempPPNC1.ProductID() = pmp.ID() ),
                                                                        pmp.ID(),
                                                                        pmp.ParentID() ) );
      // Unit
      us                      := selectset( macroPlan, Unit, tempU, tempU.ID().Regex( ppr.FactoryAbbreviation() + " " + ppr.Category() ) );
      // åŒ…装库存出现负值,需要设置包装量
      if ( not isnull( ppls ) and not isnull( ppnc ) ) {
        // åŒ…装开始的索引
        indexPPCell           := ppcell.Previous();
    //      info( "产线个数:", us.Size(), "    å¼€å§‹æ—¶é—´ï¼š", ppcell.StartDate().Format( "Y-M2-D2" ), "    åŒ…装库存数量:", ppcell.PackagingInventory(), "    éœ€è¦åŒ…装的数量:", needPackagingQuantity,
    //            "    åŒ…装lotsize:",guard( ppls.LotSize(), 0 ), "    æœ€å¤§åŒ…装容量:", ppnc.MaximumDailyPackagingQuantity() );
        while ( not isnull( indexPPCell )                                                   and
                indexPPCell.StartDate() >= plannedStartDate                                 and
                exists( us, Elements.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan, tempSP,
                        tempSP.UnitPeriodTime().StartDate() = indexPPCell.StartDate(),
                        tempSP.Outcome() <> "" )                                            and
                needPackagingQuantity > 0 ) {
          // èƒ½åŒ…装的数量
          canPackagingQuantity  := ifexpr( ceil( needPackagingQuantity / ppls.LotSize() ) < floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ),
                                           ceil( needPackagingQuantity / ppls.LotSize() ),
                                           floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ) ) * ppls.LotSize();
    //        info( "开始包装的日期:", indexPPCell.StartDate().Format( "Y-M2-D2" ), "    èƒ½åŒ…装的数量:", canPackagingQuantity );
          indexPPCell.Package( canPackagingQuantity );
          Transaction::Transaction().Propagate( attribute( PackagingPlanCell, PackagingInventory ) );
          Transaction::Transaction().Propagate( attribute( PackagingPlanCell, UnpackagedInventory ) );
          needPackagingQuantity := needPackagingQuantity - canPackagingQuantity;
          indexPPCell           := indexPPCell.Previous();
        }
      }
    }
  *]
}
_Main/BL/Type_ArchivePackagingPlanCell/StaticMethod_SetPackagingAndUnpackingValues.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,146 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SetPackagingAndUnpackingValues (
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    // è®¡åˆ’开始时间
    plannedStartDate := macroPlan.StartOfPlanning().Date();
    // è®¾ç½®åŒ…装值(符合lotsize和一日最大包装量)
    traverse ( macroPlan, PackagingPlanRow, ppr/*, ppr.Factory() = "大连工厂" and ppr.ProductID() = "06K103011CM"*/ ) {
      traverse ( ppr, PackagingPlanCell, ppcell/*, ppcell.StartDate() <= Date::Construct( 2025, 1, 4 )*/ ) {
        // Product_MP
        pmp                     := select( macroPlan, Product_MP, tempPMP, tempPMP.IsLeaf() and tempPMP.ID() = ppr.ProductID() );
        // åŒ…装lotsize
        ppls                    := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() = ppr.Factory() and
                                           tempPPLS.ProductID() = ifexpr( exists( macroPlan, PackagingPlanLotSize, tempPPLS1, tempPPLS1.ProductID() = pmp.ID() ),
                                                                          pmp.ID(),
                                                                          pmp.ParentID() ) );
        // ä¸€æ—¥åŒ…装容量
        ppnc                    := select( macroPlan, PackagingPlanNewCapability, tempPPNC, tempPPNC.Factory() = ppr.Factory() and
                                           tempPPNC.ProductID() = ifexpr( exists( macroPlan, PackagingPlanNewCapability, tempPPNC1, tempPPNC1.ProductID() = pmp.ID() ),
                                                                          pmp.ID(),
                                                                          pmp.ParentID() ) );
        // Unit
        us                      := selectset( macroPlan, Unit, tempU, tempU.ID().Regex( ppr.FactoryAbbreviation() + " " + ppr.Category() ) );
        // åŒ…装库存出现负值,需要设置包装量
        if ( ppcell.PackagingInventory() < 0 and not isnull( ppls ) and not isnull( ppnc ) ) {
          // éœ€è¦åŒ…装的数量
          needPackagingQuantity := abs( ppcell.PackagingInventory() ).Round( 0 );
          // åŒ…装开始的索引
          indexPPCell           := ppcell.Previous();
    //      info( "产线个数:", us.Size(), "    å¼€å§‹æ—¶é—´ï¼š", ppcell.StartDate().Format( "Y-M2-D2" ), "    åŒ…装库存数量:", ppcell.PackagingInventory(), "    éœ€è¦åŒ…装的数量:", needPackagingQuantity,
    //            "    åŒ…装lotsize:",guard( ppls.LotSize(), 0 ), "    æœ€å¤§åŒ…装容量:", ppnc.MaximumDailyPackagingQuantity() );
          while ( not isnull( indexPPCell )                                                   and
                  indexPPCell.StartDate() >= plannedStartDate                                 and
                  exists( us, Elements.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan, tempSP,
                          tempSP.UnitPeriodTime().StartDate() = indexPPCell.StartDate(),
                          tempSP.Outcome() <> "" )                                            and
                  needPackagingQuantity > 0 ) {
            // èƒ½åŒ…装的数量
            canPackagingQuantity  := ifexpr( ceil( needPackagingQuantity / ppls.LotSize() ) < floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ),
                                             ceil( needPackagingQuantity / ppls.LotSize() ),
                                             floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ) ) * ppls.LotSize();
    //        info( "开始包装的日期:", indexPPCell.StartDate().Format( "Y-M2-D2" ), "    èƒ½åŒ…装的数量:", canPackagingQuantity );
            indexPPCell.Package( canPackagingQuantity );
            Transaction::Transaction().Propagate( attribute( PackagingPlanCell, PackagingInventory ) );
            Transaction::Transaction().Propagate( attribute( PackagingPlanCell, UnpackagedInventory ) );
            needPackagingQuantity := needPackagingQuantity - canPackagingQuantity;
            indexPPCell           := indexPPCell.Previous();
          }
        }
      }
    }
    // è®¾ç½®åŒ…装值(符合大类下所有产品非包装量库存加和不能大于系统值)
    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 );
            }
          }
        }
      }
    }
    // è®¾ç½®æ‹†åŒ…值(符合lotsize和一日最大包装量)
    traverse ( macroPlan, PackagingPlanRow, ppr/*, ppr.Factory() = "大连工厂" and ppr.ProductID() = "06K103011CM"*/ ) {
      traverse ( ppr, PackagingPlanCell, ppcell/*, ppcell.StartDate() <= Date::Construct( 2025, 1, 4 )*/ ) {
        // Product_MP
        pmp                     := select( macroPlan, Product_MP, tempPMP, tempPMP.IsLeaf() and tempPMP.ID() = ppr.ProductID() );
        // åŒ…装lotsize
        ppls                    := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() = ppr.Factory() and
                                           tempPPLS.ProductID() = ifexpr( exists( macroPlan, PackagingPlanLotSize, tempPPLS1, tempPPLS1.ProductID() = pmp.ID() ),
                                                                          pmp.ID(),
                                                                          pmp.ParentID() ) );
        // ä¸€æ—¥åŒ…装容量
        ppnc                    := select( macroPlan, PackagingPlanNewCapability, tempPPNC, tempPPNC.Factory() = ppr.Factory() and
                                           tempPPNC.ProductID() = ifexpr( exists( macroPlan, PackagingPlanNewCapability, tempPPNC1, tempPPNC1.ProductID() = pmp.ID() ),
                                                                          pmp.ID(),
                                                                          pmp.ParentID() ) );
        // Unit
        us                      := selectset( macroPlan, Unit, tempU, tempU.ID().Regex( ppr.FactoryAbbreviation() + " " + ppr.Category() ) );
        // å½“前非包装库存 + ä¸‹ä¸€å¤©çš„NewSupply < ä¸‹ä¸€å¤©çš„净需求
        if ( ppcell.UnpackagedInventory() < guard( ppcell.Next().NetDemand(), 0 ) and not isnull( ppls ) and not isnull( ppnc ) ) {
          // éœ€è¦åŒ…装的数量
          needPackagingQuantity := abs( ppcell.PackagingInventory() ).Round( 0 );
          // åŒ…装开始的索引
          indexPPCell           := ppcell.Previous();
    //      info( "产线个数:", us.Size(), "    å¼€å§‹æ—¶é—´ï¼š", ppcell.StartDate().Format( "Y-M2-D2" ), "    åŒ…装库存数量:", ppcell.PackagingInventory(), "    éœ€è¦åŒ…装的数量:", needPackagingQuantity,
    //            "    åŒ…装lotsize:",guard( ppls.LotSize(), 0 ), "    æœ€å¤§åŒ…装容量:", ppnc.MaximumDailyPackagingQuantity() );
          while ( not isnull( indexPPCell )                                                   and
                  indexPPCell.StartDate() >= plannedStartDate                                 and
                  exists( us, Elements.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan, tempSP,
                          tempSP.UnitPeriodTime().StartDate() = indexPPCell.StartDate(),
                          tempSP.Outcome() <> "" )                                            and
                  needPackagingQuantity > 0 ) {
            // èƒ½åŒ…装的数量
            canPackagingQuantity  := ifexpr( ceil( needPackagingQuantity / ppls.LotSize() ) < floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ),
                                             ceil( needPackagingQuantity / ppls.LotSize() ),
                                             floor( ppnc.MaximumDailyPackagingQuantity() / ppls.LotSize() ) ) * ppls.LotSize();
    //        info( "开始包装的日期:", indexPPCell.StartDate().Format( "Y-M2-D2" ), "    èƒ½åŒ…装的数量:", canPackagingQuantity );
            indexPPCell.Package( canPackagingQuantity );
            Transaction::Transaction().Propagate( attribute( PackagingPlanCell, PackagingInventory ) );
            Transaction::Transaction().Propagate( attribute( PackagingPlanCell, UnpackagedInventory ) );
            needPackagingQuantity := needPackagingQuantity - canPackagingQuantity;
            indexPPCell           := indexPPCell.Previous();
          }
        }
      }
    }
  *]
}
_Main/BL/Type_ArchivePackagingPlanCell/_ROOT_Type_ArchivePackagingPlanCell.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchivePackagingPlanCell
{
  #keys: '5[414996.1.150965192][414996.1.150965190][0.0.0][414996.1.150965191][414996.1.150965193]'
  BaseType: Object
  StructuredName: 'ArchivePackagingPlanCells'
}
_Main/BL/Type_ArchivePackagingPlanColumn/Attribute_StartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StartDate
{
  #keys: '3[414996.1.150965242][414996.1.150965241][414996.1.150965243]'
  ValueType: Date
}
_Main/BL/Type_ArchivePackagingPlanColumn/_ROOT_Type_ArchivePackagingPlanColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchivePackagingPlanColumn
{
  #keys: '5[414996.1.150965239][414996.1.150965237][0.0.0][414996.1.150965238][414996.1.150965240]'
  BaseType: Object
  StructuredName: 'ArchivePackagingPlanColumns'
}
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_Category.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Category
{
  #keys: '3[414996.1.150965250][414996.1.150965249][414996.1.150965251]'
  Description: '大类'
  ValueType: String
}
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_Factory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Factory
{
  #keys: '3[414996.1.150965253][414996.1.150965252][414996.1.150965254]'
  Description: '工厂'
  ValueType: String
}
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_FactoryAbbreviation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute FactoryAbbreviation
{
  #keys: '3[414996.1.150965256][414996.1.150965255][414996.1.150965257]'
  ValueType: String
}
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Name
{
  #keys: '3[414996.1.150965259][414996.1.150965258][414996.1.150965260]'
  ValueType: String
}
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[414996.1.150965262][414996.1.150965261][414996.1.150965263]'
  ValueType: String
}
_Main/BL/Type_ArchivePackagingPlanRow/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414996.1.150965265][414996.1.150965264][414996.1.150965266]'
  ValueType: String
}
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_Category.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Category
}
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_Factory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Factory
}
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_FactoryAbbreviation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: FactoryAbbreviation
}
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Name
}
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: ProductID
}
_Main/BL/Type_ArchivePackagingPlanRow/DefaultValue_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: StockingPointID
}
_Main/BL/Type_ArchivePackagingPlanRow/Function_CalcFactoryAbbreviation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcFactoryAbbreviation
{
  TextBody:
  [*
    // lihongji Jul-26-2024 (created)
    value := ifexpr( this.Factory() = "大连工厂", "DL", "CC" );
    this.FactoryAbbreviation( value );
  *]
}
_Main/BL/Type_ArchivePackagingPlanRow/Function_CalcName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcName
{
  TextBody:
  [*
    // lihongji Jul-24-2024 (created)
    value := guard( this.ProductID(), "" );
    this.Name( value );
  *]
}
_Main/BL/Type_ArchivePackagingPlanRow/Method_FilterProduct.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Method FilterProduct (
  Product_MPs products,
  String factory
) declarative remote as Boolean
{
  TextBody:
  [*
    flag := exists( products, Elements, tempP, tempP.ID() = this.ProductID() ) and this.Factory() = factory;
    return flag;
  *]
}
_Main/BL/Type_ArchivePackagingPlanRow/_ROOT_Type_ArchivePackagingPlanRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ArchivePackagingPlanRow
{
  #keys: '5[414996.1.150965247][414996.1.150965245][0.0.0][414996.1.150965246][414996.1.150965248]'
  BaseType: Object
  StructuredName: 'ArchivePackagingPlanRows'
}
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl
@@ -94,11 +94,11 @@
              holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else if( shiftPlan.DefaultRemark().LikeUserLocale( "周六" ) or shiftPlan.DefaultRemark().LikeUserLocale( "周日" ) ){
              // ä¸‹ä¸€å¤©æ˜¯å‘¨å…­æˆ–周日
              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else{
              // ä¸‹ä¸€å¤©æ˜¯å¹³å¸¸çš„工作日
              nextDayOvertime := shiftPlan.GetDefaultDayOvertimeHour( true );
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              defaultDayOvertimeHourCell.RealValue( defaultDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }
          }
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
@@ -97,11 +97,11 @@
              holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else if( shiftPlan.DefaultRemark().LikeUserLocale( "周六" ) or shiftPlan.DefaultRemark().LikeUserLocale( "周日" ) ){
              // ä¸‹ä¸€å¤©æ˜¯å‘¨å…­æˆ–周日
              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else{
              // ä¸‹ä¸€å¤©æ˜¯å¹³å¸¸çš„工作日
              nextDayOvertime := shiftPlan.GetDefaultDayOvertimeHour( true );
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              defaultDayOvertimeHourCell.RealValue( defaultDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }
          }
@@ -129,12 +129,13 @@
          overtime := shiftPlan.GetDefaultDayOvertimeHour( false );
          defaultDayOvertimeHourCell.RealValue( defaultDayOvertimeHourCell.RealValue() + overtime );
          if( not isnull( nextShiftPlan )){
            nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
            if( nextShiftPlan.IsHoliday()){
              // ä¸‹ä¸€å¤©æ˜¯èŠ‚å‡æ—¥
              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
              holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else if( shiftPlan.DefaultRemark().LikeUserLocale( "周六" ) or shiftPlan.DefaultRemark().LikeUserLocale( "周日" ) ){
              // ä¸‹ä¸€å¤©æ˜¯å‘¨å…­æˆ–周日
              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
              breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
            }else{
              // ä¸‹ä¸€å¤©æ˜¯å¹³å¸¸çš„工作日
@@ -201,7 +202,7 @@
      
      // æ¬ å·¥è´¹
      qiangongCell := LocalCell_Default::GetCell(  rowKey + column7.CustomName(), cellIndexTree, cells, row, column7 );
      qiangongCell.RealValue( qiangongCell.RealValue() - 8 );
      qiangongCell.RealValue( qiangongCell.RealValue() );
      
      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + column11.CustomName(), cellIndexTree, cells, row, column11 );
      qiangongfeiCell.RealValue( EmployeeCost::GetSalary( unit,qiangongMultiplier,qiangongCell.RealValue() ));
_Main/BL/Type_LocalTool/StaticMethod_IsOverlap.qbl
@@ -10,6 +10,6 @@
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
    return start1 <= end2 and start2 <= end1 ;
    return start1 <= start2 and end1 >= end2 ;
  *]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
@@ -5,44 +5,6 @@
  BaseType: 'WebPanel'
  Children:
  [
    Component ddlOfflinePlanTable
    {
      #keys: '[412672.1.64850982]'
      BaseType: 'WebDropDownList'
      Databinding: 'OfflinePlanTableInfo'
      Children:
      [
        Component DataExtractorRibbon
        {
          #keys: '[412672.1.64850983]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'RecycleBin'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'OfflinePlanTableInfo'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'TableName'
        Label: '下线计划:'
        NumberOfColumns: 50
        Taborder: 0
      ]
    }
    Component bComparison
    {
      #keys: '[412672.1.64851009]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '开始对比'
        Taborder: 1
      ]
    }
    Component LabelRibbon
    {
      #keys: '[412672.1.66018113]'
@@ -51,16 +13,6 @@
      [
        DataBinding: 'ddlOfflinePlanTable.Data.TableName'
        NumberOfColumns: 50
        Taborder: 6
      ]
    }
    Component bExport id:bExport_298
    {
      #keys: '[414996.1.108480376]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 4
      ]
    }
@@ -87,19 +39,7 @@
      ]
      Properties:
      [
        Taborder: 5
      ]
    }
    Component rbgTimeUnit
    {
      #keys: '[414996.1.147730565]'
      BaseType: 'WebRadioButtonGroup'
      Properties:
      [
        BoundValue: 'Day'
        ButtonLabels: 'Day;Week;Month'
        ButtonValues: 'Day;Week;Month'
        Taborder: 2
        Taborder: 3
      ]
    }
    Component dhTimeUnit
@@ -109,14 +49,15 @@
      Databinding: 'String*'
      Properties:
      [
        Taborder: 3
        Taborder: 2
      ]
    }
    #child: PanelRibbon510
    #child: PanelRibbon763
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon510.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
Component PanelRibbon510
{
  #keys: '[414996.1.148040419]'
  BaseType: 'WebPanel'
  Children:
  [
    Component rbgTimeUnit id:rbgTimeUnit_19
    {
      #keys: '[414996.1.148040622]'
      BaseType: 'WebRadioButtonGroup'
      Properties:
      [
        BoundValue: 'Day'
        ButtonLabels: 'Day;Week;Month'
        ButtonValues: 'Day;Week;Month'
        Orientation: 'horizontal'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon763.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
Quintiq file version 2.0
Component PanelRibbon763
{
  #keys: '[414996.1.148040406]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddlOfflinePlanTable id:ddlOfflinePlanTable_217
    {
      #keys: '[414996.1.148040527]'
      BaseType: 'WebDropDownList'
      Databinding: 'OfflinePlanTableInfo'
      Children:
      [
        Component DataExtractorRibbon id:DataExtractorRibbon_568
        {
          #keys: '[414996.1.148040528]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'RecycleBin'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'OfflinePlanTableInfo'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'TableName'
        Label: '下线计划:'
        NumberOfColumns: 50
        Taborder: 0
      ]
    }
    Component bComparison id:bComparison_136
    {
      #keys: '[414996.1.148040554]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '开始对比'
        Taborder: 1
      ]
    }
    Component bExport
    {
      #keys: '[414996.1.148040586]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon510_rbgTimeUnit_OnUserChanged.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_rbgTimeUnit_OnUserChanged.def ÐÞ¸Ä
@@ -1,8 +1,8 @@
Quintiq file version 2.0
#parent: PanelRibbon504/rbgTimeUnit
Response OnUserChanged () id:Response_PanelRibbon504_801_rbgTimeUnit_OnUserChanged
#parent: PanelRibbon510/rbgTimeUnit_19
Response OnUserChanged () id:Response_PanelRibbon504_rbgTimeUnit_OnUserChanged
{
  #keys: '[414996.1.147730564]'
  #keys: '[414996.1.148040621]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnUserChanged'
  GroupServerCalls: true
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon763_bComparison_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def ÐÞ¸Ä
@@ -1,8 +1,8 @@
Quintiq file version 2.0
#parent: PanelRibbon504/bComparison
Response OnClick () id:Response_PanelRibbon504_bComparison_OnClick_613
#parent: PanelRibbon763/bComparison_136
Response OnClick () id:Response_PanelRibbon504_bComparison_OnClick
{
  #keys: '[412672.1.64851008]'
  #keys: '[414996.1.148040553]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon763_bExport_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bExport_OnClick#891.def ÐÞ¸Ä
@@ -1,8 +1,8 @@
Quintiq file version 2.0
#parent: PanelRibbon504/bExport_298
Response OnClick () id:Response_pOperaction_bExport_OnClick_891
#parent: PanelRibbon763/bExport
Response OnClick () id:Response_PanelRibbon504_bExport_OnClick
{
  #keys: '[414996.1.108480375]'
  #keys: '[414996.1.148040585]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true