陈清红
2025-04-14 0b84c9999f07bc46275f5947c4b8ebf5ce0c25cf
BUG&优化项
已修改32个文件
已添加38个文件
1640 ■■■■■ 文件已修改
_Main/BL/Dataset_InterfaceDataset/Daemon_ActualDailyProductionInterface.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Dataset_InterfaceDataset/Daemon_FinishedEngineInventoryInterface#0.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_APIRMS64ProductRelation_InterfaceDataset_InterfaceDataset_APIRMS64P.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AOnlineAndMOfflinePlanMS64/StaticMethod_GenerateData.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_Publish.qbl 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_APIRMS64ProductRelation/Attribute_Factory.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_APIRMS64ProductRelation/Attribute_Product.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_APIRMS64ProductRelation/_ROOT_Type_APIRMS64ProductRelation.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterfaceForSAPGet.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventoryInterfaceData/StaticMethod_UpdateInventoryQuantity.qbl 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventoryPlanArchiveCell/StaticMethod_SynchronizeActualInventory.qbl 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventoryPlanArchiveRow/Method_SetQuantity.qbl 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_DetectingNegativeValues.qbl 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_DetectingNegativeValues.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanArchiveVersionCell/StaticMethod_SynchronizeActualProduction.qbl 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TransferPlanCell/StaticMethod_WriteBackTheTransferPlan.qbl 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioSelection.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPublishSAP.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_PanelScenarioSelection.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_mAPIMS64ProductRelation_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_lstRight590.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_OnOk.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight590_OnCreated.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlLeft_88_ddslFactory_OnSelectionChanged.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_abpRight481#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_cmRight681#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_lstRight590#71.def 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlContent.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlLeft.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlRight#836.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_OnOk.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_lstRight590_71_OnCheckedChanged#338.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_lstRight590_71_OnCheckedChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_lstRight590_71_OnCreated.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_pnlLeft_ddslFactory_OnSelectionChanged.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_List920.def 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_listActionBarPage590.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_listContextMenu519.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_pContent.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_pHeader.def 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Response_List920_mDelete_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Response_pHeader_bCreate_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Response_pHeader_ddslProduct_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/_ROOT_Component_FormAPIRMS64ProductRelation.def 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormActualDailyProduction/Component_ListActualDailyProduction.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable#384.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelTable#273.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventoryInterfaceData/Response_pHeader_bFilter_OnClick.def 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable#791.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelPeriod#71.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable#881.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_71_bSynchronizeActualInventory_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPointSelection/Component_ListInventoryPointSelection.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Component_pHeader#136.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_pHeader_136_bDetectingNegativeValues_OnClick#812.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pHeader.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bDetectingNegativeValues_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelPeriod.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_ButtonPeriod_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormSAP_PIR/Response_List391_bPush_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pHeader.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bWriteBackTheTransferPlan_OnClick.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/APIMS64ProductRelation.vw 307 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Inventory_plan_archive_report.vw 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Dataset_InterfaceDataset/Daemon_ActualDailyProductionInterface.qbl
@@ -5,7 +5,7 @@
  Frequency: P1DT0H0M0S
  Priority: 'Default'
  StartDate: 2020-01-01
  StartTimeOfDay: P0DT10H0M0S
  StartTimeOfDay: P0DT9H30M0S
  Text:
  [*
    options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
_Main/BL/Dataset_InterfaceDataset/Daemon_FinishedEngineInventoryInterface#0.qbl
@@ -5,7 +5,7 @@
  Frequency: P1DT0H0M0S
  Priority: 'Default'
  StartDate: 2024-07-19
  StartTimeOfDay: P0DT10H0M0S
  StartTimeOfDay: P0DT9H30M0S
  Text:
  [*
    options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
_Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl
@@ -5,7 +5,7 @@
  Frequency: P1DT0H0M0S
  Priority: 'Default'
  StartDate: 2024-07-19
  StartTimeOfDay: P0DT10H0M0S
  StartTimeOfDay: P0DT9H30M0S
  Text:
  [*
    options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl
@@ -5,7 +5,7 @@
  Frequency: P1DT0H0M0S
  Priority: 'Default'
  StartDate: 2024-07-19
  StartTimeOfDay: P0DT10H0M0S
  StartTimeOfDay: P0DT9H30M0S
  Text:
  [*
    options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
_Main/BL/Relations/Relation_APIRMS64ProductRelation_InterfaceDataset_InterfaceDataset_APIRMS64P.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation APIRMS64ProductRelation_InterfaceDataset_InterfaceDataset_APIRMS64ProductRelation
{
  #keys: '1[730572.0.162835510]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide InterfaceDataset
  {
    #keys: '3[730572.0.162835512][730572.0.162835511][730572.0.162835513]'
    Cardinality: '0to1'
    ObjectDefinition: APIRMS64ProductRelation
    OwningSide: 'Reference'
  }
  RelationSide.RightSide APIRMS64ProductRelation
  {
    #keys: '3[730572.0.162835515][730572.0.162835514][730572.0.162835516]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceDataset
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_AOnlineAndMOfflinePlanMS64/StaticMethod_GenerateData.qbl
@@ -41,11 +41,13 @@
                                                                , VersionTo := versionto, IsActive := versionflag );
    loginfo.AOnlineAndMOfflinePlanMS64( relinsert, ms64 );
    traverse( products, Elements, product, product.IsLeaf() ){
      productID := ifexpr( product.ParentID() = "MLB" or product.ParentID() = "MQB", product.Notes(), product.ID() );
      //productID := ifexpr( product.Notes().TrimBoth() <> "", product.Notes(), product.ID() );
      if( werk = 'All' ){
        ms64.MS64Data( relnew, Product := product.ID(), Werk := '8200' );
        ms64.MS64Data( relnew, Product := product.ID(), Werk := '8201' );
        ms64.MS64Data( relnew, Product := productID, Werk := '8200' );
        ms64.MS64Data( relnew, Product := productID, Werk := '8201' );
      }else{
        ms64.MS64Data( relnew, Product := product.ID(), Werk := ms64.Werk() );
        ms64.MS64Data( relnew, Product := productID, Werk := ms64.Werk() );
      }
      
    }
_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl
@@ -9,7 +9,8 @@
  Date enddate,
  String executor,
  String feedback,
  Boolean isPush
  Boolean isPush,
  Product_MPs products
) as InterfaceLoginfo
{
  TextBody:
@@ -60,7 +61,7 @@
    traverse( owner, OfflinePlanArchiveVersion, table, not table.IsShow() ){
      traverse( table, Column, column, column.StartDate() >= startdate and column.StartDate() <= enddate ){//column.TimeUnit() = Translations::MP_GlobalParameters_Day() and 
        traverse( column, Cell, cell, ( werk = 'All' or cell.Row().Unit().FindString( werk, 0 ) > -1 )
                  and ( cell.Row().ProductionLine() <> 'DL_MOMO' or cell.Row().ProductionLine() <> 'CC_MOMO' ) ){
                  and ( cell.Row().ProductionLine() <> 'DL MoMo' and cell.Row().ProductionLine() <> 'CC MoMo' and cell.Row().ProductionLine() <> 'DL ZKM' ) ){
          row              := cell.Row();
          rowwerk          := ifexpr( row.ProductionLine().FindString( "CC", 0 ) > -1, AOnlineAndMOfflinePlanPIR::GetWerk( FinancialProductionReport::GetDefaultCCUnit() ), AOnlineAndMOfflinePlanPIR::GetWerk( FinancialProductionReport::GetDefaultDLUnit() ) );
          if( not exists( productids, Elements, e, e = row.ProductID() ) ){
@@ -94,7 +95,7 @@
    loginfo.TotalRow( pir.PIRData( relsize ) );
    
    if ( isPush ) {
      feedback             := AOnlineAndMOfflinePlanPIR::Publish( owner, loginfo );
      feedback             := AOnlineAndMOfflinePlanPIR::Publish( owner, loginfo, products );
    }
    
    return loginfo;
_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_Publish.qbl
@@ -2,7 +2,8 @@
#parent: #root
StaticMethod Publish (
  InterfaceDataset owner,
  InterfaceLoginfo loginfo
  InterfaceLoginfo loginfo,
  Product_MPs products
) as String
{
  TextBody:
@@ -12,7 +13,8 @@
    
    traverse( loginfo, AOnlineAndMOfflinePlanPIR, pir ){
      jsonarray        := JSON::Array();//.Add( "dto", JSON::Object().Add( "dday", date.Format( "Y-M2-D2" ) ).Add( "fac", "" ) ).Build();
      traverse( pir, PIRData, pirdata ){
      traverse( pir, PIRData, pirdata, exists( products, Elements, tempP,
                                               ifexpr( tempP.ParentID() = "MLB" or tempP.ParentID() = "MQB", tempP.Notes(), tempP.ID() ) = pirdata.Product() ) ){
        pirjson        := JSON::Object().Add( "product", pirdata.Product() )
                                        .Add( "planningDate", pirdata.PlanningDate().Format( 'YM2D2' ) )//"2024-10-01" )
                                        .Add( "planningQty", pirdata.PlanningQty() )
@@ -27,10 +29,16 @@
      .Add( 'dataList', jsonarray );
    }
    
    loginfo.RequestBody( jsondata.Build().AsString() );
    //info( loginfo.RequestBody() );
    // è®¾ç½®è¯·æ±‚体
    requestBody := jsondata.Build().AsString();
    loginfo.RequestBody( requestBody );
    info( loginfo.RequestBody() );
    data              := InterfaceLoginfo::CallInterfaceForSAPGet( owner, loginfo );
    //info( '----------------', data );
    //data := "Test";
    return data;
  *]
}
_Main/BL/Type_APIRMS64ProductRelation/Attribute_Factory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Attribute Factory
{
  #keys: '3[730572.0.162836302][730572.0.162836301][730572.0.162836303]'
  Description:
  [*
    å·¥åŽ‚
    VWED CC
    VWED DL
  *]
  ValueType: String
}
_Main/BL/Type_APIRMS64ProductRelation/Attribute_Product.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Product
{
  #keys: '3[730572.0.162836325][730572.0.162836324][730572.0.162836326]'
  ValueType: String
}
_Main/BL/Type_APIRMS64ProductRelation/_ROOT_Type_APIRMS64ProductRelation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type APIRMS64ProductRelation
{
  #keys: '5[730572.0.162835490][730572.0.162835488][0.0.0][730572.0.162835489][730572.0.162835491]'
  BaseType: Object
  StructuredName: 'APIRMS64ProductRelations'
}
_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterfaceForSAPGet.qbl
@@ -10,9 +10,9 @@
  [*
    // ç”„兰鸽 Jul-22-2024 (created)
    address           := Translations::InterfaceDataset_SAP_Address(); 
    httpinterface     := HTTPInterface::Create( address,8080); // æµ‹è¯•
    //httpinterface     := HTTPInterface::Create( address,8080); // æµ‹è¯•
    
    //httpinterface     := HTTPInterface::Create( "10.120.76.32",8080); // ç”Ÿäº§
    httpinterface     := HTTPInterface::Create( "10.120.76.32",8080); // ç”Ÿäº§
    
    httpinterface.PostMethod( true ); ; 
    httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
@@ -69,7 +69,7 @@
          feedback   := feedback.Concat( '产品' ).Concat( failproduct.Concatenate( '、' ) ).Concat( '因为' ).Concat( failmsg ).Concat( '推送失败' ).Concat( ';' );
        }
      }
      feedback       := feedback.Replace( feedback.Length() - 1, 1, '。' );
    //  feedback       := feedback.Replace( feedback.Length() - 1, 1, '。' ); // è¿™è¡ŒæŠ¥é”™
    }
    
    return feedback;
_Main/BL/Type_InventoryInterfaceData/StaticMethod_UpdateInventoryQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
Quintiq file version 2.0
#parent: #root
StaticMethod UpdateInventoryQuantity (
  InterfaceDataset interfaceDataset,
  Date startDate,
  Date endDate
)
{
  TextBody:
  [*
    if ( ( endDate - startDate ) <= 10 ) {
      while ( startDate <= endDate ) {
        feis := selectset( interfaceDataset, InterfaceLoginfo.FinishedEngineInventory, tempFEI, tempFEI.DDay() = startDate );
        msds := selectset( interfaceDataset, InterfaceLoginfo.MachineStockData, tempMSD, tempMSD.DDay() = startDate );
        iids := selectset( interfaceDataset, InventoryInterfaceData, tempIID, tempIID.Date() = startDate );
        traverse ( iids, Elements, iid ) {
          traverse ( iid, InventoryInterfaceDataDetail, iidd ) {
            iidd.Quantity( sum( feis, Elements, tempFEI,
                                tempFEI.DDay()     = iidd.Date()           and
                                tempFEI.FourCode() = iidd.PartNumber()     and
                                tempFEI.BIPlace()  = iidd.InventoryPoint() and
                                tempFEI.Fac()      = iidd.Fac(),
                                tempFEI.Total() ) );
            total := sum( msds, Elements, tempMSD,
                          tempMSD.DDay()     = iidd.Date()         and
                          tempMSD.MaterialNo() = iidd.PartNumber() and
                          tempMSD.Lgort()  = iidd.InventoryPoint() and
                          tempMSD.Fac()      = iidd.Fac(),
                          tempMSD.Total() );
            iidd.Quantity( ifexpr( total > 0, total, iidd.Quantity() ) );
          }
        }
        startDate := startDate + 1;
      }
    }
  *]
}
_Main/BL/Type_InventoryPlanArchiveCell/StaticMethod_SynchronizeActualInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeActualInventory (
  InterfaceDataset interfaceDataset,
  Archive archive
)
{
  TextBody:
  [*
    //opv := select( interfaceDataset, InventoryPlanArchiveVersion, tempOPAV, not tempOPAV.IsShow() );
    //
    //mindate := minselect( opv, Column, tempC, true, tempC.StartDate() ).StartDate();
    //maxdate := maxselect( opv, Column, tempC, true, tempC.StartDate() ).StartDate();
    //
    ////info( "最小时间:", mindate.Format( "Y-M2-D2" ), "    æœ€å¤§æ—¶é—´ï¼š", maxdate.Format( "Y-M2-D2" ) );
    //
    //adpds := selectsortedset( archive, ActualDailyProductionData, tempADPD,
    //                          tempADPD.ProductionDate() >= mindate and
    //                          tempADPD.ProductionDate() <= maxdate,
    //                          tempADPD.ProductionDate() );
    //
    ////info( "实际生产的个数:", adpds.Size() );
    //
    //products := construct( Strings );
    //
    //traverse ( adpds, Elements, adpd
    ////           ,( adpd.Fac() + " " + adpd.LineName() + "_" + adpd.ProductNo() ) = "CC MoMo_6909" and adpd.ProductionDate() = Date::Construct( 2025, 4, 1 )
    //            ) {
    ////  info( "工厂:", adpd.Fac(), "    äº§å“ï¼š", adpd.ProductNo(), "    äº§çº¿ï¼š", adpd.LineName() );
    //
    //  // äº§çº¿å¤„理
    //  productLine := adpd.Fac() + " " + adpd.LineName() + "_" + adpd.ProductNo();
    //
    ////  info( "name:", productLine, "    ç”Ÿæˆæ—¥æœŸï¼š", adpd.ProductionDate().Format( "Y-M2-D2" ), "    æ•°é‡ï¼š", adpd.ActualOut() );
    //
    //  row  := select( opv, Row, tempR, tempR.ShowName().TrimBoth() = productLine.TrimBoth() );
    //  cell := select( row, Cell, tempC, tempC.Column().StartDate() = adpd.ProductionDate() );
    //
    //  // æ¸…0重新赋值
    //  if ( not isnull( cell ) and not exists( products, Elements, p, p = cell.Key().AsQUILL() ) ) {
    //    cell.ActualProductionQty( 0 );
    //
    //    products.Add( cell.Key().AsQUILL() );
    //  }
    //
    //  if ( not isnull( cell ) ) {
    //    cell.ActualProductionQty( cell.ActualProductionQty() + adpd.ActualOut() );
    //  }
    //}
  *]
}
_Main/BL/Type_InventoryPlanArchiveRow/Method_SetQuantity.qbl
@@ -3,7 +3,8 @@
Method SetQuantity (
  InventoryPlanArchiveColumn column,
  Real planqty,
  Real actualaty
  Real actualaty,
  NamedValueTree resetNVT
)
{
  TextBody:
@@ -15,7 +16,16 @@
    
      column.Cell( relinsert, cell );
    }
    // åˆ¤æ–­æ˜¯å¦é‡ç½®ä¸º0
    resetH := resetNVT.GetHandle( this.ShowName() + column.StartDate().Format( "Y-M2-D2" ) );
    if ( guard( isnull( resetNVT.Root().Child( resetH ) ), true ) ) {
      cell.PlanQuantity( 0 );
      resetNVT.Root().AddChild( resetH );
    }
    cell.PlanQuantity( cell.PlanQuantity() + planqty );
    cell.ActualQuantity( cell.ActualQuantity() + actualaty );
    cell.ActualQuantity( actualaty );
  *]
}
_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl
@@ -9,63 +9,125 @@
  TextBody:
  [*
    //interfaceDataset.InventoryPlanArchiveVersion( relflush );
    info( '-------------------------Start---------------------');
    machineproductparent   := MachiningPipelineReport::GetDefaultProductParent();
    engineproductparent    := EnginePipelineReport::GetDefaultProductParent();
    allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit();
    name                   := InventoryPlanArchiveVersion::GetDefaultName();//search                 :=
    interfaceDataset.InventoryPlanArchiveVersionSearch( relnew, Product := allunit, Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
    info( '-------------------------Start---------------------' );
    //machineproductparent   := MachiningPipelineReport::GetDefaultProductParent(); // æœºåŠ ä»¶
    //engineproductparent    := EnginePipelineReport::GetDefaultProductParent(); // å‘动机
    allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit(); // <All>
    name                   := InventoryPlanArchiveVersion::GetDefaultName(); // Inventory plan archive
    interfaceDataset.InventoryPlanArchiveVersionSearch( relnew,
                                                        Product   := allunit,
                                                        Unit      := allunit,
                                                        StartDate := Date::MinDate(),
                                                        EndDate   := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
    // åˆ›å»ºæ˜¾ç¤ºè¡¨æ ¼
    table                  := selectobject( interfaceDataset, InventoryPlanArchiveVersion, version, not version.IsShow() );
    if( isnull( table ) ){
      table                := interfaceDataset.InventoryPlanArchiveVersion( relnew, ID := name, Name := name );
    }
    //showtable              := selectobject( interfaceDataset, InventoryPlanArchiveVersion, version, version.IsShow() );
    //if( isnull( showtable ) ){ 
    //  showtable               := interfaceDataset.InventoryPlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true );
    //}
    // åˆ›å»ºä¸å­˜åœ¨åˆ—
    periods                := selectuniquevalues(  macroPlan, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day()
                                                   and not exists( table, Column, column, column.StartDate() = period.StartDate() ), period.StartDate() );//column.TimeUnit() = Translations::MP_GlobalParameters_Day() and 
    if( periods.Size() > 0 ){
      table.GenerateColumn( periods, false );
    }
    // æœ€å°æ—¶é—´
    minDate := minselect( table, Column, tempC, true, tempC.StartDate() ).StartDate();
    maxDate := maxselect( table, Column, tempC, true, tempC.StartDate() ).StartDate();
    info( "最小时间:", minDate.Format( "Y-M2-D2" ), "    æœ€å¤§æ—¶é—´ï¼š", maxDate.Format( "Y-M2-D2" ) );
    actinventorytree       := NamedValueTree::Create();
    inventoryqrys          := construct( Reals );
    inventoryindex         := 0;
    traverse( interfaceDataset,InterfaceLoginfo.MachineStockData, actinventory ){
      inventoryqrys.Add( actinventory.Total() );
      actinventoryKey      := actinventory.MaterialNo() + actinventory.DDay().AsQUILL();
    // æœºåŠ å®žé™…åº“å­˜
    traverse ( interfaceDataset,InterfaceLoginfo.MachineStockData, actinventory,
    //           actinventory.Fac() = "CC" and actinventory.MaterialNo() = "06U105101A" and actinventory.DDay() = Date::Construct( 2025, 4, 9 ) and// æµ‹è¯•过滤(生产需要注释)
               actinventory.DDay() >= minDate and actinventory.DDay() <= maxDate ) {
      // åº“位是否绑定库存点
      iid  := select( interfaceDataset, InventoryInterfaceData, tempIID, tempIID.Date() = actinventory.DDay()             and
                                                                         tempIID.PartNumber() = actinventory.MaterialNo() );
      iidd := select( iid, InventoryInterfaceDataDetail, tempIIDD, tempIIDD.InventoryPoint() = actinventory.Lgort() and
                                                                   tempIIDD.Fac()            = actinventory.Fac() );
      flag := guard( iidd.InventoryPointSelection().IsIncluded(), false );
    //  info( "是否被库存点选择:", flag,  "    æ•°é‡ï¼š", actinventory.Total() );
      actinventoryKey      := ifexpr( actinventory.Fac() = "DL", FinancialProductionReport::GetDefaultDLUnit(), FinancialProductionReport::GetDefaultCCUnit() ) +
                              actinventory.MaterialNo()                                                                                                         +
                              actinventory.DDay().Format( "Y-M2-D2" );
      actinventoryhandle   := actinventorytree.GetHandle( actinventoryKey );
      actinventorytree.Root().AddChild( actinventoryhandle,inventoryindex );
      inventoryindex       := inventoryindex + 1;
    }
    traverse( interfaceDataset,InterfaceLoginfo.FinishedEngineInventory,actinventory ){
      product               := selectobject( macroPlan, Product_MP, product, product.Notes() = actinventory.FourCode() );
      if( not isnull( product ) ){
        inventoryqrys.Add( actinventory.Total() );
        actinventoryKey     := actinventory.FourCode() + actinventory.DDay().AsQUILL();
        actinventoryhandle  := actinventorytree.GetHandle( actinventoryKey );
        actinventorytree.Root().AddChild( actinventoryhandle,inventoryindex );
        inventoryindex      := inventoryindex + 1;
      if ( guard( actinventorytree.Root().Child( actinventoryhandle ).GetValueAsReal() > 0, false ) ) { // åˆ¤æ–­æ˜¯å¦å­˜åœ¨ï¼Œå­˜åœ¨
        if ( flag ) {
          targetNV := actinventorytree.Root().Child( actinventoryhandle );
          targetNV.SetValue( targetNV.GetValueAsReal() + actinventory.Total() );
        }
      } else { // ä¸å­˜åœ¨
        if ( flag ) {
          actinventorytree.Root().AddChild( actinventoryhandle, actinventory.Total() );
        }
      }
    }
    traverse( macroPlan, Product_MP, product, exists( product.GetAllParent(), Elements, e, e.ID() = machineproductparent or e.ID() = engineproductparent ) ){
    // å‘动机实际库存
    traverse ( interfaceDataset, InterfaceLoginfo.FinishedEngineInventory, actinventory,
    //           actinventory.Fac() = "CC" and actinventory.FourCode() = "6908" and actinventory.DDay() = Date::Construct( 2025, 4, 2 ) and// æµ‹è¯•过滤(生产需要注释)
               actinventory.DDay() >= minDate and actinventory.DDay() <= maxDate ) {
      // åº“位是否绑定库存点
      iid  := select( interfaceDataset, InventoryInterfaceData, tempIID, tempIID.Date() = actinventory.DDay()           and
                                                                         tempIID.PartNumber() = actinventory.FourCode() );
      iidd := select( iid, InventoryInterfaceDataDetail, tempIIDD, tempIIDD.InventoryPoint() = actinventory.BIPlace() and
                                                                   tempIIDD.Fac()            = actinventory.Fac() );
      flag := guard( iidd.InventoryPointSelection().IsIncluded(), false );
      product               := selectobject( macroPlan, Product_MP, product, product.ID() = actinventory.FourCode() );
      if ( not isnull( product ) ) {
        actinventoryKey     := ifexpr( actinventory.Fac() = "DL", FinancialProductionReport::GetDefaultDLUnit(), FinancialProductionReport::GetDefaultCCUnit() ) +
                               actinventory.FourCode() +
                               actinventory.DDay().Format( "Y-M2-D2" );
        actinventoryhandle  := actinventorytree.GetHandle( actinventoryKey );
        if ( guard( actinventorytree.Root().Child( actinventoryhandle ).GetValueAsReal() > 0, false ) ) { // åˆ¤æ–­æ˜¯å¦å­˜åœ¨ï¼Œå­˜åœ¨
          if ( flag ) {
            targetNV := actinventorytree.Root().Child( actinventoryhandle );
            targetNV.SetValue( targetNV.GetValueAsReal() + actinventory.Total() );
          }
        } else { // ä¸å­˜åœ¨
          if ( flag ) {
            actinventorytree.Root().AddChild( actinventoryhandle, actinventory.Total() );
          }
        }
      }
    }
    //handle := actinventorytree.GetHandle( "VWED CC06U105101A2025-04-09" );
    //info( "数量:", guard( actinventorytree.Root().Child( handle ).GetValueAsReal(), 0 ) );
    // ä¿å­˜å·²é‡ç½®0的产品
    resetNVT := NamedValueTree::Create();
    traverse ( macroPlan, Product_MP, product
    //           ,product.ID() = "6909"
              ) {
      traverse ( product, ProductInStockingPoint_MP, pispmp, not pispmp.IsSystem() and pispmp.IsLeaf() ) {
        unit                 := ifexpr( pispmp.StockingPointID().Regex( "大连" ) or pispmp.StockingPointID().Regex( "DL" ), FinancialProductionReport::GetDefaultDLUnit(), FinancialProductionReport::GetDefaultCCUnit() );
        inventoryrow         := table.GetRowByUnit( pispmp.Product_MP(), unit );
        traverse ( pispmp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, not pispippl.IsPeriodFrozen() ) {
        unit                 := ifexpr( pispmp.StockingPointID().Regex( "大连" ) or pispmp.StockingPointID().Regex( "DL" ),
                                        FinancialProductionReport::GetDefaultDLUnit(),
                                        FinancialProductionReport::GetDefaultCCUnit() ); // å·¥åŽ‚
        inventoryrow         := table.GetRowByUnit( pispmp.Product_MP(), unit ); // åˆ›å»ºåº“存存档行
    //    info( pispmp.Name() );
        traverse ( pispmp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl,
    //               pispmp.ProductID() = "6909" and pispippl.Start().Date() = Date::Construct( 2025, 3, 31 ) and // æµ‹è¯•过滤(生产需要注释)
                   not pispippl.IsPeriodFrozen() ) {
          startdate          := pispippl.Start().Date();
          daycolumn          := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), startdate );
          daycolumn          := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), startdate ); // èŽ·å–åº“å­˜å­˜æ¡£åˆ—
    //      weekcolumn         := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), startdate );
    //      monthcolumn        := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), startdate );
          actinventoryKey    := pispmp.ProductID() + startdate.AsQUILL();
          actinventoryKey    := unit + pispmp.ProductID() + startdate.Format( "Y-M2-D2" );
          actinventoryhandle := actinventorytree.GetHandle( actinventoryKey );
          actinventoryindex  := guard( actinventorytree.Root().Child( actinventoryhandle ),null( NamedValue ));
          actinventoryqty    := 0.0;
          if( not isnull( actinventoryindex )){
            actinventoryqty  := inventoryqrys.Element( actinventoryindex.GetValueAsNumber() );
          }
          inventoryrow.SetQuantity( daycolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
          actinventoryQty    := guard( actinventorytree.Root().Child( actinventoryhandle ).GetValueAsReal(), 0 );
    //      info( "数量:", actinventoryQty );
          inventoryrow.SetQuantity( daycolumn, pispippl.InventoryLevelEnd(), actinventoryQty, resetNVT );
    //      inventoryrow.SetQuantity( weekcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
    //      inventoryrow.SetQuantity( monthcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
      
@@ -73,7 +135,7 @@
      }
    }
    
    info( '-------------------------End---------------------');
    info( '-------------------------End---------------------' );
    //productids             := selectuniquevalues( table, Row, row, row.Name() );
    //productlines           := selectuniquevalues( table, Row, row, row.Unit() );
    //showtable.Generate( search, productids, productlines );
_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_DetectingNegativeValues.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
#parent: #root
StaticMethod DetectingNegativeValues (
  MacroPlan macroPlan
) as String
{
  Description: '检测负值'
  TextBody:
  [*
    res  := "";
    // å¾ªçŽ¯éåŽ†æ˜Žç»†æ•°æ®
    traverse ( macroPlan, NewAssemblyOnlinePlanRow, naopr, naopr.Type() = "1" ) {
      traverse ( naopr, NewAssemblyOnlinePlanCell, naopcell, naopcell.Quantity() < 0 ) {
        res := res      +
               "产线:" + naopr.ProductionLine()                                                 + " " +
               "产品:" + naopr.ProductID()                                                      + " " +
               "时间:" + naopcell.NewAssemblyOnlinePlanColumn().StartDate().Format( "Y-M2-D2" ) + " " +
               "数量:" + [String]naopcell.Quantity()                                            + "\n";
      }
    }
    if ( res = "" ) {
      res := "暂未出现负值";
    }
    return res;
  *]
}
_Main/BL/Type_NewOfflinePlanCell/StaticMethod_DetectingNegativeValues.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod DetectingNegativeValues (
  MacroPlan macroPlan
) as String
{
  Description: '检测负值'
  TextBody:
  [*
    nopt := maxselect( macroPlan, NewOfflinePlanTable, tempOPT, true, tempOPT.SaveDateTime() );
    res  := "";
    // å¾ªçŽ¯éåŽ†æ˜Žç»†æ•°æ®
    traverse ( nopt, NewOfflinePlanRow, npr, npr.Type() = "1" ) {
      traverse ( npr, NewOfflinePlanCell, npcell, npcell.Quantity() < 0 ) {
        res := res      +
               "产线:" + npr.ProductionLine()                                          + " " +
               "产品:" + npr.ProductID()                                               + " " +
               "时间:" + npcell.NewOfflinePlanColumn().StartDate().Format( "Y-M2-D2" ) + " " +
               "数量:" + [String]npcell.Quantity()                                     + "\n";
      }
    }
    if ( res = "" ) {
      res := "暂未出现负值";
    }
    return res;
  *]
}
_Main/BL/Type_OfflinePlanArchiveVersionCell/StaticMethod_SynchronizeActualProduction.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeActualProduction (
  InterfaceDataset interfaceDataset,
  Archive archive
)
{
  TextBody:
  [*
    opv := select( interfaceDataset, OfflinePlanArchiveVersion, tempOPAV, not tempOPAV.IsShow() );
    mindate := minselect( opv, Column, tempC, true, tempC.StartDate() ).StartDate();
    maxdate := maxselect( opv, Column, tempC, true, tempC.StartDate() ).StartDate();
    //info( "最小时间:", mindate.Format( "Y-M2-D2" ), "    æœ€å¤§æ—¶é—´ï¼š", maxdate.Format( "Y-M2-D2" ) );
    adpds := selectsortedset( archive, ActualDailyProductionData, tempADPD,
                              tempADPD.ProductionDate() >= mindate and
                              tempADPD.ProductionDate() <= maxdate,
                              tempADPD.ProductionDate() );
    //info( "实际生产的个数:", adpds.Size() );
    products := construct( Strings );
    traverse ( adpds, Elements, adpd
    //           ,( adpd.Fac() + " " + adpd.LineName() + "_" + adpd.ProductNo() ) = "CC MoMo_6909" and adpd.ProductionDate() = Date::Construct( 2025, 4, 1 )
                ) {
    //  info( "工厂:", adpd.Fac(), "    äº§å“ï¼š", adpd.ProductNo(), "    äº§çº¿ï¼š", adpd.LineName() );
      // äº§çº¿å¤„理
      productLine := adpd.Fac() + " " + adpd.LineName() + "_" + adpd.ProductNo();
    //  info( "name:", productLine, "    ç”Ÿæˆæ—¥æœŸï¼š", adpd.ProductionDate().Format( "Y-M2-D2" ), "    æ•°é‡ï¼š", adpd.ActualOut() );
      row  := select( opv, Row, tempR, tempR.ShowName().TrimBoth() = productLine.TrimBoth() );
      cell := select( row, Cell, tempC, tempC.Column().StartDate() = adpd.ProductionDate() );
      // æ¸…0重新赋值
      if ( not isnull( cell ) and not exists( products, Elements, p, p = cell.Key().AsQUILL() ) ) {
        cell.ActualProductionQty( 0 );
        products.Add( cell.Key().AsQUILL() );
      }
      if ( not isnull( cell ) ) {
        cell.ActualProductionQty( cell.ActualProductionQty() + adpd.ActualOut() );
      }
    }
  *]
}
_Main/BL/Type_TransferPlanCell/StaticMethod_WriteBackTheTransferPlan.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
Quintiq file version 2.0
#parent: #root
StaticMethod WriteBackTheTransferPlan (
  MacroPlan macroPlan,
  Product_MPs selectedProducts
)
{
  TextBody:
  [*
    traverse ( selectedProducts, Elements, p, p.IsLeaf() and exists( macroPlan, TransferPlanRow, tempTPR, tempTPR.ProductID() = p.ID() ) ) {
      tprs := selectset( macroPlan, TransferPlanRow, tempTPR, tempTPR.ProductID() = p.ID() );
      traverse ( tprs, Elements, tpr ) {
        tpcells := selectsortedset( tpr, TransferPlanCell, tempTPCell, guard( [Number]tempTPCell.Value(), 0 ) >= 0.0, tempTPCell.TransferPlanColumn().ColumnDate() );
        traverse ( tpcells, Elements, tpcell
    //               , tpcell.TransferPlanColumn().ColumnDate() = Date::Construct( 2025, 1, 11 )
                    ) {
    //      info( "时间:", tpcell.TransferPlanColumn().ColumnName(),                                                                 "    ",
    //            tpcell.TransferPlanRow().SourceStockpoingPointID() + "  To  " + tpcell.TransferPlanRow().TargetStockpoingPointID(), "    ",
    //            tpcell.Value() );
          // selecte trip plan
          unitName := tpcell.TransferPlanRow().SourceStockpoingPointID() + " " + "to" + " " + tpcell.TransferPlanRow().TargetStockpoingPointID() + " " + tpcell.TransferPlanRow().Category() + " " + "Transport"
          pit      := select( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT,
                              tempPIT.Trip().Departure().Date()             = tpcell.TransferPlanColumn().ColumnDate() and
                              tempPIT.Trip().LaneLeg().Lane().Unit().Name() = unitName                                 and
                              tempPIT.ProductID()                           = tpr.ProductID()
                             );
          if ( not isnull( pit ) ) { // æœ‰Trip情况
    //        info( pit.Quantity() );
            if ( [Number]pit.Quantity() <> [Number]tpcell.Value() ) {
              pit.Update( [Real]tpcell.Value(), true );
            }
          } else { // æ— Trip情况
    //        error( "no trip" );
    //        info( tpr.ProductID(), "    æ•°é‡ï¼š", [Number]tpcell.Value() );
    //
    //        t := select( macroPlan, Unit.Lane.LaneLeg.Trip, tempP,
    //                     tempP.LaneLeg().Lane().Unit().Name() = unitName and
    //                     tempP.Departure().Date()             = tpcell.TransferPlanColumn().ColumnDate() );
    //        p := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = tpr.ProductID() );
    //        info( not isnull( t ) );
    //        if ( [Number]tpcell.Value() > 0 and not isnull( t ) and not isnull( p ) ) {
    //          ProductInTrip::CreateOrUpdateForTrip( t, p, [Real]tpcell.Value() );
    //          Transaction::Transaction().PropagateAll();
    //        }
          }
        }
      }
    }
  *]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioSelection.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
Component ActionBarGroupScenarioSelection #extension
{
  Children:
  [
    #child: PanelScenarioSelection
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioSelection.def
@@ -1,6 +1,10 @@
Quintiq file version 2.0
Component ActionBarPageScenarioSelection #extension
{
  Children:
  [
    #child: ActionBarGroupScenarioSelection
  ]
  Properties:
  [
    Taborder: 22
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPublishSAP.def
@@ -25,6 +25,16 @@
        Title: 'SAP MS64'
      ]
    }
    Component mAPIMS64ProductRelation
    {
      #keys: '[730572.0.167360055]'
      BaseType: 'WebMenu'
      Properties:
      [
        Taborder: 2
        Title: '工厂产品对应关系'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_PanelScenarioSelection.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
Component PanelScenarioSelection #extension
{
  Children:
  [
    Component DropDownListScenario id:DropDownListScenario_886 #extension
    {
      Properties:
      [
        NumberOfColumns: 40
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_mAPIMS64ProductRelation_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ContextMenuPublishSAP/mAPIMS64ProductRelation
Response OnClick () id:Response_MacroPlanner_ContextMenuPublishSAP_mAPIMS64ProductRelation_OnClick
{
  #keys: '[730572.0.167360231]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "APIMS64ProductRelation", true );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Component_lstRight590.def
@@ -11,7 +11,7 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'external[MacroPlan]'
        DataType: 'MacroPlan'
        Source: 'MacroPlan'
        Taborder: 0
        Transformation: 'Product_MP'
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Method_OnOk.def
@@ -16,7 +16,8 @@
      if( sucproduct.Size() = loginfo.SAPResponseLoginfo( relsize ) ){
        WebMessageBox::Success( ApplicationMacroPlanner, '推送成功' );
      }else{
        WebMessageBox::Warning( ApplicationMacroPlanner, msg, 'Yes|No' );
    //    WebMessageBox::Warning( ApplicationMacroPlanner, msg, 'Yes|No' );
        WebMessageBox::Success( ApplicationMacroPlanner, Translations::A_VWED_Success() );
      }
    }
    Form.Close();
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_lstRight590_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: lstRight590
Response OnCreated () id:Response_lstRight590_OnCreated
{
  #keys: '[730572.0.167230490]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      this.CheckAll();
      apims64pr := selectset( InterfaceDataset, APIRMS64ProductRelation, tempAPIMS64PR,
                              ifexpr( ddslFactory.Text() = "All", true, tempAPIMS64PR.Factory() = ddslFactory.Text() ) );
      pmps := selectset( MacroPlan, Product_MP, tempPMP,
                         tempPMP.IsLeaf() and
                         not exists( apims64pr, Elements, tempAPIMS64PR, tempAPIMS64PR.Product() = tempPMP.ID() )
                        );
      traverse ( pmps, Elements, pmp ) {
        this.UnCheckByKey( pmp.Key() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSMS64/Response_pnlLeft_88_ddslFactory_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: pnlLeft_88/ddslFactory
Response OnSelectionChanged () id:Response_pnlLeft_88_ddslFactory_OnSelectionChanged
{
  #keys: '[730572.0.167230570]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      lstRight590.CheckAll();
      apims64pr := selectset( InterfaceDataset, APIRMS64ProductRelation, tempAPIMS64PR,
                              ifexpr( this.Text() = "All", true, tempAPIMS64PR.Factory() = this.Text() ) );
      pmps := selectset( MacroPlan, Product_MP, tempPMP,
                         tempPMP.IsLeaf() and
                         not exists( apims64pr, Elements, tempAPIMS64PR, tempAPIMS64PR.Product() = tempPMP.ID() )
                        );
      traverse ( pmps, Elements, pmp ) {
        lstRight590.UnCheckByKey( pmp.Key() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_abpRight481#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component abpRight481 id:abpRight481_1
{
  #keys: '[730572.0.145570670]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_cmRight681#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component cmRight681 id:cmRight681_1
{
  #keys: '[730572.0.145570672]'
  BaseType: 'listContextMenu'
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_lstRight590#71.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
Quintiq file version 2.0
Component lstRight590 id:lstRight590_71
{
  #keys: '[730572.0.145570668]'
  BaseType: 'WebList'
  Children:
  [
    Component deRight862
    {
      #keys: '[730572.0.145570669]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'MacroPlan'
        Source: 'MacroPlan'
        Taborder: 0
        Transformation: 'Product_MP'
      ]
    }
    #child: abpRight481_1
    Component dslRight661
    {
      #keys: '[730572.0.145570671]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: cmRight681_1
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}}]'
        ContextMenu: 'cmRight681'
        FixedFilter: "object.IsLeaf() and object.ParentID() <> '紧缺件'"
        SortCriteria: 'ID'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    SelectionCheckboxes: true
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlContent.def
@@ -6,9 +6,11 @@
  Children:
  [
    #child: pnlLeft
    #child: pnlRight_836
  ]
  Properties:
  [
    Orientation: 'horizontal'
    Padding: 'true'
    Taborder: 0
  ]
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlLeft.def
@@ -50,6 +50,7 @@
  ]
  Properties:
  [
    Border: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Component_pnlRight#836.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component pnlRight id:pnlRight_836
{
  #keys: '[730572.0.145570666]'
  BaseType: 'WebPanel'
  Children:
  [
    Component dhProducts
    {
      #keys: '[730572.0.145570667]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Properties:
      [
        Taborder: 0
      ]
    }
    #child: lstRight590_71
  ]
  Properties:
  [
    Taborder: 1
    Title: '产品'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Method_OnOk.def
@@ -16,12 +16,14 @@
                                                               dsEndDate.Date(), 
                                                               QuintiqUser::CurrentUser().DisplayName(), 
                                                               msg,
                                                               InterfaceDataset.IsPushSAP_PIR() );
                                                               InterfaceDataset.IsPushSAP_PIR(),
                                                               dhProducts.Data() );
      sucproduct   := selectuniquevalues( loginfo, SAPResponseLoginfo, e, e.IsSuccess(), e.Msg_v1() );
      if( sucproduct.Size() = loginfo.SAPResponseLoginfo( relsize ) ){
        WebMessageBox::Success( ApplicationMacroPlanner, '推送成功' );
      }else{
        WebMessageBox::Warning( ApplicationMacroPlanner, msg, 'Yes|No' );
    //    WebMessageBox::Warning( ApplicationMacroPlanner, msg, 'Yes|No' );
        WebMessageBox::Success( ApplicationMacroPlanner, Translations::A_VWED_Success() );
      }
    }
    Form.Close();
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_lstRight590_71_OnCheckedChanged#338.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: lstRight590_71
Response OnCheckedChanged (
  structured[Product_MP] checkeditems
) id:Response_lstRight590_71_OnCheckedChanged_338
{
  #keys: '[730572.0.145570662]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
  QuillAction
  {
    Body:
    [*
      products := checkeditems.Copy();
      dhProducts.Data( &products );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_lstRight590_71_OnCheckedChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: lstRight590_71
Response OnCheckedChanged () id:Response_lstRight590_71_OnCheckedChanged
{
  #keys: '[730572.0.145570663]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
  QuillAction
  {
    Body:
    [*
      dhProducts.Data().Flush();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_lstRight590_71_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: lstRight590_71
Response OnCreated () id:Response_lstRight590_71_OnCreated
{
  #keys: '[730572.0.166121446]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      this.CheckAll();
      apims64pr := selectset( InterfaceDataset, APIRMS64ProductRelation, tempAPIMS64PR,
                              ifexpr( ddslFactory.Text() = "All", true, tempAPIMS64PR.Factory() = ddslFactory.Text() ) );
      pmps := selectset( MacroPlan, Product_MP, tempPMP,
                         tempPMP.IsLeaf() and
                         not exists( apims64pr, Elements, tempAPIMS64PR, tempAPIMS64PR.Product() = tempPMP.ID() )
                        );
      traverse ( pmps, Elements, pmp ) {
        this.UnCheckByKey( pmp.Key() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogZEDPPSPIR/Response_pnlLeft_ddslFactory_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: pnlLeft/ddslFactory_424
Response OnSelectionChanged () id:Response_pnlLeft_ddslFactory_OnSelectionChanged
{
  #keys: '[730572.0.167280424]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      lstRight590.CheckAll();
      apims64pr := selectset( InterfaceDataset, APIRMS64ProductRelation, tempAPIMS64PR,
                              ifexpr( this.Text() = "All", true, tempAPIMS64PR.Factory() = this.Text() ) );
      pmps := selectset( MacroPlan, Product_MP, tempPMP,
                         tempPMP.IsLeaf() and
                         not exists( apims64pr, Elements, tempAPIMS64PR, tempAPIMS64PR.Product() = tempPMP.ID() )
                        );
      //info( pmps.Size() );
      traverse ( pmps, Elements, pmp ) {
        lstRight590.UnCheckByKey( pmp.Key() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_List920.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
Quintiq file version 2.0
Component List920
{
  #keys: '[730572.0.166102291]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractor376
    {
      #keys: '[730572.0.166102292]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'InterfaceDataset'
        Source: 'InterfaceDataset'
        Taborder: 0
        Transformation: 'APIRMS64ProductRelation'
      ]
    }
    #child: listActionBarPage590
    Component DataSetLevel195
    {
      #keys: '[730572.0.166102297]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenu519
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Factory","title":"Factory","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Factory"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Product"}}]'
        ContextMenu: 'listContextMenu519'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_List920_WebMenu_OnClick
    {
      #keys: '[730572.0.167350332]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[207.0.11974633]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_listActionBarPage590.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPage590
{
  #keys: '[730572.0.166102294]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_listContextMenu519.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
Component listContextMenu519
{
  #keys: '[730572.0.166102299]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component mDelete
    {
      #keys: '[730572.0.167350446]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DELETE'
        Taborder: 3
        Title: 'Delete'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_pContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
Component pContent
{
  #keys: '[730572.0.166102177]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: List920
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Component_pHeader.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
Quintiq file version 2.0
Component pHeader
{
  #keys: '[730572.0.166102162]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddslFactory
    {
      #keys: '[730572.0.166102447]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: '工厂'
        Strings: 'VWED CC;VWED DL'
        Taborder: 0
      ]
    }
    Component ddslProduct
    {
      #keys: '[730572.0.166102507]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: '产品'
        Taborder: 1
      ]
    }
    Component bCreate
    {
      #keys: '[730572.0.167350289]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'ADD2'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Border: true
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Response_List920_mDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: List920
Response OnClick (
  APIRMS64ProductRelation selection
) id:Response_List920_mDelete_OnClick
{
  #keys: '[730572.0.167350349]'
  DefinitionID => /List920/Responsedef_List920_WebMenu_OnClick
  Initiator: 'mDelete'
  QuillAction
  {
    Body:
    [*
      selection.Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Response_pHeader_bCreate_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pHeader/bCreate
Response OnClick () id:Response_pHeader_bCreate_OnClick
{
  #keys: '[730572.0.167350572]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      InterfaceDataset.APIRMS64ProductRelation( relnew,
                                                Factory := ddslFactory.Text(),
                                                Product := ddslProduct.Text() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/Response_pHeader_ddslProduct_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pHeader/ddslProduct
Response OnCreated () id:Response_pHeader_ddslProduct_OnCreated
{
  #keys: '[730572.0.167390234]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      ids := selectuniquevalues( MacroPlan, Product_MP, tempPMP, tempPMP.IsLeaf(), tempPMP.ID() );
      this.Strings( ids.Concatenate( ";" ) );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAPIRMS64ProductRelation/_ROOT_Component_FormAPIRMS64ProductRelation.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormAPIRMS64ProductRelation
{
  #keys: '[730572.0.166101908]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pHeader
    #child: pContent
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormActualDailyProduction/Component_ListActualDailyProduction.def
@@ -11,7 +11,7 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'external[Archive]'
        DataType: 'Archive'
        Source: 'Archive'
        Taborder: 0
        Transformation: 'ActualDailyProductionData'
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable#384.def
@@ -17,10 +17,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            Source: 'InterfaceDataset'
            DataType: 'structured[AssemblyOnlinePlanVersionRow]'
            Source: 'dhRows'
            Taborder: 0
            Transformation: 'AssemblyOnlinePlanVersion.Row.Cell'
            Transformation: 'Elements.Cell'
          ]
        }
      ]
@@ -44,12 +44,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
            FixedFilter: '( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.ProductionLine() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
            Source: 'InterfaceDataset'
            DataType: 'structured[AssemblyOnlinePlanVersionRow]'
            Source: 'dhRows'
            Taborder: 0
            Transformation: 'AssemblyOnlinePlanVersion.Row'
            Transformation: 'Elements'
          ]
        }
      ]
@@ -72,13 +70,13 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            DataType: 'structured[AssemblyOnlinePlanVersionRow]'
            Description: '( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
            FixedFilter: 'object.Filter( search )'
            Source: 'InterfaceDataset'
            Source: 'dhRows'
            Taborder: 0
            Transformation: 'AssemblyOnlinePlanVersion.Column'
            Transformation: 'Elements.Cell.Column'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelTable#273.def
@@ -6,6 +6,33 @@
  Children:
  [
    #child: MatrixEditorTable_384
    Component dhRows
    {
      #keys: '[730572.0.144480758]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[AssemblyOnlinePlanVersionRow]*'
      Children:
      [
        Component deRows
        {
          #keys: '[730572.0.144480804]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
            FixedFilter: 'not object.Version().IsShow() and ( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.ProductionLine() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
            Source: 'InterfaceDataset'
            Taborder: 0
            Transformation: 'AssemblyOnlinePlanVersion.Row'
          ]
        }
      ]
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormInventoryInterfaceData/Response_pHeader_bFilter_OnClick.def
@@ -9,6 +9,9 @@
  {
    Body:
    [*
      // æ›´æ–°åº“å­˜
      InventoryInterfaceData::UpdateInventoryQuantity( InterfaceDataset, dsStart.Date(), dsEnd.Date() );
      dhStartDate.Data( dsStart.Date().Format( "YM2D2" ) )
      dhEndDate.Data( dsEnd.Date().Format( "YM2D2" ) );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable#791.def
@@ -17,10 +17,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            Source: 'InterfaceDataset'
            DataType: 'structured[InventoryPlanArchiveRow]'
            Source: 'dhRows'
            Taborder: 0
            Transformation: 'InventoryPlanArchiveVersion.Row.Cell'
            Transformation: 'Elements.Cell'
          ]
        }
      ]
@@ -44,12 +44,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
            FixedFilter: '( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.Unit() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
            Source: 'InterfaceDataset'
            DataType: 'structured[InventoryPlanArchiveRow]'
            Source: 'dhRows'
            Taborder: 0
            Transformation: 'InventoryPlanArchiveVersion.Row'
            Transformation: 'Elements'
          ]
        }
      ]
@@ -72,13 +70,13 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            DataType: 'structured[InventoryPlanArchiveRow]'
            Description: '( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
            FilterArguments: 'search:QMacroPlanner::FormInventoryPlanArchive.dhSearch'
            FixedFilter: 'object.Filter( search )'
            Source: 'InterfaceDataset'
            Source: 'dhRows'
            Taborder: 0
            Transformation: 'InventoryPlanArchiveVersion.Column'
            Transformation: 'Elements.Cell.Column'
          ]
        }
      ]
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelPeriod#71.def
@@ -26,6 +26,17 @@
        Taborder: 1
      ]
    }
    Component bSynchronizeActualInventory
    {
      #keys: '[730572.0.167441650]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '同步实际库存'
        Taborder: 2
        Visible: false
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable#881.def
@@ -6,6 +6,33 @@
  Children:
  [
    #child: MatrixEditorTable_791
    Component dhRows
    {
      #keys: '[730572.0.172650978]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[InventoryPlanArchiveRow]*'
      Children:
      [
        Component deRows
        {
          #keys: '[730572.0.172651057]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
            FixedFilter: 'not object.Version().IsShow() and ( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.Unit() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
            Source: 'InterfaceDataset'
            Taborder: 0
            Transformation: 'InventoryPlanArchiveVersion.Row'
          ]
        }
      ]
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_71_bSynchronizeActualInventory_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelPeriod_71/bSynchronizeActualInventory
Response OnClick () id:Response_PanelPeriod_71_bSynchronizeActualInventory_OnClick
{
  #keys: '[730572.0.167291731]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      InventoryPlanArchiveCell::SynchronizeActualInventory( InterfaceDataset, Archive );
      WebMessageBox::Success( Translations::A_VWED_Success(), true );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInventoryPointSelection/Component_ListInventoryPointSelection.def
@@ -29,7 +29,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsIncluded","title":"ImgIsIncluded","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsIncluded"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"InventoryPoint","title":"InventoryPoint","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"InventoryPoint"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockpoingPoint","title":"StockpoingPoint","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockpoingPoint"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Fac","title":"Fac","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Fac"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Dtype","title":"Dtype","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Dtype"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsIncluded","title":"ImgIsIncluded","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsIncluded"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"InventoryPoint","title":"InventoryPoint","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"InventoryPoint"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockpoingPoint","title":"StockingPoint","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockpoingPoint"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Fac","title":"Fac","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Fac"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Dtype","title":"Dtype","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Dtype"}}]'
        ContextMenu: 'listContextMenuInventoryPointSelection'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Component_pHeader#136.def
@@ -35,6 +35,16 @@
        Taborder: 0
      ]
    }
    Component bDetectingNegativeValues id:bDetectingNegativeValues_791
    {
      #keys: '[730572.0.159950553]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Detecting negative values'
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_pHeader_136_bDetectingNegativeValues_OnClick#812.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pHeader_136/bDetectingNegativeValues_791
Response OnClick () id:Response_pHeader_bDetectingNegativeValues_OnClick_812
{
  #keys: '[730572.0.159950552]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      res := NewAssemblyOnlinePlanCell::DetectingNegativeValues( MacroPlan );
      WebMessageBox::Success( res, true );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pHeader.def
@@ -75,6 +75,16 @@
        Taborder: 6
      ]
    }
    Component bDetectingNegativeValues
    {
      #keys: '[730572.0.159670034]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Detecting negative values'
        Taborder: 7
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bDetectingNegativeValues_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pHeader/bDetectingNegativeValues
Response OnClick () id:Response_pHeader_bDetectingNegativeValues_OnClick
{
  #keys: '[730572.0.159870568]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      res := NewOfflinePlanCell::DetectingNegativeValues( MacroPlan );
      WebMessageBox::Success( res, true );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelPeriod.def
@@ -26,6 +26,17 @@
        Taborder: 1
      ]
    }
    Component ButtonPeriod
    {
      #keys: '[730572.0.144413017]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'ARROW_CIRCLE2'
        Label: '同步实际产量'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def
@@ -21,7 +21,7 @@
          [
            DataType: 'InterfaceDataset'
            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
            FixedFilter: '( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.ProductionLine() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
            FixedFilter: 'not object.Version().IsShow() and ( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.ProductionLine() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
            Source: 'InterfaceDataset'
            Taborder: 0
            Transformation: 'OfflinePlanArchiveVersion.Row'
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_ButtonPeriod_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelPeriod/ButtonPeriod
Response OnClick () id:Response_PanelPeriod_ButtonPeriod_OnClick
{
  #keys: '[730572.0.156334897]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      OfflinePlanArchiveCell::SynchronizeActualProduction( InterfaceDataset, Archive );
      WebMessageBox::Success( Translations::A_VWED_Success() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormSAP_PIR/Response_List391_bPush_OnClick.def
@@ -12,7 +12,7 @@
  {
    Body:
    [*
      AOnlineAndMOfflinePlanPIR::Publish( InterfaceDataset, selection.InterfaceLoginfo() );
      //AOnlineAndMOfflinePlanPIR::Publish( InterfaceDataset, selection.InterfaceLoginfo() );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Component_pHeader.def
@@ -35,6 +35,16 @@
        Taborder: 2
      ]
    }
    Component bWriteBackTheTransferPlan
    {
      #keys: '[730572.0.154074820]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Write back'
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bWriteBackTheTransferPlan_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: pHeader/bWriteBackTheTransferPlan
Response OnClick () id:Response_pHeader_bWriteBackTheTransferPlan_OnClick
{
  #keys: '[730572.0.154074898]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      TransferPlanCell::WriteBackTheTransferPlan( MacroPlan, DataHolderCheckedProduct.Data() );
      WebMessageBox::Success( Translations::A_VWED_Success() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Views/APIMS64ProductRelation.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,307 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormAPIRMS64ProductRelation
      {
        title: 'QMacroPlanner::FormAPIRMS64ProductRelation'
        shown: true
        componentID: 'QMacroPlanner::FormAPIRMS64ProductRelation'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 13
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormAPIRMS64ProductRelation_pHeader
          {
            sizeRatio: 1
          }
          FormAPIRMS64ProductRelation_pContent
          {
            sizeRatio: 1
          }
          FormAPIRMS64ProductRelation_List920
          {
          }
          FormAPIRMS64ProductRelation_DataSetLevel195
          {
            groupDepth: -1
            column_Factory
            {
              columnId: 'Factory'
              dataPath: 'Factory'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 252
            }
            column_Product
            {
              columnId: 'Product'
              dataPath: 'Product'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 239
            }
          }
        }
      }
      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: 'Name'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: 'Description'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormSanityCheck
      {
        title: 'Sanity Check'
        shown: false
        componentID: 'FormSanityCheck'
        layout
        {
          mode: 'dockright'
          index: 1
        }
        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: 31
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 31
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 31
            }
            column_Group
            {
              columnId: 'Group'
              dataPath: 'Group'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 235
            }
            column__Expr3
            {
              columnId: '_Expr3'
              dataPath: '_Expr3'
              dataType: 'number'
              index: 4
              subtotals: ''
              width: 85
            }
          }
          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: 31
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 31
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 31
            }
            column_Messages
            {
              columnId: 'Messages'
              dataPath: 'Messages'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 31
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 505
            }
          }
        }
      }
      form_FormOptimizerStrategiesSlideIn
      {
        title: 'Optimizer Strategies'
        shown: true
        componentID: 'FormOptimizerStrategiesSlideIn'
        layout
        {
          mode: 'dockright'
          index: 2
        }
        components
        {
          FormOptimizerStrategiesSlideIn_ListOptimizerStrategiesSlideIn
          {
          }
          FormOptimizerStrategiesSlideIn_DataSetLevelOptimizerStrategiesSlideIn
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_ImgIsValid
            {
              columnId: 'ImgIsValid'
              dataPath: 'ImgIsValid'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 270
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 0
    image: 'BEAR'
    description: ''
  }
  formatversion: 2
  id: 'APIMS64ProductRelation'
  name: 'APIMS64ProductRelation'
  isglobal: false
  isroot: true
}
_Main/UI/MacroPlannerWebApp/Views/Inventory_plan_archive_report.vw
@@ -23,11 +23,19 @@
          {
            sizeRatio: 1
          }
          FormInventoryPlanArchive_PanelRowSearch
          {
            sizeRatio: 1
          }
          FormInventoryPlanArchive_PanelUnit
          {
            sizeRatio: 1
          }
          FormInventoryPlanArchive_PanelProduct
          {
            sizeRatio: 1
          }
          FormInventoryPlanArchive_PanelColumnSearch
          {
            sizeRatio: 1
          }
@@ -49,13 +57,56 @@
          }
          FormInventoryPlanArchive_MatrixEditorTable
          {
            totalHeaderWidth: 200
            gridColor: '#c4c4c4'
            totalHeaderWidth: 378
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            gridColor: '#c4c4c4'
            backendState
            {
              componentId: 'QMacroPlanner::FormInventoryPlanArchive.MatrixEditorTable'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_PlanQuantity
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'PlanQuantity'
                    }
                    attribute_ActualQuantity
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 1
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'ActualQuantity'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'StartDate'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'Name'"
                  }
                }
              }
            }
          }
        }
      }
@@ -65,7 +116,7 @@
    }
    page: ''
    group: ''
    index: 31
    index: 0
    image: 'WAREHOUSE'
    description: ''
  }