From b113f7a558b7bce50824293cf066cccaad6c257e Mon Sep 17 00:00:00 2001
From: yypsybs <yypsybs@foxmail.com>
Date: 星期四, 07 九月 2023 18:33:51 +0800
Subject: [PATCH] 4.11.物料属性标签设定&物料计划策略

---
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl                                                                                                    |    8 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_parseTable.qbl                                                                                                 |   22 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_name.qbl                                                                                              |    6 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/Attribute_value.qbl                                                                                                  |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/Attribute_rowNo.qbl                                                                                                   |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_cell.qbl                                                |   17 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatCode.qbl                                                                                                        |    8 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl                                                                          |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/_ROOT_Type_MatAttrSettingAndPlanStrategyDataColumn.qbl                                                             |    9 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_Key.qbl                                           |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_name.qbl                                                                                                 |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatType.qbl                                                                                                        |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/DefaultValue_value.qbl                                                                                               |    6 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/_ROOT_Type_MatAttrSettingAndPlanStrategyDataTable.qbl                                                                   |    9 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl                                                                                                      |   54 +++
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_Key.qbl                                                  |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl                                                                                                   |   16 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/DefaultValue_name.qbl                                                                                                   |    6 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_column.qbl                                              |   27 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_isXlsx.qbl                                                                                                  |    7 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_MatAttrSettingAndPlanStrat.qbl                                                                          |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_QuintiqType.qbl                                   |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_ProductCount.qbl                                                                                                   |    8 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_table.qbl                                               |   27 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl                                                                                               |   32 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_columnIndex.qbl                                                                                       |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_table.qbl                                        |   27 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl                                                                                                 |   68 ++++
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_expectedHeaders.qbl                                                                                        |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/_ROOT_Type_MatAttrSettingAndPlanStrategy.qbl                                                                                 |   10 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl                                                                                                |   21 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Function_CalccolumnIndex.qbl                                                                                       |   11 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagLongTerm.qbl                                                                                                   |    8 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrateg.qbl                                                                          |   26 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateBy.qbl                                                                                                       |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode#136.qbl                                                                                  |   18 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/DefaultValue_rowNo.qbl                                                                                                |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatName.qbl                                                                                                        |    8 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrate.qbl                                                                          |   26 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_bytes.qbl                                                                                                   |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/_ROOT_Type_MatAttrSettingAndPlanStrategyInputSource.qbl                                                               |    9 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl                                                                          |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatArrivalLT.qbl                                                                                                   |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl                                                                                           |   14 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl                                                                                           |    8 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXMLHeaders.qbl |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/_ROOT_Type_MatAttrSettingAndPlanStrategyDataRow.qbl                                                                   |    9 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateTime.qbl                                                                                                     |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinProdDeliverLT.qbl                                                                                               |    8 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyD.qbl                                                                          |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_exportFields.qbl                                                                                           |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyCustom.qbl                                                                                         |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl                                                                                                      |   17 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_QuintiqType.qbl                                          |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_fileName.qbl                                                                                                |    7 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStr#458.qbl                                                                          |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXML.qbl               |    8 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl                                                                                      |   24 +
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Attribute_name.qbl                                                                                                      |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_columnIndex.qbl                                                                                          |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_parseRows.qbl                                                                                                    |   41 ++
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/DefaultValue_fileName.qbl                                                                                             |    6 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/_ROOT_Type_MatAttrSettingAndPlanStrategyDataCell.qbl                                                                 |    9 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_doVerify.qbl                                                                                               |   34 ++
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_column.qbl                                       |   17 +
 65 files changed, 989 insertions(+), 0 deletions(-)

diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrate.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrate.qbl
new file mode 100644
index 0000000..a723b60
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrate.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrategyDataCell_MatAttrSettingAndPlanStrategyDataCell_MatAttrSettingAndPlanStrategyDataColumn
+{
+  #keys: '1[414384.0.763764789]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][414384.0.763764811][414384.0.763764805][414384.0.763764812][414384.0.763764806][414384.0.763764813][414384.0.763764807][414384.0.763764814][414384.0.763764808][414384.0.763764815][414384.0.763764809][414384.0.763764816][414384.0.763764810]'
+    SequenceElementSuffix: 'CellInColumn'
+    SequenceSuffix: 'CellInColumn'
+  }
+  RelationSide.LeftSide MatAttrSettingAndPlanStrategyDataCell
+  {
+    #keys: '3[414384.0.763764791][414384.0.763764790][414384.0.763764792]'
+    Cardinality: '1toN'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataColumn
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyDataColumn
+  {
+    #keys: '3[414384.0.763764794][414384.0.763764793][414384.0.763764795]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyD.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyD.qbl
new file mode 100644
index 0000000..ccedde2
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyD.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyDataCell_MatAttrSettingAndPlanStrategyDataCell_MatAttrSettingAndPlanStrategyDataRow
+{
+  #keys: '1[414384.0.763764825]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MatAttrSettingAndPlanStrategyDataCell
+  {
+    #keys: '3[414384.0.763764827][414384.0.763764826][414384.0.763764828]'
+    Cardinality: '1toN'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyDataRow
+  {
+    #keys: '3[414384.0.763764830][414384.0.763764829][414384.0.763764831]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataCell
+    OwningSide: 'Reference'
+  }
+}
diff --git "a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStr\043458.qbl" "b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStr\043458.qbl"
new file mode 100644
index 0000000..7f1d910
--- /dev/null
+++ "b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStr\043458.qbl"
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyDataTable
+{
+  #keys: '1[414384.0.763764737]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MatAttrSettingAndPlanStrategyDataRow
+  {
+    #keys: '3[414384.0.763764739][414384.0.763764738][414384.0.763764740]'
+    Cardinality: '1toN'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyDataTable
+  {
+    #keys: '3[414384.0.763764742][414384.0.763764741][414384.0.763764743]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrateg.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrateg.qbl
new file mode 100644
index 0000000..b765f35
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrateg.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrategyDataTable
+{
+  #keys: '1[414384.0.763764753]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][414384.0.763764775][414384.0.763764769][414384.0.763764776][414384.0.763764770][414384.0.763764777][414384.0.763764771][414384.0.763764778][414384.0.763764772][414384.0.763764779][414384.0.763764773][414384.0.763764780][414384.0.763764774]'
+    SequenceElementSuffix: 'ColumnInTable'
+    SequenceSuffix: 'ColumnInTable'
+  }
+  RelationSide.LeftSide MatAttrSettingAndPlanStrategyDataColumn
+  {
+    #keys: '3[414384.0.763764755][414384.0.763764754][414384.0.763764756]'
+    Cardinality: '1toN'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyDataTable
+  {
+    #keys: '3[414384.0.763764758][414384.0.763764757][414384.0.763764759]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl
new file mode 100644
index 0000000..970e5b3
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTable_MatAttrSettingAndPlanStrategyInputSource
+{
+  #keys: '1[414384.0.763764705]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414384.0.763764707][414384.0.763764706][414384.0.763764708]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyInputSource
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyInputSource
+  {
+    #keys: '3[414384.0.763764710][414384.0.763764709][414384.0.763764711]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_MatAttrSettingAndPlanStrat.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_MatAttrSettingAndPlanStrat.qbl
new file mode 100644
index 0000000..bc9b481
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_MatAttrSettingAndPlanStrat.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyInputSource_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrategyInputSource
+{
+  #keys: '1[414384.0.763764721]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MatAttrSettingAndPlanStrategyDataTable
+  {
+    #keys: '3[414384.0.763764723][414384.0.763764722][414384.0.763764724]'
+    Cardinality: '1toN'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyInputSource
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyInputSource
+  {
+    #keys: '3[414384.0.763764726][414384.0.763764725][414384.0.763764727]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDataTable
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl
new file mode 100644
index 0000000..cedbcb8
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttrSettingAndPlanStrategy
+{
+  #keys: '1[414384.0.763764622]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414384.0.763764624][414384.0.763764623][414384.0.763764625]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategy
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategy
+  {
+    #keys: '3[414384.0.763764627][414384.0.763764626][414384.0.763764628]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Attribute_name.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Attribute_name.qbl
new file mode 100644
index 0000000..c6601dd
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Attribute_name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute name
+{
+  #keys: '3[414384.0.763764688][414384.0.763764687][414384.0.763764689]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/DefaultValue_name.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/DefaultValue_name.qbl
new file mode 100644
index 0000000..4c149cf
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/DefaultValue_name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: name
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_parseRows.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_parseRows.qbl
new file mode 100644
index 0000000..4f276e4
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_parseRows.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+Method parseRows
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    totalRows := 0;
+    totalColumns := this.MatAttrSettingAndPlanStrategyDataColumn( relsize );
+    
+    if ( totalColumns > 0 ) {
+      columnLongestList := maxset( this, MatAttrSettingAndPlanStrategyDataColumn, column, true, column.MatAttrSettingAndPlanStrategyDataCell( relsize ) );
+      columnLongest := columnLongestList.First();
+      totalRows := columnLongest.MatAttrSettingAndPlanStrategyDataCell( relsize );
+      
+      this.MatAttrSettingAndPlanStrategyDataRow( relflush );
+      
+      cells := construct( structured[MatAttrSettingAndPlanStrategyDataCell] );
+      traverse ( this, MatAttrSettingAndPlanStrategyDataColumn, column ) {
+        cells.Add( column.FirstCellInColumn() );
+      }
+      
+      for ( i := 0; i < totalRows; i++ ) {
+        assert( selectvalues( cells, Elements, c, true, c.MatAttrSettingAndPlanStrategyDataColumn().columnIndex() ).ToString( "" ) = 
+                selectvalues( selectsortedset( cells, Elements, c, true, c.MatAttrSettingAndPlanStrategyDataColumn().columnIndex() ), Elements, c, true, c.MatAttrSettingAndPlanStrategyDataColumn().columnIndex() ).ToString( "" ),
+                "Assertion error in MatAttrSettingAndPlanningStrategyDataTable::parseRows: Cells not sorted by column index" );
+        row := this.MatAttrSettingAndPlanStrategyDataRow( relnew, rowNo := i );
+        
+        newCells := construct( structured[MatAttrSettingAndPlanStrategyDataCell] );
+        
+        traverse ( cells, Elements, c ) {
+          row.MatAttrSettingAndPlanStrategyDataCell( relinsert, c );
+          
+          newCells.Add( c.NextCellInColumn() );
+        }
+        
+        cells := &newCells;
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_doVerify.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_doVerify.qbl
new file mode 100644
index 0000000..adcdcf6
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_doVerify.qbl
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod doVerify (
+  MatAttrSettingAndPlanStrategyDataTable toVerify
+)
+{
+  TextBody:
+  [*
+    // yypsybs Jun-30-2023 (created)
+    
+    // for test
+    columns := selectsortedset( toVerify, MatAttrSettingAndPlanStrategyDataColumn, column, true, column.columnIndex() );
+    //traverse( columns, Elements, column ) {
+    //  info( "column header of " + [String]( column.columnIndex() + 1 ) + " is " + column.name() );
+    //}
+    //rows := toVerify.MatAttrSettingAndPlanningStrategyDataRow( relget );
+    //traverse( rows, Elements.MatAttrSettingAndPlanningStrategyDataCell, cell ) {
+    //  info( cell.MatAttrSettingAndPlanningStrategyDataColumn().name() + " of row " + [String]cell.MatAttrSettingAndPlanningStrategyDataRow().rowNo() + " is " + cell.value() );
+    //}
+    // for test end
+    
+    expectedHeaders := MatAttrSettingAndPlanStrategyDataTable::expectedHeaders();
+    traverse( columns, Elements, column ) {
+      columnActualName := column.name();
+      if( column.columnIndex() > expectedHeaders.Size() ) {
+        error( "unexpected head " + columnActualName + " of column " + [String]column.columnIndex() + "." );
+      }
+      expectedHeader := expectedHeaders.Element( column.columnIndex() );
+      if( expectedHeader <> columnActualName ) {
+        error( "expected head is " + expectedHeader + " of column " + [String]column.columnIndex() + ", but found " + columnActualName + "." );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_expectedHeaders.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_expectedHeaders.qbl
new file mode 100644
index 0000000..156988a
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_expectedHeaders.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod expectedHeaders () as owning Strings
+{
+  TextBody:
+  [*
+    // yypsybs Jun-30-2023 (created)
+    value := construct( structured[String] );
+    value.Add( "鐗╂枡缂栫爜" );
+    value.Add( "鐗╂枡鍚嶇О" );
+    value.Add( "鐗╂枡鍒嗙被" );
+    value.Add( "LT鏃堕棿锛堝ぉ锛�" );
+    value.Add( "鎴愬憳SKU鏁伴噺" );
+    value.Add( "鎴愬搧浜や粯MinLT锛堝ぉ锛�" );
+    value.Add( "闀跨煭鍛ㄦ湡鏍囩" );
+    value.Add( "閫氱敤涓撶敤鏍囩" );
+    value.Add( "鏅鸿兘鐗╂枡璁″垝绛栫暐" );
+    value.Add( "鐢ㄦ埛鍐崇瓥璁″垝绛栫暐" );
+    value.Add( "淇敼浜�" );
+    value.Add( "淇敼鏃堕棿" );
+    return &value;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl
new file mode 100644
index 0000000..d370d43
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl
@@ -0,0 +1,68 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod export (
+  GlobalOTDTable parent,
+  GlobalOTDTable parent,
+  GlobalOTDTable parent,
+  GlobalOTDTable parent
+) as BinaryValue
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
+    <table>
+      <name>MatAttrSettingAndPlanningStrategy</name>
+    ';
+    //---------------------------------------------------------------------------------------------
+    exportFields := MatAttrSettingAndPlanStrategyDataTable::exportFields();
+    exportHeaders := MatAttrSettingAndPlanStrategyDataTable::expectedHeaders();
+    if( exportFields.Size() <> exportHeaders.Size() ) {
+      error( "fields and headers not match" );  
+    }
+    for( i := 0; i < exportFields.Size() ; i++ ) {
+      header := exportHeaders.Element( i );
+      columnStr := "<column><name>" + header + "</name><type>String</type>";
+      traverse( parent, MatAttrSettingAndPlanStrategy, oldRecord ) {
+        fieldName := exportFields.Element( i );
+        field := Reflection::FindAttribute( "MatAttrSettingAndPlanningStrategy", fieldName);
+        if( not isnull( field ) ) {
+          fieldValue := "";
+          if( fieldValue = "" ) {
+            fieldValue := guard( field.GetString( oldRecord ), "" );
+          }
+          if( fieldValue = "" ) {
+            fieldValue := guard( [String]field.GetNumber( oldRecord ), "" );
+          }
+          if( fieldValue = "" ) {
+            fieldValue := guard( [String]field.GetReal( oldRecord ), "" );
+          }
+          if( fieldValue = "" ) {
+            fileDateValue := guard( field.GetDate( oldRecord ), Date::MinDate() );
+            if( fileDateValue <> Date::MinDate() ) {
+              conv := DateTimeToString::StandardConverter();
+              conv.SetCustomConversion();
+              conv.CustomFormatString( 'yyyyMMdd' );
+              fieldValue := conv.Convert( fileDateValue.DateTime() );
+            }
+          }
+          cellStr := '<cell value="' + fieldValue + '"/>';
+          
+          columnStr := columnStr + cellStr;
+        } else {
+          error( "no field " + fieldName + " in type MatAttrSettingAndPlanningStrategy");
+        }
+      }
+      columnStr := columnStr + "</column>";
+      xmlTemplate := xmlTemplate + columnStr;
+    }
+    //---------------------------------------------------------------------------------------------
+    xmlTemplate := xmlTemplate + "</table>";
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
+    XLS::SaveTable( tableHandle, OS::TempPath() + "MatAttrSettingAndPlanningStrategy.xlsx" );
+    file := OSFile::Construct();
+    file.Open( OS::TempPath() + "MatAttrSettingAndPlanningStrategy.xlsx", "Read", true );
+    data := file.ReadBinary()
+    return data;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_exportFields.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_exportFields.qbl
new file mode 100644
index 0000000..6559348
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_exportFields.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod exportFields () as owning Strings
+{
+  TextBody:
+  [*
+    // yypsybs Jun-30-2023 (created)
+    value := construct( structured[String] );
+    value.Add( "MatCode" );
+    value.Add( "MatName" );
+    value.Add( "MatType" );
+    value.Add( "MatArrivalLT" );
+    value.Add( "ProductCount" );
+    value.Add( "MinProdDeliverLT" );
+    value.Add( "FlagLongTerm" );
+    value.Add( "FlagGeneric" );
+    value.Add( "PlanningStrategyAuto" );
+    value.Add( "PlanningStrategyCustom" );
+    value.Add( "UpdateBy" );
+    value.Add( "UpdateTime" );
+    return &value;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_Key.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLAddressType { }
+  XMLID Key { }
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLID QuintiqType { }
+  XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_cell.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_cell.qbl
new file mode 100644
index 0000000..9a0e46e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_cell.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: MatAttrSettingAndPlanStrategyDataCell
+  XMLID cell { }
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: value
+      XMLID value { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_column.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..dd6ba85
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_column.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: MatAttrSettingAndPlanStrategyDataColumn
+  XMLID column { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: cell
+      GenerateOutput: false
+      Relation: MatAttrSettingAndPlanStrategyDataCell
+      XMLID MatAttrSettingAndPlanningStrategyDataCell { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_table.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..badb838
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: MatAttrSettingAndPlanStrategyDataTable
+  XMLID table { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: column
+      GenerateOutput: false
+      Relation: MatAttrSettingAndPlanStrategyDataColumn
+      XMLID MatAttrSettingAndPlanningStrategyDataColumn { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXML.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXML.qbl
new file mode 100644
index 0000000..76a9e0d
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXML.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML MatAttrSettingAndPlanStrategyDataTableXML
+{
+  Direction: 'ImportExport'
+  Root: table
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_Key.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLAddressType { }
+  XMLID Key { }
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLID QuintiqType { }
+  XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_column.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..320992a
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_column.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: MatAttrSettingAndPlanStrategyDataColumn
+  XMLID column { }
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_table.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..badb838
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: MatAttrSettingAndPlanStrategyDataTable
+  XMLID table { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: column
+      GenerateOutput: false
+      Relation: MatAttrSettingAndPlanStrategyDataColumn
+      XMLID MatAttrSettingAndPlanningStrategyDataColumn { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXMLHeaders.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXMLHeaders.qbl
new file mode 100644
index 0000000..24c966b
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXMLHeaders.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML MatAttrSettingAndPlanStrategyDataTableXMLHeaders
+{
+  Direction: 'ImportExport'
+  Root: table
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/_ROOT_Type_MatAttrSettingAndPlanStrategyDataTable.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/_ROOT_Type_MatAttrSettingAndPlanStrategyDataTable.qbl
new file mode 100644
index 0000000..597fe5e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/_ROOT_Type_MatAttrSettingAndPlanStrategyDataTable.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MatAttrSettingAndPlanStrategyDataTable
+{
+  #keys: '5[414384.0.763764685][414384.0.763764683][0.0.0][414384.0.763764684][414384.0.763764686]'
+  BaseType: Object
+  StructuredName: 'MatAttrSettingAndPlanStrategyDataTables'
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_bytes.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_bytes.qbl
new file mode 100644
index 0000000..d57a443
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_bytes.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute bytes
+{
+  #keys: '3[414384.0.763764696][414384.0.763764695][414384.0.763764697]'
+  ValueType: BinaryValue
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_fileName.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_fileName.qbl
new file mode 100644
index 0000000..fb1168e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_fileName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute fileName
+{
+  #keys: '3[414384.0.763764699][414384.0.763764698][414384.0.763764700]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_isXlsx.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_isXlsx.qbl
new file mode 100644
index 0000000..59af587
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_isXlsx.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute isXlsx
+{
+  #keys: '3[414384.0.763764702][414384.0.763764701][414384.0.763764703]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/DefaultValue_fileName.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/DefaultValue_fileName.qbl
new file mode 100644
index 0000000..104c0d8
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/DefaultValue_fileName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: fileName
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl
new file mode 100644
index 0000000..4c7b205
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method createTable (
+  String sheetName,
+  String sheetName,
+  String sheetName,
+  String sheetName
+) as MatAttrSettingAndPlanStrategyDataTable
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    sheet := select( this, MatAttrSettingAndPlanStrategyDataTable, table, table.name() = sheetName );
+    
+    if ( isnull( sheet ) ) {
+      sheet := this.MatAttrSettingAndPlanStrategyDataTable( relnew, name := sheetName );
+    }
+    
+    return sheet;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_parseTable.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_parseTable.qbl
new file mode 100644
index 0000000..e69abc2
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_parseTable.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+Method parseTable
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    tableGroupHandle := TableGroupHandle::Create( this.fileName() );
+    tableGroupHandle := XLS::LoadTableGroupFromBinaryData( this.bytes().AsBinaryData(), tableGroupHandle, true, this.isXlsx() );
+    sheets := tableGroupHandle.TableNames();
+    
+    traverse ( sheets, Elements, sheetName, sheetName = "MatAttrSettingAndPlanningStrategy" ) {
+      tableHandle := tableGroupHandle.Table( sheetName );
+      tableXML := TableHandle::ExportXML( tableHandle );
+      MatAttrSettingAndPlanStrategyDataTable::XMLImportMatAttrSettingAndPlanStrategyDataTableXMLHeaders(  tableXML );
+      parsedTable := MatAttrSettingAndPlanStrategyDataTable::XMLImportMatAttrSettingAndPlanStrategyDataTableXML( tableXML );
+      parsedTable.parseRows();
+      parsedTable.name( sheetName );
+      this.MatAttrSettingAndPlanStrategyDataTable( relinsert, &parsedTable ); 
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl
new file mode 100644
index 0000000..de6f10d
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method saveData
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    if( this.MatAttrSettingAndPlanStrategyDataTable( relsize ) > 0 ) {
+      traverse( this, MatAttrSettingAndPlanStrategyDataTable, table ) {
+        traverse( table, MatAttrSettingAndPlanStrategyDataRow, row ) {
+          MatAttrSettingAndPlanStrategy::update( this.GlobalOTDTable(), row );
+        }  
+      }  
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl
new file mode 100644
index 0000000..915a26f
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod upload (
+  GlobalOTDTable parent,
+  String filePath,
+  BinaryValue bytes,
+  GlobalOTDTable parent,
+  String filePath,
+  BinaryValue bytes,
+  GlobalOTDTable parent,
+  String filePath,
+  BinaryValue bytes,
+  GlobalOTDTable parent,
+  String filePath,
+  BinaryValue bytes
+) as MatAttrSettingAndPlanStrategyInputSource
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    parent.MatAttrSettingAndPlanStrategyInputSource( relflush );
+    info( "filePath : " + filePath );
+    fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
+    info( "fileName : " + fileName );
+    inputSource := parent.MatAttrSettingAndPlanStrategyInputSource( relnew,
+                                              fileName := fileName,
+                                              bytes := bytes, 
+                                              isXlsx := fileName.EndsWith( "xlsx" ));
+    
+    return inputSource;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/_ROOT_Type_MatAttrSettingAndPlanStrategyInputSource.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/_ROOT_Type_MatAttrSettingAndPlanStrategyInputSource.qbl
new file mode 100644
index 0000000..5cc6e21
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/_ROOT_Type_MatAttrSettingAndPlanStrategyInputSource.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MatAttrSettingAndPlanStrategyInputSource
+{
+  #keys: '5[414384.0.763764693][414384.0.763764691][0.0.0][414384.0.763764692][414384.0.763764694]'
+  BaseType: Object
+  StructuredName: 'MatAttrSettingAndPlanStrategyInputSources'
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl
new file mode 100644
index 0000000..e2bacd6
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FlagGeneric
+{
+  #keys: '3[414384.0.763764895][414384.0.763764894][414384.0.763764896]'
+  Description: '鏄惁閫氱敤'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagLongTerm.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagLongTerm.qbl
new file mode 100644
index 0000000..7302e5e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagLongTerm.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FlagLongTerm
+{
+  #keys: '3[414384.0.763764885][414384.0.763764884][414384.0.763764886]'
+  Description: '鏄惁闀挎湡'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatArrivalLT.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatArrivalLT.qbl
new file mode 100644
index 0000000..9dc43ad
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatArrivalLT.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MatArrivalLT
+{
+  #keys: '3[414384.0.759444630][414384.0.759444629][414384.0.759444631]'
+  Description: '鐗╂枡鍒拌揣LT锛堝ぉ锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatCode.qbl
new file mode 100644
index 0000000..9e9785e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MatCode
+{
+  #keys: '3[414384.0.759431251][414384.0.759431250][414384.0.759431252]'
+  Description: '鐗╂枡缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatName.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatName.qbl
new file mode 100644
index 0000000..c0de400
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MatName
+{
+  #keys: '3[414384.0.759431286][414384.0.759431285][414384.0.759431287]'
+  Description: '鐗╂枡鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatType.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatType.qbl
new file mode 100644
index 0000000..907d2a5
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MatType
+{
+  #keys: '3[414384.0.759444677][414384.0.759444676][414384.0.759444678]'
+  Description: '鎴愬搧SKU绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinProdDeliverLT.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinProdDeliverLT.qbl
new file mode 100644
index 0000000..65b0de6
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinProdDeliverLT.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MinProdDeliverLT
+{
+  #keys: '3[414384.0.759444667][414384.0.759444666][414384.0.759444668]'
+  Description: '鎴愬搧鏈�灏忎氦浠楲T锛堝ぉ锛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl
new file mode 100644
index 0000000..b0309cb
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlanningStrategyAuto
+{
+  #keys: '3[414384.0.759444687][414384.0.759444686][414384.0.759444688]'
+  Description: '鑷姩璁″垝绛栫暐'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyCustom.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyCustom.qbl
new file mode 100644
index 0000000..4f66c38
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyCustom.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlanningStrategyCustom
+{
+  #keys: '3[414384.0.759444697][414384.0.759444696][414384.0.759444698]'
+  Description: '鎵嬪姩閰嶇疆鐨勮鍒掔瓥鐣�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_ProductCount.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_ProductCount.qbl
new file mode 100644
index 0000000..e7a798c
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_ProductCount.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductCount
+{
+  #keys: '3[414384.0.763750063][414384.0.763750062][414384.0.763750064]'
+  Description: '鎴愬憳SKU鏁伴噺'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateBy.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateBy.qbl
new file mode 100644
index 0000000..6789918
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateBy.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UpdateBy
+{
+  #keys: '3[414384.0.763764908][414384.0.763764907][414384.0.763764909]'
+  Description: '淇敼浜�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateTime.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateTime.qbl
new file mode 100644
index 0000000..83ca47c
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UpdateTime
+{
+  #keys: '3[414384.0.763764921][414384.0.763764920][414384.0.763764922]'
+  Description: '淇敼鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl
new file mode 100644
index 0000000..cabf9e9
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod delete (
+  MatAttrSettingAndPlanningStrategys toDels,
+  MatAttrSettingAndPlanStrategys toDels,
+  MatAttrSettingAndPlanStrategys toDels,
+  MatAttrSettingAndPlanStrategys toDels
+)
+{
+  TextBody:
+  [*
+    // yypsybs Jun-30-2023 (created)
+    traverse( toDels, Elements, toDel ){
+      toDel.Delete();
+    }
+  *]
+}
diff --git "a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode\043136.qbl" "b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode\043136.qbl"
new file mode 100644
index 0000000..7d22871
--- /dev/null
+++ "b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode\043136.qbl"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod deleteIfExistByMatCode (
+  GlobalOTDTable parent,
+  Strings matCodes
+)
+{
+  TextBody:
+  [*
+    // yypsybs Jul-2-2023 (created)
+    toDels := selectset( parent, MatAttrSettingAndPlanStrategy, item, true, matCodes.Find( item.MatCode() ) <> -1 );
+    if( toDels.Size() > 0 ) {
+      traverse( toDels, Elements, toDel ) {
+        toDel.Delete();
+      }  
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl
new file mode 100644
index 0000000..7f43fa3
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod deleteIfExistByMatCode (
+  GlobalOTDTable parent,
+  String matCode,
+  GlobalOTDTable parent,
+  String matCode,
+  GlobalOTDTable parent,
+  String matCode,
+  GlobalOTDTable parent,
+  String matCode
+)
+{
+  TextBody:
+  [*
+    // yypsybs Jul-2-2023 (created)
+    toDels := selectset( parent, MatAttrSettingAndPlanStrategy, item, true, matCode = item.MatCode() );
+    if( toDels.Size() > 0 ) {
+      traverse( toDels, Elements, toDel ) {
+        toDel.Delete();
+      }  
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl
new file mode 100644
index 0000000..31f507e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod getExistByMatCode (
+  GlobalOTDTable parent,
+  String matCode
+) as MatAttrSettingAndPlanStrategy
+{
+  TextBody:
+  [*
+    // yypsybs Jul-3-2023 (created)
+    value := select( parent, MatAttrSettingAndPlanStrategy, item, true, matCode = item.MatCode() );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl
new file mode 100644
index 0000000..8294a1c
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl
@@ -0,0 +1,54 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod update (
+  GlobalOTDTable parent,
+  MatAttrSettingAndPlanStrategyDataRow excelRow
+) as MatAttrSettingAndPlanStrategy
+{
+  TextBody:
+  [*
+    fields := MatAttrSettingAndPlanStrategyDataTable::exportFields();
+    headers := MatAttrSettingAndPlanStrategyDataTable::expectedHeaders();
+    // 鎵惧緟鏇存柊璁板綍
+    toUpdate := null( MatAttrSettingAndPlanStrategy );
+    matCode := "";
+    for( i := 0; i < fields.Size(); i++ ) {
+      header := headers.Element( i );
+      cell := excelRow.MatAttrSettingAndPlanStrategyDataCell( relget ).Element( i );
+      if( cell.MatAttrSettingAndPlanStrategyDataColumn().name() <> header ) {
+        error( "the column with index " + [String]i + " should be " + header + ", but found " + cell.MatAttrSettingAndPlanStrategyDataColumn().name() );
+      }
+      if( cell.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜" and cell.value() <> "") {
+        matCode := cell.value();
+        toUpdate := MatAttrSettingAndPlanStrategy::getExistByMatCode( parent, matCode );
+      }
+    }
+    if( not isnull( toUpdate ) ) {
+      // 瀵规瘮宸紓
+      for( i := 0; i < fields.Size(); i++ ) {
+        header := headers.Element( i );
+        cell := excelRow.MatAttrSettingAndPlanStrategyDataCell( relget ).Element( i );
+        fieldName := fields.Element( i );
+        field := Reflection::FindAttribute( "MatAttrSettingAndPlanningStrategy", fieldName);
+        if( fieldName = "MatName" or fieldName = "MatType" or fieldName = "FlagLongTerm" or fieldName = "FlagGeneric" or fieldName = "PlanningStrategyAuto" ) {
+           fieldValue := guard( field.GetString( toUpdate ), "" );
+           if( fieldValue <> cell.value() ) {
+             error( "column " + header + " does not support to be changed" );
+           }
+        } else if( fieldName = "MatArrivalLT" or fieldName = "ProductCount" or fieldName = "MinProdDeliverLT" ) {
+           fieldRealValue := guard( field.GetReal( toUpdate ), 0.0 );
+           if( fieldRealValue <> [Real]cell.value() ) {
+             error( "column " + header + " does not support to be changed" );
+           }
+        } else if( fieldName = "PlanningStrategyCustom" ) {
+          fieldValue := guard( field.GetString( toUpdate ), "" );
+          toUpdate.PlanningStrategyCustom( fieldValue );
+        }
+      }
+    } else {
+      error( "no record with matCode : " + matCode )
+    }
+    
+    return toUpdate;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/_ROOT_Type_MatAttrSettingAndPlanStrategy.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/_ROOT_Type_MatAttrSettingAndPlanStrategy.qbl
new file mode 100644
index 0000000..d5d2220
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/_ROOT_Type_MatAttrSettingAndPlanStrategy.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MatAttrSettingAndPlanStrategy
+{
+  #keys: '5[414384.0.759431201][414384.0.759431199][0.0.0][414384.0.759431200][414384.0.759431202]'
+  BaseType: Object
+  Description: '鐗╂枡灞炴�ф爣绛捐瀹�&鐗╂枡璁″垝绛栫暐'
+  StructuredName: 'MatAttrSettingAndPlanStrategys'
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/Attribute_value.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/Attribute_value.qbl
new file mode 100644
index 0000000..f306adb
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/Attribute_value.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute value
+{
+  #keys: '3[414384.0.763764661][414384.0.763764660][414384.0.763764662]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/DefaultValue_value.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/DefaultValue_value.qbl
new file mode 100644
index 0000000..753f2bd
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/DefaultValue_value.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: value
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/_ROOT_Type_MatAttrSettingAndPlanStrategyDataCell.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/_ROOT_Type_MatAttrSettingAndPlanStrategyDataCell.qbl
new file mode 100644
index 0000000..d61449b
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/_ROOT_Type_MatAttrSettingAndPlanStrategyDataCell.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MatAttrSettingAndPlanStrategyDataCell
+{
+  #keys: '5[414384.0.763764658][414384.0.763764656][0.0.0][414384.0.763764657][414384.0.763764659]'
+  BaseType: Object
+  StructuredName: 'MatAttrSettingAndPlanStrategyDataCells'
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_columnIndex.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_columnIndex.qbl
new file mode 100644
index 0000000..cd949d2
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_columnIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute columnIndex
+{
+  #keys: '3[414384.0.763764669][414384.0.763764668][414384.0.763764670]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_name.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_name.qbl
new file mode 100644
index 0000000..e1ffaf2
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute name
+{
+  #keys: '3[414384.0.763764672][414384.0.763764671][414384.0.763764673]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_columnIndex.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_columnIndex.qbl
new file mode 100644
index 0000000..8e1a40d
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_columnIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: columnIndex
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_name.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_name.qbl
new file mode 100644
index 0000000..4c149cf
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: name
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Function_CalccolumnIndex.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Function_CalccolumnIndex.qbl
new file mode 100644
index 0000000..de381a6
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Function_CalccolumnIndex.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalccolumnIndex
+{
+  TextBody:
+  [*
+    value := ifexpr( isnull( this.PreviousColumnInTable() ), 0, this.PreviousColumnInTable().columnIndex() + 1 );
+    
+    this.columnIndex( value );
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/_ROOT_Type_MatAttrSettingAndPlanStrategyDataColumn.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/_ROOT_Type_MatAttrSettingAndPlanStrategyDataColumn.qbl
new file mode 100644
index 0000000..8a33ee1
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/_ROOT_Type_MatAttrSettingAndPlanStrategyDataColumn.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MatAttrSettingAndPlanStrategyDataColumn
+{
+  #keys: '5[414384.0.763764666][414384.0.763764664][0.0.0][414384.0.763764665][414384.0.763764667]'
+  BaseType: Object
+  StructuredName: 'MatAttrSettingAndPlanStrategyDataColumns'
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/Attribute_rowNo.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/Attribute_rowNo.qbl
new file mode 100644
index 0000000..10d4f32
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/Attribute_rowNo.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute rowNo
+{
+  #keys: '3[414384.0.763764680][414384.0.763764679][414384.0.763764681]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/DefaultValue_rowNo.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/DefaultValue_rowNo.qbl
new file mode 100644
index 0000000..b6bfb38
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/DefaultValue_rowNo.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: rowNo
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/_ROOT_Type_MatAttrSettingAndPlanStrategyDataRow.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/_ROOT_Type_MatAttrSettingAndPlanStrategyDataRow.qbl
new file mode 100644
index 0000000..c85f904
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/_ROOT_Type_MatAttrSettingAndPlanStrategyDataRow.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MatAttrSettingAndPlanStrategyDataRow
+{
+  #keys: '5[414384.0.763764677][414384.0.763764675][0.0.0][414384.0.763764676][414384.0.763764678]'
+  BaseType: Object
+  StructuredName: 'MatAttrSettingAndPlanStrategyDataRows'
+}

--
Gitblit v1.9.3