From 17dc904834ee19f0e57db374aaadea932acdaf00 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期一, 01 七月 2024 14:43:05 +0800
Subject: [PATCH] 财务销量报表

---
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def                                         |   16 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl                                                                               |   10 
 _Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl                                                                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def             |   22 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB#603.def                                                         |   24 +
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl                                                                                           |    4 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl                                                                                       |  131 +++--
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl                                                                        |   10 
 _Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def             |   47 ++
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def                            |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit#715.def                                                           |   24 +
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl                                                                                   |    2 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def                                     |   23 +
 _Main/BL/Type_FinancialSalesReport/Method_Generate.qbl                                                                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def                              |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def                                |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration#844.def                                                     |   24 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def                                                                |   24 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def                                                     |   11 
 _Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl                                                                                            |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport#545.def                                                         |   24 +
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw                                                                                     |  120 ++++++
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCRent.qbl                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def                                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def |    2 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl                                                                                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable#1.def                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def                                         |   19 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable#1.def                                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def                                         |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def                                     |   23 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def       |   16 
 _Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl                                                                                                 |   23 +
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl                                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def                                      |   46 ++
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable#623.def                                                   |   97 +++++
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def                                          |    7 
 _var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__[124808.0.140900041].vw                                                     |    2 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl                                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def                                       |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower#858.def                                                          |   24 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def                             |   23 +
 /dev/null                                                                                                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def                    |   20 +
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl                                                                                         |   12 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl                                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable#424.def                                                          |   14 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl                                                                                |   11 
 51 files changed, 999 insertions(+), 82 deletions(-)

diff --git a/_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl
index ac423a9..4bb9678 100644
--- a/_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl
+++ b/_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl
@@ -16,7 +16,7 @@
   RelationSide.RightSide FinancialSalesSearch
   {
     #keys: '3[415136.0.857450523][415136.0.857450522][415136.0.857450524]'
-    Cardinality: '1toN'
+    Cardinality: '0to1'
     ObjectDefinition: FinancialSalesSource
     OwningSide: 'Owned'
   }
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
index 1c7bb7b..767f175 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method Generate (
-  FinancialProductionSearch search,
+  FinancialSalesSearch search,
   Product_MPs products
 )
 {
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
new file mode 100644
index 0000000..a656035
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetRow (
+  String salessegment,
+  String product,
+  DateTime startdate,
+  DateTime enddate
+) as FinancialSalesRow
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    row := selectobject( this, FinancialSalesRow, row, row.Name() = product and row.Unit() = salessegment );
+    
+    if( isnull( row ) ){
+      row := this.FinancialSalesRow( relnew, Name := product, Unit := salessegment );
+      //鍒濆鍖栧崟鍏冩牸
+      row.InitializeCell( this, startdate, enddate );
+    }
+    
+    return row;
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultAllUnit.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultAllUnit.qbl
deleted file mode 100644
index e912c3f..0000000
--- a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultAllUnit.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetDefaultAllUnit () const declarative as String
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jun-25-2024 (created)
-    return '<All>';
-  *]
-}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultCCUnit.qbl
deleted file mode 100644
index e469589..0000000
--- a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultCCUnit.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetDefaultCCUnit () const as String
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jun-25-2024 (created)
-    return '闀挎槬';
-  *]
-}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultDLUnit.qbl
deleted file mode 100644
index 71132d4..0000000
--- a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultDLUnit.qbl
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GetDefaultDLUnit () const as String
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jun-25-2024 (created)
-    return '澶ц繛';
-  *]
-}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl
index 99eb092..14fdc56 100644
--- a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl
@@ -5,6 +5,6 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return 'Financial productions';
+    return 'Financial sales';
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl
new file mode 100644
index 0000000..356d9fd
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultTripLeadingTime () as Duration
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return Duration::Days( 2 );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl
new file mode 100644
index 0000000..4163b5e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentAll () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '<All>';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl
new file mode 100644
index 0000000..05eb2ce
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentCC () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬';
+    //return 'China';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl
new file mode 100644
index 0000000..062b883
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentDL () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶ц繛';
+    //return 'Foregin';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl
new file mode 100644
index 0000000..70e1ce3
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentFS () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '浣涘北';
+    //return 'Germany';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl
new file mode 100644
index 0000000..7ad4f41
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentTJ () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶╂触';
+    //return 'USA';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl
new file mode 100644
index 0000000..a57ce47
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointCCLine () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬瑁呴厤绾胯竟搴�';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCRent.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCRent.qbl
new file mode 100644
index 0000000..d1d47c2
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCRent.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointCCRent () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬澶栫搴�';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl
new file mode 100644
index 0000000..7f89636
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointDLLine () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶ц繛瑁呴厤绾胯竟搴�';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl
index 5581869..dd0f3b8 100644
--- a/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Method Initialize0 (
+Method Initialize (
   FinancialSalesColumn column,
   Real quantity
 )
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
new file mode 100644
index 0000000..0ef49d7
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method InitializeCell (
+  FinancialSalesReport table,
+  DateTime startdate,
+  DateTime enddate
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    for( start := startdate; start < enddate; start := start.StartOfNextMonth() ){
+      periodtime := start.Date();
+      periodname := periodtime.Format( "M2/D2/Y" );
+      column := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
+      
+      this.Initialize( column, this.Unit() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
index 87f56b0..6fe5b7f 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
@@ -8,7 +8,7 @@
   TextBody:
   [*
     
-    table := selectobject( macroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
+    table := selectobject( macroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
     
     xmlDOMI := XMLDOMImplementation::Create();
     xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
@@ -33,7 +33,7 @@
     
     tableElement.AppendChild( productcolumnelement ); 
     tableElement.AppendChild( unitcolumnelement ); 
-    traverse ( table, FinancialProductionColumn, column ) {
+    traverse ( table, FinancialSalesColumn, column ) {
       columnelement := xmlDOM.CreateElement( "column" );
       nameelement   := xmlDOM.CreateElement( "name" );
       typeelement   := xmlDOM.CreateElement( "type" );
@@ -42,11 +42,11 @@
       columnelement.AppendChild( nameelement );
       columnelement.AppendChild( typeelement );
       
-      cells := selectsortedset( column, FinancialProductionCell, cell, cell.FinancialProductionRow().RowNr() );
+      cells := selectsortedset( column, FinancialSalesCell, cell, cell.FinancialSalesRow().RowNr() );
     
       traverse ( cells, Elements, c ) {
         if( column.Index() = 0 ){
-          row := c.FinancialProductionRow();
+          row := c.FinancialSalesRow();
           //Product
           productcellElement := xmlDOM.CreateElement( "cell" );
           productcellElement.SetAttribute( "value", row.Name() );
@@ -63,11 +63,11 @@
       tableElement.AppendChild( columnelement );  
     }
     
-    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
     
     //info( xmlString );
     
-    tableGroupHandle := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
+    tableGroupHandle := TableGroupHandle::Create( FinancialSalesReport::GetDefaultName() );
     tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
     
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl
index 10e878b..a47c88a 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl
@@ -29,7 +29,7 @@
     
     //info( xmlString );
     
-    tableGroupHandle := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
+    tableGroupHandle := TableGroupHandle::Create( FinancialSalesReport::GetDefaultName() );
     tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
     
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
index 7a5ef26..8f63f1f 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -4,77 +4,96 @@
   MacroPlan owner
 )
 {
+  Description: '鍒濆鍖�'
   TextBody:
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
-    owner.FinancialProductionSource( relflush );
-    ccunit                    := FinancialProductionReport::GetDefaultCCUnit();
-    dlunit                    := FinancialProductionReport::GetDefaultDLUnit();
-    allunit                   := FinancialProductionReport::GetDefaultAllUnit();
-    source                    := owner.FinancialProductionSource( relnew, IsImport := false, Name := FinancialProductionReport::GetDefaultName() );
-    table                     := source.FinancialProductionReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
-    showtable                 := source.FinancialProductionReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
+    owner.FinancialSalesSource( relflush );
+    products                  := construct( Product_MPs );
+    allsalessegment           := FinancialSalesReport::GetSalesSegmentAll();
+    ccsalessegment            := FinancialSalesReport::GetSalesSegmentCC();
+    dlsalessegment            := FinancialSalesReport::GetSalesSegmentDL();
+    tjsalessegment            := FinancialSalesReport::GetSalesSegmentTJ();
+    fssalessegment            := FinancialSalesReport::GetSalesSegmentFS();
+    ccspline                  := FinancialSalesReport::GetStockingPointCCLine();
+    dlspline                  := FinancialSalesReport::GetStockingPointDLLine();
+    ccrent                    := FinancialSalesReport::GetStockingPointCCRent();
+    
+    source                    := owner.FinancialSalesSource( relnew, IsImport := false, Name := FinancialSalesReport::GetDefaultName() );
+    table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
+    showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
     startofplanning           := owner.StartOfPlanning();
-    startofnextmonth          := owner.StartOfPlanning().StartOfNextMonth();
     startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    search                    := source.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
-    
-    products                  := construct( Product_MPs );
+    search                    := source.FinancialSalesSearch( relnew, Unit := allsalessegment, Generation := allsalessegment, MqbMlb := allsalessegment, Power := allsalessegment );
     
     table.GenerateColumn( owner );
     
-    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){
-      unit := pisp.StockingPoint_MP().UnitID();
-      info( unit, pisp.ProductID() );
-      ccrow := null( FinancialProductionRow );
-      dlrow := null( FinancialProductionRow );
-      allrow := selectobject( table, FinancialProductionRow, row, row.Name() = pisp.ProductID() and row.Unit() = allunit );
-      if( unit = ccunit ){
-        ccrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit );
-      }else{
-        dlrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit );
-      }
-      if( isnull( allrow ) ){
-        products.Add( pisp.Product_MP() );
-        allrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := allunit );
-      }
+    //浠嶧orecast鏌ヨ
+    traverse( owner, SalesDemand.astype( Forecast ), forecast, forecast.StartDate() < startofnextyear.Date() and ( ( forecast.SalesSegmentName() = ccsalessegment and forecast.Product_MP().MQBMLB() = 'MLB' ) 
+              or forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ) ){
+      product    := forecast.Product_MP();
+      allrow     := table.GetRow( allsalessegment, product.ID(), startofyear, startofnextyear );
+      periodtime := forecast.StartDate().StartOfMonth();
+      periodname := periodtime.Format( "M2/D2/Y" );
       
-      for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
-        periodtime := start.Date();
-        periodname := periodtime.Format( "M2/D2/Y" );
-        column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
-        
-        if( not isnull( ccrow ) ){
-          ccrow.Initialize( column, ccunit );
-        }
-        if( not isnull( dlrow ) ){
-          dlrow.Initialize( column, dlunit );
-        }
-        if( not exists( allrow, FinancialProductionCell, allcell, allcell.FinancialProductionColumn() = column ) ){
-          allrow.Initialize( column, allunit );
-        }
+      if( products.Find( product ) < 0 ){
+        products.Add( product );
       }
-      
-      traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning
-                and ( ( pispip.Start() < startofnextmonth and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() ) 
-                      or ( pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ) ) ){
-        periodtime := pispip.Start().StartOfMonth().Date();
-        periodname := periodtime.Format( "M2/D2/Y" );
-        
-        column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
-        
-        if( not isnull( ccrow ) ){
-          ccrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
+    //  info( '------------------------', periodname, periodtime );
+      column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
+    //  info( '------------------------', column.Name() );
+      //Forecast鐨凷ales Segment涓洪暱鏄ワ紝璇嗗埆鍑篗LB鐨勬墍鏈変骇鍝佹眹鎬�
+      if( forecast.SalesSegmentName() = ccsalessegment and product.MQBMLB() = 'MLB' ){
+    //    info( '------------------------', column.Name() );
+        ccrow := table.GetRow( ccsalessegment, product.ID(), startofyear, startofnextyear );
+    //    info( '------------------------', ccrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
+        ccrow.Initialize( column, forecast.Quantity() );
+      }else if( forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ){
+        //澶ц繛璐㈠姟閿�閲忥細棣栧厛鍦╢orecast鐣岄潰鏌ユ壘Sales Segment鏄ぉ娲ュ拰浣涘北鐨勬墍鏈夐渶姹傦紝姣忎釜浜у搧鎸夋湀姹囨�婚渶姹傛暟閲�
+    //    info( '------------------------', column.Name() );
+        dlrow := table.GetRow( dlsalessegment, product.ID(), startofyear, startofnextyear );
+    //    info( '------------------------', dlrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
+        dlrow.Initialize( column, forecast.Quantity() );
+      }
+      allrow.Initialize( column, forecast.Quantity() );
+    }
+    //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴撶殑鎵�鏈塎QB浜у搧锛屽彇Total Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+    traverse( owner, Product_MP, product, product.IsLeaf() and product.MQBMLB() = 'MQB' ){//浜у搧涓篗QB
+      traverse( product, ProductInStockingPoint_MP, pisp, pisp.StockingPointID() = ccspline ){//搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴�
+        traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning
+                and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ){
+          periodtime := pispip.Start().StartOfMonth().Date();
+          periodname := periodtime.Format( "M2/D2/Y" );
+          column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
+          ccrow := table.GetRow( ccsalessegment, product.ID(), startofyear, startofnextyear );
+          ccrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+          
+          allrow     := table.GetRow( allsalessegment, product.ID(), startofyear, startofnextyear );
+          allrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );
         }
-        if( not isnull( dlrow ) ){
-          dlrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
-        }
-        allrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
       }
     }
-    rows := selectsortedset( table, FinancialProductionRow, row, row.Name() );
+    startofnextyearlead       := startofplanning.StartOfNextYear() + FinancialSalesReport::GetDefaultTripLeadingTime();
+    //澶ц繛璐㈠姟閿�閲忥細闀挎槬鐨勯渶姹傞渶瑕佸湪trip plan閲岄潰鎵惧埌璧峰搴撳瓨鐐逛负澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撶殑浜у搧锛岀敱浜庨渶瑕佽�冭檻浜у搧杩愯緭lead time锛屾瘡涓湀鐨勬眹鎬绘暟鎹渶瑕佹帹杩熶袱澶╄繘琛岃绠�
+    traverse( owner, Unit.Lane.LaneLeg, laneleg, laneleg.OriginStockingPointID() = dlspline and laneleg.DestinationStockingPointID() = ccrent ){
+      traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead ){
+        periodtime := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date();
+        periodname := periodtime.Format( "M2/D2/Y" );
+        
+        column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
+        traverse( trip, ProductInTrip, pit ){
+          dlrow      := table.GetRow( dlsalessegment, pit.ProductID(), startofyear, startofnextyear );
+          dlrow.Initialize( column, pit.Quantity() );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+          
+          allrow     := table.GetRow( allsalessegment, pit.ProductID(), startofyear, startofnextyear );
+          allrow.Initialize( column, pit.Quantity() );
+        }
+      }
+    }
+    
+    rows := selectsortedset( table, FinancialSalesRow, row, row.Name() );
     i    := 0;
     traverse( rows, Elements, e ){
       e.RowNr( i );
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl
index 2e3f777..df950f0 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl
@@ -4,13 +4,13 @@
   MacroPlan owner,
   BinaryValue binaryValue,
   String filePath
-) as FinancialProductionSource
+) as FinancialSalesSource
 {
   TextBody:
   [*
     fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
     
-    source := owner.FinancialProductionSource( relnew, FileBinaryValue := binaryValue,
+    source := owner.FinancialSalesSource( relnew, FileBinaryValue := binaryValue,
                                                Name                    := fileName,
                                                IsXLSX                  := fileName.EndsWith( "xlsx" ),
                                                IsImport                := true,
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
index 10df23f..cfc3cee 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -16,6 +16,17 @@
         Taborder: 0
       ]
     }
+    Component ButtonFinancialSalesReport
+    {
+      #keys: '[415136.0.861863635]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'MONEY_COINS2'
+        Label: 'Financial sales report'
+        Taborder: 1
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def
new file mode 100644
index 0000000..117f477
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/ButtonFinancialSalesReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClick
+{
+  #keys: '[415136.0.861863801]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Financial_sales_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
index 13d7fd4..9b9d0c5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
@@ -15,7 +15,7 @@
     [*
       binaryValue := FinancialProductionSource::Download( MacroPlan );
       
-      Application.Download( "Financial productions.xlsx", binaryValue.AsBinaryData() );
+      Application.Download( FinancialProductionReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
index 176b03b..3749d2c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
@@ -15,7 +15,7 @@
     [*
       binaryValue := FinancialProductionSource::DownloadTemplate( MacroPlan );
       
-      Application.Download( "Financial productions.xlsx", binaryValue.AsBinaryData() );
+      Application.Download( FinancialProductionReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def"
new file mode 100644
index 0000000..9a203ad
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def"
@@ -0,0 +1,97 @@
+Quintiq file version 2.0
+Component MatrixEditorTable id:MatrixEditorTable_623
+{
+  #keys: '[415136.0.858621867]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.858621868]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCell
+        {
+          #keys: '[415136.0.858621869]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'FinancialSalesReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'FinancialSalesColumn.FinancialSalesCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'Value'
+        Column: 'FinancialSalesColumn'
+        Row: 'FinancialSalesRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.858621870]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRow
+        {
+          #keys: '[415136.0.858621871]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'FinancialSalesReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'FinancialSalesRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'RowNr'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.858621872]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumn
+        {
+          #keys: '[415136.0.858621873]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'FinancialSalesReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'FinancialSalesColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable_1
+    #child: matrixeditorContextMenuTable_1
+  ]
+  Properties:
+  [
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
new file mode 100644
index 0000000..78299c1
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelExport id:PanelExport_545
+{
+  #keys: '[415136.0.858621784]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonExport
+    {
+      #keys: '[415136.0.858621785]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def
new file mode 100644
index 0000000..c5804ea
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelFinancialSalesReportHeader
+{
+  #keys: '[415136.0.858621774]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelFinancialSalesReportSearch
+    #child: PanelFinancialSalesReportOperation
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def
new file mode 100644
index 0000000..5a9bec8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component PanelFinancialSalesReportOperation
+{
+  #keys: '[415136.0.858621786]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelFinancialSalesReportOperation
+    {
+      #keys: '[415136.0.858621787]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        NumberOfColumns: 15
+        Taborder: 0
+        Text: 'Sales import'
+      ]
+    }
+    Component ButtonSalesImport
+    {
+      #keys: '[415136.0.858621788]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSalesExport
+    {
+      #keys: '[415136.0.858621789]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def
new file mode 100644
index 0000000..d6ff179
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component PanelFinancialSalesReportSearch
+{
+  #keys: '[415136.0.858621775]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelUnit_715
+    #child: PanelGeneration_844
+    #child: PanelMQBMLB_603
+    #child: PanelPower_858
+    #child: PanelExport_545
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def"
new file mode 100644
index 0000000..ab48548
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelGeneration id:PanelGeneration_844
+{
+  #keys: '[415136.0.858621778]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslGeneration
+    {
+      #keys: '[415136.0.858621779]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Generation'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def"
new file mode 100644
index 0000000..37da59e
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMQBMLB id:PanelMQBMLB_603
+{
+  #keys: '[415136.0.858621780]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslMQBMLB
+    {
+      #keys: '[415136.0.858621781]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def"
new file mode 100644
index 0000000..e41599f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelPower id:PanelPower_858
+{
+  #keys: '[415136.0.858621782]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslPower
+    {
+      #keys: '[415136.0.858621783]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Power'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def"
new file mode 100644
index 0000000..b9632a5
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable id:PanelTable_424
+{
+  #keys: '[415136.0.858621866]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable_623
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def"
new file mode 100644
index 0000000..2d6d002
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelUnit id:PanelUnit_715
+{
+  #keys: '[415136.0.858621776]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslUnit
+    {
+      #keys: '[415136.0.858621777]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Unit'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def"
new file mode 100644
index 0000000..1023bac
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable id:matrixEditorActionBarPageTable_1
+{
+  #keys: '[415136.0.858621874]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def"
new file mode 100644
index 0000000..71dfdc9
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable id:matrixeditorContextMenuTable_1
+{
+  #keys: '[415136.0.858621875]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
new file mode 100644
index 0000000..533640c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormFinancialSalesReport_OnCreated
+{
+  #keys: '[415136.0.858683122]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
+        FinancialSalesSource::Initialize( MacroPlan );
+      }
+      //info( '------------------1----------------' );
+      table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
+      info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( table.FinancialSalesSource().FinancialSalesSearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def
new file mode 100644
index 0000000..aa945e3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelExport_545/ButtonExport
+Response OnClick () id:Response_PanelExport_545_ButtonExport_OnClick
+{
+  #keys: '[415136.0.858621765]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := FinancialSalesSource::Download( MacroPlan );
+      
+      Application.Download( FinancialSalesReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+      //owner.FinancialSalesSource( relflush );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def
new file mode 100644
index 0000000..7eea40f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelFinancialSalesReportOperation/ButtonSalesExport
+Response OnClick () id:Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick
+{
+  #keys: '[415136.0.858621763]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := FinancialSalesSource::DownloadTemplate( MacroPlan );
+      
+      Application.Download( FinancialSalesReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def
new file mode 100644
index 0000000..99db221
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+#parent: PanelFinancialSalesReportOperation/ButtonSalesImport
+Response OnClick () id:Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick
+{
+  #keys: '[415136.0.858621764]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          source := FinancialSalesSource::Upload( MacroPlan, webFileBinaryData, fileName );
+          source.ReadStructure();
+          //濡傛灉瀛樺湪璁″垝寮�濮嬪悗鐨勬棩鏈熸暟鎹渶瑕佺偣鍑荤‘璁�
+          if( not source.IsExistFutureMonthData() or 
+              ( source.IsExistFutureMonthData() and WebMessageBox::Question( this, Translations::MP_FinancialProductionReport_Question(), 'Yes|No' ) = 0 ) ){
+             source.AfterImport();
+             DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+          }
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+          traverse( MacroPlan, FinancialSalesSource, psource, psource.IsImport() and psource <> source ){
+            psource.Delete();
+          }
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..e0e4fcd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelGeneration_844/ddslGeneration
+Response OnCreated () id:Response_PanelGeneration_844_ddslGeneration_OnCreated
+{
+  #keys: '[415136.0.858621771]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
new file mode 100644
index 0000000..6c500d5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelGeneration_844/ddslGeneration
+Response OnSelectionChanged () id:Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged
+{
+  #keys: '[415136.0.858621770]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //浠f暟鏀瑰彉鍚庡埛鏂版樉绀�
+      if( dhSearch.Data().Generation() <> selection ){
+        dhSearch.Data().Generation( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..f86feef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB_603/ddslMQBMLB
+Response OnCreated () id:Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated
+{
+  #keys: '[415136.0.858621769]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.MQBMLB() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
new file mode 100644
index 0000000..1fd2082
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB_603/ddslMQBMLB
+Response OnSelectionChanged () id:Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged
+{
+  #keys: '[415136.0.858621768]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //妯旱鍒舵敼鍙樺悗鍒锋柊鏄剧ず
+      if( dhSearch.Data().MqbMlb() <> selection ){
+        dhSearch.Data().MqbMlb( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def
new file mode 100644
index 0000000..6f642a4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelPower_858/ddslPower
+Response OnCreated () id:Response_PanelPower_858_ddslPower_OnCreated
+{
+  #keys: '[415136.0.858621767]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Power() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
new file mode 100644
index 0000000..45a6525
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelPower_858/ddslPower
+Response OnSelectionChanged () id:Response_PanelPower_858_ddslPower_OnSelectionChanged
+{
+  #keys: '[415136.0.858621766]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍔熺巼鏀瑰彉鍚庡埛鏂版樉绀�
+      if( dhSearch.Data().Power() <> selection ){
+        dhSearch.Data().Power( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
new file mode 100644
index 0000000..5a4d8e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelUnit_715/ddslUnit
+Response OnCreated () id:Response_PanelUnit_715_ddslUnit_OnCreated
+{
+  #keys: '[415136.0.858621773]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      
+      valueString := "<All>;" + FinancialProductionReport::GetDefaultCCUnit() + ";" + FinancialProductionReport::GetDefaultDLUnit();
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
new file mode 100644
index 0000000..3d59900
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelUnit_715/ddslUnit
+Response OnSelectionChanged () id:Response_PanelUnit_715_ddslUnit_OnSelectionChanged
+{
+  #keys: '[415136.0.858621772]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //Unit鏇存柊鍚庣敓鎴愭柊鐨勬樉绀�
+      if( dhSearch.Data().Unit() <> selection ){
+        dhSearch.Data().Unit( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
index 1819247..248b71f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
@@ -27,5 +27,12 @@
         Taborder: 1
       ]
     }
+    #child: PanelTable_424
+    #child: PanelFinancialSalesReportHeader
+  ]
+  Properties:
+  [
+    Image: 'MONEY_COINS2'
+    Title: 'Financial sales report'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw
new file mode 100644
index 0000000..e5dcb48
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw
@@ -0,0 +1,120 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormFinancialSalesReport
+      {
+        title: 'QMacroPlanner::FormFinancialSalesReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormFinancialSalesReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormFinancialSalesReport_PanelFinancialSalesReportHeader
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelFinancialSalesReportSearch
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelUnit
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelGeneration
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelMQBMLB
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelPower
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelFinancialSalesReportOperation
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormFinancialSalesReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Value
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Value'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 17
+    image: 'MONEY_COINS2'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Financial_sales_report_view'
+  name: 'Financial sales report view'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw" "b/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw"
index 1ffab78..582d5eb 100644
--- "a/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw"
+++ "b/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw"
@@ -16,7 +16,7 @@
   CREATIONUSER ''
   UPDATEDATETIME '2017-06-05T15:08:50'
   UPDATEUSER 'quintiq/dwe2'
-  LASTACCESSDATE '2020-03-25'
+  LASTACCESSDATE '2024-06-28'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS

--
Gitblit v1.9.3