yanyuan
2023-11-09 92ecb46f3f2cfcae338d26cd56855018ba18b449
Merge branch 'dev' into dev_yy
已重命名3个文件
已修改28个文件
已添加31个文件
已删除6个文件
3679 ■■■■ 文件已修改
_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_Forecast.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_Flag_MacroPlan_MacroPlan_Flag.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDe.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PriorityResult_CustomerOrder_CustomerOrder_PriorityResult.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Flag/Attribute_flag.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Flag/DefaultValue_flag.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Flag/_ROOT_Type_Flag.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SetIsLinkedWithFinishedGoodAttributes.qbl 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SetIsLinkedWithFinishedGoodAttributes_DEBUG.qbl 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingForecast/Attribute_ProductGrade.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingForecast/Attribute_SegmentPriority.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingForecast/Attribute_SheetProfitability.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperation/Attribute_IsLinkedWithFGCrossBusiness.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperationBOM/Attribute_IsLinkedWithFGCrossBusiness.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMCountCrossBusiness.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMIDs.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMIDsCrossBusiness.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Attribute_IsLinkedWithFGCrossBusiness.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Method_SetIsLinkedWithFinishedGoodAttributes_Recursive.qbl 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Method_SetIsLinkedWithFinishedGoodAttributes_Recursive_DEBUG.qbl 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_OnCreate.qbl 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/Method_CreatePrioitifyFacotrDetail.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetail.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlContent.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlContent_PriorityFactorName_OnChanged.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_New.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetail.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick#325.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick#106.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnDoubleClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnDrop.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_OnDoubleClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw 2199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl
@@ -54,6 +54,10 @@
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn CHECKMSG
      {
        ValueType: String
      }
      EDIODBCLinkColumn CURRENCYID
      {
        OthersMayUpdateColumn: true
@@ -79,6 +83,14 @@
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn ISCHECKED
      {
        ValueType: Number
      }
      EDIODBCLinkColumn ISPASS
      {
        ValueType: Number
      }
      EDIODBCLinkColumn ORDERDATE
      {
        OthersMayUpdateColumn: true
_Main/BL/EDI/Broker_GlobalOTDTable_Forecast.qbl
@@ -18,9 +18,12 @@
      EDIMLColumn ID { Attribute: ID ValueType: String }
      EDIMLColumn Price { Attribute: Price ValueType: Real }
      EDIMLColumn PriorityName { Attribute: PriorityName ValueType: String }
      EDIMLColumn ProductGrade { Attribute: ProductGrade ValueType: String }
      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
      EDIMLColumn Quantity { Attribute: Quantity ValueType: Real }
      EDIMLColumn SalesSegmentName { Attribute: SalesSegmentName ValueType: String }
      EDIMLColumn SegmentPriority { Attribute: SegmentPriority ValueType: String }
      EDIMLColumn SheetProfitability { Attribute: SheetProfitability ValueType: String }
      EDIMLColumn StartDate { Attribute: StartDate ValueType: Date }
      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
@@ -45,6 +48,10 @@
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn CHECKMSG
      {
        ValueType: String
      }
      EDIODBCLinkColumn CURRENCYID
      {
        OthersMayUpdateColumn: true
@@ -59,6 +66,14 @@
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn ISCHECKED
      {
        ValueType: Number
      }
      EDIODBCLinkColumn ISPASS
      {
        ValueType: Number
      }
      EDIODBCLinkColumn PRICE
      {
@@ -146,9 +161,12 @@
      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
      EDIColumnMatch { InputColumn: PRICE OutputColumn: Price }
      EDIColumnMatch { InputColumn: PRIORITYNAME OutputColumn: PriorityName }
      EDIColumnMatch { InputColumn: PRODUCTGRADE OutputColumn: ProductGrade }
      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
      EDIColumnMatch { InputColumn: QUANTITY OutputColumn: Quantity }
      EDIColumnMatch { InputColumn: SALESEGMENTNAME OutputColumn: SalesSegmentName }
      EDIColumnMatch { InputColumn: SEGMENTPRIORITY OutputColumn: SegmentPriority }
      EDIColumnMatch { InputColumn: SHEETPROFITABILITY OutputColumn: SheetProfitability }
      EDIColumnMatch
      {
        InputColumn: STARTDATE
_Main/BL/InfoMessages.qbl
@@ -10,6 +10,10 @@
  {
    DefaultText: 'Please input validate value !'
  }
  InfoMessage PriorityFactor_CheckNameNull
  {
    DefaultText: '优先级因子名称不能为空。'
  }
  InfoMessage PriorityFactor_CheckNameValid
  {
    DefaultText: '该优先级因子名称已存在!'
_Main/BL/Relations/Relation_Flag_MacroPlan_MacroPlan_Flag.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation Flag_MacroPlan_MacroPlan_Flag
{
  #keys: '1[414996.0.51027441]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide MacroPlan
  {
    #keys: '3[414996.0.51027443][414996.0.51027442][414996.0.51027444]'
    Cardinality: '0to1'
    ObjectDefinition: Flag
    OwningSide: 'Reference'
  }
  RelationSide.RightSide Flag
  {
    #keys: '3[414996.0.51027446][414996.0.51027445][414996.0.51027447]'
    Cardinality: '1toN'
    ObjectDefinition: MacroPlan
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDe.qbl
ÎļþÃû´Ó _Main/BL/Relations/Relation_PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorD.qbl ÐÞ¸Ä
@@ -1,6 +1,6 @@
Quintiq file version 2.0
#parent: #root
Relation PriorityFactorDetails_PriorityFactor_PriorityFactor_PriorityFactorDetails
Relation PriorityFactorDetail_PriorityFactor_PriorityFactor_PriorityFactorDetail
{
  #keys: '1[414382.0.444850082]'
  DefaultRelationStrategy
@@ -10,10 +10,10 @@
  {
    #keys: '3[414382.0.444850084][414382.0.444850083][414382.0.444850085]'
    Cardinality: '0to1'
    ObjectDefinition: PriorityFactorDetails
    ObjectDefinition: PriorityFactorDetail
    OwningSide: 'Reference'
  }
  RelationSide.RightSide PriorityFactorDetails
  RelationSide.RightSide PriorityFactorDetail
  {
    #keys: '3[414382.0.444850087][414382.0.444850086][414382.0.444850088]'
    Cardinality: '1toN'
_Main/BL/Relations/Relation_PriorityResult_CustomerOrder_CustomerOrder_PriorityResult.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PriorityResult_CustomerOrder_CustomerOrder_PriorityResult
{
  #keys: '1[414996.0.57846264]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide CustomerOrder
  {
    #keys: '3[414996.0.57846266][414996.0.57846265][414996.0.57846267]'
    Cardinality: '0to1'
    ObjectDefinition: PriorityResult
    OwningSide: 'Reference'
  }
  RelationSide.RightSide PriorityResult
  {
    #keys: '3[414996.0.57846269][414996.0.57846268][414996.0.57846270]'
    Cardinality: '0to1'
    ObjectDefinition: CustomerOrder
    OwningSide: 'Reference'
  }
}
_Main/BL/Type_Flag/Attribute_flag.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute flag
{
  #keys: '3[414996.0.51027432][414996.0.51027431][414996.0.51027433]'
  ValueType: Boolean
}
_Main/BL/Type_Flag/DefaultValue_flag.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  ISOValue: 'false'
  TargetAttribute: flag
}
_Main/BL/Type_Flag/_ROOT_Type_Flag.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type Flag
{
  #keys: '5[414996.0.33484648][414996.0.33484646][0.0.0][414996.0.33484647][414996.0.33484649]'
  BaseType: Object
  Description: '标志位'
  StructuredName: 'Flags'
}
_Main/BL/Type_GlobalDTOTable/Method_SetIsLinkedWithFinishedGoodAttributes.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_GlobalDTOTable/Method_SetIsLinkedWithFinishedGoodAttributes_DEBUG.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
Quintiq file version 2.0
#parent: #root
Method SetIsLinkedWithFinishedGoodAttributes_DEBUG
{
  Description: 'Method to traverse the supply chain to determine if there are any products that are not used to produce finished goods.'
  TextBody:
  [*
    // Reset IsLinkedWithFinishedGood
    traverse( this, Global_MappingProduct_MP, instance )
    {
      instance.IsLinkedWithFinishedGood( false );
      instance.BOMCount( 0 );
      instance.BOMIDs( "" );
      instance.IsLinkedWithFGCrossBusiness( false );
      instance.BOMCountCrossBusiness( 0 );
      instance.BOMIDsCrossBusiness( "" );
    }
    traverse( this, Global_MappingOperation, instance )
    {
      instance.IsLinkedWithFinishedGood( false );
      instance.IsLinkedWithFGCrossBusiness( false );
    }
    traverse( this, Global_MappingOperationBOM, instance )
    {
      instance.IsLinkedWithFinishedGood( false );
      instance.IsLinkedWithFGCrossBusiness( false );
    }
    finishedgoods := selectset( this, Global_MappingProduct_MP, product,
                                product.ProductMajorType() = "成品" );
    numfinishedgoods := finishedgoods.Size();
    index := 1;
    // Traverse each finished good and search for linked products/operations/lanes
    traverse( finishedgoods, Elements, product )
    {
      if( not product.IsLinkedWithFinishedGood() )
      {
        info( "KKK", this.DefinitionName(), "SetIsLinkedWithFinishedGoodAttributes",
              "| Processing Product:", product.ID(), "(", index, "/", numfinishedgoods, ")" );
        uniquebomids := construct( Strings );
        product.SetIsLinkedWithFinishedGoodAttributes_Recursive_DEBUG( 0, // depth
                                                                 100, // maxdepth
                                                                 uniquebomids,
                                                                 false // isallowcrossbusinesstype
                                                               );
        uniquebomids := uniquebomids.Difference( product.ID() ).Unique();
        product.BOMCount( uniquebomids.Size() );
        product.BOMIDs( uniquebomids.ToString( ";" ) );
      }
      if( not product.IsLinkedWithFGCrossBusiness() )
      {
        info( "KKK", this.DefinitionName(), "SetIsLinkedWithFinishedGoodAttributes",
              "| Processing Product (cross business type):", product.ID(), "(", index, "/", numfinishedgoods, ")" );
        uniquebomidscrossbusiness := construct( Strings );
        product.SetIsLinkedWithFinishedGoodAttributes_Recursive_DEBUG( 0, // depth
                                                                 100, // maxdepth
                                                                 uniquebomidscrossbusiness,
                                                                 true // isallowcrossbusinesstype
                                                               );
        uniquebomidscrossbusiness := uniquebomidscrossbusiness.Difference( product.ID() ).Unique();
        product.BOMCountCrossBusiness( uniquebomidscrossbusiness.Size() );
        product.BOMIDsCrossBusiness( uniquebomidscrossbusiness.ToString( ";" ) );
      }
      index++;
    }
    info( "KKK", this.DefinitionName(), "SetIsLinkedWithFinishedGoodAttributes", "| Ended." );
  *]
}
_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl
@@ -34,12 +34,17 @@
                                                    false
                                                   );
      targetCustomerOrder.BusinessType( gmco.BusinessType() );
      targetCustomerOrder.OrderType( gmco.OrderType() );
      // CustomerPolicy
      targetCustomerOrder.IsAvailable( gmco.IsAvailable() );
      // IsLocked
      // LastModify
      // LastModifyTime
      // OrderTag
      targetCustomerOrder.OrderTime( gmco.OrderTime() );
      targetCustomerOrder.OrderType( gmco.OrderType() );
      targetCustomerOrder.ProductGrade( gmco.ProductGrade() );
      targetCustomerOrder.SegmentPriority( gmco.SegmentPriority() );
      targetCustomerOrder.SheetProfitability( gmco.SheetProfitability() );
      targetCustomerOrder.OrderTime( gmco.OrderTime() );
    }
  *]
}
_Main/BL/Type_Global_MappingForecast/Attribute_ProductGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductGrade
{
  #keys: '3[414996.0.21578321][414996.0.21578320][414996.0.21578322]'
  Description: '产品等级'
  ValueType: String
}
_Main/BL/Type_Global_MappingForecast/Attribute_SegmentPriority.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SegmentPriority
{
  #keys: '3[414996.0.21578344][414996.0.21578343][414996.0.21578345]'
  Description: '细分市场优先级'
  ValueType: String
}
_Main/BL/Type_Global_MappingForecast/Attribute_SheetProfitability.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SheetProfitability
{
  #keys: '3[414996.0.21578334][414996.0.21578333][414996.0.21578335]'
  Description: '大张盈利'
  ValueType: String
}
_Main/BL/Type_Global_MappingOperation/Attribute_IsLinkedWithFGCrossBusiness.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsLinkedWithFGCrossBusiness
{
  #keys: '3[157968.0.1171600004][157968.0.1171600003][157968.0.1171600005]'
  Description: 'Updated procedurally for checking whether this object is used to produce a finished good cross business type.'
  ValueType: Boolean
}
_Main/BL/Type_Global_MappingOperationBOM/Attribute_IsLinkedWithFGCrossBusiness.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsLinkedWithFGCrossBusiness
{
  #keys: '3[157968.0.1171600022][157968.0.1171600021][157968.0.1171600023]'
  Description: 'Updated procedurally for checking whether this object is used to produce a finished good cross business type.'
  ValueType: Boolean
}
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMCountCrossBusiness.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute BOMCountCrossBusiness
{
  #keys: '3[157968.0.1171600059][157968.0.1171600058][157968.0.1171600060]'
  Description: 'Number of unique BOM used to produce this finished good cross business types.'
  ValueType: Number
}
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMIDs.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute BOMIDs
{
  #keys: '3[157968.0.1171600062][157968.0.1171600061][157968.0.1171600063]'
  Description: 'Unique BOM IDs used to produce this finished good.'
  ValueType: String
}
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMIDsCrossBusiness.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute BOMIDsCrossBusiness
{
  #keys: '3[157968.0.1171600056][157968.0.1171600055][157968.0.1171600057]'
  Description: 'Unique BOM IDs used to produce this finished good cross business types.'
  ValueType: String
}
_Main/BL/Type_Global_MappingProduct_MP/Attribute_IsLinkedWithFGCrossBusiness.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsLinkedWithFGCrossBusiness
{
  #keys: '3[157968.0.1171600039][157968.0.1171600038][157968.0.1171600040]'
  Description: 'Updated procedurally for checking whether this object is used to produce a finished good cross business type.'
  ValueType: Boolean
}
_Main/BL/Type_Global_MappingProduct_MP/Method_SetIsLinkedWithFinishedGoodAttributes_Recursive.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_Global_MappingProduct_MP/Method_SetIsLinkedWithFinishedGoodAttributes_Recursive_DEBUG.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,167 @@
Quintiq file version 2.0
#parent: #root
Method SetIsLinkedWithFinishedGoodAttributes_Recursive_DEBUG (
  Number depth,
  Number maxdepth,
  output Strings uniquebomids_o,
  Boolean isallowcrossbusinesstype
)
{
  Description: 'Method to traverse the supply chain recursively to determine if there are any products that are not used to produce finished goods.'
  TextBody:
  [*
    info( 'KKK2', this.DefinitionName(), "SetIsLinkedWithFinishedGoodAttributes_Recursive",
          "| Depth:", depth,
          "| Product:", this.ID(),
          "| BusinessType:", this.BusinessType(),
          "| isallowcrossbusinesstype:", isallowcrossbusinesstype,
          "| IsLinkedWithFGCrossBusiness:", this.IsLinkedWithFGCrossBusiness(),
          "| IsLinkedWithFinishedGood:", this.IsLinkedWithFinishedGood() );
    if( ifexpr( isallowcrossbusinesstype,
                not this.IsLinkedWithFGCrossBusiness(),
                not this.IsLinkedWithFinishedGood() ) )
    {
      depthlocal := depth + 1;
      if( uniquebomids_o.Find( this.ID() ) < 0 )
      {
        uniquebomids_o.Add( this.ID() );
      }
      if( isallowcrossbusinesstype )
      {
        this.IsLinkedWithFGCrossBusiness( true );
      }
      else
      {
        this.IsLinkedWithFinishedGood( true );
      }
      if( depthlocal <= maxdepth )
      {
        uniquebomids_local := construct( Strings );
        operations := selectset( this.GlobalOTDTable(), Global_MappingOperation, operation,
                                 ( isallowcrossbusinesstype
                                   or operation.BusinessType() = this.BusinessType() )
                                 and operation.ProductID() = this.ID() );
        traverse( operations, Elements, operation )
        {
          if( isallowcrossbusinesstype )
          {
            operation.IsLinkedWithFGCrossBusiness( true );
          }
          else
          {
            operation.IsLinkedWithFinishedGood( true );
          }
          operationboms := selectset( this.GlobalOTDTable(), Global_MappingOperationBOM, operationbom,
                                      operationbom.BusinessType() = operation.BusinessType()
                                      and operationbom.OrganCode() = operation.OrganCode()
                                      and operationbom.ProcessSection() = operation.ProcessSection()
                                      and operationbom.ProductCode() = operation.ProductID() );
          traverse( operationboms, Elements, operationbom )
          {
            if( isallowcrossbusinesstype )
            {
              operationbom.IsLinkedWithFGCrossBusiness( true );
            }
            else
            {
              operationbom.IsLinkedWithFinishedGood( true );
            }
            traverse( this.GlobalOTDTable(), Global_MappingProduct_MP, componentproduct,
                      componentproduct.ID() = operationbom.ComponentCode()
                      and ( isallowcrossbusinesstype
                            or componentproduct.BusinessType() = operationbom.BusinessType() ) )
            {
              componentproduct.SetIsLinkedWithFinishedGoodAttributes_Recursive_DEBUG( depthlocal,
                                                                                maxdepth,
                                                                                uniquebomids_local,
                                                                                isallowcrossbusinesstype );
            }
            if( operationbom.AlternativeMaterialCode() <> ""
                and operationbom.AlternativeMaterialCode() <> operationbom.ComponentCode() )
            {
              traverse( this.GlobalOTDTable(), Global_MappingProduct_MP, alternativeproduct,
                        alternativeproduct.ID() = operationbom.AlternativeMaterialCode()
                        and ( isallowcrossbusinesstype
                              or alternativeproduct.BusinessType() = operationbom.BusinessType() ) )
              {
                alternativeproduct.SetIsLinkedWithFinishedGoodAttributes_Recursive_DEBUG( depthlocal,
                                                                                    maxdepth,
                                                                                    uniquebomids_local,
                                                                                    isallowcrossbusinesstype );
              }
            }
            info( 'KKK2', this.DefinitionName(), "SetIsLinkedWithFinishedGoodAttributes_Recursive",
                  "| Depth:", depthlocal - 1,
                  "| BusinessType:", operation.BusinessType(),
                  "| OrganCode:", operation.OrganCode(),
                  "| ProcessSection:", operation.ProcessSection(),
                  "| ProductID:", operation.ProductID(),
                  "| isallowcrossbusinesstype:", isallowcrossbusinesstype,
                  "| IsLinkedWithFGCrossBusiness:", this.IsLinkedWithFGCrossBusiness(),
                  "| IsLinkedWithFinishedGood:", this.IsLinkedWithFinishedGood(),
                  "| UniqueBOMIDs:", uniquebomids_local.Unique().ToString( ";" ) );
          }
        }
        uniquebomids := uniquebomids_local.Unique().Difference( this.ID() );
        if( isallowcrossbusinesstype )
        {
          this.BOMCountCrossBusiness( uniquebomids.Size() );
          this.BOMIDsCrossBusiness( uniquebomids.ToString( ";" ) );
        }
        else
        {
          this.BOMCount( uniquebomids.Size() );
          this.BOMIDs( uniquebomids.ToString( ";" ) );
        }
        traverse( uniquebomids, Elements, uniquebomid,
                  uniquebomids_o.Find( uniquebomid ) < 0 )
        {
          uniquebomids_o.Add( uniquebomid );
        }
      }
      else
      {
        debuginfo( "Product:", this.ID(),
                   "| BusinessType:", this.BusinessType(),
                   "| IsAllowCrossBusinessType:", isallowcrossbusinesstype,
                   "| Max depth reached, stop searching... (", depth, ")" );
      }
    }
    else
    {
      if( uniquebomids_o.Find( this.ID() ) < 0 )
      {
        uniquebomids_o.Add( this.ID() );
      }
      uniquebomids := construct( Strings );
      if( isallowcrossbusinesstype )
      {
        uniquebomids := this.BOMIDsCrossBusiness().Tokenize( ";" );
      }
      else
      {
        uniquebomids := this.BOMIDs().Tokenize( ";" );
      }
      traverse( uniquebomids, Elements, uniquebomid,
                uniquebomids_o.Find( uniquebomid ) < 0 )
      {
        uniquebomids_o.Add( uniquebomid );
      }
    }
  *]
}
_Main/BL/Type_MacroPlan/Method_OnCreate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
Quintiq file version 2.0
#parent: #root
Method OnCreate #extension
{
  TextBody:
  [*
    this.DatasetName( this.MDSMacroPlan().Name() );
    //Create related object
    // Initialize sanitycheck group
    SanityCheckGroup::CreateSanityCheckGroups( this );
    //Initialize calendar registry
    this.InitializeCalendarRegistry();
    /* isfromdb is set to true so that default objects are created with
       IsManuallyConfigured = false
    */
    isfromdb := true;
    // Period parameters
    start := DateTime::ActualTime().StartOfYear();
    PeriodParameter_MP::Create( '1',
                                this,
                                start,
                                isfromdb );
    // GlobalParameters
    this.GlobalParameters_MP( relnew, ID := '1', PeriodSpecificationForUnitActual := GlobalParameters_MP::GetDefaultPeriodSpecification() );
    // Create resource manager where it contains certain limit of data, applicable to 3ds cloud
    this.ResourceManager_MP( relnew );
    this.UpdateSizingParameterStatus();
    this.SmartPlanSetting( relnew );
    this.IDHolder( relnew );
    // Create default sales segment
    SalesSegment_MP::Create( this, null(SalesSegment_MP), GlobalParameters_MP::GetDefaultSalesSegment(), 0, isfromdb );
    // Create default period specification
    PeriodSpecification_MP::Create( GlobalParameters_MP::GetDefaultPeriodSpecification(),
                                    this, GlobalParameters_MP::GetDefaultPeriodSpecTimeUnit(),
                                    1,
                                    DateTime::Now().StartOfYear(), 12, 18, isfromdb,
                                    true,
                                    false );
    // Create dummy period specification for leading periods
    PeriodSpecification_MP::Create( GlobalParameters_MP::GetDefaultPlanningPeriodSpecification(),
                                    this, "",
                                    0,
                                    DateTime::Now().StartOfYear(), 0, 0, false,
                                    false,
                                    true );
    isproductcategory := false;
    ProductLevel_MP::Create( GlobalParameters_MP::GetProductRoot(), isproductcategory, this, isfromdb );
    SalesLevel_MP::Create( GlobalParameters_MP::GetRegionRoot(), this, isfromdb );
    this.CreateDefaultPriority();
    this.MPVersion( DomainModel::Domain().Version().Version() );
    rcv := RoutingConfiguratorView::Create( this.IDHolder().GetRoutingConfiguratorViewID(), this );
    this.IDHolder().RoutingConfiguratorViewID( [Number]rcv.ID() )
    SCVConfiguration::Create( this );
    UnitOfMeasure_MP::CreateDefaultUOM( this );
    Currency_MP::CreateBaseCurrency( this );
    // Create account cost drivers
    AccountCostDriver::CreateAccountCostDrivers( this );
    // Create default shiftpattern
    ShiftPattern::CreateDefaultShiftPattern( this );
    // DataExchangeFramework
    dtd := DataTransformationDefinition::Create( this );
    DataTransformationManufacturingDemand::Create( dtd );
    // Create MacroPlanPTF object
    MacroPlanPTF::Create( this );
    // Create wizard manager
    this.WizardManager( relnew, Id := "" );
    this.PreliminaryFeature( relnew );
    this.SetTime();
    // Create wizard for supply chain initialization
    this.CreateSupplyChainWizard();
    // MEIO parameters
    this.MEIO_Parameters( relnew );
    // Create World puzzle
    this.FindCreateWorldPuzzle();
  *]
}
_Main/BL/Type_PriorityFactor/Method_CreatePrioitifyFacotrDetail.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Method CreatePrioitifyFacotrDetail (
  String PriorityFactoryDetailName,
  String GradeTarget,
  Boolean isRange,
  String RangeMax,
  String RangeMin,
  String GradeDesc
)
{
  TextBody: '// Akari Nov-7-2023 (created)'
}
_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
@@ -36,7 +36,7 @@
          
          traverse( priorityFactorList,Elements,e)
          {
              PriorityFactorDetails::InitData( owner,e);
              PriorityFactorDetail::InitData( owner,e);
          }
    
    }
_Main/BL/Type_PriorityFactorDetails/StaticMethod_GetDataByPriorityFactor.qbl
@@ -3,14 +3,14 @@
StaticMethod GetDataByPriorityFactor (
  PriorityFactor priorityFactor,
  MacroPlan owner
) as owning PriorityFactorDetailss
) as owning PriorityFactorDetails
{
  Description: '根据事优先级因子获取优先级因子细分集合'
  TextBody:
  [*
    // NBoTk Sep-18-2023 (created)
    
    list := selectset( owner,PriorityFactor.PriorityFactorDetails,p,
    list := selectset( owner,PriorityFactor.PriorityFactorDetail,p,
                       p.BusinessType() = priorityFactor.BusinessType() and priorityFactor.Name() = p.PriorityFactorName()
                       );
    
_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
@@ -18,85 +18,85 @@
    
    if( priorityFactor.Name() = "大张盈利水平" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "大盈",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "小盈",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
                                                IsRange := false,GradingName := "持平",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
                                                IsRange := false,GradingName := "小亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
                                                IsRange := false,GradingName := "大亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    
    if( priorityFactor.Name() = "客户策略" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "81%≤X≤100%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                IsRange := false,GradingName := "61%≤X≤80%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "41%≤X≤60%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                IsRange := false,GradingName := "21%≤X≤40%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "1%≤X≤20%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    
    if( priorityFactor.Name() = "细分市场等级" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "战略",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "重点",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "潜力",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    
    if( priorityFactor.Name() = "订单下单时间" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "120",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                IsRange := false,GradingName := "90",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "60",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                IsRange := false,GradingName := "30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "0",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    
    if( priorityFactor.Name() = "需求类型" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "有预测",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "无预测",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "纯预测",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    
    if( priorityFactor.Name() = "客户等级" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "战略",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "重点",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "潜力",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    
    if( priorityFactor.Name() = "DOI" or priorityFactor.Name() = "DSI")
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "<7",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "<15",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "<30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
        priorityFactor.PriorityFactorDetail(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := ">30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());                                                                                     
    }
  *]
_Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetail.qbl
ÎļþÃû´Ó _Main/BL/Type_PriorityFactorDetails/_ROOT_Type_PriorityFactorDetails.qbl ÐÞ¸Ä
@@ -1,10 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type PriorityFactorDetails
Type PriorityFactorDetail
{
  #keys: '5[414382.0.440655013][414382.0.440655011][0.0.0][414382.0.440655012][414382.0.440655014]'
  BaseType: Object
  Description: '优先级因子细分'
  StructuredName: 'PriorityFactorDetailss'
  StructuredName: 'PriorityFactorDetails'
}
_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
@@ -32,7 +32,7 @@
    {
            if( "客户策略" =  priorityFactor.Name())
            {
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "客户策略" and p.GradingName() = customerOrder.CustomerPolicy());
                 obj := selectobject( priorityFactor,PriorityFactorDetail,p , p.PriorityFactorName() = "客户策略" and p.GradingName() = customerOrder.CustomerPolicy());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
@@ -43,7 +43,7 @@
            
            if( "大张盈利水平" =  priorityFactor.Name())
            {
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "大张盈利水平" and  p.GradingName() = customerOrder.SheetProfitability());
                 obj := selectobject( priorityFactor,PriorityFactorDetail,p , p.PriorityFactorName() = "大张盈利水平" and  p.GradingName() = customerOrder.SheetProfitability());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
@@ -78,7 +78,7 @@
            
            if( "细分市场等级" =  priorityFactor.Name())
            {
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "细分市场等级" and p.GradingName() = customerOrder.SegmentPriority());
                 obj := selectobject( priorityFactor,PriorityFactorDetail,p , p.PriorityFactorName() = "细分市场等级" and p.GradingName() = customerOrder.SegmentPriority());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
@@ -90,7 +90,7 @@
            if( "需求类型" =  priorityFactor.Name())
            {     
                // æœ‰é¢„测 æ— é¢„测 çº¯é¢„测
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p,p.GradingName() = customerOrder.OrderType());
                 obj := selectobject( priorityFactor,PriorityFactorDetail,p,p.GradingName() = customerOrder.OrderType());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
@@ -116,8 +116,8 @@
                 // ä¸‹å•æ—¶é—´
                 orderTime := customerOrder.OrderTime();
                 days := orderTime.TotalInDays() - customerOrder.EndDate().TotalInDays();
                 obj := null( PriorityFactorDetails);
                 sortDetail := selectsortedset( priorityFactor,PriorityFactorDetails,p,[Number]p.GradingName());
                 obj := null( PriorityFactorDetail);
                 sortDetail := selectsortedset( priorityFactor,PriorityFactorDetail,p,[Number]p.GradingName());
                 traverse( sortDetail,Elements,e )
                 {
                       if( days >= [Number]e.GradingName() )
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
@@ -12,15 +12,13 @@
    // NBoTk Sep-26-2023 (created)
    
    // å…ˆåˆ é™¤åŽ†å²çš„è·‘åˆ†è¯¦æƒ…
    traverse( macroPlan,PriorityResult,p)
    {
    traverse( macroPlan,PriorityResult,p){
          p.PriorityResultBusinessTypeDetail(relflush );
          p.Delete(); 
    }
    
    // è®¡ç®—客户订单的优先级得分 å›žå¡«æƒé‡æ•°æ® ç”Ÿæˆæ–°çš„Priority明细数据
    traverse( macroPlan,SalesDemand.astype( CustomerOrder ),e)
    {
    traverse( macroPlan,SalesDemand.astype( CustomerOrder ),e){
         // äº‹ä¸šéƒ¨ä¿¡æ¯
         businessType := e.BusinessType();
         
@@ -34,100 +32,72 @@
         priorityResult := macroPlan.PriorityResult(relnew,CustomerOrderID := e.ID(),BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                     DemandDate := e.EndDate(),ProductID := e.ProductID(),Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),
                                                     StockingPointID := e.StockingPointID(),UnitOfMeasureName := e.UnitOfMeasureName()
                                                     );
                                                     );
         priorityResult.CustomerOrder(relset, e);
         // åˆ¤æ–­æ˜¯é›†å›¢ è¿˜æ˜¯äº‹ä¸šéƒ¨
         if( businessType.FindString( "集团",0 ) <> -1)
         {
         if( businessType.FindString( "集团",0 ) <> -1){
              priorityResult.PriorityResultGroupDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                        DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                        Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                        UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value
                                                        );
         }
         else
         {
         }else{
               priorityResult.PriorityResultBusinessTypeDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                                DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                                Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                                UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value 
                                                                );      
         }
         }
    }
    
    // ä¼˜å…ˆçº§å› å­å¤„理完成后 æŽ’序回填数据
    traverse( macroPlan,PriorityResult,e){
      businessTypeScore := max( e,PriorityResultBusinessTypeDetail,p,
                                p.PriorityTotalScore()
                                );
      groupScore := max( e,PriorityResultGroupDetail,p,
                         p.PriorityTotalScore()
                         );
      value := maxvalue( businessTypeScore,groupScore);
      e.PriorityResultScore( value );
    }
    resultList := selectsortedset( macroPlan,PriorityResult,result,
                                   true,
                                   result.PriorityResultScore()
                                   -result.PriorityResultScore()
                                   )
    
    // Quintiq优先级分10级 éœ€è¦åˆ†æ®µè®¡ç®— å‘上取整
    subLevel := round( resultList.Size() div 10);
    subLevelCount := 0;
    // Quintiq优先级分10级 éœ€è¦åˆ†æ®µè®¡ç®— å‘下取整
    if( resultList.Size() >= 10){
        subListSize := resultList.Size() div 10;
        overListSize := resultList.Size() mod 10;
    
    priorityValue := 1;
    if( resultList.Size() <= 10 )
    {
        traverse( resultList,Elements,e)
        {
            obj := selectobject( macroPlan,SalesDemand.astype( CustomerOrder ),order,
                         order.ID() = e.CustomerOrderID()
                         );
            // è®¢å•数据不为空再做处理
            if( not isnull( obj ) )
            {
                  obj.PriorityName([String]priorityValue);
                  // åˆ›å»ºä¼˜å…ˆçº§æ•°æ® éœ€è¦å…ˆæ¸…除上一次的计算结果
                  // åˆ¤æ–­å½“前customerOrder是否存在
                  oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
                  if(isnull( oldPriority ) )
                  {
                        macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
                  }
        count := 10;
        point := 10;
        count1 := 0;
        flag := 0;
        for( i := 0 ; i < resultList.Size() - overListSize ; i := i + subListSize){
            subListCopy := subListSize;
            if (count <= overListSize){
                subListCopy := subListCopy + 1;
                flag := flag + 1;
            }
            // åˆ¤æ–­è®¡ç®—分段数量与Quintiq原始优先级
            //优先级+1
            priorityValue := priorityValue + 1;
            for( j := 0;j < subListCopy ; j++){
                element := resultList.Element( count1 * subListSize + j + flag );
                element.CustomerOrder().PriorityName( [String]point );
            }
            point --;
            count --;
            count1++;
        }
    }
    else
    {
        traverse( resultList,Elements,e)
        {
            obj := selectobject( macroPlan,SalesDemand.astype( CustomerOrder ),order,
                                 order.ID() = e.CustomerOrderID()
                                 );
            // è®¢å•数据不为空再做处理
            if( not isnull( obj ) )
            {
                  obj.PriorityName([String]priorityValue);
                  // åˆ›å»ºä¼˜å…ˆçº§æ•°æ® éœ€è¦å…ˆæ¸…除上一次的计算结果
                  // åˆ¤æ–­å½“前customerOrder是否存在
                  oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
                  if(isnull( oldPriority ) )
                  {
                        macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
                  }
            }
            // åˆ¤æ–­è®¡ç®—分段数量与Quintiq原始优先级
            subLevelCount := subLevelCount + 1;
            if( subLevelCount = subLevel )
            {
                // å½“到达分段数量后 ä¼˜å…ˆçº§+1 åˆ†æ®µè®¡æ•°ä»Ž0开始
                if( priorityValue < 10 )
                {
                      priorityValue := priorityValue + 1;
                }
                subLevelCount := 0;
            }
        }
    }else {
      point := 10;
      traverse( resultList,Elements,element){
        element.CustomerOrder().PriorityName([String]point);
        point --;
      }
    }
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Component_pnlContent.def
@@ -39,6 +39,36 @@
        Taborder: 2
      ]
    }
    Component NewFlag
    {
      #keys: '[414996.0.58138242]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Taborder: 3
        Visible: false
      ]
    }
    Component EditFlag
    {
      #keys: '[414996.0.60522350]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Taborder: 4
        Visible: false
      ]
    }
    Component PriorityFactorNameCache
    {
      #keys: '[414996.0.60522537]'
      BaseType: 'WebLabel'
      Properties:
      [
        Taborder: 5
        Visible: false
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_ClickBtnOK.def
@@ -5,7 +5,6 @@
  #keys: '[414382.0.464433014]'
  Body:
  [*
    btnOk.Enabled(false,'');
    
    // OnOk
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def
@@ -13,6 +13,8 @@
    
    DataHolderEditPriorityFactor.Data(&data);
    
    NewFlag.Checked( true );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def
@@ -7,23 +7,43 @@
  Precondition:
  [*
    feedback := Translations::FilllingCapacity_ValidateInput();
    checkValue := not Coefficient.Text() = ''
    checkValue := not Coefficient.Text() = '' and not PriorityFactorName.Text() = '';
    
    if(not checkValue )
    {
    if(not checkValue ){
      feedback := Translations::PriorityFactor_CheckNameValid();
      editData := DataHolderEditPriorityFactor.Data();
      checkValue := not PriorityFactor::CheckNameValid( MacroPlan,editData.BusinessType(),[Real]Coefficient.Text(),PriorityFactorName.Text(),Desc.Text());
    }
    if( PriorityFactorName.Text() = ''){
      feedback := Translations::PriorityFactor_CheckNameNull();
    }
    return checkValue
  *]
  QuillAction
  {
    Body:
    [*
      Form.ClickBtnOK();
      if( NewFlag.Checked() ){
       // New
        repeatOne := select( MacroPlan,PriorityFactor,pf,pf.Name() = PriorityFactorName.Text());
        if( not isnull( repeatOne )){
          WebMessageBox::Error( Translations::PriorityFactor_CheckNameValid() );
        }else{
          Form.ClickBtnOK();
        }
      }else {
              if (EditFlag.Checked() and PriorityFactorNameCache.Text() <>PriorityFactorName.Text()){
                  // Edit
                  repeatOne:=select(MacroPlan, PriorityFactor, pf, pf.Name() = PriorityFactorName.Text());
                  if (not isnull(repeatOne)){
                      WebMessageBox::Error (Translations::PriorityFactor_CheckNameValid () );
                  }else{
                      Form.ClickBtnOK();
                  }
              }else{
                  Form.ClickBtnOK();
              }
      }
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlContent_PriorityFactorName_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: pnlContent/PriorityFactorName
Response OnChanged () id:Response_pnlContent_PriorityFactorName_OnChanged
{
  #keys: '[414996.0.58353845]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebEditField_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( not EditFlag.Checked()){
        PriorityFactorNameCache.Text(PriorityFactorName.Text());
      }
      EditFlag.Checked(true);
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def
@@ -11,7 +11,7 @@
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradeTarget'
        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.GradeTarget'
        Label: '分级目标值'
        Taborder: 2
      ]
@@ -22,7 +22,7 @@
      BaseType: 'WebCheckbox'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.IsRange'
        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.IsRange'
        Label: '分级范围:'
        Taborder: 3
      ]
@@ -33,7 +33,7 @@
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMax'
        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.RangeMax'
        Label: '最大值'
        Taborder: 4
        Visible: false
@@ -45,7 +45,7 @@
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMin'
        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.RangeMin'
        Label: '最小值'
        ReadOnly: true
        Taborder: 6
@@ -57,7 +57,7 @@
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradeDesc'
        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.GradeDesc'
        FixedSize: false
        Label: '描述'
        SizeRatio: 3
@@ -70,20 +70,9 @@
      BaseType: 'WebLabel'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.PriorityFactorName'
        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.PriorityFactor.Name'
        Label: '优先级因子'
        Taborder: 0
      ]
    }
    Component PriorityFactorDetailsName
    {
      #keys: '[414382.0.486013052]'
      BaseType: 'WebLabel'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.GradingName'
        Label: '细分名称'
        Taborder: 1
      ]
    }
    Component RangeMaxTest
@@ -107,6 +96,17 @@
        Taborder: 7
      ]
    }
    Component PriorityFactorDetailsName
    {
      #keys: '[414996.0.36000637]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderEditPriorityFactorDetail.Data.GradingName'
        Label: '细分名称'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_ClickBtnOK.def
@@ -1,15 +1,17 @@
Quintiq file version 2.0
#parent: #root
Method ClickBtnOK () id:Method_DialogEditPriorityFactorDetails_ClickBtnOK
Method ClickBtnOK () id:Method_DialogEditPriorityFactorDetail_ClickBtnOK
{
  #keys: '[414382.0.482495783]'
  Body:
  [*
    btnOk.Enabled(false,'');
    
    // OnOk
    this.ApplyChanges();
    DataHolderEditPriorityFactorDetails.Data().Commit();
    DataHolderEditPriorityFactorDetail.Data( ).Commit();
    this.Close();
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_Edit.def
@@ -1,8 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method Edit (
  PriorityFactorDetails selection
) id:Method_DialogEditPriorityFactorDetails_Edit
  PriorityFactorDetail selection
) id:Method_DialogEditPriorityFactorDetail_Edit
{
  #keys: '[414382.0.482495781]'
  Body:
@@ -13,8 +13,8 @@
    {
        isRange.Checked(true);
    }
    DataHolderEditPriorityFactorDetails.Data( &data);
    PriorityFactorDetailsName.Enabled( false,"" );
    DataHolderEditPriorityFactorDetail.Data( &data );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Method_New.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
Method New (
  PriorityFactor owner
) id:Method_DialogEditPriorityFactorDetail_New
{
  #keys: '[414996.0.35320212]'
  Body:
  [*
    data := owner.PriorityFactorDetail(relshadow);
    DataHolderEditPriorityFactorDetail.Data( &data );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def
@@ -20,9 +20,9 @@
          RangeMax.Visible(false);
          RangeMin.Visible(false);
          RangeMaxTest.Visible(true) 
          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMax());
          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMax());
          RangeMinText.Visible(true) 
          RangeMinText.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMin());
          RangeMinText.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMin());
      }
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def
@@ -20,9 +20,9 @@
          RangeMax.Visible(false);
          RangeMin.Visible(false);
          RangeMaxTest.Visible(true) 
          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMax());
          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMax());
          RangeMinText.Visible(true) 
          RangeMinText.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMin());
          RangeMinText.Text([String]DataHolderEditPriorityFactorDetail.Data().RangeMin());
      }
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetail.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/_ROOT_Component_DialogEditPriorityFactorDetails.def ÐÞ¸Ä
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogEditPriorityFactorDetails
OrphanComponent DialogEditPriorityFactorDetail
{
  #keys: '[414382.0.482374517]'
  BaseType: 'WebForm'
@@ -9,11 +9,11 @@
  [
    #child: pnlContent
    #child: pnlActions
    Component DataHolderEditPriorityFactorDetails
    Component DataHolderEditPriorityFactorDetail
    {
      #keys: '[414382.0.482495927]'
      #keys: '[414996.0.38864386]'
      BaseType: 'WebDataHolder'
      Databinding: 'shadow[PriorityFactorDetails]*'
      Databinding: 'shadow[PriorityFactorDetail]*'
      Properties:
      [
        Taborder: 2
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def
@@ -9,7 +9,7 @@
      BaseType: 'WebMenu'
      Properties:
      [
        Taborder: 10
        Taborder: 11
        Title: '事业部优先级计算'
      ]
    }
@@ -19,7 +19,7 @@
      BaseType: 'WebMenu'
      Properties:
      [
        Taborder: 11
        Taborder: 12
        Title: '修改客户订单优先级因子信息'
      ]
    }
@@ -31,7 +31,7 @@
      [
        Description: '订单拆行'
        Image: 'ARROW_FORK'
        Taborder: 13
        Taborder: 14
        Title: '拆行'
      ]
    }
@@ -42,7 +42,17 @@
      Properties:
      [
        Separator: true
        Taborder: 12
        Taborder: 13
      ]
    }
    Component MenuSyncInterfaceData
    {
      #keys: '[414996.0.32330708]'
      BaseType: 'WebMenu'
      Properties:
      [
        Taborder: 10
        Title: '同步接口数据到Customer orders'
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: listContextMenuSD/MenuSyncInterfaceData
Response OnClick () id:Response_TIANMA_JITUAN_listContextMenuSD_MenuSyncInterfaceData_OnClick
{
  #keys: '[414996.0.32370756]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Global_MappingCustomOrder::CreateCustomOrder( GlobalOTDTable,MacroPlan );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_ListPriorityFactor.def
@@ -11,10 +11,10 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'structured[PriorityFactor]'
        Source: 'DataHolderPriorityFactorSelect'
        DataType: 'MacroPlan'
        Source: 'MacroPlan'
        Taborder: 0
        Transformation: 'Elements'
        Transformation: 'PriorityFactor'
      ]
    }
    #child: listActionBarPagePriorityFactor
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
@@ -16,6 +16,39 @@
        Title: '初始化'
      ]
    }
    Component MenuNewPriorityFactor
    {
      #keys: '[414996.0.32331011]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_ADD'
        Taborder: 4
        Title: 'New'
      ]
    }
    Component MenuEditPriorityFactor
    {
      #keys: '[414996.0.32331061]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_EDIT'
        Taborder: 5
        Title: 'Edit'
      ]
    }
    Component MenuDeletePriorityFactor
    {
      #keys: '[414996.0.32331135]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_DELETE'
        Taborder: 6
        Title: 'Delete'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnClick (
  structured[PriorityFactor] selection
) id:Response_ListPriorityFactor_MenuDeletePriorityFactor_OnClick
{
  #keys: '[414996.0.35089240]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuDeletePriorityFactor'
  QuillAction
  {
    Body:
    [*
      number := WebMessageBox::Question( "Are you sure delete this priority factor?","Yes|No" );
      if( number = 0 ){
        traverse( selection,Elements,element){
          element.Delete();
        }
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick#325.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnClick (
  PriorityFactor selection
) id:Response_ListPriorityFactor_MenuEditPriorityFactor_OnClick_325
{
  #keys: '[414996.0.34858367]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuEditPriorityFactor'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactor );
      dlg.Edit( selection);
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnClick (
  PriorityFactor selection
) id:Response_ListPriorityFactor_MenuNewPriorityFactor_OnClick
{
  #keys: '[414996.0.39511535]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuNewPriorityFactor'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactor );
      dlg.New( MacroPlan,"" );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick#106.def
@@ -11,8 +11,8 @@
  {
    Body:
    [*
      detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
      DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
      //detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
      //DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnDoubleClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnDoubleClick (
  PriorityFactor selection
) id:Response_ListPriorityFactor_OnDoubleClick
{
  #keys: '[414996.0.62910306]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnDoubleClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactor );
      dlg.Edit( selection);
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnDrop.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnDrop (
  PriorityFactorDetail source,
  PriorityFactor target
) id:Response_ListPriorityFactor_OnDrop
{
  #keys: '[414996.0.63148145]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnDrop'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( not isnull( source) and not isnull( target)){
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def
@@ -11,9 +11,7 @@
  {
    Body:
    [*
      info( "selecion change" );
      detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
      DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
      DataHolderPriorityFactorSelect.Data(selection);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: listContextMenuPriorityFactor/MenuNewPriorityFactor
Response OnClick () id:Response_listContextMenuPriorityFactor_MenuNewPriorityFactor_OnClick
{
  #keys: '[414996.0.32331254]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactor );
      dlg.New( MacroPlan,"");
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
@@ -11,22 +11,7 @@
    {
      #keys: '[414382.0.453562359]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityFactor]*'
      Children:
      [
        Component DataExtractorPriorityFactorSelect
        {
          #keys: '[414382.0.608512605]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'PriorityFactor'
          ]
        }
      ]
      Databinding: 'PriorityFactor'
      Properties:
      [
        Taborder: 1
@@ -48,7 +33,7 @@
    {
      #keys: '[414382.0.482103344]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityFactorDetails]*'
      Databinding: 'structured[PriorityFactorDetail]*'
      Properties:
      [
        Taborder: 3
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_ListPriorityFactorGrading.def
@@ -11,10 +11,10 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'structured[PriorityFactorDetails]'
        Source: 'DataHolderPriorityFactorGrading'
        DataType: 'PriorityFactor'
        Source: 'DataHolderPriorityFactor'
        Taborder: 0
        Transformation: 'Elements'
        Transformation: 'PriorityFactorDetail'
      ]
    }
    #child: listActionBarPagePriorityFactorGrading
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
@@ -3,6 +3,42 @@
{
  #keys: '[414382.0.479530873]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuEditPriorityFactorGrading
    {
      #keys: '[414996.0.32342387]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_EDIT'
        Taborder: 4
        Title: 'Edit'
      ]
    }
    Component MenuDeletePriorityFactorGrading
    {
      #keys: '[414996.0.32342398]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_DELETE'
        Taborder: 5
        Title: 'Delete'
      ]
    }
    Component MenuNewPriorityFactorGrading
    {
      #keys: '[414996.0.40230778]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_ADD'
        Taborder: 3
        Title: 'New'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: ListPriorityFactorGrading
Response OnClick (
  structured[PriorityFactorDetail] selction
) id:Response_ListPriorityFactorGrading_MenuDeletePriorityFactorGrading_OnClick
{
  #keys: '[414996.0.36022233]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuDeletePriorityFactorGrading'
  QuillAction
  {
    Body:
    [*
      number := WebMessageBox::Question( "Are you sure delete this priority factor?","Yes|No" );
      if( number = 0 ){
        traverse( selction,Elements,element){
          element.Delete();
        }
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: ListPriorityFactorGrading
Response OnClick (
  PriorityFactorDetail selction
) id:Response_ListPriorityFactorGrading_MenuEditPriorityFactorGrading_OnClick
{
  #keys: '[414996.0.32393877]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuEditPriorityFactorGrading'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactorDetail );
      dlg.Edit( selction );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: ListPriorityFactorGrading
Response OnClick () id:Response_ListPriorityFactorGrading_MenuNewPriorityFactorGrading_OnClick
{
  #keys: '[414996.0.42410722]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuNewPriorityFactorGrading'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactorDetail );
      dlg.New( DataHolderPriorityFactor.Data( ));
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_OnDoubleClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListPriorityFactorGrading
Response OnDoubleClick (
  PriorityFactorDetail selection
) id:Response_ListPriorityFactorGrading_OnDoubleClick
{
  #keys: '[414996.0.62960783]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnDoubleClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditPriorityFactorDetail );
      dlg.Edit( selection );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
@@ -7,21 +7,22 @@
  BaseType: 'WebForm'
  Children:
  [
    Component DataHolderPriorityFactorGrading
    #child: ListPriorityFactorGrading
    Component DataHolderPriorityFactor
    {
      #keys: '[414382.0.478480902]'
      #keys: '[414996.0.35059952]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityFactorDetails]*'
      Databinding: 'PriorityFactor'
      Children:
      [
        Component DataExtractorPriorityFactorGrading
        Component DataExtractorPriorityFactor
        {
          #keys: '[414382.0.478480916]'
          #keys: '[414996.0.35059968]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[PriorityFactorDetails]'
            Source: 'FormPriorityFactor.DataHolderPriorityFactorDetailsSelect'
            DataType: 'PriorityFactor'
            Source: 'FormPriorityFactor.DataHolderPriorityFactorSelect'
            Taborder: 0
          ]
        }
@@ -31,7 +32,6 @@
        Taborder: 0
      ]
    }
    #child: ListPriorityFactorGrading
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw
@@ -35,6 +35,26 @@
              width: 150
            }
          }
          FormBusinessType_PanelBusinessType
          {
            sizeRatio: 1
          }
          FormBusinessType_ListOrganCode
          {
          }
          FormBusinessType_DataSetLevelOrganCode
          {
            groupDepth: -1
            column_OrganCodeName
            {
              columnId: 'OrganCodeName'
              dataPath: 'OrganCodeName'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormPriorityResult
@@ -417,7 +437,7 @@
              dataType: 'real'
              index: 1
              subtotals: ''
              width: 496
              width: 71
            }
            column_Desc
            {
@@ -554,2187 +574,14 @@
          }
        }
      }
      form_FormOptimizerPuzzles
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 0
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 1
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_1
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 2
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_1
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 3
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_2
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 4
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_2
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 5
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_3
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 6
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_3
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 7
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_4
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 8
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_4
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 9
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_5
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 10
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_5
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 11
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_6
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 12
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_6
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 13
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_7
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 14
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_7
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 15
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormSanityCheck
      {
        title: 'Sanity Check'
        shown: false
        componentID: 'FormSanityCheck'
        layout
        {
          mode: 'dockright'
          index: 16
        }
        components
        {
          FormSanityCheck_PanelSanityCheckToolbar
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckContent
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckGroup
          {
            sizeRatio: 4
          }
          FormSanityCheck_ListSanityCheckGroup
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckGroup
          {
            groupDepth: -1
            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Group
            {
              columnId: 'Group'
              dataPath: 'Group'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 270
            }
            column__Expr3
            {
              columnId: '_Expr3'
              dataPath: '_Expr3'
              dataType: 'number'
              index: 4
              subtotals: ''
              width: 95
            }
          }
          FormSanityCheck_PanelSanityCheckMessage
          {
            sizeRatio: 5
          }
          FormSanityCheck_ListSanityCheckMessage
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckMessage
          {
            groupDepth: -1
            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Messages
            {
              columnId: 'Messages'
              dataPath: 'Messages'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 32
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 585
            }
          }
        }
      }
      form_FormOptimizerPuzzles_8
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 17
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_8
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 18
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_9
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 19
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_9
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 20
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_10
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 21
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_10
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 22
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_11
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 23
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_11
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 24
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_12
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 25
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_12
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 26
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_13
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 27
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_13
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 28
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_14
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 29
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_14
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 30
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_15
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 31
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_15
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 32
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormSanityCheck_1
      {
        title: 'Sanity Check'
        shown: false
        componentID: 'FormSanityCheck'
        layout
        {
          mode: 'dockright'
          index: 33
        }
        components
        {
          FormSanityCheck_PanelSanityCheckToolbar
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckContent
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckGroup
          {
            sizeRatio: 4
          }
          FormSanityCheck_ListSanityCheckGroup
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckGroup
          {
            groupDepth: -1
            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Group
            {
              columnId: 'Group'
              dataPath: 'Group'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 270
            }
            column__Expr3
            {
              columnId: '_Expr3'
              dataPath: '_Expr3'
              dataType: 'number'
              index: 4
              subtotals: ''
              width: 95
            }
          }
          FormSanityCheck_PanelSanityCheckMessage
          {
            sizeRatio: 5
          }
          FormSanityCheck_ListSanityCheckMessage
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckMessage
          {
            groupDepth: -1
            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Messages
            {
              columnId: 'Messages'
              dataPath: 'Messages'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 32
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 585
            }
          }
        }
      }
      form_FormKPI_16
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 34
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Metals_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Food_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Empty_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 0
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormKPI_17
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 35
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Metals_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Food_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Empty_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 0
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormPriorities
      {
        title: 'Priorities'
        shown: true
        componentID: 'FormPriorities'
        layout
        {
          mode: 'dockright'
          index: 36
        }
        components
        {
          FormPriorities_ListPriority
          {
          }
          FormPriorities_DataSetLevelPriority
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_ImgHasSalesDemand
            {
              columnId: 'ImgHasSalesDemand'
              dataPath: 'ImgHasSalesDemand'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 30
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 95
            }
            column_Weight
            {
              columnId: 'Weight'
              dataPath: 'Weight'
              dataType: 'real'
              index: 3
              subtotals: ''
              width: 95
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    index: 0
    image: ''
    page: ''
    group: ''
    index: 15
    image: ''
    description: ''
  }
  formatversion: 2