From 8fe535effe8ad184a82e565c3c066a94a8525606 Mon Sep 17 00:00:00 2001
From: hongji.li <hongji.a.li@capgemini.com>
Date: 星期三, 01 十一月 2023 17:44:53 +0800
Subject: [PATCH] 产能分配Bug fix

---
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl                                                             |   10 
 _var/_Main/Data/.keep                                                                                                          |    0 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl                             |   30 ++++
 _Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl                                                                              |    2 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl                                           |   28 ++++
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl                                 |   28 ++++
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl                                                                |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def |    6 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl                                                  |   25 +++
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl                                 |   30 ++++
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                              |  243 +++++-----------------------------
 11 files changed, 194 insertions(+), 212 deletions(-)

diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
index 571fce9..f201682 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 EDIBroker GlobalOTDTable_CAR_Export
 {
-  MDSDefinition: GlobalOTDTable
+  MDSDefinition: GlobalOTDSOP
   TimeZone: 'ACT'
   UseOSTimeZone: false
   EDIModelLink.Source Source13
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
index 14045dd..1b8028f 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
@@ -1,12 +1,12 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 ) as BinaryValue
 {
   TextBody:
   [*
-    binaryData := globalOTDTable.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
+    binaryData := globalOTDSOP.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
     
     return binaryData.AsBinaryValue();
   *]
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..51e9eb4
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  const GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP this
+)
+{
+  TextBody:
+  [*
+    traverse ( globalOTDTable, Global_MappingAnnualBudgetData, gmabd ) {
+      productCode := gmabd.ProductID();
+      row         := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
+      CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
+    }
+    
+    columnBusinessType             := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
+    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
+    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl
new file mode 100644
index 0000000..da29213
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationBudget (
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+      total := 0.0;
+      traverse ( months, Elements, m ) {
+        columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+        cellReal    := Global_MappingForecast::GetQuantityByMonth( casbcir.GetProductCodes(), globalOTDTable, DateTime::Now().Year(), m.MonthNo() );
+        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+        total       := total + cellReal;
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
+      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+      columnYear.TotalIdentification( year.YearNo() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl
new file mode 100644
index 0000000..4cf1bf3
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationByScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlans, Elements, mp ) {
+      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+        total := 0.0;
+        traverse ( months, Elements, m ) {
+          columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+          cellReal    := Product_MP::GetNewSupplyByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
+          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          total       := total + cellReal;
+          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
+        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+        columnYear.TotalIdentification( year.YearNo() );
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl
new file mode 100644
index 0000000..6741062
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolume (
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+      total := 0.0;
+      traverse ( months, Elements, m ) {
+        columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+        cellReal    := Global_MappingAnnualBudgetData::GetSaleByMonth( casbcir.GetProductCodes(), globalOTDTable, year.YearNo(), m.MonthNo() );
+        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+        total       := total + cellReal;
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
+      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+      columnYear.TotalIdentification( year.YearNo() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl
new file mode 100644
index 0000000..4335178
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolumeByScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlans, Elements, mp ) {
+      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+        total := 0.0;
+        traverse ( months, Elements, m ) {
+          columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+          cellReal    := Forecast::GetFulfilledBalanceByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
+          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          total       := total + cellReal;
+          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
+        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+        columnYear.TotalIdentification( year.YearNo() );
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
index 2d3b108..ac48151 100644
--- a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
@@ -12,11 +12,11 @@
     // yypsybs Sep-18-2023 (created)
     result := sum( macroPlan, 
                    Product_MP.SalesDemand,
-                   item, 
-                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1 
-                   and item.StartDate().Year() = yearNo
-                   and item.StartDate().Month() = monthNo,
-                   item.FulfilledQuantity() * item.Price() );
+                   tempSD, 
+                   productNo.Find( tempSD.ProductID() ) > -1 
+                   and tempSD.StartDate().Year() = yearNo
+                   and tempSD.StartDate().Month() = monthNo,
+                   tempSD.FulfilledQuantity() * tempSD.Price() );
     return result;
   *]
 }
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
index 0ba67ec..8b53f33 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -5,13 +5,12 @@
   CapacityAndSaleBudgeFilterItems items,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
-  const GlobalOTDTable otdTable
+  const GlobalOTDTable globalOTDTable
 )
 {
   Description: 'todo : mappingParent鏀逛负mpSync, random鍒犱簡'
   TextBody:
   [*
-    // ====涓嶉�夋椂榛樿鍏ㄩ��====
     if ( years.Size() = 0 ) {
       years := selectset( this, CapacityAndSaleBudgeFilterYear, tempCASBFY, tempCASBFY.YearNo() = Date::ActualDate().Year() );
     }
@@ -22,219 +21,57 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     
-    // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    targetglobal_MappingAnnualBudgetData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
+    CapacityAndSaleBudgeCompareItemCell::CreateData( globalOTDTable, this );
     
-    traverse ( targetglobal_MappingAnnualBudgetData, Elements, gmabd ) {
-      productCode := gmabd.ProductID();
-    //  Global_MappingOperationBOM::CreateTestData( otdTable, "浜嬩笟閮�" + [String](productCode.Length() mod 3), "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4), productCode );
-    //  boms := selectset( otdTable, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
-    //  if( boms.Size() > 0 ) {
-    //    bom := boms.First();
-    //    businessType := bom.BusinessType();
-    //    placeOfProductionOfArray := bom.OrganCode();
-        // 鐩稿悓闈㈡澘鍩哄湴鍜屼簨涓氶儴鐨勬斁涓�琛�
-        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
-        // 璁板綍姣忚鍖呭惈鍝簺product
-        CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
-    //  } else {
-    //    debuginfo( "no boms for product : " + productCode );
-    //  }
-    }
-    
-    // ====浠庡乏鍚戝彸鐢熸垚鍒楀ご涓庡唴瀹�====
-    // 浜嬩笟閮紝闈㈡澘鍩哄湴
-    columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
-    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
-    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    }
-    
-    // 闈㈡澘鍒嗛厤閲� - 骞村害棰勭畻 (sheets)
-    // 鏍煎紡锛� 闈㈡澘鍒嗛厤閲� - 骞� - 鏈堬紙1-12 & total锛� - 骞村害棰勭畻/scenarioName
     if ( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
       traverse ( years, Elements, year ) {
-        // 鍘嗗彶鏁版嵁
-    //    traverse ( months, Elements, month ) {
-    //      columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
-    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
-    //        cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //      }
-    //    }
-    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
-    //    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //      cellReal := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), otdTable, year.YearNo() );
-    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //    }
-        
-        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-          total := 0.0;
-          traverse ( months, Elements, m ) {
-            columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
-            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-            cellReal    := Global_MappingForecast::GetQuantityByMonth( casbcir.GetProductCodes(), otdTable, DateTime::Now().Year(), m.MonthNo() );
-            cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            total       := total + cellReal;
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
-          cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-          columnYear.TotalIdentification( year.YearNo() );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-        }
-        
-        // S&OP鏁版嵁
-    //    traverse ( macroPlans, Elements, macroPlan ) {
-    //      traverse ( months, Elements, month ) {
-    //        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, 
-    //                                                                                "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
-    //        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //          cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-    //          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //        }
-    //      }
-    //      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, 
-    //                                                                             "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
-    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-    //        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //      }
-    //    }
-        traverse ( macroPlans, Elements, mp ) {
-          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-            total := 0.0;
-            traverse ( months, Elements, m ) {
-              columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
-              columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-              cellReal    := Product_MP::GetNewSupplyByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
-              cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-              total       := total + cellReal;
-              cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-            }
-            columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
-            cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-            columnYear.TotalIdentification( year.YearNo() );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-        }
+        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationBudget( this, months, year, globalOTDTable );
+        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationByScenario( macroPlans, this, months, year );
       }
     }
     
-    // 骞村害閿�鍞
     if ( CapacityAndSaleBudgeFilterItem::Contains( items, "閿�鍞" ) ) {
       traverse ( years, Elements, year ) {
-        // 鍘嗗彶鏁版嵁
-    //    traverse ( months, Elements, month ) {
-    //      columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
-    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), otdTable, year.YearNo(), month.MonthNo() );
-    //        cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //      }
-    //    }
-    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-    //    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //      cellReal := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), otdTable, year.YearNo() );
-    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //    }
-        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-          total := 0.0;
-          traverse ( months, Elements, m ) {
-            columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
-            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-            cellReal    := Global_MappingAnnualBudgetData::GetSaleByMonth( casbcir.GetProductCodes(), otdTable, year.YearNo(), m.MonthNo() );
-            cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            total       := total + cellReal;
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
-          cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-          columnYear.TotalIdentification( year.YearNo() );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-        }
-        
-        // S&OP鏁版嵁
-    //    traverse ( macroPlans, Elements, macroPlan ) {
-    //      traverse ( months, Elements, month ) {
-    //        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
-    //        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //          cellReal := Forecast::GetFulfilledBalanceByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-    //          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //        }
-    //      }
-    //      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
-    //      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        // QID 23
-    //        cellReal := Forecast::GetFulfilledBalanceByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-    //        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //      }
-    //    }
-        traverse ( macroPlans, Elements, mp ) {
-          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-            total := 0.0;
-            traverse ( months, Elements, m ) {
-              columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
-              columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-              cellReal    := Forecast::GetFulfilledBalanceByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
-              cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-              total       := total + cellReal;
-              cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-            }
-            columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
-            cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-            columnYear.TotalIdentification( year.YearNo() );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-        }
+        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolume( this, months, year, globalOTDTable );
+        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeByScenario( macroPlans, this, months, year );
       }
     }
     
     // 澶у紶鐩堝埄棰�
-    traverse ( years, Elements, year ) {
-      // 鍘嗗彶鏁版嵁
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      }
-      // S&OP鏁版嵁
-      traverse( macroPlans, Elements, macroPlan ) {
-        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
-        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-        }
-      }
-    }
-    // 浜у搧鐩堝埄棰�
-    traverse ( years, Elements, year ) {
-      // 鍘嗗彶鏁版嵁
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      }
-      // S&OP鏁版嵁
-      traverse ( macroPlans, Elements, macroPlan ) {
-        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
-        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          // todo
-          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-        }
-      }
-    }
+    //traverse ( years, Elements, year ) {
+    //  // 鍘嗗彶鏁版嵁
+    //  columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
+    //  traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //    cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //    cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //  }
+    //  // S&OP鏁版嵁
+    //  traverse( macroPlans, Elements, macroPlan ) {
+    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
+    //    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //    }
+    //  }
+    //}
+    //// 浜у搧鐩堝埄棰�
+    //traverse ( years, Elements, year ) {
+    //  // 鍘嗗彶鏁版嵁
+    //  columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
+    //  traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //    cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //    cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //  }
+    //  // S&OP鏁版嵁
+    //  traverse ( macroPlans, Elements, macroPlan ) {
+    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
+    //    traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //      // todo
+    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //    }
+    //  }
+    //}
     
     // 璁剧疆rowNo鍜宑olumnNo
     rowNo := 1;
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
index 4428575..fd5f58b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
@@ -5,11 +5,15 @@
   #keys: '[414702.0.391791234]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDSOP );
+  *]
   QuillAction
   {
     Body:
     [*
-      Application.Download( "浜ц兘鍒嗛厤缁撴灉.xlsx", CapacityAllocationResults::Export( GlobalOTDTable ).AsBinaryData() );
+      Application.Download( "浜ц兘鍒嗛厤缁撴灉.xlsx", CapacityAllocationResults::Export( GlobalOTDSOP ).AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_var/_Main/Data/.keep b/_var/_Main/Data/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/_var/_Main/Data/.keep

--
Gitblit v1.9.3