From 42cda5fdc4f72b3d513bb854bf8aa7d5428649f0 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期四, 01 八月 2024 17:31:30 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg

---
 _Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl                              |   18 -
 _Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_Gap.qbl                                         |    7 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/DefaultValue_CompareVersionValue.qbl                      |    0 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl                             |   97 ++++++++++
 _Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersion.qbl                                 |    7 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersionValue.qbl                            |    7 
 _Main/BL/Type_TemplateManager/StaticMethod_GetIDSTemplate.qbl                                           |    8 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersion.qbl                              |    7 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersionValue.qbl                         |    7 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetAttributeNames.qbl                        |   16 +
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl                              |   32 +++
 _Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl                         |    4 
 /dev/null                                                                                               |   39 ----
 _Main/BL/Type_LocalCell_OfflinePlanComparison/Function_CalcGap.qbl                                      |   13 +
 _Main/BL/Type_TemplateManager/StaticMethod_GetPPATemplate.qbl                                           |    4 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl                                 |  107 +++++++++++
 _Main/BL/Type_LocalCell_OfflinePlanComparison/Method_GetAttributeByName.qbl                             |   44 ++++
 _Main/BL/Type_TemplateManager/StaticMethod_GetCurveTemplate.qbl                                         |   64 +++---
 _Main/BL/Type_LocalCell_OfflinePlanComparison/DefaultValue_BaseVersionValue.qbl                         |    0 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def |    2 
 _Main/BL/Type_LocalRow/Attribute_Remark.qbl                                                             |    7 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl            |    9 +
 22 files changed, 403 insertions(+), 96 deletions(-)

diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersion.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersion.qbl
new file mode 100644
index 0000000..724913f
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersion.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BaseVersion
+{
+  #keys: '3[412672.1.76654685][412672.1.76654684][412672.1.76654686]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersionValue.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersionValue.qbl
new file mode 100644
index 0000000..07a2d97
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_BaseVersionValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BaseVersionValue
+{
+  #keys: '3[412672.1.76654688][412672.1.76654687][412672.1.76654689]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersion.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersion.qbl
new file mode 100644
index 0000000..6f60c77
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersion.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CompareVersion
+{
+  #keys: '3[412672.1.76654691][412672.1.76654690][412672.1.76654692]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersionValue.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersionValue.qbl
new file mode 100644
index 0000000..e53dce9
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_CompareVersionValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CompareVersionValue
+{
+  #keys: '3[412672.1.76654694][412672.1.76654693][412672.1.76654695]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_Gap.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_Gap.qbl
new file mode 100644
index 0000000..2fd61e4
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Attribute_Gap.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Gap
+{
+  #keys: '3[412672.1.76654697][412672.1.76654696][412672.1.76654698]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/DefaultValue_BaseVersionValue.qbl
similarity index 100%
rename from _Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl
rename to _Main/BL/Type_LocalCell_OfflinePlanComparison/DefaultValue_BaseVersionValue.qbl
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/DefaultValue_CompareVersionValue.qbl
similarity index 100%
rename from _Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl
rename to _Main/BL/Type_LocalCell_OfflinePlanComparison/DefaultValue_CompareVersionValue.qbl
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/Function_CalcGap.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Function_CalcGap.qbl
new file mode 100644
index 0000000..90a8d2f
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Function_CalcGap.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcGap
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    
+    value := this.BaseVersion() - this.CompareVersion();
+    
+    this.Gap( value );
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/Method_GetAttributeByName.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Method_GetAttributeByName.qbl
new file mode 100644
index 0000000..f51ae7a
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/Method_GetAttributeByName.qbl
@@ -0,0 +1,44 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetAttributeByName (
+  String attributeName
+) const declarative as String
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    value := "";
+    
+    if( attributeName = "BaseVersion" ){
+       if( not this.LocalColumn().IsAttrbuteColumn() ){
+         value := this.BaseVersion().Format( "N(Dec)" );
+       }
+    }
+    if( attributeName = "CompareVersion" ){
+      if( not this.LocalColumn().IsAttrbuteColumn() ){
+        value := this.CompareVersion().Format( "N(Dec)" );
+      }
+    }
+    if( attributeName = "Gap" ){
+      if( not this.LocalColumn().IsAttrbuteColumn() ){
+        value := this.Gap().Format( "N(Dec)" );
+      }
+    }
+    if( attributeName = "BaseVersionValue" ){
+      if( not this.LocalColumn().IsAttrbuteColumn() ){
+        value := "0";
+      }else{
+        value := this.BaseVersionValue();
+      }
+    }
+    if( attributeName = "CompareVersionValue" ){
+      if( not this.LocalColumn().IsAttrbuteColumn() ){
+        value := "0";
+      }else{
+        value := this.CompareVersionValue();
+      }
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl
new file mode 100644
index 0000000..d19420b
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod AsyncExport (
+  RecycleBin recycleBin,
+  const constcontent LocalRows rows,
+  const constcontent LocalColumns columns,
+  const MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // rislai Jun-20-2024 (created)
+    sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
+    
+    attributeNames := LocalCell_DemandComparison::GetAttributeNames();
+    
+    columnstring := emit( "" );
+    flag := true;
+    traverse( sortColumns,Elements,sortColumn ){
+      if( flag ){
+        attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
+        columnstring := columnstring.Merge( attributeXML )
+        flag := false;
+      }
+      
+      cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
+      columnstring := columnstring.Merge( cellxml);
+    }
+     
+    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl
new file mode 100644
index 0000000..16f2c4d
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl
@@ -0,0 +1,107 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Compared (
+  RecycleBin recycleBin,
+  const OfflinePlanTable baseOfflinePlan,
+  const OfflinePlanTable compareOfflinePlan
+) as LocalTable
+{
+  TextBody:
+  [*
+    // rislai Jun-20-2024 (created)
+    table := recycleBin.LocalTable( relnew,Name := "涓嬬嚎璁″垝鎶ヨ〃瀵规瘮");
+    
+    localColumns := construct( LocalColumns );
+    localColumnIndexTree := NamedValueTree::Create();
+    traverse( baseOfflinePlan,OfflinePlanColumn,column,column.ColumnDate() >=  baseOfflinePlan.MacroPlan().StartOfPlanning().Date()){
+      localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() );
+      localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
+      if( isnull( localColumnIndex )){
+        localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate());
+        localColumns.Add( localColumn );
+        localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+      }
+    }
+    traverse( compareOfflinePlan,OfflinePlanColumn,column,column.ColumnDate() >=  compareOfflinePlan.MacroPlan().StartOfPlanning().Date()){
+      localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() );
+      localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
+      if( isnull( localColumnIndex )){
+        localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate());
+        localColumns.Add( localColumn );
+        localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+      }
+    }
+    
+    baseOfflinePlanCells := construct( OfflinePlanCells, constcontent );
+    baseOfflinePlanCellIndexTree := NamedValueTree::Create();
+    compareOfflinePlanCells := construct( OfflinePlanCells, constcontent );
+    compareOfflinePlanCellIndexTree := NamedValueTree::Create();
+    
+    localRows := construct( LocalRows );
+    localRowIndexTree := NamedValueTree::Create();
+    
+    traverse( baseOfflinePlan,OfflinePlanRow,row,row.Type() = "1" ){
+      rowKey := row.ProductID() + "@$#" + row.ProductionLine()+ "@$#";
+      localRowHandle := localRowIndexTree.GetHandle( rowKey );
+      localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
+      if( isnull( localRowIndex )){
+        localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := row.ProductID(),Remark := rowKey );
+        localRows.Add( localRow );
+        localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
+      }
+      traverse( row,OfflinePlanCell,cell ){
+        columnKey := cell.OfflinePlanColumn().ColumnDate().AsQUILL();
+        cellKey := rowKey + columnKey;
+        cellHandle := baseOfflinePlanCellIndexTree.GetHandle( cellKey );
+        baseOfflinePlanCells.Add( cell );
+        baseOfflinePlanCellIndexTree.Root().AddChild( cellHandle,baseOfflinePlanCells.Size() - 1 );
+      }
+    }
+    traverse( compareOfflinePlan,OfflinePlanRow,row,row.Type() = "1" ){
+      rowKey := row.ProductID() + "@$#" + row.ProductionLine()+ "@$#";
+      localRowHandle := localRowIndexTree.GetHandle( rowKey );
+      localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
+      if( isnull( localRowIndex )){
+        localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := row.ProductID(),Remark := rowKey );
+        localRows.Add( localRow );
+        localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
+      }
+      traverse( row,OfflinePlanCell,cell ){
+        columnKey := cell.OfflinePlanColumn().ColumnDate().AsQUILL();
+        cellHandle := compareOfflinePlanCellIndexTree.GetHandle( rowKey + columnKey );
+        compareOfflinePlanCells.Add( cell );
+        compareOfflinePlanCellIndexTree.Root().AddChild( cellHandle,compareOfflinePlanCells.Size() - 1 );
+      }
+    }
+    
+    traverse( localRows,Elements,localRow ){
+      rowKey := localRow.Remark();
+      traverse( localColumns,Elements,localColumn ){
+        columnKey := localColumn.CustomDate().AsQUILL();
+        cellKey := rowKey + columnKey;
+        
+        baseOfflinePlanCell := constnull( OfflinePlanCell );
+        compareOfflinePlanCell := constnull( OfflinePlanCell );
+        baseOfflinePlanCellIndex := guard( baseOfflinePlanCellIndexTree.Root().Child( baseOfflinePlanCellIndexTree.GetHandle( cellKey ) ),null( NamedValue ));
+        compareOfflinePlanCellIndex := guard( compareOfflinePlanCellIndexTree.Root().Child( compareOfflinePlanCellIndexTree.GetHandle( cellKey ) ),null( NamedValue ));
+        if( not isnull( baseOfflinePlanCellIndex )){
+          baseOfflinePlanCell := baseOfflinePlanCells.Element( baseOfflinePlanCellIndex.GetValueAsNumber() ); 
+        }
+        if( not isnull( compareOfflinePlanCellIndex )){
+          compareOfflinePlanCell := compareOfflinePlanCells.Element( compareOfflinePlanCellIndex.GetValueAsNumber() ); 
+        }
+        
+        localRow.LocalCell( relnew,LocalCell_OfflinePlanComparison,LocalColumn := localColumn,
+                            BaseVersion := ifexpr( isnull( baseOfflinePlanCell),0.0,baseOfflinePlanCell.Quantity()),
+                            CompareVersion := ifexpr( isnull( compareOfflinePlanCell),0.0,compareOfflinePlanCell.Quantity()));
+      }
+    }
+    traverse( table,LocalColumn,column ){
+      if( column.LocalCell( relsize ) = 0 ){
+        column.Delete(); 
+      } 
+    }
+    
+    return table;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetAttributeNames.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetAttributeNames.qbl
new file mode 100644
index 0000000..1072935
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetAttributeNames.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetAttributeNames () const declarative as owning Strings
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    attributeNames := construct( Strings );
+    
+    attributeNames.Add( "BaseVersion" );
+    attributeNames.Add( "CompareVersion" );
+    attributeNames.Add( "Gap" );
+    
+    return &attributeNames;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl
new file mode 100644
index 0000000..6d45dc4
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl
@@ -0,0 +1,97 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetColumnXML (
+  const constcontent LocalRows rows,
+  const LocalColumn column,
+  const Strings attributeNames,
+  String type,
+  const MacroPlan macroPlan
+) const as String
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    // rislai Jun-20-2024 (created)
+    columnXML := "";
+    cells := selectsortedset( column, LocalCell.astype( LocalCell_DemandComparison ), cell,
+                                  exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
+    if( type = "data" ){
+      columnXML := "";
+      if( column.IsAttrbuteColumn() ){
+        columnXML := "<column><name>" + column.Name() + "</name><type>String</type>"; 
+      }else{
+        columnXML := "<column><name>" + column.Name() + "</name><type>Number</type>"; 
+      }
+      traverse ( cells, Elements, cell ) {
+        traverse( attributeNames ,Elements,e ){
+          cellXML := '<cell value="' + cell.GetAttributeByName( e ) + '"/>'
+          columnXML := columnXML + cellXML;
+        }
+      }
+      columnXML := columnXML + "</column>";
+    }
+    if( type = "attribute" ){
+      columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
+      columnXML0_2 := "<column><name>Generation</name><type>String</type>";
+      columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
+      columnXML0_4 := "<column><name>鍔熺巼</name><type>String</type>";
+      
+      columnXML1 := "<column><name>Product ID</name><type>String</type>";
+      columnXML2 := "<column><name>Attribute</name><type>String</type>";
+      
+      traverse ( cells, Elements, cell ) {
+        flag := true;
+        traverse( attributeNames ,Elements,e ){
+          if( flag ){
+            cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
+            columnXML1 := columnXML1 + cellXML;
+            
+            salesSegment := select( cell.LocalRow().LocalTable(),LocalColumn.LocalCell.astype( LocalCell_DemandComparison ),temp_cell,temp_cell.LocalRow() = cell.LocalRow() and temp_cell.LocalColumn().Name() = "浜у湴");
+            if( not isnull( salesSegment )){
+              cellXML0_1 := '<cell value="' + ifexpr( salesSegment.BaseVersionValue() <> "绌�",salesSegment.BaseVersionValue(),salesSegment.CompareVersionValue()) + '"/>';
+              columnXML0_1 := columnXML0_1 + cellXML0_1;
+            }else{
+              cellXML0_1 := '<cell value="  "/>'
+              columnXML0_1 := columnXML0_1 + cellXML0_1;
+            }
+            
+            product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
+            if( not isnull( product )){
+              cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
+              cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
+              cellXML0_4 := '<cell value="' + product.Power() + '"/>';
+              columnXML0_2 := columnXML0_2 + cellXML0_2;
+              columnXML0_3 := columnXML0_3 + cellXML0_3;
+              columnXML0_4 := columnXML0_4 + cellXML0_4;
+            }else{
+              cellXML0_2 := '<cell value="  "/>';
+              cellXML0_3 := '<cell value="  "/>';
+              cellXML0_4 := '<cell value="  "/>';
+              columnXML0_2 := columnXML0_2 + cellXML0_2;
+              columnXML0_3 := columnXML0_3 + cellXML0_3;
+              columnXML0_4 := columnXML0_4 + cellXML0_4;
+            }
+            
+            flag := false;
+          }else{
+            cellXML := '<cell value="  "/>'
+            columnXML1 := columnXML1 + cellXML;
+            cellXML0_1 := '<cell value="  "/>'
+            cellXML0_2 := '<cell value="  "/>';
+            cellXML0_3 := '<cell value="  "/>';
+            cellXML0_4 := '<cell value="  "/>';
+            columnXML0_1 := columnXML0_1 + cellXML0_1;
+            columnXML0_2 := columnXML0_2 + cellXML0_2;
+            columnXML0_3 := columnXML0_3 + cellXML0_3;
+            columnXML0_4 := columnXML0_4 + cellXML0_4;
+          }
+          cellXML := '<cell value="' + e + '"/>'
+          columnXML2 := columnXML2 + cellXML;
+        }
+      }
+      columnXML := columnXML0_1 + "</column>" + columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" + columnXML1 + "</column>" + columnXML2 + "</column>";
+    }
+     
+    return columnXML;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl
new file mode 100644
index 0000000..d360987
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization LocalCell_OfflinePlanComparison
+{
+  #keys: '2[412672.1.76654683][412672.1.76654682]'
+  Parent: LocalCell
+  StructuredName: 'LocalCell_OfflinePlanComparisons'
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl
deleted file mode 100644
index 7abefbe..0000000
--- a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute BaseVersionValue
-{
-  #keys: '3[412672.1.64753763][412672.1.64753762][412672.1.64753764]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl
deleted file mode 100644
index 8e0d3b4..0000000
--- a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CompareVersionValue
-{
-  #keys: '3[412672.1.64753752][412672.1.64753751][412672.1.64753753]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl
index f235f04..28b4f37 100644
--- a/_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl
@@ -9,12 +9,12 @@
     // rislai Jun-21-2024 (created)
     value := "";
     
-    if( attributeName = "BaseVersion" ){
+    if( attributeName = "Plan" ){
        if( not this.LocalColumn().IsAttrbuteColumn() ){
          value := this.Plan().Format( "N(Dec)" );
        }
     }
-    if( attributeName = "CompareVersion" ){
+    if( attributeName = "Actual" ){
       if( not this.LocalColumn().IsAttrbuteColumn() ){
         value := this.Actual().Format( "N(Dec)" );
       }
@@ -22,20 +22,6 @@
     if( attributeName = "Gap" ){
       if( not this.LocalColumn().IsAttrbuteColumn() ){
         value := this.Gap().Format( "N(Dec)" );
-      }
-    }
-    if( attributeName = "BaseVersionValue" ){
-      if( not this.LocalColumn().IsAttrbuteColumn() ){
-        value := "0";
-      }else{
-        value := this.BaseVersionValue();
-      }
-    }
-    if( attributeName = "CompareVersionValue" ){
-      if( not this.LocalColumn().IsAttrbuteColumn() ){
-        value := "0";
-      }else{
-        value := this.CompareVersionValue();
       }
     }
     
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl
deleted file mode 100644
index 3c0055a..0000000
--- a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl
+++ /dev/null
@@ -1,118 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Compared (
-  RecycleBin recycleBin,
-  String baseVersionPath,
-  String compareVersionPath,
-  String baseVersionName,
-  String compareVersionName
-) as LocalTable
-{
-  TextBody:
-  [*
-    // rislai Jun-20-2024 (created)
-    localTable := recycleBin.LocalTable( relnew,Name := baseVersionName + "__" + compareVersionName );
-    
-    baseVersionFile := OSFile::Construct();
-    compareVersionFile := OSFile::Construct();
-    
-    try {
-      baseVersionFile.Open( baseVersionPath, "Read", false );
-      baseVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, baseVersionFile.ReadBinary(), baseVersionPath );
-      baseVersionDataSource.ReadStructure();
-      
-      compareVersionFile.Open( compareVersionPath, "Read", false );
-      compareVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, compareVersionFile.ReadBinary(), compareVersionPath );
-      compareVersionDataSource.ReadStructure();
-      
-      baseVersionTable := select( baseVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
-      compareVersionTable := select( compareVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
-      
-      if( not isnull( baseVersionTable ) and not isnull( compareVersionTable )){
-        
-        //鐢熸垚琛屾暟鎹�
-        rowKeys := construct( Strings );
-        baseVersionRowTree := NamedValueTree::Create();
-        baseVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
-        compareVersionRowTree := NamedValueTree::Create();
-        compareVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
-        LocalCell_DemandComparison::FillRows( baseVersionTable,rowKeys,baseVersionRowTree,baseVersionRows );
-        LocalCell_DemandComparison::FillRows( compareVersionTable,rowKeys,compareVersionRowTree,compareVersionRows );
-        
-        // 鐢熸垚鍒楁暟鎹�
-        columnTree := NamedValueTree::Create();
-        columns := construct( LocalColumns );
-        LocalCell_DemandComparison::GenerateColumnIndex( baseVersionTable,localTable,columnTree,columns );
-        LocalCell_DemandComparison::GenerateColumnIndex( compareVersionTable,localTable,columnTree,columns );
-        columnNames := selectvalues( columns,Elements,column,true,column.Name() );
-        
-        // 鐢熸垚鏁版嵁
-        
-        for ( rowIndex := 0; rowIndex < rowKeys.Size(); rowIndex++ ) {
-          rowKey := rowKeys.Element( rowIndex );
-          
-          baseVersionCellTree := NamedValueTree::Create();
-          baseVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
-          
-          compareVersionCellTree := NamedValueTree::Create();
-          compareVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
-          
-          LocalCell_DemandComparison::FillCells( rowKey,baseVersionRowTree,baseVersionRows,baseVersionCellTree,baseVersionCells );
-          LocalCell_DemandComparison::FillCells( rowKey,compareVersionRowTree,compareVersionRows,compareVersionCellTree,compareVersionCells );
-          
-          row := localTable.LocalRow( relnew,Index := localTable.GetRowIndexCache()  );
-          
-          traverse( columnNames,Elements,columnName ){
-            columnHandle := columnTree.GetHandle( columnName );
-            columnIndex := columnTree.Root().Child( columnHandle ).GetValueAsNumber();
-            column := columns.Element( columnIndex );
-            
-            baseVersionCell := constnull( GeneralExcelImportAndExportDataCell );
-            baseVersionCellHandle := baseVersionCellTree.GetHandle( columnName );
-            try{
-              baseVersionCellIndex := baseVersionCellTree.Root().Child( baseVersionCellHandle ).GetValueAsNumber();
-              baseVersionCell := baseVersionCells.Element( baseVersionCellIndex );
-            }onerror{}
-            
-            compareVersionCell := constnull( GeneralExcelImportAndExportDataCell );
-            compareVersionCellHandle := compareVersionCellTree.GetHandle( columnName );
-            try{
-              compareVersionCellIndex := compareVersionCellTree.Root().Child( compareVersionCellHandle ).GetValueAsNumber();
-              compareVersionCell := compareVersionCells.Element( compareVersionCellIndex );
-            }onerror{}
-            
-            if( columnName = "浜у湴" or columnName = "杞﹀瀷" or columnName = "鍙戝姩鏈洪浂浠跺彿" or columnName = "鍙戝姩鏈哄洓浣嶇爜" ){
-              row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
-                             BaseVersionValue := ifexpr( isnull( baseVersionCell ), "绌�", baseVersionCell.Value()),
-                             CompareVersionValue := ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()));
-              column.IsAttrbuteColumn( true );
-              if( columnName = "鍙戝姩鏈洪浂浠跺彿" ){
-                row.CustomName( ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()), baseVersionCell.Value()) );
-              }
-            }else{
-              row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
-                             BaseVersion := ifexpr( isnull( baseVersionCell ),0,[Real]baseVersionCell.Value()),
-                             CompareVersion := ifexpr( isnull( compareVersionCell ), 0 ,[Real]compareVersionCell.Value() ));
-            }
-          }
-        }
-      }
-      // 鍚庣画鍒犻櫎
-      baseVersionDataSource.Delete();
-      compareVersionDataSource.Delete();
-      
-      baseVersionFile.Close();
-      compareVersionFile.Close();
-    } onerror {
-      if( not isnull( baseVersionFile )){
-        baseVersionFile.Close(); 
-      }
-      if( not isnull( compareVersionFile )){
-        compareVersionFile.Close(); 
-      }
-      error( e );
-    }
-    
-    return localTable;
-  *]
-}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl
deleted file mode 100644
index 6aeded1..0000000
--- a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl
+++ /dev/null
@@ -1,30 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod FillCells (
-  String rowName,
-  NamedValueTree rowTree,
-  constcontent GeneralExcelImportAndExportDataRows rows,
-  NamedValueTree cellTree,
-  constcontent GeneralExcelImportAndExportDataCells cells
-)
-{
-  TextBody:
-  [*
-    // rislai Jun-22-2024 (created)
-    rowHandel := rowTree.GetHandle( rowName );
-    try{
-      rowIndex := rowTree.Root().Child( rowHandel ).GetValueAsNumber();
-      row := rows.Element( rowIndex );
-      
-      temp_cells := selectsortedset( row,GeneralExcelImportAndExportDataCell,cell,true,cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() );
-      for( i := 0 ; i<temp_cells.Size();i++ ){
-        cell := temp_cells.Element( i );
-        tempHandle := cellTree.GetHandle( cell.GeneralExcelImportAndExportDataColumn().Name() );
-        
-        cells.Add( cell );
-        cellTree.Root().AddChild( tempHandle,cells.Size() - 1 );
-        
-      }
-    }onerror{}
-  *]
-}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl
deleted file mode 100644
index 391100a..0000000
--- a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl
+++ /dev/null
@@ -1,36 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod FillRows (
-  const GeneralExcelImportAndExportDataTable general,
-  Strings rowKeys,
-  NamedValueTree rowTree,
-  constcontent GeneralExcelImportAndExportDataRows rows
-)
-{
-  TextBody:
-  [*
-    // rislai Jun-22-2024 (created)
-    rowKeyColumn1 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "浜у湴" );
-    rowKeyColumn2 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "杞﹀瀷" );
-    rowKeyColumn3 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "鍙戝姩鏈洪浂浠跺彿" );
-    rowKeyColumn4 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "鍙戝姩鏈哄洓浣嶇爜" );
-    tempRowKeyCells1 := selectset( rowKeyColumn1,GeneralExcelImportAndExportDataCell,cell,true );
-    tempRowKeyCells2 := selectset( rowKeyColumn2,GeneralExcelImportAndExportDataCell,cell,true );
-    tempRowKeyCells3 := selectset( rowKeyColumn3,GeneralExcelImportAndExportDataCell,cell,true );
-    tempRowKeyCells4 := selectset( rowKeyColumn4,GeneralExcelImportAndExportDataCell,cell,true );
-    
-    for( i := 0; i< tempRowKeyCells1.Size(); i++ ){
-      tempRowKeyCell1 := tempRowKeyCells1.Element( i );
-      tempRowKeyCell2 := tempRowKeyCells2.Element( i );
-      tempRowKeyCell3 := tempRowKeyCells3.Element( i );
-      tempRowKeyCell4 := tempRowKeyCells4.Element( i );
-      
-      rowKey := tempRowKeyCell1.Value() + tempRowKeyCell2.Value() + tempRowKeyCell3.Value() + tempRowKeyCell4.Value();
-      
-      tempHandle := rowTree.GetHandle( rowKey );
-      rowTree.Root().AddChild( tempHandle ,i);
-      rows.Add( tempRowKeyCell1.GeneralExcelImportAndExportDataRow());
-      rowKeys.Add( rowKey );
-    }
-  *]
-}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl
deleted file mode 100644
index 44609af..0000000
--- a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl
+++ /dev/null
@@ -1,39 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GenerateColumnIndex (
-  const GeneralExcelImportAndExportDataTable table,
-  LocalTable localTable,
-  NamedValueTree columnTree,
-  LocalColumns columns
-)
-{
-  TextBody:
-  [*
-    // rislai Jun-22-2024 (created)
-    tableColumns := selectset( table,GeneralExcelImportAndExportDataColumn,column,true );
-    for( i := 0; i< tableColumns.Size(); i++ ){
-      generalColumn := tableColumns.Element( i );
-      tempHandle := columnTree.GetHandle( generalColumn.Name() );
-    
-      nameValue := guard( columnTree.Root().Child( tempHandle ),null( NamedValue )); 
-      if( isnull( nameValue )){
-        index := 999;
-        if( generalColumn.Name() = "浜у湴" ){
-          index := 1;
-        }else if( generalColumn.Name() = "杞﹀瀷" ){
-          index := 2;
-        }else if( generalColumn.Name() = "鍙戝姩鏈洪浂浠跺彿" ){
-          index := 3;
-        }else if( generalColumn.Name() = "鍙戝姩鏈哄洓浣嶇爜" ){
-          index := 4;
-        }else{
-          // 2023/01/01
-          index := [Number]generalColumn.Name().ReplaceAll( "/", "" );
-        }
-        column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),CustomIndex := index );
-        columns.Add( column );
-        columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
-      }
-    }
-  *]
-}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl
index 1072935..bc72bc4 100644
--- a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl
@@ -7,8 +7,8 @@
     // rislai Jun-21-2024 (created)
     attributeNames := construct( Strings );
     
-    attributeNames.Add( "BaseVersion" );
-    attributeNames.Add( "CompareVersion" );
+    attributeNames.Add( "Actual" );
+    attributeNames.Add( "Plan" );
     attributeNames.Add( "Gap" );
     
     return &attributeNames;
diff --git a/_Main/BL/Type_LocalRow/Attribute_Remark.qbl b/_Main/BL/Type_LocalRow/Attribute_Remark.qbl
new file mode 100644
index 0000000..ccc01d0
--- /dev/null
+++ b/_Main/BL/Type_LocalRow/Attribute_Remark.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Remark
+{
+  #keys: '3[412672.1.76649345][412672.1.76649344][412672.1.76649346]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_TemplateManager/StaticMethod_GetCurveTemplate.qbl b/_Main/BL/Type_TemplateManager/StaticMethod_GetCurveTemplate.qbl
index 2be5530..3d88d7f 100644
--- a/_Main/BL/Type_TemplateManager/StaticMethod_GetCurveTemplate.qbl
+++ b/_Main/BL/Type_TemplateManager/StaticMethod_GetCurveTemplate.qbl
@@ -23,84 +23,84 @@
     }
     xmlTemplate := xmlTemplate + "</column>";
     
-    xmlTemplate := xmlTemplate + "<column><name>AUDI B9 PA</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>AUDI B9 PA</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>AUDI C8</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>AUDI C8</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Q5 Derivat</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Q5 Derivat</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Q5 NF PA</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Q5 NF PA</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Magotan B8L FL</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Magotan B8L FL</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Magotan B9</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Magotan B9</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>CC FB PA</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>CC FB PA</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>CC ShBr</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>CC ShBr</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>B-SMV</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>B-SMV</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>B-Main SUV</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>B-Main SUV</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Tayron PA</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Tayron PA</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Tayron NF</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Tayron NF</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Tayron X PA</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Tayron X PA</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Tayron GTE</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Tayron GTE</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Q3 NF</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Q3 NF</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
-    xmlTemplate := xmlTemplate + "<column><name>Q3 Derivat</name><type>Number</type>";
+    xmlTemplate := xmlTemplate + "<column><name>Q3 Derivat</name><type>String</type>";
     for( i := 0; i < totalDate ; i++ ){
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      xmlTemplate := xmlTemplate + '<cell value=""/>';
     }
     xmlTemplate := xmlTemplate + "</column>";
     
diff --git a/_Main/BL/Type_TemplateManager/StaticMethod_GetIDSTemplate.qbl b/_Main/BL/Type_TemplateManager/StaticMethod_GetIDSTemplate.qbl
index 4616fe0..3c57d48 100644
--- a/_Main/BL/Type_TemplateManager/StaticMethod_GetIDSTemplate.qbl
+++ b/_Main/BL/Type_TemplateManager/StaticMethod_GetIDSTemplate.qbl
@@ -14,22 +14,22 @@
     xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?><table><name>'+ sheetName +'</name>';
     
     xmlTemplate := xmlTemplate + "<column><name>浜у湴</name><type>String</type>";
-    xmlTemplate := xmlTemplate + '<cell value="闀挎槬"/>';
+    // xmlTemplate := xmlTemplate + '<cell value=""/>';
     xmlTemplate := xmlTemplate + "</column>";
     
     xmlTemplate := xmlTemplate + "<column><name>杞﹀瀷</name><type>String</type>";
-    xmlTemplate := xmlTemplate + '<cell value="30C"/>';
+    // xmlTemplate := xmlTemplate + '<cell value=""/>';
     xmlTemplate := xmlTemplate + "</column>";
     
     xmlTemplate := xmlTemplate + "<column><name>鍙戝姩鏈哄彿</name><type>String</type>";
-    xmlTemplate := xmlTemplate + '<cell value="06S 100 010 N"/>';
+    // xmlTemplate := xmlTemplate + '<cell value=""/>';
     xmlTemplate := xmlTemplate + "</column>";
     
     actualDate := Date::ActualDate();
     
     for( i := 0 ; i < dateNumber ; i++ ){
       xmlTemplate := xmlTemplate + "<column><name>" + (actualDate + i).Format( "Y/M/D" ) + "</name><type>Number</type>";
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      // xmlTemplate := xmlTemplate + '<cell value=""/>';
       xmlTemplate := xmlTemplate + "</column>";
     }
     
diff --git a/_Main/BL/Type_TemplateManager/StaticMethod_GetPPATemplate.qbl b/_Main/BL/Type_TemplateManager/StaticMethod_GetPPATemplate.qbl
index d6a6a66..1aba0e9 100644
--- a/_Main/BL/Type_TemplateManager/StaticMethod_GetPPATemplate.qbl
+++ b/_Main/BL/Type_TemplateManager/StaticMethod_GetPPATemplate.qbl
@@ -11,14 +11,14 @@
     
     xmlTemplate := xmlTemplate + "<column><name>鍏綅鐮�</name><type>String</type>";
     
-    xmlTemplate := xmlTemplate + '<cell value="86LC2G"/>';
+    // xmlTemplate := xmlTemplate + '<cell value=" "/>';
     xmlTemplate := xmlTemplate + "</column>";
     
     actualDate := Date::ActualDate();
     
     for( i := 1 ; i <= 12 ; i++ ){
       xmlTemplate := xmlTemplate + "<column><name>" + Date::Construct( actualDate.Year(),i,1 ).Format( "Y/M/D" ) + "</name><type>Number</type>";
-      xmlTemplate := xmlTemplate + '<cell value="0"/>';
+      // xmlTemplate := xmlTemplate + '<cell value=" "/>';
       xmlTemplate := xmlTemplate + "</column>";
     }
     
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def
index 59d21f4..30c6294 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def
@@ -27,7 +27,7 @@
       Properties:
       [
         Image: 'FLASH'
-        Label: 'Requirement upload'
+        Label: 'Demand upload'
         Taborder: 1
       ]
     }

--
Gitblit v1.9.3