From 5e5f64f57af3862ebf7c9241dc848f97572f96b2 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期五, 01 十一月 2024 12:39:21 +0800
Subject: [PATCH] 机加管线报表库存计算bug

---
 _Main/BL/Type_EnginePipelineReport/Method_Generate.qbl |  174 +++++++++++++++++++++------------------------------------
 1 files changed, 65 insertions(+), 109 deletions(-)

diff --git a/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl b/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl
index 5a7b2b7..cf500dd 100644
--- a/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl
@@ -24,11 +24,12 @@
     sumstr                  := sumname.Format( 'S(Len(10))' );
     sumrowproduction        := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '鎬讳骇閲�' ), sumname, '', rows.Size() * cellnr );
     sumrowdlproduction      := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '澶ц繛浜ч噺' ), sumname, '', sumrowproduction.RowNr() + 1 );
-    sumrowccproduction      := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '闀挎槬浜ч噺' ), sumname, '', sumrowproduction.RowNr() + 2  );
-    sumrowdemand            := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '鎬婚渶姹�' ), sumname, '', sumrowproduction.RowNr() + 3 );
-    rowno                   := sumrowproduction.RowNr() + 4;
+    sumrowccproduction      := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '闀挎槬浜ч噺' ), sumname, '', sumrowdlproduction.RowNr() + 1  );
+    sumrowdemand            := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '鎬婚渶姹�' ), sumname, '', sumrowccproduction.RowNr() + 1 );
+    sumdemandrows           := construct( EnginePipelineRows );
+    rowno                   := sumrowdemand.RowNr() + 1;
     traverse( models, Elements, model ){
-      EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( model.Concat( '闇�姹�' ) ), sumname, model, rowno ); 
+      sumdemandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( model.Concat( '闇�姹�' ) ), sumname, model, rowno ) ); 
       rowno                 := rowno + 1;
     }
     sumrowinventory         := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '搴撳瓨' ), sumname, '', rowno );
@@ -36,138 +37,93 @@
     //琛岃鏁�
     rownr                   := 0;
     traverse( rows, Elements, row, productids.Find( row.Name() ) >= 0 ){
-      rowname             := row.Name().Format( 'S(Len(10))' );
-      showrowproduction   := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '鎬讳骇閲�' ), row.Name(), '', rownr );
-      showrowdlproduction := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '澶ц繛浜ч噺' ), row.Name(), '', rownr + 1 );
-      showrowccproduction := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '闀挎槬浜ч噺' ), row.Name(), '', rownr + 2 );
-      showrowdemand       := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '鎬婚渶姹�' ), row.Name(), '', rownr + 3 );
-      rownr               := rownr + 4;
-      modelsnr            := rownr + 3;
-      models              := construct( Strings );
-      uniquemodels        := selectuniquevalues( row, Cell.Demand, demand, true, demand.Model() );
-    
+      rowname               := row.Name().Format( 'S(Len(10))' );
+      showrowproduction     := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '鎬讳骇閲�' ), row.Name(), '', rownr );
+      showrowdlproduction   := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '澶ц繛浜ч噺' ), row.Name(), '', showrowproduction.RowNr() + 1 );
+      showrowccproduction   := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '闀挎槬浜ч噺' ), row.Name(), '', showrowdlproduction.RowNr() + 1 );
+      showrowdemand         := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '鎬婚渶姹�' ), row.Name(), '', showrowccproduction.RowNr() + 1 );
+      rownr                 := showrowdemand.RowNr() + 1;
+      modelsnr              := showrowdemand.RowNr() + 4;
+      uniquemodels          := selectuniquevalues( row, Cell.Demand, demand, true, demand.Model() );
+      demandrows            := construct( EnginePipelineRows );
       traverse( uniquemodels, Elements, e ){
     
         if( rownr < modelsnr ){
-          EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( e.Concat( '闇�姹�' ) ), row.Name(), e, rownr ); 
-          models.Add( e );
+          demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( e.Concat( '闇�姹�' ) ), row.Name(), e, rownr ) ); 
           rownr             := rownr + 1;
         }
       }
     
       for( rownr := rownr; rownr < modelsnr; rownr ++ ){
     
-        EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '' ), row.Name(), '', rownr ); 
+        demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '' ), row.Name(), '', rownr ) ); 
       }
-      showrowinventory    :=  EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '搴撳瓨' ), row.Name(), '', rownr );
+      showrowinventory      :=  EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '搴撳瓨' ), row.Name(), '', rownr );
     
-      traverse( row, Cell, cell, cell.Column().TimeUnit() = search.TimeUnit() ){
-    
-        column            := selectobject( this, Column, column, column.StartDate() = cell.Column().StartDate() and column.TimeUnit() = search.TimeUnit() );
+      traverse( this, Column, column ){
+        daycells            := selectset( row, Cell, cell, cell.Column().TimeUnit() = Translations::MP_GlobalParameters_Day() and
+                                            cell.Column().StartDate() >= column.StartDate() and 
+                                            cell.Column().StartDate() <= column.EndDate() );
         
-        if( not isnull( column ) ){
-          
-          //鐢熶骇
-          production              := column.CellValue( relnew, Value := [String]cell.ProductionQuantity() );
-          showrowproduction.CellValue( relinsert, production );
-          sumproduction           := selectobject( column, CellValue, c, c.Row() = sumrowproduction );
-    
-          if( isnull( sumproduction ) ){
-            sumproduction         := column.CellValue( relnew, Value := [String]0 );
-            sumrowproduction.CellValue( relinsert, sumproduction );
+        //鐢熶骇
+        productionqty       := [Number]sum( daycells, Elements, cell, cell.ProductionQuantity() );
+        production          := selectobject( column, CellValue, c, c.Row() = showrowproduction );
+        production.Value( [String]productionqty );
+        sumproduction       := selectobject( column, CellValue, c, c.Row() = sumrowproduction );
+        sumproduction.Value( [String]( [Real]sumproduction.Value() + productionqty ) );
+        //澶ц繛浜ч噺
+        dlproductionqty     := [Number]sum( daycells, Elements.Production, cellproduction, cellproduction.DLProduction() );
+        dlproduction        := selectobject( column, CellValue, c, c.Row() = showrowdlproduction );
+        dlproduction.Value( [String]dlproductionqty );
+        sumdlproduction     := selectobject( column, CellValue, c, c.Row() = sumrowdlproduction );
+        sumdlproduction.Value( [String]( [Real]sumdlproduction.Value() + dlproductionqty ) );
+        //闀挎槬浜ч噺
+        ccproductionqty     := [Number]sum( daycells, Elements.Production, cellproduction, cellproduction.CCProduction() );
+        ccproduction        := selectobject( column, CellValue, c, c.Row() = showrowccproduction );
+        ccproduction.Value( [String]ccproductionqty );
+        sumccproduction     := selectobject( column, CellValue, c, c.Row() = sumrowccproduction );
+        sumccproduction.Value( [String]( [Real]sumccproduction.Value() + ccproductionqty ) );
+        //闇�姹�
+        totaldemandqty      := [Number]sum( daycells, Elements, cell, cell.DemandQuantity() );
+        totaldemand         := selectobject( column, CellValue, c, c.Row() = showrowdemand );
+        totaldemand.Value( [String]totaldemandqty );
+        sumdemand           := selectobject( column, CellValue, c, c.Row() = sumrowdemand );
+        sumdemand.Value( [String]( [Real]sumdemand.Value() + totaldemandqty ) );
+        //鍏蜂綋闇�姹�
+        traverse( demandrows, Elements, demandrow ){
+          demandqty         :=  [Number]sum( daycells, Elements.Demand, celldemand, celldemand.Model() = demandrow.Demand(), celldemand.Quantity() );
+          demandcell        := selectobject( column, CellValue, c, c.Row() = demandrow );
+          demandcell.Value( [String]demandqty );
+          sumdemandrow      := selectobject( sumdemandrows, Elements, r, r.Demand() = demandrow.Demand() );
+          if( not isnull( sumdemandrow ) ){
+            sumdemandcell   := selectobject( column, CellValue, c, c.Row() = sumdemandrow );
+            sumdemandcell.Value( [String]( [Real]sumdemandcell.Value() + demandqty ) );
           }
-          sumproduction.Value( [String]( [Real]sumproduction.Value() + cell.ProductionQuantity() ) );
-    
-          //澶ц繛浜ч噺
-          dlproductionquantity     := guard( cell.Production().DLProduction(), 0 );
-          dlproduction             := column.CellValue( relnew, Value := [String]dlproductionquantity );
-          showrowdlproduction.CellValue( relinsert, dlproduction );
-          sumdlproduction          := selectobject( column, CellValue, c, c.Row() = sumrowdlproduction );
-    
-          if( isnull( sumdlproduction ) ){
-            sumdlproduction        := column.CellValue( relnew, Value := [String]0 );
-            sumrowdlproduction.CellValue( relinsert, sumdlproduction );
-          }
-          sumdlproduction.Value( [String]( [Real]sumdlproduction.Value() + dlproductionquantity ) );
-          
-          //闀挎槬浜ч噺
-          ccproductionquantity     := guard( cell.Production().CCProduction(), 0 );
-          ccproduction             := column.CellValue( relnew, Value := [String]ccproductionquantity );
-          showrowccproduction.CellValue( relinsert, ccproduction );
-          sumccproduction          := selectobject( column, CellValue, c, c.Row() = sumrowccproduction );
-    
-          if( isnull( sumccproduction ) ){
-            sumccproduction        := column.CellValue( relnew, Value := [String]0 );
-            sumrowccproduction.CellValue( relinsert, sumccproduction );
-          }
-          sumccproduction.Value( [String]( [Real]sumccproduction.Value() + ccproductionquantity ) );
-          
-          //闇�姹�
-          totaldemand              := column.CellValue( relnew, Value := [String]cell.DemandQuantity() );
-          showrowdemand.CellValue( relinsert, totaldemand );
-          sumdemand                := selectobject( column, CellValue, c, c.Row() = sumrowdemand );
-          if( isnull( sumdemand ) ){
-            sumdemand              := column.CellValue( relnew, Value := [String]0 );
-            sumrowdemand.CellValue( relinsert, sumdemand );
-          }
-          sumdemand.Value( [String]( [Real]sumdemand.Value() + cell.DemandQuantity() ) );
-          
-          traverse( cell, Demand, demand, exists( models, Elements, model, model = demand.Model() ) ){
-            demandrow              := selectobject( this, Row, r, r.Product() = row.Name() and r.Demand() = demand.Model() );
-            sumdemandrow           := selectobject( this, Row, r, r.Product() = sumname and r.Demand() = demand.Model() );
-    
-            if( not isnull( demandrow ) ){
-              demandcell             := column.CellValue( relnew, Value := [String]demand.Quantity() );
-              demandrow.CellValue( relinsert, demandcell );
-            }
-            if( not isnull( sumdemandrow ) ){
-            sumdemandcell          := selectobject( column, CellValue, c, c.Row() = sumdemandrow );
-            if( isnull( sumdemandcell ) ){
-              sumdemandcell        := column.CellValue( relnew, Value := [String]0 );
-              sumdemandrow.CellValue( relinsert, sumdemandcell );
-            }
-            sumdemandcell.Value( [String]( [Real]sumdemandcell.Value() + demand.Quantity() ) );
-            }
-          }
-    
-          for( demandr := showrowdemand.RowNr() + 1; demandr < showrowinventory.RowNr(); demandr := demandr + 1 ){
-            demandrow              := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = row.Name() );
-            if( not isnull( demandrow ) and not exists( demandrow, CellValue, cv, cv.Column() = column ) ){
-              demandcell           := column.CellValue( relnew, Value := '' );
-              demandrow.CellValue( relinsert, demandcell );
-            }
-          }
-    
-          
-          //搴撳瓨
-          inventory                := column.CellValue( relnew, Value := [String]cell.InventoryQuantity() );
-          showrowinventory.CellValue( relinsert, inventory );
-          suminventory             := selectobject( column, CellValue, c, c.Row() = sumrowinventory );
-          if( isnull( suminventory ) ){
-            suminventory           := column.CellValue( relnew, Value := [String]0 );
-            sumrowinventory.CellValue( relinsert, suminventory );
-          }
-          suminventory.Value( [String]( [Real]suminventory.Value() + cell.InventoryQuantity() ) );
-    
         }
+        //搴撳瓨
+        inventroyqty        := [Number]maxobject( daycells, Elements, e, e.Column().StartDate() ).InventoryQuantity();
+        inventory           := selectobject( column, CellValue, c, c.Row() = showrowinventory );
+        inventory.Value( [String]inventroyqty );
+        suminventory        := selectobject( column, CellValue, c, c.Row() = sumrowinventory );
+        suminventory.Value( [String]( [Real]suminventory.Value() + inventroyqty ) );
       }
     }
     traverse( this, Column, column ){
       for( demandr := sumrowdemand.RowNr() + 1; demandr < sumrowinventory.RowNr(); demandr := demandr + 1 ){
-        demandrow              := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = sumname );
+        demandrow           := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = sumname );
     //    info( '------------------14----------------' );
         if( not isnull( demandrow ) and not exists( demandrow, CellValue, cv, cv.Column() = column ) ){
-          demandcell           := column.CellValue( relnew, Value := '' );
+          demandcell        := column.CellValue( relnew, Value := '' );
           demandrow.CellValue( relinsert, demandcell );
         }
       }
     }
     
-    rows := selectsortedset( this, Row, row, row.Name(), row.RowNr() );
-    i    := 0;
+    rows                    := selectsortedset( this, Row, row, row.Name(), row.RowNr() );
+    i                       := 0;
     traverse( rows, Elements, e ){
       e.RowNr( i );
-      i := i + 1;
+      i                     := i + 1;
     }
   *]
 }

--
Gitblit v1.9.3