From f6a27ee5dacb68840a68b563647b319b52dc1404 Mon Sep 17 00:00:00 2001
From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com>
Date: 星期五, 18 十月 2024 17:41:47 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl                       |   79 ++++++---
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl                                   |   95 ++++++-----
 _Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl                                 |  160 ++++++++++---------
 _Main/Sys/Repr/Global/PackagingPlanCell.qrp                                                    |    4 
 _Main/BL/Type_EnginePipelineRow/StaticMethod_CraeteCellValueForRow.qbl                         |    8 
 _Main/BL/Type_EnginePipelineReport/Method_Clear.qbl                                            |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_MatrixEditorTable.def |    2 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl                              |  103 ++++++------
 8 files changed, 250 insertions(+), 205 deletions(-)

diff --git a/_Main/BL/Type_EnginePipelineReport/Method_Clear.qbl b/_Main/BL/Type_EnginePipelineReport/Method_Clear.qbl
index 345583b..53536de 100644
--- a/_Main/BL/Type_EnginePipelineReport/Method_Clear.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/Method_Clear.qbl
@@ -11,8 +11,8 @@
     // 鐢勫叞楦� Jun-25-2024 (created)
     this.Column( relflush );
     this.Row( relflush );
-    this.Column( relnew, Name := '', TimeUnit := timeunit );
-    this.Column( relnew, Name := '', TimeUnit := timeunit );
+    //this.Column( relnew, Name := '', TimeUnit := timeunit );
+    //this.Column( relnew, Name := '', TimeUnit := timeunit );
     this.GenerateColumn( this.Source().MacroPlan(), timeunit, startdate, enddate );
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineRow/StaticMethod_CraeteCellValueForRow.qbl b/_Main/BL/Type_EnginePipelineRow/StaticMethod_CraeteCellValueForRow.qbl
index 2d828d6..7eac237 100644
--- a/_Main/BL/Type_EnginePipelineRow/StaticMethod_CraeteCellValueForRow.qbl
+++ b/_Main/BL/Type_EnginePipelineRow/StaticMethod_CraeteCellValueForRow.qbl
@@ -12,10 +12,10 @@
   [*
     // 鐢勫叞楦� Jul-11-2024 (created)
     row           := table.Row( relnew, Name := name, RowNr := rownr, Product := product, Demand := demand );
-    traverse( table, Column, column ){
-      cell        := column.CellValue( relnew, Value := '0' );
-      row.CellValue( relinsert, cell );
-    }
+    //traverse( table, Column, column ){
+    //  cell        := column.CellValue( relnew, Value := '0' );
+    //  row.CellValue( relinsert, cell );
+    //}
     return row;
   *]
 }
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
index ac8db97..bad3460 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
@@ -12,32 +12,32 @@
   TextBody:
   [*
     
-    table := selectobject( macroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
+    table                         := selectobject( macroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
     
-    xmlDOMI := XMLDOMImplementation::Create();
-    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
+    xmlDOMI                       := XMLDOMImplementation::Create();
+    xmlDOM                        := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
     
-    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    tableElement                  := xmlDOM.GetElementByTagName( "table", 0 );
     //Search
-    searchcolumnelement := xmlDOM.CreateElement( "column" );
-    searchnameelement   := xmlDOM.CreateElement( "name" );
-    searchtypeelement   := xmlDOM.CreateElement( "type" );
+    searchcolumnelement           := xmlDOM.CreateElement( "column" );
+    searchnameelement             := xmlDOM.CreateElement( "name" );
+    searchtypeelement             := xmlDOM.CreateElement( "type" );
     searchnameelement.TextContent( 'Search' );
     searchtypeelement.TextContent( "String" );
     searchcolumnelement.AppendChild( searchnameelement );
     searchcolumnelement.AppendChild( searchtypeelement );
     //Product
-    productcolumnelement := xmlDOM.CreateElement( "column" );
-    productnameelement   := xmlDOM.CreateElement( "name" );
-    producttypeelement   := xmlDOM.CreateElement( "type" );
+    productcolumnelement          := xmlDOM.CreateElement( "column" );
+    productnameelement            := xmlDOM.CreateElement( "name" );
+    producttypeelement            := xmlDOM.CreateElement( "type" );
     productnameelement.TextContent( 'Product' );
     producttypeelement.TextContent( "String" );
     productcolumnelement.AppendChild( productnameelement );
     productcolumnelement.AppendChild( producttypeelement );
     //Unit
-    unitcolumnelement := xmlDOM.CreateElement( "column" );
-    unitnameelement   := xmlDOM.CreateElement( "name" );
-    unittypeelement   := xmlDOM.CreateElement( "type" );
+    unitcolumnelement             := xmlDOM.CreateElement( "column" );
+    unitnameelement               := xmlDOM.CreateElement( "name" );
+    unittypeelement               := xmlDOM.CreateElement( "type" );
     unitnameelement.TextContent( 'Unit' );
     unittypeelement.TextContent( "String" );
     unitcolumnelement.AppendChild( unitnameelement );
@@ -46,94 +46,99 @@
     tableElement.AppendChild( searchcolumnelement ); 
     tableElement.AppendChild( productcolumnelement ); 
     tableElement.AppendChild( unitcolumnelement ); 
-    searchtotal     := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 4 ;
-    searchunitElement := xmlDOM.CreateElement( "cell" );
+    searchtotal                   := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 4 ;
+    searchunitElement             := xmlDOM.CreateElement( "cell" );
     searchunitElement.SetAttribute( "value", 'Unit' );
     searchcolumnelement.AppendChild( searchunitElement );
     traverse( factorys, Elements, factory ){
-      searchunitcellElement := xmlDOM.CreateElement( "cell" );
+      searchunitcellElement       := xmlDOM.CreateElement( "cell" );
       searchunitcellElement.SetAttribute( "value", factory.Name() );
       searchcolumnelement.AppendChild( searchunitcellElement );
     }
-    searchgenerationElement := xmlDOM.CreateElement( "cell" );
+    searchgenerationElement       := xmlDOM.CreateElement( "cell" );
     searchgenerationElement.SetAttribute( "value", 'Generation' );
     searchcolumnelement.AppendChild( searchgenerationElement );
     traverse( generations, Elements, generation ){
-      generationcellElement := xmlDOM.CreateElement( "cell" );
+      generationcellElement       := xmlDOM.CreateElement( "cell" );
       generationcellElement.SetAttribute( "value", generation.Generation() );
       searchcolumnelement.AppendChild( generationcellElement );
     }
-    searchpowerElement := xmlDOM.CreateElement( "cell" );
+    searchpowerElement            := xmlDOM.CreateElement( "cell" );
     searchpowerElement.SetAttribute( "value", 'Power' );
     searchcolumnelement.AppendChild( searchpowerElement );
     traverse( powers, Elements, power ){
-      searchpowercellElement := xmlDOM.CreateElement( "cell" );
+      searchpowercellElement      := xmlDOM.CreateElement( "cell" );
       searchpowercellElement.SetAttribute( "value", power.Power() );
       searchcolumnelement.AppendChild( searchpowercellElement );
     }
-    searchmlbmqlElement := xmlDOM.CreateElement( "cell" );
+    searchmlbmqlElement           := xmlDOM.CreateElement( "cell" );
     searchmlbmqlElement.SetAttribute( "value", 'MQBMLB' );
     searchcolumnelement.AppendChild( searchmlbmqlElement );
     traverse( mlbmqls, Elements, mlbmql ){
-      searchmlbmqlcellElement := xmlDOM.CreateElement( "cell" );
+      searchmlbmqlcellElement     := xmlDOM.CreateElement( "cell" );
       searchmlbmqlcellElement.SetAttribute( "value", mlbmql.MLBMQB() );
       searchcolumnelement.AppendChild( searchmlbmqlcellElement );
     }
     
-    minindex        := min( table, FinancialProductionColumn, column, not column.IsDay(), column.Index() );
+    for( i := searchtotal; i < table.FinancialProductionRow( relsize ); i := i + 1 ){
+      searchcellElement           := xmlDOM.CreateElement( "cell" );
+      searchcellElement.SetAttribute( "value", '' );
+      searchcolumnelement.AppendChild( searchcellElement );
+    }
+    
+    minindex                      := min( table, FinancialProductionColumn, column, not column.IsDay(), column.Index() );
     traverse ( table, FinancialProductionColumn, column, not column.IsDay() ) {
-      columnelement := xmlDOM.CreateElement( "column" );
-      nameelement   := xmlDOM.CreateElement( "name" );
-      typeelement   := xmlDOM.CreateElement( "type" );
+      columnelement               := xmlDOM.CreateElement( "column" );
+      nameelement                 := xmlDOM.CreateElement( "name" );
+      typeelement                 := xmlDOM.CreateElement( "type" );
       nameelement.TextContent( column.Name() );
       typeelement.TextContent( "String" );
       columnelement.AppendChild( nameelement );
       columnelement.AppendChild( typeelement );
       
-      cells := selectsortedset( column, FinancialProductionCell, cell, cell.FinancialProductionRow().RowNr() );
+      cells                       := selectsortedset( column, FinancialProductionCell, cell, cell.FinancialProductionRow().RowNr() );
     
       traverse ( cells, Elements, c ) {
         if( column.Index() = minindex ){
-          row := c.FinancialProductionRow();
+          row                     := c.FinancialProductionRow();
           //Product
-          productcellElement := xmlDOM.CreateElement( "cell" );
+          productcellElement      := xmlDOM.CreateElement( "cell" );
           productcellElement.SetAttribute( "value", row.Name() );
           productcolumnelement.AppendChild( productcellElement );
           //Unit
-          unitcellElement := xmlDOM.CreateElement( "cell" );
+          unitcellElement         := xmlDOM.CreateElement( "cell" );
           unitcellElement.SetAttribute( "value", row.Unit() );
           unitcolumnelement.AppendChild( unitcellElement );
-          if( cells.Size() > searchtotal ){
-            for( i := searchtotal; i < cells.Size(); i := i + 1 ){
-              searchcellElement1 := xmlDOM.CreateElement( "cell" );
-              searchcellElement1.SetAttribute( "value", '' );
-              searchcolumnelement.AppendChild( searchcellElement1 );
-            }
-          }
         }
-        cellElement := xmlDOM.CreateElement( "cell" );
+        cellElement               := xmlDOM.CreateElement( "cell" );
         cellElement.SetAttribute( "value", c.Value() ); 
         columnelement.AppendChild( cellElement );
       }
-      if( cells.Size() < searchtotal ){
-        for( i := cells.Size(); i < searchtotal; i := i + 1 ){
-          searchcellElement1 := xmlDOM.CreateElement( "cell" );
-          searchcellElement1.SetAttribute( "value", '' );
-          searchcolumnelement.AppendChild( searchcellElement1 );
+      for( i := cells.Size(); i < searchtotal; i := i + 1 ){
+        searchcellElement         := xmlDOM.CreateElement( "cell" );
+        searchcellElement.SetAttribute( "value", '' );
+        columnelement.AppendChild( searchcellElement );
+        
+        if( column.Index() = minindex ){
+          productcellElement      := xmlDOM.CreateElement( "cell" );
+          productcellElement.SetAttribute( "value", '' );
+          productcolumnelement.AppendChild( productcellElement );
+          //Unit
+          unitcellElement         := xmlDOM.CreateElement( "cell" );
+          unitcellElement.SetAttribute( "value", '' );
+          unitcolumnelement.AppendChild( unitcellElement );
         }
       }
       tableElement.AppendChild( columnelement );  
     }
     
-    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    xmlString                     := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
     
-    //info( xmlString );
-    
-    tableGroupHandle := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
-    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle              := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
+    tableHandle                   := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
     
-    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    binaryData                    := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
     
     return binaryData.AsBinaryValue();
   *]
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
index 1bdd2e2..6edd436 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
@@ -12,32 +12,32 @@
   TextBody:
   [*
     
-    table := selectobject( macroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
+    table                         := selectobject( macroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
     
-    xmlDOMI := XMLDOMImplementation::Create();
-    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
+    xmlDOMI                       := XMLDOMImplementation::Create();
+    xmlDOM                        := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
     
-    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    tableElement                  := xmlDOM.GetElementByTagName( "table", 0 );
     //Search
-    searchcolumnelement := xmlDOM.CreateElement( "column" );
-    searchnameelement   := xmlDOM.CreateElement( "name" );
-    searchtypeelement   := xmlDOM.CreateElement( "type" );
+    searchcolumnelement           := xmlDOM.CreateElement( "column" );
+    searchnameelement             := xmlDOM.CreateElement( "name" );
+    searchtypeelement             := xmlDOM.CreateElement( "type" );
     searchnameelement.TextContent( 'Search' );
     searchtypeelement.TextContent( "String" );
     searchcolumnelement.AppendChild( searchnameelement );
     searchcolumnelement.AppendChild( searchtypeelement );
     //Product
-    productcolumnelement := xmlDOM.CreateElement( "column" );
-    productnameelement   := xmlDOM.CreateElement( "name" );
-    producttypeelement   := xmlDOM.CreateElement( "type" );
+    productcolumnelement          := xmlDOM.CreateElement( "column" );
+    productnameelement            := xmlDOM.CreateElement( "name" );
+    producttypeelement            := xmlDOM.CreateElement( "type" );
     productnameelement.TextContent( 'Product' );
     producttypeelement.TextContent( "String" );
     productcolumnelement.AppendChild( productnameelement );
     productcolumnelement.AppendChild( producttypeelement );
     //Unit
-    unitcolumnelement := xmlDOM.CreateElement( "column" );
-    unitnameelement   := xmlDOM.CreateElement( "name" );
-    unittypeelement   := xmlDOM.CreateElement( "type" );
+    unitcolumnelement             := xmlDOM.CreateElement( "column" );
+    unitnameelement               := xmlDOM.CreateElement( "name" );
+    unittypeelement               := xmlDOM.CreateElement( "type" );
     unitnameelement.TextContent( 'Unit' );
     unittypeelement.TextContent( "String" );
     unitcolumnelement.AppendChild( unitnameelement );
@@ -46,44 +46,51 @@
     tableElement.AppendChild( searchcolumnelement ); 
     tableElement.AppendChild( productcolumnelement ); 
     tableElement.AppendChild( unitcolumnelement ); 
-    searchtotal     := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 4 ;
-    searchunitElement := xmlDOM.CreateElement( "cell" );
+    searchtotal                   := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 4 ;
+    searchunitElement             := xmlDOM.CreateElement( "cell" );
     searchunitElement.SetAttribute( "value", 'Unit' );
     searchcolumnelement.AppendChild( searchunitElement );
     traverse( factorys, Elements, factory ){
-      searchunitcellElement := xmlDOM.CreateElement( "cell" );
+      searchunitcellElement       := xmlDOM.CreateElement( "cell" );
       searchunitcellElement.SetAttribute( "value", factory.Name() );
       searchcolumnelement.AppendChild( searchunitcellElement );
     }
-    searchgenerationElement := xmlDOM.CreateElement( "cell" );
+    searchgenerationElement       := xmlDOM.CreateElement( "cell" );
     searchgenerationElement.SetAttribute( "value", 'Generation' );
     searchcolumnelement.AppendChild( searchgenerationElement );
     traverse( generations, Elements, generation ){
-      generationcellElement := xmlDOM.CreateElement( "cell" );
+      generationcellElement       := xmlDOM.CreateElement( "cell" );
       generationcellElement.SetAttribute( "value", generation.Generation() );
       searchcolumnelement.AppendChild( generationcellElement );
     }
-    searchpowerElement := xmlDOM.CreateElement( "cell" );
+    searchpowerElement            := xmlDOM.CreateElement( "cell" );
     searchpowerElement.SetAttribute( "value", 'Power' );
     searchcolumnelement.AppendChild( searchpowerElement );
     traverse( powers, Elements, power ){
-      searchpowercellElement := xmlDOM.CreateElement( "cell" );
+      searchpowercellElement      := xmlDOM.CreateElement( "cell" );
       searchpowercellElement.SetAttribute( "value", power.Power() );
       searchcolumnelement.AppendChild( searchpowercellElement );
     }
-    searchmlbmqlElement := xmlDOM.CreateElement( "cell" );
+    searchmlbmqlElement           := xmlDOM.CreateElement( "cell" );
     searchmlbmqlElement.SetAttribute( "value", 'MQBMLB' );
     searchcolumnelement.AppendChild( searchmlbmqlElement );
     traverse( mlbmqls, Elements, mlbmql ){
-      searchmlbmqlcellElement := xmlDOM.CreateElement( "cell" );
+      searchmlbmqlcellElement     := xmlDOM.CreateElement( "cell" );
       searchmlbmqlcellElement.SetAttribute( "value", mlbmql.MLBMQB() );
       searchcolumnelement.AppendChild( searchmlbmqlcellElement );
     }
+    
+    for( i := searchtotal; i < table.FinancialSalesRow( relsize ); i := i + 1 ){
+      searchcellElement           := xmlDOM.CreateElement( "cell" );
+      searchcellElement.SetAttribute( "value", '' );
+      searchcolumnelement.AppendChild( searchcellElement );
+    }
+    
     minindex        := min( table, FinancialSalesColumn, column, not column.IsDay(), column.Index() );
     traverse ( table, FinancialSalesColumn, column, not column.IsDay() ) {
-      columnelement := xmlDOM.CreateElement( "column" );
-      nameelement   := xmlDOM.CreateElement( "name" );
-      typeelement   := xmlDOM.CreateElement( "type" );
+      columnelement               := xmlDOM.CreateElement( "column" );
+      nameelement                 := xmlDOM.CreateElement( "name" );
+      typeelement                 := xmlDOM.CreateElement( "type" );
       nameelement.TextContent( column.Name() );
       typeelement.TextContent( "String" );
       columnelement.AppendChild( nameelement );
@@ -93,46 +100,52 @@
     
       traverse ( cells, Elements, c ) {
         if( column.Index() = minindex ){
-          row := c.FinancialSalesRow();
+          row                     := c.FinancialSalesRow();
           //Product
-          productcellElement := xmlDOM.CreateElement( "cell" );
+          productcellElement      := xmlDOM.CreateElement( "cell" );
           productcellElement.SetAttribute( "value", row.Name() );
           productcolumnelement.AppendChild( productcellElement );
           //Unit
-          unitcellElement := xmlDOM.CreateElement( "cell" );
+          unitcellElement         := xmlDOM.CreateElement( "cell" );
           unitcellElement.SetAttribute( "value", row.Unit() );
           unitcolumnelement.AppendChild( unitcellElement );
           if( cells.Size() > searchtotal ){
             for( i := searchtotal; i < cells.Size(); i := i + 1 ){
-              searchcellElement1 := xmlDOM.CreateElement( "cell" );
+              searchcellElement1  := xmlDOM.CreateElement( "cell" );
               searchcellElement1.SetAttribute( "value", '' );
               searchcolumnelement.AppendChild( searchcellElement1 );
             }
           }
         }
-        cellElement := xmlDOM.CreateElement( "cell" );
+        cellElement               := xmlDOM.CreateElement( "cell" );
         cellElement.SetAttribute( "value", c.Value() ); 
         columnelement.AppendChild( cellElement );
       }
-      if( cells.Size() < searchtotal ){
-        for( i := cells.Size(); i < searchtotal; i := i + 1 ){
-          searchcellElement1 := xmlDOM.CreateElement( "cell" );
-          searchcellElement1.SetAttribute( "value", '' );
-          searchcolumnelement.AppendChild( searchcellElement1 );
+      for( i := cells.Size(); i < searchtotal; i := i + 1 ){
+        searchcellElement         := xmlDOM.CreateElement( "cell" );
+        searchcellElement.SetAttribute( "value", '' );
+        columnelement.AppendChild( searchcellElement );
+        
+        if( column.Index() = minindex ){
+          productcellElement      := xmlDOM.CreateElement( "cell" );
+          productcellElement.SetAttribute( "value", '' );
+          productcolumnelement.AppendChild( productcellElement );
+          //Unit
+          unitcellElement         := xmlDOM.CreateElement( "cell" );
+          unitcellElement.SetAttribute( "value", '' );
+          unitcolumnelement.AppendChild( unitcellElement );
         }
       }
       tableElement.AppendChild( columnelement );  
     }
     
-    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
+    xmlString                     := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
     
-    //info( xmlString );
-    
-    tableGroupHandle := TableGroupHandle::Create( FinancialSalesReport::GetDefaultName() );
-    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle              := TableGroupHandle::Create( FinancialSalesReport::GetDefaultName() );
+    tableHandle                   := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
     
-    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    binaryData                    := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
     
     return binaryData.AsBinaryValue();
   *]
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
index 06cfb30..c989643 100644
--- a/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
@@ -13,40 +13,40 @@
   TextBody:
   [*
     
-    table := selectobject( macroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
+    table                       := selectobject( macroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
     
-    xmlDOMI := XMLDOMImplementation::Create();
-    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
+    xmlDOMI                     := XMLDOMImplementation::Create();
+    xmlDOM                      := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
     
-    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    tableElement                := xmlDOM.GetElementByTagName( "table", 0 );
     //Search
-    searchcolumnelement := xmlDOM.CreateElement( "column" );
-    searchnameelement   := xmlDOM.CreateElement( "name" );
-    searchtypeelement   := xmlDOM.CreateElement( "type" );
+    searchcolumnelement         := xmlDOM.CreateElement( "column" );
+    searchnameelement           := xmlDOM.CreateElement( "name" );
+    searchtypeelement           := xmlDOM.CreateElement( "type" );
     searchnameelement.TextContent( 'Search' );
     searchtypeelement.TextContent( "String" );
     searchcolumnelement.AppendChild( searchnameelement );
     searchcolumnelement.AppendChild( searchtypeelement );
     //Product
-    productcolumnelement := xmlDOM.CreateElement( "column" );
-    productnameelement   := xmlDOM.CreateElement( "name" );
-    producttypeelement   := xmlDOM.CreateElement( "type" );
+    productcolumnelement        := xmlDOM.CreateElement( "column" );
+    productnameelement          := xmlDOM.CreateElement( "name" );
+    producttypeelement          := xmlDOM.CreateElement( "type" );
     productnameelement.TextContent( 'Product' );
     producttypeelement.TextContent( "String" );
     productcolumnelement.AppendChild( productnameelement );
     productcolumnelement.AppendChild( producttypeelement );
     //Unit
-    unitcolumnelement := xmlDOM.CreateElement( "column" );
-    unitnameelement   := xmlDOM.CreateElement( "name" );
-    unittypeelement   := xmlDOM.CreateElement( "type" );
+    unitcolumnelement           := xmlDOM.CreateElement( "column" );
+    unitnameelement             := xmlDOM.CreateElement( "name" );
+    unittypeelement             := xmlDOM.CreateElement( "type" );
     unitnameelement.TextContent( 'Unit' );
     unittypeelement.TextContent( "String" );
     unitcolumnelement.AppendChild( unitnameelement );
     unitcolumnelement.AppendChild( unittypeelement );
     //Attribute
-    attricolumnelement := xmlDOM.CreateElement( "column" );
-    attrinameelement   := xmlDOM.CreateElement( "name" );
-    attritypeelement   := xmlDOM.CreateElement( "type" );
+    attricolumnelement          := xmlDOM.CreateElement( "column" );
+    attrinameelement            := xmlDOM.CreateElement( "name" );
+    attritypeelement            := xmlDOM.CreateElement( "type" );
     attrinameelement.TextContent( 'Attribute' );
     attritypeelement.TextContent( "String" );
     attricolumnelement.AppendChild( attrinameelement );
@@ -56,159 +56,169 @@
     tableElement.AppendChild( productcolumnelement ); 
     tableElement.AppendChild( unitcolumnelement ); 
     tableElement.AppendChild( attricolumnelement );
-    searchtotal     := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 10 ;
-    searchunitElement := xmlDOM.CreateElement( "cell" );
+    searchtotal                 := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 10 ;
+    searchunitElement           := xmlDOM.CreateElement( "cell" );
     searchunitElement.SetAttribute( "value", 'Unit' );
     searchcolumnelement.AppendChild( searchunitElement );
     traverse( factorys, Elements, factory ){
-      searchunitcellElement := xmlDOM.CreateElement( "cell" );
+      searchunitcellElement     := xmlDOM.CreateElement( "cell" );
       searchunitcellElement.SetAttribute( "value", factory.Name() );
       searchcolumnelement.AppendChild( searchunitcellElement );
     }
-    searchgenerationElement := xmlDOM.CreateElement( "cell" );
+    searchgenerationElement     := xmlDOM.CreateElement( "cell" );
     searchgenerationElement.SetAttribute( "value", 'Generation' );
     searchcolumnelement.AppendChild( searchgenerationElement );
     traverse( generations, Elements, generation ){
-      generationcellElement := xmlDOM.CreateElement( "cell" );
+      generationcellElement     := xmlDOM.CreateElement( "cell" );
       generationcellElement.SetAttribute( "value", generation.Generation() );
       searchcolumnelement.AppendChild( generationcellElement );
     }
-    searchpowerElement := xmlDOM.CreateElement( "cell" );
+    searchpowerElement          := xmlDOM.CreateElement( "cell" );
     searchpowerElement.SetAttribute( "value", 'Power' );
     searchcolumnelement.AppendChild( searchpowerElement );
     traverse( powers, Elements, power ){
-      searchpowercellElement := xmlDOM.CreateElement( "cell" );
+      searchpowercellElement    := xmlDOM.CreateElement( "cell" );
       searchpowercellElement.SetAttribute( "value", power.Power() );
       searchcolumnelement.AppendChild( searchpowercellElement );
     }
-    searchmlbmqlElement := xmlDOM.CreateElement( "cell" );
+    searchmlbmqlElement         := xmlDOM.CreateElement( "cell" );
     searchmlbmqlElement.SetAttribute( "value", 'MQBMLB' );
     searchcolumnelement.AppendChild( searchmlbmqlElement );
     traverse( mlbmqls, Elements, mlbmql ){
-      searchmlbmqlcellElement := xmlDOM.CreateElement( "cell" );
+      searchmlbmqlcellElement   := xmlDOM.CreateElement( "cell" );
       searchmlbmqlcellElement.SetAttribute( "value", mlbmql.MLBMQB() );
       searchcolumnelement.AppendChild( searchmlbmqlcellElement );
     }
-    searchstartdateElement := xmlDOM.CreateElement( "cell" );
+    searchstartdateElement      := xmlDOM.CreateElement( "cell" );
     searchstartdateElement.SetAttribute( "value", 'Start date' );
     searchcolumnelement.AppendChild( searchstartdateElement );
-    searchstartdatecellElement := xmlDOM.CreateElement( "cell" );
+    searchstartdatecellElement  := xmlDOM.CreateElement( "cell" );
     searchstartdatecellElement.SetAttribute( "value", search.StartDate().Format( 'M2/D2/Y' ) );
     searchcolumnelement.AppendChild( searchstartdatecellElement );
-    searchenddateElement := xmlDOM.CreateElement( "cell" );
+    searchenddateElement        := xmlDOM.CreateElement( "cell" );
     searchenddateElement.SetAttribute( "value", 'End date' );
     searchcolumnelement.AppendChild( searchenddateElement );
-    searchenddatecellElement := xmlDOM.CreateElement( "cell" );
+    searchenddatecellElement    := xmlDOM.CreateElement( "cell" );
     searchenddatecellElement.SetAttribute( "value", search.EndDate().Format( 'M2/D2/Y' ) );
     searchcolumnelement.AppendChild( searchenddatecellElement );
-    searchcellElement1 := xmlDOM.CreateElement( "cell" );
-    searchcellElement1.SetAttribute( "value", 'Periods' );
-    searchcolumnelement.AppendChild( searchcellElement1 );
-    searchcellElement1 := xmlDOM.CreateElement( "cell" );
-    searchcellElement1.SetAttribute( "value", search.Category() );
-    searchcolumnelement.AppendChild( searchcellElement1 );
+    searchperiodElement         := xmlDOM.CreateElement( "cell" );
+    searchperiodElement.SetAttribute( "value", 'Periods' );
+    searchcolumnelement.AppendChild( searchperiodElement );
+    searchperiodcellElement     := xmlDOM.CreateElement( "cell" );
+    searchperiodcellElement.SetAttribute( "value", search.Category() );
+    searchcolumnelement.AppendChild( searchperiodcellElement );
+    
+    for( i := searchtotal; i < table.InventroySummaryRow( relsize ) * 4; i := i + 1 ){
+      searchcellElement         := xmlDOM.CreateElement( "cell" );
+      searchcellElement.SetAttribute( "value", '' );
+      searchcolumnelement.AppendChild( searchcellElement );
+    }
+    
     traverse ( table, InventorySummaryColumn, column ) {
-      columnelement := xmlDOM.CreateElement( "column" );
-      nameelement   := xmlDOM.CreateElement( "name" );
-      typeelement   := xmlDOM.CreateElement( "type" );
+      columnelement             := xmlDOM.CreateElement( "column" );
+      nameelement               := xmlDOM.CreateElement( "name" );
+      typeelement               := xmlDOM.CreateElement( "type" );
       nameelement.TextContent( column.Name() );
       typeelement.TextContent( "String" );
       columnelement.AppendChild( nameelement );
       columnelement.AppendChild( typeelement );
       
-      cells := selectsortedset( column, InventorySummaryCell, cell, cell.InventroySummaryRow().RowNr() );
+      cells                     := selectsortedset( column, InventorySummaryCell, cell, cell.InventroySummaryRow().RowNr() );
     
       traverse ( cells, Elements, c ) {
         if( column.Index() = 0 ){
-          row := c.InventroySummaryRow();
+          row                   := c.InventroySummaryRow();
           //Product
-          productcellElement1 := xmlDOM.CreateElement( "cell" );
+          productcellElement1   := xmlDOM.CreateElement( "cell" );
           productcellElement1.SetAttribute( "value", row.Name() );
           productcolumnelement.AppendChild( productcellElement1 );
-          productcellElement2 := xmlDOM.CreateElement( "cell" );
+          productcellElement2   := xmlDOM.CreateElement( "cell" );
           productcellElement2.SetAttribute( "value", row.Name() );
           productcolumnelement.AppendChild( productcellElement2 );
-          productcellElement3 := xmlDOM.CreateElement( "cell" );
+          productcellElement3   := xmlDOM.CreateElement( "cell" );
           productcellElement3.SetAttribute( "value", row.Name() );
           productcolumnelement.AppendChild( productcellElement3 );
-          productcellElement4 := xmlDOM.CreateElement( "cell" );
+          productcellElement4   := xmlDOM.CreateElement( "cell" );
           productcellElement4.SetAttribute( "value", row.Name() );
           productcolumnelement.AppendChild( productcellElement4 );
           //Unit
-          unitcellElement1 := xmlDOM.CreateElement( "cell" );
+          unitcellElement1      := xmlDOM.CreateElement( "cell" );
           unitcellElement1.SetAttribute( "value", row.Unit() );
           unitcolumnelement.AppendChild( unitcellElement1 );
-          unitcellElement2 := xmlDOM.CreateElement( "cell" );
+          unitcellElement2      := xmlDOM.CreateElement( "cell" );
           unitcellElement2.SetAttribute( "value", row.Unit() );
           unitcolumnelement.AppendChild( unitcellElement2 );
-          unitcellElement3 := xmlDOM.CreateElement( "cell" );
+          unitcellElement3      := xmlDOM.CreateElement( "cell" );
           unitcellElement3.SetAttribute( "value", row.Unit() );
           unitcolumnelement.AppendChild( unitcellElement3 );
-          unitcellElement4 := xmlDOM.CreateElement( "cell" );
+          unitcellElement4      := xmlDOM.CreateElement( "cell" );
           unitcellElement4.SetAttribute( "value", row.Unit() );
           unitcolumnelement.AppendChild( unitcellElement4 );
           //Attribute
           //鏈熸湯搴撳瓨
-          endcellElement := xmlDOM.CreateElement( "cell" );
+          endcellElement        := xmlDOM.CreateElement( "cell" );
           endcellElement.SetAttribute( "value", '鏈熸湯搴撳瓨' );//EndingInventory
           attricolumnelement.AppendChild( endcellElement );
           //鏈�灏忓簱瀛�
-          mincellElement := xmlDOM.CreateElement( "cell" );
+          mincellElement        := xmlDOM.CreateElement( "cell" );
           mincellElement.SetAttribute( "value", '鏈�灏忓簱瀛�' );//MinimumInventory
           attricolumnelement.AppendChild( mincellElement );
           //鏈�澶у簱瀛�
-          maxcellElement := xmlDOM.CreateElement( "cell" );
+          maxcellElement        := xmlDOM.CreateElement( "cell" );
           maxcellElement.SetAttribute( "value", '鏈�澶у簱瀛�' );//MaximumInventory
           attricolumnelement.AppendChild( maxcellElement );
           //骞冲潎搴撳瓨
-          avecellElement := xmlDOM.CreateElement( "cell" );
+          avecellElement        := xmlDOM.CreateElement( "cell" );
           avecellElement.SetAttribute( "value", '骞冲潎搴撳瓨' );//AverageInventory
           attricolumnelement.AppendChild( avecellElement );
-          
-          if( cells.Size() > searchtotal ){
-            for( i := searchtotal; i < cells.Size(); i := i + 1 ){
-              searchcellElement1 := xmlDOM.CreateElement( "cell" );
-              searchcellElement1.SetAttribute( "value", '' );
-              searchcolumnelement.AppendChild( searchcellElement1 );
-            }
-          }
+    
         }
         //鏈熸湯搴撳瓨
-        endcellElement := xmlDOM.CreateElement( "cell" );
+        endcellElement          := xmlDOM.CreateElement( "cell" );
         endcellElement.SetAttribute( "value", [String]c.EndingInventory() );
         columnelement.AppendChild( endcellElement );
         //鏈�灏忓簱瀛�
-        mincellElement := xmlDOM.CreateElement( "cell" );
+        mincellElement          := xmlDOM.CreateElement( "cell" );
         mincellElement.SetAttribute( "value", [String]c.MinimumInventory() );
         columnelement.AppendChild( mincellElement );
         //鏈�澶у簱瀛�
-        maxcellElement := xmlDOM.CreateElement( "cell" );
+        maxcellElement          := xmlDOM.CreateElement( "cell" );
         maxcellElement.SetAttribute( "value", [String]c.MaximumInventory() );
         columnelement.AppendChild( maxcellElement );
         //骞冲潎搴撳瓨
-        avecellElement := xmlDOM.CreateElement( "cell" );
+        avecellElement          := xmlDOM.CreateElement( "cell" );
         avecellElement.SetAttribute( "value", [String]c.AverageInventory() );
         columnelement.AppendChild( avecellElement );
       }
-      if( cells.Size() < searchtotal ){
-        for( i := cells.Size(); i < searchtotal; i := i + 1 ){
-          searchcellElement1 := xmlDOM.CreateElement( "cell" );
-          searchcellElement1.SetAttribute( "value", '' );
-          searchcolumnelement.AppendChild( searchcellElement1 );
+      for( i := cells.Size() * 4; i < searchtotal; i := i + 1 ){
+        searchcellElement       := xmlDOM.CreateElement( "cell" );
+        searchcellElement.SetAttribute( "value", '' );
+        columnelement.AppendChild( searchcellElement );
+        if( column.Index() = 0 ){
+          productcellElement    := xmlDOM.CreateElement( "cell" );
+          productcellElement.SetAttribute( "value", '' );
+          productcolumnelement.AppendChild( productcellElement );
+          
+          unitcellElement       := xmlDOM.CreateElement( "cell" );
+          unitcellElement.SetAttribute( "value", '' );
+          unitcolumnelement.AppendChild( unitcellElement );
+            
+          endcellElement        := xmlDOM.CreateElement( "cell" );
+          endcellElement.SetAttribute( "value", '' );//EndingInventory
+          attricolumnelement.AppendChild( endcellElement );
+          
         }
       }
       tableElement.AppendChild( columnelement );  
     }
     
-    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
+    xmlString                   := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
     
-    //info( xmlString );
-    
-    tableGroupHandle := TableGroupHandle::Create( InventorySummaryReport::GetDefaultName() );
-    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle            := TableGroupHandle::Create( InventorySummaryReport::GetDefaultName() );
+    tableHandle                 := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
     tableGroupHandle.Add( tableHandle );
     
-    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    binaryData                  := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
     
     return binaryData.AsBinaryValue();
   *]
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
index 98564c2..dac2ffe 100644
--- a/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
@@ -36,43 +36,39 @@
         
         // 杩愯緭鎴愭湰鍙傛暟
         lct  := select( macroPlan, LogisticsCostTransport, tempLCT, 
-                        tempLCT.Product()     = mlcrr.Category()                                                   and 
-                        tempLCT.Origin()      = ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "闀挎槬澶栫搴�", "澶ц繛鍘傚唴搴�" ) and 
-                        tempLCT.Destination() = ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "澶ц繛鍦哄唴搴�", "闀挎槬澶栫搴�" ) );
-        lct1 := select( macroPlan, LogisticsCostTransport, tempLCT, 
-                        tempLCT.Product()     = mlcrr.Category()                                                   and 
-                        tempLCT.Origin()      = ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "澶ц繛鍘傚唴搴�", "CC 鍘傚唴搴�" ) and 
-                        tempLCT.Destination() = ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "澶ц繛澶栫搴�", "闀挎槬澶栫搴�" ) );
-                        
-         // 褰撳墠鏈堟湯鏈�鍚庝竴澶╂棩鏈�                
-        lastDayOfThisMonth := mlcrc.StartDate().StartOfNextMonth() - 1; 
-        
+                        tempLCT.Product()     = mlcrr.Category()                                                                                                                         and
+                        tempLCT.Origin()      = ifexpr( mlcrr.Category() = "AGW", "DL AGW", ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "澶栫搴�" )     and
+                        tempLCT.Destination() = ifexpr( mlcrr.Category() = "AGW", "CC AGW搴撴埧", ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "绾胯竟搴�" ) );
+
+         // 褰撳墠鏈堟湯鏈�鍚庝竴澶╂棩鏈�
+        lastDayOfThisMonth := mlcrc.StartDate().StartOfNextMonth() - 1;
+
         cell := mlcrr.MachineLogisticsCostReportCell( relnew );
-          
+
         // 璁剧疆鍖呰璐圭敤锛堝寘瑁呴噺 * 鍖呰鍗曚环锛�
-        packageQuantity := sum( macroPlan, PackagingPlanRow.PackagingPlanCell, tempPPC, 
+        packageQuantity := sum( macroPlan, PackagingPlanRow.PackagingPlanCell, tempPPC,
                                 tempPPC.PackagingPlanRow().Category()             = mlcrr.Category()          and
                                 tempPPC.PackagingPlanRow().Factory()              = mlcrr.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, 
+        unpackingQuantity := sum( macroPlan, PackagingPlanRow.PackagingPlanCell, tempPPC,
                                   tempPPC.PackagingPlanRow().Category()             = mlcrr.Category()          and
                                   tempPPC.PackagingPlanRow().Factory()              = mlcrr.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.WoodenCratePriceReal( guard( lcm.WoodenCratePrice(), 1 ) );
-          
+
         // 璁剧疆璋冩嫧璐圭敤锛堣皟鎷ㄦ暟閲� / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 杩愯緭鍗曚环锛�
         transferQuantity := sum( macroPlan, TransferPlanRow.TransferPlanCell, tempTPC,
                                  tempTPC.TransferPlanRow().Category()                      = mlcrr.Category()                                               and
@@ -80,25 +76,35 @@
                                  guard( tempTPC.TransferPlanColumn().ColumnDate().Year()   = mlcrc.StartDate().Year(), false )                              and
                                  guard(  tempTPC.TransferPlanColumn().ColumnDate().Month() = mlcrc.StartDate().Month(), false ),
                                  [Number]tempTPC.Value() );
-        cell.TransferCost( transferQuantity / guard( lcm.PackagingCapacity(), 1 ) / guard( lct.LoadingCapacity(), 1 ) * guard( lct.TransportPrice(), 1 ) );
-          
+        cell.TransferCost( [Number] ( [Number] ( 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 ) );
-          
+
         // 澶栫搴撹繍杈撹垂鐢紙杩愯緭鏁伴噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 杩愯緭鍗曚环锛�
-        transportationQuantity := sum( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT, 
-                                       tempPIT.Product_MP().ParentID()                                                  =  mlcrr.Category()   and
-                                       tempPIT.Trip().Departure().Date()                                                >= mlcrc.StartDate()  and
-                                       tempPIT.Trip().Arrival().Date()                                                  <= lastDayOfThisMonth and
-                                       tempPIT.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID()      = "CC 鍘傚唴搴�"         and
-                                       tempPIT.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() = "闀挎槬澶栫搴�",
+        transportationQuantity := sum( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT,
+                                       tempPIT.Product_MP().ParentID()                                                  =  mlcrr.Category()                                                                       and
+                                       tempPIT.Trip().Departure().Date()                                                >= mlcrc.StartDate()                                                                      and
+                                       tempPIT.Trip().Arrival().Date()                                                  <= lastDayOfThisMonth                                                                     and
+                                       tempPIT.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID()      =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "绾胯竟搴�" and
+                                       tempPIT.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "澶栫搴�",
                                        tempPIT.Quantity()
                                       );
-        cell.ExternalRentalWarehouseTransportationCosts( transportationQuantity / guard( lcm.PackagingCapacity(), 1 ) / guard( lct1.LoadingCapacity(), 1 ) * guard( lct1.TransportPrice(), 1 ) );
-        
+        transportationQuantity := transportationQuantity +
+                                  sum( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT,
+                                       tempPIT.Product_MP().ParentID()                                                  =  mlcrr.Category()                                                                       and
+                                       tempPIT.Trip().Departure().Date()                                                >= mlcrc.StartDate()                                                                      and
+                                       tempPIT.Trip().Arrival().Date()                                                  <= lastDayOfThisMonth                                                                     and
+                                       tempPIT.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID()      =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "澶栫搴�" and
+                                       tempPIT.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "绾胯竟搴�",
+                                       tempPIT.Quantity()
+                                      );
+
+        cell.ExternalRentalWarehouseTransportationCosts( transportationQuantity / guard( lcm.PackagingCapacity(), 1 ) / guard( lct.LoadingCapacity(), 1 ) * guard( lct.TransportPrice(), 1 ) );
+
         // 澶栫搴撲粨鍌ㄨ垂鐢細浠撳偍鏁伴噺/鍖呰瀹归噺*浠撳偍鍗曚环
         plannedInventory := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, tempPISPIP,
                                  tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf()                                                                 and
@@ -106,9 +112,20 @@
                                  tempPISPIP.ProductInStockingPoint_MP().Product_MP().ParentID()                                         =  mlcrr.Category()   and
                                  tempPISPIP.Start().Date()                                                                              >= mlcrc.StartDate()  and
                                  tempPISPIP.End().Date()                                                                                <= lastDayOfThisMonth and
-                                 tempPISPIP.ProductInStockingPoint_MP().StockingPointID()                                               =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "澶ц繛澶栫搴�", "闀挎槬澶栫搴�" ),
+                                 tempPISPIP.ProductInStockingPoint_MP().StockingPointID()                                               =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "澶栫搴�",
                                  tempPISPIP.PlannedInventoryLevelEnd() );
         cell.RentalWarehouseStorageFees( plannedInventory / guard( lcm.PackagingCapacity(), 1 ) * guard( lcm.StoragePrice(), 1 ) );
+
+        // 棰勮鎬昏垂鐢�
+        cell.EstimatedTotalCost( cell.PackingCharges() + cell.UnpackingCost() + cell.BufferPaperCost() + cell.WoodenCrateCost() + cell.TransferCost() +
+                                 cell.StorageFeesForRentedWarehouses() + cell.OutboundExpensesForRentedWarehouses() + cell.ExternalRentalWarehouseTransportationCosts() +
+                                 cell.RentalWarehouseStorageFees() );
+
+        // 绯绘暟
+        cell.Coefficient( 1.05 );
+
+        // 鎬昏垂鐢�
+        cell.TotalCost( cell.EstimatedTotalCost() * cell.Coefficient() );
         
         cell.MachineLogisticsCostReportColumn( relset, mlcrc );
       }
diff --git a/_Main/Sys/Repr/Global/PackagingPlanCell.qrp b/_Main/Sys/Repr/Global/PackagingPlanCell.qrp
index 876c5e6..d0c1d6f 100644
--- a/_Main/Sys/Repr/Global/PackagingPlanCell.qrp
+++ b/_Main/Sys/Repr/Global/PackagingPlanCell.qrp
@@ -30,7 +30,7 @@
   AttributeRepresentation PackagingInventory
   {
     AttributeKey: '[413988.0.1393320143]'
-    Synonym: 'Packaged'
+    Synonym: 'Packaged inventory'
   }
   AttributeRepresentation TransferIn
   {
@@ -40,7 +40,7 @@
   AttributeRepresentation UnpackagedInventory
   {
     AttributeKey: '[413988.0.1393320130]'
-    Synonym: 'Unpackaged'
+    Synonym: 'Unpackaged inventory'
   }
   AttributeRepresentation Unpacking
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_MatrixEditorTable.def
index 1b36875..bee63fd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_MatrixEditorTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_MatrixEditorTable.def
@@ -53,7 +53,7 @@
       ]
       Properties:
       [
-        Legend: 'ShowName'
+        Legend: 'Name'
         SortCriteria: 'RowNr'
         Taborder: 1
       ]

--
Gitblit v1.9.3