From bce35410b00e2b7228ab5409744e173f2726b8d3 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期一, 01 七月 2024 14:43:08 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg

---
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixEditorActionBarPage250.def                                      |   10 
 _Main/BL/Relations/Relation_OfflinePlanColumn_MacroPlan_MacroPlan_OfflinePlanColumn.qbl                                               |   23 +
 _Main/BL/Type_OfflinePlanColumn/Attribute_ColumnDate.qbl                                                                              |    8 
 _Main/BL/Type_OfflinePlanColumn/TypeIndex_OfflinePlanColumnTypeIndex.qbl                                                              |   12 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def                                  |   11 
 _Main/BL/Relations/Relation_OfflinePlanRow_MacroPlan_MacroPlan_OfflinePlanRow.qbl                                                     |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_MatrixEditor951.def                                                   |   97 ++++
 _Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanColumn_OfflinePlanColumn_OfflinePlanCell.qbl                                   |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader.def                                                           |   76 +++
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bSaveAsDraft_OnClick.def                                       |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/_ROOT_Component_FormOfflinePlan.def                                             |   18 
 _Main/BL/Type_OfflinePlanCell/Attribute_Value.qbl                                                                                     |    7 
 _var/_Main/ProjSettings/EditorTC/Views/车道整班分析_[413988.0.1301140601].vw                                                                |  500 ++++++++++++++++++++++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bOfflinePlan_OnClick.def |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDownload_OnClick.def                                          |   12 
 _Main/BL/Type_OfflinePlanRow/_ROOT_Type_OfflinePlanRow.qbl                                                                            |    9 
 _Main/BL/Type_OfflinePlanRow/Attribute_ProductionLine.qbl                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRefresh_OnClick.def                                           |   20 
 _Main/BL/Type_OfflinePlanRow/Attribute_RowNr.qbl                                                                                      |    7 
 _Main/BL/Type_OfflinePlanColumn/Attribute_ColumnName.qbl                                                                              |    7 
 _Main/BL/Type_OfflinePlanCell/Attribute_Shift.qbl                                                                                     |    8 
 _Main/BL/Type_WholeShift/Method_PostProcessing2.qbl                                                                                   |    5 
 _Main/BL/Type_OfflinePlanColumn/Function_CalcColumnName.qbl                                                                           |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDeductionOfReplacementLoss_OnClick.def                        |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bConfirm_OnClick.def                                           |   12 
 _Main/BL/Type_OfflinePlanCell/_ROOT_Type_OfflinePlanCell.qbl                                                                          |    9 
 _Main/BL/Type_WholeShift/Method_IsRoundingOrZeroFilling4.qbl                                                                          |   35 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixeditorContextMenu204.def                                        |   10 
 _Main/UI/MacroPlannerWebApp/Views/OfflinePlan.vw                                                                                      |   92 ++++
 _Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanRow_OfflinePlanRow_OfflinePlanCell.qbl                                         |   23 +
 _Main/BL/Type_OfflinePlanRow/TypeIndex_OfflinePlanRowTypeIndex.qbl                                                                    |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def                                     |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pContent#611.def                                                      |   14 
 _Main/BL/Type_OfflinePlanRow/Attribute_ProductID.qbl                                                                                  |    8 
 _Main/BL/Type_OfflinePlanColumn/Attribute_ColumnIndex.qbl                                                                             |    7 
 _Main/BL/Type_OfflinePlanColumn/_ROOT_Type_OfflinePlanColumn.qbl                                                                      |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRestore_OnClick.def                                           |   12 
 _Main/BL/Type_OfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl                                                                     |  103 ++++
 _Main/BL/Type_OfflinePlanRow/Attribute_Type.qbl                                                                                       |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def                     |    6 
 40 files changed, 1,316 insertions(+), 2 deletions(-)

diff --git a/_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanColumn_OfflinePlanColumn_OfflinePlanCell.qbl b/_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanColumn_OfflinePlanColumn_OfflinePlanCell.qbl
new file mode 100644
index 0000000..44c130e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanColumn_OfflinePlanColumn_OfflinePlanCell.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OfflinePlanCell_OfflinePlanColumn_OfflinePlanColumn_OfflinePlanCell
+{
+  #keys: '1[413988.0.1296697089]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide OfflinePlanColumn
+  {
+    #keys: '3[413988.0.1296697091][413988.0.1296697090][413988.0.1296697092]'
+    Cardinality: '0to1'
+    ObjectDefinition: OfflinePlanCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OfflinePlanCell
+  {
+    #keys: '3[413988.0.1296697094][413988.0.1296697093][413988.0.1296697095]'
+    Cardinality: '1toN'
+    ObjectDefinition: OfflinePlanColumn
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanRow_OfflinePlanRow_OfflinePlanCell.qbl b/_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanRow_OfflinePlanRow_OfflinePlanCell.qbl
new file mode 100644
index 0000000..dfd7e00
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanRow_OfflinePlanRow_OfflinePlanCell.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OfflinePlanCell_OfflinePlanRow_OfflinePlanRow_OfflinePlanCell
+{
+  #keys: '1[413988.0.1296697102]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide OfflinePlanRow
+  {
+    #keys: '3[413988.0.1296697104][413988.0.1296697103][413988.0.1296697105]'
+    Cardinality: '0to1'
+    ObjectDefinition: OfflinePlanCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OfflinePlanCell
+  {
+    #keys: '3[413988.0.1296697107][413988.0.1296697106][413988.0.1296697108]'
+    Cardinality: '1toN'
+    ObjectDefinition: OfflinePlanRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_OfflinePlanColumn_MacroPlan_MacroPlan_OfflinePlanColumn.qbl b/_Main/BL/Relations/Relation_OfflinePlanColumn_MacroPlan_MacroPlan_OfflinePlanColumn.qbl
new file mode 100644
index 0000000..ddb1bef
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OfflinePlanColumn_MacroPlan_MacroPlan_OfflinePlanColumn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OfflinePlanColumn_MacroPlan_MacroPlan_OfflinePlanColumn
+{
+  #keys: '1[413988.0.1296697061]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1296697063][413988.0.1296697062][413988.0.1296697064]'
+    Cardinality: '0to1'
+    ObjectDefinition: OfflinePlanColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OfflinePlanColumn
+  {
+    #keys: '3[413988.0.1296697066][413988.0.1296697065][413988.0.1296697067]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_OfflinePlanRow_MacroPlan_MacroPlan_OfflinePlanRow.qbl b/_Main/BL/Relations/Relation_OfflinePlanRow_MacroPlan_MacroPlan_OfflinePlanRow.qbl
new file mode 100644
index 0000000..c9dde81
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OfflinePlanRow_MacroPlan_MacroPlan_OfflinePlanRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OfflinePlanRow_MacroPlan_MacroPlan_OfflinePlanRow
+{
+  #keys: '1[413988.0.1296696992]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1296696994][413988.0.1296696993][413988.0.1296696995]'
+    Cardinality: '0to1'
+    ObjectDefinition: OfflinePlanRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OfflinePlanRow
+  {
+    #keys: '3[413988.0.1296696997][413988.0.1296696996][413988.0.1296696998]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_OfflinePlanCell/Attribute_Shift.qbl b/_Main/BL/Type_OfflinePlanCell/Attribute_Shift.qbl
new file mode 100644
index 0000000..b0e804c
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanCell/Attribute_Shift.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Shift
+{
+  #keys: '3[413988.0.1303338462][413988.0.1303338461][413988.0.1303338463]'
+  Description: '鐝'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanCell/Attribute_Value.qbl b/_Main/BL/Type_OfflinePlanCell/Attribute_Value.qbl
new file mode 100644
index 0000000..bf64a48
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanCell/Attribute_Value.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Value
+{
+  #keys: '3[413988.0.1296697080][413988.0.1296697079][413988.0.1296697081]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl b/_Main/BL/Type_OfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl
new file mode 100644
index 0000000..5e7cd09
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl
@@ -0,0 +1,103 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RefreshOfflinePlan (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    macroPlan.OfflinePlanRow( relflush );
+    macroPlan.OfflinePlanColumn( relflush );
+    
+    // 鐢熸垚涓嬬嚎璁″垝琛�
+    traverse ( macroPlan, Unit, u, u.HasCapacityTypeTime() and u.Name() = "ZP4-M3" ) {
+      // 鍒涘缓浜х嚎琛�
+      macroPlan.OfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := "", Type := "0" );
+      
+      traverse ( u, Operation, o ) {
+        traverse ( o, PeriodTaskOperation.NewSupply, ns ) {
+          // 鎵捐
+          oprQuantity := OfflinePlanRow::FindOfflinePlanRowTypeIndex( u.ID(), ns.AsProductionSupply().ProductInStockingPoint_MP().ProductID(), "1" );
+          oprOrder    := OfflinePlanRow::FindOfflinePlanRowTypeIndex( u.ID(), ns.AsProductionSupply().ProductInStockingPoint_MP().ProductID(), "2" );
+          if ( isnull( oprQuantity ) and isnull( oprOrder ) ) {
+            oprQuantity := macroPlan.OfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := ns.AsProductionSupply().ProductInStockingPoint_MP().ProductID(), Type := "1" );
+            oprOrder    := macroPlan.OfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := ns.AsProductionSupply().ProductInStockingPoint_MP().ProductID(), Type := "2" );
+          }
+          
+          // 鎵惧垪
+          opc := OfflinePlanColumn::FindOfflinePlanColumnTypeIndex( ns.Start().Date() );
+          if ( isnull( opc ) ) {
+            opc := macroPlan.OfflinePlanColumn( relnew, ColumnDate := ns.Start().Date() );
+          }
+          
+          // 璧嬪�煎崟鍏冩牸
+          cellQuantity := opc.OfflinePlanCell( relnew, Value := [String]ns.Quantity().Round( 0 ), Shift := ns.PeriodTask_MP().UnitPeriod().astype( UnitPeriodTimeBase ).ShiftPattern().Name() );
+          cellQuantity.OfflinePlanRow( relset, oprQuantity );
+          cellOrder := opc.OfflinePlanCell( relnew, Value := "鍗曞彿" );
+          cellOrder.OfflinePlanRow( relset, oprOrder );
+        }
+      }
+      
+      // 鍒涘缓鎬婚噺琛�
+      macroPlan.OfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := "Z", Type := "3" );
+      // 鍒涘缓鐝琛�
+      macroPlan.OfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := "Z", Type := "4" );
+    }
+    
+    // 鍒涘缓浜у搧鍒�&绫诲瀷鍒�
+    productOPC := macroPlan.OfflinePlanColumn( relnew, ColumnDate := macroPlan.StartOfPlanning().Date() - 2 );
+    typeOPC    := macroPlan.OfflinePlanColumn( relnew, ColumnDate := macroPlan.StartOfPlanning().Date() - 1 );
+    traverse ( macroPlan, OfflinePlanRow, opr ) {
+      if ( opr.Type() = "0" ) {
+        productLineCell := productOPC.OfflinePlanCell( relnew, Value := opr.ProductionLine() );
+        productLineCell.OfflinePlanRow( relset, opr );
+      } else if( opr.Type() = "1" ) {
+        productCell := productOPC.OfflinePlanCell( relnew, Value := opr.ProductID() );
+        productCell.OfflinePlanRow( relset, opr );
+        typeCell    := typeOPC.OfflinePlanCell( relnew, Value :=  "Quantity" );
+        typeCell.OfflinePlanRow( relset, opr );
+      } else if ( opr.Type() = "2" ) {
+        typeCell    := typeOPC.OfflinePlanCell( relnew, Value :=  "Order" );
+        typeCell.OfflinePlanRow( relset, opr );
+      } else if ( opr.Type() = "3" ) {
+        totalCell := productOPC.OfflinePlanCell( relnew, Value := "鍚堣" );
+        totalCell.OfflinePlanRow( relset, opr );
+        totalCell := typeOPC.OfflinePlanCell( relnew, Value :=  "鎬婚噺" );
+        totalCell.OfflinePlanRow( relset, opr );
+      } else if ( opr.Type() = "4" ) {
+        shiftCell := typeOPC.OfflinePlanCell( relnew, Value :=  "鐝" );
+        shiftCell.OfflinePlanRow( relset, opr );
+      }
+    }
+    
+    // 琛ュ叏鎬婚噺鍜岀彮娆�
+    totalOPRs := selectset( macroPlan, OfflinePlanRow, tempOPR, tempOPR.Type() = "3" );
+    shiftOPRs := selectset( macroPlan, OfflinePlanRow, tempOPR, tempOPR.Type() = "4" );
+    traverse ( macroPlan, OfflinePlanColumn, opc, opc.OfflinePlanCell( relsize ) > 0 and opc.ColumnDate() >= macroPlan.StartOfPlanning().Date() ) {
+      traverse ( totalOPRs, Elements, totalOPR ) {
+        total     := sum( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = totalOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1", [Real]tempOPC.Value() );
+        totalCell := opc.OfflinePlanCell( relnew, Value := [String]total );
+        totalCell.OfflinePlanRow( relset, totalOPR );
+      }
+      
+      traverse ( shiftOPRs, Elements, shiftOPR ) {
+        shift := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = shiftOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1" ); 
+        if ( not isnull( shift ) ) {
+          shiftCell := opc.OfflinePlanCell( relnew, Value := shift.Shift() );
+          shiftCell.OfflinePlanRow( relset, shiftOPR );
+        }
+      }
+    }
+    
+    // 琛ュ叏鏃堕棿鍒�
+    indexDate := macroPlan.StartOfPlanning().Date();
+    endDate   := Date::Construct( indexDate.Year(), 12, 31 );
+    while ( indexDate <= endDate ) {
+      opc := OfflinePlanColumn::FindOfflinePlanColumnTypeIndex( indexDate );
+      if ( isnull( opc ) ) {
+        opc := macroPlan.OfflinePlanColumn( relnew, ColumnDate := indexDate );
+      }
+      indexDate := indexDate + 1;
+    }
+  *]
+}
diff --git a/_Main/BL/Type_OfflinePlanCell/_ROOT_Type_OfflinePlanCell.qbl b/_Main/BL/Type_OfflinePlanCell/_ROOT_Type_OfflinePlanCell.qbl
new file mode 100644
index 0000000..e946428
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanCell/_ROOT_Type_OfflinePlanCell.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OfflinePlanCell
+{
+  #keys: '5[413988.0.1296696989][413988.0.1296696987][0.0.0][413988.0.1296696988][413988.0.1296696990]'
+  BaseType: Object
+  StructuredName: 'OfflinePlanCells'
+}
diff --git a/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnDate.qbl b/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnDate.qbl
new file mode 100644
index 0000000..620f728
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ColumnDate
+{
+  #keys: '3[413988.0.1295080211][413988.0.1295080210][413988.0.1295080212]'
+  IsReadOnly: true
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnIndex.qbl b/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnIndex.qbl
new file mode 100644
index 0000000..d0d56a5
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ColumnIndex
+{
+  #keys: '3[413988.0.1296697042][413988.0.1296697041][413988.0.1296697043]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnName.qbl b/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnName.qbl
new file mode 100644
index 0000000..b23a75b
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanColumn/Attribute_ColumnName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ColumnName
+{
+  #keys: '3[413988.0.1296697052][413988.0.1296697051][413988.0.1296697053]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanColumn/Function_CalcColumnName.qbl b/_Main/BL/Type_OfflinePlanColumn/Function_CalcColumnName.qbl
new file mode 100644
index 0000000..5063e35
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanColumn/Function_CalcColumnName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcColumnName
+{
+  TextBody:
+  [*
+    // lihongji Jun-27-2024 (created)
+    
+    value := ifexpr( this.ColumnDate() < this.MacroPlan().StartOfPlanning().Date(), "", this.ColumnDate().Format( "Y/M2/D2" ) );
+    
+    this.ColumnName( value );
+  *]
+}
diff --git a/_Main/BL/Type_OfflinePlanColumn/TypeIndex_OfflinePlanColumnTypeIndex.qbl b/_Main/BL/Type_OfflinePlanColumn/TypeIndex_OfflinePlanColumnTypeIndex.qbl
new file mode 100644
index 0000000..15f5410
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanColumn/TypeIndex_OfflinePlanColumnTypeIndex.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex OfflinePlanColumnTypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: ColumnDate
+    }
+  ]
+}
diff --git a/_Main/BL/Type_OfflinePlanColumn/_ROOT_Type_OfflinePlanColumn.qbl b/_Main/BL/Type_OfflinePlanColumn/_ROOT_Type_OfflinePlanColumn.qbl
new file mode 100644
index 0000000..cf06591
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanColumn/_ROOT_Type_OfflinePlanColumn.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OfflinePlanColumn
+{
+  #keys: '5[413988.0.1296696984][413988.0.1296696982][0.0.0][413988.0.1296696983][413988.0.1296696985]'
+  BaseType: Object
+  StructuredName: 'OfflinePlanColumns'
+}
diff --git a/_Main/BL/Type_OfflinePlanRow/Attribute_ProductID.qbl b/_Main/BL/Type_OfflinePlanRow/Attribute_ProductID.qbl
new file mode 100644
index 0000000..0bd3a84
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanRow/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[413988.0.1296697032][413988.0.1296697031][413988.0.1296697033]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanRow/Attribute_ProductionLine.qbl b/_Main/BL/Type_OfflinePlanRow/Attribute_ProductionLine.qbl
new file mode 100644
index 0000000..2393a64
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanRow/Attribute_ProductionLine.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductionLine
+{
+  #keys: '3[413988.0.1296697022][413988.0.1296697021][413988.0.1296697023]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanRow/Attribute_RowNr.qbl b/_Main/BL/Type_OfflinePlanRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..5638be5
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanRow/Attribute_RowNr.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[413988.0.1296697012][413988.0.1296697011][413988.0.1296697013]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanRow/Attribute_Type.qbl b/_Main/BL/Type_OfflinePlanRow/Attribute_Type.qbl
new file mode 100644
index 0000000..4905125
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanRow/Attribute_Type.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Type
+{
+  #keys: '3[413988.0.1295121717][413988.0.1295121716][413988.0.1295121718]'
+  Description:
+  [*
+    浜х嚎鍚嶈    锛�0
+    Quantity琛岋細1
+    Order琛�     锛�2
+    鍚堣琛�        锛�3
+    鐝琛�        锛�4
+  *]
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanRow/TypeIndex_OfflinePlanRowTypeIndex.qbl b/_Main/BL/Type_OfflinePlanRow/TypeIndex_OfflinePlanRowTypeIndex.qbl
new file mode 100644
index 0000000..9850e05
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanRow/TypeIndex_OfflinePlanRowTypeIndex.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex OfflinePlanRowTypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: ProductionLine
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: ProductID
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: Type
+    }
+  ]
+}
diff --git a/_Main/BL/Type_OfflinePlanRow/_ROOT_Type_OfflinePlanRow.qbl b/_Main/BL/Type_OfflinePlanRow/_ROOT_Type_OfflinePlanRow.qbl
new file mode 100644
index 0000000..4e131fd
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanRow/_ROOT_Type_OfflinePlanRow.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OfflinePlanRow
+{
+  #keys: '5[413988.0.1296696979][413988.0.1296696977][0.0.0][413988.0.1296696978][413988.0.1296696980]'
+  BaseType: Object
+  StructuredName: 'OfflinePlanRows'
+}
diff --git a/_Main/BL/Type_WholeShift/Method_IsRoundingOrZeroFilling4.qbl b/_Main/BL/Type_WholeShift/Method_IsRoundingOrZeroFilling4.qbl
new file mode 100644
index 0000000..f1ba88f
--- /dev/null
+++ b/_Main/BL/Type_WholeShift/Method_IsRoundingOrZeroFilling4.qbl
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: #root
+Method IsRoundingOrZeroFilling4 (
+  MacroPlan macroPlan,
+  Unit unit
+)
+{
+  Description: '杞﹂亾鏁寸彮'
+  TextBody:
+  [*
+    traverse ( unit, Lane.LaneLeg.Trip, t ) {
+      traverse ( t, ProductInTrip, pit, pit.Quantity() > 0.0 ) {
+        // 鑾峰彇浜у搧lotsize鍊嶆暟
+        lotsize := 1;
+        if ( pit.Product_MP().ParentID().Regex( "缂镐綋" ) ) {
+          lotsize := macroPlan.CylinderBlock();
+        } else if ( pit.Product_MP().ParentID().Regex( "缂哥洊" ) ) {
+          lotsize := macroPlan.CylinderHead();
+        } else if ( pit.Product_MP().ParentID().Regex( "杩炴潌" ) ) {
+          lotsize := macroPlan.ConnectingRod();
+        } else if ( pit.Product_MP().ParentID().Regex( "鏇茶酱" ) ) {
+          lotsize := macroPlan.Crankshaft();
+        } else if ( pit.Product_MP().ParentID().Regex( "鏇茶酱" ) ) {
+          lotsize := macroPlan.BalanceAxis();
+        }
+        
+        if ( lotsize > 1 ) {
+          debuginfo( "浜у搧ID锛�", pit.ProductID(), "    浜у搧鏁伴噺锛�", pit.Quantity(), "    lotsize锛�", lotsize );
+          quantityToBeSupplemented := lotsize - ( pit.Quantity() mod lotsize );
+          pit.Update( pit.Quantity() + quantityToBeSupplemented, true );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_WholeShift/Method_PostProcessing2.qbl b/_Main/BL/Type_WholeShift/Method_PostProcessing2.qbl
index d1b5969..90057d1 100644
--- a/_Main/BL/Type_WholeShift/Method_PostProcessing2.qbl
+++ b/_Main/BL/Type_WholeShift/Method_PostProcessing2.qbl
@@ -47,9 +47,10 @@
     }
     
     // 杞﹂亾鏁寸彮
-    traverse ( macroPlan, Unit, unit, unit.IsToFill() and unit.HasCapacityTypeTransportQuantity() ) {
-      unitName := unit.Name();
+    traverse ( macroPlan, Unit, u, u.IsToFill() and u.HasCapacityTypeTransportQuantity() ) {
+      unitName := u.Name();
       debuginfo( "杞﹂亾浜х嚎: ", unitName );
+      this.IsRoundingOrZeroFilling4( macroPlan, u );
     }
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
index c40d27d..0eca66a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
@@ -22,6 +22,17 @@
       BaseType: 'WebButton'
       Properties:
       [
+        Taborder: 2
+      ]
+    }
+    Component bOfflinePlan
+    {
+      #keys: '[413988.0.1296872738]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'LIGHTBULB'
+        Label: 'Offline plan'
         Taborder: 1
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bOfflinePlan_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bOfflinePlan_OnClick.def
new file mode 100644
index 0000000..eaab98b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bOfflinePlan_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: abgSecondDevelopmentPlan/bOfflinePlan
+Response OnClick () id:Response_MacroPlanner_abgSecondDevelopmentPlan_bOfflinePlan_OnClick
+{
+  #keys: '[413988.0.1296872869]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "OfflinePlan", true);
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def
index d0331a8..258cfb2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogUpperLimitOfTransferCapacity/Component_pnlContent.def
@@ -11,6 +11,7 @@
       BaseType: 'WebNumberPicker'
       Properties:
       [
+        DataBinding: 'MacroPlan.UpperLimitOfTransferCapacityZKG'
         Label: 'ZKG(pcs)'
         Taborder: 0
       ]
@@ -21,6 +22,7 @@
       BaseType: 'WebNumberPicker'
       Properties:
       [
+        DataBinding: 'MacroPlan.UpperLimitOfTransferCapacityZKM'
         Label: 'ZKM(pcs)'
         Taborder: 1
       ]
@@ -31,6 +33,7 @@
       BaseType: 'WebNumberPicker'
       Properties:
       [
+        DataBinding: 'MacroPlan.UpperLimitOfTransferCapacityPL'
         Label: 'PL(pcs)'
         Taborder: 2
       ]
@@ -41,6 +44,7 @@
       BaseType: 'WebNumberPicker'
       Properties:
       [
+        DataBinding: 'MacroPlan.UpperLimitOfTransferCapacityKW'
         Label: 'KW(pcs)'
         Taborder: 3
       ]
@@ -51,6 +55,7 @@
       BaseType: 'WebNumberPicker'
       Properties:
       [
+        DataBinding: 'MacroPlan.UpperLimitOfTransferCapacityAGW'
         Label: 'AGW(pcs)'
         Taborder: 4
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_MatrixEditor951.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_MatrixEditor951.def
new file mode 100644
index 0000000..b27dd5e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_MatrixEditor951.def
@@ -0,0 +1,97 @@
+Quintiq file version 2.0
+Component MatrixEditor951
+{
+  #keys: '[413988.0.1296803041]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell491
+    {
+      #keys: '[413988.0.1296803042]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractor548
+        {
+          #keys: '[413988.0.1296803043]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'OfflinePlanColumn.OfflinePlanCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'Value'
+        Column: 'OfflinePlanColumn'
+        Row: 'OfflinePlanRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows271
+    {
+      #keys: '[413988.0.1296803046]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor869
+        {
+          #keys: '[413988.0.1296803047]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'OfflinePlanRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'RowNr'
+        SortCriteria: 'ProductionLine;ProductID;Type'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns844
+    {
+      #keys: '[413988.0.1296803050]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor259
+        {
+          #keys: '[413988.0.1296803051]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'OfflinePlanColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'ColumnName'
+        SortCriteria: 'ColumnDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPage250
+    #child: matrixeditorContextMenu204
+  ]
+  Properties:
+  [
+    Columns: 'MatrixEditorColumns844'
+    ContextMenu: 'matrixeditorContextMenu204'
+    Rows: 'MatrixEditorRows271'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixEditorActionBarPage250.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixEditorActionBarPage250.def
new file mode 100644
index 0000000..f81dbd6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixEditorActionBarPage250.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPage250
+{
+  #keys: '[413988.0.1296803054]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixeditorContextMenu204.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixeditorContextMenu204.def
new file mode 100644
index 0000000..37b2b4c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_matrixeditorContextMenu204.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenu204
+{
+  #keys: '[413988.0.1296803057]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pContent\043611.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pContent\043611.def"
new file mode 100644
index 0000000..540aa26
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pContent\043611.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component pContent
+{
+  #keys: '[413988.0.1296872691]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditor951
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader.def
new file mode 100644
index 0000000..a1900d3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader.def
@@ -0,0 +1,76 @@
+Quintiq file version 2.0
+Component pHeader
+{
+  #keys: '[413988.0.1296872680]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bRefresh
+    {
+      #keys: '[413988.0.1296860898]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Refresh'
+        Taborder: 0
+      ]
+    }
+    Component bDownload
+    {
+      #keys: '[413988.0.1296875316]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Download'
+        Taborder: 1
+      ]
+    }
+    Component bDeductionOfReplacementLoss
+    {
+      #keys: '[413988.0.1297911732]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Deduction of replacement loss'
+        Taborder: 2
+      ]
+    }
+    Component bRestore
+    {
+      #keys: '[413988.0.1297911774]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Restore'
+        Taborder: 3
+      ]
+    }
+    Component bSaveAsDraft
+    {
+      #keys: '[413988.0.1297973728]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Save as draft'
+        Taborder: 4
+      ]
+    }
+    Component bConfirm
+    {
+      #keys: '[413988.0.1297973782]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Confirm'
+        Taborder: 5
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bConfirm_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bConfirm_OnClick.def
new file mode 100644
index 0000000..33f3e58
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bConfirm_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: pHeader/bConfirm
+Response OnClick () id:Response_pHeader_bConfirm_OnClick
+{
+  #keys: '[413988.0.1297974240]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDeductionOfReplacementLoss_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDeductionOfReplacementLoss_OnClick.def
new file mode 100644
index 0000000..b426c30
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDeductionOfReplacementLoss_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: pHeader/bDeductionOfReplacementLoss
+Response OnClick () id:Response_pHeader_bDeductionOfReplacementLoss_OnClick
+{
+  #keys: '[413988.0.1297973984]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDownload_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDownload_OnClick.def
new file mode 100644
index 0000000..3df7e29
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDownload_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: pHeader/bDownload
+Response OnClick () id:Response_pHeader_bDownload_OnClick
+{
+  #keys: '[413988.0.1297973899]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRefresh_OnClick.def
new file mode 100644
index 0000000..98e2fa5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRefresh_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: pHeader/bRefresh
+Response OnClick () id:Response_pHeader_bRefresh_OnClick
+{
+  #keys: '[413988.0.1297973814]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      OfflinePlanCell::RefreshOfflinePlan( MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRestore_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRestore_OnClick.def
new file mode 100644
index 0000000..2fcf6dc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRestore_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: pHeader/bRestore
+Response OnClick () id:Response_pHeader_bRestore_OnClick
+{
+  #keys: '[413988.0.1297974069]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bSaveAsDraft_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bSaveAsDraft_OnClick.def
new file mode 100644
index 0000000..6b50c94
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bSaveAsDraft_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: pHeader/bSaveAsDraft
+Response OnClick () id:Response_pHeader_bSaveAsDraft_OnClick
+{
+  #keys: '[413988.0.1297974155]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/_ROOT_Component_FormOfflinePlan.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/_ROOT_Component_FormOfflinePlan.def
new file mode 100644
index 0000000..be8fe4d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/_ROOT_Component_FormOfflinePlan.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormOfflinePlan
+{
+  #keys: '[413988.0.1296872622]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pHeader
+    #child: pContent
+  ]
+  Properties:
+  [
+    Image: 'WIND_ENGINE_OFFSHORE'
+    Title: 'OfflinePlan'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def
index fd89de9..4c092f7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTransferPlan/Response_pHeader_bMaximumDailyTransferCapacity_OnClick.def
@@ -7,6 +7,12 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   QuillAction
   {
+    Body:
+    [*
+      dlg := construct( DialogUpperLimitOfTransferCapacity );
+      
+      ApplicationMacroPlanner.ShowFormModal( dlg );
+    *]
     GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/OfflinePlan.vw b/_Main/UI/MacroPlannerWebApp/Views/OfflinePlan.vw
new file mode 100644
index 0000000..7bce92d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/OfflinePlan.vw
@@ -0,0 +1,92 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormOfflinePlan
+      {
+        title: 'QMacroPlanner::FormOfflinePlan'
+        shown: true
+        componentID: 'QMacroPlanner::FormOfflinePlan'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormOfflinePlan_pHeader
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlan_pContent
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlan_MatrixEditor951
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 36
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormOfflinePlan.MatrixEditor951'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Value
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Value'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ColumnDate'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ProductionLine';datamember:'ProductID';datamember:'Type'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'JACKHAMMER'
+    description: ''
+  }
+  formatversion: 2
+  id: 'OfflinePlan'
+  name: 'OfflinePlan'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_var/_Main/ProjSettings/EditorTC/Views/\350\275\246\351\201\223\346\225\264\347\217\255\345\210\206\346\236\220_\133413988.0.1301140601\135.vw" "b/_var/_Main/ProjSettings/EditorTC/Views/\350\275\246\351\201\223\346\225\264\347\217\255\345\210\206\346\236\220_\133413988.0.1301140601\135.vw"
new file mode 100644
index 0000000..f976497
--- /dev/null
+++ "b/_var/_Main/ProjSettings/EditorTC/Views/\350\275\246\351\201\223\346\225\264\347\217\255\345\210\206\346\236\220_\133413988.0.1301140601\135.vw"
@@ -0,0 +1,500 @@
+锘�# Quintiq GUI View File
+# Version 3.0
+
+PROPERTIES
+{
+  KEY := [413988.0.1301140601]
+  NAME := '杞﹂亾鏁寸彮鍒嗘瀽'
+  HELPPAGE := ''
+  PARENTKEY := [100676.19.414142820]
+  DOMAIN := 'MacroPlanner'
+  FOCUSED := [100828.0.145642700]
+  MUSTREADMDSSETTINGS := false
+  ISPERSONAL false
+  OWNERNAME 'quintiq/lihongji'
+  ICONIMAGE 'WINDOWS'
+  CREATIONDATETIME '2024-06-28T13:59:36'
+  CREATIONUSER 'quintiq/lihongji'
+  UPDATEDATETIME '2024-06-28T13:59:54'
+  UPDATEUSER 'quintiq/lihongji'
+  LASTACCESSDATE '2024-06-28'
+  VIEWSCOPE 0
+}
+AUTHORIZATIONS
+{
+  OPEN
+  {
+    AUTHORIZATIONS
+    {
+    }
+  }
+  EDIT
+  {
+    AUTHORIZATIONS
+    {
+    }
+  }
+}
+MDSINFO
+{
+  LOCAL ''
+  GLOBAL ''
+}
+INFOOBJECT
+{
+  KEY [892.10.659695]
+  OBJECTTYPE Application // appEditor
+  INFOOBJECTS
+  {
+   INFOOBJECT
+   {
+    KEY [892.10.659696]
+    OBJECTTYPE Frame // Frame
+    CONTENTS
+    {
+     State := maximized
+     (896,312,1024,768)
+     WorkspaceLocation := TreePath[R0.8;B0.0061;]
+    }
+    INFOOBJECTS
+    {
+     INFOOBJECT
+     {
+      KEY [103784.990.795900613]
+      OBJECTTYPE ValueHolder // vhSearchHistory
+      CONTENTS
+      {
+       Value ''
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [10786.1.820220316]
+      OBJECTTYPE ValueHolder // vhLoadingErrCount
+      CONTENTS
+      {
+       Value '0'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [10786.1.820229990]
+      OBJECTTYPE ValueHolder // vhLoadReason
+      CONTENTS
+      {
+       Value 'Startup'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [10786.1.821405088]
+      OBJECTTYPE ValueHolder // vhWriteErrorCount
+      CONTENTS
+      {
+       Value '0'
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [10786.2.342765638]
+      OBJECTTYPE ValueHolder // vhGlobals
+      CONTENTS
+      {
+       Value ''
+      }
+      BASEINFOOBJECTS
+      {
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [103784.990.815711421]
+      SINGLEINSTANCE false
+      ID 'Type Details'
+      PARENTKEY [892.10.659696]
+      OBJECTTYPE Form // frmObjectDefinitionBrowser
+      CREATETYPE frmObjectDefinitionBrowser
+      CONTENTS
+      {
+       State := normal
+       (485,0,400,912)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[L0.2;B0.5727;]TabIdx[0]Selection[FRONT]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [121142.0.500922030]
+        OBJECTTYPE GUIDataSetLevel // dslTypes
+        CONTENTS
+        {
+         Columns
+         {
+           Definition := [892.10.660027]
+           {
+             [892.10.660028]
+             [644.0.84080945]
+           }
+           SubTotals := true
+           Visible
+           {
+             Column internal[DataSetDataColumn] [121142.0.501068000]
+             {
+               Header := 'Name'
+               Width := 100
+               Subtotals := false
+               Specific
+               {
+                 DataPath := 'Name [1.2.1645]'
+               }
+             }
+             Column internal[DataSetDataColumn] [121142.0.501068001]
+             {
+               Header := 'BaseTypeName'
+               Width := 100
+               Subtotals := false
+               Specific
+               {
+                 DataPath := 'BaseTypeName [1.2.2198]'
+               }
+             }
+           }
+         }
+         DataMemberSort 'SortOrder [1.2.1686]' true true
+         ColumnSort [121142.0.501068000] true false
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [121142.0.500923128]
+        OBJECTTYPE List // lstObjectDefinitionBrowser
+        CONTENTS
+        {
+         Quantorrow := false
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [121142.0.500923177]
+          OBJECTTYPE GUIDataSetLevel // dslElements
+          CONTENTS
+          {
+           Columns
+           {
+             Definition := [103784.990.769111502]
+             {
+               [103784.990.795596828]
+               [103784.990.795596827]
+             }
+             SubTotals := true
+             Visible
+             {
+               Column internal[DataSetDataColumn] [121142.0.501068002]
+               {
+                 Width := 401
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'Outline [1.2.6115]'
+                 }
+               }
+               Column internal[DataSetDataColumn] [121142.0.501068003]
+               {
+                 Width := 319
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'ValueType [1.2.6117]'
+                 }
+               }
+             }
+           }
+           Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="internal[UITypeDisplayElementBase]">\n  <GEBFiltering Key="@Default_Filter1" TargetType="internal[UITypeDisplayElementBase]">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Outline1" ElementType="internal[UITypeDisplayElementBase]" ValueType="String">\n        <ColumnID>[121142.0.1058023525]</ColumnID>\n        <BaseName>Outline</BaseName>\n        <Name>Outline</Name>\n        <Title>Outline</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Outline</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Outline1">\n          <ColumnID>[121142.0.1058023525]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@5">\n          <ExpressionText></ExpressionText>\n          <Converter>\n            <ZeroConverter Key="@6">\n              <IsStandard>true</IsStandard>\n              <IsISO>false</IsISO>\n              <IsCustom>false</IsCustom>\n              <ConversionType>0</ConversionType>\n            </ZeroConverter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n  <GEBFiltering Key="@Hide_inherited_elements1" TargetType="internal[UITypeDisplayElementBase]">\n    <CurrentFilter>false</CurrentFilter>\n    <Name>Hide inherited elements</Name>\n    <Active>false</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>1</SortIndex>\n    <GEBFilteringData Key="@7">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Outline2" ElementType="internal[UITypeDisplayElementBase]" ValueType="String">\n        <ColumnID>[121142.0.507823646]</ColumnID>\n        <BaseName>Outline</BaseName>\n        <Name>Outline</Name>\n        <Title>Outline</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Outline</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@ValueType1" ElementType="internal[UITypeDisplayElementBase]" ValueType="String">\n        <ColumnID>[121142.0.507823661]</ColumnID>\n        <BaseName>ValueType</BaseName>\n        <Name>ValueType</Name>\n        <Title>ValueType</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ValueType</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@IsInherited1" ElementType="internal[UITypeDisplayElementBase]" ValueType="Boolean">\n        <ColumnID>[121142.0.507823701]</ColumnID>\n        <BaseName>IsInherited</BaseName>\n        <Name>IsInherited</Name>\n        <Title>IsInherited</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>IsInherited</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@8">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@9" Column="@Outline2">\n          <ColumnID>[121142.0.507823646]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@10" Column="@ValueType1">\n          <ColumnID>[121142.0.507823661]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@11" Column="@IsInherited1">\n          <ColumnID>[121142.0.507823701]</ColumnID>\n          <GEBFilterColumnMatch Key="@12">\n            <Operation>=</Operation>\n            <Enabled>true</Enabled>\n            <RHSValue>\n              <RHSConstantValue Key="@13">\n                <StringValue></StringValue>\n                <Value>false</Value>\n              </RHSConstantValue>\n            </RHSValue>\n          </GEBFilterColumnMatch>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@14">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n  <GEBFiltering Key="@Hide_empty_groups1" TargetType="internal[UITypeDisplayElementBase]">\n    <CurrentFilter>false</CurrentFilter>\n    <Name>Hide empty groups</Name>\n    <Active>false</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>2</SortIndex>\n    <GEBFilteringData Key="@15">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Outline3" ElementType="internal[UITypeDisplayElementBase]" ValueType="String">\n        <ColumnID>[121142.0.507823747]</ColumnID>\n        <BaseName>Outline</BaseName>\n        <Name>Outline</Name>\n        <Title>Outline</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Outline</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@16">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@17" Column="@Outline3">\n          <ColumnID>[121142.0.507823747]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@18">\n          <ExpressionText>object.istype( UITypeDisplayNewElementPlaceholder )\nor object.Group().ModeledElementsSize() &gt; 0</ExpressionText>\n          <Converter>\n            <ZeroConverter Key="@19">\n              <IsStandard>true</IsStandard>\n              <IsISO>false</IsISO>\n              <IsCustom>false</IsCustom>\n              <ConversionType>0</ConversionType>\n            </ZeroConverter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n  <GEBFiltering Key="@Hide_coded_elements1" TargetType="internal[UITypeDisplayElementBase]">\n    <CurrentFilter>false</CurrentFilter>\n    <Name>Hide coded elements</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>3</SortIndex>\n    <GEBFilteringData Key="@20">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Outline4" ElementType="internal[UITypeDisplayElementBase]" ValueType="String">\n        <ColumnID>[121142.0.1058023525]</ColumnID>\n        <BaseName>Outline</BaseName>\n        <Name>Outline</Name>\n        <Title>Outline</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Outline</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@21">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@22" Column="@Outline4">\n          <ColumnID>[121142.0.1058023525]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@23">\n          <ExpressionText>( object.istype( UITypeDisplayElement ) and object.Kind() = &quot;RELATION&quot; ) or\nobject.istype( UITypeDisplayGroupHeader ) or\nobject.istype( UITypeDisplayNewElementPlaceholder ) or\n( object.istype( UIModeledTypeDisplayElement ) and\n  not isnull(object.astype( UIModeledTypeDisplayElement ).ObjectModelObject()) and\n  object.astype( UIModeledTypeDisplayElement ).ObjectModelObject().Visible() )</ExpressionText>\n          <Converter>\n            <ZeroConverter Key="@24">\n              <IsStandard>true</IsStandard>\n              <IsISO>false</IsISO>\n              <IsCustom>false</IsCustom>\n              <ConversionType>0</ConversionType>\n            </ZeroConverter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+           DataMemberSort 'Index [1.2.7326]' true true
+           ColumnSort [121142.0.501068002] true false
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [121142.0.500923178]
+            OBJECTTYPE GUIDataSetLevel // dslOverrides
+            CONTENTS
+            {
+             Columns
+             {
+               Definition := [103784.990.1153959078]
+               {
+                 [103784.990.1159008565]
+               }
+               SubTotals := true
+               Visible
+               {
+                 Column internal[DataSetDataColumn] [121142.0.501068004]
+                 {
+                   Width := 100
+                   Subtotals := false
+                   Specific
+                   {
+                     DataPath := 'ObjectModelObject [1.3.4850]|TargetType [1.2.1730]'
+                   }
+                 }
+               }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [136402.0.98084624]
+      SINGLEINSTANCE false
+      ID 'Types per Module'
+      PARENTKEY [892.10.659696]
+      OBJECTTYPE Form // frmTypesByModule
+      CREATETYPE frmTypesByModule
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[L0.2;T0.4273;]TabIdx[0]Selection[FRONT]
+      }
+      BASEINFOOBJECTS
+      {
+       BASEINFOOBJECT
+       {
+        KEY [136402.0.98084624]
+        OBJECTTYPE GUIComponent // frmTypesByModule
+        COMPONENTDATA
+        {
+         [136402.0.98084624]:[103784.990.728734692]:[892.10.659816]:[514.0.129466]:[892.10.659835] STR 'true'
+        }
+       }
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [121142.0.1211769996]
+        OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel776
+        CONTENTS
+        {
+         Columns
+         {
+           Definition := [121142.0.950060792]
+           {
+             [121142.0.950062702]
+           }
+           SubTotals := true
+           Visible
+           {
+             Column internal[DataSetDataColumn] [121142.0.950062702]
+             {
+               Width := 100
+               Subtotals := false
+               Specific
+               {
+                 DataPath := 'Name [1.2.6744]'
+               }
+             }
+           }
+         }
+         ColumnSort [121142.0.950062702] true false
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [103784.990.728734692]
+        OBJECTTYPE List // ListTypes
+        CONTENTS
+        {
+         Quantorrow := false
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [101180.2.890701323]
+          OBJECTTYPE ValueHolder // ValueHolder
+          CONTENTS
+          {
+           Value 'false'
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [10786.2.342808981]
+          OBJECTTYPE ValueHolder // vhGlobals
+          CONTENTS
+          {
+           Value ''
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [892.10.659838]
+          OBJECTTYPE GUIDataSetLevel // dslTypes
+          CONTENTS
+          {
+           Columns
+           {
+             Definition := [121142.0.950060792]
+             {
+               [121142.0.950062702]
+             }
+             SubTotals := true
+             Visible
+             {
+               Column internal[DataSetDataColumn] [121142.0.950062702]
+               {
+                 Width := 367
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'Name [1.2.6744]'
+                 }
+               }
+             }
+           }
+           DataMemberSort 'IsDomain [1.2.6747]' false true
+           DataMemberSort 'IsSystemLibrary [1.2.7907]' true true
+           DataMemberSort 'IsAvailable [1.2.7451]' false true
+           ColumnSort [121142.0.950062702] true false
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [136402.0.98091406]
+            OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelTypes
+            CONTENTS
+            {
+             Columns
+             {
+               Definition := [103784.990.1535755633]
+               {
+                 [103784.990.1535759199]
+               }
+               SubTotals := true
+               Visible
+               {
+                 Column internal[DataSetDataColumn] [103784.990.1535759199]
+                 {
+                   Width := 375
+                   SizedByUser := true
+                   Subtotals := false
+                   Specific
+                   {
+                     DataPath := 'Name [1.2.1645]'
+                   }
+                 }
+               }
+             }
+             Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="internal[ObjectModelType]">\n  <GEBFiltering Key="@Default_Filter1" TargetType="internal[ObjectModelType]">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Name1" ElementType="internal[ObjectModelType]" ValueType="String">\n        <ColumnID>[413988.0.1111730433]</ColumnID>\n        <BaseName>Name</BaseName>\n        <Name>Name</Name>\n        <Title>Name</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Name1">\n          <ColumnID>[413988.0.1111730433]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@5">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+             DataMemberSort 'SortOrder [1.2.1686]' true true
+             ColumnSort [103784.990.1535759199] true false
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [135566.0.318964952]
+              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSpecializations
+              CONTENTS
+              {
+               Columns
+               {
+                 Definition := [103784.990.1535755633]
+                 {
+                   [103784.990.1535759199]
+                 }
+                 SubTotals := true
+                 Visible
+                 {
+                   Column internal[DataSetDataColumn] [103784.990.1535759199]
+                   {
+                     Width := 100
+                     Subtotals := false
+                     Specific
+                     {
+                       DataPath := 'Name [1.2.1645]'
+                     }
+                   }
+                 }
+               }
+               DataMemberSort 'SortOrder [1.2.1686]' true true
+               ColumnSort [103784.990.1535759199] true false
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [121142.0.36340892]
+      SINGLEINSTANCE false
+      ID 'Model Overview'
+      PARENTKEY [892.10.659696]
+      OBJECTTYPE Form // frmModelOverview
+      CREATETYPE frmModelOverview
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[R0.8;T0.9939;]TabIdx[0]Selection[FRONT]
+      }
+      BASEINFOOBJECTS
+      {
+       BASEINFOOBJECT
+       {
+        KEY [121142.0.36340892]
+        OBJECTTYPE GUIContainerComponent // frmModelOverview
+        COMPONENTDATA
+        {
+         [121142.0.36340892]:[121142.0.37512339]:[121142.0.40573788] STR 'PeriodTaskOperation:Unit:PeriodTaskLaneLeg:Operation:MacroPlan:Lane:PeriodTask_MP:NewSupply:LaneLeg:UnitPeriod:DependentDemand:ProductInTrip:Trip#601:266:-40:657:238:266:189:211:497:17:178:464:513#168:437:163:276:350:529:165:274:436:277:59:59:244#219:54:197:109:109:54:153:109:87:120:175:153:54#26:26:26:26:26:26:26:26:26:26:26:26:26'
+         [121142.0.36340892]:[121142.0.37512339]:[121142.0.48706989]:[121142.0.48706990]:[121142.0.48809938] STR 'true'
+        }
+       }
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [121142.0.37512339]
+        OBJECTTYPE CustomDrawComponent // customDraw
+        CONTENTS
+        {
+         ZoomX 1.331
+         ZoomY 1.331
+        }
+        INFOOBJECTS
+        {
+        }
+       }
+      }
+     }
+    }
+   }
+  }
+  COMPONENTDATA
+  {
+   [892.10.659695]:[892.10.659696]:[103784.990.702401639] STR 'MacroPlanner'
+   [892.10.659695]:[892.10.659696]:[892.10.659800]:[892.10.1501977] STR '0'
+  }
+}

--
Gitblit v1.9.3