From 3cf4ce0c94be1a8928ffe280429d6297583b3b8d Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期三, 07 八月 2024 17:23:30 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/BL/Type_MachineLogisticsCostReportRow/_ROOT_Type_MachineLogisticsCostReportRow.qbl                                                       |    9 
 _Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl                                                                                |   12 
 _Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl                                                                                   |   21 
 _Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl                                                                               |   17 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def |   16 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl                                                                           |    2 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl                                                                           |    2 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_StorageFeesForRentedWarehouses.qbl                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixeditorContextMenu253.def                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def             |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bMachineLogisticsCostReport_OnCli.def |   16 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnitPriceOfWoodenCrate.qbl                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                           |    2 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_QuantityOfWoodenCrates.qbl                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def                                                    |   10 
 _Main/BL/Type_MachineLogisticsCostReportCell/_ROOT_Type_MachineLogisticsCostReportCell.qbl                                                     |    9 
 _Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Factory.qbl                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw                                                                                   |  150 -----
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport#570.def                                                   |   10 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_OutboundExpensesForRentedWarehouses.qbl                                                 |    8 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl                                                                        |    2 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl                                                                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def                                               |   21 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnpackingCost.qbl                                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pHeader.def                                                     |   46 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def |   16 
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl                                                                           |    6 
 _Main/BL/Type_TransferPlanRow/Attribute_Category.qbl                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Response_pHeader_bRefresh_OnClick.def                                     |   20 
 _Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw                                                                            |  281 ++++++++++
 _Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Category.qbl                                                                             |    7 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_RentalWarehouseStorageFees.qbl                                                          |    8 
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl                                                                            |    6 
 _Main/UI/MacroPlannerWebApp/Views/MachineLogisticsCostReport.vw                                                                                |   89 +++
 _Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MacroPlan_MacroPlan_MachineLogisti.qbl                                            |   23 
 _Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl                                                                                |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick#648.def                           |   16 
 _Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MacroPlan_MacroPlan_MachineLogisticsC.qbl                                            |   23 
 _Main/BL/Type_MachineLogisticsCostReportColumn/_ROOT_Type_MachineLogisticsCostReportColumn.qbl                                                 |    9 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_WoodenCrateCost.qbl                                                                     |    8 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_Coefficient.qbl                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pContent.def                                                    |   14 
 _Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl                                                                                 |   81 +-
 _Main/BL/Type_MachineLogisticsCostReportColumn/Attribute_StartDate.qbl                                                                         |    7 
 _Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl                                                                              |    6 
 _Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl                                                                             |   75 ++
 _Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_MatrixEditor912.def                                             |   98 +++
 _Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MachineLogisticsCostReportCell_Mac.qbl                                            |   23 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl                                                                          |    2 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TotalCost.qbl                                                                           |    8 
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def                          |    2 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def                         |    2 
 _Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl                                                                                  |   17 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def                                          |   35 +
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_BufferPaperCost.qbl                                                                     |    8 
 /dev/null                                                                                                                                      |   16 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TransferCost.qbl                                                                        |    8 
 _Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl                                                                       |   85 +++
 _Main/BL/Type_MachineLogisticsCostReportCell/Function_CalcWoodenCrateCost.qbl                                                                  |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixEditorActionBarPage703.def                                |   10 
 _Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MachineLogisticsCostReportCell_Machin.qbl                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def                                |   16 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/_ROOT_Component_FormMachineLogisticsCostReport.def                        |   17 
 _var/_Main/ProjSettings/EditorTC/Views/班次时间分析_[413988.0.1367211460].vw                                                                         |    2 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_PackingCharges.qbl                                                                      |    8 
 _Main/BL/Type_MachineLogisticsCostReportCell/Attribute_EstimatedTotalCost.qbl                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def      |    2 
 71 files changed, 1,298 insertions(+), 261 deletions(-)

diff --git a/_Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MachineLogisticsCostReportCell_Mac.qbl b/_Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MachineLogisticsCostReportCell_Mac.qbl
new file mode 100644
index 0000000..c769dab
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MachineLogisticsCostReportCell_Mac.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachineLogisticsCostReportColumn_MachineLogisticsCostReportCell_MachineLogisticsCostReportCell_MachineLogisticsCostReportColumn
+{
+  #keys: '1[413988.0.1462991379]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MachineLogisticsCostReportCell
+  {
+    #keys: '3[413988.0.1462991381][413988.0.1462991380][413988.0.1462991382]'
+    Cardinality: '1toN'
+    ObjectDefinition: MachineLogisticsCostReportColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MachineLogisticsCostReportColumn
+  {
+    #keys: '3[413988.0.1462991384][413988.0.1462991383][413988.0.1462991385]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachineLogisticsCostReportCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MacroPlan_MacroPlan_MachineLogisti.qbl b/_Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MacroPlan_MacroPlan_MachineLogisti.qbl
new file mode 100644
index 0000000..9d4b3f3
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachineLogisticsCostReportColumn_MacroPlan_MacroPlan_MachineLogisti.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachineLogisticsCostReportColumn_MacroPlan_MacroPlan_MachineLogisticsCostReportColumn
+{
+  #keys: '1[413988.0.1462991394]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1462991396][413988.0.1462991395][413988.0.1462991397]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachineLogisticsCostReportColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MachineLogisticsCostReportColumn
+  {
+    #keys: '3[413988.0.1462991399][413988.0.1462991398][413988.0.1462991400]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MachineLogisticsCostReportCell_Machin.qbl b/_Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MachineLogisticsCostReportCell_Machin.qbl
new file mode 100644
index 0000000..b26be4e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MachineLogisticsCostReportCell_Machin.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachineLogisticsCostReportRow_MachineLogisticsCostReportCell_MachineLogisticsCostReportCell_MachineLogisticsCostReportRow
+{
+  #keys: '1[413988.0.1462991364]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MachineLogisticsCostReportCell
+  {
+    #keys: '3[413988.0.1462991366][413988.0.1462991365][413988.0.1462991367]'
+    Cardinality: '1toN'
+    ObjectDefinition: MachineLogisticsCostReportRow
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MachineLogisticsCostReportRow
+  {
+    #keys: '3[413988.0.1462991369][413988.0.1462991368][413988.0.1462991370]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachineLogisticsCostReportCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MacroPlan_MacroPlan_MachineLogisticsC.qbl b/_Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MacroPlan_MacroPlan_MachineLogisticsC.qbl
new file mode 100644
index 0000000..1e170fc
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachineLogisticsCostReportRow_MacroPlan_MacroPlan_MachineLogisticsC.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachineLogisticsCostReportRow_MacroPlan_MacroPlan_MachineLogisticsCostReportRow
+{
+  #keys: '1[413988.0.1462991349]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1462991351][413988.0.1462991350][413988.0.1462991352]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachineLogisticsCostReportRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MachineLogisticsCostReportRow
+  {
+    #keys: '3[413988.0.1462991354][413988.0.1462991353][413988.0.1462991355]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl b/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
index 1eba4c1..525a923 100644
--- a/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
@@ -11,13 +11,22 @@
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
-    traverse( owner, Period_MP, period, not period.IsHistorical() and period.StartDate() >= startdate and period.EndDate() <= enddate
-              and ( ( timeunit = 'All' and ( period.TimeUnit() = Translations::MP_GlobalParameters_Day() or period.TimeUnit() = Translations::MP_GlobalParameters_Week() ) ) 
-                    or period.TimeUnit() = timeunit ) ){
-      periodtime := period.StartDate();
-      periodname := periodtime.Format( "M2/D2/Y" );
+    weekstart             := owner.StartOfPlanning().Date();
+    traverse( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day() ){
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Day() ){
+        periodtime          := period.StartDate();
+        periodname          := periodtime.Format( "M2/D2/Y" );
+        
+        this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      }
       
-      this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := period.TimeUnit() );
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
+        if( period.StartDate() = weekstart ){
+          weekperiodname    := weekstart.Format( "M2/D2/Y" );
+          this.Column( relnew, Name := weekperiodname, Period := weekstart, TimeUnit := Translations::MP_GlobalParameters_Week() );
+          weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+        }
+      }
     }
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl b/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl
new file mode 100644
index 0000000..97975cf
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetColumnByUnit (
+  String unit,
+  Date period
+) as EnginePipelineColumn
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-7-2024 (created)
+    periodname := period.Format( "M2/D2/Y" );
+    
+    column := selectobject( this, Column, column, column.Name() = periodname and column.Period() = period and column.TimeUnit() = unit );
+    
+    return column;
+  *]
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl
index 77d1f16..4a17ee3 100644
--- a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '闀挎槬';
+    return '闀挎槬宸ュ巶';
     //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl
index 4759121..ba77240 100644
--- a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '澶ц繛';
+    return '澶ц繛宸ュ巶';
     //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl b/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
index fbe0391..97c34c8 100644
--- a/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
+++ b/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellProductionValue (
   EnginePipelineColumn column,
-  String unit,
+  Boolean isccunit,
   Real quantity
 )
 {
@@ -17,9 +17,9 @@
       production := cell.Production( relnew, EngineType := cell.Row().Name(), Period := column.Period(), DLProduction := 0, CCProduction := 0 );
     }
     
-    if( unit = EnginePipelineReport::GetDefaultCCUnit() ){
+    if( isccunit ){
       production.CCProduction( production.CCProduction() + quantity );
-    }else if( unit = EnginePipelineReport::GetDefaultDLUnit() ){
+    } else {
       production.DLProduction( production.DLProduction() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
index 9d263fc..b18fbac 100644
--- a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
@@ -20,48 +20,65 @@
     products                  := construct( Product_MPs );
     //鍒濆鍖栧垪
     table.GenerateColumn( owner, 'All', search.StartDate(), search.EndDate() );
+    endperiod                 := maxobject( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day(), period.StartDate() );
     
     //鐢熸垚鐢熶骇鍜屽簱瀛樻暟鎹�
-    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ){
-      unit := pisp.StockingPoint_MP().UnitID();
-    //  info( unit, pisp.ProductID() );
-      //鍒濆鍖栬
-      row := table.GetRow( pisp.ProductID() );
+    traverse( owner, StockingPoint_MP, stockingpoint ){
+      unit                    := stockingpoint.Unit();
+      parentunits             := unit.GetAllParent();
+      //鏄惁灞炰簬闀挎槬宸ュ巶
+      iscc                    := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      //鏄惁灞炰簬澶ц繛宸ュ巶
+      isdl                    := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
       
-      traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
-                and ( pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() 
-                      or pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Week() ) ){
-        periodtime := pispip.Period_MP().StartDate();
-        periodname := periodtime.Format( "M2/D2/Y" );
-    //    info( '---------------------------------', periodtime, table.Column( relsize ), pispip.Period_MP().TimeUnit() );
-        column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = pispip.Period_MP().TimeUnit() );
-    //    info( '---------------------------------', isnull( column ), isnull( row ) );
-    //    info( '---------------------------------', column.Name(), row.Name() );
-        if( unit = ccunit or unit = dlunit ){
-          row.SetCellProductionValue( column, unit, pispip.NewSupplyProductionQuantity() );
+      traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() ){
+        weekstart             := owner.StartOfPlanning().Date();
+        pispips               := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
+                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+        row := table.GetRow( pisp.ProductID() );
+        traverse( pispips, Elements, pispip ){
+          //澶�
+          daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
+          //鍛�
+          weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
+          supplyquantity      := [Real]ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣
+          inventoryquantity   := [Real]ceil( pispip.PlannedInventoryLevelEnd() );//鍚戜笂鍙栨暣
+          //浜ч噺鏄姞鎬�
+          if( iscc or isdl ){
+            row.SetCellProductionValue( daycolumn, iscc, supplyquantity );
+            row.SetCellProductionValue( weekcolumn, iscc, supplyquantity );
+          }
+          //搴撳瓨闇�瑕佸彇鏈�鍚庝竴澶�
+          row.SetCellInventoryValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+    
+          if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){
+            weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+            
+            row.SetCellInventoryValue( weekcolumn, inventoryquantity );
+          } 
         }
-        row.SetCellInventoryValue( column, pispip.PlannedInventoryLevelEnd() );
       }
     }
     
     //鐢熸垚闇�姹傛暟鎹�
-    traverse( owner, SalesDemand.astype( Forecast ), forecast, ( forecast.EndDate() - forecast.StartDate() ) < 8){
-      row := table.GetRow( forecast.ProductID() );
-      weekdate   := ( forecast.StartDate() - Duration::Days( 7 ) ).Date();
-      periodtime := forecast.StartDate();
-      periodname := periodtime.Format( "M2/D2/Y" );
-      
-      column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = Translations::MP_GlobalParameters_Day() );
-      weekcolumn := minobject( table, Column, wcolumn, wcolumn.Period() <= weekdate and wcolumn.TimeUnit() = Translations::MP_GlobalParameters_Week(), wcolumn.Period() );
-      
-      if( not isnull( column ) ){
-        row.SetCellDemandValue( column, forecast.SalesSegmentName(), forecast.Quantity() );
-      }
-      
-      if( not isnull( weekcolumn ) ){
-        row.SetCellDemandValue( weekcolumn, forecast.SalesSegmentName(), forecast.Quantity() );
+    traverse( owner, SalesDemand.astype( Forecast ), forecast ){
+      row                   := table.GetRow( forecast.ProductID() );
+      weekstart             := owner.StartOfPlanning().Date();
+      traverse( forecast, PlanningSalesDemandInPeriod, psdip ){
+        //澶�
+        daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), psdip.StartDate() );
+        //鍛�
+        weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
+        
+        if( not isnull( daycolumn ) ){
+          row.SetCellDemandValue( daycolumn, forecast.SalesSegmentName(), forecast.Quantity() );
+        }
+        if( not isnull( weekcolumn ) ){
+          row.SetCellDemandValue( weekcolumn, forecast.SalesSegmentName(), forecast.Quantity() );
+        }
       }
     }
+    
     rows := selectsortedset( table, Row, row, row.Name() );
     i    := 0;
     traverse( rows, Elements, e ){
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl
index 739a84b..7bf8369 100644
--- a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
-    return '闀挎槬';
+    return '闀挎槬宸ュ巶';
     //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl
index d544c74..781dc80 100644
--- a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
-    return '澶ц繛';
+    return '澶ц繛宸ュ巶';
     //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_BufferPaperCost.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_BufferPaperCost.qbl
new file mode 100644
index 0000000..40f9ed2
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_BufferPaperCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BufferPaperCost
+{
+  #keys: '3[413988.0.1462991460][413988.0.1462991459][413988.0.1462991461]'
+  Description: '缂撳啿绾歌垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_Coefficient.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_Coefficient.qbl
new file mode 100644
index 0000000..b9c2c75
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_Coefficient.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Coefficient
+{
+  #keys: '3[413988.0.1462991560][413988.0.1462991559][413988.0.1462991561]'
+  Description: '绯绘暟'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_EstimatedTotalCost.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_EstimatedTotalCost.qbl
new file mode 100644
index 0000000..5bc418f
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_EstimatedTotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EstimatedTotalCost
+{
+  #keys: '3[413988.0.1462991540][413988.0.1462991539][413988.0.1462991541]'
+  Description: '棰勮鎬昏垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl
new file mode 100644
index 0000000..19f02ca
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExternalRentalWarehouseTransportationCosts
+{
+  #keys: '3[413988.0.1462991520][413988.0.1462991519][413988.0.1462991521]'
+  Description: '澶栫搴撹繍杈撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_OutboundExpensesForRentedWarehouses.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_OutboundExpensesForRentedWarehouses.qbl
new file mode 100644
index 0000000..a34cec3
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_OutboundExpensesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OutboundExpensesForRentedWarehouses
+{
+  #keys: '3[413988.0.1462991510][413988.0.1462991509][413988.0.1462991511]'
+  Description: '澶栫搴撳嚭搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_PackingCharges.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_PackingCharges.qbl
new file mode 100644
index 0000000..52ba0ad
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_PackingCharges.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PackingCharges
+{
+  #keys: '3[413988.0.1462991440][413988.0.1462991439][413988.0.1462991441]'
+  Description: '鍖呰璐圭敤'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_QuantityOfWoodenCrates.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_QuantityOfWoodenCrates.qbl
new file mode 100644
index 0000000..fd16c6d
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_QuantityOfWoodenCrates.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute QuantityOfWoodenCrates
+{
+  #keys: '3[413988.0.1462991470][413988.0.1462991469][413988.0.1462991471]'
+  Description: '鏈ㄧ鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_RentalWarehouseStorageFees.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_RentalWarehouseStorageFees.qbl
new file mode 100644
index 0000000..d935a68
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_RentalWarehouseStorageFees.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RentalWarehouseStorageFees
+{
+  #keys: '3[413988.0.1462991530][413988.0.1462991529][413988.0.1462991531]'
+  Description: '澶栫搴撲粨鍌ㄨ垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_StorageFeesForRentedWarehouses.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_StorageFeesForRentedWarehouses.qbl
new file mode 100644
index 0000000..035389e
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_StorageFeesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StorageFeesForRentedWarehouses
+{
+  #keys: '3[413988.0.1462991500][413988.0.1462991499][413988.0.1462991501]'
+  Description: '澶栫搴撳叆搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TotalCost.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TotalCost.qbl
new file mode 100644
index 0000000..6c8df0f
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalCost
+{
+  #keys: '3[413988.0.1462991550][413988.0.1462991549][413988.0.1462991551]'
+  Description: '鎬昏垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TransferCost.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TransferCost.qbl
new file mode 100644
index 0000000..4662a8d
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_TransferCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TransferCost
+{
+  #keys: '3[413988.0.1462991490][413988.0.1462991489][413988.0.1462991491]'
+  Description: '璋冩嫧璐圭敤'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnitPriceOfWoodenCrate.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnitPriceOfWoodenCrate.qbl
new file mode 100644
index 0000000..ed5d2c5
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnitPriceOfWoodenCrate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitPriceOfWoodenCrate
+{
+  #keys: '3[413988.0.1467610005][413988.0.1467610004][413988.0.1467610006]'
+  Description: '鏈ㄧ鍗曚环'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnpackingCost.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnpackingCost.qbl
new file mode 100644
index 0000000..bec9d51
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_UnpackingCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnpackingCost
+{
+  #keys: '3[413988.0.1462991450][413988.0.1462991449][413988.0.1462991451]'
+  Description: '鎷嗗寘璐圭敤'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_WoodenCrateCost.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_WoodenCrateCost.qbl
new file mode 100644
index 0000000..c3c5e6b
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Attribute_WoodenCrateCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute WoodenCrateCost
+{
+  #keys: '3[413988.0.1462991480][413988.0.1462991479][413988.0.1462991481]'
+  Description: '鏈ㄧ璐圭敤'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/Function_CalcWoodenCrateCost.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/Function_CalcWoodenCrateCost.qbl
new file mode 100644
index 0000000..b31a8d5
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/Function_CalcWoodenCrateCost.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcWoodenCrateCost
+{
+  TextBody:
+  [*
+    // lihongji Aug-7-2024 (created)
+    
+    value := guard( this.QuantityOfWoodenCrates() * this.UnitPriceOfWoodenCrate(), 0.0 );
+    
+    this.WoodenCrateCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..10aea66
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
@@ -0,0 +1,85 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  MacroPlan macroPlan,
+  String factory
+)
+{
+  TextBody:
+  [*
+    macroPlan.MachineLogisticsCostReportRow( relflush );
+    macroPlan.MachineLogisticsCostReportColumn( relflush );
+    
+    // 鍒濆鍖栦竴骞存暟鎹垪
+    indexDate := macroPlan.StartOfPlanning().Date().StartOfMonth();
+    for ( i := 0; i < 12; i++ ) {
+      macroPlan.MachineLogisticsCostReportColumn( relnew, StartDate := indexDate );
+      indexDate := indexDate.StartOfNextMonth();
+    }
+    
+    // 鎵惧嚭鎵�鏈夊ぇ绫伙紝鍒涘缓鏁版嵁
+    categories := selectuniquevalues( macroPlan, PackagingPlanRow, tempPPR, true, tempPPR.Category() );
+    
+    traverse ( categories, Elements, c ) {
+      
+      // 鏈哄姞鎴愭湰鍙傛暟
+      lcm := select( macroPlan, LogisticsCostMachining, tempLCM, tempLCM.Factory() = factory and tempLCM.Product() = c );
+      
+      // 杩愯緭鎴愭湰鍙傛暟
+      lct := select( macroPlan, LogisticsCostTransport, tempLCT, tempLCT.Origin()      = ifexpr( factory = "澶ц繛宸ュ巶", "CC", "DL" ) and
+                                                                 tempLCT.Destination() = ifexpr( factory = "澶ц繛宸ュ巶", "DL", "CC" ) and
+                                                                 tempLCT.Product()     = c );
+       
+      // 鍒濆鍖栨満鍔犳垚鏈弬鏁版姤琛ㄨ
+      mlcrr := macroPlan.MachineLogisticsCostReportRow( relnew, Category := c, Factory := factory );
+      
+      // 寰幆鎵�鏈夋椂闂村垪鍒涘缓鏁版嵁                                         
+      traverse ( macroPlan, MachineLogisticsCostReportColumn, mlcrc ) {
+        cell := mlcrr.MachineLogisticsCostReportCell( relnew );
+        
+        // 璁剧疆鍖呰璐圭敤锛堝寘瑁呴噺 * 鍖呰鍗曚环锛�
+        packageQuantity := sum( macroPlan, PackagingPlanRow.PackagingPlanCell, tempPPC, 
+                                tempPPC.PackagingPlanRow().Category()             = c                         and
+                                tempPPC.PackagingPlanRow().Factory()              = factory                   and
+                                tempPPC.PackagingPlanColumn().StartDate().Year()  = mlcrc.StartDate().Year()  and
+                                tempPPC.PackagingPlanColumn().StartDate().Month() = mlcrc.StartDate().Month(),
+                                tempPPC.Package() );
+        cell.PackingCharges( packageQuantity * guard( lcm.PackagePrice(), 1 ) );
+        
+        // 璁剧疆鎷嗗寘璐圭敤锛堟媶鍖呴噺 * 鎷嗗寘鍗曚环锛�
+        unpackingQuantity := sum( macroPlan, PackagingPlanRow.PackagingPlanCell, tempPPC, 
+                                  tempPPC.PackagingPlanRow().Category()             = c                         and
+                                  tempPPC.PackagingPlanRow().Factory()              = factory                   and
+                                  tempPPC.PackagingPlanColumn().StartDate().Year()  = mlcrc.StartDate().Year()  and
+                                  tempPPC.PackagingPlanColumn().StartDate().Month() = mlcrc.StartDate().Month(),
+                                  tempPPC.Unpacking() );
+        cell.UnpackingCost( unpackingQuantity * guard( lcm.UnpackingPrice(), 1 ) );
+        
+        // 璁剧疆缂撳啿绾歌垂鐢紙鍖呰绫� * 缂撳啿绾稿崟浠凤級
+        cell.BufferPaperCost( packageQuantity * guard( lcm.BufferPaperPrice(), 1 ) );
+        
+        // 璁剧疆鏈ㄧ鍗曚环
+        cell.UnitPriceOfWoodenCrate( guard( lcm.WoodenCratePrice(), 1 ) );
+        
+        // 璁剧疆璋冩嫧璐圭敤锛堣皟鎷ㄦ暟閲� / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 杩愯緭鍗曚环锛�
+        transferQuantity := sum( macroPlan, TransferPlanRow.TransferPlanCell, tempTPC,
+                                 tempTPC.TransferPlanRow().Category()              = c                                                      and
+                                 tempTPC.TransferPlanRow().Name()                  = ifexpr( factory = "澶ц繛宸ュ巶", "CC to DL", "DL to CC" ) and
+                                 tempTPC.TransferPlanColumn().ColumnDate().Year()  = mlcrc.StartDate().Year()                               and
+                                 tempTPC.TransferPlanColumn().ColumnDate().Month() = mlcrc.StartDate().Month(),
+                                 [Number]tempTPC.Value() );
+        cell.TransferCost( transferQuantity / guard( lcm.PackagingCapacity(), 1 ) / guard( lct.LoadingCapacity(), 1 ) * guard( lct.TransportPrice(), 1 ) );
+        
+        // 澶栫搴撳叆搴撹垂鐢紙鍏ュ簱閲廩鍖呰閲廬 / 鍖呰瀹归噺 * 鍏ュ簱鍗曚环锛�
+        cell.StorageFeesForRentedWarehouses( packageQuantity / guard( lcm.PackagingCapacity(), 1 ) * guard( lcm.WarehousingPrice(), 1 ) );
+        
+        // 澶栫搴撳嚭搴撹垂鐢紙鍑哄簱閲廩鎷嗗寘閲廬 / 鍖呰瀹归噺 * 鍑哄簱鍗曚环锛�
+        cell.OutboundExpensesForRentedWarehouses( unpackingQuantity / guard( lcm.PackagingCapacity(), 1 ) * guard( lcm.OutboundPrice(), 1 ) );
+        
+        // 澶栫搴撹繍杈撹垂鐢紙杩愯緭鏁伴噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 杩愯緭鍗曚环锛�
+        
+        cell.MachineLogisticsCostReportColumn( relset, mlcrc );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/_ROOT_Type_MachineLogisticsCostReportCell.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/_ROOT_Type_MachineLogisticsCostReportCell.qbl
new file mode 100644
index 0000000..4c7f5ba
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/_ROOT_Type_MachineLogisticsCostReportCell.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MachineLogisticsCostReportCell
+{
+  #keys: '5[413988.0.1462991346][413988.0.1462991344][0.0.0][413988.0.1462991345][413988.0.1462991347]'
+  BaseType: Object
+  StructuredName: 'MachineLogisticsCostReportCells'
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportColumn/Attribute_StartDate.qbl b/_Main/BL/Type_MachineLogisticsCostReportColumn/Attribute_StartDate.qbl
new file mode 100644
index 0000000..261331e
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportColumn/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[413988.0.1462991430][413988.0.1462991429][413988.0.1462991431]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportColumn/_ROOT_Type_MachineLogisticsCostReportColumn.qbl b/_Main/BL/Type_MachineLogisticsCostReportColumn/_ROOT_Type_MachineLogisticsCostReportColumn.qbl
new file mode 100644
index 0000000..568d4a8
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportColumn/_ROOT_Type_MachineLogisticsCostReportColumn.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MachineLogisticsCostReportColumn
+{
+  #keys: '5[413988.0.1462991341][413988.0.1462991339][0.0.0][413988.0.1462991340][413988.0.1462991342]'
+  BaseType: Object
+  StructuredName: 'MachineLogisticsCostReportColumns'
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Category.qbl b/_Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Category.qbl
new file mode 100644
index 0000000..7addcc5
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Category.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Category
+{
+  #keys: '3[413988.0.1462991420][413988.0.1462991419][413988.0.1462991421]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Factory.qbl b/_Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Factory.qbl
new file mode 100644
index 0000000..3562e99
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportRow/Attribute_Factory.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Factory
+{
+  #keys: '3[413988.0.1462991410][413988.0.1462991409][413988.0.1462991411]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MachineLogisticsCostReportRow/_ROOT_Type_MachineLogisticsCostReportRow.qbl b/_Main/BL/Type_MachineLogisticsCostReportRow/_ROOT_Type_MachineLogisticsCostReportRow.qbl
new file mode 100644
index 0000000..83c86e4
--- /dev/null
+++ b/_Main/BL/Type_MachineLogisticsCostReportRow/_ROOT_Type_MachineLogisticsCostReportRow.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MachineLogisticsCostReportRow
+{
+  #keys: '5[413988.0.1462991336][413988.0.1462991334][0.0.0][413988.0.1462991335][413988.0.1462991337]'
+  BaseType: Object
+  StructuredName: 'MachineLogisticsCostReportRows'
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
index 1eba4c1..525a923 100644
--- a/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
@@ -11,13 +11,22 @@
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
-    traverse( owner, Period_MP, period, not period.IsHistorical() and period.StartDate() >= startdate and period.EndDate() <= enddate
-              and ( ( timeunit = 'All' and ( period.TimeUnit() = Translations::MP_GlobalParameters_Day() or period.TimeUnit() = Translations::MP_GlobalParameters_Week() ) ) 
-                    or period.TimeUnit() = timeunit ) ){
-      periodtime := period.StartDate();
-      periodname := periodtime.Format( "M2/D2/Y" );
+    weekstart             := owner.StartOfPlanning().Date();
+    traverse( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day() ){
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Day() ){
+        periodtime          := period.StartDate();
+        periodname          := periodtime.Format( "M2/D2/Y" );
+        
+        this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      }
       
-      this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := period.TimeUnit() );
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
+        if( period.StartDate() = weekstart ){
+          weekperiodname    := weekstart.Format( "M2/D2/Y" );
+          this.Column( relnew, Name := weekperiodname, Period := weekstart, TimeUnit := Translations::MP_GlobalParameters_Week() );
+          weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+        }
+      }
     }
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl
new file mode 100644
index 0000000..1c5b4cb
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetColumnByUnit (
+  String unit,
+  Date period
+) as MachiningPipelineColumn
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-7-2024 (created)
+    periodname := period.Format( "M2/D2/Y" );
+    
+    column := selectobject( this, Column, column, column.Name() = periodname and column.Period() = period and column.TimeUnit() = unit );
+    
+    return column;
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
index 77d1f16..4a17ee3 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '闀挎槬';
+    return '闀挎槬宸ュ巶';
     //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
index 4759121..ba77240 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '澶ц繛';
+    return '澶ц繛宸ュ巶';
     //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
index 00732ef..7e188ba 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellAssemblyValue (
   MachiningPipelineColumn column,
-  String unit,
+  Boolean iscc,
   Real quantity
 )
 {
@@ -11,9 +11,9 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    if( unit = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() ){
+    if( iscc ){
       cell.CCAssemblyPlanQty( cell.CCAssemblyPlanQty() + quantity );
-    }else if( unit = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() ){
+    } else {
       cell.DLAssemblyPlanQty( cell.DLAssemblyPlanQty() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
index 568d35f..9fbd214 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellInventoryValue (
   MachiningPipelineColumn column,
-  String unit,
+  Boolean iscc,
   Real quantity
 )
 {
@@ -11,9 +11,9 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    if( unit = MachiningPipelineReport::GetDefaultCCUnit() ){
+    if( iscc ){
       cell.CCInventoryQty( cell.CCInventoryQty() + quantity );
-    }else if( unit = MachiningPipelineReport::GetDefaultDLUnit() ){
+    } else {
       cell.DLInventoryQty( cell.DLInventoryQty() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
index cc60df0..f976f27 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellProductionValue (
   MachiningPipelineColumn column,
-  String unit,
+  Boolean iscc,
   Real quantity
 )
 {
@@ -11,9 +11,9 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    if( unit = MachiningPipelineReport::GetDefaultCCProductionUnit() ){
+    if( iscc ){
       cell.CCProductionQty( cell.CCProductionQty() + quantity );
-    }else if( unit = MachiningPipelineReport::GetDefaultDLProductionUnit() ){
+    } else {
       cell.DLProductionQty( cell.DLProductionQty() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
index bf09a16..5776315 100644
--- a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
@@ -20,30 +20,61 @@
     products                  := construct( Product_MPs );
     //鍒濆鍖栧垪
     table.GenerateColumn( owner, 'All', search.StartDate(), search.EndDate() );
+    endperiod                 := maxobject( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day(), period.StartDate() );
     
     //鐢熸垚瑁呴厤銆佺敓浜у拰搴撳瓨鏁版嵁
-    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ){
-      unit := pisp.StockingPoint_MP().UnitID();
-      //鍒濆鍖栬
-      row := table.GetRow( pisp.ProductID() );
-      
-      traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
-                and ( pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() 
-                      or pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Week() ) ){
-        periodtime := pispip.Period_MP().StartDate();
-        periodname := periodtime.Format( "M2/D2/Y" );
-        column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = pispip.Period_MP().TimeUnit() );
-    
-        //瑁呴厤绾�
-        if( unit = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or unit = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() ){
-          row.SetCellAssemblyValue( column, unit, pispip.NewSupplyProductionQuantity() );
-        }
-        //鏈哄姞绾�
-        if( unit = MachiningPipelineReport::GetDefaultCCProductionUnit() or unit = MachiningPipelineReport::GetDefaultDLProductionUnit() ){
-          row.SetCellProductionValue( column, unit, pispip.NewSupplyProductionQuantity() );
-        }
-        if( unit = ccunit or unit = dlunit ){
-          row.SetCellInventoryValue( column, unit, pispip.PlannedInventoryLevelEnd() );
+    traverse( owner, StockingPoint_MP, stockingpoint ){
+      unit                    := stockingpoint.Unit();
+      parentunits             := unit.GetAllParent();
+      //鏄惁灞炰簬闀挎槬宸ュ巶
+      iscc                    := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      //鏄惁灞炰簬澶ц繛宸ュ巶
+      isdl                    := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
+      //鏄惁灞炰簬闀挎槬瑁呴厤绾�
+      isccassemnly            := unit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() );
+      //鏄惁灞炰簬澶ц繛瑁呴厤绾�
+      isdlassemnly            := unit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() );
+      //鏄惁灞炰簬闀挎槬鏈哄姞浜х嚎
+      isccproduction          := unit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() );
+      //鏄惁灞炰簬澶ц繛鏈哄姞浜х嚎
+      isdlproduction          := unit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() );
+      if( iscc or isdl ){
+        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() ){
+          row := table.GetRow( pisp.ProductID() );
+          
+          weekstart             := owner.StartOfPlanning().Date();
+          pispips               := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
+                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+          
+          traverse( pispips, Elements, pispip ){
+            //澶�
+            daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
+            //鍛�
+            weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
+            
+            supplyquantity      := [Real]ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣
+            inventoryquantity   := [Real]ceil( pispip.PlannedInventoryLevelEnd() );//鍚戜笂鍙栨暣
+            
+            //瑁呴厤绾�
+            if( isccassemnly or isdlassemnly ){
+              row.SetCellAssemblyValue( daycolumn, isccassemnly, supplyquantity );
+              row.SetCellAssemblyValue( weekcolumn, isccassemnly, supplyquantity );
+            }
+            
+            //鏈哄姞绾�
+            if( isccproduction or isdlproduction ){
+              row.SetCellProductionValue( daycolumn, isccproduction, supplyquantity );
+              row.SetCellProductionValue( weekcolumn, isccproduction, supplyquantity );
+            }
+            //搴撳瓨
+            if( iscc or isdl ){
+              row.SetCellInventoryValue( daycolumn, iscc, inventoryquantity );
+              if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){
+                weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+                row.SetCellInventoryValue( weekcolumn, iscc, inventoryquantity );
+              }
+            }
+          }
         }
       }
     }
diff --git a/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl b/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl
index f56c666..cfbbdbf 100644
--- a/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl
+++ b/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl
@@ -66,7 +66,7 @@
     Transaction::Transaction().Propagate( relation( PackagingPlanCell, Next ) );
     
     // 璁剧疆鍖呰&鎷嗗寘-鏁伴噺
-    traverse ( macroPlan, PackagingPlanRow, ppr, ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Bosch" ) {
+    traverse ( macroPlan, PackagingPlanRow, ppr, ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Bosch" ) or ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Components (Spain)" ) ) {
       traverse ( ppr, PackagingPlanCell, ppc/*, ppc.StartDate() = Date::Construct( 2020, 4, 1 )*/ ) {
         // 璁剧疆鍖呰鏁伴噺
         if ( ppc.PackagingInventory() < ppc.Out() ) { // 鍖呰搴撳瓨鏄惁灏忎簬璋冨嚭
@@ -94,6 +94,16 @@
             prePPC := prePPC.Previous();
           }
         }
+        
+        // 璁剧疆鎷嗗寘鏁伴噺
+        if ( ppc.TransferIn() > 0.0 ) { // 鏈夎皟鍏ユ暟閲�
+          // 鑾峰彇鍖呰lotsize
+          ppls                 := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() =  ppc.PackagingPlanRow().Factory()    and 
+                                                                                     tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
+        
+          // 璁剧疆鎷嗗寘鍊�
+          ppc.Unpacking( ppc.TransferIn() );
+        }
       }
     }
   *]
diff --git a/_Main/BL/Type_TransferPlanRow/Attribute_Category.qbl b/_Main/BL/Type_TransferPlanRow/Attribute_Category.qbl
new file mode 100644
index 0000000..35c25ef
--- /dev/null
+++ b/_Main/BL/Type_TransferPlanRow/Attribute_Category.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Category
+{
+  #keys: '3[413988.0.1467614281][413988.0.1467614280][413988.0.1467614282]'
+  Description: '澶х被'
+  ValueType: String
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
index f42b770..894ed1d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -60,14 +60,18 @@
         Taborder: 4
       ]
     }
-    Component ButtonEnginePipelineReport
+    Component ButtonPipelineReport
     {
       #keys: '[415136.0.884991586]'
       BaseType: 'WebButton'
+      Children:
+      [
+        #child: ContextMenuPipelineReport
+      ]
       Properties:
       [
         Image: 'DOCUMENT_CONNECTION'
-        Label: 'Engine pipeline report'
+        Label: 'Pipeline report'
         Taborder: 5
       ]
     }
@@ -82,6 +86,17 @@
         Taborder: 6
       ]
     }
+    Component bMachineLogisticsCostReport
+    {
+      #keys: '[413988.0.1467117990]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'LOCATION_PIN'
+        Label: 'Machine logistics cost report'
+        Taborder: 7
+      ]
+    }
     Component ButtonScenarioComparisonDemandComparison id:ButtonScenarioComparisonDemandComparison_256
     {
       #keys: '[412672.1.90201789]'
@@ -90,7 +105,7 @@
       [
         Image: 'EQUALS'
         Label: '闇�姹傚姣�'
-        Taborder: 7
+        Taborder: 8
       ]
     }
     Component ButtonScheduleSummaryReport
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def
new file mode 100644
index 0000000..6e53b06
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component ContextMenuPipelineReport
+{
+  #keys: '[415136.0.973375806]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component MenuEnginePipelineReport
+    {
+      #keys: '[415136.0.973375807]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_CONNECTION'
+        Taborder: 0
+        Title: 'Engine pipeline report'
+      ]
+    }
+    Component MenuMachiningPipelineReport
+    {
+      #keys: '[415136.0.972180572]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_CONNECTION'
+        Taborder: 1
+        Title: 'Machining pipeline report'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClic.def
deleted file mode 100644
index e5bc9a9..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClic.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: ActionBarGroupReport/ButtonEnginePipelineReport
-Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClick
-{
-  #keys: '[415136.0.888144270]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      ApplicationScope.ViewManager().ResetUserViewById( "Engine_pipleline_report", true);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bMachineLogisticsCostReport_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bMachineLogisticsCostReport_OnCli.def
new file mode 100644
index 0000000..aa3b46f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bMachineLogisticsCostReport_OnCli.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/bMachineLogisticsCostReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_bMachineLogisticsCostReport_OnClick
+{
+  #keys: '[413988.0.1467020680]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "MachineLogisticsCostReport", true);
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def
new file mode 100644
index 0000000..56e43fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuPipelineReport/MenuEnginePipelineReport
+Response OnClick () id:Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnClick
+{
+  #keys: '[415136.0.972180722]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Engine_pipleline_report", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def
new file mode 100644
index 0000000..dd706a8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuPipelineReport/MenuMachiningPipelineReport
+Response OnClick () id:Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_OnClick
+{
+  #keys: '[415136.0.972180898]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Machining_pipeline_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
index 490d3d9..4969427 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
@@ -12,6 +12,16 @@
       Properties:
       [
         Image: 'IMPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSearch id:ButtonSearch_88
+    {
+      #keys: '[415136.0.972181163]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
         Taborder: 0
       ]
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick\043648.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick\043648.def"
new file mode 100644
index 0000000..2d12db4
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick\043648.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelExport_570/ButtonSearch_88
+Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick_648
+{
+  #keys: '[415136.0.972181162]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
index 166de15..17fbc7d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().EndDate() <> this.Date() ){
           dhSearch.Data().EndDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
index 223f7f8..7251bc5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().StartDate() <> this.Date() ){
           dhSearch.Data().StartDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
index 57a65bb..ed13429 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -12,7 +12,7 @@
       //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
       if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
         dhSearch.Data().TimeUnit( this.BoundValue() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_MatrixEditor912.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_MatrixEditor912.def
new file mode 100644
index 0000000..dcc3160
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_MatrixEditor912.def
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditor912
+{
+  #keys: '[413988.0.1465931073]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell727
+    {
+      #keys: '[413988.0.1465931074]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractor189
+        {
+          #keys: '[413988.0.1465931075]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'MachineLogisticsCostReportRow.MachineLogisticsCostReportCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'PackingCharges;UnpackingCost;BufferPaperCost;QuantityOfWoodenCrates;WoodenCrateCost;TransferCost;StorageFeesForRentedWarehouses;OutboundExpensesForRentedWarehouses;ExternalRentalWarehouseTransportationCosts;RentalWarehouseStorageFees;EstimatedTotalCost;Coefficient;TotalCost'
+        Column: 'MachineLogisticsCostReportColumn'
+        Row: 'MachineLogisticsCostReportRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows154
+    {
+      #keys: '[413988.0.1465931078]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor972
+        {
+          #keys: '[413988.0.1465931079]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'MachineLogisticsCostReportRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Category'
+        SortCriteria: 'Category'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns700
+    {
+      #keys: '[413988.0.1465931082]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor687
+        {
+          #keys: '[413988.0.1465931083]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'MachineLogisticsCostReportColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'StartDate'
+        SortCriteria: 'StartDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPage703
+    #child: matrixeditorContextMenu253
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumns700'
+    ContextMenu: 'matrixeditorContextMenu253'
+    Rows: 'MatrixEditorRows154'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixEditorActionBarPage703.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixEditorActionBarPage703.def
new file mode 100644
index 0000000..a23fbd7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixEditorActionBarPage703.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPage703
+{
+  #keys: '[413988.0.1465931086]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixeditorContextMenu253.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixeditorContextMenu253.def
new file mode 100644
index 0000000..7646b0a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_matrixeditorContextMenu253.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenu253
+{
+  #keys: '[413988.0.1465931089]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pContent.def
new file mode 100644
index 0000000..f3575cd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pContent.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component pContent
+{
+  #keys: '[413988.0.1467187130]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditor912
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pHeader.def
new file mode 100644
index 0000000..1a7eefd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Component_pHeader.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component pHeader
+{
+  #keys: '[413988.0.1467187119]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslFactory
+    {
+      #keys: '[413988.0.1467011004]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Sorting: 'none'
+        Strings: '澶ц繛宸ュ巶;闀挎槬宸ュ巶'
+        Taborder: 0
+      ]
+    }
+    Component bRefresh
+    {
+      #keys: '[413988.0.1467011018]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 1
+      ]
+    }
+    Component Button655
+    {
+      #keys: '[413988.0.1467011030]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Response_pHeader_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Response_pHeader_bRefresh_OnClick.def
new file mode 100644
index 0000000..6cef4ca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/Response_pHeader_bRefresh_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: pHeader/bRefresh
+Response OnClick () id:Response_pHeader_bRefresh_OnClick
+{
+  #keys: '[413988.0.1467314360]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      MachineLogisticsCostReportCell::CreateData( MacroPlan, ddslFactory.Text() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/_ROOT_Component_FormMachineLogisticsCostReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/_ROOT_Component_FormMachineLogisticsCostReport.def
new file mode 100644
index 0000000..c5e5780
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachineLogisticsCostReport/_ROOT_Component_FormMachineLogisticsCostReport.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormMachineLogisticsCostReport
+{
+  #keys: '[413988.0.1467187084]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pHeader
+    #child: pContent
+  ]
+  Properties:
+  [
+    Title: 'MachineLogisticsCostReport'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
index f599c42..cb6cfb8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
@@ -12,6 +12,16 @@
       Properties:
       [
         Image: 'IMPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.972181477]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
         Taborder: 0
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..609a7d6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSearch
+Response OnClick () id:Response_PanelExport_570_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.972181476]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
index 89d54eb..921b890 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().EndDate() <> this.Date() ){
           dhSearch.Data().EndDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
index f1b84da..c8a387b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().StartDate() <> this.Date() ){
           dhSearch.Data().StartDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
index 983fe7e..ff83249 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -12,7 +12,7 @@
       //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
       if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
         dhSearch.Data().TimeUnit( this.BoundValue() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw b/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
index 0b36ffb..bdf33df 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
@@ -90,156 +90,6 @@
           }
         }
       }
-      form_FormMachiningPipelineReport
-      {
-        title: 'QMacroPlanner::FormMachiningPipelineReport'
-        shown: true
-        componentID: 'QMacroPlanner::FormMachiningPipelineReport'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 16
-          rowSpan: 19
-          columnPosition: 1
-          columnSpan: 12
-        }
-        components
-        {
-          FormMachiningPipelineReport_PanelHeader
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelSearch
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelPeriod
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelTimeUnit
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelExport
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelTable
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_MatrixEditorTable
-          {
-            gridColor: '#c4c4c4'
-            totalHeaderWidth: 200
-            attributeHeaderWidthRatio: 0.6
-            nameHeaderWidthRatio: 0.4
-            columnWidth: 100
-            horizontalGrid: true
-            verticalGrid: true
-            backendState
-            {
-              componentId: 'QMacroPlanner::FormMachiningPipelineReport.MatrixEditorTable'
-              state
-              {
-                cells
-                {
-                  attributes
-                  {
-                    attribute_CCAssemblyPlanQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 0
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCAssemblyPlanQty'
-                    }
-                    attribute_CCProductionQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 1
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCProductionQty'
-                    }
-                    attribute_CCTransferQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 2
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCTransferQty'
-                    }
-                    attribute_CCInventoryQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 3
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCInventoryQty'
-                    }
-                    attribute_DLAssemblyPlanQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 4
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLAssemblyPlanQty'
-                    }
-                    attribute_DLProductionQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 5
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLProductionQty'
-                    }
-                    attribute_DLTransferQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 6
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLTransferQty'
-                    }
-                    attribute_DLInventoryQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 7
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLInventoryQty'
-                    }
-                    attribute_TotalInventoryQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 8
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'TotalInventoryQty'
-                    }
-                  }
-                }
-                columns
-                {
-                  sorting
-                  {
-                    criteria: "datamember:'Index'"
-                  }
-                }
-                rows
-                {
-                  sorting
-                  {
-                    criteria: "datamember:'RowNr'"
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
       form_FormOptimizerPuzzles
       {
         title: 'Optimizer Puzzles'
diff --git a/_Main/UI/MacroPlannerWebApp/Views/MachineLogisticsCostReport.vw b/_Main/UI/MacroPlannerWebApp/Views/MachineLogisticsCostReport.vw
new file mode 100644
index 0000000..4f9b6ae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/MachineLogisticsCostReport.vw
@@ -0,0 +1,89 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormMachineLogisticsCostReport
+      {
+        title: 'QMacroPlanner::FormMachineLogisticsCostReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormMachineLogisticsCostReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormMachineLogisticsCostReport_pHeader
+          {
+            sizeRatio: 1
+          }
+          FormMachineLogisticsCostReport_pContent
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+      form_FormGeneralSettings
+      {
+        title: 'General Settings'
+        shown: true
+        componentID: 'FormGeneralSettings'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormGeneralSettings_PanelContent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelGeneralParameter
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelLeadTimeDependent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelShelfLife
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelSustainability
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelForecastNetting
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelActions
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'BEAR'
+    description: ''
+  }
+  formatversion: 2
+  id: 'MachineLogisticsCostReport'
+  name: 'MachineLogisticsCostReport'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw
new file mode 100644
index 0000000..f31232a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw
@@ -0,0 +1,281 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormMachiningPipelineReport
+      {
+        title: 'QMacroPlanner::FormMachiningPipelineReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormMachiningPipelineReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormMachiningPipelineReport_PanelHeader
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelSearch
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelPeriod
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelTimeUnit
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormMachiningPipelineReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_CCAssemblyPlanQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCAssemblyPlanQty'
+                    }
+                    attribute_CCProductionQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCProductionQty'
+                    }
+                    attribute_CCTransferQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCTransferQty'
+                    }
+                    attribute_CCInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCInventoryQty'
+                    }
+                    attribute_DLAssemblyPlanQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 4
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLAssemblyPlanQty'
+                    }
+                    attribute_DLProductionQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 5
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLProductionQty'
+                    }
+                    attribute_DLTransferQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 6
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLTransferQty'
+                    }
+                    attribute_DLInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 7
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLInventoryQty'
+                    }
+                    attribute_TotalInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 8
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalInventoryQty'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      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_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 25
+    image: 'DOCUMENT_CONNECTION'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Machining_pipeline_report_view'
+  name: 'Machining pipeline report view'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw" "b/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw"
index 7991f60..9b27eac 100644
--- "a/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw"
+++ "b/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw"
@@ -17,7 +17,7 @@
   CREATIONUSER 'quintiq/lihongji'
   UPDATEDATETIME '2024-07-16T11:47:37'
   UPDATEUSER 'quintiq/lihongji'
-  LASTACCESSDATE '2024-08-04'
+  LASTACCESSDATE '2024-08-07'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS

--
Gitblit v1.9.3