From e6c0b43a4f21923ceeee5f9c35650314fc783962 Mon Sep 17 00:00:00 2001
From: limj <limj@taizhitech.com>
Date: 星期五, 15 九月 2023 17:08:16 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lmj

---
 _Main/BL/Type_PanelMaterialIT/Attribute_CurrencyID.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_PriorityName.qbl                                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_ID.qbl                                                                                                                             |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_IsEligibleForNetting.qbl                                                                                                        |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_Quantity.qbl                                                                                                                    |    6 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_CurrencyID.qbl                                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def                               |    1 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_PriorityName.qbl                                                                                                             |    7 
 _Main/BL/EDI/Broker_Broker_OTD_Product.qbl                                                                                                                                   |    1 
 _Main/BL/Type_ActualProductInStockingPointInPeriod/StaticMethod_CreateOrUpdate.qbl                                                                                           |    4 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                           |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_ProductID.qbl                                                                                                                     |    6 
 _Main/BL/Type_PanelMaterialTM17/Attribute_OrderID.qbl                                                                                                                        |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_CustomerID.qbl                                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                                    |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductCode.qbl                                                                                                  |    8 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_UnitOfMeasureName.qbl                                                                                                |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderLineID.qbl                                                                                                   |    6 
 _Main/BL/Type_Lane/StaticMethod_CreateLane.qbl                                                                                                                               |    2 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl                                                                                                   |   16 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsEligibleForNetting.qbl                                                                                       |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/_ROOT_Type_PanelMaterialAutomotiveElectronics.qbl                                                                           |   10 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_Price.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_Quantity.qbl                                                                                                                    |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_columnIndex.qbl                                                                                       |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsEligibleForNetting.qbl                                                                                             |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/_ROOT_Type_MatAttrSettingAndPlanStrategy.qbl                                                                                 |   10 
 _Main/BL/Type_PanelMaterialIT/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuEdit_OnClick.def                                                                      |   20 
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/QuintiqEndpoint_QuintiqEndpoint.qbl                                                                      |    8 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_Price.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Customer.qbl                                                                                                      |    7 
 _Main/BL/Type_PanelMaterialIT/_ROOT_Type_PanelMaterialIT.qbl                                                                                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_Edit.def                                                                                    |   16 
 _Main/BL/Type_PanelMaterialTM18/Attribute_IsFirmed.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_UnitOfMeasureName.qbl                                                                                                              |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcMinProdDeliverLT.qbl                                                                                            |   17 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_getExistByMatCode.qbl                                                                                           |   14 
 _Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTop.def                                                                                        |   29 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_StockingPointID.qbl                                                                                                          |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderLineID.qbl                                                                                                            |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_Customer.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_UnitOfMeasureName.qbl                                                                                             |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_IsFirmed.qbl                                                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageChildMaterial.def                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialLabelingAndPlanningStrategy.def                                         |   15 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinProdDeliverLT.qbl                                                                                               |    8 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataRow_MatAttrSettingAndPlanStrategyD.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterialTM17/Attribute_SalesSegmentName.qbl                                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_Edit.def                                                                                          |   17 
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/RestEndpoint_RestEndpointPanelMaterial.qbl                                                               |   10 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderID.qbl                                                                                                             |    6 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_StockingPointID.qbl                                                                                                             |    7 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_Quantity.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_ProductID.qbl                                                                                                                        |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsFirmed.qbl                                                                                                      |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsEligibleForNetting.qbl                                                                                                |    7 
 _Main/UI/MacroPlanner/Component_FormProducts/Component_ListProduct.def                                                                                                       |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listContextMenuData.def                                                                              |   62 
 _Main/BL/Type_PanelMaterialTM17/Attribute_Customer.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                               |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderID.qbl                                                                                                    |    6 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderLineID.qbl                                                                                                |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnCancel_OnClick.def                                                          |   15 
 _Main/BL/Type_PanelMaterialTianHua/_ROOT_Type_PanelMaterialTianHua.qbl                                                                                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageMaterial790#1.def                                                   |   10 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_ID.qbl                                                                                                                       |    6 
 _Main/BL/Type_PanelMaterialIT/Attribute_CustomerID.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                                              |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode#526.qbl                                                                                  |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/_ROOT_Component_FormPanelPullPlanReport.def                                                                    |   17 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_PriorityName.qbl                                                                                                     |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_Customer.qbl                                                                                                                    |    6 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderLineID.qbl                                                                                                      |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_Price.qbl                                                                                                                         |    7 
 _Main/BL/Type_MacroPlan/Method_MappingProductData.qbl                                                                                                                        |    4 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                                         |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_UnitOfMeasureName.qbl                                                                                                      |    7 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_PriorityName.qbl                                                                                                                |    7 
 _Main/BL/Type_PanelMaterialAll/Attribute_releaseDate.qbl                                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/DefaultValue_value.qbl                                                                                               |    6 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_SalesSegmentName.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelData#431.def                                                                                    |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick.def                 |   19 
 _Main/BL/Relations/Relation_PanelMaterialVehicle_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl                                                                          |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlActions.def                                                                     |   40 
 _Main/BL/Relations/Relation_PanelMaterialIT_PanelMaterialAll_PanelMaterialAll_PanelMaterialIT.qbl                                                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType.def                                                                           |   62 
 _Main/BL/Relations/Relation_PanelMaterialTM18_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl                                                                          |   23 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl                                                                                                 |   66 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_Customer.qbl                                                                                                               |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsEligibleForNetting.qbl                                                                                          |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CurrencyID.qbl                                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonRefresh_OnClick.def                                                        |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelPanelPullPlanReport.def                                                                         |   15 
 _Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl                                                                                                    |   65 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl                                                                                                                |    5 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ProductID.qbl                                                                                                           |    6 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Customer.qbl                                                                                                         |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinimumNumberOfDaysInStock.qbl                                                                                     |    8 
 _Main/BL/Type_PanelMaterialTM18/Attribute_PriorityName.qbl                                                                                                                   |    7 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl                                                                                                                   |   15 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateTime.qbl                                                                                                     |    8 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                                         |    7 
 _Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl                                                                                                                         |   19 
 _Main/BL/ConfigTemplates.properties                                                                                                                                          |    4 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                            |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Price.qbl                                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnUserSelectionChanged.def             |   25 
 _Main/BL/Type_WorkOrderType/Attribute_ID.qbl                                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Method_Edit.def                                                                              |   18 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Function_CalcMatCode.qbl                                                                                                   |   13 
 _Main/BL/Type_PanelMaterialAll/_ROOT_Type_PanelMaterialAll.qbl                                                                                                               |    9 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_Customer.qbl                                                                                                                    |    6 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_doVerify.qbl                                                                                               |   34 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                              |    7 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_ReceivingPanelMaterials.qbl                                                                                                        |   13 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_VerifyTheFileName.qbl                                                                                    |   15 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsFirmed.qbl                                                                                                         |    7 
 _Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpointFromJson.qbl                                                                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuDelete_OnClick.def                                                                       |   18 
 _Main/BL/InfoMessages.qbl                                                                                                                                                    |    5 
 _Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl                                                                                                                 |    5 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_ProductID.qbl                                                                                                                |    6 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl                                                                                 |   41 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_CurrencyID.qbl                                                                                                               |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl                                                                                            |   35 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/Attribute_rowNo.qbl                                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnOk_OnClick.def                                                              |   35 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                                            |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_OrderLineID.qbl                                                                                                                 |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatCode.qbl                                                                                                        |    8 
 _Main/BL/Type_PanelMaterialTM18/Attribute_Customer.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_OrderID.qbl                                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl                                                                                      |   37 
 _Main/BL/Type_Forecast/StaticMethod_CreateOrUpdate.qbl                                                                                                                       |    2 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_Price.qbl                                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_StockingPointID.qbl                                                                                                               |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_StockingPointID.qbl                                                                                                        |    7 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                                                                                             |   20 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_PriorityName.qbl                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuEdit_OnClick.def                                                                         |   20 
 _Main/BL/Type_PanelMaterial/Attribute_PanelModel.qbl                                                                                                                         |    8 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/DefaultValue_name.qbl                                                                                                   |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuCreate_OnClick.def                                                                       |   22 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_table.qbl                                               |   27 
 _Main/BL/Relations/Relation_PanelMaterialSpecializedDisplay_PanelMaterialAll_PanelMaterialAll_P.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterial/Attribute_DemandQuantity.qbl                                                                                                                     |    8 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl                                                                                                          |   34 
 _Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl                                                                                                                   |    2 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CustomerID.qbl                                                                                                       |    7 
 _Main/BL/Relations/Relation_WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType.qbl                                                                                    |   23 
 _Main/BL/Type_PanelMaterialIT/Attribute_Customer.qbl                                                                                                                         |    7 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_OrderID.qbl                                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcPlanningStrategyAuto.qbl                                                                                        |   23 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_PriorityName.qbl                                                                                                           |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/DefaultValue_rowNo.qbl                                                                                                |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_Price.qbl                                                                                                                          |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy#880.def                              |   60 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_SalesSegmentName.qbl                                                                                                    |    6 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataColumn_MatAttrSettingAndPlanStrate.qbl                                                                          |   26 
 _Main/BL/Type_PanelMaterialTM18/Attribute_SalesSegmentName.qbl                                                                                                               |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_Quantity.qbl                                                                                                                         |    7 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_StockingPointID.qbl                                                                                                             |    7 
 _Main/UI/MacroPlanner/Component_FormProducts/Component_SplitterWnd8.def                                                                                                      |   14 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataRow/_ROOT_Type_MatAttrSettingAndPlanStrategyDataRow.qbl                                                                   |    9 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderID.qbl                                                                                                                     |    6 
 _Main/BL/Type_MacroPlan/Method_MappingInventoryValueAndCostData.qbl                                                                                                          |   23 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_Customer.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_ID.qbl                                                                                                                            |    6 
 _Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl                                                                                                                  |   22 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_ProductID.qbl                                                                                                                   |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/StaticMethod_CreateIfNotExist.qbl                                                                                          |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonSend_OnClick.def                                                           |   24 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_MatCode.qbl                                                                                                      |    8 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_IsEligibleForNetting.qbl                                                                                                        |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyThatTheItemCodeIsNotDuplicated.qbl                                                                         |   23 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_PriorityName.qbl                                                                                                                |    7 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStr#458.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Customer.qbl                                                                                                            |    6 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterial_DataHolderCheckedMaterials_OnDataChanged.def                            |   18 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_columnIndex.qbl                                                                                          |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_ID.qbl                                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_column.qbl                                       |   17 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_ProductID.qbl                                                                                                              |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_SalesSegmentName.qbl                                                                                                                 |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/_ROOT_Type_MatAttrSettingAndPlanStrategyDetail.qbl                                                                         |   10 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_IsEligibleForNetting.qbl                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnCancel_OnClick.def                                                                |   15 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderDate.qbl                                                                                                        |    7 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl                                                                                                     |   23 
 _Main/BL/Type_PanelMaterialIT/Attribute_StockingPointID.qbl                                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlActions.def                                                                                 |   40 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_UnitOfMeasureName.qbl                                                                                                           |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Quantity.qbl                                                                                                      |    6 
 _Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl                                                                                                    |   65 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_StandardLT.qbl                                                                                                   |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderLineID.qbl                                                                                                   |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_UnitOfMeasureName.qbl                                                                                          |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_ProductCount.qbl                                                                                                   |    8 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLObjectBase_table.qbl                                        |   27 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_SalesSegmentName.qbl                                                                                                 |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_CurrencyID.qbl                                                                                                                  |    7 
 _Main/BL/Type_Product_MP/Attribute_IsPanelMaterial.qbl                                                                                                                       |    8 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsFirmed.qbl                                                                                                            |    7 
 _Main/BL/Type_PanelMaterialVehicle/_ROOT_Type_PanelMaterialVehicle.qbl                                                                                                       |   10 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderID.qbl                                                                                                                |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Function_CalccolumnIndex.qbl                                                                                       |   11 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting#576.qbl                                                                                                        |    2 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_IsEligibleForNetting.qbl                                                                                                        |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderDate.qbl                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_UpdateBy.qbl                                                                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialExportAndImport#136.def                                                 |   61 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_GlobalOTDTable_GlobalOTDTa.qbl                                                                          |   23 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatArrivalLT.qbl                                                                                                   |    8 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXMLHeaders.qbl |    8 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_UnitOfMeasureName.qbl                                                                                             |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_UnitOfMeasureName.qbl                                                                                                   |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_ProductID.qbl                                                                                                                   |    6 
 _Main/BL/Relations/Relation_PanelMaterialTM17_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl                                                                          |   23 
 _Main/BL/Relations/Relation_PanelMaterial_MacroPlan_MacroPlan_PanelMaterial.qbl                                                                                              |   23 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderID.qbl                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_OrderLineID.qbl                                                                                                                      |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_IsFirmed.qbl                                                                                                                         |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_IsEligibleForNetting.qbl                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterial.def                                                                    |   26 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_exportFields.qbl                                                                                           |   23 
 _Main/BL/Type_WorkOrderType/Attribute_TypeName.qbl                                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/_ROOT_Component_DialogCreateEditWorkOrderType.def                                                        |   41 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/_ROOT_Component_DialogCreateEditPanelPullPlanReport.def                                            |   31 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_fileName.qbl                                                                                                |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_ProductID.qbl                                                                                                                      |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/_ROOT_XML_MatAttrSettingAndPlanStrategyDataTableXML.qbl               |    8 
 _Main/BL/Type_PanelMaterial/_ROOT_Type_PanelMaterial.qbl                                                                                                                     |    9 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Attribute_name.qbl                                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455#1.def                                                     |   46 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_parseRows.qbl                                                                                                    |   41 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDetail_MatAttrSettingAndPlanStrategy_M.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_IsEligibleForNetting.qbl                                                                                                          |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_SalesSegmentName.qbl                                                                                                            |    6 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_StockingPointID.qbl                                                                                                             |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_StockingPointID.qbl                                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnOk_OnClick.def                                                        |   23 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_parseTable.qbl                                                                                                 |   25 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/DefaultValue_name.qbl                                                                                              |    6 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderID.qbl                                                                                                          |    7 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_IsFirmed.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_CustomerID.qbl                                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_SerialNumber.qbl                                                                                                   |    8 
 _Main/BL/Type_PanelMaterial/Attribute_StartDate.qbl                                                                                                                          |    8 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_UnitOfMeasureName.qbl                                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def               |   42 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_SalesSegmentName.qbl                                                                                                            |    6 
 _Main/Sys/Integration/Structure/PanelMaterialResponseResult_from.xml                                                                                                         |    0 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_CustomerID.qbl                                                                                                                  |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def                                                                              |   18 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_IsFirmed.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderID.qbl                                                                                                                     |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelChildMaterial#558.def                                                           |   15 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_CustomerID.qbl                                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CurrencyID.qbl                                                                                                    |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl                                                                                                      |   69 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_SalesSegmentName.qbl                                                                                                              |    6 
 _Main/BL/Type_PanelMaterialIT/Attribute_PriorityName.qbl                                                                                                                     |    7 
 _Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl                                                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuChildMaterial.def                                                     |   10 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyInputSource_MatAttrSettingAndPlanStrat.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_Customer.qbl                                                                                                                 |    6 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Customer.qbl                                                                                                      |    6 
 _Main/BL/Type_PanelMaterialSportsHealth/_ROOT_Type_PanelMaterialSportsHealth.qbl                                                                                             |   10 
 _Main/BL/Type_PanelMaterialTM17/Attribute_OrderLineID.qbl                                                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuDeleteAll_O.def               |   21 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_ProductID.qbl                                                                                                                   |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_UnitOfMeasureName.qbl                                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp                                                                                                              |    2 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_StockingPointID.qbl                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_IsFirmed.qbl                                                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlActions.def                                                                           |   40 
 _Main/BL/Type_PanelMaterialTM17/Attribute_PriorityName.qbl                                                                                                                   |    7 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsEligibleForNetting.qbl                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_BusinessType.qbl                                                                                                   |    8 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsFirmed.qbl                                                                                                               |    7 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_ProductID.qbl                                                                                                                   |    6 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/_ROOT_Type_MatAttrSettingAndPlanStrategyInputSource.qbl                                                               |    9 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_StockingPointID.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def                                                                                      |   59 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl                                                                                           |   12 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_OrderDate.qbl                                                                                                                   |    7 
 _Main/BL/Type_GlobalDTOTable/Method_RefreshPanelMaterialData.qbl                                                                                                             |   23 
 _Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl                                                                                                                           |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CurrencyID.qbl                                                                                                          |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl                                                                                               |   65 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                              |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CustomerID.qbl                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_OrderID.qbl                                                                                                                          |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlContent.def                                                                           |   58 
 _Main/BL/Type_MacroPlan/Method_MappingProductInLaneData.qbl                                                                                                                  |    4 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsFirmed.qbl                                                                                                      |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_Comment.qbl                                                                                                      |    8 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_SalesSegmentName.qbl                                                                                                            |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Quantity.qbl                                                                                                            |    6 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CustomerID.qbl                                                                                                 |    6 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_CurrencyID.qbl                                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_Price.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ID.qbl                                                                                                            |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_IsEligibleForNetting.qbl                                                                                                           |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/Attribute_value.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnCancel_OnClick.def                                                    |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonPullData_OnClick.def                           |   16 
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def                                                                                          |    4 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_CustomerID.qbl                                                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/_ROOT_Component_FormMaterialLabelingAndPlanningStrategy.def                                    |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def                                                                                |   17 
 _Main/BL/Type_PanelMaterialTM17/Attribute_ID.qbl                                                                                                                             |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductDesc.qbl                                                                                                  |    8 
 _Main/BL/Type_PanelMaterialIT/Attribute_Price.qbl                                                                                                                            |    7 
 _Main/BL/Type_WorkOrderType/_ROOT_Type_WorkOrderType.qbl                                                                                                                     |    9 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CustomerID.qbl                                                                                                    |    6 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/_ROOT_Type_MatAttrSettingAndPlanStrategyDataColumn.qbl                                                             |    9 
 _Main/BL/Type_PanelMaterialIT/Attribute_ID.qbl                                                                                                                               |    7 
 _Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl                                                                                                                  |    2 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_SalesSegmentName.qbl                                                                                           |    6 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_IsFirmed.qbl                                                                                                                    |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/_ROOT_Type_MatAttrSettingAndPlanStrategyDataTable.qbl                                                                   |    9 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsFirmed.qbl                                                                                                                 |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_OrderLineID.qbl                                                                                                                   |    6 
 _Main/BL/Type_PanelMaterialAll/Attribute_ScenarioName.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialAll/Attribute_BusinessType.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_Quantity.qbl                                                                                                                       |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_column.qbl                                              |   27 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_SalesSegmentName.qbl                                                                                                            |    7 
 _Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTopMost.def                                                                                    |   20 
 _Main/BL/Type_PanelMaterialTM18/Attribute_StockingPointID.qbl                                                                                                                |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcProductCount.qbl                                                                                                |   13 
 _Main/Sys/Integration/Structure/PanelMaterialResponseResult_to.xml                                                                                                           |    0 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheck#591.def               |   16 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl                                                                                           |  149 +
 _Main/BL/Type_PanelMaterialTM18/Attribute_ProductID.qbl                                                                                                                      |    7 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_StockingPointID.qbl                                                                                                             |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl                                                                                                |   18 
 _Main/BL/Type_PanelMaterialTM18/Attribute_OrderLineID.qbl                                                                                                                    |    7 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDataTable_MatAttrSettingAndPlanStrateg.qbl                                                                          |   26 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_ID.qbl                                                                                                                          |    7 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderID.qbl                                                                                                                  |    6 
 _Main/BL/Type_PanelMaterialTM18/Attribute_OrderDate.qbl                                                                                                                      |    7 
 _Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/_ROOT_Component_frmStandardAnalysisGlobalOTDTable.def                                                      |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndExport_OnCl.def               |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType.def                                                                         |   10 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_Quantity.qbl                                                                                                                      |    6 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_OrderLineID.qbl                                                                                                                 |    7 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_PriorityName.qbl                                                                                                                |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_PriorityName.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listActionBarPageData.def                                                                            |   10 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_ID.qbl                                                                                                                          |    6 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl                                                                                              |   17 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CurrencyID.qbl                                                                                                 |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_UnitOfMeasureName.qbl                                                                                                                |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_CurrencyID.qbl                                                                                                                    |    7 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_CurrencyID.qbl                                                                                                                  |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl                                                                                      |   18 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl                                                                                         |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuSelectAll_OnClick.def                                                                    |   17 
 _Main/BL/Type_PanelMaterialTM18/Attribute_CurrencyID.qbl                                                                                                                     |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CustomerID.qbl                                                                                                          |    6 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CurrencyID.qbl                                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheckedCh.def               |   18 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyTheTemplate.qbl                                                                                            |   24 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsEligibleForNetting.qbl                                                                                          |    7 
 _Main/BL/Type_PanelMaterialTM17/_ROOT_Type_PanelMaterialTM17.qbl                                                                                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuCreate_OnClick.def                                                                    |   18 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_ID.qbl                                                                                                                          |    6 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MaximumNumberOfDaysInInventory.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuSelectAll_O.def               |   17 
 _Main/Sys/Integration/Brokers/PanelMaterialResponseResult.xml                                                                                                                |    0 
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperRequest.qbl                                                          |    8 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_OrderDate.qbl                                                                                                                   |    7 
 _Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategy_GlobalOTDTable_GlobalOTDTable_MatAttr.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_CustomerID.qbl                                                                                                             |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataColumn/Attribute_name.qbl                                                                                                 |    7 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_Customer.qbl                                                                                                                      |    6 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_base64Str.qbl                                                                                               |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_StockingPointID.qbl                                                                                               |    7 
 _Main/BL/Type_PanelMaterialTM18/Attribute_OrderID.qbl                                                                                                                        |    7 
 _var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties                                                                                                |   46 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def               |   28 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_userName.qbl                                                                                                |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                 |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ID.qbl                                                                                                         |    6 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_UnitOfMeasureName.qbl                                                                                                        |    7 
 _Main/UI/MacroPlanner/Component_FormProducts/_ROOT_Component_FormProducts.def                                                                                                |   10 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_QuintiqType.qbl                                   |    7 
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/_ROOT_IntegratorConfig_PanelMaterialRestServer.qbl                                                       |    6 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl                                                                                               |   24 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_SalesSegmentName.qbl                                                                                              |    6 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsEligibleForNetting.qbl                                                                                                     |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl                                                                              |   23 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_ID.qbl                                                                                                                          |    7 
 _Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl                                                                                                              |   92 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_expectedHeaders.qbl                                                                                        |   23 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Quantity.qbl                                                                                                   |    6 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_UnitOfMeasureName.qbl                                                                                                           |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Quantity.qbl                                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnCreated.def                          |   26 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl                                                                                      |   65 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ID.qbl                                                                                                                  |    6 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_StockingPointID.qbl                                                                                                          |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagLongTerm.qbl                                                                                                   |   12 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatName.qbl                                                                                                        |    8 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_CurrencyID.qbl                                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuSelectAll_OnClick.def                                                                 |   17 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_PriorityName.qbl                                                                                                             |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_CustomerID.qbl                                                                                                                     |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_StockingPointID.qbl                                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlGeneral.def                                                                     |  133 +
 _var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties                                                                                                          |  532 ++++
 _Main/BL/Type_PanelMaterialIT/DefaultValue_CustomerID.qbl                                                                                                                    |    6 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_Price.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Price.qbl                                                                                                         |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl                                                                                                      |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_ListData.def                                                                                         |   59 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlContent.def                                                                                 |   36 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsFirmed.qbl                                                                                                                 |    7 
 _Main/BL/Type_PanelMaterialTianHua/Attribute_UnitOfMeasureName.qbl                                                                                                           |    7 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/_ROOT_Type_PanelMaterialSpecializedDisplay.qbl                                                                                 |   10 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_SalesSegmentName.qbl                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl                                                                                            |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategyDataCell/_ROOT_Type_MatAttrSettingAndPlanStrategyDataCell.qbl                                                                 |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListChildMaterial.def                                                                |   42 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderLineID.qbl                                                                                                         |    6 
 _Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl                                                                                                                      |   19 
 _Main/BL/Relations/Relation_PanelMaterialTianHua_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterialTM17/Attribute_Quantity.qbl                                                                                                                       |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl                                                                                                    |   12 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderLineID.qbl                                                                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/_ROOT_Component_DialogCreateEditMaterialLabelingAndPlanningStrategy.def                      |   31 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_StockingPointID.qbl                                                                                               |    7 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_SalesSegmentName.qbl                                                                                                         |    6 
 _Main/UI/MacroPlanner/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_MenuConvertToPanelMaterial_OnClick.def                                                       |   14 
 _Main/BL/Type_PanelMaterialIT/Attribute_IsEligibleForNetting.qbl                                                                                                             |    7 
 _Main/BL/Relations/Relation_PanelMaterialAutomotiveElectronics_PanelMaterialAll_PanelMaterialAl.qbl                                                                          |   23 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLObjectBase_cell.qbl                                                |   17 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ProductID.qbl                                                                                                        |    7 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderLineID.qbl                                                                                                                 |    6 
 _Main/BL/Type_PanelMaterialTM18/_ROOT_Type_PanelMaterialTM18.qbl                                                                                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlContent.def                                                                     |   15 
 _Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl                                                                                                       |   65 
 _Main/BL/Type_PanelMaterialTM17/Attribute_IsExcludedFromFulfillmentKPIUser.qbl                                                                                               |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_OrderDate.qbl                                                                                                                      |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXMLHeaders/XMLElementId_Key.qbl                                           |    7 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MatType.qbl                                                                                                        |    8 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderID.qbl                                                                                                       |    6 
 _Main/BL/Type_PanelMaterialVehicle/Attribute_Price.qbl                                                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def                                                                    |   48 
 _Main/BL/Type_PanelMaterialTM17/Attribute_Price.qbl                                                                                                                          |    7 
 _Main/BL/Type_PanelMaterial/Attribute_MaterialDescription.qbl                                                                                                                |    8 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Price.qbl                                                                                                      |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_Key.qbl                                                  |    7 
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl                                              |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialOperationButton.def                                                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlContent_ddslPanelModel_OnCreated.def                                                   |   22 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Price.qbl                                                                                                         |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_isXlsx.qbl                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialIT/Attribute_OrderDate.qbl                                                                                                                        |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_IsFirmed.qbl                                                                                                                       |    7 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_Price.qbl                                                                                                                    |    7 
 _Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll.qbl                                                                              |   23 
 _Main/BL/Type_PanelMaterialIT/DefaultValue_OrderID.qbl                                                                                                                       |    6 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ProductID.qbl                                                                                                  |    6 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_CurrencyID.qbl                                                                                                             |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsEligibleForNetting.qbl                                                                                                   |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Quantity.qbl                                                                                                      |    7 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_Quantity.qbl                                                                                                                 |    6 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_PriorityName.qbl                                                                                                  |    7 
 _Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderLineID.qbl                                                                                                              |    6 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsFirmed.qbl                                                                                                   |    7 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl                                                                                             |   25 
 _Main/Sys/Integration/Mapping/PanelMaterialResponseResult.xml                                                                                                                |    0 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_Quantity.qbl                                                                                                               |    7 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_CustomerID.qbl                                                                                                                  |    6 
 _Main/BL/Relations/Relation_PanelMaterialSportsHealth_PanelMaterialAll_PanelMaterialAll_PanelMa.qbl                                                                          |   23 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ID.qbl                                                                                                            |    6 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl                                                                                         |   65 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_UnitOfMeasureName.qbl                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuDelete_OnClick.def                                                                    |   18 
 _Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl                                                                                                               |    2 
 _Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl                                                                                                       |   65 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Price.qbl                                                                                                               |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Customer.qbl                                                                                                   |    6 
 _Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl                                                                                                         |   65 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ProductID.qbl                                                                                                     |    6 
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse#1.qbl                                                        |    9 
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyCustom.qbl                                                                                         |    8 
 _Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ID.qbl                                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelFunctionButtons.def                                                                             |   60 
 _Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/XML_MatAttrSettingAndPlanningStrategyDataTableXML/XMLElementId_QuintiqType.qbl                                          |    7 
 _Main/BL/Type_PanelMaterialTM18/DefaultValue_Quantity.qbl                                                                                                                    |    6 
 _Main/BL/Type_PanelMaterialVehicle/DefaultValue_UnitOfMeasureName.qbl                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_New.def                                                                                     |   14 
 _Main/BL/Type_PanelMaterialTM17/DefaultValue_PriorityName.qbl                                                                                                                |    7 
 _Main/BL/Type_PanelMaterialTM17/Attribute_CurrencyID.qbl                                                                                                                     |    7 
 _Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ProductID.qbl                                                                                                     |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderDate.qbl                                                                                                              |    7 
 _Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_PriorityName.qbl                                                                                                        |    7 
 _Main/BL/Type_PanelMaterial/StaticMethod_Send.qbl                                                                                                                            |   37 
 506 files changed, 7,315 insertions(+), 98 deletions(-)

diff --git a/_Main/BL/ConfigTemplates.properties b/_Main/BL/ConfigTemplates.properties
index aeac723..5ff9151 100644
--- a/_Main/BL/ConfigTemplates.properties
+++ b/_Main/BL/ConfigTemplates.properties
@@ -115,7 +115,11 @@
 domainmodel.historicaltransactioncontrol=template:domainmodel.historicaltransactioncontrol
 domainmodel.httphandlergroupdefinition.quantus=template:domainmodel.httphandlergroupdefinition
 domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint=template:domainmodel.integratorconfig.dsendpoint
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
 domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver=template:domainmodel.integratorconfig.restendpoint
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial=template:domainmodel.integratorconfig.restendpoint
 domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces=template:domainmodel.soapclientinterfacedefinition
diff --git a/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl b/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
index 3da4e20..15ca8ab 100644
--- a/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
+++ b/_Main/BL/EDI/Broker_Broker_OTD_Product.qbl
@@ -38,6 +38,7 @@
       OthersMayFlushTable: true
       OthersMayInsertRow: true
       Parameters: '/owner="TIANMA"'
+      PrimaryKeyColumns: BUSINESSTYPE
       PrimaryKeyColumns: ID
       RecordModificationHintStrategy: 'None'
       EDIODBCLinkColumn BUSINESSTYPE
diff --git a/_Main/BL/InfoMessages.qbl b/_Main/BL/InfoMessages.qbl
new file mode 100644
index 0000000..d3fc0df
--- /dev/null
+++ b/_Main/BL/InfoMessages.qbl
@@ -0,0 +1,5 @@
+Quintiq file version 2.0
+#parent: #root
+InfoMessages id:#InfoMessages #extension
+{
+}
diff --git "a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse\0431.qbl" "b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse\0431.qbl"
new file mode 100644
index 0000000..3692157
--- /dev/null
+++ "b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse\0431.qbl"
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+ContentMapperProcessor ContentMapperReponse
+{
+  DefaultMappingName: 'PanelMaterialResponseResult'
+  PosX: 330
+  PosY: 450
+  ReplyChannelOutputs: QuintiqEndpoint
+}
diff --git a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperRequest.qbl b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperRequest.qbl
new file mode 100644
index 0000000..959d606
--- /dev/null
+++ b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperRequest.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+ContentMapperProcessor ContentMapperRequest
+{
+  PosX: 430
+  PosY: 200
+  RequestChannelInputs: QuintiqEndpoint
+}
diff --git a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl
new file mode 100644
index 0000000..28845d0
--- /dev/null
+++ b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/MessageEnhancerProcessor_MessageHeaderEnhancerProcessor.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+MessageEnhancerProcessor MessageHeaderEnhancerProcessor
+{
+  PosX: 205
+  PosY: 200
+  RequestChannelInputs: ContentMapperRequest
+  MessageEnhancerSet
+  {
+    Property: '_QI.IsRequest'
+    Type: 'String'
+  }
+  MessageEnhancerSet
+  {
+    Property: '_QI.Method'
+    Type: 'String'
+    Value: 'ReceivingPanelMaterials'
+  }
+  MessageEnhancerSet
+  {
+    Property: '_QI.Type'
+    Type: 'String'
+    Value: 'GlobalOTDTable'
+  }
+}
diff --git a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/QuintiqEndpoint_QuintiqEndpoint.qbl b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/QuintiqEndpoint_QuintiqEndpoint.qbl
new file mode 100644
index 0000000..3c79c51
--- /dev/null
+++ b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/QuintiqEndpoint_QuintiqEndpoint.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+QuintiqEndpoint QuintiqEndpoint
+{
+  PosX: 605
+  PosY: 325
+  SettingsEngineLink: 'domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint'
+}
diff --git a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/RestEndpoint_RestEndpointPanelMaterial.qbl b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/RestEndpoint_RestEndpointPanelMaterial.qbl
new file mode 100644
index 0000000..de114e4
--- /dev/null
+++ b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/RestEndpoint_RestEndpointPanelMaterial.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+RestEndpoint RestEndpointPanelMaterial
+{
+  PosX: 30
+  PosY: 325
+  ReplyChannelOutputs: ContentMapperReponse
+  RequestChannelInputs: MessageHeaderEnhancerProcessor
+  SettingsEngineLink: 'domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial'
+}
diff --git a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/_ROOT_IntegratorConfig_PanelMaterialRestServer.qbl b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/_ROOT_IntegratorConfig_PanelMaterialRestServer.qbl
new file mode 100644
index 0000000..b91eb27
--- /dev/null
+++ b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/_ROOT_IntegratorConfig_PanelMaterialRestServer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+IntegratorConfig PanelMaterialRestServer
+{
+}
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_MatAttrSettingAndPlanStrategyDetail_MatAttrSettingAndPlanStrategy_M.qbl b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDetail_MatAttrSettingAndPlanStrategy_M.qbl
new file mode 100644
index 0000000..b1fc594
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MatAttrSettingAndPlanStrategyDetail_MatAttrSettingAndPlanStrategy_M.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MatAttrSettingAndPlanStrategyDetail_MatAttrSettingAndPlanStrategy_MatAttrSettingAndPlanStrategy_MatAttrSettingAndPlanStrategyDetail
+{
+  #keys: '1[414384.0.766881387]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MatAttrSettingAndPlanStrategy
+  {
+    #keys: '3[414384.0.766881389][414384.0.766881388][414384.0.766881390]'
+    Cardinality: '0to1'
+    ObjectDefinition: MatAttrSettingAndPlanStrategyDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MatAttrSettingAndPlanStrategyDetail
+  {
+    #keys: '3[414384.0.766881392][414384.0.766881391][414384.0.766881393]'
+    Cardinality: '1toN'
+    ObjectDefinition: MatAttrSettingAndPlanStrategy
+    OwningSide: 'Owned'
+  }
+}
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/Relations/Relation_PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll.qbl b/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll.qbl
new file mode 100644
index 0000000..f2cc83e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialAll_GlobalOTDTable_GlobalOTDTable_PanelMaterialAll
+{
+  #keys: '1[414702.0.196798981]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.196798983][414702.0.196798982][414702.0.196798984]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.196798986][414702.0.196798985][414702.0.196798987]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialAutomotiveElectronics_PanelMaterialAll_PanelMaterialAl.qbl b/_Main/BL/Relations/Relation_PanelMaterialAutomotiveElectronics_PanelMaterialAll_PanelMaterialAl.qbl
new file mode 100644
index 0000000..dfdd092
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialAutomotiveElectronics_PanelMaterialAll_PanelMaterialAl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialAutomotiveElectronics_PanelMaterialAll_PanelMaterialAll_PanelMaterialAutomotiveElectronics
+{
+  #keys: '1[414702.0.203680165]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.203680167][414702.0.203680166][414702.0.203680168]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialAutomotiveElectronics
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialAutomotiveElectronics
+  {
+    #keys: '3[414702.0.203680170][414702.0.203680169][414702.0.203680171]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialIT_PanelMaterialAll_PanelMaterialAll_PanelMaterialIT.qbl b/_Main/BL/Relations/Relation_PanelMaterialIT_PanelMaterialAll_PanelMaterialAll_PanelMaterialIT.qbl
new file mode 100644
index 0000000..40a8aba
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialIT_PanelMaterialAll_PanelMaterialAll_PanelMaterialIT.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialIT_PanelMaterialAll_PanelMaterialAll_PanelMaterialIT
+{
+  #keys: '1[414702.0.203680281]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.203680283][414702.0.203680282][414702.0.203680284]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialIT
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialIT
+  {
+    #keys: '3[414702.0.203680286][414702.0.203680285][414702.0.203680287]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialSpecializedDisplay_PanelMaterialAll_PanelMaterialAll_P.qbl b/_Main/BL/Relations/Relation_PanelMaterialSpecializedDisplay_PanelMaterialAll_PanelMaterialAll_P.qbl
new file mode 100644
index 0000000..630692f
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialSpecializedDisplay_PanelMaterialAll_PanelMaterialAll_P.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialSpecializedDisplay_PanelMaterialAll_PanelMaterialAll_PanelMaterialSpecializedDisplay
+{
+  #keys: '1[414702.0.203671496]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.203671498][414702.0.203671497][414702.0.203671499]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialSpecializedDisplay
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialSpecializedDisplay
+  {
+    #keys: '3[414702.0.203671501][414702.0.203671500][414702.0.203671502]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialSportsHealth_PanelMaterialAll_PanelMaterialAll_PanelMa.qbl b/_Main/BL/Relations/Relation_PanelMaterialSportsHealth_PanelMaterialAll_PanelMaterialAll_PanelMa.qbl
new file mode 100644
index 0000000..08521bd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialSportsHealth_PanelMaterialAll_PanelMaterialAll_PanelMa.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialSportsHealth_PanelMaterialAll_PanelMaterialAll_PanelMaterialSportsHealth
+{
+  #keys: '1[414702.0.203680203]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.203680205][414702.0.203680204][414702.0.203680206]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialSportsHealth
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialSportsHealth
+  {
+    #keys: '3[414702.0.203680208][414702.0.203680207][414702.0.203680209]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialTM17_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl b/_Main/BL/Relations/Relation_PanelMaterialTM17_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl
new file mode 100644
index 0000000..611fa89
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialTM17_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialTM17_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM17
+{
+  #keys: '1[414702.0.203671572]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.203671574][414702.0.203671573][414702.0.203671575]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialTM17
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialTM17
+  {
+    #keys: '3[414702.0.203671577][414702.0.203671576][414702.0.203671578]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialTM18_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl b/_Main/BL/Relations/Relation_PanelMaterialTM18_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl
new file mode 100644
index 0000000..88f9dbc
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialTM18_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialTM18_PanelMaterialAll_PanelMaterialAll_PanelMaterialTM18
+{
+  #keys: '1[414702.0.203680361]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.203680363][414702.0.203680362][414702.0.203680364]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialTM18
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialTM18
+  {
+    #keys: '3[414702.0.203680366][414702.0.203680365][414702.0.203680367]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialTianHua_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl b/_Main/BL/Relations/Relation_PanelMaterialTianHua_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl
new file mode 100644
index 0000000..cb988d9
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialTianHua_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialTianHua_PanelMaterialAll_PanelMaterialAll_PanelMaterialTianHua
+{
+  #keys: '1[414702.0.203671469]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.203671471][414702.0.203671470][414702.0.203671472]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialTianHua
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialTianHua
+  {
+    #keys: '3[414702.0.203671474][414702.0.203671473][414702.0.203671475]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterialVehicle_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl b/_Main/BL/Relations/Relation_PanelMaterialVehicle_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl
new file mode 100644
index 0000000..97ca6e2
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterialVehicle_PanelMaterialAll_PanelMaterialAll_PanelMateria.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterialVehicle_PanelMaterialAll_PanelMaterialAll_PanelMaterialVehicle
+{
+  #keys: '1[414702.0.196801391]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PanelMaterialAll
+  {
+    #keys: '3[414702.0.196801393][414702.0.196801392][414702.0.196801394]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterialVehicle
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterialVehicle
+  {
+    #keys: '3[414702.0.196801396][414702.0.196801395][414702.0.196801397]'
+    Cardinality: '1toN'
+    ObjectDefinition: PanelMaterialAll
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PanelMaterial_MacroPlan_MacroPlan_PanelMaterial.qbl b/_Main/BL/Relations/Relation_PanelMaterial_MacroPlan_MacroPlan_PanelMaterial.qbl
new file mode 100644
index 0000000..fd1e173
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PanelMaterial_MacroPlan_MacroPlan_PanelMaterial.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PanelMaterial_MacroPlan_MacroPlan_PanelMaterial
+{
+  #keys: '1[414702.0.162969760]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414702.0.162969762][414702.0.162969761][414702.0.162969763]'
+    Cardinality: '0to1'
+    ObjectDefinition: PanelMaterial
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PanelMaterial
+  {
+    #keys: '3[414702.0.162969765][414702.0.162969764][414702.0.162969766]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType.qbl b/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType.qbl
new file mode 100644
index 0000000..2a94ff2
--- /dev/null
+++ b/_Main/BL/Relations/Relation_WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation WorkOrderType_GlobalOTDTable_GlobalOTDTable_WorkOrderType
+{
+  #keys: '1[414702.0.144781477]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.144781479][414702.0.144781478][414702.0.144781480]'
+    Cardinality: '0to1'
+    ObjectDefinition: WorkOrderType
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide WorkOrderType
+  {
+    #keys: '3[414702.0.144781482][414702.0.144781481][414702.0.144781483]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_ActualProductInStockingPointInPeriod/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ActualProductInStockingPointInPeriod/StaticMethod_CreateOrUpdate.qbl
index 0c2492f..95d364e 100644
--- a/_Main/BL/Type_ActualProductInStockingPointInPeriod/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_ActualProductInStockingPointInPeriod/StaticMethod_CreateOrUpdate.qbl
@@ -12,7 +12,7 @@
   TextBody:
   [*
     // Administrator Sep-6-2023 (created)
-    date := Date :: Today();
+    date := owner.StartOfPlanning().Date()-1;
     actualpispip := ActualProductInStockingPointInPeriod::FindActualProductInStockingPointInPeriodTypeIndex( productid, stockingpointid, date, manufactureddate );
     
     if( isnull( actualpispip ) ){
@@ -25,7 +25,7 @@
                                                     manufactureddate,
                                                     true);
       }else{
-        actualpispip.Update( actualinventorylevelend, description, true );
+        actualpispip.Update(  actualinventorylevelend+actualpispip.ActualInventoryLevelEnd(), description, true );
         }
   *]
 }
diff --git a/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
index d1d98d9..e885859 100644
--- a/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
@@ -27,7 +27,7 @@
     product := Product_MP::FindById( macroPlan, productId );
     salesSegment := SalesSegment_MP::FindByName( macroPlan, salesSegmentName );
     stockingPoint := StockingPoint_MP::FindById(  macroPlan, stockingPointId );
-    currency := Currency_MP::FindById( macroPlan, currencyId );
+    //currency := Currency_MP::FindById( macroPlan, currencyId );
     unitOfMeasure := null( UnitOfMeasure_MP )
     priority := null( Priority );
     if( unitOfMeasureName <> "" ) {
@@ -38,32 +38,32 @@
     }
     // 妫�鏌ヤ緷璧栭」
     if( isnull( product) ) {
-        error( "product not found" );  
+        info( "product not found" );  
     }
     if( isnull( salesSegment) ) {
-        error( "sales segment not found" );  
+        info( "sales segment not found" );  
     }
     if( isnull( stockingPoint) ) {
-        error( "stock point not found" );  
+        info( "stock point not found" );  
     }
-    if( isnull( currency) ) {
-        error( "currency not found" );  
-    }
+    //if( isnull( currency) ) {
+    //    error( "currency not found" );  
+    //}
     if( unitOfMeasureName <> "" and isnull( unitOfMeasure) ) {
-        error( "unit of measure not found" );  
+        info( "unit of measure not found" );  
     }
     if( priorityName <> "" and isnull( stockingPoint) ) {
-        error( "priority not found" );  
+        info( "priority not found" );  
     }
     // 鏂板/鏇存柊
     result := CustomerOrder::FindById( macroPlan, id );
     if( isnull( result ) ) {
         CustomerOrder::Create( product, stockingPoint, id, orderDate, quantity, price, 
-                               priorityName, salesSegmentName, currency.Name(), unitOfMeasureName, 
+                               priorityName, salesSegmentName, currencyId, unitOfMeasureName, 
                                false, customerName, customerId, orderId, orderLineId, true, true, true );
     } else {
         result.Update( product, stockingPoint, orderDate, quantity, price, 
-                       priorityName, salesSegmentName, currency.Name(), unitOfMeasureName, 
+                       priorityName, salesSegmentName, currencyId, unitOfMeasureName, 
                        false, customerName, customerId, orderId, orderLineId, true, true, true );
     }
     return result;
diff --git a/_Main/BL/Type_Forecast/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_Forecast/StaticMethod_CreateOrUpdate.qbl
index 3c09ae6..a5c8eb8 100644
--- a/_Main/BL/Type_Forecast/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_Forecast/StaticMethod_CreateOrUpdate.qbl
@@ -55,7 +55,7 @@
     if( isnull( result) ) {
         result := Forecast::Create( product, stockingPoint, id, 
                                     startDate, endDate, quantity, price, 
-                                    priorityName, salesSegmentName, guard( currency.Name(), "" ), unitOfMeasureName, 
+                                    priorityName, salesSegmentName, currencyId, unitOfMeasureName, 
                                     0.0, false, true );
     } else {
         result.Update( product, stockingPoint, 
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
new file mode 100644
index 0000000..6f10cf9
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method InitTestData
+{
+  TextBody:
+  [*
+    //this.MatAttrSettingAndPlanStrategy( relflush );
+    
+    // yypsybs Sep-8-2023 (created)
+    mat1 := MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 1, "鎵嬫満浜嬩笟閮�", "MAT_1", "MAT_1", "TYPE_1", 233.0, "閫氱敤", "闀垮懆鏈�" );
+    MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat1, "PROD_1", 666.0, "PROD_1_DESC" );
+    MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat1, "PROD_2", 777.0, "PROD_2_DESC" );
+    mat2 := MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 2, "鎵嬫満浜嬩笟閮�", "MAT_2", "MAT_2", "TYPE_2", 233.0, "涓撶敤", "闀垮懆鏈�" );
+    MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat2, "PROD_1", 1666.0, "PROD_1_DESC" );
+    MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat2, "PROD_2", 1777.0, "PROD_2_DESC" );
+    MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 3, "鎵嬫満浜嬩笟閮�", "MAT_3", "MAT_3", "TYPE_1", 233.0, "閫氱敤", "鐭懆鏈�" );
+    MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 4, "鎵嬫満浜嬩笟閮�", "MAT_4", "MAT_4", "TYPE_2", 233.0, "涓撶敤", "鐭懆鏈�" );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl b/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl
new file mode 100644
index 0000000..7a92a12
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl
@@ -0,0 +1,92 @@
+Quintiq file version 2.0
+#parent: #root
+Method ReceivingPanelMaterials (
+  NamedValueTree requestnvt
+) as stream[NamedValueTree]
+{
+  TextBody:
+  [*
+    logfile( "--------------------------------------1------------------------------------------------" );
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    
+    businessType := businessTypeNameValue.GetValueAsString();
+    
+    if ( businessType = "杞﹁浇" ) {
+      PanelMaterialVehicle::ReceiveDataGeneration( this, requestnvt );
+    } else if ( businessType = "姹借溅鐢靛瓙" ) {
+      PanelMaterialAutomotiveElectronics::ReceiveDataGeneration( this, requestnvt );
+    } else if ( businessType = "澶╁崕" ) {
+      PanelMaterialTianHua::ReceiveDataGeneration( this, requestnvt );
+    } else if ( businessType = "杩愬姩鍋ュ悍" ) {
+      PanelMaterialSportsHealth::ReceiveDataGeneration( this, requestnvt );
+    } else if ( businessType = "涓撴樉" ) {
+      PanelMaterialSpecializedDisplay::ReceiveDataGeneration( this, requestnvt );
+    } else if ( businessType = "IT" ) {
+      PanelMaterialIT::ReceiveDataGeneration( this, requestnvt );
+    } else if ( businessType = "TM17" ) {
+      PanelMaterialTM17::ReceiveDataGeneration( this, requestnvt );
+    } else if ( businessType = "TM18" ) {
+      PanelMaterialTM18::ReceiveDataGeneration( this, requestnvt );
+    }
+    
+    
+    info( "---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------" );
+    
+    
+    replynvt := LibInt_MessageAccessor::CreateEmptyMessage();
+    LibInt_MessageAccessor::SetHeaderProperty( replynvt, "Content-Type", "application/json" );
+    
+    rootNamedValue := replynvt.Root();
+    bodyHandle := replynvt.GetHandle( "Body" );
+    petHandle := replynvt.GetHandle( "Pet" );
+    bodyNamedValue := rootNamedValue.Child( bodyHandle );
+    petNamedValue := bodyNamedValue.AddChild( petHandle );
+    categoryHandle := replynvt.GetHandle( "Category" );
+    categoryNamedValue := petNamedValue.AddChild( categoryHandle );
+    categoryIDHandle := replynvt.GetHandle( "Id" );
+    categoryIDNamedValue := categoryNamedValue.AddChild( categoryIDHandle );
+    categoryIDNamedValue.SetValue( 3 );
+    categoryNameHandle := replynvt.GetHandle( "Name" );
+    categoryNameNamedValue := categoryNamedValue.AddChild( categoryNameHandle );
+    categoryNameNamedValue.SetValue( "Cat" );
+    petNameHandle := replynvt.GetHandle( "Name" );
+    petNameValue := petNamedValue.AddChild( petNameHandle );
+    petNameValue.SetValue( "Pet1" );
+    petIdHandle := replynvt.GetHandle( "PetId" );
+    petIdNameValue := petNamedValue.AddChild( petIdHandle );
+    petIdNameValue.SetValue( 1 );
+    
+    photoUrlHandle := replynvt.GetHandle( "PhotoUrl" );
+    photoUrlNameValue := petNamedValue.AddChild( photoUrlHandle );
+    urlHandle := replynvt.GetHandle( "Url" );
+    photoUrlNameValue.AddChild( urlHandle, "url1" );
+    
+    statusHandle := replynvt.GetHandle( "Status" );
+    statusNameValue := petNamedValue.AddChild( statusHandle );
+    statusNameValue.SetValue( "available" );
+    
+    tagHandle := replynvt.GetHandle( "Tag" );
+    tagNameValue := petNamedValue.AddChild( tagHandle );
+    tagIdHandle := replynvt.GetHandle( "Id" );
+    tagNameValue.AddChild( tagIdHandle, 123 );
+    tagNameHandle := replynvt.GetHandle( "Name" );
+    tagNameValue.AddChild( tagNameHandle, "tag1" );
+    
+    
+    info( replynvt.ToString() );
+    
+    
+    return emit( replynvt );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_RefreshPanelMaterialData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_RefreshPanelMaterialData.qbl
new file mode 100644
index 0000000..6c98026
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_RefreshPanelMaterialData.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Method RefreshPanelMaterialData (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlan, Unit.Operation.PeriodTaskOperation, pto, true ) {
+      traverse ( pto, DependentDemand, dd, true ) {
+        product_MP := dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Product_MP();
+        if ( product_MP.IsPanelMaterial() ) {
+          macroPlan.PanelMaterial( relnew,
+                                   PanelModel          := product_MP.ID(),
+                                   MaterialDescription := product_MP.ID(),
+                                   StartDate           := dd.Start().Date(),
+                                   DemandQuantity      := dd.Quantity()
+                                  );
+        }                   
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_ReceivingPanelMaterials.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_ReceivingPanelMaterials.qbl
new file mode 100644
index 0000000..ad3eacc
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_ReceivingPanelMaterials.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceivingPanelMaterials (
+  NamedValueTree requestnvt
+) as stream[NamedValueTree]
+{
+  TextBody:
+  [*
+    MDSGlobalOTDTable::Find( DatasetFindOptions::Construct("GlobalOTDTable")) -> ( c ) {
+      return c.ReceivingPanelMaterials( requestnvt );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
index 4c0470e..4116cce 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
@@ -23,23 +23,27 @@
     product := Product_MP::FindById( macroPlan, productId );
     stockingPoint := StockingPoint_MP::FindById( macroPlan, stockingPointId );
     account := Account_MP::FindByName( macroPlan, accountName );
-    if( isnull( product ) ) {
-        error( "product not found" );  
-    }
-    if( isnull( stockingPoint ) ) {
-        error( "stocking point not found" );  
-    }
-    if( isnull( account ) ) {
-        error( "account not found" );  
-    }
-    result := InventoryValueAndCost::FindById( macroPlan, id );
-    if( isnull( result ) ) {
+    //if( isnull( product ) ) {
+    //    error( "product not found" );  
+    //}
+    //if( isnull( stockingPoint ) ) {
+    //    error( "stocking point not found" );  
+    //}
+    //if( isnull( account ) ) {
+    //    error( "account not found" );  
+    //}
+    result := InventoryValueAndCost::FindById( macroPlan, stockingPointId,productId,start,id );
+    if( not isnull( product) and not isnull( stockingPoint) and not isnull( account)){
+      if( isnull( result ) ) {
         result := InventoryValueAndCost::Create( id, product, stockingPoint, account, costDriver, start, cost, true ).astype( InventoryValueAndCost );
-    } else if( result.ProductID() <> productId ) {
-        error( "cannot change product of inventory value and cost" )
-    } else {
-        result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
+      } else if( result.ProductID() <> productId ) {
+        info( "cannot change product of inventory value and cost" )
+      } 
+    //  else {
+    //    result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
+    //  }
     }
+    
     return result;
   *]
 }
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
index b0dc53e..133145d 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
@@ -2,13 +2,16 @@
 #parent: #root
 StaticMethod FindById (
   MacroPlan macroPlan,
+  String productId,
+  String stockPointId,
+  Date start,
   String id
 ) as InventoryValueAndCost
 {
   TextBody:
   [*
     // yypsybs Aug-16-2023 (created)
-    value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ID() = id );
+    value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ProductID()=productId and item.StockingPointID() = stockPointId and item.Start() = start );
     return value;
   *]
 }
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl b/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
index d78931a..64c72eb 100644
--- a/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
+++ b/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
@@ -12,7 +12,7 @@
   [*
     // Administrator Jul-12-2023 (created)
     //Set default value
-    isenabled := false;
+    isenabled := true;
     datestart := Date::Construct(1900, 1, 1) ;
     dateend := Date::Construct(9999, 12, 31);
     standardleadtime := Duration::Zero();
diff --git a/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl b/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
index b8b0705..d030255 100644
--- a/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
@@ -11,7 +11,7 @@
     currencyid := "CNY";
     startdate := Date::Date( 1900, 1, 1 );
     enddate := Date::Date( 9999, 12, 31 );
-    capacitytype := "Infinite";
+    capacitytype := "Transport quantity";
     
     if( isnull( Unit::FindById( this, "绌鸿繍" ) ) ){
       this.Unit( relnew, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
index 87cbdf3..f9cd042 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -9,7 +9,7 @@
   [*
     // renhao Aug-14-2023 (created)
     date := Date :: Today();
-    listtodeal := selectset( this,MappingActualPISPIP,actual,not isnull( Product_MP::FindById( this, actual.ProductID() ) ) );
+    listtodeal := selectset( this,MappingActualPISPIP,actual,true );
     totalcount := listtodeal.Size();
     info( "ActualPISPIP has " + totalcount.AsQUILL() + " rows in total" );
     
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
index 7295bad..ea2ad61 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -9,15 +9,14 @@
   [*
     // renhao Aug-14-2023 (created)
     
-    listtodeal := selectset( this,MappingExternalSupply,externalSupply, 
-                             not isnull( StockingPoint_MP::FindById( this, externalSupply.StockingPointID() ) ) and not isnull( Product_MP::FindById( this, externalSupply.ProductID() ) ) );
+    listtodeal := selectset( this,MappingExternalSupply,externalSupply, true );
     totalcount := listtodeal.Size();
     info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
     
     count := 0;
     traverse( listtodeal,Elements,externalSupply){
       count := count + 1;
-      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
+      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
         info( "Now is dealing with the " + count.AsQUILL() + "ExternalSupply " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
         }
       product := select( this,MappingProduct,product,product.ID() = externalSupply.ProductID() and product.KeyProduct() = nuclear,true);
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingInventoryValueAndCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingInventoryValueAndCostData.qbl
index 2138aae..0789263 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingInventoryValueAndCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingInventoryValueAndCostData.qbl
@@ -5,23 +5,26 @@
   TextBody:
   [*
     // yypsybs Aug-15-2023 (created)
-    listtodeal := selectset( this,MappingInventoryValueAndCost,item,not isnull( Product_MP::FindById( this, item.ProductID() ) ), not isnull( StockingPoint_MP::FindById( this, item.StockingPointID() ) ) );
+    listtodeal := selectset( this,MappingInventoryValueAndCost,item,true );
     totalcount := listtodeal.Size();
+    
     info( "InventoryCost has " + totalcount.AsQUILL() + " rows in total" );
     
     count := 0;
     traverse( listtodeal, Elements, item ) {
-      count := count + 1;
-      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
-        info( "Now is dealing with the " + count.AsQUILL() + "InventoryCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
+        count := count + 1;
+        if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
+          info( "Now is dealing with the " + count.AsQUILL() + "InventoryCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
         }
-      if( not isnull( Product_MP::FindById( this, item.ProductID() ) ) ){
-          InventoryValueAndCost::CreateOrUpdate( this, item.ID(), item.ProductID(), 
+        
+        InventoryValueAndCost::CreateOrUpdate( this, item.ID(), item.ProductID(), 
                                                  item.StockingPointID(), 
-                                                 item.AccountName(), item.CostDriver(), item.Start(), item.Cost() );
-      }else{
-        info( "invaild product: " + item.ProductID().AsQUILL() );
-        }
+                                                 item.AccountName(), item.CostDriver(), item.Start(), item.Cost());
+    //  if( not isnull( Product_MP::FindProductTypeIndex( item.ProductID() ) )  and not isnull( StockingPoint_MP :: FindStockingPointTypeIndex( item.StockingPointID()))){
+    //      
+    //  }else{
+    //    info( "invaild product: " + item.ProductID().AsQUILL() );
+    //    }
     }
   *]
 }
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
index 93b5707..892f5ef 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -17,7 +17,8 @@
     bomList := selectsortedset(  this, MappingBOM, item,
                                  ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0, 
                                          true, 
-                                         businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
+    //                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
+                                         businessTypes.Find( item.BusinessType() ) >= 0 )
                                  and ifexpr( isKeyProduct, 
                                              keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
                                              true ),
@@ -28,19 +29,19 @@
         routingRows := selectset( bomList, Elements, item, true, routingId = item.OrganCode() + "_" + item.ProductCode() );
         if( routingRows.Size() > 0 ) {
             firstRow := routingRows.Element( 0 );
-            stockingPointId := firstRow.OrganCode()  + "_" + firstRow.ProductType() + "_STOCK";
-            inputStockingPointId := firstRow.OrganCode()  + "_" + firstRow.ComponentType() + "_STOCK";
+            stockingPointId := firstRow.OrganCode()  + "_" + firstRow.ProductType() + "_Stock";
+            inputStockingPointId := firstRow.OrganCode()  + "_" + firstRow.ComponentType() + "_Stock";
             // ========妫�鏌�========
-            product := Product_MP::FindById( this, firstRow.ProductCode() );
+            product := Product_MP::FindProductTypeIndex( firstRow.ProductCode() );
             if( not isnull( product ) ) {
     //              error( "product : " + firstRow.ProductCode() + " not found" );
-              stockingPoint := StockingPoint_MP::FindById( this, stockingPointId );
-              inputStockingPoint := StockingPoint_MP::FindById( this, inputStockingPointId );
+              stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( stockingPointId );
+              inputStockingPoint := StockingPoint_MP::FindStockingPointTypeIndex(  inputStockingPointId );
     //          info( stockingPointId.AsQUILL() );
       //        if( isnull( stockingPoint ) ) {
       //            error( "stockingPoint : " + stockingPointId + " not found" );
       //        }
-              routing := Routing::FindById( this, routingId );
+              routing := Routing::FindRoutingTypeIndex(  routingId );
               if( not isnull( routing ) ) {
     //              error( "routing : " + routingId + " not found" );
                 // ========澶勭悊杈撳嚭========
diff --git "a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl" "b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl"
index 03a3858..059c6c9 100644
--- "a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl"
+++ "b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting\043576.qbl"
@@ -67,7 +67,7 @@
                         alterProd := Product_MP::FindById( this, alterRow.AlternativeMaterialCode() );
                         if( not isnull( alterProd ) ) {
         //                    error( "alterProd : " + alterRow.AlternativeMaterialCode() + " not found" );
-                          stockingPointIdAlter := alterRow.OrganCode()  + "_" + alterRow.ProductType() + "_STOCK";
+                          stockingPointIdAlter := alterRow.OrganCode()  + "_" + alterRow.ProductType() + "_Stock";
                           stockingPointAlter := StockingPoint_MP::FindById( this, stockingPointIdAlter );
                           if( isnull( stockingPointAlter ) ) {
                               error( "stockingPoint : " + stockingPointIdAlter + " not found" );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl
index ab499a8..6a24698 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataSupplyPurchase.qbl
@@ -18,28 +18,35 @@
     routingStep := RoutingStep::Create( routing, routingStepName, "", true );
     product := Product_MP::FindById( this, productId );
     if( isnull( product ) ) {
-        error( "product : " + productId + " not found" );
+        info(  "product : " + productId + " not found" );
     }
     stockingPointId := orgCode + "_" + productType + "_Stock";
     stockingPoint := StockingPoint_MP::FindById( this, stockingPointId );
     if( isnull( stockingPoint ) ) {
-        error( "stockingPoint : " + stockingPointId + " not found" );
+        info( "stockingPoint : " + stockingPointId + " not found" );
     }
-    unit := Unit::FindById( this, unitId );
-    if( isnull( unit ) ) {
+    
+    if( not isnull( product) and not isnull( stockingPoint)){
+      unit := Unit::FindById( this, unitId );
+      if( isnull( unit ) ) {
         unit := this.Unit( relnew, 
                           ID := unitId, Name := unitId, CapacityType := "Infinite",
                           DefaultGridX := 0, DefaultGridY := 0,
                           IsManuallyConfigured := false,
                           Currency_MP := this.BaseCurrency(), UnitOfMeasure_MP := this.DefaultUnitOfMeasure() );
-    }
+      }
     // Operation
-    operation := Operation::Create( operationId, unit, operationId, routingStep, 
+      operation := Operation::FindOperationTypeIndex( operationId);
+      if( isnull( operation)){
+        operation := Operation::Create( operationId, unit, operationId, routingStep, 
                                     Duration::Zero(), Duration::Zero(), 1.0, false, 
                                     Real::MinReal(), false, Real::MaxReal(), 
                                     0.0, 0.0, false, true );
     // OperaionBom
-    operation.CreateOperationBOM( product, stockingPoint, false, true );
-    operation.GetOperationBOM( product.ID(), stockingPoint.ID(), false ).Quantity( 1 );
+        operation.CreateOperationBOM( product, stockingPoint, false, true );
+        operation.GetOperationBOM( product.ID(), stockingPoint.ID(), false ).Quantity( 1 );
+      }
+      
+    }
   *]
 }
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
index 3a315d0..98be129 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -38,7 +38,7 @@
     // Get the operation cost data
     traverse( listtodealwithmaxsn, Elements, item ){
       count := count + 1;
-      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
+      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
         info( "Now is dealing with the " + count.AsQUILL() + "OperationCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
         }
       id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection() + "_" + item.Line();
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
index a3a19ed..07e9838 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -11,8 +11,8 @@
     toDealList := construct( MappingOperations );
     if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
         toDealList := selectsortedset( this, MappingOperation, item, 
-    //                                   businessTypes.Find( item.BusinessType() ) >= 0, 
-                                       businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, 
+                                       businessTypes.Find( item.BusinessType() ) >= 0, 
+    //                                   businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, 
                                        item.SequenceNumber() );
     } else {
         toDealList := selectsortedset( this, MappingOperation, item, 
@@ -26,7 +26,7 @@
         routingId := item.OrganCode() + "_" + item.ProductID();
         unitId := item.OrganCode() + "_" + item.PlantName() + "_" + item.ProcessSection();
         routingStepName := item.ProcessSection() + "_" + [String]item.SequenceNumber();
-        operationId := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection();
+        operationId := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection()+"_" + [String]item.SequenceNumber();
     //    info( "========" )
     //    info( "routingId:" + routingId );
     //    info( "unitId:" + unitId );
@@ -51,15 +51,16 @@
         if( isnull( routingStep ) ) {
             routingStep := RoutingStep::Create( routing, routingStepName, "", true );
         }
-        // UnitOfMeasure
-        unitOfMeasure := UnitOfMeasure_MP::FindByName( this, item.UnitOfMeasureName() );
-        if( isnull( unitOfMeasure ) ) {
-            error( "unit of measure [" + item.UnitOfMeasureName() + "] not found for routing [" + routingId + "]" );
-        }
+        
         // Unit
         unit := Unit::FindById( this, unitId );
         if( isnull( unit ) ) {
-            unit := this.Unit( relnew, 
+          // UnitOfMeasure
+        unitOfMeasure := UnitOfMeasure_MP::FindByName( this, item.UnitOfMeasureName() );
+          if( isnull( unitOfMeasure ) ) {
+              info( "unit of measure [" + item.UnitOfMeasureName() + "] not found for routing [" + routingId + "]" );
+          }
+           unit := this.Unit( relnew, 
                               ID := unitId, Name := unitId, CapacityType := "Infinite",
                               DefaultGridX := 0, DefaultGridY := 0,
                               IsManuallyConfigured := false,
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
index cb6a99d..fa5aa3b 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
@@ -22,10 +22,10 @@
           }
     } else {
         if( iskeyproduct = true ){
-          listToDeal := selectset( this, MappingProduct, item, item.KeyProduct() = true, businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 );
+          listToDeal := selectset( this, MappingProduct, item, item.KeyProduct() = true,  businesstypes.Find(  item.BusinessType()) > 0 );
           }
         else{
-        listToDeal := selectset( this, MappingProduct, item, businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 );
+        listToDeal := selectset( this, MappingProduct, item, businesstypes.Find(  item.BusinessType()) > 0 );
         }
     }
     totalcount := listToDeal.Size();
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingProductInLaneData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingProductInLaneData.qbl
index 2bd20a4..2d63310 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingProductInLaneData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingProductInLaneData.qbl
@@ -7,7 +7,7 @@
   [*
     // Administrator Aug-17-2023 (created)
     // list to deal
-    listtodeal := selectset( this, MappingProductInLane, item, not isnull( Product_MP::FindById( this, item.ProductID() ) ), not isnull( Lane::FindLaneTypeIndex( item.LineID() ) ) );
+    listtodeal := selectset( this, MappingProductInLane, item ,true );
     totalcount := listtodeal.Size();
     info( "ProductInLane has " + totalcount.AsQUILL() + " rows in total" );
     
@@ -15,7 +15,7 @@
     // Create ProductInLane
     traverse( listtodeal, Elements, item ){
       count := count + 1;
-      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
+      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
         info( "Now is dealing with the " + count.AsQUILL() + "ProductInLane " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
         }
       ProductInLane::CreateOrUpdate( this, item.ProductID(), item.LineID() );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
index fa613b6..b5618c6 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
@@ -15,13 +15,14 @@
         listtodeal := selectset( this, MappingOperation, item, true );
     } else {
         listtodeal := selectset( this, MappingOperation, item, 
-                                 businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
-                                  );
+    //                             businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
+                                 businesstypes.Find( item.BusinessType() ) >= 0
+                                );
     }
     
     //Set the Default values
     unitofmeasurename := "PCS";
-    capacitytype := "Infinite";
+    capacitytype := "Transport quantity";
     
     // Get the root data
     Unit::CreateOrUpdate( this, 
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index dc5d8d6..fe4e7a1 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -67,7 +67,7 @@
     macroPlan.Broker_OTD_Product().Execute();
     info( "Product Data Broker Finished, Start Product Mapping" );
     //testproduct := construct( Strings );
-    macroPlan.MappingProductData( businessTypes, false );
+    macroPlan.MappingProductData( businessTypes, isKeyProduct );
     
     //鍗曚綅杞崲-7
     BaseConversionFactor::DoSync( macroPlan );
@@ -107,31 +107,31 @@
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiLaneLegsData( data );
     
-    //// 渚涘簲缃戠粶锛堣溅閬擄級-12
-    //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
-    //macroPlan.Broker_OTD_ProductInLane().Execute();
-    //info( "ProductInLane Data Broker Finished, Start ProductInLane Mapping" );
-    //macroPlan.MappingProductInLaneData();
+    // 渚涘簲缃戠粶锛堣溅閬擄級-12
+    info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
+    macroPlan.Broker_OTD_ProductInLane().Execute();
+    info( "ProductInLane Data Broker Finished, Start ProductInLane Mapping" );
+    macroPlan.MappingProductInLaneData();
     
     // 鍦ㄥ簱搴撳瓨鏁版嵁-13
     info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
     macroPlan.Broker_OTD_ActualPISPIP().Execute();
     info( "ActualPISPIP Data Broker Finished, Start ActualPISPIP Mapping" );
     //macroPlan.MappingActualPISPIPData( businessTypes, true );
-    macroPlan.MappingActualPISPIPData( businessTypes, false );
+    macroPlan.MappingActualPISPIPData( businessTypes, isKeyProduct );
     
     // 鍦ㄩ�斿簱瀛�-14
     info( "ActualPISPIP Finished, Start ExternalSupply Data Broker" );
     macroPlan.Broker_OTD_ExternalSupply().Execute();
     //macroPlan.MappingExternalSupplyData( businessTypes, true );
     info( "ExternalSupply Data Broker Finished, Start ExternalSupply Mapping" );
-    macroPlan.MappingExternalSupplyData( businessTypes, false );
+    macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct );
     
     // 搴撳瓨鎴愭湰-15
     InventoryValueAndCost::DoSync( macroPlan );
     
-    //// todo 鍒堕�犳垚鏈�-16
-    //info( "InventoryCost Finished, Start OperationCost Mapping" );
+    // todo 鍒堕�犳垚鏈�-16
+    info( "InventoryCost Finished, Start OperationCost Mapping" );
     //macroPlan.MappingOperationCostData( businessTypes );
     
     // 璁㈠崟棰勬祴-17
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_CheckThePrecedingColumn.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl
new file mode 100644
index 0000000..915e044
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CheckThePrecedingColumn.qbl
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+Method CheckThePrecedingColumn (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, MatAttrSettingAndPlanStrategyDataRow, masapsdr ) {
+      itemCode := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜" );
+      targetMatAttrSettingAndPlanStrategy := select( globalOTDTable, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.MatCode() = itemCode.value() );
+      if ( not isnull( targetMatAttrSettingAndPlanStrategy ) ) {
+        businessType                      := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "涓氬姟绫诲瀷" ).value();
+        nameOfMaterial                    := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡鍚嶇О" ).value();
+        itemClassification                := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡鍒嗙被" ).value();
+        LTTimeDays                        := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "LT鏃堕棿锛堝ぉ锛�" ).value();
+        numberOfFinishedSKUs              := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鎴愬搧SKU鏁伴噺" ).value();
+        finishedProductDeliveryMinLTDays  := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鎴愬搧浜や粯Min-LT锛堝ぉ锛�" ).value();
+        longAndShortCycleLabels           := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "闀跨煭鍛ㄦ湡鏍囩" ).value();
+        genericSpecialLabels              := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "閫氱敤涓撶敤鏍囩" ).value();
+        automaticMaterialPlanningPolicies := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鑷姩鐗╂枡璁″垝绛栫暐" ).value();
+        if ( businessType                           <> targetMatAttrSettingAndPlanStrategy.BusinessType()     or
+             nameOfMaterial                         <> targetMatAttrSettingAndPlanStrategy.MatName()          or
+             itemClassification                     <> targetMatAttrSettingAndPlanStrategy.MatType()          or
+             [Real]LTTimeDays                       <> targetMatAttrSettingAndPlanStrategy.MatArrivalLT()     or
+             [Real]numberOfFinishedSKUs             <> targetMatAttrSettingAndPlanStrategy.ProductCount()     or
+             [Real]finishedProductDeliveryMinLTDays <> targetMatAttrSettingAndPlanStrategy.MinProdDeliverLT() or
+             longAndShortCycleLabels                <> targetMatAttrSettingAndPlanStrategy.FlagLongTerm()     or
+             genericSpecialLabels                   <> targetMatAttrSettingAndPlanStrategy.FlagGeneric()      or
+             automaticMaterialPlanningPolicies      <> targetMatAttrSettingAndPlanStrategy.PlanningStrategyAuto() )
+        {
+          error( "瀵煎叆澶辫触锛屼笌褰撳墠绯荤粺瀛楁涓嶄竴鑷达細", targetMatAttrSettingAndPlanStrategy.MatCode() );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl
new file mode 100644
index 0000000..15d22df
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_CreateOrUpdateData.qbl
@@ -0,0 +1,149 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateOrUpdateData (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, MatAttrSettingAndPlanStrategyDataRow, masapsdr ) {
+      itemCode := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜" );
+      targetMatAttrSettingAndPlanStrategy := select( globalOTDTable, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.MatCode() = itemCode.value() );
+      if ( not isnull( targetMatAttrSettingAndPlanStrategy ) ) {
+        minimumNumberOfDaysInStock     := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "搴撳瓨鏈�灏忓ぉ鏁�" ).value();
+        maximumNumberOfDaysInInventory := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "搴撳瓨鏈�澶уぉ鏁�" ).value();
+        try {
+          targetMatAttrSettingAndPlanStrategy.MinimumNumberOfDaysInStock( [Number]minimumNumberOfDaysInStock );
+          targetMatAttrSettingAndPlanStrategy.MaximumNumberOfDaysInInventory( [Number]maximumNumberOfDaysInInventory );
+          targetMatAttrSettingAndPlanStrategy.UpdateBy( QuintiqUser::CurrentUser().Username() );
+          targetMatAttrSettingAndPlanStrategy.UpdateTime( DateTime::ActualTime() );
+        } onerror {
+          error( "搴撳瓨鏈�灏忓ぉ鏁版垨搴撳瓨鏈�澶уぉ鏁板繀椤讳负鏁存暟锛�", targetMatAttrSettingAndPlanStrategy.MatCode() );
+        }
+      } else {
+        businessType                      := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "涓氬姟绫诲瀷" ).value();
+        createItemCode                    := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜" ).value();
+        nameOfMaterial                    := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡鍚嶇О" ).value();
+        itemClassification                := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡鍒嗙被" ).value();
+        LTTimeDays                        := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "LT鏃堕棿锛堝ぉ锛�" ).value();
+    //    numberOfFinishedSKUs              := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鎴愬搧SKU鏁伴噺" ).value();
+    //    finishedProductDeliveryMinLTDays  := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鎴愬搧浜や粯Min-LT锛堝ぉ锛�" ).value();
+        longAndShortCycleLabels           := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "闀跨煭鍛ㄦ湡鏍囩" ).value();
+        genericSpecialLabels              := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "閫氱敤涓撶敤鏍囩" ).value();
+        automaticMaterialPlanningPolicies := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鑷姩鐗╂枡璁″垝绛栫暐" ).value();
+        usersManuallySchedulePolicies     := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐢ㄦ埛鎵嬪姩璁″垝绛栫暐" ).value();
+        minimumNumberOfDaysInStock        := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "搴撳瓨鏈�灏忓ぉ鏁�" ).value();
+        maximumNumberOfDaysInInventory    := select( masapsdr, MatAttrSettingAndPlanStrategyDataCell, tempMASAPSDC, tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "搴撳瓨鏈�澶уぉ鏁�" ).value();
+        if ( businessType = "闆嗗洟闈㈡澘" ) {
+          if ( createItemCode.StartsWith( "103" ) ) {
+            if( longAndShortCycleLabels = "闀垮懆鏈�" ) {
+              if ( genericSpecialLabels = "涓撶敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else if ( genericSpecialLabels = "閫氱敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "瀹夊叏搴撳瓨" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else {
+                error( "涓撻�氱敤鏍囩鐨勫�煎嚭閿欙細", createItemCode );
+              }
+            } else if ( longAndShortCycleLabels = "鐭懆鏈�" ) {
+              if ( genericSpecialLabels = "涓撶敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else if ( genericSpecialLabels = "閫氱敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "瀹夊叏搴撳瓨" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else {
+                error( "涓撻�氱敤鏍囩鐨勫�煎嚭閿欙細", createItemCode );
+              }
+            } else {
+              error( "闀跨煭鍛ㄦ湡鐨勫�煎嚭閿欙細", createItemCode );
+            }
+          } else {
+            if( longAndShortCycleLabels = "闀垮懆鏈�" ) {
+              if ( genericSpecialLabels = "涓撶敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else if ( genericSpecialLabels = "閫氱敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else {
+                error( "涓撻�氱敤鏍囩鐨勫�煎嚭閿欙細", createItemCode );
+              }
+            } else if ( longAndShortCycleLabels = "鐭懆鏈�" ) {
+              if ( genericSpecialLabels = "涓撶敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else if ( genericSpecialLabels = "閫氱敤" ) {
+                if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                  error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+                }
+              } else {
+                error( "涓撻�氱敤鏍囩鐨勫�煎嚭閿欙細", createItemCode );
+              }
+            } else {
+              error( "闀跨煭鍛ㄦ湡鐨勫�煎嚭閿欙細", createItemCode );
+            }
+          }
+        } else {
+          if( longAndShortCycleLabels = "闀垮懆鏈�" ) {
+            if ( genericSpecialLabels = "涓撶敤" ) {
+              if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+              }
+            } else if ( genericSpecialLabels = "閫氱敤" ) {
+              if ( automaticMaterialPlanningPolicies <> "瀹夊叏搴撳瓨" ) {
+                error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+              }
+            } else {
+              error( "涓撻�氱敤鏍囩鐨勫�煎嚭閿欙細", createItemCode );
+            }
+          } else if ( longAndShortCycleLabels = "鐭懆鏈�" ) {
+            if ( genericSpecialLabels = "涓撶敤" ) {
+              if ( automaticMaterialPlanningPolicies <> "JIT" ) {
+                error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+              }
+            } else if ( genericSpecialLabels = "閫氱敤" ) {
+              if ( automaticMaterialPlanningPolicies <> "VMI" ) {
+                error( "瀵煎叆鐨勮嚜鍔ㄨ鍒掔瓥鐣ュ�煎嚭閿欙細", createItemCode );
+              }
+            } else {
+              error( "涓撻�氱敤鏍囩鐨勫�煎嚭閿欙細", createItemCode );
+            }
+          } else {
+            error( "闀跨煭鍛ㄦ湡鐨勫�煎嚭閿欙細", createItemCode );
+          }
+        }
+        try {
+          matAttrSettingAndPlanStrategy := globalOTDTable.MatAttrSettingAndPlanStrategy( relnew,
+                                                                                         BusinessType := businessType,
+                                                                                         MatCode := createItemCode,
+                                                                                         MatName := nameOfMaterial,
+                                                                                         MatType := itemClassification,
+                                                                                         MatArrivalLT := [Number]LTTimeDays,
+    //                                                                                     ProductCount := [Number]numberOfFinishedSKUs,
+    //                                                                                     MinProdDeliverLT := [Number]finishedProductDeliveryMinLTDays,
+                                                                                         FlagLongTerm := longAndShortCycleLabels,
+                                                                                         FlagGeneric := genericSpecialLabels,
+    //                                                                                     PlanningStrategyAuto := automaticMaterialPlanningPolicies,
+                                                                                         PlanningStrategyCustom := usersManuallySchedulePolicies,
+                                                                                         MinimumNumberOfDaysInStock := [Number]minimumNumberOfDaysInStock,
+                                                                                         MaximumNumberOfDaysInInventory := [Number]maximumNumberOfDaysInInventory
+                                                                                        );
+          matAttrSettingAndPlanStrategy.UpdateBy( QuintiqUser::CurrentUser().Username() );   
+          matAttrSettingAndPlanStrategy.UpdateTime( DateTime::ActualTime() );
+          matAttrSettingAndPlanStrategy.SerialNumber( maxselect( globalOTDTable, MatAttrSettingAndPlanStrategy, tempMASAPS, tempMASAPS.SerialNumber() ).SerialNumber() + 1 );                                                                                
+        } onerror {
+          error( "搴撳瓨鏈�灏忓ぉ鏁版垨搴撳瓨鏈�澶уぉ鏁板繀椤讳负鏁存暟锛�", targetMatAttrSettingAndPlanStrategy.MatCode() );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl
new file mode 100644
index 0000000..624f54f
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_SynchronizeData.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method SynchronizeData
+{
+  TextBody:
+  [*
+    this.VerifyThatTheItemCodeIsNotDuplicated();
+    
+    globalOTDTable := this.MatAttrSettingAndPlanStrategyInputSource().GlobalOTDTable();
+    
+    this.CheckThePrecedingColumn( globalOTDTable );
+    
+    this.CreateOrUpdateData( globalOTDTable );
+    
+    this.VerificationData( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl
new file mode 100644
index 0000000..d09c337
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerificationData.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+Method VerificationData (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    info( "绛栫暐涓暟锛�", globalOTDTable.MatAttrSettingAndPlanStrategy( relsize ) );
+    traverse ( globalOTDTable, MatAttrSettingAndPlanStrategy, masaps ) {
+      if ( masaps.PlanningStrategyCustom() <> "瀹夊叏搴撳瓨" and masaps.PlanningStrategyCustom() <> "JIT" and masaps.PlanningStrategyCustom() <> "M/A" and
+           masaps.PlanningStrategyCustom() <> "PO鎷夋枡" and masaps.PlanningStrategyCustom() <> "VMI" ) {
+        error( "鎵嬪姩璁剧疆绛栫暐閿欒锛�", masaps.MatCode() );     
+      }
+      
+      if ( ( masaps.PlanningStrategyAuto() <> ""   and masaps.PlanningStrategyAuto() = "JIT" )  or 
+           ( masaps.PlanningStrategyCustom() <> "" and masaps.PlanningStrategyCustom() = "JIT" ) 
+          ) {
+        if ( masaps.MinimumNumberOfDaysInStock() > 0 or masaps.MaximumNumberOfDaysInInventory() > 0 ) {
+          error( "JIT绛栫暐瀛樺湪鏈�灏忓拰鏈�澶у簱瀛樺ぉ鏁帮細", masaps.MatCode() );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyThatTheItemCodeIsNotDuplicated.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyThatTheItemCodeIsNotDuplicated.qbl
new file mode 100644
index 0000000..cebf23b
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyThatTheItemCodeIsNotDuplicated.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Method VerifyThatTheItemCodeIsNotDuplicated
+{
+  TextBody:
+  [*
+    itemCodes := selectuniquevalues( this, 
+                                     MatAttrSettingAndPlanStrategyDataColumn.MatAttrSettingAndPlanStrategyDataCell, 
+                                     tempMASAPSDC,
+                                     tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜",
+                                     tempMASAPSDC.value() );
+    
+    traverse ( itemCodes, Elements, ic ) {
+      icTotal := selectset( this, 
+                            MatAttrSettingAndPlanStrategyDataColumn.MatAttrSettingAndPlanStrategyDataCell, 
+                            tempMASAPSDC,
+                            tempMASAPSDC.MatAttrSettingAndPlanStrategyDataColumn().name() = "鐗╂枡缂栫爜" and tempMASAPSDC.value() = ic );
+      if ( icTotal.Size() > 1 ) {
+        error( "瀛樺湪閲嶅鐗╂枡缂栫爜锛�", ic );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyTheTemplate.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyTheTemplate.qbl
new file mode 100644
index 0000000..c17b3d6
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_VerifyTheTemplate.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Method VerifyTheTemplate
+{
+  TextBody:
+  [*
+    if ( select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 0 ).name()  <> "涓氬姟绫诲瀷"             or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 1 ).name()  <> "鐗╂枡缂栫爜"             or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 2 ).name()  <> "鐗╂枡鍚嶇О"             or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 3 ).name()  <> "鐗╂枡鍒嗙被"             or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 4 ).name()  <> "LT鏃堕棿锛堝ぉ锛�"         or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 5 ).name()  <> "鎴愬搧SKU鏁伴噺"          or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 6 ).name()  <> "鎴愬搧浜や粯Min-LT锛堝ぉ锛�" or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 7 ).name()  <> "闀跨煭鍛ㄦ湡鏍囩"         or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 8 ).name()  <> "閫氱敤涓撶敤鏍囩"         or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 9 ).name()  <> "鑷姩鐗╂枡璁″垝绛栫暐"     or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 10 ).name() <> "鐢ㄦ埛鎵嬪姩璁″垝绛栫暐"     or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 11 ).name() <> "搴撳瓨鏈�灏忓ぉ鏁�"         or
+         select( this, MatAttrSettingAndPlanStrategyDataColumn, tempMASAPSDC, tempMASAPSDC.columnIndex() = 12 ).name() <> "搴撳瓨鏈�澶уぉ鏁�"
+        ) {
+      error( "妯℃澘瑙f瀽閿欒" );    
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_parseRows.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/Method_parseRows.qbl
new file mode 100644
index 0000000..c10da83
--- /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..3a85db8
--- /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..477f603
--- /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..126e66e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_export.qbl
@@ -0,0 +1,66 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  GlobalOTDTable parent
+) as String
+{
+  TextBody:
+  [*
+    // yypsybs Jul-1-2023 (created)
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
+    <table>
+      <name>MatAttrSettingAndPlanStrategy</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( "MatAttrSettingAndPlanStrategy", 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 MatAttrSettingAndPlanStrategy");
+        }
+      }
+      columnStr := columnStr + "</column>";
+      xmlTemplate := xmlTemplate + columnStr;
+    }
+    //---------------------------------------------------------------------------------------------
+    xmlTemplate := xmlTemplate + "</table>";
+    info( xmlTemplate );
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
+    XLS::SaveTable( tableHandle, OS::TempPath() + "MatAttrSettingAndPlanStrategy.xlsx" );
+    file := OSFile::Construct();
+    file.Open( OS::TempPath() + "MatAttrSettingAndPlanStrategy.xlsx", "Read", true );
+    data := file.ReadBinary()
+    return data.AsBase64EncodedString();
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_exportFields.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDataTable/StaticMethod_exportFields.qbl
new file mode 100644
index 0000000..d45757b
--- /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_MatAttrSettingAndPlanStrategyDetail/Attribute_Comment.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_Comment.qbl
new file mode 100644
index 0000000..29e121e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_Comment.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Comment
+{
+  #keys: '3[414384.0.766881447][414384.0.766881446][414384.0.766881448]'
+  Description: '澶囨敞'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_MatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_MatCode.qbl
new file mode 100644
index 0000000..7ee0a19
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_MatCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MatCode
+{
+  #keys: '3[414384.0.766881404][414384.0.766881403][414384.0.766881405]'
+  Description: '鐗╂枡缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductCode.qbl
new file mode 100644
index 0000000..d55171e
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductCode
+{
+  #keys: '3[414384.0.766881414][414384.0.766881413][414384.0.766881415]'
+  Description: '鎴愬搧缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductDesc.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductDesc.qbl
new file mode 100644
index 0000000..0993c0f
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_ProductDesc.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductDesc
+{
+  #keys: '3[414384.0.766881437][414384.0.766881436][414384.0.766881438]'
+  Description: '鎴愬搧鎻忚堪'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_StandardLT.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_StandardLT.qbl
new file mode 100644
index 0000000..5fce24d
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Attribute_StandardLT.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StandardLT
+{
+  #keys: '3[414384.0.766881424][414384.0.766881423][414384.0.766881425]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Function_CalcMatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Function_CalcMatCode.qbl
new file mode 100644
index 0000000..0b3b836
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/Function_CalcMatCode.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcMatCode
+{
+  TextBody:
+  [*
+    // yypsybs Sep-8-2023 (created)
+    
+    value := this.MatAttrSettingAndPlanStrategy().MatCode();
+    
+    this.MatCode( value );
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/StaticMethod_CreateIfNotExist.qbl
new file mode 100644
index 0000000..44625cb
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/StaticMethod_CreateIfNotExist.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateIfNotExist (
+  MatAttrSettingAndPlanStrategy parent,
+  String productCode,
+  Real standardLT,
+  String productDesc
+) as MatAttrSettingAndPlanStrategyDetail
+{
+  TextBody:
+  [*
+    // yypsybs Sep-8-2023 (created)
+    value := select( parent, MatAttrSettingAndPlanStrategyDetail, item, item.ProductCode() = productCode );
+    if( isnull( value ) ) {
+      value := parent.MatAttrSettingAndPlanStrategyDetail( relnew,
+                                                           ProductCode := productCode, 
+                                                           StandardLT := standardLT, 
+                                                           ProductDesc := productDesc );
+    }
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/_ROOT_Type_MatAttrSettingAndPlanStrategyDetail.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/_ROOT_Type_MatAttrSettingAndPlanStrategyDetail.qbl
new file mode 100644
index 0000000..ea00f4b
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyDetail/_ROOT_Type_MatAttrSettingAndPlanStrategyDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MatAttrSettingAndPlanStrategyDetail
+{
+  #keys: '5[414384.0.766881384][414384.0.766881382][0.0.0][414384.0.766881383][414384.0.766881385]'
+  BaseType: Object
+  Description: '鐗╂枡灞炴�ф爣绛捐瀹�&鐗╂枡璁″垝绛栫暐鏄庣粏'
+  StructuredName: 'MatAttrSettingAndPlanStrategyDetails'
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_base64Str.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_base64Str.qbl
new file mode 100644
index 0000000..c4af056
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_base64Str.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Base64Str
+{
+  #keys: '3[414384.0.763764696][414384.0.763764695][414384.0.763764697]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_fileName.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_fileName.qbl
new file mode 100644
index 0000000..f02d671
--- /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..e39af74
--- /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/Attribute_userName.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_userName.qbl
new file mode 100644
index 0000000..3ad1938
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Attribute_userName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UserName
+{
+  #keys: '3[414384.0.775080571][414384.0.775080570][414384.0.775080572]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl
new file mode 100644
index 0000000..1729ebf
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_createTable.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateTable (
+  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..20d7fd4
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_parseTable.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+Method ParseTable
+{
+  TextBody:
+  [*
+    tableGroupHandle := TableGroupHandle::Create( this.FileName() );
+    tableGroupHandle := XLS::LoadTableGroupFromBinaryData( BinaryData::FromBase64EncodedString( this.Base64Str() ), tableGroupHandle, true, this.IsXlsx() );
+    
+    sheets := tableGroupHandle.TableNames();
+    
+    traverse ( sheets, Elements, sheetName, sheetName = "鐗╂枡鏍囩" ) {
+      tableHandle := tableGroupHandle.Table( sheetName );
+      tableXML := TableHandle::ExportXML( tableHandle );
+      
+      MatAttrSettingAndPlanStrategyDataTable::XMLImportMatAttrSettingAndPlanStrategyDataTableXMLHeaders(  tableXML );
+      matAttrSettingAndPlanStrategyDataTable := MatAttrSettingAndPlanStrategyDataTable::XMLImportMatAttrSettingAndPlanStrategyDataTableXML( tableXML );
+      
+      matAttrSettingAndPlanStrategyDataTable.ParseRows();
+      
+      matAttrSettingAndPlanStrategyDataTable.name( sheetName );
+      this.MatAttrSettingAndPlanStrategyDataTable( relinsert, &matAttrSettingAndPlanStrategyDataTable ); 
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/Method_saveData.qbl
new file mode 100644
index 0000000..362f5dd
--- /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, this.UserName() );
+        }  
+      }  
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_VerifyTheFileName.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_VerifyTheFileName.qbl
new file mode 100644
index 0000000..e5127f4
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_VerifyTheFileName.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod VerifyTheFileName (
+  JSON uploadJson
+)
+{
+  TextBody:
+  [*
+    fileNames := uploadJson.Get( "name" ).GetString().Tokenize( "." );
+    fileNameSuffix := fileNames.Element( fileNames.Size() - 1 );
+    if ( fileNameSuffix <> "xlsx" and fileNameSuffix <> "xls" ) {
+      error( "璇蜂笂浼燛xcel鏂囦欢" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl
new file mode 100644
index 0000000..16be5bb
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanStrategyInputSource/StaticMethod_upload.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Upload (
+  GlobalOTDTable globalOTDTable,
+  String filePath,
+  String base64Str,
+  String userName
+) as MatAttrSettingAndPlanStrategyInputSource
+{
+  TextBody:
+  [*
+    globalOTDTable.MatAttrSettingAndPlanStrategyInputSource( relflush );
+    
+    fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
+    
+    inputSource := globalOTDTable.MatAttrSettingAndPlanStrategyInputSource( relnew,
+                                                                            FileName  := fileName,
+                                                                            Base64Str := base64Str, 
+                                                                            IsXlsx    := fileName.EndsWith( "xlsx" ), 
+                                                                            UserName  := userName );
+    
+    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_BusinessType.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..5d9d3ba
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414702.0.129575801][414702.0.129575800][414702.0.129575802]'
+  Description: '涓氬姟绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl
new file mode 100644
index 0000000..acdc390
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagGeneric.qbl
@@ -0,0 +1,12 @@
+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..bf68daa
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_FlagLongTerm.qbl
@@ -0,0 +1,12 @@
+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_MaximumNumberOfDaysInInventory.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MaximumNumberOfDaysInInventory.qbl
new file mode 100644
index 0000000..d15fda5
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MaximumNumberOfDaysInInventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaximumNumberOfDaysInInventory
+{
+  #keys: '3[414702.0.129559419][414702.0.129559418][414702.0.129559420]'
+  Description: '搴撳瓨鏈�澶уぉ鏁�'
+  ValueType: Number
+}
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_MinimumNumberOfDaysInStock.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinimumNumberOfDaysInStock.qbl
new file mode 100644
index 0000000..b1b5700
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_MinimumNumberOfDaysInStock.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MinimumNumberOfDaysInStock
+{
+  #keys: '3[414702.0.129559409][414702.0.129559408][414702.0.129559410]'
+  Description: '搴撳瓨鏈�灏忓ぉ鏁�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl
new file mode 100644
index 0000000..2c9ba97
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_PlanningStrategyAuto.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlanningStrategyAuto
+{
+  #keys: '3[414384.0.759444687][414384.0.759444686][414384.0.759444688]'
+  Description:
+  [*
+    鑷姩璁″垝绛栫暐
+    JIT & 瀹夊叏搴撳瓨 & VMI
+  *]
+  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_SerialNumber.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_SerialNumber.qbl
new file mode 100644
index 0000000..3efd0ad
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Attribute_SerialNumber.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SerialNumber
+{
+  #keys: '3[414702.0.129544801][414702.0.129544800][414702.0.129544802]'
+  Description: '搴忓彿'
+  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/Function_CalcMinProdDeliverLT.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcMinProdDeliverLT.qbl
new file mode 100644
index 0000000..c02ef61
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcMinProdDeliverLT.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcMinProdDeliverLT
+{
+  TextBody:
+  [*
+    // yypsybs Sep-8-2023 (created)
+    
+    value := 0.0;
+    
+    if( this.MatAttrSettingAndPlanStrategyDetail( relsize ) <> 0 ) {
+      value := guard( min( this, MatAttrSettingAndPlanStrategyDetail, detail, detail.StandardLT() ) , 0.0 );
+    }
+    
+    this.MinProdDeliverLT( value );
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcPlanningStrategyAuto.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcPlanningStrategyAuto.qbl
new file mode 100644
index 0000000..74fd0ee
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcPlanningStrategyAuto.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcPlanningStrategyAuto
+{
+  TextBody:
+  [*
+    // yypsybs Sep-8-2023 (created)
+    
+    value := "";
+    
+    if( this.FlagLongTerm() = "闀垮懆鏈�" and this.FlagGeneric() = "涓撶敤" ) {
+      value := "JIT";  
+    } else if ( this.FlagLongTerm() = "闀垮懆鏈�" and this.FlagGeneric() = "閫氱敤" ) {
+      value := "瀹夊叏搴撳瓨";  
+    } else if ( this.FlagLongTerm() = "鐭懆鏈�" and this.FlagGeneric() = "涓撶敤" ) {
+      value := "JIT";  
+    } else if ( this.FlagLongTerm() = "鐭懆鏈�" and this.FlagGeneric() = "閫氱敤" ) {
+      value := "VMI";  
+    }
+    
+    this.PlanningStrategyAuto( value );
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcProductCount.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcProductCount.qbl
new file mode 100644
index 0000000..e03f766
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/Function_CalcProductCount.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcProductCount
+{
+  TextBody:
+  [*
+    // yypsybs Sep-8-2023 (created)
+    
+    value := counter( this, MatAttrSettingAndPlanStrategyDetail, item, true );
+    
+    this.ProductCount( value );
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl
new file mode 100644
index 0000000..8e647b2
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_CreateIfNotExist.qbl
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateIfNotExist (
+  GlobalOTDTable parent,
+  Number serialNumber,
+  String businessType,
+  String matCode,
+  String matName,
+  String matType,
+  Real matArrivalLT,
+  String flagGeneric,
+  String flagLongTerm
+) as MatAttrSettingAndPlanStrategy
+{
+  TextBody:
+  [*
+    // yypsybs Sep-8-2023 (created)
+    value := MatAttrSettingAndPlanStrategy::GetExistByMatCode( parent, matCode );
+    if( isnull( value ) ) {
+      value := parent.MatAttrSettingAndPlanStrategy( relnew, 
+                                                     SerialNumber := serialNumber,
+                                                     BusinessType := businessType,
+                                                     MatCode := matCode, 
+                                                     MatName := matName,
+                                                     MatType := matType,
+                                                     MatArrivalLT := matArrivalLT, 
+                                                     FlagGeneric := flagGeneric, 
+                                                     FlagLongTerm := flagLongTerm,
+                                                     PlanningStrategyCustom := "",
+                                                     UpdateBy := "",
+                                                     UpdateTime := DateTime::MinDateTime() );
+    }
+    return value;
+  *]
+}
diff --git "a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode\043526.qbl" "b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode\043526.qbl"
new file mode 100644
index 0000000..7d84d24
--- /dev/null
+++ "b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_DeleteIfExistByMatCode\043526.qbl"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteIfExistByMatCode (
+  GlobalOTDTable parent,
+  Strings matCode
+)
+{
+  TextBody:
+  [*
+    // yypsybs Jul-2-2023 (created)
+    toDels := selectset( parent, MatAttrSettingAndPlanStrategy, item, true, matCode.Find( item.MatCode() ) >= 0 );
+    if( toDels.Size() > 0 ) {
+      traverse( toDels, Elements, toDel ) {
+        toDel.Delete();
+      }  
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl
new file mode 100644
index 0000000..4b41017
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ExportTheFileStream (
+  MatAttrSettingAndPlanStrategys masapss
+) as BinaryValue
+{
+  TextBody:
+  [*
+    text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>鐗╂枡鏍囩</name><column><name>涓氬姟绫诲瀷</name><type>String</type></column><column><name>鐗╂枡缂栫爜</name><type>String</type></column><column><name>鐗╂枡鍚嶇О</name><type>String</type></column><column><name>鐗╂枡鍒嗙被</name><type>String</type></column><column><name>LT鏃堕棿锛堝ぉ锛�</name><type>Number</type></column><column><name>鎴愬搧SKU鏁伴噺</name><type>Number</type></column><column><name>鎴愬搧浜や粯Min-LT锛堝ぉ锛�</name><type>Number</type></column><column><name>闀跨煭鍛ㄦ湡鏍囩</name><type>String</type></column><column><name>閫氱敤涓撶敤鏍囩</name><type>String</type></column><column><name>鑷姩鐗╂枡璁″垝绛栫暐</name><type>String</type></column><column><name>鐢ㄦ埛鎵嬪姩璁″垝绛栫暐</name><type>String</type></column><column><name>搴撳瓨鏈�灏忓ぉ鏁�</name><type>Number</type></column><column><name>搴撳瓨鏈�澶уぉ鏁�</name><type>Number</type></column></table>';
+    xmlDOMImplementation := XMLDOMImplementation::Create();
+    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
+    
+    masapss := selectsortedset( masapss, Elements, tempMASAPS, true, tempMASAPS.MatCode() );
+    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
+    
+    traverse ( masapss, Elements, masaps ) {
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.BusinessType(), "涓氬姟绫诲瀷" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.MatCode(), "鐗╂枡缂栫爜" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.MatName(), "鐗╂枡鍚嶇О" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.MatType(), "鐗╂枡鍒嗙被" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]masaps.MatArrivalLT(), "LT鏃堕棿锛堝ぉ锛�" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]masaps.ProductCount(), "鎴愬搧SKU鏁伴噺" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]masaps.MinProdDeliverLT(), "鎴愬搧浜や粯Min-LT锛堝ぉ锛�" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.FlagLongTerm(), "闀跨煭鍛ㄦ湡鏍囩" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.FlagGeneric(), "閫氱敤涓撶敤鏍囩" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.PlanningStrategyAuto(), "鑷姩鐗╂枡璁″垝绛栫暐" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, masaps.PlanningStrategyCustom(), "鐢ㄦ埛鎵嬪姩璁″垝绛栫暐" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]masaps.MinimumNumberOfDaysInStock(), "搴撳瓨鏈�灏忓ぉ鏁�" );
+      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]masaps.MaximumNumberOfDaysInInventory(), "搴撳瓨鏈�澶уぉ鏁�" );
+    }
+    
+    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
+    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
+    
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
+    tableGroupHandle := TableGroupHandle::Create( "鐗╂枡鏍囩" );
+    tableGroupHandle.Add( tableHandle );
+    tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return tableBinaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
new file mode 100644
index 0000000..f40c634
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GeneratesTheSpecifiedXMLColumn (
+  XMLDOMDocument xmlDOMDocument,
+  XMLDOMElement tableElement,
+  String value,
+  String columnName
+)
+{
+  TextBody:
+  [*
+    columnElements := tableElement.GetElementsByTagName( "column" );
+    
+    traverse ( columnElements, Elements, ce ) {
+      nameElement := ce.GetElementByTagName( "name", 0 );
+      if ( nameElement.TextContent() = columnName ) {
+        cell := xmlDOMDocument.CreateElement( "cell" );
+        cell.SetAttribute( "value", value );
+        ce.AppendChild( cell );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl
new file mode 100644
index 0000000..17e144a
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_SynchronizeInventoryTargets.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInventoryTargets (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    traverse ( globalOTDTable, MatAttrSettingAndPlanStrategy, masaps ) {
+      hasMaxLevel := masaps.MaximumNumberOfDaysInInventory() <> 0;
+      product_MP := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = masaps.MatCode() );
+      if ( not isnull( product_MP ) ) {
+        traverse ( product_MP, ProductInStockingPoint_MP, pispmp ) {
+          targetInventorySpecification := select( product_MP, InventorySpecification, tempIS, tempIS.ProductID() = product_MP.ID() and 
+                                                              tempIS.StockingPointID() = pispmp.StockingPointID() and
+                                                              tempIS.Start()           = macroPlan.StartOfPlanning().Date() );
+          if ( not isnull( targetInventorySpecification ) ) {
+            targetInventorySpecification.Delete();
+          }
+          InventorySpecification::Create( product_MP,
+                                          pispmp.StockingPoint_MP(),
+                                          macroPlan.StartOfPlanning().Date(),
+                                          false,
+                                          0.0,
+                                          0.0,
+                                          true,
+                                          [Real]masaps.MinimumNumberOfDaysInStock(),
+                                          0.0,
+                                          hasMaxLevel,
+                                          true,
+                                          [Real]masaps.MaximumNumberOfDaysInInventory(),
+                                          0.0,
+                                          false,
+                                          false
+                                         );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl
new file mode 100644
index 0000000..3c9e3f1
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_delete.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Delete (
+  MatAttrSettingAndPlanStrategys toDels
+)
+{
+  TextBody:
+  [*
+    // yypsybs Jun-30-2023 (created)
+    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..4cd01e5
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_deleteIfExistByMatCode.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteIfExistByMatCode (
+  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..c0e174e
--- /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..44ea303
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_update.qbl
@@ -0,0 +1,69 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Update (
+  GlobalOTDTable parent,
+  MatAttrSettingAndPlanStrategyDataRow excelRow,
+  String userName
+) as MatAttrSettingAndPlanStrategy
+{
+  TextBody:
+  [*
+    fields := MatAttrSettingAndPlanStrategyDataTable::ExportFields();
+    headers := MatAttrSettingAndPlanStrategyDataTable::ExpectedHeaders();
+    //info( "--------SaveData--------" );
+    // 鎵惧緟鏇存柊璁板綍
+    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 ) {
+        FeedbackObject::LocalFeedback().AddHard( "the column with index " + [String]i + " should be " + header + ", but found " + cell.MatAttrSettingAndPlanStrategyDataColumn().name() );
+        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( isnull( toUpdate ) ) {
+          FeedbackObject::LocalFeedback().AddHard( "get MatAttrSettingAndPlanStrategy by matCode [" + matCode + "] failed" );
+          error( "get MatAttrSettingAndPlanStrategy by matCode [" + matCode + "] failed" );
+        }
+      }
+    }
+    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( "MatAttrSettingAndPlanStrategy", fieldName);
+        if( isnull( field ) ) {
+          FeedbackObject::LocalFeedback().AddHard( "MatAttrSettingAndPlanStrategy does not have field " + fieldName );
+          error( "MatAttrSettingAndPlanStrategy does not have field " + fieldName );
+        }
+    //    info( "========header:" + header + "========" )
+    //    info( "========fieldName:" + fieldName + "========" )
+    //    info( "========cell:" + cell.value() + "========" )
+        if( fieldName = "MatName" or fieldName = "MatType" or fieldName = "FlagLongTerm" or fieldName = "FlagGeneric" or fieldName = "PlanningStrategyAuto" ) {
+          // do nothing
+        } else if( fieldName = "MatArrivalLT" or fieldName = "ProductCount" or fieldName = "MinProdDeliverLT" ) {
+          // do nothing
+        } else if( fieldName = "PlanningStrategyCustom" ) {
+          if( cell.value() <> "VMI" and cell.value() <> "瀹夊叏搴撳瓨" and cell.value() <> "VIT" ) {
+            FeedbackObject::LocalFeedback().AddHard( "unsupported PlanningStrategyCustom : " + cell.value() );
+            error( "unsupported PlanningStrategyCustom : " + cell.value() );
+          } else if( cell.value() <> toUpdate.PlanningStrategyCustom() ) {
+            toUpdate.PlanningStrategyCustom( cell.value() );
+            toUpdate.UpdateBy( userName );
+            toUpdate.UpdateTime( DateTime::Now() );
+          }
+        }
+      }
+    } else {
+      FeedbackObject::LocalFeedback().AddHard( "no record with matCode : " + matCode );
+      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'
+}
diff --git a/_Main/BL/Type_PanelMaterial/Attribute_DemandQuantity.qbl b/_Main/BL/Type_PanelMaterial/Attribute_DemandQuantity.qbl
new file mode 100644
index 0000000..50633e7
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterial/Attribute_DemandQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DemandQuantity
+{
+  #keys: '3[414702.0.155922013][414702.0.155922012][414702.0.155922014]'
+  Description: '闇�姹傛暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterial/Attribute_MaterialDescription.qbl b/_Main/BL/Type_PanelMaterial/Attribute_MaterialDescription.qbl
new file mode 100644
index 0000000..1acc53a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterial/Attribute_MaterialDescription.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaterialDescription
+{
+  #keys: '3[414702.0.155921990][414702.0.155921989][414702.0.155921991]'
+  Description: '鐗╂枡鎻忚堪'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterial/Attribute_PanelModel.qbl b/_Main/BL/Type_PanelMaterial/Attribute_PanelModel.qbl
new file mode 100644
index 0000000..68fdbb0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterial/Attribute_PanelModel.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PanelModel
+{
+  #keys: '3[414702.0.155921977][414702.0.155921976][414702.0.155921978]'
+  Description: '闈㈡澘鍨嬪彿'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterial/Attribute_StartDate.qbl b/_Main/BL/Type_PanelMaterial/Attribute_StartDate.qbl
new file mode 100644
index 0000000..faaa2a9
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterial/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414702.0.155922000][414702.0.155921999][414702.0.155922001]'
+  Description: '寮�濮嬫椂闂�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterial/StaticMethod_Send.qbl b/_Main/BL/Type_PanelMaterial/StaticMethod_Send.qbl
new file mode 100644
index 0000000..d1dcf3b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterial/StaticMethod_Send.qbl
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Send (
+  MacroPlan macroPlan,
+  Scenario scenario,
+  String businessType,
+  String address
+)
+{
+  TextBody:
+  [*
+    info( "鐗堟湰鍙凤細", scenario.Name(), "    浜嬩笟閮細", businessType );
+    
+    jsonBuilder := JSON::Object();
+    
+    jsonBuilder.Add( "releaseDate", Date::ActualDate().Format( "Y-M2-D2" ) );
+    jsonBuilder.Add( "businessType", businessType );
+    jsonBuilder.Add( "scenarioName", scenario.Name() );
+    
+    jsonBuilderPanelMaterials := JSON::Array();
+    traverse ( macroPlan, PanelMaterial, pm, true ) {
+      jsonBuilderPanelMaterial := JSON::Object();
+      
+      jsonBuilderPanelMaterial.Add( "productID", pm.PanelModel() );
+      jsonBuilderPanelMaterial.Add( "productDescription", pm.MaterialDescription() );
+      jsonBuilderPanelMaterial.Add( "startDate", pm.StartDate().Format( "Y-M2-D2" ) );
+      jsonBuilderPanelMaterial.Add( "quantity", pm.DemandQuantity() );
+      
+      jsonBuilderPanelMaterials.Add( jsonBuilderPanelMaterial );
+    }
+    jsonBuilder.Add( "panelMaterials", jsonBuilderPanelMaterials );
+    
+    json := jsonBuilder.Build();
+    
+    info( json.AsPrettyString() );
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterial/_ROOT_Type_PanelMaterial.qbl b/_Main/BL/Type_PanelMaterial/_ROOT_Type_PanelMaterial.qbl
new file mode 100644
index 0000000..8fdb774
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterial/_ROOT_Type_PanelMaterial.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterial
+{
+  #keys: '5[414702.0.155354979][414702.0.155354977][0.0.0][414702.0.155354978][414702.0.155354980]'
+  BaseType: Object
+  StructuredName: 'PanelMaterials'
+}
diff --git a/_Main/BL/Type_PanelMaterialAll/Attribute_BusinessType.qbl b/_Main/BL/Type_PanelMaterialAll/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..f22c4f3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAll/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414702.0.196801424][414702.0.196801423][414702.0.196801425]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAll/Attribute_ScenarioName.qbl b/_Main/BL/Type_PanelMaterialAll/Attribute_ScenarioName.qbl
new file mode 100644
index 0000000..e737a6c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAll/Attribute_ScenarioName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ScenarioName
+{
+  #keys: '3[414702.0.196801434][414702.0.196801433][414702.0.196801435]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAll/Attribute_releaseDate.qbl b/_Main/BL/Type_PanelMaterialAll/Attribute_releaseDate.qbl
new file mode 100644
index 0000000..2e6a274
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAll/Attribute_releaseDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReleaseDate
+{
+  #keys: '3[414702.0.196801411][414702.0.196801410][414702.0.196801412]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAll/_ROOT_Type_PanelMaterialAll.qbl b/_Main/BL/Type_PanelMaterialAll/_ROOT_Type_PanelMaterialAll.qbl
new file mode 100644
index 0000000..b1b5b06
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAll/_ROOT_Type_PanelMaterialAll.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialAll
+{
+  #keys: '5[414702.0.196801373][414702.0.196801371][0.0.0][414702.0.196801372][414702.0.196801374]'
+  BaseType: Object
+  StructuredName: 'PanelMaterialAlls'
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..fc74b78
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.203680160][414702.0.203680159][414702.0.203680161]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Customer.qbl
new file mode 100644
index 0000000..d9269fa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.203680121][414702.0.203680120][414702.0.203680122]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..13c1686
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.203680130][414702.0.203680129][414702.0.203680131]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ID.qbl
new file mode 100644
index 0000000..58841e2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.203680118][414702.0.203680117][414702.0.203680119]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..5f38c00
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.203680148][414702.0.203680147][414702.0.203680149]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..a2238f1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.203680157][414702.0.203680156][414702.0.203680158]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..26ca570
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.203680127][414702.0.203680126][414702.0.203680128]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..85de69d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.203680136][414702.0.203680135][414702.0.203680137]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderID.qbl
new file mode 100644
index 0000000..a0e0c47
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.203680142][414702.0.203680141][414702.0.203680143]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..8d3d87b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.203680151][414702.0.203680150][414702.0.203680152]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Price.qbl
new file mode 100644
index 0000000..7bf7192
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.203680133][414702.0.203680132][414702.0.203680134]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..daed52a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.203680154][414702.0.203680153][414702.0.203680155]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ProductID.qbl
new file mode 100644
index 0000000..ce2771f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.203680112][414702.0.203680111][414702.0.203680113]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Quantity.qbl
new file mode 100644
index 0000000..6496814
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.203680115][414702.0.203680114][414702.0.203680116]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..561bb1c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.203680145][414702.0.203680144][414702.0.203680146]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..e980d9b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.203680139][414702.0.203680138][414702.0.203680140]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..313af13
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.203680124][414702.0.203680123][414702.0.203680125]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Customer.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderID.qbl
new file mode 100644
index 0000000..05c5cf1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderID
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderLineID.qbl
new file mode 100644
index 0000000..01ff2bf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_OrderLineID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderLineID
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ProductID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Quantity.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Quantity.qbl
new file mode 100644
index 0000000..9e759b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_Quantity.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Quantity
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..2d21864
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialAutomotiveElectronics( relnew,
+                                                           Customer         := businessTypeNameValue.GetValueAsString(),
+                                                           ID               := OS::GenerateGUIDAsString(),
+                                                           OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                                           ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                                           Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                                           SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                                          );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialAutomotiveElectronics/_ROOT_Type_PanelMaterialAutomotiveElectronics.qbl b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/_ROOT_Type_PanelMaterialAutomotiveElectronics.qbl
new file mode 100644
index 0000000..c63be50
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialAutomotiveElectronics/_ROOT_Type_PanelMaterialAutomotiveElectronics.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialAutomotiveElectronics
+{
+  #keys: '5[414702.0.203680106][414702.0.203680104][0.0.0][414702.0.203680105][414702.0.203680107]'
+  BaseType: Object
+  Description: '姹借溅鐢靛瓙'
+  StructuredName: 'PanelMaterialAutomotiveElectronicss'
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..e3c8994
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.203680339][414702.0.203680338][414702.0.203680340]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_Customer.qbl
new file mode 100644
index 0000000..555bae6
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.203680306][414702.0.203680305][414702.0.203680307]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..3ba73d5
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.203680330][414702.0.203680329][414702.0.203680331]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_ID.qbl
new file mode 100644
index 0000000..5653f06
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.203680318][414702.0.203680317][414702.0.203680319]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..816b1ac
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.203680309][414702.0.203680308][414702.0.203680310]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..149a11e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.203680342][414702.0.203680341][414702.0.203680343]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..03c684f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.203680333][414702.0.203680332][414702.0.203680334]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..4ffafb0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.203680297][414702.0.203680296][414702.0.203680298]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_OrderID.qbl
new file mode 100644
index 0000000..2bf9636
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.203680303][414702.0.203680302][414702.0.203680304]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..138cf52
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.203680327][414702.0.203680326][414702.0.203680328]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_Price.qbl
new file mode 100644
index 0000000..3a5f704
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.203680300][414702.0.203680299][414702.0.203680301]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..4779ec2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.203680345][414702.0.203680344][414702.0.203680346]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_ProductID.qbl
new file mode 100644
index 0000000..2699c22
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.203680312][414702.0.203680311][414702.0.203680313]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_Quantity.qbl
new file mode 100644
index 0000000..497c494
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.203680321][414702.0.203680320][414702.0.203680322]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..5fce212
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.203680324][414702.0.203680323][414702.0.203680325]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..dacd3b8
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.203680336][414702.0.203680335][414702.0.203680337]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialIT/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..036c2b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.203680315][414702.0.203680314][414702.0.203680316]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_Customer.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_ID.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_OrderID.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_OrderID.qbl
new file mode 100644
index 0000000..05c5cf1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_OrderID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderID
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_OrderLineID.qbl
new file mode 100644
index 0000000..01ff2bf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_OrderLineID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderLineID
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_ProductID.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_Quantity.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_Quantity.qbl
new file mode 100644
index 0000000..9e759b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_Quantity.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Quantity
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialIT/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..195adab
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialIT( relnew,
+                                        Customer         := businessTypeNameValue.GetValueAsString(),
+                                        ID               := OS::GenerateGUIDAsString(),
+                                        OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                        ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                        Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                        SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                       );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialIT/_ROOT_Type_PanelMaterialIT.qbl b/_Main/BL/Type_PanelMaterialIT/_ROOT_Type_PanelMaterialIT.qbl
new file mode 100644
index 0000000..9e43a52
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialIT/_ROOT_Type_PanelMaterialIT.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialIT
+{
+  #keys: '5[414702.0.203680278][414702.0.203680276][0.0.0][414702.0.203680277][414702.0.203680279]'
+  BaseType: Object
+  Description: 'IT'
+  StructuredName: 'PanelMaterialITs'
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..8dd0c12
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.203671554][414702.0.203671553][414702.0.203671555]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Customer.qbl
new file mode 100644
index 0000000..4feca35
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.203671521][414702.0.203671520][414702.0.203671522]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..f3ff58f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.203671545][414702.0.203671544][414702.0.203671546]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ID.qbl
new file mode 100644
index 0000000..243d94b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.203671533][414702.0.203671532][414702.0.203671534]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..192c647
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.203671524][414702.0.203671523][414702.0.203671525]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..0ec007c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.203671557][414702.0.203671556][414702.0.203671558]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..a7b488f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.203671548][414702.0.203671547][414702.0.203671549]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..385b4cd
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.203671512][414702.0.203671511][414702.0.203671513]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderID.qbl
new file mode 100644
index 0000000..70937cf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.203671518][414702.0.203671517][414702.0.203671519]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..6d6f80a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.203671542][414702.0.203671541][414702.0.203671543]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Price.qbl
new file mode 100644
index 0000000..06ea926
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.203671515][414702.0.203671514][414702.0.203671516]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..65441bd
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.203671560][414702.0.203671559][414702.0.203671561]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ProductID.qbl
new file mode 100644
index 0000000..a0b2ab2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.203671527][414702.0.203671526][414702.0.203671528]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Quantity.qbl
new file mode 100644
index 0000000..65e10f2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.203671536][414702.0.203671535][414702.0.203671537]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..fba40f3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.203671539][414702.0.203671538][414702.0.203671540]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..f2917a8
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.203671551][414702.0.203671550][414702.0.203671552]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..9b9e6ed
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.203671530][414702.0.203671529][414702.0.203671531]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Customer.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderID.qbl
new file mode 100644
index 0000000..05c5cf1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderID
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderLineID.qbl
new file mode 100644
index 0000000..01ff2bf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_OrderLineID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderLineID
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ProductID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Quantity.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Quantity.qbl
new file mode 100644
index 0000000..9e759b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_Quantity.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Quantity
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..ddb0119
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialSpecializedDisplay( relnew,
+                                                        Customer         := businessTypeNameValue.GetValueAsString(),
+                                                        ID               := OS::GenerateGUIDAsString(),
+                                                        OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                                        ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                                        Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                                        SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                                       );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialSpecializedDisplay/_ROOT_Type_PanelMaterialSpecializedDisplay.qbl b/_Main/BL/Type_PanelMaterialSpecializedDisplay/_ROOT_Type_PanelMaterialSpecializedDisplay.qbl
new file mode 100644
index 0000000..483a567
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSpecializedDisplay/_ROOT_Type_PanelMaterialSpecializedDisplay.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialSpecializedDisplay
+{
+  #keys: '5[414702.0.203671493][414702.0.203671491][0.0.0][414702.0.203671492][414702.0.203671494]'
+  BaseType: Object
+  Description: '涓撴樉'
+  StructuredName: 'PanelMaterialSpecializedDisplays'
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..c6ac9c1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.203680261][414702.0.203680260][414702.0.203680262]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Customer.qbl
new file mode 100644
index 0000000..16ba69e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.203680228][414702.0.203680227][414702.0.203680229]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..b8c149a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.203680252][414702.0.203680251][414702.0.203680253]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_ID.qbl
new file mode 100644
index 0000000..3ad1519
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.203680240][414702.0.203680239][414702.0.203680241]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..c1f2e29
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.203680231][414702.0.203680230][414702.0.203680232]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..eae8b92
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.203680264][414702.0.203680263][414702.0.203680265]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..d9180af
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.203680255][414702.0.203680254][414702.0.203680256]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..b67fd64
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.203680219][414702.0.203680218][414702.0.203680220]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderID.qbl
new file mode 100644
index 0000000..917dbd5
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.203680225][414702.0.203680224][414702.0.203680226]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..ba6e8fa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.203680249][414702.0.203680248][414702.0.203680250]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Price.qbl
new file mode 100644
index 0000000..8952ea0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.203680222][414702.0.203680221][414702.0.203680223]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..6142149
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.203680267][414702.0.203680266][414702.0.203680268]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_ProductID.qbl
new file mode 100644
index 0000000..ef4fa53
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.203680234][414702.0.203680233][414702.0.203680235]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Quantity.qbl
new file mode 100644
index 0000000..b5c0fe2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.203680243][414702.0.203680242][414702.0.203680244]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..a2b09be
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.203680246][414702.0.203680245][414702.0.203680247]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..423aada
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.203680258][414702.0.203680257][414702.0.203680259]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..b2fd490
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.203680237][414702.0.203680236][414702.0.203680238]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Customer.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderID.qbl
new file mode 100644
index 0000000..05c5cf1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderID
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderLineID.qbl
new file mode 100644
index 0000000..01ff2bf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_OrderLineID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderLineID
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ProductID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Quantity.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Quantity.qbl
new file mode 100644
index 0000000..9e759b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_Quantity.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Quantity
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..4ccf91b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialSportsHealth( relnew,
+                                                  Customer         := businessTypeNameValue.GetValueAsString(),
+                                                  ID               := OS::GenerateGUIDAsString(),
+                                                  OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                                  ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                                  Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                                  SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                                 );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialSportsHealth/_ROOT_Type_PanelMaterialSportsHealth.qbl b/_Main/BL/Type_PanelMaterialSportsHealth/_ROOT_Type_PanelMaterialSportsHealth.qbl
new file mode 100644
index 0000000..1ac291b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialSportsHealth/_ROOT_Type_PanelMaterialSportsHealth.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialSportsHealth
+{
+  #keys: '5[414702.0.203680200][414702.0.203680198][0.0.0][414702.0.203680199][414702.0.203680201]'
+  BaseType: Object
+  Description: '杩愬姩鍋ュ悍'
+  StructuredName: 'PanelMaterialSportsHealths'
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..20cd108
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.203671609][414702.0.203671608][414702.0.203671610]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_Customer.qbl
new file mode 100644
index 0000000..bee172b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.203671594][414702.0.203671593][414702.0.203671595]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..e689c52
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.203671621][414702.0.203671620][414702.0.203671622]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_ID.qbl
new file mode 100644
index 0000000..63b5c99
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.203671615][414702.0.203671614][414702.0.203671616]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..5b15de6
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.203671612][414702.0.203671611][414702.0.203671613]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..63575af
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.203671603][414702.0.203671602][414702.0.203671604]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..f311335
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.203671591][414702.0.203671590][414702.0.203671592]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..f83a64f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.203671630][414702.0.203671629][414702.0.203671631]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderID.qbl
new file mode 100644
index 0000000..3fe99f4
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.203671606][414702.0.203671605][414702.0.203671607]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..f20d582
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.203671636][414702.0.203671635][414702.0.203671637]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_Price.qbl
new file mode 100644
index 0000000..3234d7d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.203671588][414702.0.203671587][414702.0.203671589]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..3ecd304
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.203671627][414702.0.203671626][414702.0.203671628]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_ProductID.qbl
new file mode 100644
index 0000000..a2edc37
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.203671600][414702.0.203671599][414702.0.203671601]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_Quantity.qbl
new file mode 100644
index 0000000..3f43e48
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.203671624][414702.0.203671623][414702.0.203671625]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..e4979c4
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.203671633][414702.0.203671632][414702.0.203671634]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..0c70a04
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.203671618][414702.0.203671617][414702.0.203671619]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialTM17/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..f2df14f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.203671597][414702.0.203671596][414702.0.203671598]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Customer.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_ID.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderID.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderID.qbl
new file mode 100644
index 0000000..05c5cf1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderLineID.qbl
new file mode 100644
index 0000000..01ff2bf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_OrderLineID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderLineID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_ProductID.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Quantity.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Quantity.qbl
new file mode 100644
index 0000000..9e759b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_Quantity.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Quantity
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..9f7f71a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialTM17( relnew,
+                                          Customer         := businessTypeNameValue.GetValueAsString(),
+                                          ID               := OS::GenerateGUIDAsString(),
+                                          OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                          ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                          Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                          SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                         );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialTM17/_ROOT_Type_PanelMaterialTM17.qbl b/_Main/BL/Type_PanelMaterialTM17/_ROOT_Type_PanelMaterialTM17.qbl
new file mode 100644
index 0000000..54c85a7
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM17/_ROOT_Type_PanelMaterialTM17.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialTM17
+{
+  #keys: '5[414702.0.203671569][414702.0.203671567][0.0.0][414702.0.203671568][414702.0.203671570]'
+  BaseType: Object
+  Description: 'TM17'
+  StructuredName: 'PanelMaterialTM17s'
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..9fa6c69
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.203680386][414702.0.203680385][414702.0.203680387]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_Customer.qbl
new file mode 100644
index 0000000..afffc3c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.203680395][414702.0.203680394][414702.0.203680396]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..05564f1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.203680413][414702.0.203680412][414702.0.203680414]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_ID.qbl
new file mode 100644
index 0000000..37d4aed
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.203680401][414702.0.203680400][414702.0.203680402]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..d994032
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.203680416][414702.0.203680415][414702.0.203680417]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..0868269
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.203680419][414702.0.203680418][414702.0.203680420]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..157903f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.203680380][414702.0.203680379][414702.0.203680381]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..fcd19b6
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.203680407][414702.0.203680406][414702.0.203680408]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderID.qbl
new file mode 100644
index 0000000..867df94
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.203680392][414702.0.203680391][414702.0.203680393]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..61afc1f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.203680398][414702.0.203680397][414702.0.203680399]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_Price.qbl
new file mode 100644
index 0000000..2446765
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.203680389][414702.0.203680388][414702.0.203680390]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..57ab630
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.203680422][414702.0.203680421][414702.0.203680423]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_ProductID.qbl
new file mode 100644
index 0000000..976c946
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.203680377][414702.0.203680376][414702.0.203680378]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_Quantity.qbl
new file mode 100644
index 0000000..f7d8717
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.203680425][414702.0.203680424][414702.0.203680426]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..deeb9c2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.203680404][414702.0.203680403][414702.0.203680405]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..b98b82a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.203680383][414702.0.203680382][414702.0.203680384]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialTM18/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..4c162ed
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.203680410][414702.0.203680409][414702.0.203680411]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Customer.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_ID.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderID.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderID.qbl
new file mode 100644
index 0000000..05c5cf1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderLineID.qbl
new file mode 100644
index 0000000..01ff2bf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_OrderLineID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderLineID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_ProductID.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Quantity.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Quantity.qbl
new file mode 100644
index 0000000..9e759b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_Quantity.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Quantity
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..9145c77
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialTM18( relnew,
+                                          Customer         := businessTypeNameValue.GetValueAsString(),
+                                          ID               := OS::GenerateGUIDAsString(),
+                                          OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                          ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                          Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                          SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                         );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialTM18/_ROOT_Type_PanelMaterialTM18.qbl b/_Main/BL/Type_PanelMaterialTM18/_ROOT_Type_PanelMaterialTM18.qbl
new file mode 100644
index 0000000..75ea3ae
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTM18/_ROOT_Type_PanelMaterialTM18.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialTM18
+{
+  #keys: '5[414702.0.203680356][414702.0.203680354][0.0.0][414702.0.203680355][414702.0.203680357]'
+  BaseType: Object
+  Description: 'TM18'
+  StructuredName: 'PanelMaterialTM18s'
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..3733f5b
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.203671460][414702.0.203671459][414702.0.203671461]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_Customer.qbl
new file mode 100644
index 0000000..9f58ae5
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.203671427][414702.0.203671426][414702.0.203671428]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..c563be0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.203671451][414702.0.203671450][414702.0.203671452]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_ID.qbl
new file mode 100644
index 0000000..1cebdcf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.203671439][414702.0.203671438][414702.0.203671440]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..99eb60c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.203671430][414702.0.203671429][414702.0.203671431]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..4efa43a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.203671463][414702.0.203671462][414702.0.203671464]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..0603138
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.203671454][414702.0.203671453][414702.0.203671455]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..87acd44
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.203671418][414702.0.203671417][414702.0.203671419]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderID.qbl
new file mode 100644
index 0000000..ecf37e0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.203671424][414702.0.203671423][414702.0.203671425]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..c0a4a24
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.203671448][414702.0.203671447][414702.0.203671449]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_Price.qbl
new file mode 100644
index 0000000..05e48bd
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.203671421][414702.0.203671420][414702.0.203671422]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..a11a6ca
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.203671466][414702.0.203671465][414702.0.203671467]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_ProductID.qbl
new file mode 100644
index 0000000..1148598
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.203671433][414702.0.203671432][414702.0.203671434]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_Quantity.qbl
new file mode 100644
index 0000000..458dd84
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.203671442][414702.0.203671441][414702.0.203671443]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..748894c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.203671445][414702.0.203671444][414702.0.203671446]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..8c31b00
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.203671457][414702.0.203671456][414702.0.203671458]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialTianHua/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..f3ecefc
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.203671436][414702.0.203671435][414702.0.203671437]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Customer.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_ID.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderID.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderID.qbl
new file mode 100644
index 0000000..05c5cf1
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderID
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderLineID.qbl
new file mode 100644
index 0000000..01ff2bf
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_OrderLineID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: OrderLineID
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_ProductID.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Quantity.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Quantity.qbl
new file mode 100644
index 0000000..9e759b3
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_Quantity.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Quantity
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..042dc4a
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialTianHua( relnew,
+                                             Customer         := businessTypeNameValue.GetValueAsString(),
+                                             ID               := OS::GenerateGUIDAsString(),
+                                             OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                             ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                             Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                             SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                            );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialTianHua/_ROOT_Type_PanelMaterialTianHua.qbl b/_Main/BL/Type_PanelMaterialTianHua/_ROOT_Type_PanelMaterialTianHua.qbl
new file mode 100644
index 0000000..d2d2fa2
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialTianHua/_ROOT_Type_PanelMaterialTianHua.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialTianHua
+{
+  #keys: '5[414702.0.203671414][414702.0.203671412][0.0.0][414702.0.203671413][414702.0.203671415]'
+  BaseType: Object
+  Description: '澶╄姳'
+  StructuredName: 'PanelMaterialTianHuas'
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..8f3b50c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.185221293][414702.0.185221292][414702.0.185221294]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_Customer.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_Customer.qbl
new file mode 100644
index 0000000..e6bc6a9
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414702.0.185221308][414702.0.185221307][414702.0.185221309]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_CustomerID.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..6395618
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414702.0.185221318][414702.0.185221317][414702.0.185221319]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_ID.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_ID.qbl
new file mode 100644
index 0000000..6156649
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.185221328][414702.0.185221327][414702.0.185221329]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..5641056
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEligibleForNetting
+{
+  #keys: '3[414702.0.185221338][414702.0.185221337][414702.0.185221339]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..146d5c0
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsExcludedFromFulfillmentKPIUser
+{
+  #keys: '3[414702.0.185221353][414702.0.185221352][414702.0.185221354]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsFirmed.qbl
new file mode 100644
index 0000000..9c8c56e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsFirmed
+{
+  #keys: '3[414702.0.185221448][414702.0.185221447][414702.0.185221449]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderDate.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderDate.qbl
new file mode 100644
index 0000000..e903396
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderDate
+{
+  #keys: '3[414702.0.185221371][414702.0.185221370][414702.0.185221372]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderID.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderID.qbl
new file mode 100644
index 0000000..c204400
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderID
+{
+  #keys: '3[414702.0.185221381][414702.0.185221380][414702.0.185221382]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderLineID.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderLineID.qbl
new file mode 100644
index 0000000..3821ce7
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_OrderLineID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderLineID
+{
+  #keys: '3[414702.0.185221391][414702.0.185221390][414702.0.185221392]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_Price.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_Price.qbl
new file mode 100644
index 0000000..463684f
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Price
+{
+  #keys: '3[414702.0.185221401][414702.0.185221400][414702.0.185221402]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_PriorityName.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_PriorityName.qbl
new file mode 100644
index 0000000..7d354ca
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityName
+{
+  #keys: '3[414702.0.185221422][414702.0.185221421][414702.0.185221423]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_ProductID.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_ProductID.qbl
new file mode 100644
index 0000000..647a657
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.196801332][414702.0.196801331][414702.0.196801333]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_Quantity.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_Quantity.qbl
new file mode 100644
index 0000000..1a67884
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.0.196801342][414702.0.196801341][414702.0.196801343]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..d10a137
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414702.0.185221438][414702.0.185221437][414702.0.185221439]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..cb09362
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.0.185221463][414702.0.185221462][414702.0.185221464]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialVehicle/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..e8dbcc8
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.185221478][414702.0.185221477][414702.0.185221479]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_CurrencyID.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_CurrencyID.qbl
new file mode 100644
index 0000000..9a0e812
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'CNY'
+  TargetAttribute: CurrencyID
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsEligibleForNetting.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsEligibleForNetting.qbl
new file mode 100644
index 0000000..8b36496
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsEligibleForNetting.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsEligibleForNetting
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
new file mode 100644
index 0000000..d0e348d
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsExcludedFromFulfillmentKPIUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'false'
+  TargetAttribute: IsExcludedFromFulfillmentKPIUser
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsFirmed.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsFirmed.qbl
new file mode 100644
index 0000000..0f7ae4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_IsFirmed.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsFirmed
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_Price.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_Price.qbl
new file mode 100644
index 0000000..577db4c
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_Price.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '0'
+  TargetAttribute: Price
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_PriorityName.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_PriorityName.qbl
new file mode 100644
index 0000000..7c6efaa
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_PriorityName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'Normal'
+  TargetAttribute: PriorityName
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..6110bce
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鎴愬搧浠�'
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7f9ab5e
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'SHT'
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl b/_Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl
new file mode 100644
index 0000000..3174738
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/StaticMethod_ReceiveDataGeneration.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReceiveDataGeneration (
+  GlobalOTDTable globalOTDTable,
+  NamedValueTree requestnvt
+)
+{
+  TextBody:
+  [*
+    nameValue := requestnvt.Root();
+    
+    bodyHandle := requestnvt.GetHandle( "Body" );
+    restHandle := requestnvt.GetHandle( "Rest" );
+    restPayloadHandle := requestnvt.GetHandle( "RestPayload" );
+    
+    bodyNameValue := nameValue.Child( bodyHandle );
+    restNameValue := bodyNameValue.Child( restHandle );
+    restPayloadNameValue := restNameValue.Child( restPayloadHandle );
+    
+    releaseDateHandle := requestnvt.GetHandle( "releaseDate" );
+    businessTypeHandle := requestnvt.GetHandle( "businessType" );
+    scenarioNameHandle := requestnvt.GetHandle( "scenarioName" );
+    
+    releaseDateNameValue := restPayloadNameValue.Child( releaseDateHandle );
+    businessTypeNameValue := restPayloadNameValue.Child( businessTypeHandle );
+    scenarioNameNameValue := restPayloadNameValue.Child( scenarioNameHandle );
+    
+    panelMaterialAll := select( globalOTDTable, PanelMaterialAll, tempPMA, tempPMA.ScenarioName() = scenarioNameNameValue.GetValueAsString() );
+    if ( not isnull( panelMaterialAll ) ) {
+      panelMaterialAll.Delete();
+    }
+    panelMaterialAll := globalOTDTable.PanelMaterialAll( relnew, 
+                                                         ReleaseDate  := releaseDateNameValue.GetValueAsString(),
+                                                         BusinessType := businessTypeNameValue.GetValueAsString(),
+                                                         ScenarioName := scenarioNameNameValue.GetValueAsString()
+                                                        );
+    
+    panelMaterialsHandle := requestnvt.GetHandle( "panelMaterials" );
+    panelMaterialsNameValue := restPayloadNameValue.Child( panelMaterialsHandle );
+    childPanelMaterialsNameValue := panelMaterialsNameValue.Children();
+    productIDHandle := requestnvt.GetHandle( "productID" );
+    productDescriptionHandle := requestnvt.GetHandle( "productDescription" );
+    startDateHandle := requestnvt.GetHandle( "startDate" );
+    quantityHandle := requestnvt.GetHandle( "quantity" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    
+    traverse ( childPanelMaterialsNameValue, Elements, cpmnv ) {
+      info( "浜у搧锛�", cpmnv.Child( productIDHandle ).GetValueAsString() );
+      info( "浜у搧鎻忚堪锛�", cpmnv.Child( productDescriptionHandle ).GetValueAsString() );
+      info( "寮�濮嬫椂闂达細", cpmnv.Child( startDateHandle ).GetValueAsString() );
+      info( "鏁伴噺锛�", cpmnv.Child( quantityHandle ).GetValueAsString() );
+      panelMaterialAll.PanelMaterialVehicle( relnew,
+                                             Customer         := businessTypeNameValue.GetValueAsString(),
+                                             ID               := OS::GenerateGUIDAsString(),
+                                             OrderDate        := cnv2.Convert( cpmnv.Child( startDateHandle ).GetValueAsString() ),
+                                             ProductID        := cpmnv.Child( productIDHandle ).GetValueAsString(),
+                                             Quantity         := cpmnv.Child( quantityHandle ).GetValueAsString(),
+                                             SalesSegmentName := businessTypeNameValue.GetValueAsString()
+                                            );                                   
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PanelMaterialVehicle/_ROOT_Type_PanelMaterialVehicle.qbl b/_Main/BL/Type_PanelMaterialVehicle/_ROOT_Type_PanelMaterialVehicle.qbl
new file mode 100644
index 0000000..345f7a9
--- /dev/null
+++ b/_Main/BL/Type_PanelMaterialVehicle/_ROOT_Type_PanelMaterialVehicle.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PanelMaterialVehicle
+{
+  #keys: '5[414702.0.185221272][414702.0.185221270][0.0.0][414702.0.185221271][414702.0.185221273]'
+  BaseType: Object
+  Description: '杞﹁浇'
+  StructuredName: 'PanelMaterialVehicles'
+}
diff --git a/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
index 0db749e..0359b3f 100644
--- a/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
@@ -17,12 +17,14 @@
     product :=  Product_MP::FindById( owner, productid );
     line :=  Lane::FindLaneTypeIndex( lineid );
     
-    productinline := ProductInLane::FindProductInLaneTypeIndex( lineid, productid );
+    if( not isnull( product) and not isnull( line)){
+      productinline := ProductInLane::FindProductInLaneTypeIndex( lineid, productid );
     
-    if( isnull( productinline ) ){
+      if( isnull( productinline ) ){
       ProductInLane::Create( product, line, isexcluded, isfromdb );
       }else{
-        productinline.Update( productid, lineid, isexcluded, isfromdb );
+       productinline.Update( productid, lineid, isexcluded, isfromdb );
         }
+    }
   *]
 }
diff --git a/_Main/BL/Type_Product_MP/Attribute_IsPanelMaterial.qbl b/_Main/BL/Type_Product_MP/Attribute_IsPanelMaterial.qbl
new file mode 100644
index 0000000..461f519
--- /dev/null
+++ b/_Main/BL/Type_Product_MP/Attribute_IsPanelMaterial.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsPanelMaterial
+{
+  #keys: '3[414702.0.155922090][414702.0.155922089][414702.0.155922091]'
+  Description: '鏄惁涓洪潰鏉跨墿鏂�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpointFromJson.qbl b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpointFromJson.qbl
index 1859d28..e4dae0e 100644
--- a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpointFromJson.qbl
+++ b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpointFromJson.qbl
@@ -9,7 +9,7 @@
   TextBody:
   [*
     // Administrator Jul-7-2023 (created)
-    id := datarow.Get( "id" ).GetString()+"_STOCK";
+    id := datarow.Get( "id" ).GetString();
     unitid := datarow.Get( "unitid" ).GetString();
     name := datarow.Get( "name" ).GetString();
     
diff --git a/_Main/BL/Type_WorkOrderType/Attribute_ID.qbl b/_Main/BL/Type_WorkOrderType/Attribute_ID.qbl
new file mode 100644
index 0000000..9a6c41f
--- /dev/null
+++ b/_Main/BL/Type_WorkOrderType/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.144781493][414702.0.144781492][414702.0.144781494]'
+  Description: '宸ュ崟ID'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_WorkOrderType/Attribute_TypeName.qbl b/_Main/BL/Type_WorkOrderType/Attribute_TypeName.qbl
new file mode 100644
index 0000000..36bf622
--- /dev/null
+++ b/_Main/BL/Type_WorkOrderType/Attribute_TypeName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TypeName
+{
+  #keys: '3[414702.0.144781503][414702.0.144781502][414702.0.144781504]'
+  Description: '宸ュ崟绫诲瀷鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_WorkOrderType/_ROOT_Type_WorkOrderType.qbl b/_Main/BL/Type_WorkOrderType/_ROOT_Type_WorkOrderType.qbl
new file mode 100644
index 0000000..866ac32
--- /dev/null
+++ b/_Main/BL/Type_WorkOrderType/_ROOT_Type_WorkOrderType.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type WorkOrderType
+{
+  #keys: '5[414702.0.144781471][414702.0.144781469][0.0.0][414702.0.144781470][414702.0.144781472]'
+  BaseType: Object
+  StructuredName: 'WorkOrderTypes'
+}
diff --git a/_Main/Sys/Integration/Brokers/PanelMaterialResponseResult.xml b/_Main/Sys/Integration/Brokers/PanelMaterialResponseResult.xml
new file mode 100644
index 0000000..78d17af
--- /dev/null
+++ b/_Main/Sys/Integration/Brokers/PanelMaterialResponseResult.xml
Binary files differ
diff --git a/_Main/Sys/Integration/Mapping/PanelMaterialResponseResult.xml b/_Main/Sys/Integration/Mapping/PanelMaterialResponseResult.xml
new file mode 100644
index 0000000..a2b6fc7
--- /dev/null
+++ b/_Main/Sys/Integration/Mapping/PanelMaterialResponseResult.xml
Binary files differ
diff --git a/_Main/Sys/Integration/Structure/PanelMaterialResponseResult_from.xml b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult_from.xml
new file mode 100644
index 0000000..54bd566
--- /dev/null
+++ b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult_from.xml
Binary files differ
diff --git a/_Main/Sys/Integration/Structure/PanelMaterialResponseResult_to.xml b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult_to.xml
new file mode 100644
index 0000000..b381552
--- /dev/null
+++ b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult_to.xml
Binary files differ
diff --git a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
index 6055329..51fa4f0 100644
--- a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -78,6 +78,8 @@
           ]
         }
         Component MenuDoSync { #keys: '[414384.0.605664172]' BaseType: 'Menu' Properties: [ Image: 'CLOUD_DOWNLOAD' Text: 'DoSync' ] }
+        Component menuSeparator506 { #keys: '[414702.0.137524309]' BaseType: 'Menu' Properties: [ Separator: true ] }
+        Component ComponentMenuAnalysisGlobalOTDTable { #keys: '[414702.0.137524953]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysisGlobalOTDTable' Text: '' ] }
       ]
       Properties:
       [
@@ -94,6 +96,8 @@
           c: Menu8
           c: MenuSelectDemoDataset
           c: MenuDoSync
+          c: menuSeparator506
+          c: ComponentMenuAnalysisGlobalOTDTable
         }
       ]
     }
diff --git a/_Main/UI/MacroPlanner/Component_FormProducts/Component_ListProduct.def b/_Main/UI/MacroPlanner/Component_FormProducts/Component_ListProduct.def
new file mode 100644
index 0000000..f74c93c
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormProducts/Component_ListProduct.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListProduct #extension
+{
+  Children:
+  [
+    Component popupListProduct #extension
+    {
+      Children:
+      [
+        Component PopupParent #extension
+        {
+          Children:
+          [
+            Component menuSeparator631 { #keys: '[414702.0.157554503]' BaseType: 'Menu' Properties: [ Separator: true ] }
+            Component MenuConvertToPanelMaterial { #keys: '[414702.0.157554555]' BaseType: 'Menu' Properties: [ Image: 'PLASMA-TV' Text: '杞崲涓洪潰鏉跨墿鏂�' ] }
+          ]
+          Properties:
+          [
+            ModeledStringList ChildOrdering
+            {
+              c: MenuActions
+              c: MenuFilter
+              c: menuListQuintiqSetQuantor
+              c: MenuSeparator
+              c: MenuNewProduct
+              c: MenuEditProduct
+              c: MenuDeleteProduct
+              c: MenuCopyIncludingSP
+              c: Menu3
+              c: MenuSmartPlan1
+              c: Menu49
+              c: MenuEditDisplayIndex
+              c: MenuEditVisualization2
+              c: menuSeparator631
+              c: MenuConvertToPanelMaterial
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormProducts/Component_SplitterWnd8.def b/_Main/UI/MacroPlanner/Component_FormProducts/Component_SplitterWnd8.def
new file mode 100644
index 0000000..a925236
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormProducts/Component_SplitterWnd8.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component SplitterWnd8 #extension
+{
+  Children:
+  [
+    Component SplitterPane #extension
+    {
+      Children:
+      [
+        #child: ListProduct
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_MenuConvertToPanelMaterial_OnClick.def b/_Main/UI/MacroPlanner/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_MenuConvertToPanelMaterial_OnClick.def
new file mode 100644
index 0000000..fc90953
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_MenuConvertToPanelMaterial_OnClick.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: ListProduct
+Response OnClick (
+  Product_MP selection
+) id:Response_TIANMA_JITUAN_ListProduct_MenuConvertToPanelMaterial_OnClick
+{
+  #keys: '[414702.0.157554653]'
+  Body:
+  [*
+    selection.IsPanelMaterial( not selection.IsPanelMaterial() );
+  *]
+  DefinitionID => //ListProduct/Responsedef_ListProduct_Menu_OnClick
+  Initiator: 'MenuConvertToPanelMaterial'
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormProducts/_ROOT_Component_FormProducts.def b/_Main/UI/MacroPlanner/Component_FormProducts/_ROOT_Component_FormProducts.def
new file mode 100644
index 0000000..a83580c
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormProducts/_ROOT_Component_FormProducts.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: LibMacroPlannerTCUI
+OrphanComponent FormProducts #extension
+{
+  Children:
+  [
+    #child: SplitterWnd8
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTop.def b/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTop.def
new file mode 100644
index 0000000..89fbbad
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTop.def
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+Component swTop
+{
+  #keys: '[530.0.3531806]'
+  BaseType: 'swTop'
+  IsDerived: true
+  Children:
+  [
+    Component spTopLeft
+    {
+      #keys: '[530.0.3531807]'
+      BaseType: 'spTopLeft'
+      IsDerived: true
+      Children:
+      [
+        Component Analysis
+        {
+          #keys: '[530.0.3532065]'
+          BaseType: 'Analysis'
+          IsDerived: true
+          Properties:
+          [
+            GlobalInstance: 'GlobalOTDTable'
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTopMost.def b/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTopMost.def
new file mode 100644
index 0000000..8a8fcd7
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/Component_swTopMost.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component swTopMost
+{
+  #keys: '[530.0.3531801]'
+  BaseType: 'swTopMost'
+  IsDerived: true
+  Children:
+  [
+    Component SplitterPane1
+    {
+      #keys: '[530.0.3531802]'
+      BaseType: 'SplitterPane1'
+      IsDerived: true
+      Children:
+      [
+        #child: swTop
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/_ROOT_Component_frmStandardAnalysisGlobalOTDTable.def b/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/_ROOT_Component_frmStandardAnalysisGlobalOTDTable.def
new file mode 100644
index 0000000..587a278
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_frmStandardAnalysisGlobalOTDTable/_ROOT_Component_frmStandardAnalysisGlobalOTDTable.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlanner
+OrphanComponent frmStandardAnalysisGlobalOTDTable
+{
+  #keys: '[414702.0.137524322]'
+  BaseType: 'frmStandardAnalysis'
+  Children:
+  [
+    #child: swTopMost
+  ]
+  Properties:
+  [
+    Height: 601
+    Image: 'BIRD'
+    Title: 'Analysis GlobalOTDTable'
+    Width: 783
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def
index b948d58..d927b55 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonIn.def
@@ -2,7 +2,6 @@
 #parent: LibSOPImpExp_ContextMenuImport/MenuImportFromCommonInformationModel
 Response OnClick () id:Response_TIANMA_JITUAN_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonInformationModel_OnClick
 {
-  #warning 103647: "Identifier 'Response_MacroPlanner_LibSOPImpExp_ContextMenuImport_MenuImportFromCommonInformationModel_OnClick' is not unique in the scope of 'LibSOPImpExp_ContextMenuImport' component on 'ApplicationMacroPlanner'. The reason can be a recently added ModeledResponse. A unique identifier was generated automatically."
   #keys: '[146140.2.683371355]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebMenu_OnClick'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlActions.def
new file mode 100644
index 0000000..f0a3335
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414702.0.157903684]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414702.0.157903688]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414702.0.157903690]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlContent.def
new file mode 100644
index 0000000..d7beca4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Component_pnlContent.def
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414702.0.157903682]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dsStartDate
+    {
+      #keys: '[414702.0.158296102]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.StartDate'
+        Label: '寮�濮�'
+        Taborder: 2
+      ]
+    }
+    Component npDemandQuantity
+    {
+      #keys: '[414702.0.158296123]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.DemandQuantity'
+        Label: '闇�姹傛暟閲�'
+        Taborder: 3
+      ]
+    }
+    Component efMaterialDescription
+    {
+      #keys: '[414702.0.157412917]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MaterialDescription'
+        Label: '鐗╂枡鎻忚堪'
+        Taborder: 1
+      ]
+    }
+    Component ddslPanelModel
+    {
+      #keys: '[414702.0.157757933]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.PanelModel'
+        Label: '闈㈡澘鍨嬪彿'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_Edit.def
new file mode 100644
index 0000000..5a8abdf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_Edit.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  PanelMaterial selection
+) id:Method_DialogCreateEditPanelPullPlanReport_Edit
+{
+  #keys: '[414702.0.158677121]'
+  Body:
+  [*
+    data := shadow( selection );
+    
+    DataHolderDialogData.Data( &data );
+    info( "hello world" );
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_New.def
new file mode 100644
index 0000000..7832386
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Method_New.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method New () id:Method_DialogCreateEditPanelPullPlanReport_New
+{
+  #keys: '[414702.0.158084611]'
+  Body:
+  [*
+    panelMaterial := MacroPlan.PanelMaterial( relshadow );
+    
+    DataHolderDialogData.Data( &panelMaterial );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..a98c7de
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[414702.0.157903694]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..555058d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414702.0.157903693]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      
+      //Form.OnOK();
+      Form.ApplyChanges();
+      
+      data := DataHolderDialogData.Data();
+      panelMaterial := data.WrappedInstance();
+      if ( isnull( panelMaterial ) ) {
+        MacroPlan.PanelMaterial( relnew, 
+                                 PanelModel          := ddslPanelModel.Text(), 
+                                 MaterialDescription := efMaterialDescription.Text(), 
+                                 StartDate           := dsStartDate.Date(),
+                                 DemandQuantity      := npDemandQuantity.Number() );
+      } else {
+        panelMaterial.PanelModel( ddslPanelModel.Text() );
+        panelMaterial.MaterialDescription( efMaterialDescription.Text() );
+        panelMaterial.StartDate( dsStartDate.Date() );
+        panelMaterial.DemandQuantity( npDemandQuantity.Number() );
+      }
+      
+      Form.Close();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlContent_ddslPanelModel_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlContent_ddslPanelModel_OnCreated.def
new file mode 100644
index 0000000..e8f83be
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/Response_pnlContent_ddslPanelModel_OnCreated.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pnlContent/ddslPanelModel
+Response OnCreated () id:Response_pnlContent_ddslPanelModel_OnCreated
+{
+  #keys: '[414702.0.158297623]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      ids := selectvalues( MacroPlan, Product_MP, tempPMP, tempPMP.IsPanelMaterial(), tempPMP.ID() );
+      info( ids.Concatenate( ";" ) );
+      this.Strings( ids.Concatenate( ";" ) );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/_ROOT_Component_DialogCreateEditPanelPullPlanReport.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/_ROOT_Component_DialogCreateEditPanelPullPlanReport.def
new file mode 100644
index 0000000..53e5083
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPanelPullPlanReport/_ROOT_Component_DialogCreateEditPanelPullPlanReport.def
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogCreateEditPanelPullPlanReport
+{
+  #keys: '[414702.0.157903680]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderDialogData
+    {
+      #keys: '[414702.0.156384742]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[PanelMaterial]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlActions.def
new file mode 100644
index 0000000..b309d6f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414702.0.145521963]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414702.0.145521967]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414702.0.145521969]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlContent.def
new file mode 100644
index 0000000..8016c0b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Component_pnlContent.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414702.0.145521961]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efID
+    {
+      #keys: '[414702.0.145552802]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.ID'
+        Label: 'ID'
+        Taborder: 0
+      ]
+    }
+    Component efTypeName
+    {
+      #keys: '[414702.0.145552821]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.TypeName'
+        Label: '宸ュ崟绫诲瀷'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_Edit.def
new file mode 100644
index 0000000..ae005f8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_Edit.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  WorkOrderType selection
+) id:Method_DialogCreateEditWorkOrderType_Edit
+{
+  #keys: '[414702.0.148405777]'
+  Body:
+  [*
+    // Edit
+    data := shadow( selection );
+    
+    DataHolderDialogData.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def
new file mode 100644
index 0000000..d805656
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Method_NewWorkOrderType.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method NewWorkOrderType (
+  FormWorkOrderType formWorkOrderType
+) id:Method_DialogCreateEditWorkOrderType_NewWorkOrderType
+{
+  #keys: '[414702.0.145493830]'
+  Body:
+  [*
+    workOrderType := GlobalOTDTable.WorkOrderType( relshadow );
+    
+    DataHolderForm.Data( formWorkOrderType );
+    
+    DataHolderDialogData.Data( &workOrderType );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..445c198
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[414702.0.145521973]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..e5f4159
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414702.0.145521972]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    flag := true;
+    
+    data := DataHolderDialogData.Data();
+    id := efID.Text();
+    typeName := efTypeName.Text();
+    
+    idExists := exists( GlobalOTDTable, WorkOrderType, tempWOT, tempWOT.ID() = id and tempWOT.ID() <> data.ID() );
+    typeNameExists := exists( GlobalOTDTable, WorkOrderType, tempWOT, tempWOT.TypeName() = typeName and tempWOT.TypeName() <> data.TypeName() );
+    
+    if ( idExists or typeNameExists ) {
+      feedback := "ID鎴栫被鍨嬪悕绉伴噸澶�";
+      flag := false;
+    } else if ( id = "" or typeName = "" ) {
+      feedback := "ID鎴栫被鍨嬪悕绉颁笉鑳戒负绌�";
+      flag := false;
+    }
+    
+    return flag;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      //Form.OnOK();
+      Form.ApplyChanges();
+      
+      data := DataHolderDialogData.Data();
+      workOrderType := data.WrappedInstance();
+      if ( isnull( workOrderType ) ) {
+        GlobalOTDTable.WorkOrderType( relnew, ID := data.ID(), TypeName := data.TypeName() );
+      } else {
+        workOrderType.ID( data.ID() );
+        workOrderType.TypeName( data.TypeName() );
+      }
+      
+      Form.Close();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/_ROOT_Component_DialogCreateEditWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/_ROOT_Component_DialogCreateEditWorkOrderType.def
new file mode 100644
index 0000000..24d0a68
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditWorkOrderType/_ROOT_Component_DialogCreateEditWorkOrderType.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogCreateEditWorkOrderType
+{
+  #keys: '[414702.0.145521959]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderDialogData
+    {
+      #keys: '[414702.0.145552868]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[WorkOrderType]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component DataHolderForm
+    {
+      #keys: '[414702.0.147371367]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'FormWorkOrderType'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlActions.def
new file mode 100644
index 0000000..adcf81f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414702.0.131771244]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414702.0.131771248]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414702.0.131771250]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlContent.def
new file mode 100644
index 0000000..9155690
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlContent.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414702.0.131771242]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: pnlGeneral
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlGeneral.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlGeneral.def
new file mode 100644
index 0000000..a034ddf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Component_pnlGeneral.def
@@ -0,0 +1,133 @@
+Quintiq file version 2.0
+Component pnlGeneral
+{
+  #keys: '[414702.0.139154801]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efBusinessType
+    {
+      #keys: '[414702.0.139035752]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.BusinessType'
+        Enabled: false
+        Label: '涓氬姟绫诲瀷'
+        Taborder: 0
+      ]
+    }
+    Component efItemCode
+    {
+      #keys: '[414702.0.139035772]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MatCode'
+        Enabled: false
+        Label: '鐗╂枡缂栫爜'
+        Taborder: 1
+      ]
+    }
+    Component efNameOfMaterial
+    {
+      #keys: '[414702.0.139035784]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MatName'
+        Enabled: false
+        Label: '鐗╂枡鍚嶇О'
+        Taborder: 2
+      ]
+    }
+    Component efMaterialArrivalLTDays
+    {
+      #keys: '[414702.0.139035796]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MatArrivalLT'
+        Description: 'Finished product minimum delivery LT (days)'
+        Enabled: false
+        Label: '鐗╂枡鍒拌揣LT锛堝ぉ锛�'
+        Taborder: 3
+      ]
+    }
+    Component efFinishedProductMinimumDeliveryLTDays
+    {
+      #keys: '[414702.0.139035809]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MinProdDeliverLT'
+        Enabled: false
+        Label: '鎴愬搧鏈�灏忎氦浠楲T锛堝ぉ锛�'
+        Taborder: 4
+      ]
+    }
+    Component efFinishedSKUType
+    {
+      #keys: '[414702.0.139035821]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.ProductCount'
+        Enabled: false
+        Label: '鎴愬搧SKU绉嶇被'
+        Taborder: 5
+      ]
+    }
+    Component efTheSystemAutomaticallySchedulesPolicies
+    {
+      #keys: '[414702.0.139035834]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.PlanningStrategyAuto'
+        Enabled: false
+        Label: '绯荤粺鑷姩璁″垝绛栫暐'
+        Taborder: 6
+      ]
+    }
+    Component ddslMaterialPlanningPolicyChanges
+    {
+      #keys: '[414702.0.139877037]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        AllowEmpty: true
+        DataBinding: 'DataHolderDialogData.Data.PlanningStrategyCustom'
+        Label: '鐗╂枡璁″垝绛栫暐鍙樻洿'
+        Strings: 'JIT;VMI;M/A;瀹夊叏搴撳瓨;PO鎷夋枡'
+        Taborder: 7
+      ]
+    }
+    Component efTheMinimumNumberOfDaysForAnItemToBeInventoried
+    {
+      #keys: '[414702.0.139969846]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MinimumNumberOfDaysInStock'
+        Label: '鐗╂枡搴撳瓨鏈�灏忓ぉ鏁�'
+        Taborder: 8
+      ]
+    }
+    Component efTheMaximumNumberOfDaysThatTheItemIsInStock
+    {
+      #keys: '[414702.0.139969907]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MaximumNumberOfDaysInInventory'
+        Label: '鐗╂枡搴撳瓨鏈�澶уぉ鏁�'
+        Taborder: 9
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Method_Edit.def
new file mode 100644
index 0000000..78dd14b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Method_Edit.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  MatAttrSettingAndPlanStrategy selection
+) id:Method_DialogCreateEditMaterialLabelingAndPlanningStrategy_Edit
+{
+  #keys: '[414702.0.137732159]'
+  Body:
+  [*
+    //data := shadow( selection );
+    DataHolderDialogData.Data( selection );
+    
+    selection.UpdateBy( QuintiqUser::CurrentUser().Username() );
+    selection.UpdateTime( DateTime::ActualTime() );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..e03c477
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[414702.0.131771254]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..f8d2a3d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414702.0.131771253]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      
+      data := DataHolderDialogData.Data();
+      if ( data.PlanningStrategyCustom() = "JIT" ) {
+        data.MinimumNumberOfDaysInStock( 0 );
+        data.MaximumNumberOfDaysInInventory( 0 );
+      }
+      
+      Form.Close();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnCreated.def
new file mode 100644
index 0000000..215ed5c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnCreated.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: pnlGeneral/ddslMaterialPlanningPolicyChanges
+Response OnCreated () id:Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnCreated
+{
+  #keys: '[414702.0.199501073]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      data := DataHolderDialogData.Data();
+      if ( data.PlanningStrategyCustom() <> "" and data.PlanningStrategyCustom() = "JIT" ) {
+        efTheMinimumNumberOfDaysForAnItemToBeInventoried.Visible( false );
+        efTheMaximumNumberOfDaysThatTheItemIsInStock.Visible( false );
+      } else if ( data.PlanningStrategyAuto() <> "" and data.PlanningStrategyAuto() = "JIT" ) {
+        efTheMinimumNumberOfDaysForAnItemToBeInventoried.Visible( false );
+        efTheMaximumNumberOfDaysThatTheItemIsInStock.Visible( false );
+      } else {
+        efTheMinimumNumberOfDaysForAnItemToBeInventoried.Visible( true );
+        efTheMaximumNumberOfDaysThatTheItemIsInStock.Visible( true );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnUserSelectionChanged.def
new file mode 100644
index 0000000..eaf8b6a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnUserSelectionChanged.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: pnlGeneral/ddslMaterialPlanningPolicyChanges
+Response OnUserSelectionChanged () id:Response_pnlGeneral_ddslMaterialPlanningPolicyChanges_OnUserSelectionChanged
+{
+  #keys: '[414702.0.198291344]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if ( selection <> "" and selection = "JIT" ) {
+        efTheMinimumNumberOfDaysForAnItemToBeInventoried.Visible( false );
+        efTheMaximumNumberOfDaysThatTheItemIsInStock.Visible( false );
+      } else if ( selection <> "" and selection = "JIT" ) {
+        efTheMinimumNumberOfDaysForAnItemToBeInventoried.Visible( false );
+        efTheMaximumNumberOfDaysThatTheItemIsInStock.Visible( false );
+      } else {
+        efTheMinimumNumberOfDaysForAnItemToBeInventoried.Visible( true );
+        efTheMaximumNumberOfDaysThatTheItemIsInStock.Visible( true );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/_ROOT_Component_DialogCreateEditMaterialLabelingAndPlanningStrategy.def b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/_ROOT_Component_DialogCreateEditMaterialLabelingAndPlanningStrategy.def
new file mode 100644
index 0000000..78c4c93
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogMaterialLabelingAndPlanningStrategy/_ROOT_Component_DialogCreateEditMaterialLabelingAndPlanningStrategy.def
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogCreateEditMaterialLabelingAndPlanningStrategy
+{
+  #keys: '[414702.0.131771240]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderDialogData
+    {
+      #keys: '[414702.0.139153395]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'MatAttrSettingAndPlanStrategy'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListChildMaterial.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListChildMaterial.def
new file mode 100644
index 0000000..40e2efd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListChildMaterial.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListChildMaterial
+{
+  #keys: '[414702.0.122536770]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorChildMaterial
+    {
+      #keys: '[414702.0.122536771]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MatAttrSettingAndPlanStrategy'
+        ExtractionMode: 'Selected'
+        Source: 'PanelMaterial.ListMaterialMaterialLabelingAndPlanningStrategy'
+        Taborder: 0
+        Transformation: 'MatAttrSettingAndPlanStrategyDetail'
+      ]
+    }
+    #child: listActionBarPageChildMaterial
+    Component DataSetLevelChildMaterial
+    {
+      #keys: '[414702.0.122536776]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuChildMaterial
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MatCode","title":"MatCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"MatCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCode","title":"ProductCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StandardLT","title":"StandardLT","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StandardLT"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductDesc","title":"ProductDesc","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductDesc"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Comment","title":"Comment","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Comment"}}]'
+        ContextMenu: 'listContextMenuChildMaterial'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy\043880.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy\043880.def"
new file mode 100644
index 0000000..698efbd
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_ListMaterialMaterialLabelingAndPlanningStrategy\043880.def"
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListMaterialMaterialLabelingAndPlanningStrategy id:ListMaterialMaterialLabelingAndPlanningStrategy_880
+{
+  #keys: '[414702.0.122174685]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorMaterial367
+    {
+      #keys: '[414702.0.122174686]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'MatAttrSettingAndPlanStrategy'
+      ]
+    }
+    #child: listActionBarPageMaterial790_1
+    Component DataSetLevelMaterial679
+    {
+      #keys: '[414702.0.122174688]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuMaterial455_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SerialNumber","title":"SerialNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SerialNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MatCode","title":"MatCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MatCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MatName","title":"MatName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MatName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MatType","title":"MatType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MatType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MatArrivalLT","title":"MatArrivalLT","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MatArrivalLT"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCount","title":"ProductCount","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductCount"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MinProdDeliverLT","title":"MinProdDeliverLT","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"MinProdDeliverLT"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FlagLongTerm","title":"FlagLongTerm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FlagLongTerm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FlagGeneric","title":"FlagGeneric","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FlagGeneric"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlanningStrategyAuto","title":"PlanningStrategyAuto","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PlanningStrategyAuto"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlanningStrategyCustom","title":"PlanningStrategyCustom","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlanningStrategyCustom"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UpdateBy","title":"UpdateBy","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UpdateBy"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UpdateTime","title":"UpdateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UpdateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MinimumNumberOfDaysInStock","title":"MinimumNumberOfDaysInStock","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MinimumNumberOfDaysInStock"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaximumNumberOfDaysInInventory","title":"MaximumNumberOfDaysInInventory","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaximumNumberOfDaysInInventory"}},{"attribute":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"1","title":"1","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"VALUE( object.UpdateTime() )"}}]'
+        ContextMenu: 'listContextMenuMaterial455'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListMaterialMaterialLabelingAndPlanningStrategy_880_WebMenu_OnClick
+    {
+      #keys: '[414702.0.132706551]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[319.0.80354936]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelChildMaterial\043558.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelChildMaterial\043558.def"
new file mode 100644
index 0000000..8e0ce39
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelChildMaterial\043558.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelChildMaterial
+{
+  #keys: '[414702.0.121452333]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListChildMaterial
+  ]
+  Properties:
+  [
+    Border: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterial.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterial.def
new file mode 100644
index 0000000..7232995
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterial.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component PanelMaterial
+{
+  #keys: '[414702.0.121452322]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListMaterialMaterialLabelingAndPlanningStrategy_880
+    #child: PanelMaterialOperationButton
+    Component DataHolderCheckedMaterials
+    {
+      #keys: '[414702.0.136936641]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[MatAttrSettingAndPlanStrategy]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialExportAndImport\043136.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialExportAndImport\043136.def"
new file mode 100644
index 0000000..7519c89
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialExportAndImport\043136.def"
@@ -0,0 +1,61 @@
+Quintiq file version 2.0
+Component PanelMaterialExportAndImport id:PanelMaterialExportAndImport_136
+{
+  #keys: '[414702.0.130101487]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonMaterialExportAndExport
+    {
+      #keys: '[414702.0.130101488]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Label: '鏁版嵁瀵煎嚭'
+        Taborder: 2
+      ]
+    }
+    Component ButtonMaterialExportAndImport
+    {
+      #keys: '[414702.0.130101489]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Label: '鏁版嵁瀵煎叆'
+        Taborder: 3
+      ]
+    }
+    Component ButtonSynchronizeInventoryTargets
+    {
+      #keys: '[414702.0.142124169]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'CLOUD_REFRESH'
+        Label: '鍚屾搴撳瓨鐩爣'
+        Taborder: 0
+      ]
+    }
+    Component ButtonPullData
+    {
+      #keys: '[414702.0.199743004]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'TRACTOR'
+        Label: '鎷夊彇鏁版嵁'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    FixedSize: true
+    MinimumColumns: 25
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialLabelingAndPlanningStrategy.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialLabelingAndPlanningStrategy.def
new file mode 100644
index 0000000..97be3df
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialLabelingAndPlanningStrategy.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelMaterialLabelingAndPlanningStrategy
+{
+  #keys: '[414702.0.121452301]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelChildMaterial
+    #child: PanelMaterial
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialOperationButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialOperationButton.def
new file mode 100644
index 0000000..3099403
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_PanelMaterialOperationButton.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelMaterialOperationButton
+{
+  #keys: '[414702.0.130161515]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelMaterialExportAndImport_136
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageChildMaterial.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageChildMaterial.def
new file mode 100644
index 0000000..a4bbf6c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageChildMaterial.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageChildMaterial
+{
+  #keys: '[414702.0.122536773]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageMaterial790\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageMaterial790\0431.def"
new file mode 100644
index 0000000..7c30238
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listActionBarPageMaterial790\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageMaterial790 id:listActionBarPageMaterial790_1
+{
+  #keys: '[414702.0.122174687]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuChildMaterial.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuChildMaterial.def
new file mode 100644
index 0000000..e87ec5b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuChildMaterial.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuChildMaterial
+{
+  #keys: '[414702.0.122536778]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455\0431.def"
new file mode 100644
index 0000000..fe19274
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Component_listContextMenuMaterial455\0431.def"
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenuMaterial455 id:listContextMenuMaterial455_1
+{
+  #keys: '[414702.0.122174689]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSeparator
+    {
+      #keys: '[121142.1.1147171519]'
+      BaseType: 'MenuSeparator'
+      IsDerived: true
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component MenuDeleteAll
+    {
+      #keys: '[414702.0.141671580]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 3
+        Title: '鍒犻櫎'
+      ]
+    }
+    Component MenuSelectAll
+    {
+      #keys: '[414702.0.141943188]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PIG'
+        Shortcut: 'Ctrl+A'
+        Taborder: 4
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuDeleteAll_O.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuDeleteAll_O.def
new file mode 100644
index 0000000..a921721
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuDeleteAll_O.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListMaterialMaterialLabelingAndPlanningStrategy_880
+Response OnClick (
+  structured[MatAttrSettingAndPlanStrategy] selection
+) id:Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuDeleteAll_OnClick
+{
+  #keys: '[414702.0.141854066]'
+  CanBindMultiple: false
+  DefinitionID => /ListMaterialMaterialLabelingAndPlanningStrategy_880/Responsedef_ListMaterialMaterialLabelingAndPlanningStrategy_880_WebMenu_OnClick
+  Initiator: 'MenuDeleteAll'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse ( selection, Elements, s ) {
+        s.Delete();
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuSelectAll_O.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuSelectAll_O.def
new file mode 100644
index 0000000..23b4c6a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuSelectAll_O.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListMaterialMaterialLabelingAndPlanningStrategy_880
+Response OnClick () id:Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_MenuSelectAll_OnClick
+{
+  #keys: '[414702.0.141794738]'
+  CanBindMultiple: false
+  DefinitionID => /ListMaterialMaterialLabelingAndPlanningStrategy_880/Responsedef_ListMaterialMaterialLabelingAndPlanningStrategy_880_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick.def
new file mode 100644
index 0000000..a91ec9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListMaterialMaterialLabelingAndPlanningStrategy_880
+Response OnDoubleClick (
+  MatAttrSettingAndPlanStrategy selection
+) id:Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnDoubleClick
+{
+  #keys: '[414702.0.137732025]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnDoubleClick'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditMaterialLabelingAndPlanningStrategy );
+      dlg.Edit( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheck\043591.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheck\043591.def"
new file mode 100644
index 0000000..4eb4da0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheck\043591.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ListMaterialMaterialLabelingAndPlanningStrategy_880
+Response OnUserCheckedChanged () id:Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheckedChanged_591
+{
+  #keys: '[414702.0.136206065]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderCheckedMaterials.Data().Flush();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheckedCh.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheckedCh.def
new file mode 100644
index 0000000..9c7c2b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheckedCh.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListMaterialMaterialLabelingAndPlanningStrategy_880
+Response OnUserCheckedChanged (
+  structured[MatAttrSettingAndPlanStrategy] checkeditems
+) id:Response_ListMaterialMaterialLabelingAndPlanningStrategy_880_OnUserCheckedChanged
+{
+  #keys: '[414702.0.136757090]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderCheckedMaterials.Data( checkeditems.Copy() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndExport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndExport_OnCl.def
new file mode 100644
index 0000000..b909d65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndExport_OnCl.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelMaterialExportAndImport_136/ButtonMaterialExportAndExport
+Response OnClick () id:Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndExport_OnClick
+{
+  #keys: '[414702.0.133071932]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      tableBinaryData := MatAttrSettingAndPlanStrategy::ExportTheFileStream( DataHolderCheckedMaterials.Data() ).AsBinaryData();
+      Application.Download( "MaterialLabelingAndPlanningStrategy.xlsx", tableBinaryData );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def
new file mode 100644
index 0000000..ce5035b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnCl.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: PanelMaterialExportAndImport_136/ButtonMaterialExportAndImport
+Response OnClick () id:Response_PanelMaterialExportAndImport_136_ButtonMaterialExportAndImport_OnClick
+{
+  #keys: '[414702.0.134451163]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+        
+          MatAttrSettingAndPlanStrategyInputSource::VerifyTheFileName( uploadJson );
+          
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+          matAttrSettingAndPlanStrategyInputSource := MatAttrSettingAndPlanStrategyInputSource::Upload( GlobalOTDTable, fileName, base64String, ApplicationMacroPlanner.GetUserName() );
+          
+          matAttrSettingAndPlanStrategyInputSource.ParseTable();
+          
+          matAttrSettingAndPlanStrategyDataTable := select( matAttrSettingAndPlanStrategyInputSource, MatAttrSettingAndPlanStrategyDataTable, tempMASAPSDT, tempMASAPSDT.name() = "鐗╂枡鏍囩" );
+          matAttrSettingAndPlanStrategyDataTable.VerifyTheTemplate();
+          
+          matAttrSettingAndPlanStrategyDataTable.SynchronizeData();
+          
+          WebMessageBox::Success( "涓婁紶鎴愬姛", true );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation(), true );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonPullData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonPullData_OnClick.def
new file mode 100644
index 0000000..b0f98a4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonPullData_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelMaterialExportAndImport_136/ButtonPullData
+Response OnClick () id:Response_PanelMaterialExportAndImport_136_ButtonPullData_OnClick
+{
+  #keys: '[414702.0.198246056]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Error( "鏁版嵁婀栬繛鎺ュけ璐�", true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def
new file mode 100644
index 0000000..5b1c51b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_.def
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: PanelMaterialExportAndImport_136/ButtonSynchronizeInventoryTargets
+Response OnClick () id:Response_PanelMaterialExportAndImport_136_ButtonSynchronizeInventoryTargets_OnClick
+{
+  #keys: '[414702.0.141615322]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    flag := not isnull( GlobalOTDTable ) and not isnull( MacroPlan );
+    
+    if ( not flag ) {
+      feedback := "褰撳墠娌℃湁婵�娲荤殑鐗堟湰";
+    }
+    
+    return flag;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      MatAttrSettingAndPlanStrategy::SynchronizeInventoryTargets( GlobalOTDTable, MacroPlan );
+      
+      WebMessageBox::Success( "搴撳瓨鐩爣鍚屾鎴愬姛", true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterial_DataHolderCheckedMaterials_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterial_DataHolderCheckedMaterials_OnDataChanged.def
new file mode 100644
index 0000000..380ad59
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/Response_PanelMaterial_DataHolderCheckedMaterials_OnDataChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelMaterial/DataHolderCheckedMaterials
+Response OnDataChanged () id:Response_PanelMaterial_DataHolderCheckedMaterials_OnDataChanged
+{
+  #keys: '[414702.0.136147695]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //traverse ( this.Data(), Elements, e ) {
+      //  info( "閫変腑鐨勭墿鏂欏彿锛�", e.MatCode() );
+      //}
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/_ROOT_Component_FormMaterialLabelingAndPlanningStrategy.def b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/_ROOT_Component_FormMaterialLabelingAndPlanningStrategy.def
new file mode 100644
index 0000000..06483a1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMaterialLabelingAndPlanningStrategy/_ROOT_Component_FormMaterialLabelingAndPlanningStrategy.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormMaterialLabelingAndPlanningStrategy
+{
+  #keys: '[414702.0.120950329]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelMaterialLabelingAndPlanningStrategy
+  ]
+  Properties:
+  [
+    Description: '鐗╂枡鏍囩&璁″垝绛栫暐琛ㄥ崟'
+    Image: 'PAPER_ROLL'
+    Title: '鐗╂枡鏍囩&璁″垝绛栫暐'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_ListData.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_ListData.def
new file mode 100644
index 0000000..1b59d94
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_ListData.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListData
+{
+  #keys: '[414702.0.156121812]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorData
+    {
+      #keys: '[414702.0.156121813]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'PanelMaterial'
+      ]
+    }
+    #child: listActionBarPageData
+    Component DataSetLevelData
+    {
+      #keys: '[414702.0.156121818]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuData
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelModel","title":"PanelModel","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelModel"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialDescription","title":"MaterialDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandQuantity","title":"DemandQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandQuantity"}}]'
+        ContextMenu: 'listContextMenuData'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListData_WebMenu_OnClick
+    {
+      #keys: '[414702.0.158084176]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[359.0.59836272]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelData\043431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelData\043431.def"
new file mode 100644
index 0000000..1e7ba58
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelData\043431.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelData
+{
+  #keys: '[414702.0.153191731]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListData
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelFunctionButtons.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelFunctionButtons.def
new file mode 100644
index 0000000..59898ad
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelFunctionButtons.def
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component PanelFunctionButtons
+{
+  #keys: '[414702.0.153162120]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonRefresh
+    {
+      #keys: '[414702.0.153101807]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ARROW_CIRCLE2'
+        Label: '鍒锋柊'
+        Taborder: 0
+      ]
+    }
+    Component ButtonSend
+    {
+      #keys: '[414702.0.153101827]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ANTENNA'
+        Label: '鍙戦��'
+        Taborder: 1
+      ]
+    }
+    Component DropDownStringListBusinessType
+    {
+      #keys: '[414702.0.170431848]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '浜嬩笟閮ㄩ�夋嫨'
+        Strings: '澶╁崕;涓撴樉;IT;杞﹁浇;TM17;TM18;杩愬姩鍋ュ悍;姹借溅鐢靛瓙'
+        Taborder: 2
+      ]
+    }
+    Component EditFieldAddress
+    {
+      #keys: '[414702.0.203870768]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: '鍙戦�佸湴鍧�'
+        Taborder: 3
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    MinimumColumns: 1
+    MinimumRows: 1
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelPanelPullPlanReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelPanelPullPlanReport.def
new file mode 100644
index 0000000..1cf39fa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_PanelPanelPullPlanReport.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelPanelPullPlanReport
+{
+  #keys: '[414702.0.153130397]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelData
+    #child: PanelFunctionButtons
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listActionBarPageData.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listActionBarPageData.def
new file mode 100644
index 0000000..8aeee1c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listActionBarPageData.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageData
+{
+  #keys: '[414702.0.156121815]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listContextMenuData.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listContextMenuData.def
new file mode 100644
index 0000000..e25d70c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Component_listContextMenuData.def
@@ -0,0 +1,62 @@
+Quintiq file version 2.0
+Component listContextMenuData
+{
+  #keys: '[414702.0.156121820]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuCreate
+    {
+      #keys: '[414702.0.156370994]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Shortcut: 'Ins'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit
+    {
+      #keys: '[414702.0.156371015]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        BindOnDoubleClick: true
+        Image: 'PENCIL'
+        Shortcut: 'Enter'
+        Taborder: 4
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDelete
+    {
+      #keys: '[414702.0.156371036]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Shortcut: 'Del'
+        Taborder: 5
+        Title: 'Delete'
+      ]
+    }
+    Component MenuSelectAll
+    {
+      #keys: '[414702.0.157843652]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 6
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuCreate_OnClick.def
new file mode 100644
index 0000000..4e4e76b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuCreate_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: ListData
+Response OnClick () id:Response_ListData_MenuCreate_OnClick
+{
+  #keys: '[414702.0.157756457]'
+  CanBindMultiple: false
+  DefinitionID => /ListData/Responsedef_ListData_WebMenu_OnClick
+  Initiator: 'MenuCreate'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditPanelPullPlanReport );
+      dlg.New();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuDelete_OnClick.def
new file mode 100644
index 0000000..1961a06
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuDelete_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListData
+Response OnClick (
+  PanelMaterial selection
+) id:Response_ListData_MenuDelete_OnClick
+{
+  #keys: '[414702.0.156337739]'
+  DefinitionID => /ListData/Responsedef_ListData_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuEdit_OnClick.def
new file mode 100644
index 0000000..988dd2d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListData
+Response OnClick (
+  PanelMaterial selection
+) id:Response_ListData_MenuEdit_OnClick
+{
+  #keys: '[414702.0.158297460]'
+  CanBindMultiple: false
+  DefinitionID => /ListData/Responsedef_ListData_WebMenu_OnClick
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditPanelPullPlanReport );
+      dlg.Edit( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuSelectAll_OnClick.def
new file mode 100644
index 0000000..2bfc384
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_ListData_MenuSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListData
+Response OnClick () id:Response_ListData_MenuSelectAll_OnClick
+{
+  #keys: '[414702.0.158466175]'
+  CanBindMultiple: false
+  DefinitionID => /ListData/Responsedef_ListData_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonRefresh_OnClick.def
new file mode 100644
index 0000000..7b93559
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonRefresh_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelFunctionButtons/ButtonRefresh
+Response OnClick () id:Response_PanelFunctionButtons_ButtonRefresh_OnClick
+{
+  #keys: '[414702.0.156301340]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDTable ) and not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      MacroPlan.PanelMaterial( relflush );
+      
+      GlobalOTDTable.RefreshPanelMaterialData( MacroPlan );
+      
+      WebMessageBox::Success( "鍒锋柊鎴愬姛锛�", true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonSend_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonSend_OnClick.def
new file mode 100644
index 0000000..c52a5f6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/Response_PanelFunctionButtons_ButtonSend_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelFunctionButtons/ButtonSend
+Response OnClick () id:Response_PanelFunctionButtons_ButtonSend_OnClick
+{
+  #keys: '[414702.0.168500044]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( DataHolderActiveScenario.Data() );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      scenario := DataHolderActiveScenario.Data();
+      
+      PanelMaterial::Send( MacroPlan, scenario, DropDownStringListBusinessType.Text(), EditFieldAddress.Text() );
+      
+      WebMessageBox::Success( "鍙戦�佹垚鍔燂紒", true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/_ROOT_Component_FormPanelPullPlanReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/_ROOT_Component_FormPanelPullPlanReport.def
new file mode 100644
index 0000000..99e3212
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPanelPullPlanReport/_ROOT_Component_FormPanelPullPlanReport.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPanelPullPlanReport
+{
+  #keys: '[414702.0.142531280]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelPanelPullPlanReport
+  ]
+  Properties:
+  [
+    Image: 'TABLET_COMPUTER'
+    Title: '闈㈡澘鎷夋枡璁″垝鎶ヨ〃'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def
new file mode 100644
index 0000000..033d744
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListWorkOrderType
+{
+  #keys: '[414702.0.144971549]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorWorkOrderType
+    {
+      #keys: '[414702.0.144971550]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'WorkOrderType'
+      ]
+    }
+    #child: listActionBarPageWorkOrderType
+    Component DataSetLevelWorkOrderType
+    {
+      #keys: '[414702.0.144971555]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuWorkOrderType
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TypeName","title":"TypeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"TypeName"}}]'
+        ContextMenu: 'listContextMenuWorkOrderType'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListWorkOrderType_WebMenu_OnClick
+    {
+      #keys: '[414702.0.145643479]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[335.0.42781215]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType.def
new file mode 100644
index 0000000..9a65131
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageWorkOrderType
+{
+  #keys: '[414702.0.144971552]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType.def
new file mode 100644
index 0000000..3afe0f9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType.def
@@ -0,0 +1,62 @@
+Quintiq file version 2.0
+Component listContextMenuWorkOrderType
+{
+  #keys: '[414702.0.144971557]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuCreate
+    {
+      #keys: '[414702.0.142551037]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Shortcut: 'Ins'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit
+    {
+      #keys: '[414702.0.142551058]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        BindOnDoubleClick: true
+        Image: 'PENCIL'
+        Shortcut: 'Enter'
+        Taborder: 4
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDelete
+    {
+      #keys: '[414702.0.142511388]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Shortcut: 'Del'
+        Taborder: 5
+        Title: 'Delete'
+      ]
+    }
+    Component MenuSelectAll
+    {
+      #keys: '[414702.0.148555263]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 6
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuCreate_OnClick.def
new file mode 100644
index 0000000..a192d2b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuCreate_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListWorkOrderType
+Response OnClick () id:Response_ListWorkOrderType_MenuCreate_OnClick
+{
+  #keys: '[414702.0.142563927]'
+  CanBindMultiple: false
+  DefinitionID => /ListWorkOrderType/Responsedef_ListWorkOrderType_WebMenu_OnClick
+  Initiator: 'MenuCreate'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditWorkOrderType );
+      dlg.NewWorkOrderType( FormWorkOrderType );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuDelete_OnClick.def
new file mode 100644
index 0000000..95fa342
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuDelete_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListWorkOrderType
+Response OnClick (
+  WorkOrderType selection
+) id:Response_ListWorkOrderType_MenuDelete_OnClick
+{
+  #keys: '[414702.0.147250862]'
+  DefinitionID => /ListWorkOrderType/Responsedef_ListWorkOrderType_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuEdit_OnClick.def
new file mode 100644
index 0000000..a95b2f0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListWorkOrderType
+Response OnClick (
+  WorkOrderType selection
+) id:Response_ListWorkOrderType_MenuEdit_OnClick
+{
+  #keys: '[414702.0.148314929]'
+  CanBindMultiple: false
+  DefinitionID => /ListWorkOrderType/Responsedef_ListWorkOrderType_WebMenu_OnClick
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditWorkOrderType );
+      dlg.Edit( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuSelectAll_OnClick.def
new file mode 100644
index 0000000..71dd8bd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Response_ListWorkOrderType_MenuSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListWorkOrderType
+Response OnClick () id:Response_ListWorkOrderType_MenuSelectAll_OnClick
+{
+  #keys: '[414702.0.147527888]'
+  CanBindMultiple: false
+  DefinitionID => /ListWorkOrderType/Responsedef_ListWorkOrderType_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def
new file mode 100644
index 0000000..93e4dc2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormWorkOrderType
+{
+  #keys: '[414702.0.144971495]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListWorkOrderType
+  ]
+  Properties:
+  [
+    Image: 'HOUSE'
+    Title: '宸ュ崟绫诲瀷缁存姢'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
index cb94597..27e4778 100644
--- a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
+++ b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
@@ -5,7 +5,7 @@
   ProjectProperties
   {
     ApplicationComponentName: 'ApplicationMacroPlanner'
-    BuildVersion: '2022.3.0.32'
+    BuildVersion: '2022.3.0.52'
     Description: 'Quintiq Macro Planner'
     ProjectKind: 'WebClient'
   }
diff --git a/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties b/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties
new file mode 100644
index 0000000..5bf9674
--- /dev/null
+++ b/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties
@@ -0,0 +1,532 @@
+#The properties belonging to _meta and _self groups are reserved. Please do not change them. Comments on these properties will not be preserved.
+_meta.application=server
+_meta.kind=Quintiq Property File
+_meta.type=model
+_meta.version.config=1.3
+_self.configsettype=Role
+_self.description=IT
+_self.name=Dev-21
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.connection=DBODBC1
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.parameters=/datasource=CIM_Carco /owner=dbo /user=quintiq
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.connection=dbodbc1
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.parameters=/datasource=otd /owner=OTD /chardatatypeforstring /characterencoding=UTF-8 /appdatatypeforstring=wchar
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.password=1 A205E2668CFBD9365E030C36BB0A4297 730524bf-f9c9-426f-94a0-953687be1178
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject.parameters=/datasource=MPERPIntegrationDataSource /owner=dbo /user=quintiq
+domainmodel.fileprovider.qdrive=template:domainmodel.fileprovider.qdrive
+domainmodel.fileprovider.qdrive.enabled=true
+domainmodel.fileprovider.qdrive.readonly=false
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint=template:domainmodel.integratorconfig.dsendpoint
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.connectiontimeout=0
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dspassword=1 D27640F00F09F1085D52409202B71B4E 2a9f48ef-2467-4394-afcb-75e45a1c40d9
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dsserviceurl=https://vdemopro1342dsy.extranet.3ds.com/3DSpace/resources/v1/model/
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dsuser=Push
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.maxconnections=10
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.receivecontentcharset=ASCII
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.requesttimeout=60
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sendingcontentcharset=UTF-8
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sockettimeout=0
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.trustmanagername=Q3DSpace
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.integratorid=Q3DSpace
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
+domainmodel.mdsstoragedefinitionmanager.audittrailenabled=false
+domainmodel.mdsstoragedefinitionmanager.audittraillocation=
+domainmodel.mdsstoragedefinitionmanager.databaseenabled=false
+domainmodel.mdsstoragedefinitionmanager.datasetstoredatasource=MacroPlanner
+domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=true
+domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false
+domainmodel.mdsstoragedefinitionmanager.dbformat=Legacy
+domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
+#domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
+domainmodel.mdsstoragedefinitionmanager.driver=OCI
+domainmodel.mdsstoragedefinitionmanager.dssfilesystemenabled=false
+domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
+domainmodel.mdsstoragedefinitionmanager.maxtablename=0
+domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_it
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otdit
+domainmodel.mdsstoragedefinitionmanager.password=1 2A801D084589485925DA39115D5C7855 b91e3007-e230-4ef5-833e-a07edfc8903c
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.groupname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.hostname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.idescription=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.password=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.timeout=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.username=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.groupname=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.idescription=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.password=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.timeout=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.username=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.groupname=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.idescription=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.password=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.username=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.groupname=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.idescription=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.url=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.encodingstrategy=UseSameAsRequest
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.exporttzoffset=false
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.forssl=false
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.groupname=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.idescription=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.securecommunication.protocols=TLSv1,TLSv1.1,TLSv1.2
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.timezone=GMT
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.useoslocaltimezone=true
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.groupname=
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.idescription=
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.url=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.groupname=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.idescription=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.url=
+domainmodel.soapserverinterfacedefinition.interface.utf=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.utf.groupname=
+domainmodel.soapserverinterfacedefinition.interface.utf.idescription=
+user=template:user
+user.increasestartofplanning=false
+user.sizingparameter=false
\ No newline at end of file
diff --git a/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties b/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
index 2463c24..b756608 100644
--- a/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
+++ b/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
@@ -454,10 +454,50 @@
 domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sendingcontentcharset=UTF-8
 domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sockettimeout=0
 domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.trustmanagername=Q3DSpace
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint.outboundrequesttimeout=60
 domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
 domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.connectiongroupname=SERVER
 domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.integratorid=Q3DSpace
 domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver=template:domainmodel.integratorconfig.restendpoint
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationparam1=
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationparam2=
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationtype=None
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.connectiontimeout=0
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.contenttype=JSON
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.enablehttpmessagelogging=true
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.includerawcontent=false
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.maxconnections=10
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.passonvalidationerrors=false
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.portnumber=8080
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.proxyportnumber=0
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.receivecontentcharset=ASCII
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.requesttimeout=60
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.restschemaurl="C:\\Users\\hongjli\\Desktop\\integratorrestexample\\openapi.yaml"
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.sendingcontentcharset=utf-8
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.sockettimeout=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial=template:domainmodel.integratorconfig.restendpoint
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationparam1=
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationparam2=
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationtype=None
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.connectiontimeout=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.contenttype=JSON
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.enablehttpmessagelogging=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.includerawcontent=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.maxconnections=10
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.passonvalidationerrors=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.portnumber=8080
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.proxyportnumber=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.receivecontentcharset=ASCII
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.requesttimeout=60
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.restschemaurl="C:\\Users\\hongjli\\Desktop\\integratorrestexample\\openapi.yaml"
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.sendingcontentcharset=utf-8
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.sockettimeout=0
 domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
 domainmodel.mdsstoragedefinitionmanager.audittrailenabled=false
 domainmodel.mdsstoragedefinitionmanager.audittraillocation=
@@ -475,11 +515,11 @@
 domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
 domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
 domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_jtmb
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=totddb
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
-domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otd
-domainmodel.mdsstoragedefinitionmanager.password=1 65BA9039C6C6A82BFEAA7408A8F96867 d5a0fc9a-a372-4807-9f03-34bcf85e582d
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=OTDJTMBUSER
+domainmodel.mdsstoragedefinitionmanager.password=1 463752FBAC1C9172263ADBF875F4CBF3 d5a0fc9a-a372-4807-9f03-34bcf85e582d
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetname=

--
Gitblit v1.9.3