From 2e55c32ab671ce5e4a5d1c713fac74ae0b2724e6 Mon Sep 17 00:00:00 2001
From: yypsybs <yypsybs@foxmail.com>
Date: 星期二, 10 十月 2023 18:37:18 +0800
Subject: [PATCH] Merge branch 'dev' into dev_yx

---
 _Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl                                                                                   |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def                                          |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def               |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def                                                      |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def                 |   19 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                                                               |   31 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def                  |    7 
 _Main/UI/MacroPlannerWebApp/Views/面板拉料_集团操作.vw                                                                                                 | 1471 ++++++++++++++++++
 _Main/UI/MacroPlannerWebApp/Views/Test.vw                                                                                                      |  525 ------
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def                                                                     |    8 
 _Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl                                                                                            |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder#682.def                                                 |   15 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl                                                              |   31 
 _Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Order/Response_OnCreated.def                                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_Panel391.def                                                                      |   24 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetProduct_MP.qbl                                                                         |   17 
 _Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/_ROOT_Component_FrmErrorLogs.def                                                            |    3 
 _Main/BL/Type_FillingCapacityOrder/Attribute_CurrencyID.qbl                                                                                    |    7 
 _Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl                                                                                     |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def                                                    |    2 
 _Main/UI/MacroPlannerWebApp/Views/年度产销复盘.vw                                                                                                    |  777 +++++++++
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl                                                                               |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def                                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def                                         |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def       |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def                                                |   15 
 _Main/UI/MacroPlannerWebApp/Views/面板拉料_各事业部操作.vw                                                                                               |   94 +
 _Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl                                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def                                                      |   41 
 _Main/BL/Type_Forecast/StaticMethod_DoSync.qbl                                                                                                 |    5 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetUnitOfMeasure_MP.qbl                                                                   |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def                                                |   15 
 _var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties                                                                            |    2 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetStockingPoing_MP.qbl                                                                   |   17 
 _Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl                                                                               |  181 ++
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl                                                                     |   45 
 _Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl                                                                          |   36 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct#844.def                                                               |   14 
 _Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl                                                                                    |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def                     |   24 
 _Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnOk_OnClick.def                                         |    2 
 _Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl                                                                                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def                                        |    1 
 _Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl                                                                              |   12 
 _Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl                                                                                         |   18 
 _Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl                                                                                  |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def                                           |   10 
 _Main/BL/Type_FillingCapacityOrder/Attribute_UnitOfMeasure_MPID.qbl                                                                            |    7 
 _Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl                                                                                        |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def                                     |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct#1.def                                                      |   28 
 _Main/UI/MacroPlannerWebApp/Views/对接ERP进行PR释放.vw                                                                                               |  168 ++
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def                        |    5 
 _Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Response_Panel391_Button655_OnClick.def                                                     |   39 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def        |   16 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetSalesSegment_MP.qbl                                                                    |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_List710.def                                                                       |    2 
 _Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl                                                                                    |   53 
 _Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl                                                                         |   23 
 _Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl                                                                   |   30 
 _Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl                                                                                |   58 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def                                           |   35 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def                                 |    5 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def                                                         |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def                                      |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def                                                      |   78 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def                                                        |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def                |    7 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl                                                                       |    9 
 _Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderReverseOrAuthorize.qbl                                                                      |    2 
 _Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl                                                                          |  101 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def                              |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def                   |    3 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl                                                                           |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def                                                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def                                                 |   41 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def |   16 
 _Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl                                                                                         |    4 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl                                                                  |   28 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl                                                                                     |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2#456.def                                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def                            |    6 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def                             |   14 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetCurrency_MP.qbl                                                                        |   16 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def |   16 
 /dev/null                                                                                                                                      |   20 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                         |    8 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl                                                                      |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def                |    7 
 103 files changed, 3,998 insertions(+), 742 deletions(-)

diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
index b327f63..226f832 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
@@ -14,8 +14,24 @@
   [*
     numberOfLayers++;
     //info( "鐩爣鏃堕棿锛�", targetDate.Format( "Y-M2-D2" ) );
-    info( pisp.Name() );
+    //info( pisp.Name() );
     traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, pispippl.Start().Date() = targetDate ) {
+      //info( "鏄惁鏈変緵搴旓細", pispippl.NewSupply( relsize ) > 0, "    搴撳瓨锛�", pispippl.InventoryLevelEnd() );
+      if ( numberOfLayers <> 1 and pispippl.NewSupply( relsize ) = 0 ) {
+        previous := pispippl.PreviousPlanningPISPIP().astype( ProductInStockingPointInPeriodPlanningLeaf );
+        if ( not previous.Period_MP().IsHistorical() ) {
+          previousDate := previous.Start().Date();
+          CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
+                                                           pisp,
+                                                           previousDate,
+                                                           carrcs,
+                                                           numberOfLayers,
+                                                           firstLevelSupply,
+                                                           currentLayerDependentDemandQuantity
+                                                          );
+        }
+      } 
+      
       traverse ( pispippl, NewSupply, ns, ns.Quantity() > 0 ) {
         if ( numberOfLayers = 1 ) {
           firstLevelSupply := ns;
@@ -24,7 +40,7 @@
         ontype( ns.PeriodTask_MP() ) {
           PeriodTaskOperation as pto : {
     //        info( "Operation鍛ㄦ湡浠诲姟..." );     
-            traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) {
+            traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd, dd.Quantity() > 0 ) {
               if ( numberOfLayers = 1 ) {
                 currentLayerDependentDemandQuantity := ns.Quantity();
               }
@@ -56,8 +72,8 @@
                                                         ModuleMeasurementUnit := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
                                                         ModuleBase            := guard( firstLevelSupply.PeriodTask_MP().astype( PeriodTaskOperation ).Operation().UnitID(), "杞﹂亾杩愯緭" ),
                                                         Division              := carrc.Division(),
-                                                        RequirementDate       := ns.Start().Date(),
-                                                        Date                  := ns.Start().Date(),
+                                                        RequirementDate       := firstLevelSupply.Start().Date(),
+                                                        Date                  := firstLevelSupply.Start().Date(),
                                                         Description           := "",
                                                         ID                    := OS::GenerateGUIDAsString(),
                                                         ProductID             := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
@@ -67,7 +83,7 @@
                                                        );
                                                         
             }
-            info( "-----------------------------------------------------------------------------------------------------------------" );
+            //info( "-----------------------------------------------------------------------------------------------------------------" );
           }
           
           PeriodTaskLaneLeg as ptll : {
@@ -76,7 +92,7 @@
     //        info( "灞傛暟锛�", numberOfLayers,"    褰撳墠渚涘簲鐨刾isp锛�", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    鎬讳緵搴斿�硷細", ns.Quantity(), "    闇�瑕佷緵搴斿�硷細", currentLayerDependentDemandQuantity,
     //              "    褰撳墠闇�姹俻isp锛�", targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    闇�姹傚�硷細", currentLayerDependentDemandQuantity );
     //        info( "LaneLeg鍛ㄦ湡浠诲姟..." );
-            info( "-----------------------------------------------------------------------------------------------------------------" );
+            //info( "-----------------------------------------------------------------------------------------------------------------" );
             CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
                                                              targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
                                                              targetDate,
diff --git a/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl b/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl
index 170d328..4994e49 100644
--- a/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl
+++ b/_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl
@@ -3,7 +3,8 @@
 StaticMethod DoSync (
   MacroPlan macroPlan,
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -12,6 +13,6 @@
     //info( "Forecast Finished, Start CustomerOrder Data Broker" );
     //macroPlan.Broker_OTD_CustomerOrder().Execute();
     info( "CustomerOrder Data Broker Finished, Start CustomerOrder Mapping" );
-    macroPlan.MappingCustomerOrderData( businessTypes,globalOTDTable );
+    macroPlan.MappingCustomerOrderData( businessTypes,globalOTDTable, organcodelist );
   *]
 }
diff --git a/_Main/BL/Type_FillingCapacityOrder/Attribute_CurrencyID.qbl b/_Main/BL/Type_FillingCapacityOrder/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..5a202bb
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414502.0.397320037][414502.0.397320036][414502.0.397320038]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FillingCapacityOrder/Attribute_UnitOfMeasure_MPID.qbl b/_Main/BL/Type_FillingCapacityOrder/Attribute_UnitOfMeasure_MPID.qbl
new file mode 100644
index 0000000..938000c
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/Attribute_UnitOfMeasure_MPID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasure_MPID
+{
+  #keys: '3[414502.0.397254634][414502.0.397254633][414502.0.397254635]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl
new file mode 100644
index 0000000..c40a89b
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateCustomOrder (
+  MacroPlan macroPlan,
+  FillingCapacityOrder fillingCapacityOrder,
+  Real quantity
+) as CustomerOrder
+{
+  TextBody:
+  [*
+    targetProduct_MP := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = fillingCapacityOrder.ProductID() );
+    targetStockingPoint_MP := select( macroPlan, StockingPoint_MP, tempSPMP, tempSPMP.ID() = fillingCapacityOrder.StockingPointID() );
+    
+    targetCustomerOrder := CustomerOrder::Create( targetProduct_MP,
+                                                  targetStockingPoint_MP,
+                                                  OS::GenerateGUIDAsString(),
+                                                  fillingCapacityOrder.OrderDate(),
+                                                  quantity,
+                                                  0.0,
+                                                  "Normal",
+                                                  fillingCapacityOrder.SalesSegmentName(),
+                                                  fillingCapacityOrder.CurrencyID(),
+                                                  fillingCapacityOrder.UnitOfMeasureName(),
+                                                  false,
+                                                  fillingCapacityOrder.Customer(),
+                                                  fillingCapacityOrder.CustomerID(),
+                                                  "",
+                                                  "",
+                                                  true,
+                                                  true,
+                                                  false
+                                                 );
+    
+    return targetCustomerOrder;
+  *]
+}
diff --git a/_Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl
new file mode 100644
index 0000000..9dfb713
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OrderOffset (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    needOffsetFillingCapacityOrders := selectset( macroPlan, FillingCapacityOrder, tempFCO, tempFCO.State() = "鏈啿鍑�" or tempFCO.State() ="" );
+    
+    traverse ( needOffsetFillingCapacityOrders, Elements, fco, fco.Quantity() > 0 ) {
+      originalCounterSignedOrder := select( macroPlan, SalesDemand.astype( CustomerOrder ), tempCO, tempCO.CustomerName() = fco.Customer()  and 
+                                                                                                    tempCO.ProductID()    = fco.ProductID() and 
+                                                                                                    tempCO.OrderTag()     = "鍙嶇"
+                                           );
+      if ( fco.OrderType() = "鍙嶇" ) {
+        if ( isnull( originalCounterSignedOrder ) ) {
+          customerOrder := FillingCapacityOrder::CreateCustomOrder( macroPlan, fco, fco.Quantity() );
+          customerOrder.OrderTag( "鍙嶇" );
+        } else {
+          originalCounterSignedOrder.Quantity( originalCounterSignedOrder.Quantity() + fco.Quantity() );
+        }
+      } else if ( fco.OrderType() = "鎺堟潈" ) {
+        originalAuthorizedOrder := select( macroPlan, SalesDemand.astype( CustomerOrder ), tempCO, tempCO.CustomerName() = fco.Customer()  and 
+                                                                                                   tempCO.ProductID()    = fco.ProductID() and 
+                                                                                                   tempCO.OrderTag()     = "鎺堟潈"
+                                          );
+        if ( isnull( originalCounterSignedOrder ) ) {
+          if ( isnull( originalAuthorizedOrder ) ) {
+            customOrder := FillingCapacityOrder::CreateCustomOrder( macroPlan, fco, fco.Quantity() );
+            customOrder.OrderTag( "鎺堟潈" );
+          } else {
+            originalAuthorizedOrder.Quantity( originalAuthorizedOrder.Quantity() + fco.Quantity() );
+          }
+        } else {
+          numberOfReverseSignatures := originalCounterSignedOrder.Quantity();
+          newNumberOfAuthorizations := ifexpr( ( fco.Quantity() - numberOfReverseSignatures ) >= 0, fco.Quantity() - numberOfReverseSignatures, 0 );
+          numberOfReverseSignatures := ifexpr( ( fco.Quantity() - numberOfReverseSignatures ) >= 0, 0, numberOfReverseSignatures - fco.Quantity() );
+          
+          if ( numberOfReverseSignatures >= 0 ) {
+            originalCounterSignedOrder.Quantity( numberOfReverseSignatures );
+          } else {
+            originalCounterSignedOrder.Delete();
+          }
+          
+          if ( newNumberOfAuthorizations > 0 ) {
+            if ( isnull( originalAuthorizedOrder ) ) {
+              customerOrder := FillingCapacityOrder::CreateCustomOrder( macroPlan, fco, newNumberOfAuthorizations );
+              customerOrder.OrderTag( "鎺堟潈" );
+            } else {
+              originalAuthorizedOrder.Quantity( originalAuthorizedOrder.Quantity() + newNumberOfAuthorizations );
+            }
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl b/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl
index 1fdba27..e952521 100644
--- a/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl
+++ b/_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl
@@ -3,7 +3,8 @@
 StaticMethod DoSync (
   MacroPlan macroPlan,
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -12,6 +13,6 @@
     //info( "OperationCost Finished, Start Forecast Data Broker" );
     //macroPlan.Broker_OTD_Forecast().Execute();
     info( "Forecast Data Broker Finished, Start Forecast Mapping" );
-    macroPlan.MappingForecastData( businessTypes,globalOTDTable );
+    macroPlan.MappingForecastData( businessTypes,globalOTDTable, organcodelist );
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
index 31936e3..31f8b7b 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
@@ -89,31 +89,31 @@
     if ( isStockingPoint_MP ) {
       this.Global_MappingStockingPoint_MP( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "StockingPoint_MP", executionUser );
-      this -> OnException( this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), this );
+    //  this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception() -> Global_MappingStockingPoint_MP::OnException( this );
     }
     
     if ( isCurrency_MP ) {
       this.Global_MappingCurrency_MP( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "Currency_MP", executionUser );
-      this -> OnException( this -> Global_MappingCurrency_MP::CreateByAPI() -> Exception(), this );
+    //  this -> Global_MappingCurrency_MP::CreateByAPI() -> Exception() -> Global_MappingCurrency_MP::OnException( this );
     }
     
     if ( isCurrencyRate_MP ) {
       this.Global_MappingCurrencyRate_MP( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "CurrencyRate_MP", executionUser );
-      this -> OnException( this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), this );
+    //  this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception() -> Global_MappingCurrencyRate_MP::OnException( this );
     }
     
     if ( isLane ) {
       this.Global_MappingLane( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "Lane", executionUser );
-      this -> OnException( this -> Global_MappingLane::CreateByAPI() -> Exception(), this );
+    //  this -> Global_MappingLane::CreateByAPI() -> Exception() -> Global_MappingLane::OnException( this );
     }
     
     if ( isLaneLeg ) {
       this.Global_MappingLaneLeg( relflush );
       Global_BrokerExecuteLog::CreateInOperation( this, "LaneLeg", executionUser );
-      this -> OnException( this -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), this );
+    //  this -> Global_MappingLaneLeg::CreateByAPI() -> Exception() -> Global_MappingLaneLeg::OnException( this );
     }
   *]
 }
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
index c1d4c3f..ff774ec 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -2,7 +2,9 @@
 #parent: #root
 Method SynchronizeDataToMacroPlan (
   MacroPlan macroPlan,
-  Boolean isUnitOfMeasure_MP
+  String executionUser,
+  Boolean isUnitOfMeasure_MP,
+  Boolean isCustomOrder
 )
 {
   TextBody:
@@ -10,5 +12,9 @@
     if ( isUnitOfMeasure_MP ) {
       Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
     }
+    
+    if ( isCustomOrder ) {
+      Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+    }
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..1775209
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "CurrencyRate_MP", "璐у竵姹囩巼鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..1ee262a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "Currency_MP", "璐у竵鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl
new file mode 100644
index 0000000..f07437b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_CreateCustomOrder.qbl
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateCustomOrder (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    traverse ( globalOTDTable, Global_MappingCustomOrder, gmco ) {
+      targetProduct_MP := Global_MappingCustomOrder::GetProduct_MP( macroPlan, gmco );
+      targetStockingPoint_MP := Global_MappingCustomOrder::GetStockingPoing_MP( macroPlan, gmco );
+      Global_MappingCustomOrder::GetSalesSegment_MP( macroPlan, gmco );
+      Global_MappingCustomOrder::GetCurrency_MP( macroPlan, gmco );
+      Global_MappingCustomOrder::GetUnitOfMeasure_MP( macroPlan, gmco );
+      
+      targetCustomerOrder := CustomerOrder::Create( targetProduct_MP,
+                                                    targetStockingPoint_MP,
+                                                    gmco.ID(),
+                                                    gmco.OrderDate(),
+                                                    gmco.Quantity(),
+                                                    gmco.Price(),
+                                                    "Normal",
+                                                    gmco.SalesSegmentName(),
+                                                    gmco.CurrencyID(),
+                                                    gmco.UnitOfMeasureName(),
+                                                    false,
+                                                    gmco.Customer(),
+                                                    gmco.CustomerID(),
+                                                    gmco.OrderID(),
+                                                    gmco.OrderLineID(),
+                                                    true,
+                                                    true,
+                                                    false
+                                                   );
+      targetCustomerOrder.BusinessType( gmco.BusinessType() );
+      targetCustomerOrder.OrderType( gmco.OrderType() );
+      targetCustomerOrder.IsAvailable( gmco.IsAvailable() );
+      targetCustomerOrder.ProductGrade( gmco.ProductGrade() );
+      targetCustomerOrder.SegmentPriority( gmco.SegmentPriority() );
+      targetCustomerOrder.SheetProfitability( gmco.SheetProfitability() );
+      targetCustomerOrder.OrderTime( gmco.OrderTime() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetCurrency_MP.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetCurrency_MP.qbl
new file mode 100644
index 0000000..f4d504d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetCurrency_MP.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetCurrency_MP (
+  MacroPlan macroPlan,
+  Global_MappingCustomOrder gmco
+)
+{
+  TextBody:
+  [*
+    isExists := exists( macroPlan, Currency_MP, tempCMP, tempCMP.ID() = gmco.CurrencyID() );
+    
+    if ( not isExists ) {
+      Currency_MP::Create( gmco.CurrencyID(), macroPlan, gmco.CurrencyID(), "", false, false );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetProduct_MP.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetProduct_MP.qbl
new file mode 100644
index 0000000..ba6e469
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetProduct_MP.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetProduct_MP (
+  MacroPlan macroPlan,
+  Global_MappingCustomOrder gmco
+) as Product_MP
+{
+  TextBody:
+  [*
+    targetProduct_MP := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = gmco.ProductID() );
+    if ( isnull( targetProduct_MP ) ) {
+      targetProduct_MP := Product_MP::Create( gmco.ProductID(), macroPlan, null( Product_MP ), gmco.ProductID(), null( SupplyChainView ), 0, 0, false );
+    }
+    
+    return targetProduct_MP;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetSalesSegment_MP.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetSalesSegment_MP.qbl
new file mode 100644
index 0000000..2e2e473
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetSalesSegment_MP.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegment_MP (
+  MacroPlan macroPlan,
+  Global_MappingCustomOrder gmco
+)
+{
+  TextBody:
+  [*
+    isExists := exists( macroPlan, SalesSegment_MP, tempSSMP, tempSSMP.Name() = gmco.SalesSegmentName() );
+    
+    if ( not isExists ) {
+      SalesSegment_MP::Create( macroPlan, "", gmco.SalesSegmentName(), 0, false );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetStockingPoing_MP.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetStockingPoing_MP.qbl
new file mode 100644
index 0000000..37d8b42
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetStockingPoing_MP.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPoing_MP (
+  MacroPlan macroPlan,
+  Global_MappingCustomOrder gmco
+) as StockingPoint_MP
+{
+  TextBody:
+  [*
+    targetStockingPoint_MP := select( macroPlan, StockingPoint_MP, tempSPMP, tempSPMP.ID() = gmco.StockingPointID() );
+    if ( isnull( targetStockingPoint_MP ) ) {
+      targetStockingPoint_MP := StockingPoint_MP::Create( gmco.StockingPointID(), macroPlan, null( Unit ), gmco.StockingPointID(), null( SupplyChainView ), 0, 0, false );
+    }
+    
+    return targetStockingPoint_MP;
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetUnitOfMeasure_MP.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetUnitOfMeasure_MP.qbl
new file mode 100644
index 0000000..b85c24d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_GetUnitOfMeasure_MP.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetUnitOfMeasure_MP (
+  MacroPlan macroPlan,
+  Global_MappingCustomOrder gmco
+)
+{
+  TextBody:
+  [*
+    isExists := exists( macroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = gmco.UnitOfMeasureName() );
+    
+    if ( not isExists ) {
+      UnitOfMeasure_MP::Create( macroPlan, gmco.UnitOfMeasureName(), false, false );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..9a69cf5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name        := "鍚屾璁㈠崟鏁版嵁",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
+                                                                      );
+                                            
+      
+    try {
+      Global_MappingCustomOrder::CreateCustomOrder( globalOTDTable, macroPlan );
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..2f719e0
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "Lane", "杞﹂亾鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..25ff0bc
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "LaneLeg", "杞﹂亾鏀灦鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..2a6d364
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_OnException.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody: 'globalOTDTable.SettingFailureDetails( e.ErrorNumber(), e.Message(), "StockingPoint_MP", "搴撳瓨鎺ュ彛鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl
new file mode 100644
index 0000000..ecbe488
--- /dev/null
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_Forecast.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateShowData_Forecast (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    businessTypeColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "浜嬩笟閮�" );
+    idColumn                 := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "ID" );
+    productIDColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "浜у搧缂栫爜" );
+    
+    i := 1;
+    traverse ( globalOTDTable, Global_MappingForecast, gmf ) {
+      gloabal_ShowRow := globalOTDTable.Global_ShowRow( relnew, RowNr := i );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmf.BusinessType(), businessTypeColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmf.ID(), idColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmf.ProductID(), productIDColumn, gloabal_ShowRow );
+           
+      i++;                                                             
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl
new file mode 100644
index 0000000..7bca228
--- /dev/null
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_GenerateDataThroughReflection.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateDataThroughReflection (
+  GlobalOTDTable globalOTDTable,
+  String className
+)
+{
+  TextBody:
+  [*
+    //columnIndex := 0;
+    //rowIndex    := 0;
+    //
+    //traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, gmuommp ) {
+    //  gloabal_ShowRow := globalOTDTable.Global_ShowRow( relnew, RowNr := rowIndex );
+    //  traverse ( typeof( Global_MappingUnitOfMeasure_MP ), MdlAttrElements, mae ) {
+    //    targetReflectionAttribute := Reflection::FindAttribute( className, mae.Name() );
+    //    if ( not isnull( targetReflectionAttribute ) ) {
+    //      targetsGlobal_ShowColumn := select( globalOTDTable, Global_ShowColumn, tempGSC, tempGSC.ColumnName() = mae.Name() );
+    //      if ( isnull( targetsGlobal_ShowColumn ) ) {
+    //        targetsGlobal_ShowColumn := Global_ShowColumn::CreateColumn( globalOTDTable, columnIndex, mae.Name() );
+    //        columnIndex++;
+    //      }
+    //      
+    //      Global_ShowCell::SetColumnsAndRows( globalOTDTable, targetReflectionAttribute.Get( gmuommp )., targetsGlobal_ShowColumn, gloabal_ShowRow );
+    //    }
+    //  }
+    //  rowIndex++;
+    //}
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
index 7eebedc..1753baf 100644
--- a/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
@@ -10,5 +10,13 @@
     if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_CustomOrder" ) {
       Global_ShowCell::CreateShowData_CustomOrder( globalOTDTable );
     }
+    
+    if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_Forecast" ) {
+    //  Global_ShowCell::CreateShowData_Forecast( globalOTDTable );
+    }
+    
+    if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_UnitOfMeasure_MP" ) {
+      Global_ShowCell::GenerateDataThroughReflection( globalOTDTable, "Global_MappingUnitOfMeasure_MP" );
+    }
   *]
 }
diff --git a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
index 850417c..2f75b5f 100644
--- a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
+++ b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
@@ -24,10 +24,10 @@
     strMsg :="";
     
     try{
-      if( Owner.MappingBOM(relsize )>0)
+      if( GlobData.Global_MappingOperationBOM(relsize )>0)
       {
         // 寰楀埌涓嬩竴绾ф暟鎹�
-        AllData:= selectset( GlobData, Global_MappingOperationBOM,object,object.ComponentCode()=ParentSKU);
+        AllData:= selectset( GlobData, Global_MappingOperationBOM,object,object.ProductCode()=ParentSKU);
         ObjProduct := null( Product_MP,constcontent );
         ObjUnit := null( Unit,constcontent );
         MaterialType:="";
@@ -51,24 +51,24 @@
           traverse( AllData,Elements,Obj,not isnull( Obj))
           {
             // 寰楀埌褰撳墠宸插瓨鍦ㄧ殑鐗╂枡淇℃伅锛堣鍗旾D + SKU锛�
-            ObjMaterial := select( Owner,H_MaterialInfo,ObjM,ObjM.ForecastID()=ForecastId and ObjM.SKU()=Obj.ProductCode());
+            ObjMaterial := select( Owner,H_MaterialInfo,ObjM,ObjM.ForecastID()=ForecastId and ObjM.SKU()=Obj.ComponentCode());
             if( isnull( ObjMaterial))
             {
               // 鐗╂枡绫诲瀷
               MaterialType := Obj.ProductType();
               // 寰楀埌鐗╂枡淇℃伅
-              ObjProduct:= H_FunctionClass::SM_GetProductInfo(Owner,Obj.ProductCode());
+              ObjProduct:= H_FunctionClass::SM_GetProductInfo(Owner,Obj.ComponentCode());
               if( not isnull( ObjProduct))
               {
                 MaterialType:= ObjProduct.ParentID();
                 MaterialName:=ObjProduct.Name();
               }
-              ObjUnit:= H_FunctionClass::SM_GetUnitBySKU( Owner,Obj.ProductCode());
+              ObjUnit:= H_FunctionClass::SM_GetUnitBySKU( Owner,Obj.ComponentCode());
               if( not isnull( ObjUnit))
               {
                 StockPoint:= ObjUnit.Name();
               }
-              Owner.H_MaterialInfo(relnew,ParentSKU := Obj.ComponentCode(),SKU := Obj.ProductCode(),ForecastID := ForecastId,OrgCode := Obj.OrganCode(),VCode := VCode
+              Owner.H_MaterialInfo(relnew,ParentSKU := ParentSKU,SKU := Obj.ComponentCode(),ForecastID := ForecastId,OrgCode := Obj.OrganCode(),VCode := VCode
                                     ,ID := H_FunctionClass::SM_GenerateID( "MI"),MaterialType := MaterialType,NeedDate := NDate
                                     ,NeedQty := [Number](ProductQty/NRate*NComponentsUsed).Round( 0),Unit := Obj.UnitOfMeasureName()
                                     ,StockPoint :=StockPoint,MaterialName := MaterialName );
diff --git a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl
new file mode 100644
index 0000000..4379bdc
--- /dev/null
+++ b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedgingEx.qbl
@@ -0,0 +1,181 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SM_OrderHedgingEx (
+  MacroPlan Owner,
+  String Operator
+) as owning JSON
+{
+  Description: '濉骇鍚庡啿鍑�'
+  TextBody:
+  [*
+    /*******************************濉骇鍚庤鍗曞啿鍑�***********************
+    *鍑芥暟鍚嶇О锛歋M_OrderHedgingEx
+    *鍒� 寤� 浜猴細yunying
+    *鍒涘缓鏃堕棿锛�2023-09-27
+    *鎻�    杩帮細濉骇鍚庤鍗曞啿鍑�,濉骇鍚庣殑琛細Owner.FillingCapacityOrder
+    *鍙�    鏁帮細Operator 鎿嶄綔浜�
+    *杩� 鍥� 鍊硷細JSON {Status: true 鎴愬姛/false 澶辫触,Msg:"鎻愮ず娑堟伅",Count: 0锛堝啿鍑忚鍗曠殑鏁伴噺锛墋
+    *******************************************************************/
+    // 鍒濆鍖栫粨鏋�
+    bStatus := false;
+    strMsg :="";
+    // 鍐插噺鎴愬姛鏉℃暟
+    nCount:=0;
+    try
+    {
+      if(not isnull( Owner))
+      {
+        // 鑾峰彇鎿嶄綔璁㈠崟
+        NewOrders := selectset( Owner,FillingCapacityOrder,Obj,Obj.State() = "鏈啿鍑�" or Obj.State() ="");
+        if(NewOrders.Size()>0)
+        {
+          // 鏂拌鍗曚笌鍘熻鍗曞啿鍑�
+          traverse( NewOrders,Elements,Obj)
+          {
+            if( (Obj.OrderType()="鍙嶇" or Obj.OrderType()="鎺堟潈") and Obj.Quantity()>0 )
+            {
+              // 寰楀埌鎿嶄綔鐩稿叧鐨勫弽绛捐鍗�
+              ROrders:= select( Owner,SalesDemand.astype( CustomerOrder ),ObjOrder,
+                                   ObjOrder.CustomerName() = Obj.Customer() 
+                                   and ObjOrder.ProductID()=Obj.ProductID() 
+                                   and ObjOrder.OrderTag() ="鍙嶇"
+                                   );
+              // 鍙嶇鏃犲啿鍑忥紝鐩存帴鍚戣鍗曚腑鍔犲叆鍙嶇鏁版嵁
+              if( Obj.OrderType()="鍙嶇")
+              {
+                if( not isnull( ROrders))
+                {
+                  ROrders.Quantity(ROrders.Quantity()+Obj.Quantity());
+                }
+                else
+                {
+                  // 鏂板璁㈠崟
+                  error( "----------------璇峰疄鐜版柊澧炲弽绛捐鍗曞姛鑳戒唬鐮�---------------------");
+                  // 璁㈠崟蹇呰淇℃伅濡備笅锛�
+                  // OrderTag = "鍙嶇"
+                  // Quantity = Obj.Quantity()
+                  // 鍏朵粬淇℃伅缁ф壙褰撳墠鐨勮鍗�
+                }
+              }
+              else if(Obj.OrderType()="鎺堟潈")
+              {
+                // 寰楀埌鎿嶄綔鐩稿叧鐨勬巿鏉冭鍗�
+                AOrders:= select( Owner,SalesDemand.astype( CustomerOrder ),ObjOrder,
+                                   ObjOrder.CustomerName() = Obj.Customer() 
+                                   and ObjOrder.ProductID()=Obj.ProductID() 
+                                   and ObjOrder.OrderTag() ="鎺堟潈"
+                                   );
+                if( not isnull( ROrders))
+                {
+                  // 褰撳墠鍙嶇鏁伴噺
+                  RQty:=ROrders.Quantity();
+                  // 璁$畻鏂扮殑鎺堟潈鏁伴噺
+                  AQty:= Obj.Quantity() - ROrders.Quantity();
+                  // 鎺堟潈澶т簬0锛屽弽绛捐鍐叉病,鍚﹀垯鎺堟潈琚啿锛屽弽绛剧瓑浜嶢Qty鐨勭粷瀵瑰��
+                  if( AQty>=0)
+                  {
+                    RQty:=0;
+                  }
+                  else
+                  {
+                    RQty :=ROrders.Quantity() - Obj.Quantity();
+                    AQty :=0;
+                  }
+                  // 鏇存柊鍙嶇鏁版嵁
+                  if( RQty>=0)
+                  {
+                    ROrders.Quantity(RQty);
+                  }
+                  else
+                  {
+                    ROrders.Delete();
+                  }
+                  // 鏇存柊鎺堟潈鏁版嵁
+                  if(AQty>0 )
+                  {
+                    if( not isnull( AOrders))
+                    {
+                      AOrders.Quantity(AOrders.Quantity()+AQty);
+                    }
+                    // 鏂板鎺堟潈璁㈠崟
+                    // error( "----------------璇峰疄鐜版柊澧炴巿鏉冭鍗曞姛鑳戒唬鐮�---------------------");
+                    customOrder := CustomerOrder::Create( select( Owner, Product_MP, tmepPMP, tmepPMP.ID() = Obj.ProductID() ),
+                                                          select( Owner, StockingPoint_MP, tempSPMP, tempSPMP.ID() = Obj.StockingPointID() ),
+                                                          OS::GenerateGUIDAsString(),
+                                                          Obj.OrderDate(),
+                                                          AQty,
+                                                          0.0,
+                                                          "Normal",
+                                                          Obj.SalesSegmentName(),
+                                                          Obj.CurrencyID(),
+                                                          Obj.UnitOfMeasureName(),
+                                                          false,
+                                                          Obj.Customer(),
+                                                          Obj.CustomerID(),
+                                                          "",
+                                                          "",
+                                                          true,
+                                                          true,
+                                                          false
+                                                         );
+                    customOrder.OrderTag( "鎺堟潈" );
+                    // 璁㈠崟蹇呰淇℃伅濡備笅锛�
+                    // OrderTag = "鎺堟潈"
+                    // Quantity = AQty
+                    // 鍏朵粬淇℃伅缁ф壙褰撳墠鐨勮鍗�  
+                  }
+                }
+                else
+                {
+                  // 灏嗘柊鎺堟潈鏁版嵁绱姞鍒拌鍗曚腑
+                  if( not isnull( AOrders))
+                  {
+                    AOrders.Quantity(AOrders.Quantity()+Obj.Quantity());
+                  }
+                  else
+                  {
+                    // 鏂板鎺堟潈璁㈠崟
+                    error( "----------------璇峰疄鐜版柊澧炴巿鏉冭鍗曞姛鑳戒唬鐮�---------------------");
+                    // 璁㈠崟蹇呰淇℃伅濡備笅锛�
+                    // OrderTag = "鎺堟潈"
+                    // Quantity = Obj.Quantity()
+                    // 鍏朵粬淇℃伅缁ф壙褰撳墠鐨勮鍗�
+                  }
+                }
+              }
+              // 鏇存柊鍐插噺鐘舵��
+              Obj.State("宸插啿鍑�");
+              nCount++;
+            }
+            else
+            {
+              // 鏃犳硶璇嗗埆鐨勭被鍨嬶紝鎴栨暟閲忎负0鏃舵殏涓嶅鐞�
+              //strMsg :="璁㈠崟绫诲瀷锛�" + Obj.OrderType() + "鏃犳硶鍐插噺锛�";
+            }
+          }
+          bStatus:=true;
+          strMsg :="濉骇鍚庡啿鍑忓畬鎴愶紒";
+        }
+        else
+        {
+          strMsg :="鏃犲彲鍐插噺鐨勬暟鎹紒";
+        }
+      }
+      else
+      {
+        strMsg :="鍔犺浇鏁版嵁澶辫触锛岃鍒涘缓鎴栭�夋嫨鍦烘櫙鍚庡啀鎿嶄綔锛�";
+      }
+    }
+    onerror
+    {
+      strMsg :="濉骇鍚庤鍗曞啿鍑忓彂鐢熼敊璇紝璇疯仈绯荤郴缁熺鐞嗗憳锛�";
+      // 璁板綍閿欒鏃ュ織
+    //  Owner.H_ErrorLogs(relnew,EClassName := "H_FunctionClass",EDateTime := DateTime::ActualGMTTime(),EFunctionName := "SM_OrderHedgingEx",
+    //                     DeveloperInformation :=  e.DeveloperInformation(),ErrorNr := e.ErrorNr(),DetailedInformation := e.DetailedInformation(),
+    //                     GeneralInformation := e.GeneralInformation());                
+    }
+    return JSON::Object().Add( "Status",bStatus)
+                         .Add( "Count",nCount)
+                         .Add( "Msg",strMsg).Build();
+  *]
+}
diff --git a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderReverseOrAuthorize.qbl b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderReverseOrAuthorize.qbl
index a74b90f..2b201ca 100644
--- a/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderReverseOrAuthorize.qbl
+++ b/_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderReverseOrAuthorize.qbl
@@ -39,7 +39,7 @@
         nReverseQtyNew :=0;   //璁$畻鍚庣殑鍙嶇鏁伴噺
         nAuthorizeQtyNew :=0; //璁$畻鍚庣殑鎺堟潈鏁伴噺
         nHaveForecastQty :=0; //鏈夐娴嬫暟閲�
-        nNoHaveForecastQty:=0;//浜旈娴嬫暟閲�
+        nNoHaveForecastQty:=0;//鏃犻娴嬫暟閲�
         // 鑾峰彇棰勬祴鏁伴噺锛堝鎴�+SKU+鏈堜唤 鐞嗚鏄病鏈夌墿鏂欓娴嬶級
         OrderForecast := select(Owner, H_OrderForecastRealQty , Obj, Obj.SKU() = SKU 
                                               and Obj.CustomCode() = CustomerCode 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
index a6f9a24..9385366 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -3,13 +3,13 @@
 Method MappingActualPISPIPData (
   Strings businessTypes,
   GlobalOTDTable globalOTDTable,
-  Boolean nuclear
+  Boolean nuclear,
+  Strings organcodelist
 )
 {
   TextBody:
   [*
     // renhao Aug-14-2023 (created)
-    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     listtodeal := selectset( globalOTDTable,
                              Global_MappingActualProductInStockingPointInPeriod,
                              actual,
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
index 9d01ece..da901cc 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingCustomerOrderData (
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   Description: 'ETL璁㈠崟棰勬祴'
@@ -14,7 +15,6 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listToDeal := selectset( globalOTDTable, 
                                  Global_MappingCustomOrder, 
                                  item, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
index 39675d3..4db0d6c 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -3,7 +3,8 @@
 Method MappingExternalSupplyData (
   Strings businessTypes,
   Boolean nuclear,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -11,7 +12,6 @@
     // renhao Aug-14-2023 (created)
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
     queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
-    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     listtodeal := selectset( globalOTDTable,
                              Global_MappingInventorySupply,
                              externalSupply, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
index 5fbb66c..1c79534 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingForecastData (
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   Description: 'ETL璁㈠崟棰勬祴'
@@ -14,7 +15,6 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, item.Quantity() > 0 );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listToDeal := selectset( globalOTDTable, 
                                  Global_MappingForecast, 
                                  item, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
index 663464c..208a5e8 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -4,7 +4,8 @@
   Strings businessTypes,
   Boolean isKeyProduct,
   Boolean createPurchaseSupplyMaterial,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -14,7 +15,6 @@
     if( isKeyProduct ) {
         keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�", item.ID() );
     }
-    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     bomList := selectsortedset(  globalOTDTable, Global_MappingOperationBOM, item,
                                  ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0, 
                                          true, 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
index 9a458dd..cdcd7f1 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingOperationCostData (
   GlobalOTDTable globalOTDTable,
-  Strings businesstypes
+  Strings businesstypes,
+  Strings organcodelist
 )
 {
   Description: 'Get operation cost data from operation mapping'
@@ -10,24 +11,21 @@
   [*
     // Administrator Aug-21-2023 (created)
     // list to deal
-    listtodeal := construct( structured[MappingOperation] );
+    listtodeal := construct( structured[Global_MappingOperation] );
     
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
-        listtodeal := selectset( this, MappingOperation, item, true );
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
-        listtodeal := selectset( this, 
-                                 MappingOperation, 
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, 
                                  item, 
                                  ( businesstypes.Find( item.BusinessType() ) <> -1 ) and 
                                  ( organcodelist.Find( item.OrganCode() ) >= 0 ) );
     }
     
     // Get the list to deal with max sequence number
-    listtodealwithmaxsn := construct( structured[MappingOperation] );
+    listtodealwithmaxsn := construct( structured[Global_MappingOperation] );
     traverse( listtodeal, Elements, item ){
-      maxsn := maxselect( this, 
-                          MappingOperation, 
+      maxsn := maxselect( globalOTDTable, Global_MappingOperation, 
                           moperation, 
                           moperation.OrganCode() = item.OrganCode(), 
                           moperation.ProductID() = item.ProductID(), 
@@ -47,26 +45,31 @@
       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();
+      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection()+"_" + [String]item.SequenceNumber();
       if( guard( item.Line(), "" ).Length() > 0 ) {
           id := id + "_" + item.Line();
         }
       operation := Operation::FindOperationTypeIndex( id );
-      account := Account_MP::FindByName( this, "Operation cost" );
-      isfromdb := false;
-      existoperationcost := OperationCost::FindOperationCostTypeIndex( id );
-      if( isnull( existoperationcost ) ){
-        connecteditem := select( this, 
-                                 MappingOperationCost, 
-                                 moperationcost, 
-                                 moperationcost.OrgCode() = item.OrganCode(), 
-                                 moperationcost.ProductID() = item.ProductID() );
-        cost := connecteditem.Cost();
-        lengthoftime := connecteditem.LengthOfTime();
-        start := connecteditem.Start();
-        timeunit := connecteditem.TimeUnit();
-        OperationCost::Create( id, operation, account, "Volume", start, timeunit, lengthoftime, cost, isfromdb );
-        }
+      if(not isnull(operation)){
+            account := Account_MP::FindByName( this, "Operating cost" );
+            isfromdb := false;
+            existoperationcost := OperationCost::FindOperationCostTypeIndex( id );
+            if( isnull( existoperationcost ) ){
+              connecteditem := select( globalOTDTable,
+                                       Global_MappingOperationCost,
+                                       moperationcost,
+                                       moperationcost.OrgCode() = item.OrganCode(),
+                                       moperationcost.ProductID() = item.ProductID() );
+              if( not isnull( connecteditem)){
+                  cost := connecteditem.Cost();
+                  lengthoftime := connecteditem.LengthOfTime();
+                  start := connecteditem.Start();
+                  timeunit := connecteditem.TimeUnit();
+                  OperationCost::Create( id, operation, account, "Volume", start, timeunit, lengthoftime, cost, isfromdb );
+                }
+    
+              }
       }
+    }
   *]
 }
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
index b09ed68..21238e0 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingOperationData (
   Strings businessTypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   TextBody:
@@ -11,7 +12,6 @@
     // 鑾峰彇鏈夊簭鐨勫緟澶勭悊璁板綍
     toDealList := construct( Global_MappingOperations ) ;
     if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item, 
                                        ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
                                        ( organcodelist.Find( item.OrganCode() ) >= 0 ), 
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
index 671fe30..712b51b 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 Method MappingUnitData (
   Strings businesstypes,
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  Strings organcodelist
 )
 {
   Description: 'Get unit data from operation mapping'
@@ -15,7 +16,6 @@
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
     } else {
-        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, 
     //                             businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
                                  ( businesstypes.Find( item.BusinessType() ) >= 0 ) and 
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index 875645b..5178d37 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -15,11 +15,26 @@
     // 甯佺鍜屽竵绉嶆眹鐜�
     //Currency_MP::CreateCurrencyFromJson( macroPlan, jsonDataRow );
     info( "Prepare to do sync" )
+    info( "Get organ code list" )
+    organcodelist := selectvalues( globalOTDTable, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
     if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
         traverse( businessTypes, Elements, item ) {
             info( "Business type : " + item )  
         }
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     }
+    else{
+      if( businessTypes.Size() = 0 ){
+        if( not isnull( selectset( globalOTDTable, BusinessType, b, b.BusinessTypeName() = "" ) ) ){
+          organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, organ.BusinessType().BusinessTypeName() = "", organ.OrganCodeName() );
+          }
+        }
+      }
+    
+    if( organcodelist.Size() = 0 ){
+      organcodelist := selectvalues( globalOTDTable, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
+      }
+    
     info( "KeyProduct : " + [String]isKeyProduct )
     info( "Create purchase supply material : " + [String]createPurchaseSupplyMaterial )
     
@@ -38,7 +53,7 @@
     //info( "BaseConversionFactor Finished, Start Operation Data Broker" );
     //macroPlan.Broker_OTD_Operation().Execute();
     info( "Operation Data Broker Finished, Start Unit Mapping" );
-    macroPlan.MappingUnitData( businessTypes ,globalOTDTable);
+    macroPlan.MappingUnitData( businessTypes ,globalOTDTable, organcodelist);
     
     // 搴撳瓨鐐�-3
     info( "Sales Segment Finished, Start Get StockingPoint From Api" )
@@ -82,11 +97,11 @@
     
     // 宸ヨ壓璺嚎 + BOM-9
     info( "Unit Finished, Start Operation Mapping" );
-    macroPlan.MappingOperationData( businessTypes ,globalOTDTable);  
+    macroPlan.MappingOperationData( businessTypes ,globalOTDTable, organcodelist );  
     //info( "Operation Finished, Start BOM Data Broker" );
     //macroPlan.Broker_OTD_BOM().Execute();
     info( "BOM Data Broker Finished, Start BOM Mapping" );
-    macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable );
+    macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
     
     //杞﹂亾淇℃伅-10
     info( "BOM Finished, Start Get Lanes From Api" );
@@ -118,26 +133,26 @@
     //info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
     //macroPlan.Broker_OTD_ActualPISPIP().Execute();
     info( "ActualPISPIP Data Broker Finished, Start ActualPISPIP Mapping" );
-    macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable,isKeyProduct );
+    macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable,isKeyProduct, organcodelist );
     
     // 鍦ㄩ�斿簱瀛�-14
     //info( "ActualPISPIP Finished, Start ExternalSupply Data Broker" );
     //macroPlan.Broker_OTD_ExternalSupply().Execute();
     info( "ExternalSupply Data Broker Finished, Start ExternalSupply Mapping" );
-    macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable);
+    macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
     
     // 搴撳瓨鎴愭湰-15
     InventoryValueAndCost::DoSync( macroPlan,globalOTDTable );
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
-    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes );
+    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
     
     // 璁㈠崟棰勬祴-17
-    Forecast::DoSync( macroPlan, businessTypes ,globalOTDTable);
+    Forecast::DoSync( macroPlan, businessTypes, globalOTDTable, organcodelist );
     
     // 璁㈠崟闇�姹�-18
-    CustomerOrder::DoSync( macroPlan, businessTypes, globalOTDTable);
+    CustomerOrder::DoSync( macroPlan, businessTypes, globalOTDTable, organcodelist );
     
     //鍒犻櫎澶氫綑鎶ラ敊鏁版嵁-19
     macroPlan.DeleteSnaityCheck();
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
index 956d704..a2be846 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
@@ -18,15 +18,15 @@
     {
           
           // 娣诲姞浜嬩笟閮ㄥ搴旂殑棰勫埗浼樺厛绾у洜瀛愭暟鎹�
-          owner.PriorityFactor(relnew,Name := "瀹㈡埛绛栫暐" ,Desc := "灏嗕簨涓氶儴璁$畻鐨勪紭鍏堢骇锛屾寜璇ョ粏鍒嗛」姣斾緥闃舵纭畾璇ラ」寰楀垎銆傚锛�81%鈮鈮�100% 5鍒嗭紝61%鈮鈮�80% 4鍒�", BusinessType := businessType );
-          owner.PriorityFactor(relnew,Name := "瀹㈡埛绛夌骇" ,Desc := "鏍规嵁闇�姹傛暟鎹腑瀹㈡埛锛屽尮閰嶅鎴风瓑绾�",BusinessType := businessType);
-          owner.PriorityFactor(relnew,Name := "澶у紶鐩堝埄姘村钩" ,Desc := "1銆佽幏鍙栧鎴�*SKU澶у紶鐩堝埄鏁� 2銆佸畾涔夊鎴�*SKU澶у紶鐩堝埄鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-          owner.PriorityFactor(relnew,Name := "缁嗗垎甯傚満绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU瀵瑰簲缁嗗垎甯傚満绛夌骇 2銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU瀵瑰簲缁嗗垎甯傚満璇勫垎绛夌骇锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-          owner.PriorityFactor(relnew,Name := "闇�姹傜被鍨�" ,Desc := "鍖归厤涓嶅悓闇�姹傜绫伙紝寰楀埌瀵瑰簲寰楀垎", BusinessType := businessType );
-          owner.PriorityFactor(relnew,Name := "璁㈠崟涓嬪崟鏃堕棿" ,Desc := "鏍规嵁闇�姹傝鍗曚腑涓嬪崟鏃堕棿涓庨渶姹傛椂闂村樊鍊硷紝鍖归厤闃舵寰楀垎", BusinessType := businessType );
-          owner.PriorityFactor(relnew,Name := "浜у搧绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-          owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-          owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "瀹㈡埛绛栫暐" ,Desc := "灏嗕簨涓氶儴璁$畻鐨勪紭鍏堢骇锛屾寜璇ョ粏鍒嗛」姣斾緥闃舵纭畾璇ラ」寰楀垎銆傚锛�81%鈮鈮�100% 5鍒嗭紝61%鈮鈮�80% 4鍒�", BusinessType := businessType, Coefficient := 100 );
+          owner.PriorityFactor(relnew,Name := "瀹㈡埛绛夌骇" ,Desc := "鏍规嵁闇�姹傛暟鎹腑瀹㈡埛锛屽尮閰嶅鎴风瓑绾�",BusinessType := businessType, Coefficient := 100);
+          owner.PriorityFactor(relnew,Name := "澶у紶鐩堝埄姘村钩" ,Desc := "1銆佽幏鍙栧鎴�*SKU澶у紶鐩堝埄鏁� 2銆佸畾涔夊鎴�*SKU澶у紶鐩堝埄鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType, Coefficient := 100 );
+          owner.PriorityFactor(relnew,Name := "缁嗗垎甯傚満绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU瀵瑰簲缁嗗垎甯傚満绛夌骇 2銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU瀵瑰簲缁嗗垎甯傚満璇勫垎绛夌骇锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType, Coefficient := 100 );
+          owner.PriorityFactor(relnew,Name := "闇�姹傜被鍨�" ,Desc := "鍖归厤涓嶅悓闇�姹傜绫伙紝寰楀埌瀵瑰簲寰楀垎", BusinessType := businessType, Coefficient := 100 );
+          owner.PriorityFactor(relnew,Name := "璁㈠崟涓嬪崟鏃堕棿" ,Desc := "鏍规嵁闇�姹傝鍗曚腑涓嬪崟鏃堕棿涓庨渶姹傛椂闂村樊鍊硷紝鍖归厤闃舵寰楀垎", BusinessType := businessType, Coefficient := 100 );
+          owner.PriorityFactor(relnew,Name := "浜у搧绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType, Coefficient := 100 );
+          owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType, Coefficient := 100 );
+          owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType, Coefficient := 100 );
           
           // 浼樺厛绾у洜瀛愮粏鍒�
           priorityFactorList := selectset( owner,PriorityFactor,p,
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
index 7cd8770..83fc44e 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
@@ -10,8 +10,14 @@
   [*
     // NBoTk Sep-26-2023 (created)
     
-    // 璁$畻瀹㈡埛璁㈠崟鐨勪紭鍏堢骇寰楀垎 鍥炲~鏉冮噸鏁版嵁 鐢熸垚鏂扮殑Priority鏄庣粏鏁版嵁
+    // 鍏堝垹闄ゅ巻鍙茬殑璺戝垎璇︽儏
+    traverse( macroPlan,PriorityResult,p)
+    {
+          p.PriorityResultBusinessTypeDetail(relflush );
+          p.Delete(); 
+    }
     
+    // 璁$畻瀹㈡埛璁㈠崟鐨勪紭鍏堢骇寰楀垎 鍥炲~鏉冮噸鏁版嵁 鐢熸垚鏂扮殑Priority鏄庣粏鏁版嵁
     traverse( macroPlan,SalesDemand.astype( CustomerOrder ),e)
     {
          // 浜嬩笟閮ㄤ俊鎭�
@@ -27,8 +33,8 @@
          priorityResult := macroPlan.PriorityResult(relnew,CustomerOrderID := e.ID(),BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                      DemandDate := e.EndDate(),ProductID := e.ProductID(),Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),
                                                      StockingPointID := e.StockingPointID(),UnitOfMeasureName := e.UnitOfMeasureName()
-                                                     );
-          
+                                                     );    
+           
          // 鍒ゆ柇鏄泦鍥� 杩樻槸浜嬩笟閮�
          if( businessType.FindString( "闆嗗洟",0 ) <> -1)
          {
@@ -54,42 +60,73 @@
                                    result.PriorityResultScore()
                                    )
     
-    // Quintiq浼樺厛绾у垎10绾� 闇�瑕佸垎娈佃绠�
-    subLevel := resultList.Size() div 10;
+    // Quintiq浼樺厛绾у垎10绾� 闇�瑕佸垎娈佃绠� 鍚戜笂鍙栨暣
+    subLevel := round( resultList.Size() div 10);
     subLevelCount := 0;
     
     priorityValue := 1;
-    traverse( resultList,Elements,e)
+    if( resultList.Size() <= 10 )
     {
-        obj := selectobject( macroPlan,SalesDemand.astype( CustomerOrder ),order, 
-                             order.ID() = e.CustomerOrderID()
-                             );
-        
-        // 璁㈠崟鏁版嵁涓嶄负绌哄啀鍋氬鐞�
-        if( not isnull( obj ) )
+        traverse( resultList,Elements,e)
         {
-              obj.PriorityName([String]priorityValue);
-              
-              // 鍒涘缓浼樺厛绾ф暟鎹� 闇�瑕佸厛娓呴櫎涓婁竴娆$殑璁$畻缁撴灉
-              // 鍒ゆ柇褰撳墠customerOrder鏄惁瀛樺湪
-              oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
-              if(isnull( oldPriority ) )
-              {
-                    macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
-              }        
+            obj := selectobject( macroPlan,SalesDemand.astype( CustomerOrder ),order, 
+                         order.ID() = e.CustomerOrderID()
+                         );
+                         
+            // 璁㈠崟鏁版嵁涓嶄负绌哄啀鍋氬鐞�
+            if( not isnull( obj ) )
+            {
+                  obj.PriorityName([String]priorityValue);
+                  
+                  // 鍒涘缓浼樺厛绾ф暟鎹� 闇�瑕佸厛娓呴櫎涓婁竴娆$殑璁$畻缁撴灉
+                  // 鍒ゆ柇褰撳墠customerOrder鏄惁瀛樺湪
+                  oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
+                  if(isnull( oldPriority ) )
+                  {
+                        macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
+                  }        
+            }
+            
+            // 鍒ゆ柇璁$畻鍒嗘鏁伴噺涓嶲uintiq鍘熷浼樺厛绾�
+            //浼樺厛绾�+1
+            priorityValue := priorityValue + 1;
+        }
+    }
+    else
+    {
+        traverse( resultList,Elements,e)
+        {
+            obj := selectobject( macroPlan,SalesDemand.astype( CustomerOrder ),order, 
+                                 order.ID() = e.CustomerOrderID()
+                                 );
+            
+            // 璁㈠崟鏁版嵁涓嶄负绌哄啀鍋氬鐞�
+            if( not isnull( obj ) )
+            {
+                  obj.PriorityName([String]priorityValue);
+                  
+                  // 鍒涘缓浼樺厛绾ф暟鎹� 闇�瑕佸厛娓呴櫎涓婁竴娆$殑璁$畻缁撴灉
+                  // 鍒ゆ柇褰撳墠customerOrder鏄惁瀛樺湪
+                  oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
+                  if(isnull( oldPriority ) )
+                  {
+                        macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
+                  }        
+            }
+        
+            // 鍒ゆ柇璁$畻鍒嗘鏁伴噺涓嶲uintiq鍘熷浼樺厛绾�
+            subLevelCount := subLevelCount + 1;
+            if( subLevelCount = subLevel )
+            {
+                // 褰撳埌杈惧垎娈垫暟閲忓悗 浼樺厛绾�+1 鍒嗘璁℃暟浠�0寮�濮�
+                if( priorityValue < 10 )
+                {
+                      priorityValue := priorityValue + 1;
+                }
+                subLevelCount := 0;
+            }
         }
     
-        // 鍒ゆ柇璁$畻鍒嗘鏁伴噺涓嶲uintiq鍘熷浼樺厛绾�
-        subLevelCount := subLevelCount + 1;
-        if( subLevelCount = subLevel )
-        {
-            // 褰撳埌杈惧垎娈垫暟閲忓悗 浼樺厛绾�+1 鍒嗘璁℃暟浠�0寮�濮�
-            if( priorityValue < 10 )
-            {
-                  priorityValue := priorityValue + 1;
-            }
-            subLevelCount := 0;
-        }
     }
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def
index e7f2aa2..a28e4bb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def
@@ -5,13 +5,17 @@
   BaseType: 'WebActionBarGroup'
   Children:
   [
-    Component btnTest
+    Component btnTestAttempt
     {
-      #keys: '[414702.0.358311907]'
+      #keys: '[414502.0.409422371]'
       BaseType: 'WebButton'
+      Children:
+      [
+        #child: cmTestAttempt
+      ]
       Properties:
       [
-        Image: 'WATER_FISH'
+        Image: 'ANTENNA'
         Label: '娴嬭瘯瑙嗗浘'
         Taborder: 0
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
new file mode 100644
index 0000000..4a5d5b5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
@@ -0,0 +1,78 @@
+Quintiq file version 2.0
+Component cmTestAttempt
+{
+  #keys: '[414502.0.409457922]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component mnCapacityAllocationAndProductionFilling
+    {
+      #keys: '[414502.0.409457923]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'WATER_FISH'
+        Taborder: 0
+        Title: '浜ц兘鍒嗛厤&濉骇'
+      ]
+    }
+    Component mnAnnualProductionAndSalesReview
+    {
+      #keys: '[414502.0.409488417]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PIG'
+        Taborder: 5
+        Title: '骞村害浜ч攢澶嶇洏'
+      ]
+    }
+    Component mnPanelPullingMaterialOperationsOfEachBusinessUnit
+    {
+      #keys: '[414702.1.5481991]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'BANANA'
+        Taborder: 1
+        Title: '闈㈡澘鎷夋枡_浜嬩笟閮ㄦ搷浣�'
+      ]
+    }
+    Component mnPanelPullingMaterialGroupOperations
+    {
+      #keys: '[414702.1.5522564]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'CLIENT_NETWORK'
+        Taborder: 2
+        Title: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
+      ]
+    }
+    Component mn224
+    {
+      #keys: '[414702.1.5593849]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 4
+      ]
+    }
+    Component mnDockingERPForPRRelease
+    {
+      #keys: '[414702.1.5920760]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'BEER_GLASS'
+        Taborder: 3
+        Title: '瀵规帴ERP杩涜PR閲婃斁'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def
deleted file mode 100644
index 8b67882..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: abgTest/btnTest
-Response OnClick () id:Response_TIANMA_JITUAN_abgTest_btnTest_OnClick
-{
-  #keys: '[414702.0.358346189]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      ApplicationScope.ViewManager().ResetUserViewById( "Test", true );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def
new file mode 100644
index 0000000..aa266a1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClic.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnAnnualProductionAndSalesReview
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnAnnualProductionAndSalesReview_OnClick
+{
+  #keys: '[414502.0.409488583]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "骞村害浜ч攢澶嶇洏", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def
new file mode 100644
index 0000000..f2aaa6f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFillin.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnCapacityAllocationAndProductionFilling
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnCapacityAllocationAndProductionFilling_OnClick
+{
+  #keys: '[414502.0.409488282]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Test", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def
new file mode 100644
index 0000000..23229a5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnDockingERPForPRRelease
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnDockingERPForPRRelease_OnClick
+{
+  #keys: '[414702.1.7136407]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "瀵规帴ERP杩涜PR閲婃斁", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def
new file mode 100644
index 0000000..a665175
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_O.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnPanelPullingMaterialGroupOperations
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialGroupOperations_OnClick
+{
+  #keys: '[414702.1.5773124]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def
new file mode 100644
index 0000000..2fb709c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachB.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnPanelPullingMaterialOperationsOfEachBusinessUnit
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnPanelPullingMaterialOperationsOfEachBusinessUnit_OnClick
+{
+  #keys: '[414702.1.4243881]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "闈㈡澘鎷夋枡_鍚勪簨涓氶儴鎿嶄綔", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnOk_OnClick.def
index 4b92eb4..f9cb868 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnOk_OnClick.def
@@ -11,7 +11,7 @@
       name := PriorityPolicyStringList.Text();
       dlg := construct( DialogChoosePriorityPolicy );
       dlg.CalculatePriorityResult(name);
-      dlg.Close();
+      Form.Close();
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
index 911ba95..f2ee867 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
@@ -70,7 +70,7 @@
         DataBinding: 'DataHolderFillingCapacityOrder.Data.Quantity'
         Label: '鏁伴噺'
         Mask: 'REAL'
-        Taborder: 12
+        Taborder: 13
       ]
     }
     Component dropDownStringListUnitOfMeasureName id:dropDownStringListUnitOfMeasureName_750
@@ -97,7 +97,7 @@
         DataBinding: 'DataHolderFillingCapacityOrder.Data.SalesAmount'
         Label: '閿�鍞'
         Mask: 'NUMBER'
-        Taborder: 13
+        Taborder: 14
       ]
     }
     Component dsDemandDate
@@ -108,7 +108,7 @@
       [
         DataBinding: 'DataHolderFillingCapacityOrder.Data.DemandDate'
         Label: '闇�姹傛棩鏈�'
-        Taborder: 15
+        Taborder: 16
       ]
     }
     Component dsForecastDemandDate
@@ -119,7 +119,7 @@
       [
         DataBinding: 'DataHolderFillingCapacityOrder.Data.ForecastDemandDate'
         Label: '棰勬湡闇�姹傛棩鏈�'
-        Taborder: 14
+        Taborder: 15
       ]
     }
     Component ddlSalesSegment
@@ -268,7 +268,7 @@
       [
         DataBinding: 'DataHolderFillingCapacityOrder.Data.Customer'
         Label: 'Customer name'
-        Taborder: 10
+        Taborder: 11
       ]
     }
     Component efCustomID
@@ -278,7 +278,7 @@
       Properties:
       [
         Label: 'Customer ID'
-        Taborder: 11
+        Taborder: 12
       ]
     }
     Component ddslOrderType
@@ -290,7 +290,34 @@
         DataBinding: 'DataHolderFillingCapacityOrder.Data.OrderType'
         Label: '璁㈠崟绫诲瀷'
         Strings: '鍙嶇;鎺堟潈'
-        Taborder: 16
+        Taborder: 17
+      ]
+    }
+    Component ddlCurrency_MP
+    {
+      #keys: '[414502.0.395021898]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'Currency_MP'
+      Children:
+      [
+        Component deContent593
+        {
+          #keys: '[414502.0.395021900]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'Currency_MP'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '璐у竵'
+        Taborder: 10
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
index 184dfb0..bf61706 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
@@ -35,7 +35,8 @@
                                         ForecastDemandDate := dsForecastDemandDate.Date(),
                                         DemandDate         := dsDemandDate.Date(),
                                         OrderType          := ddslOrderType.Text(),
-                                        SalesAmount        := [Number]edtSalesAmount.Text()
+                                        SalesAmount        := [Number]edtSalesAmount.Text(),
+                                        CurrencyID         := ddlCurrency_MP.Data().ID()
                                        );
       } else {
         data.ProductID( guard( ddlProduct_MP.Data().ID(), "null" ) );
@@ -49,6 +50,7 @@
         data.DemandDate( dsDemandDate.Date() );
         data.OrderType( ddslOrderType.Text() );
         data.SalesAmount( [Number]edtSalesAmount.Text() );
+        data.CurrencyID( ddlCurrency_MP.Data().ID() );
       }
       
       Form.Close();
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def
new file mode 100644
index 0000000..12efac1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelFillingCapacityOrder/ButtonDeduct
+Response OnClick () id:Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick
+{
+  #keys: '[414502.0.395021805]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      //H_FunctionClass::SM_OrderHedgingEx( MacroPlan, ApplicationMacroPlanner.GetUserName() );
+      
+      FillingCapacityOrder::OrderOffset( MacroPlan );
+      
+      WebMessageBox::Success( "鍐插噺鎴愬姛锛侊紒锛�", true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
index da696e8..b01bde0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
@@ -21,7 +21,7 @@
       BaseType: 'WebCheckbox'
       Properties:
       [
-        Label: 'Forecast'
+        Label: 'Forecast '
         Taborder: 1
       ]
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def"
index a089baa..54c954d 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def"
@@ -21,7 +21,7 @@
       BaseType: 'WebCheckbox'
       Properties:
       [
-        Label: 'Operation'
+        Label: 'Operation '
         Taborder: 1
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
index f708ac7..c32b468 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
@@ -41,7 +41,7 @@
       BaseType: 'WebCheckbox'
       Properties:
       [
-        Label: 'Lane'
+        Label: 'Lane '
         Taborder: 3
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
index 052d40d..fbb23d2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
@@ -8,15 +8,25 @@
   CanBindMultiple: false
   DefinitionID => /ListInterfaceTest/Responsedef_ListInterfaceTest_WebMenu_OnClick
   Initiator: 'MenuCreateShowData'
+  Precondition:
+  [*
+    //flag := selection.BrokerName() = "GlobalOTDTable_CustomOrder"
+    //
+    //if ( not flag ) {
+    //  feedback := "鏆備笉鏀寔锛侊紒锛�";
+    //}
+    //  
+    //return flag;
+  *]
   QuillAction
   {
     Body:
     [*
-      GlobalOTDTable.Global_ShowRow( relflush );
-      GlobalOTDTable.Global_ShowColumn( relflush );
-      GlobalOTDTable.Global_ShowCell( relflush );
-      
-      Global_ShowCell::ShowData( GlobalOTDTable, selection );
+      //GlobalOTDTable.Global_ShowRow( relflush );
+      //GlobalOTDTable.Global_ShowColumn( relflush );
+      //GlobalOTDTable.Global_ShowCell( relflush );
+      //
+      //Global_ShowCell::ShowData( GlobalOTDTable, selection );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
index 0b714ed..4596f3c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
@@ -14,7 +14,9 @@
     Body:
     [*
       GlobalOTDTable.SynchronizeDataToMacroPlan( MacroPlan, 
-                                                 CheckboxUnitOfMeasure_MP.Checked()
+                                                 ApplicationMacroPlanner.GetUserName(),
+                                                 CheckboxUnitOfMeasure_MP.Checked(),
+                                                 CheckboxCustomOrder.Checked()
                                                 );
       
       WebMessageBox::Success( "鍚屾鎴愬姛锛�", true );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def
index 44c70d6..c4faffb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def
@@ -13,7 +13,8 @@
       macroplan := MacroPlan;
       global := GlobalOTDTable;
       businesstypes := DataHolderOrderLockGlobal.Data().BusinessType().Tokenize( ',' );
-      CustomerOrder::DoSync( macroplan, businesstypes, global );
+      organcodelist := selectvalues( global, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+      CustomerOrder::DoSync( macroplan, businesstypes, global, organcodelist );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
index ada73f4..7d29277 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
@@ -5,39 +5,6 @@
   BaseType: 'listContextMenu'
   Children:
   [
-    Component MenuEdit
-    {
-      #keys: '[414382.0.485622263]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'GEAR_EDIT'
-        Taborder: 4
-        Title: '缂栬緫'
-      ]
-    }
-    Component MenuNew
-    {
-      #keys: '[414382.0.593001800]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'GEAR_ADD'
-        Taborder: 3
-        Title: '鏂板'
-      ]
-    }
-    Component MenuDel
-    {
-      #keys: '[414382.0.593001811]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'GEAR_DELETE'
-        Taborder: 5
-        Title: '鍒犻櫎'
-      ]
-    }
     Component MenuInit
     {
       #keys: '[414382.0.600301960]'
@@ -45,7 +12,7 @@
       Properties:
       [
         Image: 'GEAR_NEW'
-        Taborder: 6
+        Taborder: 3
         Title: '鍒濆鍖�'
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
index ef61871..e005ec6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
@@ -9,8 +9,8 @@
   {
     Body:
     [*
-      data := selectset( MacroPlan,PriorityFactor,p,true);
-      this.Data(&data);
+      //data := selectset( MacroPlan,PriorityFactor,p,true);
+      //this.Data(&data);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
index 0865d17..267db8a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
@@ -9,9 +9,8 @@
   {
     Body:
     [*
-      info( "create" + DropDownStringListBusinessType.Text());
-      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
-      DataHolderPriorityFactorSelect.Data(&list);
+      //list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
+      //DataHolderPriorityFactorSelect.Data(&list);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
index a1d8860..cbab0ed 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
@@ -9,9 +9,8 @@
   {
     Body:
     [*
-      info( "selection" + DropDownStringListBusinessType.Text());
-      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
-      DataHolderPriorityFactorSelect.Data(&list);
+      //list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
+      //DataHolderPriorityFactorSelect.Data(&list);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def
deleted file mode 100644
index 8a86cdf..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPriorityFactor
-Response OnClick (
-  PriorityFactor selection
-) id:Response_ListPriorityFactor_MenuDel_OnClick
-{
-  #keys: '[414382.0.593002800]'
-  CanBindMultiple: false
-  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
-  Initiator: 'MenuDel'
-  QuillAction
-  {
-    Body:
-    [*
-      selection.Delete();
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEdit_OnClick.def
deleted file mode 100644
index c054fc1..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuEdit_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPriorityFactor
-Response OnClick (
-  PriorityFactor selection
-) id:Response_ListPriorityFactor_MenuEdit_OnClick
-{
-  #keys: '[414382.0.485894605]'
-  CanBindMultiple: false
-  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
-  Initiator: 'MenuEdit'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogEditPriorityFactor );
-      dlg.Edit( selection);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def
deleted file mode 100644
index 2d18cad..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPriorityFactor
-Response OnClick () id:Response_ListPriorityFactor_MenuNew_OnClick
-{
-  #keys: '[414382.0.593002709]'
-  CanBindMultiple: false
-  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
-  Initiator: 'MenuNew'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogEditPriorityFactor );
-      businessType := DropDownStringListBusinessType.Text();
-      dlg.New( MacroPlan, businessType);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
index 4e4d0d6..7c5dda8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
@@ -12,6 +12,21 @@
       #keys: '[414382.0.453562359]'
       BaseType: 'WebDataHolder'
       Databinding: 'structured[PriorityFactor]*'
+      Children:
+      [
+        Component DataExtractorPriorityFactorSelect
+        {
+          #keys: '[414382.0.608512605]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'PriorityFactor'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
index 39fe40c..33b6aa3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Component_listContextMenuPriorityFactorGrading.def
@@ -3,20 +3,6 @@
 {
   #keys: '[414382.0.479530873]'
   BaseType: 'listContextMenu'
-  Children:
-  [
-    Component MenuEdit
-    {
-      #keys: '[414382.0.478491125]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'GEAR_EDIT'
-        Taborder: 3
-        Title: '缂栬緫'
-      ]
-    }
-  ]
   Properties:
   [
     Taborder: 0
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEdit_OnClick.def
deleted file mode 100644
index b9822f6..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/Response_ListPriorityFactorGrading_MenuEdit_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPriorityFactorGrading
-Response OnClick (
-  PriorityFactorDetails selction
-) id:Response_ListPriorityFactorGrading_MenuEdit_OnClick
-{
-  #keys: '[414382.0.479531766]'
-  CanBindMultiple: false
-  DefinitionID => /ListPriorityFactorGrading/Responsedef_ListPriorityFactorGrading_WebMenu_OnClick
-  Initiator: 'MenuEdit'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogEditPriorityFactorDetails);
-      dlg.Edit( selction);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def
index d645e29..ed5c423 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.506250033]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
index 383cbb2..466bd70 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
@@ -7,9 +7,18 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    feedback := "璇ヤ紭鍏堢骇鍥犲瓙宸茶閫夋嫨."
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
     
-    return not LabelFormula.Text() ~ DropDownStringList.Text();
+    if( not check)
+    {
+        // 鍒ゆ柇璇ヤ紭鍏堢骇鍥犲瓙鏄惁宸茬粡琚�夋嫨
+        check := LabelFormula.Text() ~ DropDownStringList.Text();
+        feedback := "璇ヤ紭鍏堢骇鍥犲瓙宸茶閫夋嫨."
+    }
+    
+    return not check;
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def
index 11b1352..ef82cb9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.500261587]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def
index f4eb5c3..ee84b06 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.500261667]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def
index 2f09779..32f03c0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.500261507]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def
index 292ba04..5cede1f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.500261748]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
index d7adf1d..d54ce72 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.506055261]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def
index 77d6f0a..e9fd780 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.500261427]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def
index 926a7be..ab192c7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def
@@ -5,6 +5,13 @@
   #keys: '[414382.0.500261347]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    // 褰撳墠鏄惁鏈夐�変腑鐨勪紭鍏堢骇绛栫暐
+    feedback := "璇峰厛閫夋嫨涓�鏉′紭鍏堢骇绛栫暐鍚庡啀杩涜缂栬緫鍏紡";
+    check := PanelPriorityPolicyOperationName.Text() = "";
+    return not check;
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
index ffc5263..a5937da 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
@@ -11,6 +11,12 @@
     [*
       list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
       DataHolderPriorityPolicyShowList.Data(&list);
+      
+      PanelPriorityPolicyOperationName.Text("");
+      LabelFormula.Text("");
+      LabelCalculateValue.Text("");
+      data := shadow( null( PriorityPolicy ) );
+      DataHolderEditPriorityPolicy.Data( &data );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def"
new file mode 100644
index 0000000..92f21a9
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_ListProduct\043844.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component ListProduct id:ListProduct_844 #extension
+{
+  Children:
+  [
+    Component DataSetLevelRootProduct #extension
+    {
+      Children:
+      [
+        #child: listContextMenuProduct_1
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def
new file mode 100644
index 0000000..907c5e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_PanelList.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component PanelList #extension
+{
+  Children:
+  [
+    #child: ListProduct_844
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct\0431.def"
new file mode 100644
index 0000000..7a70a33
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Component_listContextMenuProduct\0431.def"
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+Component listContextMenuProduct id:listContextMenuProduct_1 #extension
+{
+  Children:
+  [
+    Component MenuMarkingPanelMaterial
+    {
+      #keys: '[414502.0.406261865]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'EARTH2'
+        Taborder: 11
+        Title: '鏍囪闈㈡澘鐗╂枡'
+      ]
+    }
+    Component Menu860
+    {
+      #keys: '[414502.0.406252405]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 10
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def
new file mode 100644
index 0000000..33228b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/Response_TIANMA_JITUAN_ListProduct_844_MenuMarkingPanelMaterial_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListProduct_844
+Response OnClick (
+  Product_MP selection
+) id:Response_ListProduct_844_MenuMarkingPanelMaterial_OnClick
+{
+  #keys: '[414502.0.406201138]'
+  CanBindMultiple: false
+  DefinitionID => /ListProduct_844/Responsedef_ListProduct_844_WebMenu_OnClick
+  Initiator: 'MenuMarkingPanelMaterial'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.IsPanelMaterial( not selection.IsPanelMaterial() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def
new file mode 100644
index 0000000..c44a756
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProducts/_ROOT_Component_FormProducts.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: LibMacroPlannerWebUI
+OrphanComponent FormProducts #extension
+{
+  Children:
+  [
+    #child: PanelList
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def
new file mode 100644
index 0000000..1930918
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListCustomOrder.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListCustomOrder
+{
+  #keys: '[414502.0.410384594]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorCustomOrder
+    {
+      #keys: '[414502.0.410384595]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingCustomOrder'
+      ]
+    }
+    #child: listActionBarPageCustomOrder
+    Component DataSetLevelCustomOrder
+    {
+      #keys: '[414502.0.410384600]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuCustomOrder
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CurrencyID","title":"CurrencyID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CurrencyID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerID","title":"CustomerID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsAvailable","title":"IsAvailable","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsAvailable"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderDate","title":"OrderDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderLineID","title":"OrderLineID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderLineID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderTime","title":"OrderTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderType","title":"OrderType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityName","title":"PriorityName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductGrade","title":"ProductGrade","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductGrade"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SegmentPriority","title":"SegmentPriority","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SegmentPriority"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SheetProfitability","title":"SheetProfitability","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SheetProfitability"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}}]'
+        ContextMenu: 'listContextMenuCustomOrder'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def
new file mode 100644
index 0000000..5e70a0c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListForecast.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListForecast
+{
+  #keys: '[414502.0.410501478]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorForecast
+    {
+      #keys: '[414502.0.410501479]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingForecast'
+      ]
+    }
+    #child: listActionBarPageForecast
+    Component DataSetLevelForecast
+    {
+      #keys: '[414502.0.410501484]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuForecast
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CurrencyID","title":"CurrencyID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CurrencyID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityName","title":"PriorityName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}}]'
+        ContextMenu: 'listContextMenuForecast'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def
new file mode 100644
index 0000000..f59a8c1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListUnitOfMeasure_MP.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410391545]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorUnitOfMeasure_MP
+    {
+      #keys: '[414502.0.410391546]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingUnitOfMeasure_MP'
+      ]
+    }
+    #child: listActionBarPageUnitOfMeasure_MP
+    Component DataSetLevelUnitOfMeasure_MP
+    {
+      #keys: '[414502.0.410391551]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuUnitOfMeasure_MP
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsDefault","title":"IsDefault","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsDefault"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Name"}}]'
+        ContextMenu: 'listContextMenuUnitOfMeasure_MP'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def
index f73b35a..66bfefb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def
@@ -93,5 +93,6 @@
     ContextMenu: 'matrixeditorContextMenuShowInterfaceData'
     Rows: 'MatrixEditorRowsShowInterfaceData'
     Taborder: 0
+    Visible: false
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder\043682.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder\043682.def"
new file mode 100644
index 0000000..310184f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelCustomOrder\043682.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelCustomOrder
+{
+  #keys: '[414502.0.409352936]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListCustomOrder
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: 'CustomOrder'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def
new file mode 100644
index 0000000..b0f4ecd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelForecast.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelForecast
+{
+  #keys: '[414502.0.409524617]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListForecast
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: 'Forecast '
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def
new file mode 100644
index 0000000..0746e39
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+Component PanelInterfaceDataDisplayContent
+{
+  #keys: '[414502.0.409352883]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelCustomOrder
+    #child: PanelForecast
+    #child: PanelUnitOfMeasure_MP
+  ]
+  Properties:
+  [
+    Orientation: 'tab'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def
new file mode 100644
index 0000000..9820357
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelUnitOfMeasure_MP.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410390401]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListUnitOfMeasure_MP
+  ]
+  Properties:
+  [
+    Taborder: 2
+    Title: 'UnitOfMeasure_MP'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def
new file mode 100644
index 0000000..12f4eef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageCustomOrder.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageCustomOrder
+{
+  #keys: '[414502.0.410384597]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def
new file mode 100644
index 0000000..8370bfe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageForecast.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageForecast
+{
+  #keys: '[414502.0.410501481]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def
new file mode 100644
index 0000000..b8c0188
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageUnitOfMeasure_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410391548]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def
new file mode 100644
index 0000000..6418719
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuCustomOrder.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuCustomOrder
+{
+  #keys: '[414502.0.410384602]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def
new file mode 100644
index 0000000..bf6bb96
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuForecast.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuForecast
+{
+  #keys: '[414502.0.410501486]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def
new file mode 100644
index 0000000..7864ecf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuUnitOfMeasure_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuUnitOfMeasure_MP
+{
+  #keys: '[414502.0.410391553]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def
index 82115f2..e3f55d8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def
@@ -8,6 +8,7 @@
   Children:
   [
     #child: MatrixEditorShowInterfaceData
+    #child: PanelInterfaceDataDisplayContent
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Order/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Order/Response_OnCreated.def
index 7c4d5f5..76d2c45 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Order/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Order/Response_OnCreated.def
@@ -23,18 +23,10 @@
           lb_SKUCode_FAAC.Text(SelForecast.Get( "SKU").GetString());
           lb_SKUName_FAAC.Text("浜у搧");
           lb_Util_FAAC.Text(SelForecast.Get( "Util").GetString());
+          lb_SKUName_FAAC.Text(SelForecast.Get( "SKUName").GetString());
           txt_CustomID_FAAC.Text(SelForecast.Get( "CustomCode").GetString());
           txt_CustomName_FAAC.Text(SelForecast.Get( "CustomName").GetString());
           lb_Operator_FAAC.Text(ApplicationMacroPlanner.GetUserName());
-          
-      //    StrValue := SelectItem.Value().Tokenize( ";");
-      //    lb_SKUCode_FAAC.Text(StrValue.Element( 0));
-      //    lb_SKUName_FAAC.Text("浜у搧");
-      //    lb_Operator_FAAC.Text("");
-      //    lb_Util_FAAC.Text(StrValue.Element( 1));
-      //    txt_CustomID_FAAC.Text(StrValue.Element( 2));
-      //    txt_CustomName_FAAC.Text(StrValue.Element( 3));
-      //    lb_Operator_FAAC.Text(ApplicationMacroPlanner.GetUserName());
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_List710.def b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_List710.def
index 975cea9..bd6d61d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_List710.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_List710.def
@@ -36,6 +36,6 @@
   ]
   Properties:
   [
-    Taborder: 1
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_Panel391.def b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_Panel391.def
new file mode 100644
index 0000000..c27e0ed
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Component_Panel391.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component Panel391
+{
+  #keys: '[414724.0.193860534]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component Button655
+    {
+      #keys: '[414724.0.193860558]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BULL'
+        Label: '濉骇鍐插噺'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Response_Panel391_Button655_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Response_Panel391_Button655_OnClick.def
new file mode 100644
index 0000000..821d8ed
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/Response_Panel391_Button655_OnClick.def
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+#parent: Panel391/Button655
+Response OnClick () id:Response_Panel391_Button655_OnClick
+{
+  #keys: '[414724.0.194975663]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan);
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      HResult := H_FunctionClass::SM_OrderHedgingEx( MacroPlan,"娴嬭瘯鐢ㄦ埛" );
+      Msg := HResult.Get( "Msg").GetString();
+      if( HResult.Get( "Status").GetBoolean())
+      {
+        if( Msg.Length()>0)
+        {
+          WebMessageBox::Information(Msg); 
+        }
+      }
+      else
+      {
+        if( Msg.Length()>0)
+        {
+          WebMessageBox::Warning(Msg);
+        }
+        else
+        {
+          WebMessageBox::Information("杩愯閿欒锛�"); 
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/_ROOT_Component_FrmErrorLogs.def b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/_ROOT_Component_FrmErrorLogs.def
index 23776ce..81eec9c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/_ROOT_Component_FrmErrorLogs.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FrmErrorLogs/_ROOT_Component_FrmErrorLogs.def
@@ -30,9 +30,10 @@
       ]
       Properties:
       [
-        Taborder: 0
+        Taborder: 1
       ]
     }
+    #child: Panel391
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Test.vw b/_Main/UI/MacroPlannerWebApp/Views/Test.vw
index 36dff5d..808d3e8 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Test.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Test.vw
@@ -310,6 +310,10 @@
         }
         components
         {
+          FormFillingCapacityOrder_PanelFillingCapacityOrder
+          {
+            sizeRatio: 1
+          }
           FormFillingCapacityOrder_ListFillingCapacityOrder
           {
           }
@@ -436,536 +440,19 @@
           }
         }
       }
-      form_FormPriorityPolicy
-      {
-        title: 'QTIANMA_JITUAN::FormPriorityPolicy'
-        shown: true
-        componentID: 'QTIANMA_JITUAN::FormPriorityPolicy'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 32
-          rowSpan: 13
-          columnPosition: 5
-          columnSpan: 8
-        }
-        components
-        {
-          FormPriorityPolicy_ListPriorityPolicy
-          {
-          }
-          FormPriorityPolicy_DataSetLevelPriorityPolicy
-          {
-            groupDepth: -1
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_Formula
-            {
-              columnId: 'Formula'
-              dataPath: 'Formula'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_CalculateValue
-            {
-              columnId: 'CalculateValue'
-              dataPath: 'CalculateValue'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_Desc
-            {
-              columnId: 'Desc'
-              dataPath: 'Desc'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
-          }
-          FormPriorityPolicy_PanelPriorityPolicyOperation
-          {
-            sizeRatio: 1
-          }
-          FormPriorityPolicy_PanelPriorityPolicyOperationButton
-          {
-            sizeRatio: 1
-          }
-          FormPriorityPolicy_PanelPriorityPolicyCoefficient
-          {
-            sizeRatio: 1
-          }
-        }
-      }
-      form_FormPriorityResult
-      {
-        title: 'QTIANMA_JITUAN::FormPriorityResult'
-        shown: true
-        componentID: 'QTIANMA_JITUAN::FormPriorityResult'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 45
-          rowSpan: 17
-          columnPosition: 1
-          columnSpan: 12
-        }
-        components
-        {
-          FormPriorityResult_PanelPriorityResult
-          {
-            sizeRatio: 1
-          }
-          FormPriorityResult_ListPriorityResult
-          {
-          }
-          FormPriorityResult_DataSetLevelPriorityResult
-          {
-            groupDepth: -1
-            column_SalesSegmentName
-            {
-              columnId: 'SalesSegmentName'
-              dataPath: 'SalesSegmentName'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_ProductID
-            {
-              columnId: 'ProductID'
-              dataPath: 'ProductID'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_StockingPointID
-            {
-              columnId: 'StockingPointID'
-              dataPath: 'StockingPointID'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_Customer
-            {
-              columnId: 'Customer'
-              dataPath: 'Customer'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
-            column_BusinessType
-            {
-              columnId: 'BusinessType'
-              dataPath: 'BusinessType'
-              dataType: 'string'
-              index: 4
-              subtotals: ''
-              width: 150
-            }
-            column_Quantity
-            {
-              columnId: 'Quantity'
-              dataPath: 'Quantity'
-              dataType: 'real'
-              index: 5
-              subtotals: ''
-              width: 150
-            }
-            column_UnitOfMeasureName
-            {
-              columnId: 'UnitOfMeasureName'
-              dataPath: 'UnitOfMeasureName'
-              dataType: 'string'
-              index: 6
-              subtotals: ''
-              width: 150
-            }
-            column_DemandDate
-            {
-              columnId: 'DemandDate'
-              dataPath: 'DemandDate'
-              dataType: 'date'
-              index: 7
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityResultScore
-            {
-              columnId: 'PriorityResultScore'
-              dataPath: 'PriorityResultScore'
-              dataType: 'real'
-              index: 8
-              subtotals: ''
-              width: 150
-            }
-          }
-          FormPriorityResult_PanelPriorityResultDetails
-          {
-            sizeRatio: 1
-          }
-          FormPriorityResult_ListPriorityResultBusinessTypeDetails
-          {
-          }
-          FormPriorityResult_DataSetLevelPriorityResultDetails
-          {
-            groupDepth: -1
-            column_SalesSegmentName
-            {
-              columnId: 'SalesSegmentName'
-              dataPath: 'SalesSegmentName'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_StockingPointID
-            {
-              columnId: 'StockingPointID'
-              dataPath: 'StockingPointID'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_Customer
-            {
-              columnId: 'Customer'
-              dataPath: 'Customer'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_BusinessType
-            {
-              columnId: 'BusinessType'
-              dataPath: 'BusinessType'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
-            column_Quantity
-            {
-              columnId: 'Quantity'
-              dataPath: 'Quantity'
-              dataType: 'real'
-              index: 4
-              subtotals: ''
-              width: 150
-            }
-            column_UnitOfMeasureName
-            {
-              columnId: 'UnitOfMeasureName'
-              dataPath: 'UnitOfMeasureName'
-              dataType: 'string'
-              index: 5
-              subtotals: ''
-              width: 150
-            }
-            column_DemandDate
-            {
-              columnId: 'DemandDate'
-              dataPath: 'DemandDate'
-              dataType: 'date'
-              index: 6
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityResultScore
-            {
-              columnId: 'PriorityResultScore'
-              dataPath: 'PriorityResultScore'
-              dataType: 'real'
-              index: 7
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityPolicyName
-            {
-              columnId: 'PriorityPolicyName'
-              dataPath: 'PriorityPolicyName'
-              dataType: 'string'
-              index: 8
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityFactorName
-            {
-              columnId: 'PriorityFactorName'
-              dataPath: 'PriorityFactorName'
-              dataType: 'string'
-              index: 9
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityFactorGradingName
-            {
-              columnId: 'PriorityFactorGradingName'
-              dataPath: 'PriorityFactorGradingName'
-              dataType: 'string'
-              index: 10
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityTotalScore
-            {
-              columnId: 'PriorityTotalScore'
-              dataPath: 'PriorityTotalScore'
-              dataType: 'real'
-              index: 11
-              subtotals: ''
-              width: 150
-            }
-          }
-          FormPriorityResult_ListPriorityResultGroupDetails
-          {
-          }
-          FormPriorityResult_DataSetLevelPriorityResultDetails872
-          {
-            groupDepth: -1
-            column_SalesSegmentName
-            {
-              columnId: 'SalesSegmentName'
-              dataPath: 'SalesSegmentName'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_StockingPointID
-            {
-              columnId: 'StockingPointID'
-              dataPath: 'StockingPointID'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_Customer
-            {
-              columnId: 'Customer'
-              dataPath: 'Customer'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_BusinessType
-            {
-              columnId: 'BusinessType'
-              dataPath: 'BusinessType'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
-            column_Quantity
-            {
-              columnId: 'Quantity'
-              dataPath: 'Quantity'
-              dataType: 'real'
-              index: 4
-              subtotals: ''
-              width: 150
-            }
-            column_UnitOfMeasureName
-            {
-              columnId: 'UnitOfMeasureName'
-              dataPath: 'UnitOfMeasureName'
-              dataType: 'string'
-              index: 5
-              subtotals: ''
-              width: 150
-            }
-            column_DemandDate
-            {
-              columnId: 'DemandDate'
-              dataPath: 'DemandDate'
-              dataType: 'date'
-              index: 6
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityResultScore
-            {
-              columnId: 'PriorityResultScore'
-              dataPath: 'PriorityResultScore'
-              dataType: 'real'
-              index: 7
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityPolicyName
-            {
-              columnId: 'PriorityPolicyName'
-              dataPath: 'PriorityPolicyName'
-              dataType: 'string'
-              index: 8
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityFactorName
-            {
-              columnId: 'PriorityFactorName'
-              dataPath: 'PriorityFactorName'
-              dataType: 'string'
-              index: 9
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityFactorGradingName
-            {
-              columnId: 'PriorityFactorGradingName'
-              dataPath: 'PriorityFactorGradingName'
-              dataType: 'string'
-              index: 10
-              subtotals: ''
-              width: 150
-            }
-            column_PriorityTotalScore
-            {
-              columnId: 'PriorityTotalScore'
-              dataPath: 'PriorityTotalScore'
-              dataType: 'real'
-              index: 11
-              subtotals: ''
-              width: 150
-            }
-          }
-        }
-      }
-      form_FormPriorityFactor
-      {
-        title: 'QTIANMA_JITUAN::FormPriorityFactor'
-        shown: true
-        componentID: 'QTIANMA_JITUAN::FormPriorityFactor'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 37
-          rowSpan: 8
-          columnPosition: 1
-          columnSpan: 4
-        }
-        components
-        {
-          FormPriorityFactor_ListPriorityFactor
-          {
-          }
-          FormPriorityFactor_DataSetLevelPriorityFactor
-          {
-            groupDepth: -1
-            column_Name
-            {
-              columnId: 'Name'
-              dataPath: 'Name'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_Coefficient
-            {
-              columnId: 'Coefficient'
-              dataPath: 'Coefficient'
-              dataType: 'real'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_Desc
-            {
-              columnId: 'Desc'
-              dataPath: 'Desc'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-          }
-        }
-      }
-      form_FormPriorityFactorGrading
-      {
-        title: 'QTIANMA_JITUAN::FormPriorityFactorGrading'
-        shown: true
-        componentID: 'QTIANMA_JITUAN::FormPriorityFactorGrading'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 32
-          rowSpan: 5
-          columnPosition: 1
-          columnSpan: 4
-        }
-        components
-        {
-          FormPriorityFactorGrading_ListPriorityFactorGrading
-          {
-          }
-          FormPriorityFactorGrading_DataSetLevelPriorityFactorGrading
-          {
-            groupDepth: -1
-            column_GradingName
-            {
-              columnId: 'GradingName'
-              dataPath: 'GradingName'
-              dataType: 'string'
-              index: 0
-              subtotals: ''
-              width: 150
-            }
-            column_GradeValueStr
-            {
-              columnId: 'GradeValueStr'
-              dataPath: 'GradeValueStr'
-              dataType: 'string'
-              index: 1
-              subtotals: ''
-              width: 150
-            }
-            column_GradeDesc
-            {
-              columnId: 'GradeDesc'
-              dataPath: 'GradeDesc'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-          }
-        }
-      }
     }
     userconfigurableinformation
     {
     }
-    image: 'BEAR'
     page: ''
     group: ''
     index: 0
+    image: 'BEAR'
     description: ''
   }
   formatversion: 2
   id: 'Test'
-  name: 'Test'
+  name: '浜ц兘鍒嗛厤_濉骇'
   isglobal: false
   isroot: true
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\257\271\346\216\245ERP\350\277\233\350\241\214PR\351\207\212\346\224\276.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\257\271\346\216\245ERP\350\277\233\350\241\214PR\351\207\212\346\224\276.vw"
new file mode 100644
index 0000000..0811978
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\257\271\346\216\245ERP\350\277\233\350\241\214PR\351\207\212\346\224\276.vw"
@@ -0,0 +1,168 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormWorkOrderType
+      {
+        title: 'QTIANMA_JITUAN::FormWorkOrderType'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormWorkOrderType'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 3
+        }
+        components
+        {
+          FormWorkOrderType_ListWorkOrderType
+          {
+          }
+          FormWorkOrderType_DataSetLevelWorkOrderType
+          {
+            groupDepth: -1
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_TypeName
+            {
+              columnId: 'TypeName'
+              dataPath: 'TypeName'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormIssueWorkOrder
+      {
+        title: 'QTIANMA_JITUAN::FormIssueWorkOrder'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormIssueWorkOrder'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 4
+          columnSpan: 9
+        }
+        components
+        {
+          FormIssueWorkOrder_PanelButton
+          {
+            sizeRatio: 1
+          }
+          FormIssueWorkOrder_PanelIssueWorkOrder
+          {
+            sizeRatio: 1
+          }
+          FormIssueWorkOrder_ListIssueWorkOrder
+          {
+          }
+          FormIssueWorkOrder_DataSetLevelIssueWorkOrder
+          {
+            groupDepth: -1
+            column_ProductionWorkOrderNumber
+            {
+              columnId: 'ProductionWorkOrderNumber'
+              dataPath: 'ProductionWorkOrderNumber'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductModel
+            {
+              columnId: 'ProductModel'
+              dataPath: 'ProductModel'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_MaterialDescription
+            {
+              columnId: 'MaterialDescription'
+              dataPath: 'MaterialDescription'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_EndDate
+            {
+              columnId: 'EndDate'
+              dataPath: 'EndDate'
+              dataType: 'date'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_PlannedQuantity
+            {
+              columnId: 'PlannedQuantity'
+              dataPath: 'PlannedQuantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_WorkOrderType
+            {
+              columnId: 'WorkOrderType'
+              dataPath: 'WorkOrderType'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_WorkOrderStatus
+            {
+              columnId: 'WorkOrderStatus'
+              dataPath: 'WorkOrderStatus'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'INDUSTRIAL_ROBOT'
+    description: ''
+  }
+  formatversion: 2
+  id: '瀵规帴ERP杩涜PR閲婃斁'
+  name: '瀵规帴ERP杩涜PR閲婃斁'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw"
new file mode 100644
index 0000000..64db9ed
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw"
@@ -0,0 +1,777 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormCapacityAndSaleBudge
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudge'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudge'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 1
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudge_ListCapacityAndSaleBudge
+          {
+          }
+          FormCapacityAndSaleBudge_DataSetLevelCapacityAndSaleBudge
+          {
+            groupDepth: -1
+            column_Deleted
+            {
+              columnId: 'Deleted'
+              dataPath: 'Deleted'
+              dataType: 'boolean'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_YearNo
+            {
+              columnId: 'YearNo'
+              dataPath: 'YearNo'
+              dataType: 'number'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrgCode
+            {
+              columnId: 'OrgCode'
+              dataPath: 'OrgCode'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_DisplayTechnology
+            {
+              columnId: 'DisplayTechnology'
+              dataPath: 'DisplayTechnology'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_LineAndSpecification
+            {
+              columnId: 'LineAndSpecification'
+              dataPath: 'LineAndSpecification'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_ProductCode
+            {
+              columnId: 'ProductCode'
+              dataPath: 'ProductCode'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_PlaceOfProductionOfArray
+            {
+              columnId: 'PlaceOfProductionOfArray'
+              dataPath: 'PlaceOfProductionOfArray'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_PlaceOfProductionOfEvaporation
+            {
+              columnId: 'PlaceOfProductionOfEvaporation'
+              dataPath: 'PlaceOfProductionOfEvaporation'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_Resolution
+            {
+              columnId: 'Resolution'
+              dataPath: 'Resolution'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_ShippingForm
+            {
+              columnId: 'ShippingForm'
+              dataPath: 'ShippingForm'
+              dataType: 'string'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_NumberOfCut
+            {
+              columnId: 'NumberOfCut'
+              dataPath: 'NumberOfCut'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityEquivalent
+            {
+              columnId: 'CapacityEquivalent'
+              dataPath: 'CapacityEquivalent'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_NumberOfMask
+            {
+              columnId: 'NumberOfMask'
+              dataPath: 'NumberOfMask'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth1
+            {
+              columnId: 'CapacityInPCSInMonth1'
+              dataPath: 'CapacityInPCSInMonth1'
+              dataType: 'real'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth2
+            {
+              columnId: 'CapacityInPCSInMonth2'
+              dataPath: 'CapacityInPCSInMonth2'
+              dataType: 'real'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth3
+            {
+              columnId: 'CapacityInPCSInMonth3'
+              dataPath: 'CapacityInPCSInMonth3'
+              dataType: 'real'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth4
+            {
+              columnId: 'CapacityInPCSInMonth4'
+              dataPath: 'CapacityInPCSInMonth4'
+              dataType: 'real'
+              index: 17
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth5
+            {
+              columnId: 'CapacityInPCSInMonth5'
+              dataPath: 'CapacityInPCSInMonth5'
+              dataType: 'real'
+              index: 18
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth6
+            {
+              columnId: 'CapacityInPCSInMonth6'
+              dataPath: 'CapacityInPCSInMonth6'
+              dataType: 'real'
+              index: 19
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth7
+            {
+              columnId: 'CapacityInPCSInMonth7'
+              dataPath: 'CapacityInPCSInMonth7'
+              dataType: 'real'
+              index: 20
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth8
+            {
+              columnId: 'CapacityInPCSInMonth8'
+              dataPath: 'CapacityInPCSInMonth8'
+              dataType: 'real'
+              index: 21
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth9
+            {
+              columnId: 'CapacityInPCSInMonth9'
+              dataPath: 'CapacityInPCSInMonth9'
+              dataType: 'real'
+              index: 22
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth10
+            {
+              columnId: 'CapacityInPCSInMonth10'
+              dataPath: 'CapacityInPCSInMonth10'
+              dataType: 'real'
+              index: 23
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth11
+            {
+              columnId: 'CapacityInPCSInMonth11'
+              dataPath: 'CapacityInPCSInMonth11'
+              dataType: 'real'
+              index: 24
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSInMonth12
+            {
+              columnId: 'CapacityInPCSInMonth12'
+              dataPath: 'CapacityInPCSInMonth12'
+              dataType: 'real'
+              index: 25
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInPCSTotal
+            {
+              columnId: 'CapacityInPCSTotal'
+              dataPath: 'CapacityInPCSTotal'
+              dataType: 'real'
+              index: 26
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth1
+            {
+              columnId: 'CapacityInSheetInMonth1'
+              dataPath: 'CapacityInSheetInMonth1'
+              dataType: 'real'
+              index: 27
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth2
+            {
+              columnId: 'CapacityInSheetInMonth2'
+              dataPath: 'CapacityInSheetInMonth2'
+              dataType: 'real'
+              index: 28
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth3
+            {
+              columnId: 'CapacityInSheetInMonth3'
+              dataPath: 'CapacityInSheetInMonth3'
+              dataType: 'real'
+              index: 29
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth4
+            {
+              columnId: 'CapacityInSheetInMonth4'
+              dataPath: 'CapacityInSheetInMonth4'
+              dataType: 'real'
+              index: 30
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth5
+            {
+              columnId: 'CapacityInSheetInMonth5'
+              dataPath: 'CapacityInSheetInMonth5'
+              dataType: 'real'
+              index: 31
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth6
+            {
+              columnId: 'CapacityInSheetInMonth6'
+              dataPath: 'CapacityInSheetInMonth6'
+              dataType: 'real'
+              index: 32
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth7
+            {
+              columnId: 'CapacityInSheetInMonth7'
+              dataPath: 'CapacityInSheetInMonth7'
+              dataType: 'real'
+              index: 33
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth8
+            {
+              columnId: 'CapacityInSheetInMonth8'
+              dataPath: 'CapacityInSheetInMonth8'
+              dataType: 'real'
+              index: 34
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth9
+            {
+              columnId: 'CapacityInSheetInMonth9'
+              dataPath: 'CapacityInSheetInMonth9'
+              dataType: 'real'
+              index: 35
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth10
+            {
+              columnId: 'CapacityInSheetInMonth10'
+              dataPath: 'CapacityInSheetInMonth10'
+              dataType: 'real'
+              index: 36
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth11
+            {
+              columnId: 'CapacityInSheetInMonth11'
+              dataPath: 'CapacityInSheetInMonth11'
+              dataType: 'real'
+              index: 37
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetInMonth12
+            {
+              columnId: 'CapacityInSheetInMonth12'
+              dataPath: 'CapacityInSheetInMonth12'
+              dataType: 'real'
+              index: 38
+              subtotals: ''
+              width: 150
+            }
+            column_CapacityInSheetTotal
+            {
+              columnId: 'CapacityInSheetTotal'
+              dataPath: 'CapacityInSheetTotal'
+              dataType: 'real'
+              index: 39
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth1
+            {
+              columnId: 'SaleAmountInMonth1'
+              dataPath: 'SaleAmountInMonth1'
+              dataType: 'real'
+              index: 40
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth2
+            {
+              columnId: 'SaleAmountInMonth2'
+              dataPath: 'SaleAmountInMonth2'
+              dataType: 'real'
+              index: 41
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth3
+            {
+              columnId: 'SaleAmountInMonth3'
+              dataPath: 'SaleAmountInMonth3'
+              dataType: 'real'
+              index: 42
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth5
+            {
+              columnId: 'SaleAmountInMonth5'
+              dataPath: 'SaleAmountInMonth5'
+              dataType: 'real'
+              index: 43
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth4
+            {
+              columnId: 'SaleAmountInMonth4'
+              dataPath: 'SaleAmountInMonth4'
+              dataType: 'real'
+              index: 44
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth6
+            {
+              columnId: 'SaleAmountInMonth6'
+              dataPath: 'SaleAmountInMonth6'
+              dataType: 'real'
+              index: 45
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth7
+            {
+              columnId: 'SaleAmountInMonth7'
+              dataPath: 'SaleAmountInMonth7'
+              dataType: 'real'
+              index: 46
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth8
+            {
+              columnId: 'SaleAmountInMonth8'
+              dataPath: 'SaleAmountInMonth8'
+              dataType: 'real'
+              index: 47
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth9
+            {
+              columnId: 'SaleAmountInMonth9'
+              dataPath: 'SaleAmountInMonth9'
+              dataType: 'real'
+              index: 48
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth10
+            {
+              columnId: 'SaleAmountInMonth10'
+              dataPath: 'SaleAmountInMonth10'
+              dataType: 'real'
+              index: 49
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth11
+            {
+              columnId: 'SaleAmountInMonth11'
+              dataPath: 'SaleAmountInMonth11'
+              dataType: 'real'
+              index: 50
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountInMonth12
+            {
+              columnId: 'SaleAmountInMonth12'
+              dataPath: 'SaleAmountInMonth12'
+              dataType: 'real'
+              index: 51
+              subtotals: ''
+              width: 150
+            }
+            column_SaleAmountTotal
+            {
+              columnId: 'SaleAmountTotal'
+              dataPath: 'SaleAmountTotal'
+              dataType: 'real'
+              index: 52
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeCompare
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeCompare'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeCompare'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 5
+          rowSpan: 10
+          columnPosition: 5
+          columnSpan: 8
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeCompare_MatrixEditorCapacityAndSaleBudgeCompare
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeCompare.MatrixEditorCapacityAndSaleBudgeCompare'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_CellContent
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CellContent'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ColumnNo'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNo'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterItem
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterItem'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterItem'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 3
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterItem_ListCapacityAndSaleBudgeFilterItem
+          {
+          }
+          FormCapacityAndSaleBudgeFilterItem_DataSetLevelCapacityAndSaleBudgeFilterItem
+          {
+            groupDepth: -1
+            column_ItemName
+            {
+              columnId: 'ItemName'
+              dataPath: 'ItemName'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeChart
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeChart'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeChart'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 5
+          rowSpan: 11
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeChart_ChartCapacityAndSaleBudgeChart
+          {
+            SynchronizationGroup: ''
+          }
+          FormCapacityAndSaleBudgeChart_ChartCapacityAndSaleBudgeChart_legend
+          {
+            LegendItems:
+            [
+            ]
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 5
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+          {
+          }
+          FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_DataSetLevelCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+          {
+            groupDepth: -1
+            column_PlaceOfProductionOfArray
+            {
+              columnId: 'PlaceOfProductionOfArray'
+              dataPath: 'PlaceOfProductionOfArray'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterYear
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterYear'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterYear'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 7
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterYear_ListCapacityAndSaleBudgeFilterYear
+          {
+          }
+          FormCapacityAndSaleBudgeFilterYear_DataSetLevelCapacityAndSaleBudgeFilterYear
+          {
+            groupDepth: -1
+            column_YearNo
+            {
+              columnId: 'YearNo'
+              dataPath: 'YearNo'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterBusinessType
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterBusinessType'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterBusinessType'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 11
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterBusinessType_ListCapacityAndSaleBudgeFilterBusinessType
+          {
+          }
+          FormCapacityAndSaleBudgeFilterBusinessType_DataSetLevelCapacityAndSaleBudgeFilterBusinessType
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormCapacityAndSaleBudgeFilterMonth
+      {
+        title: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterMonth'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormCapacityAndSaleBudgeFilterMonth'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 4
+          columnPosition: 9
+          columnSpan: 2
+        }
+        components
+        {
+          FormCapacityAndSaleBudgeFilterMonth_ListCapacityAndSaleBudgeFilterMonth
+          {
+          }
+          FormCapacityAndSaleBudgeFilterMonth_DataSetLevelCapacityAndSaleBudgeFilterMonth
+          {
+            groupDepth: -1
+            column_MonthNo
+            {
+              columnId: 'MonthNo'
+              dataPath: 'MonthNo'
+              dataType: 'number'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'PIG'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '骞村害浜ч攢澶嶇洏'
+  name: '骞村害浜ч攢澶嶇洏'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\345\220\204\344\272\213\344\270\232\351\203\250\346\223\215\344\275\234.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\345\220\204\344\272\213\344\270\232\351\203\250\346\223\215\344\275\234.vw"
new file mode 100644
index 0000000..89c5aa2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\345\220\204\344\272\213\344\270\232\351\203\250\346\223\215\344\275\234.vw"
@@ -0,0 +1,94 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPanelPullPlanReport
+      {
+        title: 'QTIANMA_JITUAN::FormPanelPullPlanReport'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelPullPlanReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 6
+        }
+        components
+        {
+          FormPanelPullPlanReport_PanelPanelPullPlanReport
+          {
+            sizeRatio: 1
+          }
+          FormPanelPullPlanReport_PanelFunctionButtons
+          {
+            sizeRatio: 1
+          }
+          FormPanelPullPlanReport_PanelData
+          {
+            sizeRatio: 1
+          }
+          FormPanelPullPlanReport_ListData
+          {
+          }
+          FormPanelPullPlanReport_DataSetLevelData
+          {
+            groupDepth: -1
+            column_PanelModel
+            {
+              columnId: 'PanelModel'
+              dataPath: 'PanelModel'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MaterialDescription
+            {
+              columnId: 'MaterialDescription'
+              dataPath: 'MaterialDescription'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_DemandQuantity
+            {
+              columnId: 'DemandQuantity'
+              dataPath: 'DemandQuantity'
+              dataType: 'real'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'BARREL'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '闈㈡澘鎷夋枡_鍚勪簨涓氶儴鎿嶄綔'
+  name: '闈㈡澘鎷夋枡_鍚勪簨涓氶儴鎿嶄綔'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\351\233\206\345\233\242\346\223\215\344\275\234.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\351\233\206\345\233\242\346\223\215\344\275\234.vw"
new file mode 100644
index 0000000..d5d1c39
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\351\235\242\346\235\277\346\213\211\346\226\231_\351\233\206\345\233\242\346\223\215\344\275\234.vw"
@@ -0,0 +1,1471 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPanelMaterialSpecializedDisplay
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialSpecializedDisplay'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialSpecializedDisplay'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialSpecializedDisplay_ListPanelMaterialSpecializedDisplay
+          {
+          }
+          FormPanelMaterialSpecializedDisplay_DataSetLevelPanelMaterialSpecializedDisplay
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialSportsHealth
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialSportsHealth'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialSportsHealth'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 6
+          columnPosition: 5
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialSportsHealth_ListPanelMaterialSportsHealth
+          {
+          }
+          FormPanelMaterialSportsHealth_DataSetLevelPanelMaterialSportsHealth
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialTM17
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialTM17'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialTM17'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 6
+          columnPosition: 9
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialTM17_ListPanelMaterialTM
+          {
+          }
+          FormPanelMaterialTM17_DataSetLevelPanelMaterialTM
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialTM18
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialTM18'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialTM18'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 7
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialTM18_ListPanelMaterialTM
+          {
+          }
+          FormPanelMaterialTM18_DataSetLevelPanelMaterialTM
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialIT
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialIT'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialIT'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 7
+          rowSpan: 6
+          columnPosition: 5
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialIT_ListPanelMaterialIT
+          {
+          }
+          FormPanelMaterialIT_DataSetLevelPanelMaterialIT
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialTianHua
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialTianHua'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialTianHua'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 7
+          rowSpan: 6
+          columnPosition: 9
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialTianHua_ListPanelMaterialTianHua
+          {
+          }
+          FormPanelMaterialTianHua_DataSetLevelPanelMaterialTianHua
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialAutomotiveElectronics
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialAutomotiveElectronics'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialAutomotiveElectronics'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 13
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialAutomotiveElectronics_ListPanelMaterialAutomotiveElectronics
+          {
+          }
+          FormPanelMaterialAutomotiveElectronics_DataSetLevelPanelMaterialAutomotiveElectronics
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPanelMaterialVehicle
+      {
+        title: 'QTIANMA_JITUAN::FormPanelMaterialVehicle'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPanelMaterialVehicle'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 13
+          rowSpan: 6
+          columnPosition: 5
+          columnSpan: 4
+        }
+        components
+        {
+          FormPanelMaterialVehicle_ListPanelMaterialVehicle
+          {
+          }
+          FormPanelMaterialVehicle_DataSetLevelPanelMaterialVehicle
+          {
+            groupDepth: -1
+            column_CurrencyID
+            {
+              columnId: 'CurrencyID'
+              dataPath: 'CurrencyID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Customer
+            {
+              columnId: 'Customer'
+              dataPath: 'Customer'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_CustomerID
+            {
+              columnId: 'CustomerID'
+              dataPath: 'CustomerID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ID
+            {
+              columnId: 'ID'
+              dataPath: 'ID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_IsEligibleForNetting
+            {
+              columnId: 'IsEligibleForNetting'
+              dataPath: 'IsEligibleForNetting'
+              dataType: 'boolean'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_IsExcludedFromFulfillmentKPIUser
+            {
+              columnId: 'IsExcludedFromFulfillmentKPIUser'
+              dataPath: 'IsExcludedFromFulfillmentKPIUser'
+              dataType: 'boolean'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_IsFirmed
+            {
+              columnId: 'IsFirmed'
+              dataPath: 'IsFirmed'
+              dataType: 'boolean'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_OrderDate
+            {
+              columnId: 'OrderDate'
+              dataPath: 'OrderDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_OrderID
+            {
+              columnId: 'OrderID'
+              dataPath: 'OrderID'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_OrderLineID
+            {
+              columnId: 'OrderLineID'
+              dataPath: 'OrderLineID'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Price
+            {
+              columnId: 'Price'
+              dataPath: 'Price'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_PriorityName
+            {
+              columnId: 'PriorityName'
+              dataPath: 'PriorityName'
+              dataType: 'string'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'string'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_SalesSegmentName
+            {
+              columnId: 'SalesSegmentName'
+              dataPath: 'SalesSegmentName'
+              dataType: 'string'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasureName
+            {
+              columnId: 'UnitOfMeasureName'
+              dataPath: 'UnitOfMeasureName'
+              dataType: 'string'
+              index: 16
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_DialogFusionData
+      {
+        title: 'QTIANMA_JITUAN::DialogFusionData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::DialogFusionData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 13
+          rowSpan: 6
+          columnPosition: 9
+          columnSpan: 4
+        }
+        components
+        {
+          DialogFusionData_pnlContent
+          {
+            sizeRatio: 1
+          }
+          DialogFusionData_pnlReceiveDatas
+          {
+            sizeRatio: 1
+          }
+          DialogFusionData_pnlSelectVersion
+          {
+            sizeRatio: 1
+          }
+          DialogFusionData_pnlActions
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'WATER_FISH'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
+  name: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
+  isglobal: false
+  isroot: true
+}
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
index 89de4e7..bb46e43 100644
--- a/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-21/_ROOT_Role_Dev-21.properties
@@ -501,7 +501,7 @@
 domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
 domainmodel.mdsstoragedefinitionmanager.audittrailenabled=false
 domainmodel.mdsstoragedefinitionmanager.audittraillocation=
-domainmodel.mdsstoragedefinitionmanager.databaseenabled=false
+domainmodel.mdsstoragedefinitionmanager.databaseenabled=true
 domainmodel.mdsstoragedefinitionmanager.datasetstoredatasource=MacroPlanner
 domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
 domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false

--
Gitblit v1.9.3