Tianma21
2023-10-08 1b0f461e0db93c3f504b8be975a5b7ffddbcc584
Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev
已重命名2个文件
已修改172个文件
已添加228个文件
已删除35个文件
13033 ■■■■ 文件已修改
LibMacroPlanner/BL/Relations/Relation_MPSync_ImportExcel_ImportExcel_MPSync.qbl 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_UnitPeriodTimeBase/Function_CalcTotalAvailableCapacity.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlannerOptimizer/BL/Type_CapacityPlanningSuboptimizer/Method_CapacityPlanningAlgorithmHandleFeasibleOperationDependentDemandInputG.qbl 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlannerOptimizer/BL/Type_SelectorFullPuzzle/Method_SetOptimizerInput.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibSOPImportExport/BL/Type_LibSOPImpExp_DataSource/Method_HasAllRequiredFilesForImport#522.qbl 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibSOPImportExport/BL/Type_LibSOPImpExp_DataSource/Method_HasAllRequiredFilesForImport.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibSOPImportExport/BL/Type_LibSOPImpExp_ImportExcel/Method_CanImport#382.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibSOPImportExport/metadata.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_CustomerGrade.qbl 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_DOI_DSI.qbl 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_ScenarioManager_ScenarioManager_Ca.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_ScenarioManager_ScenarioManager_Capaci.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_ScenarioManager_ScenarioManag.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_ScenarioManager_ScenarioManager_.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_MPSync_MPSync_CapacityAndSal.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_ScenarioManager_ScenarioManager_Capa.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_ScenarioManager_ScenarioManager_Cap.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_Ca.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_ScenarioManager_ScenarioManager_Capa.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_GlobalOTDTable_Global_ShowCell_Global_ShowCell_GlobalOTDTable.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_GlobalOTDTable_Global_ShowColumn_Global_ShowColumn_GlobalOTDTable.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_GlobalOTDTable_Global_ShowRow_Global_ShowRow_GlobalOTDTable.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_Global_MappingCustomerGrade_GlobalOTDTable_GlobalOTDTable_Global_Ma.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_Global_MappingDOI_DSI_GlobalOTDTable_GlobalOTDTable_Global_MappingD.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_Global_ShowColumn_Global_ShowCell_Global_ShowCell_Global_ShowColumn.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_Global_ShowRow_Global_ShowCell_Global_ShowCell_Global_ShowRow.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/StaticMethod_GetBusinessNameStr.qbl 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BusinessType/StaticMethod_GetScenarioNamesStr.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FillingCapacityOrder/Attribute_ID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FillingCapacityOrder/Attribute_OrderType.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FillingCapacityOrder/Attribute_State.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FillingCapacityOrder/TypeIndex_FillingCapacityOrderTypeIndex.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_DeleteDetails.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart#156.qbl 301 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart.qbl 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompareExport.qbl 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AIPISPIP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ConversionFactor.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomOrder.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Forecast.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_InventorySupply.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Operation.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationBOM.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationCost.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Product_MP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SalesSegment_MP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_StockingPointCost.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_UnitOfMeasure_MP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AIPISPIP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ConversionFactor.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomOrder.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomerGrade.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_DOI_DSI.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Forecast.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_InventorySupply.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Operation.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationBOM.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationCost.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ProductInLane.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Product_MP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SalesSegment_MP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_StockingPointCost.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SetIsLinkedWithFinishedGoodAttributes.qbl 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SettingFailureDetails.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SettingSuccessfulDetails.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_Test.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecuteUser.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecutionStatus.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CanRun.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CreateInOperation.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/Attribute_OrderTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/Attribute_OrderType#905.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/Attribute_OrderType.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/Attribute_ProductGrade.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/Attribute_SegmentPriority.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/Attribute_SheetProfitability.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomerGrade/Attribute_BusinessType.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomerGrade/Attribute_Customer.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomerGrade/Attribute_CustomerGrade.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomerGrade/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomerGrade/TypeIndex_Global_MappingCustomerGradeTypeIndex.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomerGrade/_ROOT_Type_Global_MappingCustomerGrade.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_DOI.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_DSI.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_OrganCode.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_ProductID.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingDOI_DSI/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingDOI_DSI/TypeIndex_Global_MappingDOI_DSITypeIndex.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingDOI_DSI/_ROOT_Type_Global_MappingDOI_DSI.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperation/Attribute_IsLinkedWithFinishedGood.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperationBOM/Attribute_IsLinkedWithFinishedGood.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMCount.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Attribute_IsLinkedWithFinishedGood.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/Method_SetIsLinkedWithFinishedGoodAttributes_Recursive.qbl 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeInterfaceData.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowCell/Attribute_Value.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_CustomOrder.qbl 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowCell/StaticMethod_SetColumnsAndRows.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowCell/_ROOT_Type_Global_ShowCell.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowColumn/Attribute_ColumnIndex.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowColumn/Attribute_ColumnName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowColumn/StaticMethod_CreateColumn.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowColumn/_ROOT_Type_Global_ShowColumn.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowRow/Attribute_RowNr.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_ShowRow/_ROOT_Type_Global_ShowRow.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetBOMBySKU.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetProductInfo#1.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastData.qbl 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastDataEx.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ImportExcel/Method_Execute.qbl 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ImportExcel/_ROOT_Type_ImportExcel.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibSOPImpExp_ExportExcel/StaticMethod_IsDataSourceIncluded_Tianma.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibSOPImpExp_ExportExcel/_ROOT_Type_LibSOPImpExp_ExportExcel.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/Method_ImportExcels_Tianma.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter#323.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter0.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_ImportExcels_Tianma.qbl 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Operation/Method_GetHasValidOperationInputOutput.qbl 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_CheckNameValid.qbl 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactorDetails/StaticMethod_CreateTestData.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductInStockingPointInPeriodPlanningLeaf/FunctionOverride_CalcStockLevelInDays.qbl 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductInStockingPointInPeriodPlanningLeaf/_ROOT_Type_ProductInStockingPointInPeriodPlanningLeaf.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Routing/Method_DoSanityCheckData.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Routing/Method_GetHasTianmaNonSupplierOperationWithNoInput.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Scenario/Attribute_ScenarioName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl 301 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompareExport.qbl 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_ImportExcels_Tianma.qbl 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/StaticMethod_AvailableBusinessTypes.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/StaticMethod_AvailableScenarioNames.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/Attribute_TestDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/Attribute_TestReal.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/Attribute_TestString.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/StaticMethod_Export.qbl 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/StaticMethod_ExportTest#887.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/Sys/ImgAttr/Global_BrokerExecuteLog.dme 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_TIANMA_JITUAN_mbMainMenu_MenuGlobalOTDTableTest_OnClick.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews#633.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuSalesFillingCapacity.def 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgInterfaceTest.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationDevelopmentActionBarPageDef#1.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonPriority_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingCapac.def 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingS#360.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingSchem.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgInterfaceTest_btnInterfaceTest_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Component_pnlContent.def 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Method_CalculatePriorityResult.def 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Method_OpenChoose.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnOk_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlContent_DataHolderChoosePriorityPolicy_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlContent_DataHolderChoosePriorityPolicy_OnDataChanged.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/_ROOT_Component_DialogChoosePriorityPolicy.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Response_pnlActions_btnOk_OnClick.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral#549.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Component_pnlActions.def 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Component_pnlContent.def 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Method_ClickBynOk.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Method_EditCustomerOrderPriority.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Response_pnlActions_btnApply_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Response_pnlActions_btnOk_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/_ROOT_Component_DialogEditCustomerOrderPriority.def 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_ClickBtnOk.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_Edit.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_Edit.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType#367.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC#663.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_ListSalesDemands.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuEditCustomerOrderPriority_OnClic.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuPriorityResult_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_ListFillingCapacityOrder.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_PanelFillingCapacityOrder.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/_ROOT_Component_FormFillingCapacityOrder.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_ListCustomerAndFillingCapacityOrder.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_PanelButton.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuDelete_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuSelectAll_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/_ROOT_Component_FormCustomerAndForecastOrder.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_OnSelectionChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_ListInterfaceTest.def 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog#981.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2#456.def 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listActionBarPageInterfaceTest.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuDelete_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuSelectionAll_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Component_ListIssueWorkOrder.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Response_ListIssueWorkOrder_MenuEdit_OnClick.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormKpiMatrix/Component_PanelKpiMatrixButton.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormKpiMatrix/_ROOT_Component_FormKpiMatrix.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorBusinessType_OnCreated.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorBusinessType_OnDataChanged.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInitData_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInit_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick#106.def 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyCoefficient#902.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton#713.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyBusinessType_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyBusinessType_OnDataChanged.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyFactor_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyFactor_OnDataChanged.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicySelectBusinessType_OnCreated.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnCreated.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick#545.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick#549.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_matrixEditorActionBarPageShowInterfaceData.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_matrixeditorContextMenuShowInterfaceData.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Material/Response_OnCreated.def 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnDoubleClick.def 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Add_FM_OnClick#975.def 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel351.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Material_FOF503_OnClick#222.def 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Order_FOF449_OnClick#880.def 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_InitialData778_OnClick#971.def 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_liH_Forecast_OnDoubleClick.def 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_List212.def 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_listActionBarPage441.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_listContextMenu182.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Response_Button593_OnClick.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Response_ButtonERP订单_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/_ROOT_Component_Frm_TEST.def 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_SWF_DialogCeateNextStepDefinitionDependency/Component_pnlContent.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_SWF_DialogCeateNextStepDefinitionDependency/_ROOT_Component_SWF_DialogCeateNextStepDefinitionDependency.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw 351 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/FillingCapacityOrder.vw 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/FillingCapacityOrderHistorical.vw 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw 2745 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Test.vw 794 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/接口测试.vw 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_var/_Main/ProjSettings/MacroPlannerWebApp/Views/FillingCapacityOrder.vw 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_var/_Main/ProjSettings/MacroPlannerWebApp/Views/FillingCapacityOrderHistorical.vw 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Relations/Relation_MPSync_ImportExcel_ImportExcel_MPSync.qbl
@@ -12,7 +12,6 @@
    Cardinality: '1toN'
    ObjectDefinition: MPSync
    OwningSide: 'Owned'
    InterfaceProperties { Accessibility: 'Module' }
  }
  RelationSide.RightSide MPSync
  {
@@ -20,6 +19,5 @@
    Cardinality: '0to1'
    ObjectDefinition: ImportExcel
    OwningSide: 'Reference'
    InterfaceProperties { Accessibility: 'Module' }
  }
}
LibMacroPlanner/BL/Type_UnitPeriodTimeBase/Function_CalcTotalAvailableCapacity.qbl
@@ -16,7 +16,8 @@
                               
      if( not isnull( planningup ) )
      {
         value := planningup.BaseAvailableCapacity().HoursAsReal() * planningup.MaximumLoadPercentage() / 100;
         value := planningup.BaseAvailableCapacity().HoursAsReal() * planningup.MaximumLoadPercentage() / 100
                  * this.PlanningSystemRatio(); // Tianma fix 20230926
      }
    }
    else
LibMacroPlannerOptimizer/BL/Type_CapacityPlanningSuboptimizer/Method_CapacityPlanningAlgorithmHandleFeasibleOperationDependentDemandInputG.qbl
@@ -9,7 +9,6 @@
  Description: 'Assign the optimal quantity from optimizer for dependent demand in input group.'
  TextBody:
  [*
    // Tianma fix 20230727
    // Dependent demand of input group fulfillment
    ptperiod := periodtaskoperation.UnitPeriod().Period_MP();
    operation := periodtaskoperation.Operation();
@@ -19,22 +18,24 @@
              dd, 
              dd.HasRegularProductForOptimizer() or dd.OperationInput().GetIsProductInOptimizerRun( runcontext.IsPostProcessing() ) )
    {
      pispipperiods := construct( Period_MPs, constcontent );
      if ( getfromperiodtask ) // in case we are able to get from period tasks, below method refinds periodtask for (operation, ptperiod) i.e. periodtaskoperation and then output dep.demand periods
      {
        traverse( periodtaskoperation, DependentDemand.ProductInStockingPointInPeriodPlanningLeaf.Period_MP, ddperiod )
        {
          pispipperiods.Add( ddperiod );
        }
      }
      else
      {
        CapacityPlanningSuboptimizer::GetOperationDependentDemandPeriods( ptperiod, operation, &pispipperiods, getfromperiodtask );
      }
      fulfilledqty := 0.0;
      
      fulfilledqty := 0.0;
      if( operation.HasLeadTime() )     // Get the dependent demands that is located at different period from the period of period task.
      {
        // compute dependent demand periods
        pispipperiods := construct( Period_MPs, constcontent );
        if ( getfromperiodtask ) // in case we are able to get from period tasks, below method refinds periodtask for (operation, ptperiod) i.e. periodtaskoperation and then output dep.demand periods
        {
          traverse( periodtaskoperation, DependentDemand.ProductInStockingPointInPeriodPlanningLeaf.Period_MP, ddperiod )
          {
            pispipperiods.Add( ddperiod );
          }
        }
        else
        {
          CapacityPlanningSuboptimizer::GetOperationDependentDemandPeriods( ptperiod, operation, &pispipperiods, getfromperiodtask );
        }
        fulfilledqty := sum( pispipperiods, Elements, pispipperiod,
                             this.GetOptimalValue( program.PartialOperationDemandQtyVariables().Get( dd.OperationInput(), pispipperiod, ptperiod ) ) );
        if ( runcontext.IsMetaIteration() and operation.IsBlending() ) // no filtering for numerical sensitive blending operation in meta optimizer
@@ -44,15 +45,15 @@
        }                     
      }
      else
      {
        fulfilledqty := sum( pispipperiods, Elements, pispipperiod,
                             this.GetOptimalValue( program.OperationDemandQtyVariables().Get( dd.OperationInput(), pispipperiod ) ) );
      {
        // note that in case there is no lead time then the set of dependent demand periods just equals the singleton set {ptperiod}
        fulfilledqty := this.GetOptimalValue( program.OperationDemandQtyVariables().Get( dd.OperationInput(), ptperiod ) );
        if( runcontext.IsMetaIteration() and operation.IsBlending() ) // no filtering for numerical sensitive blending operation in meta optimizer
        {
          fulfilledqty := sum( pispipperiods, Elements, pispipperiod,
                               this.GetOptimalValueUnfiltered( program.OperationDemandQtyVariables().Get( dd.OperationInput(), pispipperiod ) ) );
          fulfilledqty := this.GetOptimalValueUnfiltered( program.OperationDemandQtyVariables().Get( dd.OperationInput(), ptperiod ) );
        }
      }
      dd.OptimizerFulfilledQuantity( fulfilledqty );
    }
  *]
LibMacroPlannerOptimizer/BL/Type_SelectorFullPuzzle/Method_SetOptimizerInput.qbl
@@ -175,10 +175,12 @@
      
      if ( ddperiodstotal.Size() > 0 ) 
      {
        minstart := min( ddperiodstotal, Elements, p, p.Start() );
        minstartperiods := min( periods, Elements, p, p.Start() );
        pispiptoadd := selectset( operation, 
                                  OperationInput.ProductInStockingPoint_MP.ProductInStockingPointInPeriodPlanning, 
                                  pispip,
                                  ddperiodstotal.Find( pispip.Period_MP() ) > 0
                                  pispip.Start() >= minstart and pispip.Start() < minstartperiods // must add the entire block. Don't want gaps in the pispip horizon
                                  and ( pispip.HasRegularProductForOptimizer() or pispip.GetProductIsIncludedInOptimizerRun( runcontext.IsPostProcessing() ) ) 
                                  and not scope.Contains( pispip.PISPIPInOptimizerRun() ) )
                                    
LibSOPImportExport/BL/Type_LibSOPImpExp_DataSource/Method_HasAllRequiredFilesForImport#522.qbl
@@ -1,6 +1,9 @@
Quintiq file version 2.0
#parent: #root
Method HasAllRequiredFilesForImport (output Strings missingFiles_o, Boolean needUserUploadAllFiles) as Boolean
Method HasAllRequiredFilesForImport (
  output Strings missingFiles_o,
  Boolean needUserUploadAllFiles
) remote as Boolean
{
  TextBody:
  [*
LibSOPImportExport/BL/Type_LibSOPImpExp_DataSource/Method_HasAllRequiredFilesForImport.qbl
@@ -1,6 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method HasAllRequiredFilesForImport (output Strings missingFiles_o) as Boolean
Method HasAllRequiredFilesForImport (
  output Strings missingFiles_o
) remote as Boolean
{
  TextBody:
  [*
LibSOPImportExport/BL/Type_LibSOPImpExp_ImportExcel/Method_CanImport#382.qbl
@@ -1,6 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method CanImport (output Strings missingFiles_o) as Boolean
Method CanImport (
  output Strings missingFiles_o
) remote as Boolean
{
  Description: 'Checks if necessary files are sufficent before starting import.'
  TextBody:
LibSOPImportExport/metadata.properties
@@ -5,4 +5,4 @@
system=false
version.component=2022.3.0.0
version.fileformat=2
version.quintiq=6.3.3.0 NightlyBuild 247983, build 247983
version.quintiq=6.3.3.0 , build 248673
_Main/BL/EDI/Broker_GlobalOTDTable_CustomOrder.qbl
@@ -21,12 +21,16 @@
      EDIMLColumn OrderDate { Attribute: OrderDate ValueType: Date }
      EDIMLColumn OrderID { Attribute: OrderID ValueType: String }
      EDIMLColumn OrderLineID { Attribute: OrderLineID ValueType: String }
      EDIMLColumn OrderTime { Attribute: OrderTime ValueType: Date }
      EDIMLColumn OrderType { Attribute: OrderType ValueType: String }
      EDIMLColumn Price { Attribute: Price ValueType: Real }
      EDIMLColumn PriorityName { Attribute: PriorityName ValueType: String }
      EDIMLColumn ProductGrade { Attribute: ProductGrade ValueType: String }
      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
      EDIMLColumn Quantity { Attribute: Quantity ValueType: Real }
      EDIMLColumn SalesSegmentName { Attribute: SalesSegmentName ValueType: String }
      EDIMLColumn SegmentPriority { Attribute: SegmentPriority ValueType: String }
      EDIMLColumn SheetProfitability { Attribute: SheetProfitability ValueType: String }
      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
    }
@@ -93,7 +97,7 @@
      EDIODBCLinkColumn ORDERTIME
      {
        OthersMayUpdateColumn: true
        ValueType: String
        ValueType: DateTime
      }
      EDIODBCLinkColumn ORDERTYPE
      {
@@ -184,12 +188,33 @@
      }
      EDIColumnMatch { InputColumn: ORDERID OutputColumn: OrderID }
      EDIColumnMatch { InputColumn: ORDERLINEID OutputColumn: OrderLineID }
      EDIColumnMatch { InputColumn: ORDERTIME OutputColumn: OrderType }
      EDIColumnMatch
      {
        InputColumn: ORDERTIME
        OutputColumn: OrderTime
        Converter
        {
          XMLDefinition:
          [*
            <?xml version="1.0" encoding="UTF-16"?>
            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
              <IsStandard>true</IsStandard>
              <IsISO>false</IsISO>
              <IsCustom>false</IsCustom>
              <ConversionType>0</ConversionType>
            </DateTimeToDate>
          *]
        }
      }
      EDIColumnMatch { InputColumn: ORDERTYPE OutputColumn: OrderType }
      EDIColumnMatch { InputColumn: PRICE OutputColumn: Price }
      EDIColumnMatch { InputColumn: PRIORITYNAME OutputColumn: PriorityName }
      EDIColumnMatch { InputColumn: PRODUCTGRADE OutputColumn: ProductGrade }
      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
      EDIColumnMatch { InputColumn: QUANTITY OutputColumn: Quantity }
      EDIColumnMatch { InputColumn: SALESEGMENTNAME OutputColumn: SalesSegmentName }
      EDIColumnMatch { InputColumn: SEGMENTPRIORITY OutputColumn: SegmentPriority }
      EDIColumnMatch { InputColumn: SHEETPROFITABILITY OutputColumn: SheetProfitability }
      EDIColumnMatch { InputColumn: STOCKINGPOINTID OutputColumn: StockingPointID }
      EDIColumnMatch { InputColumn: UNITOFMEASURENAME OutputColumn: UnitOfMeasureName }
    }
_Main/BL/EDI/Broker_GlobalOTDTable_CustomerGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
Quintiq file version 2.0
#parent: #root
EDIBroker GlobalOTDTable_CustomerGrade
{
  MDSDefinition: GlobalOTDTable
  TimeZone: 'ACT'
  UseOSTimeZone: false
  EDIModelLink.Destination Destination16
  {
    EDIMLTable Global_MappingCustomerGrade
    {
      PrimaryKeyColumns: BusinessType
      PrimaryKeyColumns: Customer
      PrimaryKeyColumns: CustomerGrade
      TargetType: Global_MappingCustomerGrade
      TypeIndex: Global_MappingCustomerGradeTypeIndex
      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
      EDIMLColumn Customer { Attribute: Customer ValueType: String }
      EDIMLColumn CustomerGrade { Attribute: CustomerGrade ValueType: String }
    }
  }
  EDIODBCLink.Source Source15
  {
    DataIntegrityStrategy: 'Disabled'
    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
    EDIODBCLinkTable MID_CUSTOMERGRADE
    {
      OthersMayCreateTable: true
      OthersMayDeleteRow: true
      OthersMayDropTable: true
      OthersMayFlushTable: true
      OthersMayInsertRow: true
      Parameters: '/owner="OTD"'
      PrimaryKeyColumns: CUSTOMER
      RecordModificationHintStrategy: 'None'
      EDIODBCLinkColumn BUSINESSTYPE
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn CUSTOMER
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn CUSTOMERGRADE
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
    }
  }
  EDITransformation.Transformation Transformation15
  {
    EDITableTransformation
    {
      InputTable: MID_CUSTOMERGRADE
      OutputTable: Global_MappingCustomerGrade
      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
      EDIColumnMatch { InputColumn: CUSTOMER OutputColumn: Customer }
      EDIColumnMatch { InputColumn: CUSTOMERGRADE OutputColumn: CustomerGrade }
    }
  }
}
_Main/BL/EDI/Broker_GlobalOTDTable_DOI_DSI.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
Quintiq file version 2.0
#parent: #root
EDIBroker GlobalOTDTable_DOI_DSI
{
  MDSDefinition: GlobalOTDTable
  TimeZone: 'ACT'
  UseOSTimeZone: false
  EDIModelLink.Destination Destination15
  {
    EDIMLTable Global_MappingDOI_DSI
    {
      PrimaryKeyColumns: OrganCode
      PrimaryKeyColumns: ProductID
      TargetType: Global_MappingDOI_DSI
      TypeIndex: Global_MappingDOI_DSITypeIndex
      EDIMLColumn DOI { Attribute: DOI ValueType: String }
      EDIMLColumn DSI { Attribute: DSI ValueType: String }
      EDIMLColumn OrganCode { Attribute: OrganCode ValueType: String }
      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
    }
  }
  EDIODBCLink.Source Source14
  {
    DataIntegrityStrategy: 'Disabled'
    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
    EDIODBCLinkTable MID_DOI_DSI
    {
      OthersMayCreateTable: true
      OthersMayDeleteRow: true
      OthersMayDropTable: true
      OthersMayFlushTable: true
      OthersMayInsertRow: true
      Parameters: '/owner="OTD"'
      PrimaryKeyColumns: ORGANCODE
      PrimaryKeyColumns: PRODUCTID
      RecordModificationHintStrategy: 'None'
      EDIODBCLinkColumn DOI
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn DSI
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn ORGANCODE
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn PRODUCTID
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
    }
  }
  EDITransformation.Transformation Transformation14
  {
    EDITableTransformation
    {
      InputTable: MID_DOI_DSI
      OutputTable: Global_MappingDOI_DSI
      EDIColumnMatch { InputColumn: DOI OutputColumn: DOI }
      EDIColumnMatch { InputColumn: DSI OutputColumn: DSI }
      EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
    }
  }
}
_Main/BL/InfoMessages.qbl
@@ -10,4 +10,8 @@
  {
    DefaultText: 'Please input validate value !'
  }
}
  InfoMessage PriorityFactor_CheckNameValid
  {
    DefaultText: '该优先级因子名称已存在!'
  }
}
_Main/BL/KnowledgeBaseDomain_MacroPlanner/KnowledgeBase_Knowledge_MP/_ROOT_KnowledgeBase_Knowledge_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #root
KnowledgeBase Knowledge_MP #extension
{
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeChartElement
{
  #keys: '1[414384.0.921264786]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264788][414384.0.921264787][414384.0.921264789]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeChartElement
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeChartElement
  {
    #keys: '3[414384.0.921264791][414384.0.921264790][414384.0.921264792]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_ScenarioManager_ScenarioManager_Ca.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeChartRow
{
  #keys: '1[414384.0.921264769]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264771][414384.0.921264770][414384.0.921264772]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeChartRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeChartRow
  {
    #keys: '3[414384.0.921264774][414384.0.921264773][414384.0.921264775]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_ScenarioManager_ScenarioManager_Capaci.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeCompareItemColumn
{
  #keys: '1[414384.0.921264730]'
  ProceduralSequenceRelationStrategy
  {
    #keys: '13[0.0.0][414384.0.921264749][414384.0.921264743][414384.0.921264750][414384.0.921264744][414384.0.921264751][414384.0.921264745][414384.0.921264752][414384.0.921264746][414384.0.921264753][414384.0.921264747][414384.0.921264754][414384.0.921264748]'
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264732][414384.0.921264731][414384.0.921264733]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeCompareItemColumn
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeCompareItemColumn
  {
    #keys: '3[414384.0.921264735][414384.0.921264734][414384.0.921264736]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_ScenarioManager_ScenarioManag.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeCompareItemRow
{
  #keys: '1[414384.0.921264713]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264715][414384.0.921264714][414384.0.921264716]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeCompareItemRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeCompareItemRow
  {
    #keys: '3[414384.0.921264718][414384.0.921264717][414384.0.921264719]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_ScenarioManager_ScenarioManager_.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterBusinessType
{
  #keys: '1[414384.0.921264696]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264698][414384.0.921264697][414384.0.921264699]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeFilterBusinessType
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeFilterBusinessType
  {
    #keys: '3[414384.0.921264701][414384.0.921264700][414384.0.921264702]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_MPSync_MPSync_CapacityAndSal.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterItem
{
  #keys: '1[414384.0.921264679]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264681][414384.0.921264680][414384.0.921264682]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeFilterItem
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeFilterItem
  {
    #keys: '3[414384.0.921264684][414384.0.921264683][414384.0.921264685]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_ScenarioManager_ScenarioManager_Capa.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterMonth
{
  #keys: '1[414384.0.921264662]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264664][414384.0.921264663][414384.0.921264665]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeFilterMonth
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeFilterMonth
  {
    #keys: '3[414384.0.921264667][414384.0.921264666][414384.0.921264668]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_ScenarioManager_ScenarioManager_Cap.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
{
  #keys: '1[414384.0.921264645]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264647][414384.0.921264646][414384.0.921264648]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
  {
    #keys: '3[414384.0.921264650][414384.0.921264649][414384.0.921264651]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_Ca.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterYear
{
  #keys: '1[414384.0.921264628]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414384.0.921264630][414384.0.921264629][414384.0.921264631]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAndSaleBudgeFilterYear
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAndSaleBudgeFilterYear
  {
    #keys: '3[414384.0.921264633][414384.0.921264632][414384.0.921264634]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_ScenarioManager_ScenarioManager_Capa.qbl
ÎļþÒÑɾ³ý
_Main/BL/Relations/Relation_GlobalOTDTable_Global_ShowCell_Global_ShowCell_GlobalOTDTable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation GlobalOTDTable_Global_ShowCell_Global_ShowCell_GlobalOTDTable
{
  #keys: '1[414702.0.483720679]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Global_ShowCell
  {
    #keys: '3[414702.0.483720681][414702.0.483720680][414702.0.483720682]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
  RelationSide.RightSide GlobalOTDTable
  {
    #keys: '3[414702.0.483720684][414702.0.483720683][414702.0.483720685]'
    Cardinality: '0to1'
    ObjectDefinition: Global_ShowCell
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_GlobalOTDTable_Global_ShowColumn_Global_ShowColumn_GlobalOTDTable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation GlobalOTDTable_Global_ShowColumn_Global_ShowColumn_GlobalOTDTable
{
  #keys: '1[414702.0.483720692]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Global_ShowColumn
  {
    #keys: '3[414702.0.483720694][414702.0.483720693][414702.0.483720695]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
  RelationSide.RightSide GlobalOTDTable
  {
    #keys: '3[414702.0.483720697][414702.0.483720696][414702.0.483720698]'
    Cardinality: '0to1'
    ObjectDefinition: Global_ShowColumn
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_GlobalOTDTable_Global_ShowRow_Global_ShowRow_GlobalOTDTable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation GlobalOTDTable_Global_ShowRow_Global_ShowRow_GlobalOTDTable
{
  #keys: '1[414702.0.483720663]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Global_ShowRow
  {
    #keys: '3[414702.0.483720665][414702.0.483720664][414702.0.483720666]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
  RelationSide.RightSide GlobalOTDTable
  {
    #keys: '3[414702.0.483720668][414702.0.483720667][414702.0.483720669]'
    Cardinality: '0to1'
    ObjectDefinition: Global_ShowRow
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_Global_MappingCustomerGrade_GlobalOTDTable_GlobalOTDTable_Global_Ma.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation Global_MappingCustomerGrade_GlobalOTDTable_GlobalOTDTable_Global_MappingCustomerGrade
{
  #keys: '1[414702.0.445485678]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414702.0.445485680][414702.0.445485679][414702.0.445485681]'
    Cardinality: '0to1'
    ObjectDefinition: Global_MappingCustomerGrade
    OwningSide: 'Reference'
  }
  RelationSide.RightSide Global_MappingCustomerGrade
  {
    #keys: '3[414702.0.445485683][414702.0.445485682][414702.0.445485684]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_Global_MappingDOI_DSI_GlobalOTDTable_GlobalOTDTable_Global_MappingD.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation Global_MappingDOI_DSI_GlobalOTDTable_GlobalOTDTable_Global_MappingDOI_DSI
{
  #keys: '1[414702.0.445364657]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414702.0.445364659][414702.0.445364658][414702.0.445364660]'
    Cardinality: '0to1'
    ObjectDefinition: Global_MappingDOI_DSI
    OwningSide: 'Reference'
  }
  RelationSide.RightSide Global_MappingDOI_DSI
  {
    #keys: '3[414702.0.445364662][414702.0.445364661][414702.0.445364663]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_Global_ShowColumn_Global_ShowCell_Global_ShowCell_Global_ShowColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation Global_ShowColumn_Global_ShowCell_Global_ShowCell_Global_ShowColumn
{
  #keys: '1[414702.0.483720723]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Global_ShowCell
  {
    #keys: '3[414702.0.483720725][414702.0.483720724][414702.0.483720726]'
    Cardinality: '1toN'
    ObjectDefinition: Global_ShowColumn
    OwningSide: 'Reference'
  }
  RelationSide.RightSide Global_ShowColumn
  {
    #keys: '3[414702.0.483720728][414702.0.483720727][414702.0.483720729]'
    Cardinality: '0to1'
    ObjectDefinition: Global_ShowCell
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_Global_ShowRow_Global_ShowCell_Global_ShowCell_Global_ShowRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation Global_ShowRow_Global_ShowCell_Global_ShowCell_Global_ShowRow
{
  #keys: '1[414702.0.483720707]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Global_ShowCell
  {
    #keys: '3[414702.0.483720709][414702.0.483720708][414702.0.483720710]'
    Cardinality: '1toN'
    ObjectDefinition: Global_ShowRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide Global_ShowRow
  {
    #keys: '3[414702.0.483720712][414702.0.483720711][414702.0.483720713]'
    Cardinality: '0to1'
    ObjectDefinition: Global_ShowCell
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation OrganCode_BusinessType_BusinessType_OrganCode
{
  #keys: '1[412960.0.276650038]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide BusinessType
  {
    #keys: '3[412960.0.276650040][412960.0.276650039][412960.0.276650041]'
    Cardinality: '0to1'
    ObjectDefinition: OrganCode
    OwningSide: 'Reference'
  }
  RelationSide.RightSide OrganCode
  {
    #keys: '3[412960.0.276650043][412960.0.276650042][412960.0.276650044]'
    Cardinality: '1toN'
    ObjectDefinition: BusinessType
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation YuxTest_MPSync_MPSync_YuxTest
{
  #keys: '1[414384.0.915854641]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide MPSync
  {
    #keys: '3[414384.0.915854643][414384.0.915854642][414384.0.915854644]'
    Cardinality: '0to1'
    ObjectDefinition: YuxTest
    OwningSide: 'Reference'
  }
  RelationSide.RightSide YuxTest
  {
    #keys: '3[414384.0.915854646][414384.0.915854645][414384.0.915854647]'
    Cardinality: '1toN'
    ObjectDefinition: MPSync
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl
@@ -3,5 +3,6 @@
Attribute BusinessTypeName
{
  #keys: '3[414382.0.361554811][414382.0.361554810][414382.0.361554812]'
  Description: '事业部名称'
  ValueType: String
}
_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DisplayType
{
  #keys: '3[412960.0.276650024][412960.0.276650023][412960.0.276650025]'
  Description: '显示类型'
  ValueType: String
}
_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ScenarioName
{
  #keys: '3[412960.0.276650011][412960.0.276650010][412960.0.276650012]'
  Description: '场景名称'
  ValueType: String
}
_Main/BL/Type_BusinessType/StaticMethod_CreateData.qbl
@@ -2,6 +2,7 @@
#parent: #root
StaticMethod CreateData (
  GlobalOTDTable owner,
  MacroPlan macroPlan,
  String businessName
)
{
_Main/BL/Type_BusinessType/StaticMethod_GetBusinessNameStr.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_BusinessType/StaticMethod_GetScenarioNamesStr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetScenarioNamesStr (
  GlobalOTDTable owner
) as String
{
  TextBody:
  [*
    // NBoTk Sep-7-2023 (created)
    // èŽ·å–businessType é›†åˆ
    result := "";
    scenarioNameList := construct( structured[String]);
    traverse( owner,BusinessType,b)
    {
        scenarioNameList.Add( b.ScenarioName() );
    }
    // å¦‚果存在businessType数据 åˆ™è¿”回 : a,b,c
    if( not isnull( scenarioNameList ) )
    {
        result := scenarioNameList.Concatenate( ";" );
    }
    // æµ‹è¯•数据
    //result := "集团面板;专业显示事业部;外卖CELL;非显;运动健康;运动健康事业部;手机事业部;特种显示;汽车电子事业部;车载显示事业部;IT事业部";
    return result;
  *]
}
_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl
@@ -19,7 +19,7 @@
    
    traverse ( finaleProductInStockingPoint_MPs, Elements, fpispmp ) {
      capacityAllocationResultsRuleConfigurations := selectset( globalOTDTable, CapacityAllocationResultsRuleConfiguration, tempCARRC, tempCARRC.ModuleMaterialCode() = fpispmp.ProductID() and tempCARRC.StockingPointID() = fpispmp.StockingPointID() );
      info( "生产的产品:", fpispmp.ProductID(), "------产品在库存点-------:", fpispmp.StockingPointID() );
    //  info( "生产的产品:", fpispmp.ProductID(), "------产品在库存点-------:", fpispmp.StockingPointID() );
      traverse ( period_MPS, Elements, pmp ) {     
        // CapacityAllocationResults::IterativeGeneration( globalOTDTable, pisp, 1, null( NewSupply ), -1.0, pmp.StartDate() ); è€ç‰ˆ
        CapacityAllocationResults::IterativeGeneration2( globalOTDTable, fpispmp, pmp.StartDate(), capacityAllocationResultsRuleConfigurations, 0, null( NewSupply ), 0.0 );
_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
@@ -13,7 +13,7 @@
  TextBody:
  [*
    numberOfLayers++;
    info( "目标时间:", targetDate.Format( "Y-M2-D2" ) );
    //info( "目标时间:", targetDate.Format( "Y-M2-D2" ) );
    info( pisp.Name() );
    traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, pispippl.Start().Date() = targetDate ) {
      traverse ( pispippl, NewSupply, ns, ns.Quantity() > 0 ) {
@@ -23,14 +23,17 @@
        
        ontype( ns.PeriodTask_MP() ) {
          PeriodTaskOperation as pto : {
            info( "Operation周期任务..." );
    //        info( "Operation周期任务..." );
            traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) {
              if ( numberOfLayers = 1 ) {
                currentLayerDependentDemandQuantity := ns.Quantity();
              }
              currentLayerDependentDemandQuantity := currentLayerDependentDemandQuantity                     * 
                                                     ns.ProcessOutput().astype( OperationOutput ).Quantity() *
                                                     dd.ProcessInput().astype( OperationInput ).Quantity();
              info( "层数:", numberOfLayers, "    å½“前供应的pisp:", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    æ€»ä¾›åº”值:", ns.Quantity(), "    éœ€è¦ä¾›åº”值:", currentLayerDependentDemandQuantity,
                    "    å½“前需求pisp:", dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    éœ€æ±‚值:", currentLayerDependentDemandQuantity );
              info( "-----------------------------------------------------------------------------------------------------------------" );
    //          info( "层数:", numberOfLayers, "    å½“前供应的pisp:", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    æ€»ä¾›åº”值:", ns.Quantity(), "    éœ€è¦ä¾›åº”值:", currentLayerDependentDemandQuantity,
    //                "    å½“前需求pisp:", dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    éœ€æ±‚值:", currentLayerDependentDemandQuantity );
    //          info( "-----------------------------------------------------------------------------------------------------------------" );
              CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
                                                               dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
                                                               targetDate,
@@ -42,7 +45,7 @@
            }
            carrc := select( carrcs, Elements, carrc, carrc.PanelMaterialCode() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() );
            if ( not isnull( carrc ) ) {
              info( "找到面板物料..." );
    //          info( "找到面板物料..." );
              globalOTDTable.CapacityAllocationResults( relnew,
                                                        PanelBase             := pto.Operation().UnitID(),
                                                        PanelMaterialCode     := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
@@ -58,7 +61,7 @@
                                                        Description           := "",
                                                        ID                    := OS::GenerateGUIDAsString(),
                                                        ProductID             := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
                                                        StockingPointID       := "",
                                                        StockingPointID       := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().StockingPointID(),
                                                        UserQuantity          := currentLayerDependentDemandQuantity,
                                                        ManufacturedDate      := Date::MinDate()
                                                       );
@@ -70,9 +73,9 @@
          PeriodTaskLaneLeg as ptll : {
            targetDependentDemand := select( ptll, DependentDemand, dd, dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() );
            currentLayerDependentDemandQuantity := ifexpr( numberOfLayers = 1, targetDependentDemand.Quantity(), currentLayerDependentDemandQuantity );
            info( "层数:", numberOfLayers,"    å½“前供应的pisp:", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    æ€»ä¾›åº”值:", ns.Quantity(), "    éœ€è¦ä¾›åº”值:", currentLayerDependentDemandQuantity,
                  "    å½“前需求pisp:", targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    éœ€æ±‚值:", currentLayerDependentDemandQuantity );
            info( "LaneLeg周期任务..." );
    //        info( "层数:", numberOfLayers,"    å½“前供应的pisp:", ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    æ€»ä¾›åº”值:", ns.Quantity(), "    éœ€è¦ä¾›åº”值:", currentLayerDependentDemandQuantity,
    //              "    å½“前需求pisp:", targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name(), "    éœ€æ±‚值:", currentLayerDependentDemandQuantity );
    //        info( "LaneLeg周期任务..." );
            info( "-----------------------------------------------------------------------------------------------------------------" );
            CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
                                                             targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod TestData (
  ScenarioManager scenarioManager
  GlobalOTDTable parent
)
{
  Description: '生成测试数据'
@@ -11,7 +11,7 @@
    
    info( "生成年度产销预算报表测试数据" )
    
    scenarioManager.CapacityAndSaleBudgeChartElement( relflush );
    parent.CapacityAndSaleBudgeChartElement( relflush );
    
    for( sc := 0; sc < 4; sc := sc + 1 ) {
      scenarioName := "SC" + [String]sc;
@@ -19,7 +19,7 @@
        businessTypeString := "BT" + [String]i;
        for( j := 1; j <= 12; j := j + 1 ) {
          monthString := "MONTH" + ifexpr( j < 10, "0" + [String]j, [String]j );
          scenarioManager.CapacityAndSaleBudgeChartElement( relnew,
          parent.CapacityAndSaleBudgeChartElement( relnew,
                                                            BusinessTypeOrPlaceOfProductionOfArray := businessTypeString, 
                                                            TimeStringAndScenarioName := monthString + " - " + scenarioName, 
                                                            Quantity := Real::Random( 20.0, 30.0 ) );
_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateIfNotExist (
  ScenarioManager scenarioManager,
  GlobalOTDTable parent,
  String businessType,
  String placeOfProductionOfArray
) as CapacityAndSaleBudgeChartRow
@@ -9,9 +9,9 @@
  TextBody:
  [*
    // yypsybs Sep-18-2023 (created)
    value := select( scenarioManager, CapacityAndSaleBudgeChartRow, row, row.BusinessType() = businessType and row.PlaceOfProductionOfArray() = placeOfProductionOfArray );
    value := select( parent, CapacityAndSaleBudgeChartRow, row, row.BusinessType() = businessType and row.PlaceOfProductionOfArray() = placeOfProductionOfArray );
    if( isnull( value ) ) {
      value := scenarioManager.CapacityAndSaleBudgeChartRow( relnew, BusinessType := businessType, PlaceOfProductionOfArray := placeOfProductionOfArray );
      value := parent.CapacityAndSaleBudgeChartRow( relnew, BusinessType := businessType, PlaceOfProductionOfArray := placeOfProductionOfArray );
    } 
    return value;
  *]
_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl
@@ -1,16 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateIfNotExist (
  ScenarioManager manager,
  GlobalOTDTable parent,
  String columnName
) as CapacityAndSaleBudgeCompareItemColumn
{
  TextBody:
  [*
    // yypsybs Sep-18-2023 (created)
    value := select( manager, CapacityAndSaleBudgeCompareItemColumn, item, item.ColumnName() = columnName );
    value := select( parent, CapacityAndSaleBudgeCompareItemColumn, item, item.ColumnName() = columnName );
    if( isnull( value ) ) {
      value := manager.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnName );
      value := parent.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnName );
    }
    return value;
  *]
_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateIfNotExist (
  ScenarioManager scenarioManager,
  GlobalOTDTable parent,
  String businessType,
  String placeOfProductionOfArray
) as CapacityAndSaleBudgeCompareItemRow
@@ -9,9 +9,9 @@
  TextBody:
  [*
    // yypsybs Sep-18-2023 (created)
    value := select( scenarioManager, CapacityAndSaleBudgeCompareItemRow, row, row.BusinessType() = businessType and row.PlaceOfProductionOfArray() = placeOfProductionOfArray );
    value := select( parent, CapacityAndSaleBudgeCompareItemRow, row, row.BusinessType() = businessType and row.PlaceOfProductionOfArray() = placeOfProductionOfArray );
    if( isnull( value ) ) {
      value := scenarioManager.CapacityAndSaleBudgeCompareItemRow( relnew, BusinessType := businessType, PlaceOfProductionOfArray := placeOfProductionOfArray );
      value := parent.CapacityAndSaleBudgeCompareItemRow( relnew, BusinessType := businessType, PlaceOfProductionOfArray := placeOfProductionOfArray );
    } 
    return value;
  *]
_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateIfNotExist (
  MPSync parent,
  GlobalOTDTable parent,
  String value
)
{
_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateIfNotExist (
  ScenarioManager parent,
  GlobalOTDTable parent,
  String itemName
)
{
_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Initial (
  ScenarioManager parent
  GlobalOTDTable parent
)
{
  Description: '初始化对比项'
_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Initial (
  ScenarioManager parent
  GlobalOTDTable parent
)
{
  Description: '初始化年份'
_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateIfNotExist (
  MPSync parent,
  GlobalOTDTable parent,
  String value
)
{
_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Initial (
  ScenarioManager parent
  GlobalOTDTable parent
)
{
  Description: '初始化年份'
_Main/BL/Type_CustomerAndForecastOrder/Attribute_CustomerOrderID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomerOrderID
{
  #keys: '3[414382.0.554303146][414382.0.554303145][414382.0.554303147]'
  ValueType: String
}
_Main/BL/Type_CustomerAndForecastOrder/Attribute_ForecastID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ForecastID
{
  #keys: '3[414382.0.554303156][414382.0.554303155][414382.0.554303157]'
  ValueType: String
}
_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_CreateData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateData (
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    traverse ( macroPlan, SalesDemand.astype( CustomerOrder ), co, true ) {
      macroPlan.CustomerAndForecastOrder( relnew,
                                          OrderID := co.OrderID(),
                                          ProductID := co.ProductID(),
                                          BusinessType := co.BusinessType(),
                                          Customer := co.CustomerName(),
                                          CustomerID := co.CustomerID(),
                                          Quantity := co.Quantity(),
                                          UnitOfMeasureName := co.UnitOfMeasureName(),
                                          DemandDate := co.StartDate()
                                         );
    }
  *]
}
_Main/BL/Type_CustomerAndForecastOrder/StaticMethod_RefreshData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
Quintiq file version 2.0
#parent: #root
StaticMethod RefreshData (
  MacroPlan owner,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    // èŽ·å–å·²ç»å­˜åœ¨ customerOrderID å’ŒforecastID
    customerOrderIDs := selectvalues( owner,CustomerAndForecastOrder,c,
                                      c.CustomerOrderID() <> '',
                                      c.CustomerID()
                                      );
    forecastIDs := selectvalues( owner,CustomerAndForecastOrder,c,
                                      c.ForecastID() <> '',
                                      c.ForecastID()
                                      );
    // ä»Žæ•°æ®æ¹– Global_MappingCustomerOrder Global_MappingForecast ä¸­èŽ·å–æ–°çš„è®¢å•æ•°æ®
    traverse( globalOTDTable,Global_MappingCustomOrder,cus)
    {
        if ( customerOrderIDs.Find( cus.ID() ) = -1 ) {
             owner.CustomerAndForecastOrder( relnew,
                                             OrderID := cus.OrderID(),
                                             ProductID := cus.ProductID(),
                                             BusinessType := cus.BusinessType(),
                                             Customer := cus.Customer(),
                                             CustomerID := cus.CustomerID(),
                                             Quantity := cus.Quantity(),
                                             UnitOfMeasureName := cus.UnitOfMeasureName(),
                                             DemandDate := cus.OrderDate()
                                            );
        }
    }
    traverse( globalOTDTable,Global_MappingForecast,forecast)
    {
        if(forecastIDs.Find( forecast.ID() ) = -1 ) {
             owner.CustomerAndForecastOrder( relnew,
                                             ProductID := forecast.ProductID(),
                                             BusinessType := forecast.BusinessType(),
                                             Quantity := forecast.Quantity(),
                                             UnitOfMeasureName := forecast.UnitOfMeasureName(),
                                             DemandDate := forecast.EndDate()
                                            );
        }
    }
  *]
}
_Main/BL/Type_CustomerOrder/Attribute_BusinessType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute BusinessType
{
  #keys: '3[414382.0.554303217][414382.0.554303216][414382.0.554303218]'
  Description: '事业部'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_CustomerPolicy.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomerPolicy
{
  #keys: '3[414382.0.554014841][414382.0.554014840][414382.0.554014842]'
  Description: '客户策略'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_IsAvailable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsAvailable
{
  #keys: '3[414382.0.554303237][414382.0.554303236][414382.0.554303238]'
  Description: '订单是否参与计划'
  ValueType: Boolean
}
_Main/BL/Type_CustomerOrder/Attribute_OrderTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute OrderTime
{
  #keys: '3[414382.0.554303277][414382.0.554303276][414382.0.554303278]'
  Description: '订单下单时间'
  ValueType: Date
}
_Main/BL/Type_CustomerOrder/Attribute_OrderType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute OrderType
{
  #keys: '3[414382.0.554303227][414382.0.554303226][414382.0.554303228]'
  Description: '订单类型'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_ProductGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductGrade
{
  #keys: '3[414382.0.554303247][414382.0.554303246][414382.0.554303248]'
  Description: '产品等级'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_SegmentPriority.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SegmentPriority
{
  #keys: '3[414382.0.554303257][414382.0.554303256][414382.0.554303258]'
  Description: '细分市场优先级'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/Attribute_SheetProfitability.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SheetProfitability
{
  #keys: '3[414382.0.554303267][414382.0.554303266][414382.0.554303268]'
  Description: '大张盈利水平'
  ValueType: String
}
_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
@@ -58,7 +58,7 @@
    // æ–°å¢ž/更新
    result := CustomerOrder::FindById( macroPlan, id );
    if( isnull( result ) ) {
        CustomerOrder::Create( product, stockingPoint, id, orderDate, quantity, price,
        result := CustomerOrder::Create( product, stockingPoint, id, orderDate, quantity, price,
                               priorityName, salesSegmentName, currencyId, unitOfMeasureName, 
                               false, customerName, customerId, orderId, orderLineId, true, true, true );
    } else {
_Main/BL/Type_FillingCapacityOrder/Attribute_ID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ID
{
  #keys: '3[414702.0.525344991][414702.0.525344990][414702.0.525344992]'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_FillingCapacityOrder/Attribute_OrderType.qbl
@@ -3,5 +3,6 @@
Attribute OrderType
{
  #keys: '3[414382.0.394820190][414382.0.394820189][414382.0.394820191]'
  Description: '订单类型包括(反签、授权)'
  ValueType: String
}
_Main/BL/Type_FillingCapacityOrder/Attribute_State.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute State
{
  #keys: '3[414702.0.533501330][414702.0.533501329][414702.0.533501331]'
  Description: '状态(未冲减、已冲减)'
  ValueType: String
}
_Main/BL/Type_FillingCapacityOrder/TypeIndex_FillingCapacityOrderTypeIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
TypeIndex FillingCapacityOrderTypeIndex
{
  Attributes:
  [
    TypeIndexAttribute
    {
      ModelElement: ID
    }
  ]
}
_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
@@ -8,7 +8,7 @@
  TextBody:
  [*
    // NBoTk Sep-14-2023 (created)
    info('test' )
    fillingCapacityOrders := selectset( owner,FillingCapacityOrder,fillingOrder,
                                        not fillingOrder.IsFilling()
                                        );
@@ -34,8 +34,7 @@
    salesSegmentName := salesSegmentNameList.Concatenate( ",")
    
    schemeDate := Date::Today();
    filllingCapacityOrderScheme := owner.FilllingCapacityOrderScheme(relnew,SchemeName := schemeName,SchemeDate := schemeDate,BusinessType := businessType,Customer := customer,CustomerID := customerID,
    owner.FilllingCapacityOrderScheme(relnew,SchemeName := schemeName,SchemeDate := schemeDate,BusinessType := businessType,Customer := customer,CustomerID := customerID,
                                                                      SalesSegmentName := salesSegmentName);
    
    
@@ -43,27 +42,35 @@
    {
      e.SchemeName(schemeName);
      e.IsFilling(true);
      filllingCapacityOrderScheme.FillingCapacityOrder(relinsert, e);
    }
    // ç‰ˆæœ¬å·
    verNoOrder := select( filllingCapacityOrderScheme,FillingCapacityOrder,o,
                                 o.VerNo() <> ''
                                 )
    
    // éœ€è¦å°†é”€å”®è®¢å•和预售订单同时保存到方案中
    traverse( owner,CustomerAndForecastOrder,order)
    {
         fillingOrder := owner.FillingCapacityOrder(relnew,BusinessType := order.BusinessType(),Customer := order.Customer(),CustomerID := order.CustomerID(),
                                                                           DemandDate := order.DemandDate(),ForecastDemandDate := order.ForecastDemandDate(),IsFilling := true,
                                                                           OrderType := '提拉',PanelBigSheetQuantity := order.PanelBigSheetQuantity(),ProductID := order.ProductID(),
                                                                           Quantity := order.Quantity(),SalesSegmentName := order.SalesSegmentName(),SalesAmount := order.SalesAmount(),
                                                                           SchemeName := schemeName,StockingPointID := order.StockingPointID(),UnitOfMeasureName := order.UnitOfMeasureName(),
                                                                           VerNo := verNoOrder.VerNo()
                                                                           );
        filllingCapacityOrderScheme.FillingCapacityOrder(relinsert, fillingOrder);
    }
    //traverse( owner,CustomerAndForecastOrder,order)
    //{
    //
    //     fillingOrder := owner.FillingCapacityOrder(relnew,BusinessType := order.BusinessType(),Customer := order.Customer(),CustomerID := order.CustomerID(),
    //                                                                       DemandDate := order.DemandDate(),ForecastDemandDate := order.ForecastDemandDate(),IsFilling := true,
    //                                                                       OrderType := '提拉',PanelBigSheetQuantity := order.PanelBigSheetQuantity(),ProductID := order.ProductID(),
    //                                                                       Quantity := order.Quantity(),SalesSegmentName := order.SalesSegmentName(),SalesAmount := order.SalesAmount(),
    //                                                                       SchemeName := schemeName,StockingPointID := order.StockingPointID(),UnitOfMeasureName := order.UnitOfMeasureName(),
    //                                                                       VerNo := order.VerNo()
    //                                                                       );
    //
    //    filllingCapacityOrderScheme.FillingCapacityOrder(relinsert, fillingOrder);
    //}
    //// æ–°å¢žåç­¾/授权订单 è®¢å•信息加入填产
    //traverse( owner,H_Forecast,hf)
    //{
    //          fillingOrder := owner.FillingCapacityOrder(relnew,BusinessType := hf.Department(),Customer := hf.CustomName(),CustomerID := hf.CustomCode(),
    //                                                                       DemandDate := Date::Today(),ForecastDemandDate := Date::Today(),IsFilling := true,
    //                                                                       OrderType := '提拉',PanelBigSheetQuantity := 0,ProductID := '',
    //                                                                       Quantity := hf.ForecastQty(),SalesSegmentName := '',SalesAmount := 0,
    //                                                                       SchemeName := schemeName,StockingPointID := '',UnitOfMeasureName := hf.Util(),
    //                                                                       VerNo := ''
    //                                                                       );
    //
    //    filllingCapacityOrderScheme.FillingCapacityOrder(relinsert, fillingOrder);
    //}
  *]
}
_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_DeleteDetails.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
StaticMethod DeleteDetails (
  MacroPlan owner,
  String schemeName
)
{
  TextBody:
  [*
    // NBoTk Sep-25-2023 (created)
    details := selectset( owner,FillingCapacityOrder,f,true);
    traverse( details,Elements,e)
    {
      owner.FillingCapacityOrder(reldelete,e);
    }
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart#156.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,301 @@
Quintiq file version 2.0
#parent: #root
Method CapacityAndSaleBudgeChart (
  MacroPlans macroPlans,
  String saleOrCapacity,
  String groupBy,
  String byBusinessTypeOrByOrgCode,
  CapacityAndSaleBudgeFilterBusinessTypes businessTypes,
  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays placeOfProductionOfArrays,
  CapacityAndSaleBudgeFilterYears years,
  CapacityAndSaleBudgeFilterMonths months,
  MPSync mpSync,
  GlobalOTDTable otdTable,
  MacroPlan mappingParent
)
{
  Description: '按入参处理数据,产生需要的CapacityAndSaleBudgeChartElement'
  TextBody:
  [*
    // yypsybs Sep-19-2023 (created)
    // true, false
    info( saleOrCapacity );
    // æœˆ;季度;半年;å¹´
    info( groupBy );
    // é¢æ¿åŸºåœ°;事业部
    info( byBusinessTypeOrByOrgCode );
    traverse( businessTypes, Elements, businessType ) {
      debuginfo( "businessType : " + businessType.BusinessType() );
    }
    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
      debuginfo( "placeOfProductionOfArray : " + placeOfProductionOfArray.PlaceOfProductionOfArray() );
    }
    traverse( macroPlans, Elements, macroPlan ) {
      debuginfo( "macroPlan : " + macroPlan.ScenarioName() );
    }
    // å¹´ä»½ä¸é€‰æ—¶å…¨é€‰
    if( years.Size() = 0 ) {
      years := selectsortedset( this, CapacityAndSaleBudgeFilterYear, item, true, item.YearNo() );
    }
    traverse( years, Elements, year ) {
      debuginfo( "yearNo : " + [String]year.YearNo() );
    }
    // æœˆä»½ä¸é€‰æ—¶å…¨é€‰
    if( months.Size() = 0 ) {
      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, true, item.MonthNo() );
    }
    traverse( months, Elements, month ) {
      debuginfo( "monthNo : " + [String]month.MonthNo() );
    }
    // ====清理旧数据====
    this.CapacityAndSaleBudgeChartRow( relflush );
    this.CapacityAndSaleBudgeChartElement( relflush );
    // ====按面板基地和事业部对产品进行筛选分组====
    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
    if( businessTypes.Size() > 0 ) {
      businessTypeStrings := selectuniquevalues( businessTypes, Elements, item, true, item.BusinessType() );
      historyData := selectset( historyData, Elements, item, businessTypeStrings.Find( item.BusinessType() ) > -1 );
    }
    if( placeOfProductionOfArrays.Size() > 0 ) {
      placeOfProductionOfArrayStrings := selectuniquevalues( placeOfProductionOfArrays, Elements, item, true, item.PlaceOfProductionOfArray() );
      historyData := selectset( historyData, Elements, item, placeOfProductionOfArrayStrings.Find( item.PlaceOfProductionOfArray() ) > -1 );
    }
    //info( "historyData : " + [String]historyData.Size() );
    traverse( historyData, Elements, item ) {
      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.PlaceOfProductionOfArray() );
      // è®°å½•每行包含哪些product
      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductCode() );
    }
    rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
    //info( "rows : " + [String]rows.Size() );
    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.PlaceOfProductionOfArray() );
    businessTypeList := selectuniquevalues( historyData, Elements, item, item.BusinessType() );
    // ç”Ÿæˆå›¾è¡¨å…ƒç´ 
    traverse( years, Elements, year ) {
      debuginfo( "process year start : " + [String]year.YearNo() );
      if( byBusinessTypeOrByOrgCode = "面板基地" and groupBy = "å¹´" ) {
        // ç›®æ ‡
        traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
          this.CapacityAndSaleBudgeChartElement( relnew,
                                                 TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                 );
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                                       )
                                                   );
          }
        }
      }
      if ( byBusinessTypeOrByOrgCode = "面板基地" and groupBy = "半年" ) {
        for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                   );
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
              this.CapacityAndSaleBudgeChartElement( relnew,
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                         )
                                                     );
            }
          }
        }
      }
      if ( byBusinessTypeOrByOrgCode = "面板基地" and groupBy = "季度" ) {
        for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
      //      info( "productCodeList : " + [String]productCodeList.Size() );
      //      info( "MappingCapacityAndSaleBudge::GetSheetBySeason : " + [String]MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) );
      //      info( "seasonNo : " + [String]seasonNo );
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + [String]seasonNo + "季度-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                   );
      //      info( "productCodeList : " + [String]productCodeList.Size() );
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
              this.CapacityAndSaleBudgeChartElement( relnew,
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + [String]seasonNo + "季度-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                                         )
                                                     );
            }
          }
        }
      }
      if ( byBusinessTypeOrByOrgCode = "面板基地" and groupBy = "月" ) {
        traverse( months, Elements, month ) {
          info( "process month start : " + [String]month.MonthNo() );
          monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + monthNoString + "月-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                   );
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
              this.CapacityAndSaleBudgeChartElement( relnew,
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + monthNoString + "月-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray,
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                                         )
                                                     );
            }
          }
          info( "process month end : " + [String]month.MonthNo() );
        }
      }
      if( byBusinessTypeOrByOrgCode = "事业部" and groupBy = "å¹´" ) {
        // ç›®æ ‡
        traverse( businessTypeList, Elements, businessType ) {
          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
          this.CapacityAndSaleBudgeChartElement( relnew,
                                                 TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                 );
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) ,
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                                       )
                                                   );
          }
        }
      }
      if ( byBusinessTypeOrByOrgCode = "事业部" and groupBy = "半年" ) {
        for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
          traverse( businessTypeList, Elements, businessType ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                   );
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
              this.CapacityAndSaleBudgeChartElement( relnew,
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                         )
                                                     );
            }
          }
        }
      }
      if ( byBusinessTypeOrByOrgCode = "事业部" and groupBy = "季度" ) {
        for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
          debuginfo( "process season start : " + [String]seasonNo );
          traverse( businessTypeList, Elements, businessType ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + [String]seasonNo + "季度-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                   );
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
              this.CapacityAndSaleBudgeChartElement( relnew,
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + [String]seasonNo + "季度-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                                         )
                                                     );
            }
          }
          info( "process season end : " + [String]seasonNo );
        }
      }
      if ( byBusinessTypeOrByOrgCode = "事业部" and groupBy = "月" ) {
        traverse( months, Elements, month ) {
          debuginfo( "process month start : " + [String]month.MonthNo() );
          monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
          traverse( businessTypeList, Elements, businessType ) {
            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
            this.CapacityAndSaleBudgeChartElement( relnew,
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + monthNoString + "月-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                   );
            // S&OP
            traverse( macroPlans, Elements, macroPlan ) {
              this.CapacityAndSaleBudgeChartElement( relnew,
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + monthNoString + "月-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType,
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                                         )
                                                     );
            }
          }
          debuginfo( "process month end : " + [String]month.MonthNo() );
        }
      }
      debuginfo( "process year end : " + [String]year.YearNo() )
    }
    //info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
    //traverse( this, CapacityAndSaleBudgeChartRow, row ) {
    //  info( "==↓==" );
    //  info( row.BusinessType() );
    //  info( row.PlaceOfProductionOfArray() );
    //  elements := selectset( row, CapacityAndSaleBudgeChartRowProduct, cell, true );
    //  info( elements.Size() );
    //  info( row.GetProductCodes().Concatenate( " | " ) );
    //  info( "==↑==" );
    //}
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart.qbl
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,212 @@
Quintiq file version 2.0
#parent: #root
Method CapacityAndSaleBudgeCompare (
  MacroPlans macroPlans,
  CapacityAndSaleBudgeFilterItems items,
  CapacityAndSaleBudgeFilterYears years,
  CapacityAndSaleBudgeFilterMonths months,
  MPSync mpSync,
  GlobalOTDTable otdTable,
  MacroPlan mappingParent
)
{
  Description: 'todo : mappingParent改为mpSync, random删了'
  TextBody:
  [*
    // yypsybs Sep-18-2023 (created)
    // ====不选时默认全选====
    if( years.Size() = 0 ) {
      years := selectsortedset( this, CapacityAndSaleBudgeFilterYear, item, item.YearNo() );
    }
    if( months.Size() = 0 ) {
      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, item.MonthNo() );
    }
    traverse( macroPlans, Elements, item ) {
      debuginfo( "scenario : " + item.ScenarioName() );
    }
    traverse( items, Elements, item ) {
      debuginfo( "item : " + item.ItemName() );
    }
    traverse( years, Elements, item ) {
      debuginfo( "year : " + [String]item.YearNo() );
    }
    traverse( months, Elements, item ) {
      debuginfo( "month : " + [String]item.MonthNo() );
    }
    // ====清理旧数据====
    this.CapacityAndSaleBudgeCompareItemRow( relflush );
    this.CapacityAndSaleBudgeCompareItemColumn( relflush );
    // ====汇总所有出现的产品====
    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
    debuginfo( "historyData : " + [String]historyData.Size() )
    traverse( historyData, Elements, one ) {
      productCode := one.ProductCode();
      MappingBOM::CreateTestData( mappingParent, "事业部" + [String](productCode.Length() mod 3), [String](productCode.Length() mod 4), productCode );
      boms := selectset( mappingParent, MappingBOM, bom, bom.ProductCode() = productCode );
      if( boms.Size() > 0 ) {
        bom := boms.First();
        businessType := bom.BusinessType();
        placeOfProductionOfArray := one.PlaceOfProductionOfArray();
        // ç›¸åŒé¢æ¿åŸºåœ°å’Œäº‹ä¸šéƒ¨çš„æ”¾ä¸€è¡Œ
        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, businessType, placeOfProductionOfArray );
        // è®°å½•每行包含哪些product
        CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
      } else {
        debuginfo( "no boms for product : " + productCode );
      }
    }
    debuginfo( "CapacityAndSaleBudgeCompareItemRow : " + [String]selectset( this, CapacityAndSaleBudgeCompareItemRow, item, true ).Size() );
    // ====从左向右生成列头与内容====
    // äº‹ä¸šéƒ¨ï¼Œç»„织
    debuginfo( "dealing businessType and placeOfProductionOfArray" )
    columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "事业部" );
    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板基地" );
    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    }
    // é¢æ¿åˆ†é…é‡ - å¹´åº¦é¢„ç®— (sheets)
    // æ ¼å¼ï¼š é¢æ¿åˆ†é…é‡ - å¹´ - æœˆï¼ˆ1-12 & total) - å¹´åº¦é¢„ç®—/scenarioName
    info( "dealing é¢æ¿åˆ†é…é‡" )
    if( CapacityAndSaleBudgeFilterItem::Contains( items, "面板分配量" ) ) {
      traverse( years, Elements, year ) {
        debuginfo( "面板分配量" + [String]year.YearNo() + "å¹´" );
        // åŽ†å²æ•°æ®
        debuginfo( "面板分配量" + [String]year.YearNo() + "年历史数据" );
        traverse( months, Elements, month ) {
          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-年度预算" );
          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
            cellReal := MappingCapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
            cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
          }
        }
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-total-年度预算" );
        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
          cellReal := MappingCapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), mpSync, year.YearNo() );
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
        debuginfo( "面板分配量" + [String]year.YearNo() + "å¹´S&OP数据" );
        // S&OP数据
        traverse( macroPlans, Elements, macroPlan ) {
          traverse( months, Elements, month ) {
            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this,
                                                                                    "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-" + macroPlan.ScenarioName() );
            traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
              cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
              cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
              cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
            }
          }
          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this,
                                                                                 "面板分配量-" + [String]year.YearNo() + "å¹´-total-" + macroPlan.ScenarioName() );
          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
            cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
            cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
          }
        }
      }
    }
    // å¹´åº¦é”€å”®é¢
    debuginfo( "dealing é”€å”®é¢" )
    if( CapacityAndSaleBudgeFilterItem::Contains( items, "销售额" ) ) {
      traverse( years, Elements, year ) {
        debuginfo( "销售额" + [String]year.YearNo() + "å¹´" );
        // åŽ†å²æ•°æ®
        debuginfo( "销售额" + [String]year.YearNo() + "年历史数据" );
        traverse( months, Elements, month ) {
          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-年度预算" );
          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
            cellReal := MappingCapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), mpSync, year.YearNo(), month.MonthNo() );
            cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
          }
        }
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-年度预算" );
        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
          cellReal := MappingCapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), mpSync, year.YearNo() );
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
        debuginfo( "销售额" + [String]year.YearNo() + "年历史数据S&OP数据" );
        // S&OP数据
        traverse( macroPlans, Elements, macroPlan ) {
          traverse( months, Elements, month ) {
            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-" + macroPlan.ScenarioName() );
            traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
              cellReal := MappingAnnualBudget::GetSaleByMonth( row.GetProductCodes(), mpSync, year.YearNo(), month.MonthNo() );
              cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
              cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
            }
          }
          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-total-" + macroPlan.ScenarioName() );
          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
            // QID 23
            cellReal := MappingAnnualBudget::GetSaleByYear( row.GetProductCodes(), mpSync, year.YearNo() );
            cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
          }
        }
      }
    }
    // å¤§å¼ ç›ˆåˆ©é¢
    debuginfo( "dealing å¤§å¼ ç›ˆåˆ©é¢" )
    traverse( years, Elements, year ) {
      // åŽ†å²æ•°æ®
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´-年度预算" );
      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
        // todo
        // QID 23
        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
      }
      // S&OP数据
      traverse( macroPlans, Elements, macroPlan ) {
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName() );
        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
      }
    }
    // äº§å“ç›ˆåˆ©é¢
    debuginfo( "dealing äº§å“ç›ˆåˆ©é¢" )
    traverse( years, Elements, year ) {
      // åŽ†å²æ•°æ®
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-" + [String]year.YearNo() + "å¹´-年度预算" );
      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
        // todo
        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
      }
      // S&OP数据
      traverse( macroPlans, Elements, macroPlan ) {
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-" + [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName() );
        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
          // todo
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
      }
    }
    // è®¾ç½®rowNo和columnNo
    debuginfo( "set rowNo and columnNo" );
    rowNo := 1;
    rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.PlaceOfProductionOfArray() + "_" + item.BusinessType() );
    traverse( rowSorted, Elements, item ) {
      item.RowNo( rowNo );
      rowNo := rowNo + 1;
    }
    columnNo := 1;
    traverse( this, CapacityAndSaleBudgeCompareItemColumn, item ) {
      item.ColumnNo( columnNo );
      columnNo := columnNo + 1;
    }
    debuginfo( "done" );
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompareExport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
#parent: #root
Method CapacityAndSaleBudgeCompareExport () as BinaryValue
{
  Description: '导出比较结果'
  TextBody:
  [*
    // yypsybs Sep-22-2023 (created)
    tableName := "年度产销预算对比";
    text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>' + tableName + '</name>';
    // å¤„理column <column><name>物料编码</name><type>String</type></column>
    columnXml := ""
    traverse( this, CapacityAndSaleBudgeCompareItemColumn, column ) {
      debuginfo( "columnName : " + column.ColumnName() );
      columnXml := columnXml + "<column><name>" + column.ColumnName() + "</name><type>String</type></column>";
    }
    text := text + columnXml + "</table>"
    // å¡žå†…容
    xmlDOMImplementation := XMLDOMImplementation::Create();
    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
    rows := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, row, row.PlaceOfProductionOfArray() + "_" + row.BusinessType() );
    traverse ( rows, Elements, row ) {
      debuginfo( "rowNo : " + [String]row.RowNo() );
      traverse( row, CapacityAndSaleBudgeCompareItemCell, cell ) {
        ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, cell.CellContent(), cell.CapacityAndSaleBudgeCompareItemColumn().ColumnName() );
      }
    }
    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
    tableGroupHandle := TableGroupHandle::Create( tableName );
    tableGroupHandle.Add( tableHandle );
    tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
    return tableBinaryData.AsBinaryValue();
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AIPISPIP.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_AIPISPIP",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "实际库存数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_AIPISPIP", "实际库存数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ConversionFactor.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_ConversionFactor",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "单位转换因子数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_ConversionFactor", "单位转换因子数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomOrder.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_CustomOrder",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "订单数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_CustomOrder", "订单数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Method OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade (
  Number errorNo,
  String errorMessage
)
{
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_CustomerGrade", "客户等级数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Method OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI (
  Number errorNo,
  String errorMessage
)
{
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_DOI_DSI", "DOI_DSI数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Forecast.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_Forecast",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "预测数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_Forecast", "预测数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_InventorySupply.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_InventorySupply",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "库存供应数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_InventorySupply", "库存供应数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Operation.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_Operation",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "操作数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_Operation", "操作数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationBOM.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_OperationBOM",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "操作BOM数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_OperationBOM", "操作BOM数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationCost.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_OperationCost",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "操作成本数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_OperationCost", "操作成本数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Product_MP.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_Product_MP",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "产品数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_Product_MP", "产品数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SalesSegment_MP.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_SalesSegment_MP",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "销售部门",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_SalesSegment_MP", "销售部门" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_StockingPointCost.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_StockingPointCost",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "库存点成本数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_StockingPointCost", "库存点成本数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_UnitOfMeasure_MP.qbl
@@ -5,16 +5,5 @@
  String errorMessage
)
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName    := "GlobalOTDTable_UnitOfMeasure_MP",
                                  ElementTotal  := 0,
                                  ErrorMessage  := errorMessage,
                                  IsSuccess     := false,
                                  Name          := "单位数据",
                                  ErrorNo       := errorNo,
                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
                                 );
  *]
  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_UnitOfMeasure_MP", "单位数据" );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AIPISPIP.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_AIPISPIP
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_AIPISPIP",
                                  ElementTotal    := this.Global_MappingActualProductInStockingPointInPeriod( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "实际库存数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_AIPISPIP", "实际库存数据", this.Global_MappingActualProductInStockingPointInPeriod( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ConversionFactor.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_ConversionFactor
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_ConversionFactor",
                                  ElementTotal    := this.Global_MappingConversionFactor( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "单位转换因子数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_ConversionFactor", "单位转换因子数据", this.Global_MappingConversionFactor( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomOrder.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_CustomOrder
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_CustomOrder",
                                  ElementTotal    := this.Global_MappingCustomOrder( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "订单数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_CustomOrder", "订单数据", this.Global_MappingCustomOrder( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomerGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_CustomerGrade
{
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_CustomerGrade", "客户等级数据", this.Global_MappingCustomerGrade( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_DOI_DSI.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_DOI_DSI
{
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_DOI_DSI", "DOI_DSI数据", this.Global_MappingDOI_DSI( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Forecast.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_Forecast
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_Forecast",
                                  ElementTotal    := this.Global_MappingForecast( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "预测数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_Forecast", "预测数据", this.Global_MappingForecast( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_InventorySupply.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_InventorySupply
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_InventorySupply",
                                  ElementTotal    := this.Global_MappingInventorySupply( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "库存供应数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_InventorySupply", "库存供应数据", this.Global_MappingInventorySupply( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Operation.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_Operation
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_Operation",
                                  ElementTotal    := this.Global_MappingOperation( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "操作数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_Operation", "操作数据", this.Global_MappingOperation( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationBOM.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_OperationBOM
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_OperationBOM",
                                  ElementTotal    := this.Global_MappingOperationBOM( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "操作BOM数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_OperationBOM", "操作BOM数据", this.Global_MappingOperationBOM( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationCost.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_OperationCost
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_OperationCost",
                                  ElementTotal    := this.Global_MappingOperationCost( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "操作成本数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_OperationCost", "操作成本数据", this.Global_MappingOperationCost( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ProductInLane.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_ProductInLane
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_ProductInLane",
                                  ElementTotal    := this.Global_MappingProductInLane( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "产品在车道数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_ProductInLane", "产品在车道数据", this.Global_MappingProductInLane( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Product_MP.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_Product_MP
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_Product_MP",
                                  ElementTotal    := this.Global_MappingProduct_MP( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "产品数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_Product_MP", "产品数据", this.Global_MappingProduct_MP( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SalesSegment_MP.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_SalesSegment_MP
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_SalesSegment_MP",
                                  ElementTotal    := this.Global_MappingSalesSegment_MP( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "销售部门",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_SalesSegment_MP", "销售部门", this.Global_MappingSalesSegment_MP( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_StockingPointCost.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_StockingPointCost
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_StockingPointCost",
                                  ElementTotal    := this.Global_MappingStockingPointCost( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "库存点成本数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_StockingPointCost", "库存点成本数据", this.Global_MappingStockingPointCost( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP.qbl
@@ -2,16 +2,5 @@
#parent: #root
Method OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP
{
  TextBody:
  [*
    this.Global_BrokerExecuteLog( relnew,
                                  BrokerName      := "GlobalOTDTable_UnitOfMeasure_MP",
                                  ElementTotal    := this.Global_MappingUnitOfMeasure_MP( relsize ),
                                  ErrorMessage    := "",
                                  IsSuccess       := true,
                                  Name            := "单位数据",
                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                  ErrorNo         := 0
                                 );
  *]
  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_UnitOfMeasure_MP", "单位数据", this.Global_MappingUnitOfMeasure_MP( relsize ) );'
}
_Main/BL/Type_GlobalDTOTable/Method_SetIsLinkedWithFinishedGoodAttributes.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
Quintiq file version 2.0
#parent: #root
Method SetIsLinkedWithFinishedGoodAttributes
{
  Description: 'Method to traverse the supply chain to determine if there are any products that are not used to produce finished goods.'
  TextBody:
  [*
    // Reset IsLinkedWithFinishedGood
    traverse( this, Global_MappingProduct_MP, instance )
    {
      instance.IsLinkedWithFinishedGood( false );
    }
    traverse( this, Global_MappingOperation, instance )
    {
      instance.IsLinkedWithFinishedGood( false );
    }
    traverse( this, Global_MappingOperationBOM, instance )
    {
      instance.IsLinkedWithFinishedGood( false );
    }
    productspool := selectset( this, Global_MappingProduct_MP, product,
                               product.ProductMajorType() <> "成品" );
    operationspool := this.Global_MappingOperation( relget );
    operationbomspool := this.Global_MappingOperationBOM( relget );
    // Traverse each finished good and search for linked products/operations/lanes
    traverse( this, Global_MappingProduct_MP, product,
              product.ProductMajorType() = "成品" )
    {
      uniquebomids := construct( Strings );
      product.IsLinkedWithFinishedGood( false );
      product.SetIsLinkedWithFinishedGoodAttributes_Recursive( 0, // depth
                                                               100, // maxdepth
                                                               productspool,
                                                               operationspool,
                                                               operationbomspool,
                                                               uniquebomids );
      uniquebomids := uniquebomids.Unique();
      product.BOMCount( uniquebomids.Size() );
    }
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_SettingFailureDetails.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Method SettingFailureDetails (
  Number errorNo,
  String errorMessage,
  String brokerName,
  String name
)
{
  TextBody:
  [*
    gbel := select( this, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
                                                             tempGBEL.BrokerName()      = brokerName );
    gbel.ExecutionStatus( "Complete" );
    gbel.ElementTotal( 0 );
    gbel.ErrorMessage( errorMessage );
    gbel.IsSuccess( false );
    gbel.Name( name );
    gbel.ErrorNo( errorNo );
    gbel.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_SettingSuccessfulDetails.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
Method SettingSuccessfulDetails (
  String brokerName,
  String name,
  Number elementTotal
)
{
  TextBody:
  [*
    gbel := select( this, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
                                                             tempGBEL.BrokerName()      = brokerName );
    gbel.ExecutionStatus( "Complete" );
    gbel.ElementTotal( elementTotal );
    gbel.IsSuccess( true );
    gbel.Name( name );
    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
Quintiq file version 2.0
#parent: #root
Method SynchronizationAllMappingBrokerAndAPIByOption (
  String executionUser,
  Boolean isCustomOrder,
  Boolean isForeacst,
  Boolean isUnitOfMeasure_MP,
  Boolean isSalesSegment_MP,
  Boolean isProduct_MP,
  Boolean isConversionFactor,
  Boolean isOperation,
  Boolean isOperationBOM,
  Boolean isProductInLane,
  Boolean isAIPISPIP,
  Boolean isInventorySupply,
  Boolean isStockingPointCost,
  Boolean isOperationCost,
  Boolean isDOI_DSI,
  Boolean isCustomerGrade,
  Boolean isStockingPoint_MP,
  Boolean isCurrency_MP,
  Boolean isCurrencyRate_MP,
  Boolean isLane,
  Boolean isLaneLeg
)
{
  TextBody:
  [*
    if ( isCustomOrder ) {
      Global_MappingCustomOrder::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomOrder" );
    }
    if ( isForeacst ) {
      Global_MappingForecast::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_Forecast" );
    }
    if ( isUnitOfMeasure_MP ) {
      Global_MappingUnitOfMeasure_MP::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_UnitOfMeasure_MP" );
    }
    if ( isSalesSegment_MP ) {
      Global_MappingSalesSegment_MP::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_SalesSegment_MP" );
    }
    if ( isProduct_MP ) {
      Global_MappingProduct_MP::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_Product_MP" );
    }
    if ( isConversionFactor ) {
      Global_MappingConversionFactor::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_ConversionFactor" );
    }
    if ( isOperation ) {
      Global_MappingOperation::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_Operation" );
    }
    if ( isOperationBOM ) {
      Global_MappingOperationBOM::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_OperationBOM" );
    }
    if ( isProductInLane ) {
      Global_MappingProductInLane::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_ProductInLane" );
    }
    if ( isAIPISPIP ) {
      Global_MappingActualProductInStockingPointInPeriod::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_AIPISPIP" );
    }
    if ( isInventorySupply ) {
      Global_MappingInventorySupply::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_InventorySupply" );
    }
    if ( isStockingPointCost ) {
      Global_MappingStockingPointCost::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_StockingPointCost" );
    }
    if ( isOperationCost ) {
      Global_MappingOperationCost::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_OperationCost" );
    }
    if ( isDOI_DSI ) {
      Global_MappingDOI_DSI::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_DOI_DSI" );
    }
    if ( isCustomerGrade ) {
      Global_MappingCustomerGrade::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomerGrade" );
    }
    if ( isStockingPoint_MP ) {
      this.Global_MappingStockingPoint_MP( relflush );
      Global_BrokerExecuteLog::CreateInOperation( this, "StockingPoint_MP", executionUser );
      this -> OnException( this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), 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 );
    }
    if ( isCurrencyRate_MP ) {
      this.Global_MappingCurrencyRate_MP( relflush );
      Global_BrokerExecuteLog::CreateInOperation( this, "CurrencyRate_MP", executionUser );
      this -> OnException( this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), this );
    }
    if ( isLane ) {
      this.Global_MappingLane( relflush );
      Global_BrokerExecuteLog::CreateInOperation( this, "Lane", executionUser );
      this -> OnException( this -> Global_MappingLane::CreateByAPI() -> Exception(), this );
    }
    if ( isLaneLeg ) {
      this.Global_MappingLaneLeg( relflush );
      Global_BrokerExecuteLog::CreateInOperation( this, "LaneLeg", executionUser );
      this -> OnException( this -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), this );
    }
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Method SynchronizeDataToMacroPlan (
  MacroPlan macroPlan,
  Boolean isUnitOfMeasure_MP
)
{
  TextBody:
  [*
    if ( isUnitOfMeasure_MP ) {
      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
    }
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_Test.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Method Test
{
  TextBody:
  [*
    // KKO2 Sep-27-2023 (created)
  *]
}
_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
@@ -25,24 +25,28 @@
    globalOTDTable.Global_MappingOperationCost( relflush );
    globalOTDTable.Global_MappingForecast( relflush );
    globalOTDTable.Global_MappingCustomOrder( relflush );
    globalOTDTable.Global_MappingDOI_DSI( relflush );
    globalOTDTable.Global_MappingCustomerGrade( relflush );
    
    globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().AsyncExecute();
    globalOTDTable.GlobalOTDTable_SalesSegment_MP().AsyncExecute();
    globalOTDTable -> OnException( globalOTDTable -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), globalOTDTable );
    globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrency_MP::CreateByAPI() -> Exception(), globalOTDTable );
    globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), globalOTDTable );
    globalOTDTable.GlobalOTDTable_Product_MP().AsyncExecute();
    globalOTDTable.GlobalOTDTable_ConversionFactor().AsyncExecute();
    globalOTDTable.GlobalOTDTable_Operation().AsyncExecute();
    globalOTDTable.GlobalOTDTable_OperationBOM().AsyncExecute();
    globalOTDTable -> OnException( globalOTDTable -> Global_MappingLane::CreateByAPI() -> Exception(), globalOTDTable );
    globalOTDTable -> OnException( globalOTDTable -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), globalOTDTable );
    globalOTDTable.GlobalOTDTable_ProductInLane().AsyncExecute();
    globalOTDTable.GlobalOTDTable_AIPISPIP().AsyncExecute();
    globalOTDTable.GlobalOTDTable_InventorySupply().AsyncExecute();
    globalOTDTable.GlobalOTDTable_StockingPointCost().AsyncExecute();
    globalOTDTable.GlobalOTDTable_OperationCost().AsyncExecute();
    globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();
    globalOTDTable.GlobalOTDTable_CustomOrder().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_SalesSegment_MP().AsyncExecute();
    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), globalOTDTable );
    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrency_MP::CreateByAPI() -> Exception(), globalOTDTable );
    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), globalOTDTable );
    //globalOTDTable.GlobalOTDTable_Product_MP().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_ConversionFactor().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_Operation().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_OperationBOM().AsyncExecute();
    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingLane::CreateByAPI() -> Exception(), globalOTDTable );
    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), globalOTDTable );
    //globalOTDTable.GlobalOTDTable_ProductInLane().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_AIPISPIP().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_InventorySupply().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_StockingPointCost().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_OperationCost().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_CustomOrder().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_DOI_DSI().AsyncExecute();
    //globalOTDTable.GlobalOTDTable_CustomerGrade().AsyncExecute();
  *]
}
_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl
@@ -5,5 +5,17 @@
{
  #keys: '5[414702.0.83354588][414702.0.83354586][0.0.0][414702.0.83354587][414702.0.83354589]'
  BaseType: Object
  OnCreate:
  [*
    this.BusinessType( relnew, BusinessTypeName := "手机事业部OLED" );
    this.BusinessType( relnew, BusinessTypeName := "专业显示事业部" );
    this.BusinessType( relnew, BusinessTypeName := "外卖CELLOLED" );
    this.BusinessType( relnew, BusinessTypeName := "手机事业部" );
    this.BusinessType( relnew, BusinessTypeName := "汽车电子事业部" );
    this.BusinessType( relnew, BusinessTypeName := "特种显示" );
    this.BusinessType( relnew, BusinessTypeName := "运动健康事业部" );
    this.BusinessType( relnew, BusinessTypeName := "车载显示事业部" );
    this.BusinessType( relnew, BusinessTypeName := "IT事业部" );
  *]
  StructuredName: 'GlobalOTDTables'
}
_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecuteUser.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ExecuteUser
{
  #keys: '3[414702.0.498264673][414702.0.498264672][414702.0.498264674]'
  Description: '执行用户'
  ValueType: String
}
_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecutionStatus.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Attribute ExecutionStatus
{
  #keys: '3[414702.0.498264686][414702.0.498264685][414702.0.498264687]'
  Description:
  [*
    æ‰§è¡ŒçŠ¶æ€
    InOperation
    Complete
  *]
  ValueType: String
}
_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CanRun.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CanRun (
  GlobalOTDTable globalOTDTable,
  String brokerName
) as Boolean
{
  TextBody:
  [*
    isCanRun := exists( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.BrokerName() = brokerName and
                                                                 tempGBEL.ExecutionStatus() = "InOperation"
                       );
    return isCanRun;
  *]
}
_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CreateInOperation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateInOperation (
  GlobalOTDTable globalOTDTable,
  String brokerName,
  String executionUser
)
{
  TextBody:
  [*
    globalOTDTable.Global_BrokerExecuteLog( relnew,
                                            BrokerName := brokerName,
                                            ExecuteUser := executionUser,
                                            ExecutionStatus := "InOperation" );
  *]
}
_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingActualProductInStockingPointInPeriod( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_AIPISPIP().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingConversionFactor( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_ConversionFactor().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
@@ -38,14 +38,12 @@
                                                   );
    }
    
    globalOTDTable.Global_BrokerExecuteLog( relnew,
                                            BrokerName      := "",
                                            ElementTotal    := globalOTDTable.Global_MappingCurrencyRate_MP( relsize ),
                                            ErrorMessage    := "",
                                            IsSuccess       := true,
                                            Name            := "接口数据(货币汇率)",
                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                            ErrorNo         := 0
                                           );
    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
                                                                       tempGBEL.BrokerName()      = "CurrencyRate_MP" );
    gbel.ExecutionStatus( "Complete" );
    gbel.ElementTotal( globalOTDTable.Global_MappingCurrencyRate_MP( relsize ) );
    gbel.IsSuccess( true );
    gbel.Name( "接口数据(货币汇率)" );
    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
  *]
}
_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
@@ -35,14 +35,12 @@
                                               );
    }
    
    globalOTDTable.Global_BrokerExecuteLog( relnew,
                                            BrokerName      := "",
                                            ElementTotal    := globalOTDTable.Global_MappingCurrency_MP( relsize ),
                                            ErrorMessage    := "",
                                            IsSuccess       := true,
                                            Name            := "接口数据(货币)",
                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                            ErrorNo         := 0
                                           );
    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
                                                                       tempGBEL.BrokerName()      = "Currency_MP" );
    gbel.ExecutionStatus( "Complete" );
    gbel.ElementTotal( globalOTDTable.Global_MappingCurrency_MP( relsize ) );
    gbel.IsSuccess( true );
    gbel.Name( "接口数据(货币)" );
    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
  *]
}
_Main/BL/Type_Global_MappingCustomOrder/Attribute_OrderTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute OrderTime
{
  #keys: '3[414702.0.462647536][414702.0.462647535][414702.0.462647537]'
  ValueType: Date
}
_Main/BL/Type_Global_MappingCustomOrder/Attribute_OrderType#905.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute OrderType
{
  #keys: '3[414702.0.462647526][414702.0.462647525][414702.0.462647527]'
  ValueType: String
}
_Main/BL/Type_Global_MappingCustomOrder/Attribute_OrderType.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_Global_MappingCustomOrder/Attribute_ProductGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductGrade
{
  #keys: '3[414702.0.462647546][414702.0.462647545][414702.0.462647547]'
  ValueType: String
}
_Main/BL/Type_Global_MappingCustomOrder/Attribute_SegmentPriority.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute SegmentPriority
{
  #keys: '3[414702.0.462647556][414702.0.462647555][414702.0.462647557]'
  ValueType: String
}
_Main/BL/Type_Global_MappingCustomOrder/Attribute_SheetProfitability.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute SheetProfitability
{
  #keys: '3[414702.0.462647566][414702.0.462647565][414702.0.462647567]'
  ValueType: String
}
_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingCustomOrder( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_CustomOrder().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingCustomerGrade/Attribute_BusinessType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute BusinessType
{
  #keys: '3[414702.0.445738362][414702.0.445738361][414702.0.445738363]'
  Description: '事业部'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_Global_MappingCustomerGrade/Attribute_Customer.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute Customer
{
  #keys: '3[414702.0.445738352][414702.0.445738351][414702.0.445738353]'
  Description: '客户名称'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_Global_MappingCustomerGrade/Attribute_CustomerGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomerGrade
{
  #keys: '3[414702.0.445738372][414702.0.445738371][414702.0.445738373]'
  Description: '客户等级'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_Global_MappingCustomerGrade/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingCustomerGrade( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_CustomerGrade().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingCustomerGrade/TypeIndex_Global_MappingCustomerGradeTypeIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
TypeIndex Global_MappingCustomerGradeTypeIndex
{
  Attributes:
  [
    TypeIndexAttribute
    {
      ModelElement: BusinessType
    }
    TypeIndexAttribute
    {
      ModelElement: Customer
    }
    TypeIndexAttribute
    {
      ModelElement: CustomerGrade
    }
  ]
}
_Main/BL/Type_Global_MappingCustomerGrade/_ROOT_Type_Global_MappingCustomerGrade.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type Global_MappingCustomerGrade
{
  #keys: '5[414702.0.445485672][414702.0.445485670][0.0.0][414702.0.445485671][414702.0.445485673]'
  BaseType: Object
  StructuredName: 'Global_MappingCustomerGrades'
}
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_DOI.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DOI
{
  #keys: '3[414702.0.445364709][414702.0.445364708][414702.0.445364710]'
  Description: '库存周转天数'
  ValueType: String
}
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_DSI.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DSI
{
  #keys: '3[414702.0.445364719][414702.0.445364718][414702.0.445364720]'
  Description: '库存可售天数'
  ValueType: String
}
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_OrganCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute OrganCode
{
  #keys: '3[414702.0.445364699][414702.0.445364698][414702.0.445364700]'
  Description: '组织编码'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_Global_MappingDOI_DSI/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[414702.0.445364677][414702.0.445364676][414702.0.445364678]'
  Description: '物料编码'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_Global_MappingDOI_DSI/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingDOI_DSI( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_DOI_DSI().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingDOI_DSI/TypeIndex_Global_MappingDOI_DSITypeIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
TypeIndex Global_MappingDOI_DSITypeIndex
{
  Attributes:
  [
    TypeIndexAttribute
    {
      ModelElement: ProductID
    }
    TypeIndexAttribute
    {
      ModelElement: OrganCode
    }
  ]
}
_Main/BL/Type_Global_MappingDOI_DSI/_ROOT_Type_Global_MappingDOI_DSI.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type Global_MappingDOI_DSI
{
  #keys: '5[414702.0.445364654][414702.0.445364652][0.0.0][414702.0.445364653][414702.0.445364655]'
  BaseType: Object
  StructuredName: 'Global_MappingDOI_DSIs'
}
_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingForecast( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingInventorySupply( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_InventorySupply().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
@@ -36,14 +36,13 @@
                                        );
    }
    
    globalOTDTable.Global_BrokerExecuteLog( relnew,
                                            BrokerName      := "",
                                            ElementTotal    := globalOTDTable.Global_MappingLane( relsize ),
                                            ErrorMessage    := "",
                                            IsSuccess       := true,
                                            Name            := "接口数据(车道)",
                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                            ErrorNo         := 0
                                           );
    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
                                                                       tempGBEL.BrokerName()      = "Lane" );
    gbel.ExecutionStatus( "Complete" );
    gbel.ElementTotal( globalOTDTable.Global_MappingLane( relsize ) );
    gbel.IsSuccess( true );
    gbel.Name( "接口数据(车道)" );
    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
  *]
}
_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
@@ -37,14 +37,12 @@
                                           );
    }
    
    globalOTDTable.Global_BrokerExecuteLog( relnew,
                                            BrokerName      := "",
                                            ElementTotal    := globalOTDTable.Global_MappingLaneLeg( relsize ),
                                            ErrorMessage    := "",
                                            IsSuccess       := true,
                                            Name            := "接口数据(车道支架)",
                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                            ErrorNo         := 0
                                           );
    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
                                                                       tempGBEL.BrokerName()      = "LaneLeg" );
    gbel.ExecutionStatus( "Complete" );
    gbel.ElementTotal( globalOTDTable.Global_MappingLaneLeg( relsize ) );
    gbel.IsSuccess( true );
    gbel.Name( "接口数据(车道支架)" );
    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
  *]
}
_Main/BL/Type_Global_MappingOperation/Attribute_IsLinkedWithFinishedGood.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsLinkedWithFinishedGood
{
  #keys: '3[157968.0.1145180207][157968.0.1145180206][157968.0.1145180208]'
  Description: 'Updated procedurally for checking whether this object is used to produce a finished good.'
  ValueType: Boolean
}
_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingOperation( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_Operation().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingOperationBOM/Attribute_IsLinkedWithFinishedGood.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsLinkedWithFinishedGood
{
  #keys: '3[157968.0.1145180190][157968.0.1145180189][157968.0.1145180191]'
  Description: 'Updated procedurally for checking whether this object is used to produce a finished good.'
  ValueType: Boolean
}
_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingOperationBOM( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_OperationBOM().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingProductInLane( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_ProductInLane().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingProduct_MP/Attribute_BOMCount.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute BOMCount
{
  #keys: '3[157968.0.1161166085][157968.0.1161166084][157968.0.1161166086]'
  Description: 'Number of unique BOM used to produce this finished good.'
  ValueType: Number
}
_Main/BL/Type_Global_MappingProduct_MP/Attribute_IsLinkedWithFinishedGood.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsLinkedWithFinishedGood
{
  #keys: '3[157968.0.1145180168][157968.0.1145180167][157968.0.1145180169]'
  Description: 'Updated procedurally for checking whether this product is used to produce a finished good.'
  ValueType: Boolean
}
_Main/BL/Type_Global_MappingProduct_MP/Method_SetIsLinkedWithFinishedGoodAttributes_Recursive.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
Quintiq file version 2.0
#parent: #root
Method SetIsLinkedWithFinishedGoodAttributes_Recursive (
  Number depth,
  Number maxdepth,
  Global_MappingProduct_MPs productspool,
  Global_MappingOperations operationspool,
  Global_MappingOperationBOMs operationbomspool,
  output Strings uniquebomids_o
)
{
  Description: 'Method to traverse the supply chain recursively to determine if there are any products that are not used to produce finished goods.'
  TextBody:
  [*
    if( not this.IsLinkedWithFinishedGood() )
    {
      if( this.ProductMajorType() <> "成品" )
      {
        uniquebomids_o.Add( this.ID() );
      }
      depth := depth + 1;
      this.IsLinkedWithFinishedGood( true );
      if( depth <= maxdepth )
      {
        operations := selectset( operationspool, Elements, operation,
                                 not operation.IsLinkedWithFinishedGood()
                                 and operation.BusinessType() = this.BusinessType()
                                 and operation.ProductID() = this.ID() );
        operationspool.Remove( operations );
        traverse( operations, Elements, operation )
        {
          operation.IsLinkedWithFinishedGood( true );
          operationboms := selectset( operationbomspool, Elements, operationbom,
                                      not operationbom.IsLinkedWithFinishedGood()
                                      and operationbom.BusinessType() = operation.BusinessType()
                                      and operationbom.OrganCode() = operation.OrganCode()
                                      and operationbom.ProcessSection() = operation.ProcessSection()
                                      and operationbom.ProductCode() = operation.ProductID() );
          operationbomspool.Remove( operationboms );
          traverse( operationboms, Elements, operationbom )
          {
            operationbom.IsLinkedWithFinishedGood( true );
            componentproduct := Global_MappingProduct_MP::FindTypeIndexIDAndBusinessType( operationbom.ComponentCode(),
                                                                                          operationbom.BusinessType() );
            if( guard( not componentproduct.IsLinkedWithFinishedGood(), false ) )
            {
              productspool.Remove( componentproduct );
              componentproduct.SetIsLinkedWithFinishedGoodAttributes_Recursive( depth,
                                                                                maxdepth,
                                                                                productspool,
                                                                                operationspool,
                                                                                operationbomspool,
                                                                                uniquebomids_o );
            }
            if( operationbom.AlternativeMaterialCode() <> ""
                and operationbom.AlternativeMaterialCode() <> operationbom.ComponentCode() )
            {
              alternativeproduct := Global_MappingProduct_MP::FindTypeIndexIDAndBusinessType( operationbom.AlternativeMaterialCode(),
                                                                                              operationbom.BusinessType() );
              if( guard( not alternativeproduct.IsLinkedWithFinishedGood(), false ) )
              {
                productspool.Remove( alternativeproduct );
                alternativeproduct.SetIsLinkedWithFinishedGoodAttributes_Recursive( depth,
                                                                                    maxdepth,
                                                                                    productspool,
                                                                                    operationspool,
                                                                                    operationbomspool,
                                                                                    uniquebomids_o );
              }
            }
          }
        }
      }
      else
      {
        debuginfo( "Product:", this.ID(),
                   "| BusinessType:", this.BusinessType(),
                   "| Max depth reached, stop searching... (", depth, ")" );
      }
    }
  *]
}
_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingProduct_MP( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_Product_MP().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingSalesSegment_MP( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_SalesSegment_MP().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingStockingPointCost( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_StockingPointCost().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
@@ -35,14 +35,12 @@
                                                    );
    }
    
    globalOTDTable.Global_BrokerExecuteLog( relnew,
                                            BrokerName      := "",
                                            ElementTotal    := globalOTDTable.Global_MappingStockingPoint_MP( relsize ),
                                            ErrorMessage    := "",
                                            IsSuccess       := true,
                                            Name            := "接口数据(库存点)",
                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
                                            ErrorNo         := 0
                                           );
    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
                                                                       tempGBEL.BrokerName()      = "StockingPoint_MP" );
    gbel.ExecutionStatus( "Complete" );
    gbel.ElementTotal( globalOTDTable.Global_MappingStockingPoint_MP( relsize ) );
    gbel.IsSuccess( true );
    gbel.Name( "接口数据(库存点)" );
    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
  *]
}
_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingOperationCost( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_OperationCost().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeInterfaceData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeInterfaceData (
  GlobalOTDTable globalOTDTable,
  String executionUser,
  String brokerName
)
{
  TextBody:
  [*
    globalOTDTable.Global_MappingUnitOfMeasure_MP( relflush );
    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
    if ( not isCanRun ) {
      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
      globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().AsyncExecute();
    }
  *]
}
_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SynchronizeMacroPlanData (
  GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name := "同步单位数据",
                                                                       IsSuccess := true
                                                                      );
    try {
      traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, gmuommp ) {
        unitOfMeasure_MP := select( macroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = gmuommp.Name() );
        if ( isnull( unitOfMeasure_MP ) ) {
          unitOfMeasure_MP := UnitOfMeasure_MP::Create( macroPlan, gmuommp.Name(), false, false );
        }
        if ( gmuommp.IsDefault() ) {
          unitOfMeasure_MP.SetAsDefault();
        }
      }
    } onerror {
      global_BrokerExecuteLog.IsSuccess( false );
      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
    }
  *]
}
_Main/BL/Type_Global_ShowCell/Attribute_Value.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Value
{
  #keys: '3[414702.0.483720762][414702.0.483720761][414702.0.483720763]'
  ValueType: String
}
_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_CustomOrder.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateShowData_CustomOrder (
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    businessTypeColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "事业部" );
    currencyIDColumn         := Global_ShowColumn::CreateColumn( globalOTDTable, 1, "货币" );
    customerColumn           := Global_ShowColumn::CreateColumn( globalOTDTable, 2, "客户名称" );
    customerIDColumn         := Global_ShowColumn::CreateColumn( globalOTDTable, 3, "客户ID" );
    idColumn                 := Global_ShowColumn::CreateColumn( globalOTDTable, 4, "唯一标识" );
    orderDateColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 5, "订单日期" );
    orderIDColumn            := Global_ShowColumn::CreateColumn( globalOTDTable, 6, "订单号" );
    orderLineIDColumn        := Global_ShowColumn::CreateColumn( globalOTDTable, 7, "订单行号" );
    priceColumn              := Global_ShowColumn::CreateColumn( globalOTDTable, 8, "单价" );
    priorityNameColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 9, "优先级名称" );
    productIDColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 10, "产品编码" );
    stockingPointIDColumn    := Global_ShowColumn::CreateColumn( globalOTDTable, 11, "库存点编码" );
    salesegmentNameColumn    := Global_ShowColumn::CreateColumn( globalOTDTable, 12, "销售部门名称" );
    quantityColumn           := Global_ShowColumn::CreateColumn( globalOTDTable, 13, "数量" );
    unitofmeasureNameColumn  := Global_ShowColumn::CreateColumn( globalOTDTable, 14, "单位" );
    orderTypeColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 15, "订单类型" );
    isAvailableColumn        := Global_ShowColumn::CreateColumn( globalOTDTable, 16, "是否可用" );
    productGradeColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 17, "产品等级" );
    segmentPriorityColumn    := Global_ShowColumn::CreateColumn( globalOTDTable, 18, "细分市场优先级" );
    sheetProfitabilityColumn := Global_ShowColumn::CreateColumn( globalOTDTable, 19, "大张盈利" );
    orderTimeColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 20, "订单下单时间" );
    i := 1;
    traverse ( globalOTDTable, Global_MappingCustomOrder, gmco ) {
      gloabal_ShowRow := globalOTDTable.Global_ShowRow( relnew, RowNr := i );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.BusinessType(), businessTypeColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.CurrencyID(), currencyIDColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.Customer(), customerColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.CustomerID(), customerIDColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.ID(), idColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, guard( gmco.OrderDate().Format( "Y-M2-D2" ), "时间格式错误" ), orderDateColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.OrderID(), orderIDColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.OrderLineID(), orderLineIDColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, [String]gmco.Price(), priceColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.PriorityName(), priorityNameColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.ProductID(), productIDColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.StockingPointID(), stockingPointIDColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.SalesSegmentName(), salesegmentNameColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, [String]gmco.Quantity(), quantityColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.UnitOfMeasureName(), unitofmeasureNameColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.OrderType(), orderTypeColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, [String]gmco.IsAvailable(), isAvailableColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.ProductGrade(), productGradeColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.SegmentPriority(), segmentPriorityColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.SheetProfitability(), sheetProfitabilityColumn, gloabal_ShowRow );
      Global_ShowCell::SetColumnsAndRows( globalOTDTable, guard( gmco.OrderTime().Format( "Y-M2-D2" ), "时间格式错误" ), orderTimeColumn, gloabal_ShowRow );
      i++;
    }
  *]
}
_Main/BL/Type_Global_ShowCell/StaticMethod_SetColumnsAndRows.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SetColumnsAndRows (
  GlobalOTDTable globalOTDTable,
  String value,
  Global_ShowColumn global_ShowColumn,
  Global_ShowRow global_ShowRow
)
{
  TextBody:
  [*
    global_ShowCell := globalOTDTable.Global_ShowCell( relnew, Value := value );
    global_ShowCell.Global_ShowColumn( relset, global_ShowColumn );
    global_ShowCell.Global_ShowRow( relset, global_ShowRow );
  *]
}
_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
StaticMethod ShowData (
  GlobalOTDTable globalOTDTable,
  Global_BrokerExecuteLog global_BrokerExecuteLog
)
{
  TextBody:
  [*
    if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_CustomOrder" ) {
      Global_ShowCell::CreateShowData_CustomOrder( globalOTDTable );
    }
  *]
}
_Main/BL/Type_Global_ShowCell/_ROOT_Type_Global_ShowCell.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type Global_ShowCell
{
  #keys: '5[414702.0.483720658][414702.0.483720656][0.0.0][414702.0.483720657][414702.0.483720659]'
  BaseType: Object
  StructuredName: 'Global_ShowCells'
}
_Main/BL/Type_Global_ShowColumn/Attribute_ColumnIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ColumnIndex
{
  #keys: '3[414702.0.487974706][414702.0.487974705][414702.0.487974707]'
  ValueType: Number
}
_Main/BL/Type_Global_ShowColumn/Attribute_ColumnName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ColumnName
{
  #keys: '3[414702.0.483720752][414702.0.483720751][414702.0.483720753]'
  ValueType: String
}
_Main/BL/Type_Global_ShowColumn/StaticMethod_CreateColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateColumn (
  GlobalOTDTable globalOTDTable,
  Number columnIndex,
  String columnName
) as Global_ShowColumn
{
  TextBody:
  [*
    global_ShowColumn := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := columnIndex, ColumnName := columnName );
    return global_ShowColumn;
  *]
}
_Main/BL/Type_Global_ShowColumn/_ROOT_Type_Global_ShowColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type Global_ShowColumn
{
  #keys: '5[414702.0.483720653][414702.0.483720651][0.0.0][414702.0.483720652][414702.0.483720654]'
  BaseType: Object
  StructuredName: 'Global_ShowColumns'
}
_Main/BL/Type_Global_ShowRow/Attribute_RowNr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute RowNr
{
  #keys: '3[414702.0.483720742][414702.0.483720741][414702.0.483720743]'
  ValueType: Number
}
_Main/BL/Type_Global_ShowRow/_ROOT_Type_Global_ShowRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type Global_ShowRow
{
  #keys: '5[414702.0.483720648][414702.0.483720646][0.0.0][414702.0.483720647][414702.0.483720649]'
  BaseType: Object
  StructuredName: 'Global_ShowRows'
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetBOMBySKU.qbl
@@ -1,17 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_GetBOMBySKU (
  MacroPlan Owner,
  GlobalOTDTable GlobData,
  String SKU
) as MappingBOM
) as Global_MappingOperationBOM
{
  Description: '根据SKU获取BOM'
  TextBody:
  [*
    Obj :=null( MappingBOM,constcontent );
    if( not isnull( Owner) and SKU.Length()>0)
    Obj :=null( Global_MappingOperationBOM,constcontent );
    if( not isnull( GlobData) and SKU.Length()>0)
    {
      Obj := select( Owner,MappingBOM,ObjM,ObjM.ProductCode()=SKU);
      Obj := select( GlobData,Global_MappingOperationBOM,ObjM,ObjM.ProductCode()=SKU);
    }
    return Obj;
  *]
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
@@ -6,7 +6,8 @@
  Number ProductQty,
  String ForecastId,
  String VCode,
  Date NDate
  Date NDate,
  GlobalOTDTable GlobData
) as owning JSON
{
  Description: '获取物料信息'
@@ -26,15 +27,15 @@
      if( Owner.MappingBOM(relsize )>0)
      {
        // å¾—到下一级数据
        AllData:= selectset( Owner, MappingBOM,object,object.ComponentCode()=ParentSKU);
        ObjProduct := null( MappingProduct,constcontent );
        AllData:= selectset( GlobData, Global_MappingOperationBOM,object,object.ComponentCode()=ParentSKU);
        ObjProduct := null( Product_MP,constcontent );
        ObjUnit := null( Unit,constcontent );
        MaterialType:="";
        MaterialName:="-";
        StockPoint := "";
        NRate:=1.0;
        NComponentsUsed :=0.0;
        ObjBOM := H_FunctionClass::SM_GetBOMBySKU(Owner,ParentSKU);
        ObjBOM := H_FunctionClass::SM_GetBOMBySKU(GlobData,ParentSKU);
        if(not isnull( ObjBOM))
        {
          NRate := ObjBOM.ComponentOutputRate();
@@ -59,7 +60,7 @@
              ObjProduct:= H_FunctionClass::SM_GetProductInfo(Owner,Obj.ProductCode());
              if( not isnull( ObjProduct))
              {
                MaterialType:= ObjProduct.ProductMajorType();
                MaterialType:= ObjProduct.ParentID();
                MaterialName:=ObjProduct.Name();
              }
              ObjUnit:= H_FunctionClass::SM_GetUnitBySKU( Owner,Obj.ProductCode());
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetProductInfo#1.qbl
@@ -3,17 +3,17 @@
StaticMethod SM_GetProductInfo (
  MacroPlan Owner,
  String SKU
) as MappingProduct
) as Product_MP
{
  Description: '根据SKU获取物料信息'
  TextBody:
  [*
    // æ ¹æ®SKU获取物料信息
    // æ³¨æ„ï¼šç‰©æ–™ç±»åž‹å– ParentID,
    Obj := null( MappingProduct,constcontent );
    // æ³¨æ„ï¼šç‰©æ–™ç±»åž‹å– ParentID
    Obj := null( Product_MP,constcontent );
    if( not isnull( Owner) and SKU.Length()>0)
    {
      Obj:= select( Owner,MappingProduct,ObjMP,ObjMP.ID()=SKU);
      Obj:= select( Owner,Product_MP,ObjMP,ObjMP.ID()=SKU);
    }
    return Obj;
  *]
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastData.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastDataEx.qbl
@@ -43,12 +43,15 @@
      idx:=0;
      RQty:=0;
      ObjOrderRealQty:=null( H_OrderForecastRealQty,constcontent );
      SKU:="";
      SKUName := "";
    
      traverse( AllData,Elements,Obj,not isnull(Obj))
      {
        // æ²¡æœ‰å®¢æˆ·ä¿¡æ¯å’Œéƒ¨é—¨ä¿¡æ¯ï¼ŒSalesSegmentName=事业部+“-”+客户名称
        CustomName := Obj.SalesSegmentName();
        DepartMent := Obj.SalesSegmentName();
        SKU :=Obj.ProductID();
        // è¿™é‡Œç”¨æŸ¥æ‰¾åŽæˆªå–,因为不确定有几个横线,以第一个为准
        idx:=Obj.SalesSegmentName().FindString( "-",0);
        if(idx>0)
@@ -56,6 +59,14 @@
          DepartMent:=Obj.SalesSegmentName().SubString( 0,idx);
          CustomName := Obj.SalesSegmentName().SubString( idx+1, Obj.SalesSegmentName().Length() - (idx+1));
        }
        // èŽ·å–ç‰©æ–™ä¿¡æ¯
        ObjMaterial := H_FunctionClass::SM_GetProductInfo( Owner,Obj.ProductID());
        if(not isnull( ObjMaterial))
        {
          SKUName := ObjMaterial.Name();
        }
         // æ›´æ–°é¢„测信息,非新数据更新信息。
         ObjOrderRealQty := select( Owner,H_OrderForecastRealQty,ObjO,ObjO.CustomCode()=CustomName and ObjO.SKU()=Obj.ProductID() 
                                    and ObjO.Month().StartOfMonth() = Obj.EndDate().StartOfMonth() )
@@ -64,7 +75,7 @@
           Owner.H_OrderForecastRealQty(relnew,CustomCode := CustomName,CustomName := CustomName,ForecastQty := [Number]Obj.Quantity().Round( 0)
                                         ,ForecatsRealQty := [Number]Obj.Quantity().Round( 0),ID := H_FunctionClass::SM_GenerateID( "OR")
                                         ,Month := Obj.EndDate(),SKU := Obj.ProductID(),Unit := Obj.UnitOfMeasureName()
                                         ,Department := DepartMent,VCode := VersionCode);
                                         ,Department := DepartMent,VCode := VersionCode,SKUName := SKUName);
         }
         else
         {
_Main/BL/Type_ImportExcel/Method_Execute.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
Quintiq file version 2.0
#parent: #root
MethodOverride Execute #extension
{
  TextBody:
  [*
    opt := DatasetFindOptions::Construct( this.MacroPlanDatasetName() );
    mp := MDSMacroPlan::Find( opt );
    opt := DatasetFindOptions::Construct();
    scenarioManager := MDSScenarioManager::Find( opt );
    // Only get data source which has all required files uploaded
    dummyMissingFiles := construct( Strings );
    needUserUploadAllFiles := true;
    validUploadedFiles := selectset( this, LibSOPImpExp_DataSourceChildren, ds,
                                     ds.HasAllRequiredFilesForImport( dummyMissingFiles, needUserUploadAllFiles ) );
    traverse( validUploadedFiles, Elements, file )
    {
      this.LibSOPImpExp_UserInput( relnew, Value := file.Name() );
    }
    binaryValues := selectvalues( validUploadedFiles, Elements.LibSOPImpExp_DataSourceFile.LibSOPImpExp_ImportUploadedFile, file, true, file.DataAsBinary() );
    brokerNames := selectvalues( validUploadedFiles, Elements.LibSOPImpExp_DataSourceFile, file, true, file.BrokerName() );
    userinputvalues := selectuniquevalues( this, LibSOPImpExp_UserInput, userinput,
                                           true,
                                           userinput.Value() );
    mpsync := this.MPSync();
    // Reactive way to import
    o := this
    ->SetStatusInProgress()
    ->|mp->ImportExcels_Tianma( userinputvalues, binaryValues.Copy(), brokerNames )
    ->|scenarioManager->ImportExcels_Tianma( userinputvalues, binaryValues.Copy(), brokerNames )
    ->|mpsync->ImportExcels_Tianma( userinputvalues, binaryValues.Copy(), brokerNames )
    ->|this->SetStatusDone()
    ->|mp->SetLastImportTime()
    ->Exception();
    this->OnException(o);
  *]
}
_Main/BL/Type_ImportExcel/_ROOT_Type_ImportExcel.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization ImportExcel #extension
{
}
_Main/BL/Type_LibSOPImpExp_ExportExcel/StaticMethod_IsDataSourceIncluded_Tianma.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod IsDataSourceIncluded_Tianma (
  Strings userinputvalues,
  String datasource_i
) remote as Boolean
{
  Description: 'If data source selected by user to export'
  TextBody: 'return exists( userinputvalues, Elements, input, input = datasource_i );'
}
_Main/BL/Type_LibSOPImpExp_ExportExcel/_ROOT_Type_LibSOPImpExp_ExportExcel.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization LibSOPImpExp_ExportExcel #extension
{
}
_Main/BL/Type_MPSync/Method_ImportExcels_Tianma.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
Method ImportExcels_Tianma (
  Strings userinputvalues,
  BinaryValues mpBinaryValues_i,
  Strings mpBrokers_i
)
{
  Description: 'Import from Excel, used by web app.'
  TextBody:
  [*
    // @userInput_i - Array of data group that user imports
    // @mpBinaryValues_i - Array of uploaded Excels in binary value. Binary at position x matches @mpBrokers_i at same position
    // @mpBrokers_i - Array of uploaded Excels' broker name
    is3DDrive := false;
    // Check if each data group has files uploaded by user for import
    this.Import( LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_ImportProfiles() ),
                 mpBinaryValues_i, mpBrokers_i, is3DDrive, construct( FileItems), construct( Strings ) );
  *]
}
_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter#323.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl
@@ -1,6 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method RefreshCapacityAndSaleBudgeFilter
Method RefreshCapacityAndSaleBudgeFilter (
  GlobalOTDTable globalOtdTable
)
{
  TextBody:
  [*
@@ -9,12 +11,12 @@
    businessTypes := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, item.BusinessType() );
    info( [String]businessTypes.Size() );
    traverse( businessTypes, Elements, businessType ) {
      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( this, businessType );
      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( globalOtdTable, businessType );
    }
    placeOfProductionOfArrays := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, item.PlaceOfProductionOfArray() );
    info( [String]placeOfProductionOfArrays.Size() );
    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( this, placeOfProductionOfArray );
      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( globalOtdTable, placeOfProductionOfArray );
    }
  *]
}
_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
Method RefreshCapacityAndSaleBudgeFilter (
  Boolean deleteBeforeCreate,
  GlobalOTDTable globalOtdTable
)
{
  TextBody:
  [*
    if( deleteBeforeCreate ) {
      globalOtdTable.CapacityAndSaleBudgeFilterBusinessType( relflush );
      globalOtdTable.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );
    }
    this.RefreshCapacityAndSaleBudgeFilter( globalOtdTable );
  *]
}
_Main/BL/Type_MacroPlan/Method_ImportExcels_Tianma.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
Quintiq file version 2.0
#parent: #root
Method ImportExcels_Tianma (
  Strings userinputvalues,
  BinaryValues mpBinaryValues_i,
  Strings mpBrokers_i
)
{
  Description: 'Import from Excel, used by web app.'
  TextBody:
  [*
    // @userinputvalues - Array of data group that user imports
    // @mpBinaryValues_i - Array of uploaded Excels in binary value. Binary at position x matches @mpBrokers_i at same position
    // @mpBrokers_i - Array of uploaded Excels' broker name
    is3DDrive := false;
    // Check if each data group has files uploaded by user for import
    this.Synchronize( LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_SupplyChainParameters() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_GlobalParameters() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Periods() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MP_Functionality_InventorySpecifications() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MP_Functionality_InventorySupplies() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Products() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Forecasts() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_ServiceLevels() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Campaigns() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Entities() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Costs() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Lanes() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Routings() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Capacities() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MP_Functionality_SupplySpecifications() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Recipes() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MP_Designer_Actuals() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MP_GlobalParameters_KPIFeedbackName() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_OptimizerPuzzles() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_PostponementSpecAndFulfillmentRestriction() ),
                      LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_CustomerOrder() ),
                      false, /* isImportBinary */
                      mpBinaryValues_i,
                      mpBrokers_i,
                      is3DDrive,
                      construct( FileItems ), /* 3ddrive, ignore */
                      construct( Strings ) /* 3ddrive, ignore */ );
  *]
}
_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -9,7 +9,12 @@
  TextBody:
  [*
    // renhao Aug-14-2023 (created)
    listtodeal := selectset( globalOTDTable,Global_MappingActualProductInStockingPointInPeriod,actual,actual.ActualInventoryLevelEnd() > 0 );
    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
    listtodeal := selectset( globalOTDTable,
                             Global_MappingActualProductInStockingPointInPeriod,
                             actual,
                             ( actual.ActualInventoryLevelEnd() > 0 ) and
                             ( organcodelist.Find( actual.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
    totalcount := listtodeal.Size();
    info( "ActualPISPIP has " + totalcount.AsQUILL() + " rows in total" );
    
@@ -24,7 +29,7 @@
      if( not isnull(businessTypes)){
      
        for( i :=0 ;i < businessTypes.Size();i++ ){
          businessType := businessTypes.Element( i);
          businessType := businessTypes.Element( i );
          if( product.BusinessType() = businessType and not product.IsCommon()){
            ActualProductInStockingPointInPeriod::CreateOrUpdate( this,
                                                                  actual.ProductID(),
_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
@@ -14,7 +14,12 @@
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true );
    } else {
        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, businessTypes.Find( item.BusinessType() ) <> -1 );
        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
        listToDeal := selectset( globalOTDTable,
                                 Global_MappingCustomOrder,
                                 item,
                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and
                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
    }
    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() );
@@ -33,12 +38,18 @@
        }
    //  if( not isnull( Product_MP::FindById( this, item.ProductID() ) ) ){
    //    info( item.ProductID().AsQUILL() );
      CustomerOrder::CreateOrUpdate( this, item.CurrencyID(), item.Customer(), item.CustomerID(), item.ID(),
                                     item.OrderDate(), item.OrderID(), item.OrderLineID(), item.Price(),
                                     priorityName, item.ProductID(),
                                     item.StockingPointID(),
                                     item.SalesSegmentName(),
                                     item.Quantity(), item.UnitOfMeasureName(), item.OrderType(), item.IsAvailable());
      customOrder := CustomerOrder::CreateOrUpdate( this, item.CurrencyID(), item.Customer(), item.CustomerID(), item.ID(),
                                                    item.OrderDate(), item.OrderID(), item.OrderLineID(), item.Price(),
                                                    priorityName, item.ProductID(),
                                                    item.StockingPointID(),
                                                    item.SalesSegmentName(),
                                                    item.Quantity(), item.UnitOfMeasureName(), item.OrderType(), item.IsAvailable());
      customOrder.BusinessType( item.BusinessType() );
      customOrder.OrderType( item.OrderType() );
      customOrder.OrderTime( item.OrderTime() );
      customOrder.ProductGrade( item.ProductGrade() );
      customOrder.SegmentPriority( item.SegmentPriority() );
      customOrder.SheetProfitability( item.SheetProfitability() );
    //  }else{
    //    info( "invaild product: " + item.ProductID().AsQUILL() );
    //    }
_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -11,7 +11,13 @@
    // 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() );
    listtodeal := selectset( globalOTDTable,Global_MappingInventorySupply,externalSupply, externalSupply.UserQuantity()>0 and externalSupply.Date() >= queryStartDate /*and externalSupply.Date() <= queryEndDate*/);
    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
    listtodeal := selectset( globalOTDTable,
                             Global_MappingInventorySupply,
                             externalSupply,
                             ( externalSupply.UserQuantity()>0 ) and
                             ( externalSupply.Date() >= queryStartDate ) and
                             ( organcodelist.Find( externalSupply.StockingPointID().SubString( 0, 3 ) ) >= 0 )/*and externalSupply.Date() <= queryEndDate*/);
    totalcount := listtodeal.Size();
    description := "在途在制";
    info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
@@ -32,7 +38,7 @@
        if( not isnull(businessTypes)){
        
          for( i :=0 ;i < businessTypes.Size();i++ ){
            businessType := businessTypes.Element( i);
            businessType := businessTypes.Element( i );
            if( product.BusinessType() = businessType and not product.IsCommon()){
              InventorySupply::CreateOrUpdate( externalSupply.ID(),
                                               productMP,
_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
@@ -14,7 +14,13 @@
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
        listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, item.Quantity() > 0 );
    } else {
        listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, businessTypes.Find( item.BusinessType() ) <> -1 and item.Quantity()>0 );
        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
        listToDeal := selectset( globalOTDTable,
                                 Global_MappingForecast,
                                 item,
                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and
                                 ( item.Quantity()>0 ) and
                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
    }
    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() );
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -10,16 +10,17 @@
  TextBody:
  [*
    // yypsybs Aug-21-2023 (created)
    keyProductList := construct( Strings );
    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, 
    //                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
                                         businessTypes.Find( item.BusinessType() ) >= 0 )
                                         ( businessTypes.Find( item.BusinessType() ) >= 0 ) and
                                         ( organcodelist.Find( item.OrganCode() ) >= 0 ) )
    //                             and ifexpr( isKeyProduct, 
    //                                         keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
    //                                         true )
@@ -59,6 +60,7 @@
                  // ========分组处理输入========
                  
                }
                if( not isnull( stockingPoint)){
                  if( isKeyProduct){
                      keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
@@ -81,5 +83,78 @@
            this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
        }
    }
    //
    //keyProductList := construct( Strings );
    //if( isKeyProduct ) {
    //    keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="成品" or item.ProductMajorType()="半成品", item.ID() );
    //}
    //bomList := selectsortedset(  globalOTDTable, Global_MappingOperationBOM, item,
    //                             ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0,
    //                                     true,
    ////                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
    //                                     businessTypes.Find( item.BusinessType() ) >= 0 )
    ////                             and ifexpr( isKeyProduct,
    ////                                         keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
    ////                                         true )
    //                             ,
    //                             item.OrganCode() + "_" + item.ProductCode() + "_" + item.ProcessSection() );
    //// æŒ‰routing及routingStep分组
    //routingIds := selectuniquevalues( bomList, Elements, item, true, item.OrganCode() + "_" + item.ProductCode() );
    //traverse( routingIds, Elements, routingId ) {
    //    routingRows := selectset( bomList, Elements, item, true, routingId = item.OrganCode() + "_" + item.ProductCode() );
    //    if( routingRows.Size() > 0 ) {
    //        firstRow := routingRows.Element( 0 );
    ////        stockingPointId := firstRow.OrganCode()  + "_" + firstRow.ProductType() + "_Stock";
    ////        inputStockingPointId := firstRow.OrganCode()  + "_" + firstRow.ComponentType() + "_Stock";
    //        stockingPointId := firstRow.OrganCode()  + "_Stock";
    //
    //        // ========检查========
    //        product := Product_MP::FindProductTypeIndex( firstRow.ProductCode() );
    //        if( not isnull( product ) ) {
    ////              error( "product : " + firstRow.ProductCode() + " not found" );
    //          stockingPoint := StockingPoint_MP::FindStockingPointTypeIndex( stockingPointId );
    //
    ////          info( stockingPointId.AsQUILL() );
    //  //        if( isnull( stockingPoint ) ) {
    //  //            error( "stockingPoint : " + stockingPointId + " not found" );
    //  //        }
    //          routing := Routing::FindRoutingTypeIndex(  routingId );
    //          if( not isnull( routing ) ) {
    ////              error( "routing : " + routingId + " not found" );
    //            // ========处理输出========
    //            if( not isnull( stockingPoint ) ) {
    ////              info( 1 );
    //              operationsInLastSteps := Operation::FindFinalOperationsByRoutingId( this, routingId );
    //              traverse( operationsInLastSteps, Elements, operationsInLastStep ) {
    //                  operationsInLastStep.CreateOperationBOM( product, stockingPoint, false, true );
    //                  operationsInLastStep.GetOperationBOM( product.ID(), stockingPoint.ID(), false ).Quantity( 1 );
    //              }
    //              // ========分组处理输入========
    //
    //            }
    //            if( not isnull( stockingPoint)){
    //              if( isKeyProduct){
    //                  keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
    //                  this.MappingOperationBOMDataRouting( routing,globalOTDTable,keyRows);
    //                }else{
    //                  this.MappingOperationBOMDataRouting( routing,globalOTDTable,routingRows);
    //                }
    //
    //            }
    //          }
    //       }
    //    }
    //}
    //if( createPurchaseSupplyMaterial ) {
    //    toCreateBomList := selectuniquevalues( bomList, Elements, item,
    //                                           item.ComponentType() = "P", item.OrganCode() + item.ComponentCode());
    //    traverse( toCreateBomList, Elements, key ) {
    //        boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.ComponentCode() = key );
    //        bom := boms.First();
    //        this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
    //    }
    //}
  *]
}
_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
Method MappingOperationCostData (
  GlobalOTDTable globalOTDTable,
  Strings businesstypes
)
{
@@ -14,7 +15,12 @@
    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
        listtodeal := selectset( this, MappingOperation, item, true );
    } else {
        listtodeal := selectset( this, MappingOperation, item, businesstypes.Find( item.BusinessType() ) <> -1 );
        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
        listtodeal := selectset( this,
                                 MappingOperation,
                                 item,
                                 ( businesstypes.Find( item.BusinessType() ) <> -1 ) and
                                 ( organcodelist.Find( item.OrganCode() ) >= 0 ) );
    }
    
    // Get the list to deal with max sequence number
_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -11,8 +11,10 @@
    // èŽ·å–æœ‰åºçš„å¾…å¤„ç†è®°å½•
    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,
                                       ( businessTypes.Find( item.BusinessType() ) >= 0 ) and
                                       ( organcodelist.Find( item.OrganCode() ) >= 0 ),
    //                                   businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, 
                                       item.SequenceNumber() );
    } else {
_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
@@ -23,10 +23,10 @@
          }
    } else {
        if( iskeyproduct = true ){
          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find(  item.BusinessType()) >= 0 );
          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find( item.BusinessType() ) >= 0 );
         }
        else{
          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find(  item.BusinessType()) >= 0 );
          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find( item.BusinessType() ) >= 0 );
        }
    }
    totalcount := listToDeal.Size();
_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
@@ -14,7 +14,10 @@
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
        listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, true );
    } else {
        listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, businessTypes.Find( item.BusinessType() ) <> -1 );
        listToDeal := selectset( globalOTDTable,
                                 Global_MappingSalesSegment_MP,
                                 item,
                                 businessTypes.Find( item.BusinessType() ) <> -1 );
    }
    //nameList := construct( structured[String] );
    //nameList := selectvalues( listToDeal, Elements, item, true, item.Name() );
_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
@@ -15,9 +15,11 @@
    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
                                 ( businesstypes.Find( item.BusinessType() ) >= 0 ) and
                                 ( organcodelist.Find( item.OrganCode() ) >= 0 )
                                );
    }
    
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -131,7 +131,7 @@
    
    // todo åˆ¶é€ æˆæœ¬-16
    info( "InventoryCost Finished, Start OperationCost Mapping" );
    macroPlan.MappingOperationCostData( businessTypes );
    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes );
    
    // è®¢å•预测-17
    Forecast::DoSync( macroPlan, businessTypes ,globalOTDTable);
_Main/BL/Type_MappingSaleBudge/DefaultValue_PlaceOfProductionOfEvaporation.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl
@@ -61,7 +61,7 @@
    }
    //---------------------------------------------------------------------------------------------
    xmlTemplate := xmlTemplate + "</table>";
    info( xmlTemplate );
    //info( xmlTemplate );
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
    XLS::SaveTable( tableHandle, OS::TempPath() + "MappingCapacityAndSaleBudge.xlsx" );
    file := OSFile::Construct();
_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl
@@ -31,7 +31,7 @@
    
    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
    info( xmlTableString );
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
    tableGroupHandle := TableGroupHandle::Create( "物料标签" );
    tableGroupHandle.Add( tableHandle );
_Main/BL/Type_Operation/Method_GetHasValidOperationInputOutput.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute OrganCodeName
{
  #keys: '3[412960.0.276650052][412960.0.276650051][412960.0.276650053]'
  Description: '组织编码名称'
  ValueType: String
}
_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type OrganCode
{
  #keys: '5[412960.0.276650035][412960.0.276650033][0.0.0][412960.0.276650034][412960.0.276650036]'
  BaseType: Object
  Description: '事业部对应的组织编码集合'
  StructuredName: 'OrganCodes'
}
_Main/BL/Type_PriorityFactor/Attribute_ReflectionAttribute.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ReflectionAttribute
{
  #keys: '3[414382.0.554303396][414382.0.554303395][414382.0.554303397]'
  ValueType: String
}
_Main/BL/Type_PriorityFactor/Attribute_ReflectionType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ReflectionType
{
  #keys: '3[414382.0.554014806][414382.0.554014805][414382.0.554014807]'
  ValueType: String
}
_Main/BL/Type_PriorityFactor/StaticMethod_CheckNameValid.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CheckNameValid (
  MacroPlan owner,
  String businessType,
  Real coefficient,
  String desc,
  String name
) as Boolean
{
  TextBody:
  [*
    // NBoTk Sep-22-2023 (created)
    value := true;
    // åç§°ç›¸åŒè·³è¿‡
    obj := selectobject( owner,PriorityFactor,p,
                        p.BusinessType() = businessType and p.Coefficient() = coefficient and p.Name() = name and p.Desc() = desc
                        );
    if(not isnull( obj) )
    {
        value := false;
    }
    return value;
  *]
}
_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
@@ -11,7 +11,7 @@
    // NBoTk Sep-21-2023 (created)
    
    data := selectobject( owner,PriorityFactor,p,
                          p.BusinessType() = businessType and p.Name() = name
                           p.Name() = name
                          )
    
    return data.Coefficient();
_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
@@ -11,7 +11,6 @@
    value := "";
    
    strList := selectuniquevalues(  owner,PriorityFactor,p,
                                   p.BusinessType() = businessType,
                                    p.Name()
                                   );
    
_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
@@ -7,35 +7,37 @@
  TextBody:
  [*
    // NBoTk Sep-15-2023 (created)
    info(" init PriorutyFactor");
    // businessType
    // result := "集团面板;专业显示事业部;外卖CELL;非显;运动健康;运动健康事业部;手机事业部;特种显示;汽车电子事业部;车载显示事业部;IT事业部";
    businessTypeList := construct( structured[String]);
    businessTypeList.Add( "集团面板");
    businessTypeList.Add( "专业显示事业部");
    businessTypeList.Add( "外卖CELL");
    businessTypeList.Add( "非显");
    businessTypeList.Add( "运动健康");
    businessTypeList.Add( "运动健康事业部");
    businessTypeList.Add( "手机事业部面板");
    businessTypeList.Add( "特种显示");
    businessTypeList.Add( "汽车电子事业部面板");
    businessTypeList.Add( "车载显示事业部");
    businessTypeList.Add( "IT事业部");
    
    traverse( businessTypeList,Elements,b)
    businessType := "";
    // å¦‚果已经存在优先级数据 åˆ™ä¸åšå¤„理
    list := selectset( owner,PriorityFactor,p,true);
    if( list.Size() = 0 )
    {
        owner.PriorityFactor(relnew,Name := "客户策略" ,Desc := "将事业部计算的优先级,按该细分项比例阶梯确定该项得分。如:81%≤X≤100% 5分,61%≤X≤80% 4分", BusinessType := b );
        owner.PriorityFactor(relnew,Name := "客户等级" ,Desc := "根据需求数据中客户,匹配客户等级",BusinessType := b);
        owner.PriorityFactor(relnew,Name := "大张盈利水平" ,Desc := "1、获取客户*SKU大张盈利数 2、定义客户*SKU大张盈利数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := b );
        owner.PriorityFactor(relnew,Name := "细分市场等级" ,Desc := "1、获取客户*SKU对应细分市场等级 2、匹配需求数据中客户及SKU对应细分市场评分等级,得到对应阶梯得分", BusinessType := b );
        owner.PriorityFactor(relnew,Name := "需求类型" ,Desc := "匹配不同需求种类,得到对应得分", BusinessType := b );
        owner.PriorityFactor(relnew,Name := "订单下单时间" ,Desc := "根据需求订单中下单时间与需求时间差值,匹配阶梯得分", BusinessType := b );
        owner.PriorityFactor(relnew,Name := "产品等级" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := b );
        owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := b );
        owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := b );
          // æ·»åŠ äº‹ä¸šéƒ¨å¯¹åº”çš„é¢„åˆ¶ä¼˜å…ˆçº§å› å­æ•°æ®
          owner.PriorityFactor(relnew,Name := "客户策略" ,Desc := "将事业部计算的优先级,按该细分项比例阶梯确定该项得分。如:81%≤X≤100% 5分,61%≤X≤80% 4分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "客户等级" ,Desc := "根据需求数据中客户,匹配客户等级",BusinessType := businessType);
          owner.PriorityFactor(relnew,Name := "大张盈利水平" ,Desc := "1、获取客户*SKU大张盈利数 2、定义客户*SKU大张盈利数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "细分市场等级" ,Desc := "1、获取客户*SKU对应细分市场等级 2、匹配需求数据中客户及SKU对应细分市场评分等级,得到对应阶梯得分", 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、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1、获取客户*SKU DOI&DSI数 2、定义客户*SKUDOI&DSI数阶梯得分 3、匹配需求数据中客户及SKU数据,得到对应阶梯得分", BusinessType := businessType );
          // ä¼˜å…ˆçº§å› å­ç»†åˆ†
          priorityFactorList := selectset( owner,PriorityFactor,p,
                                           p.BusinessType() = businessType
                                           );
          traverse( priorityFactorList,Elements,e)
          {
              PriorityFactorDetails::InitData( owner,e);
          }
    }
  *]
}
_Main/BL/Type_PriorityFactorDetails/StaticMethod_CreateTestData.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_PriorityFactorDetails/StaticMethod_InitData.qbl
@@ -1,35 +1,102 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitData (
  MacroPlan owner
  MacroPlan owner,
  PriorityFactor priorityFactor
)
{
  TextBody:
  [*
    // NBoTk Sep-17-2023 (created)
    
    info(" init PriorutyFactorDetails" );
    traverse( owner, PriorityFactor , p)
    isBusinessType := false;
    if( priorityFactor.BusinessType() <> "集团面板" )
    {
        isBusinessType := false;
        if( p.BusinessType() <> "集团面板" )
        {
            isBusinessType := true;
        }
        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                     IsRange := false,GradingName := "大盈",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                     IsRange := false,GradingName := "小盈",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
                                     IsRange := false,GradingName := "持平",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
                                     IsRange := false,GradingName := "小亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
        p.PriorityFactorDetails(relnew,BusinessType := p.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
                                     IsRange := false,GradingName := "大亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := p.Name());
        isBusinessType := true;
    }
    if( priorityFactor.Name() = "大张盈利水平" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "大盈",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "小盈",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 0,
                                                IsRange := false,GradingName := "持平",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -3,
                                                IsRange := false,GradingName := "小亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := -5,
                                                IsRange := false,GradingName := "大亏",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "客户策略" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "81%≤X≤100%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                IsRange := false,GradingName := "61%≤X≤80%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "41%≤X≤60%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                IsRange := false,GradingName := "21%≤X≤40%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "1%≤X≤20%",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "细分市场等级" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "战略",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "重点",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "潜力",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "订单下单时间" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "120",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 4,
                                                IsRange := false,GradingName := "90",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "60",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 2,
                                                IsRange := false,GradingName := "30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "0",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "需求类型" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "有预测",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "无预测",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "纯预测",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "客户等级" )
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "战略",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "重点",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "潜力",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
    if( priorityFactor.Name() = "DOI" or priorityFactor.Name() = "DSI")
    {
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 5,
                                            IsRange := false,GradingName := "<7",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 3,
                                                IsRange := false,GradingName := "<15",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := "<30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
        priorityFactor.PriorityFactorDetails(relnew,BusinessType := priorityFactor.BusinessType(), IsBusinessType := isBusinessType,GradeTarget := 1,
                                                IsRange := false,GradingName := ">30",RangeMin := 0.0,RangeMax := 0.0,PriorityFactorName := priorityFactor.Name());
    }
  *]
}
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetCalcFormula (
  MacroPlan macroPlan,
  String formula
) as String
{
  TextBody:
  [*
    // NBoTk Oct-7-2023 (created)
    priorityFactor := null( PriorityFactor);
    traverse( macroPlan,PriorityFactor,p)
    {
         if( formula.StartsWith( p.Name()) )
         {
            priorityFactor := p;
         }
    }
    value := priorityFactor.Name() + "[" + [String]priorityFactor.Coefficient() +"*L]";
    return value;
  *]
}
_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetCalcStr (
  MacroPlan macroPlan,
  String formula,
  String lastCalcStr
) as String
{
  TextBody:
  [*
    // NBoTk Oct-7-2023 (created)
    calcStr := "";
    remindFormula := formula;
    // éåŽ†ä¼˜å…ˆçº§å› å­é…ç½®
    if( not remindFormula = '' )
    {
                  // ä»Žèµ·å§‹ä½ç½®å¼€å§‹åŒ¹é…
            if(remindFormula.StartsWith( "+" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "+" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "-" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "-" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "*" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "*" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "/" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "/" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( "(" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + "{" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else if( remindFormula.StartsWith( ")" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                calcStr := lastCalcStr + ")" + calcStr;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
            else
            {
                // ä¸æ˜¯ç¬¦å· ç›´æŽ¥èŽ·å–è®¡ç®—åŽçš„æ•°å€¼
                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
            }
    }
    return calcStr;
  *]
}
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
Quintiq file version 2.0
#parent: #root
StaticMethod RollBackCalcStr (
  MacroPlan owner,
  String businessType,
  String stringData
) as String
{
  TextBody:
  [*
    // NBoTk Sep-21-2023 (created)
    value := stringData;
    symbolList := construct( structured[String]);
    symbolList.Add( "+")
    symbolList.Add( "-")
    symbolList.Add( "x")
    symbolList.Add( "/")
    symbolList.Add( "(")
    symbolList.Add( ")")
    traverse( symbolList,Elements,e)
    {
        if( stringData.EndsWith( e ))
        {
             end := stringData.Length() - e.Length();
             value := stringData.SubString( 0,end);
        }
    }
    nameList := PriorityFactor::GetDataByBusinessType(  owner,"");
    traverse( nameList,Elements,e)
    {
        nameText := e.Name() + "[" + [String]e.Coefficient() + "*L]"
        if( stringData.EndsWith( nameText))
        {
             end := stringData.Length() - nameText.Length();
             value := stringData.SubString( 0,end);
        }
    }
    return value;
  *]
}
_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
@@ -10,7 +10,6 @@
  [*
    // NBoTk Sep-21-2023 (created)
    value := stringData;
    symbolList := construct( structured[String]);
    symbolList.Add( "+")
    symbolList.Add( "-")
@@ -28,7 +27,7 @@
        } 
    }
    
    nameList := PriorityFactor::GetDataByBusinessType(  owner,businessType);
    nameList := PriorityFactor::GetDataByBusinessType(  owner,"");
    traverse( nameList,Elements,e)
    {
        if( stringData.EndsWith( e.Name()))
@@ -37,7 +36,6 @@
             value := stringData.SubString( 0,end);
        } 
    }
    return value;
  *]
}
_Main/BL/Type_PriorityResult/Attribute_CustomerOrderID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomerOrderID
{
  #keys: '3[414382.0.554015006][414382.0.554015005][414382.0.554015007]'
  ValueType: String
}
_Main/BL/Type_PriorityResult/StaticMethod_CalculateBracketScore.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CalculateBracketScore (
  String calcStr,
  CustomerOrder customerOrder,
  String businessType,
  MacroPlan macroPlan,
  GlobalOTDTable globalOTDTable
) as Real
{
  Description: '计算公式中括号内的数据'
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    return PriorityResult::CalculateScore( calcStr,customerOrder,businessType,macroPlan,0.0,globalOTDTable);
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CalculateScore (
  String formula,
  CustomerOrder customerOrder,
  String businessType,
  MacroPlan macroPlan,
  Real lastScore,
  GlobalOTDTable globalOTDTable
) as Real
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    score := 0.0;
    remindFormula := formula;
    // éåŽ†ä¼˜å…ˆçº§å› å­é…ç½®
    if( not remindFormula = '' )
    {
            // ä»Žèµ·å§‹ä½ç½®å¼€å§‹åŒ¹é…
            if(remindFormula.StartsWith( "+" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                score := lastScore + score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "-" ))
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                score := lastScore - score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "*" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                score := lastScore * score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "/" ) )
            {
                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                score := lastScore / score;
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
            else if( remindFormula.StartsWith( "(" ) )
            {
                // æ‰¾åˆ°ç¬¬ä¸€ä¸ªç»“束的 )
                // è®¡ç®—括号中的内容
                rightBracket := remindFormula.FindString( ")",0);
                calcStr := remindFormula.SubString( 1,rightBracket);
                PriorityResult::CalculateBracketScore(calcStr,customerOrder,businessType,macroPlan,globalOTDTable);
                // æˆªå– ) åŽçš„字符继续进行计算
                remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length()-1);
            }
            else
            {
                // ä¸æ˜¯ç¬¦å· ç›´æŽ¥èŽ·å–è®¡ç®—åŽçš„æ•°å€¼
                score := PriorityResult::GetDetailsValue( customerOrder,remindFormula,macroPlan,globalOTDTable);
                // æˆªå–掉已经计算的优先级因子 é€’归计算
                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
                PriorityResult::CalculateScore( remindFormula,customerOrder,businessType,macroPlan,score,globalOTDTable);
            }
    }
    // æ²¡æœ‰åŒ¹é… å…¬å¼è®¡ç®—完成
    return score;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_GetDetailsValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDetailsValue (
  CustomerOrder customerOrder,
  String formula,
  MacroPlan macroPlan,
  GlobalOTDTable globalOTDTable
) as Real
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    // å½“前计算优先级因子细分 å¦‚果获取不到全部先默认为1
    value := 0.0;
    priorityFactor := null( PriorityFactor);
    traverse( macroPlan,PriorityFactor,p)
    {
         if( formula.StartsWith( p.Name()) )
         {
            priorityFactor := p;
         }
    }
    if(isnull( priorityFactor) )
    {
        value := 1.0;
    }
    else
    {
            if( "客户策略" =  priorityFactor.Name())
            {
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "客户策略" and p.GradingName() = customerOrder.CustomerPolicy());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
                      gradeTarget := obj.GradeTarget();
                 }
                 value := priorityFactor.Coefficient() * gradeTarget;
            }
            if( "大张盈利水平" =  priorityFactor.Name())
            {
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "大张盈利水平" and  p.GradingName() = customerOrder.SheetProfitability());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
                      gradeTarget := obj.GradeTarget();
                 }
                 value := priorityFactor.Coefficient() * gradeTarget;
            }
            if( "DOI" =  priorityFactor.Name())
            {
                 // DOI数据
                 obj := selectobject( globalOTDTable,Global_MappingDOI_DSI,doi,doi.ProductID() = customerOrder.ProductID())
                 doi := 1.0;
                 if( not isnull( obj ) )
                 {
                      doi := [Real]obj.DOI();
                 }
                 value := priorityFactor.Coefficient() * doi;
            }
            if( "DSI" =  priorityFactor.Name())
            {
                 // DOI数据
                 obj := selectobject( globalOTDTable,Global_MappingDOI_DSI,doi,doi.ProductID() = customerOrder.ProductID())
                 dsi := 1.0;
                 if( not isnull( obj ) )
                 {
                      dsi := [Real]obj.DSI();
                 }
                 value := priorityFactor.Coefficient() * dsi;
            }
            if( "细分市场等级" =  priorityFactor.Name())
            {
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "细分市场等级" and p.GradingName() = customerOrder.SegmentPriority());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
                      gradeTarget := obj.GradeTarget();
                 }
                 value := priorityFactor.Coefficient() * gradeTarget;
            }
            if( "需求类型" =  priorityFactor.Name())
            {
                // æœ‰é¢„测 æ— é¢„测 çº¯é¢„测
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p,p.GradingName() = customerOrder.OrderType());
                 gradeTarget := 1.0;
                 if( not isnull( obj ) )
                 {
                      gradeTarget := obj.GradeTarget();
                 }
                 value := priorityFactor.Coefficient() * gradeTarget;
            }
            if( "客户等级" =  priorityFactor.Name())
            {
                 // é€šè¿‡æ•°æ®æ¹–计算客户等级
                 obj := selectobject( globalOTDTable,Global_MappingCustomerGrade,doi,doi.BusinessType() = customerOrder.BusinessType() and doi.Customer() = customerOrder.CustomerName())
                 customerGrade := 1.0;
                 if( not isnull( obj ) )
                 {
                      customerGrade := [Real]obj.CustomerGrade();
                 }
                 value := priorityFactor.Coefficient() * customerGrade;
            }
            if( "订单下单时间" =  priorityFactor.Name())
            {
                 // ä¸‹å•æ—¶é—´
                 orderTime := customerOrder.OrderTime();
                 days := orderTime.TotalInDays() - customerOrder.EndDate().TotalInDays();
                 obj := selectobject( priorityFactor,PriorityFactorDetails,p , p.PriorityFactorName() = "订单下单时间" and days >= [Number]p.GradingName());
                 value := priorityFactor.Coefficient() * obj.GradeTarget();
            }
    }
    return value;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetRemindFormula (
  String formula,
  MacroPlan macroPlan
) as String
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    str := "";
    traverse( macroPlan,PriorityFactor,p)
    {
         if( formula.StartsWith( p.Name()) )
         {
              // åˆ¤æ–­å‰©ä½™å­—符长度
              if( p.Name().Length() = formula.Length() )
              {
                 str := ""
              }
              else
              {
                str := formula.SubString( p.Name().Length(),formula.Length() - p.Name().Length());
              }
         }
    }
    return str;
  *]
}
_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CalculatePriorityResult (
  String priorityPolicyName,
  MacroPlan macroPlan,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // NBoTk Sep-26-2023 (created)
    // è®¡ç®—客户订单的优先级得分 å›žå¡«æƒé‡æ•°æ® ç”Ÿæˆæ–°çš„Priority明细数据
    traverse( macroPlan,SalesDemand.astype( CustomerOrder ),e)
    {
         // äº‹ä¸šéƒ¨ä¿¡æ¯
         businessType := e.BusinessType();
         // èŽ·å–å¯¹åº”äº‹ä¸šéƒ¨è®¡ç®—å…¬å¼
         priorityPolicys := selectobject( macroPlan,PriorityPolicy,p,p.BusinessType() = businessType and p.Name() = priorityPolicyName);
         formula := priorityPolicys.Formula();
         // é€’归处理计算公式 èŽ·å–å½“å‰è®¢å•çš„å¾—åˆ†
         value := PriorityResult::CalculateScore( formula,e,businessType,macroPlan,0.0,globalOTDTable);
         // ç”Ÿæˆä¼˜å…ˆçº§å› å­è·‘分结果
         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)
         {
              priorityResult.PriorityResultGroupDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                        DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                        Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                        UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value
                                                        );
         }
         else
         {
               priorityResult.PriorityResultBusinessTypeDetail( relnew,BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                                DemandDate := e.EndDate(),PriorityPolicyName := priorityPolicyName,PriorityResultScore := value,
                                                                Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),StockingPointID := e.StockingPointID(),
                                                                UnitOfMeasureName := e.UnitOfMeasureName(),PriorityTotalScore := value
                                                                );
         }
    }
    // ä¼˜å…ˆçº§å› å­å¤„理完成后 æŽ’序回填数据
    resultList := selectsortedset( macroPlan,PriorityResult,result,
                                   true,
                                   result.PriorityResultScore()
                                   )
    // Quintiq优先级分10级 éœ€è¦åˆ†æ®µè®¡ç®—
    subLevel := resultList.Size() div 10;
    subLevelCount := 0;
    priorityValue := 1;
    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);
              }
        }
        // åˆ¤æ–­è®¡ç®—分段数量与Quintiq原始优先级
        subLevelCount := subLevelCount + 1;
        if( subLevelCount = subLevel )
        {
            // å½“到达分段数量后 ä¼˜å…ˆçº§+1 åˆ†æ®µè®¡æ•°ä»Ž0开始
            if( priorityValue < 10 )
            {
                  priorityValue := priorityValue + 1;
            }
            subLevelCount := 0;
        }
    }
  *]
}
_Main/BL/Type_ProductInStockingPointInPeriodPlanningLeaf/FunctionOverride_CalcStockLevelInDays.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
Quintiq file version 2.0
#parent: #root
FunctionOverride CalcStockLevelInDays #extension
{
  TextBody:
  [*
    totalDays := 0.0;
    if( not this.Period_MP().MacroPlan().IsMetaOptimizerRunning() )
    {
      balanceInv := this.InventoryLevelEnd();
      if( balanceInv > 0 )
      {
        // Calculate stock level in days
        futureperiods := selectsortedset( this, ProductInStockingPoint_MP.ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), p,
                                          p.Start() >= this.End(), p.Start() );
        product := this.ProductInStockingPoint_MP().Product_MP();
        shelflife := this.ShelfLife();
        hasshelflife := product.HasShelfLife() and not isnull( shelflife );
        agevector := RealVector::Construct();
        quantityvector := RealVector::Construct();
        // Modified logic to consider shelf-life for stock level in days
        if( hasshelflife )
        {
          // Get the age and quantity vector of remaining product stock at the end of period
          agevector := RealVector::Construct( shelflife.ShelfLifeEndAgeVectorAsBinaryValue() );
          quantityvector := RealVector::Construct( shelflife.ShelfLifeEndQuantityVectorAsBinaryValue() );
        }
        /*
          Track if consecutive future periods has 0 demand (although we have balance supply, but if remaining future periods has 0 demand not consider as coverable).
          Accumulate the coverable days and only add to total days if manage to find a subsequent period with demand.
        */
        traverse( futureperiods, Elements, pispip,
                  // Terminate calculation once remaining supply is 0
                  balanceInv > 0 )
        {
          if( balanceInv > 0 )
          {
            demandQty := pispip.DependentDemandAndSalesDemandQuantity();
            // Include expired quantity as demand to determine stock level in days
            if( hasshelflife )
            {
              isexpiredinperiodvector := BooleanVector::Construct();
              traverse( agevector.AsValues(), Elements, age )
              {
                isexpiredinperiod := not product.GetIsUsableInTargetPeriod( [Real] age, pispip.Start(), pispip.Period_MP() );
                isexpiredinperiodvector.Append( isexpiredinperiod );
                agevector.Add( pispip.Period_MP().GetDurationInDaysForShelfLife(), false );
              }
              // Sum of all elements in the quantity vector that corresponds to element = true in the boolean vector
              expiredinventoryqty := quantityvector.GetSelection( isexpiredinperiodvector ).Sum();
              demandQty := demandQty + expiredinventoryqty; // Reduce inventory as expired
            }
            if( balanceInv > demandQty ) // Remaining supply can cover demand in period
            {
              totalDays := totalDays + pispip.Period_MP().DurationInDays();
              balanceInv := balanceInv - demandQty;
            }
            else // Remaining supply partially cover the demand in period
            {
              // Main calc logic
              totalDays := totalDays + ( balanceInv / demandQty * pispip.Period_MP().DurationInDays() );
              balanceInv := 0.0;
            }
          }
        }
      }
    }
    this.StockLevelInDays( totalDays );
  *]
}
_Main/BL/Type_ProductInStockingPointInPeriodPlanningLeaf/_ROOT_Type_ProductInStockingPointInPeriodPlanningLeaf.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization ProductInStockingPointInPeriodPlanningLeaf #extension
{
}
_Main/BL/Type_Routing/Method_DoSanityCheckData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
Method DoSanityCheckData (
  output Strings feedback_o,
  output Strings sanitycheckfeedback_o
) declarative remote #extension
{
  TextBody:
  [*
    // Adhi Feb-10-2016 (created)
    isvalid := true;
    isvalid := this.GetHasValidInput( feedback_o, sanitycheckfeedback_o ) and isvalid;
    isvalid := this.GetHasTianmaNonSupplierOperationWithNoInput( feedback_o, sanitycheckfeedback_o ) and isvalid;
    return isvalid;
  *]
}
_Main/BL/Type_Routing/Method_GetHasTianmaNonSupplierOperationWithNoInput.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
Method GetHasTianmaNonSupplierOperationWithNoInput (
  output Strings feedback_o,
  output Strings sanitycheckfeedback_o
) declarative remote as Boolean
{
  TextBody:
  [*
    // Tianma change 20230925: If the unit is not a supplier, raise a data issue if there's no input
    value := forall( this, RoutingStep.Operation, operation,
                     guard( operation.Unit().IsSupplier(), false )
                     or operation.OperationInput( relsize ) > 0 );
    if( not value )
    {
      // Add instance text
      routingname := MacroPlan::GetSubstituteName( this.Name() );
      instance := Translations::MP_Routing_Instance( routingname );
      feedback := SanityCheckMessage::GetFormattedMessage( instance,
                                                           "非供应商操作没有投入料。" );
      feedback_o.Add( feedback );
      sanitycheckfeedback_o.Add( SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning() );
    }
    return value;
  *]
}
_Main/BL/Type_Scenario/Attribute_ScenarioName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ScenarioName
{
  #keys: '3[412960.0.288500040][412960.0.288500039][412960.0.288500041]'
  Description: '场景名称,对应事业部&组织编码维护中维护的场景名称'
  ValueType: String
}
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompareExport.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ScenarioManager/Method_ImportExcels_Tianma.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
#parent: #root
Method ImportExcels_Tianma (
  Strings userinputvalues,
  BinaryValues mpBinaryValues_i,
  Strings mpBrokers_i
)
{
  Description: 'Import from Excel, used by web app.'
  TextBody:
  [*
    // @userinputvalues - Array of data group that user imports
    // @mpBinaryValues_i - Array of uploaded Excels in binary value. Binary at position x matches @mpBrokers_i at same position
    // @mpBrokers_i - Array of uploaded Excels' broker name
    is3DDrive := false;
    // Check if each data group has files uploaded by user for import
    this.Import( LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Strategies() ),
                 LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Accounts() ),
                 LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_Bookmarks() ),
                 LibSOPImpExp_ExportExcel::IsDataSourceIncluded_Tianma( userinputvalues, Translations::MPSync_ObjectGroup_KPISetting() ),
                 mpBinaryValues_i.Copy(),
                 mpBrokers_i,
                 is3DDrive,
                 construct( FileItems ), /* 3ddrive, ignore */
                 construct( Strings ) /* 3ddrive, ignore */ );
  *]
}
_Main/BL/Type_ScenarioManager/StaticMethod_AvailableBusinessTypes.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ScenarioManager/StaticMethod_AvailableScenarioNames.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
StaticMethod AvailableScenarioNames (
  GlobalOTDTable globalOTDTable
) as String
{
  TextBody:
  [*
    // yypsybs Aug-23-2023 (created)
    //strings := "集团面板;专业显示事业部;外卖CELL;非显;运动健康;运动健康事业部;手机事业部;特种显示;汽车电子事业部;车载显示事业部;IT事业部;";
    //table := KB_BusinessTypesTable;
    //
    //if( strings.EndsWith( ";" ) ) {
    //    strings := strings.SubString( 0, strings.Length() - 1 );
    //}
    // ä½¿ç”¨businessType获取数据
    strings := BusinessType::GetScenarioNamesStr( globalOTDTable);
    return strings;
  *]
}
_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TestBoolean
{
  #keys: '3[414384.0.915854691][414384.0.915854690][414384.0.915854692]'
  ValueType: Boolean
}
_Main/BL/Type_YuxTest/Attribute_TestDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TestDate
{
  #keys: '3[414384.0.915854704][414384.0.915854703][414384.0.915854705]'
  ValueType: Date
}
_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TestDateTime
{
  #keys: '3[414384.0.915854714][414384.0.915854713][414384.0.915854715]'
  ValueType: DateTime
}
_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TestNumber
{
  #keys: '3[414384.0.915854681][414384.0.915854680][414384.0.915854682]'
  ValueType: Number
}
_Main/BL/Type_YuxTest/Attribute_TestReal.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TestReal
{
  #keys: '3[414384.0.915854668][414384.0.915854667][414384.0.915854669]'
  ValueType: Real
}
_Main/BL/Type_YuxTest/Attribute_TestString.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute TestString
{
  #keys: '3[414384.0.915854658][414384.0.915854657][414384.0.915854659]'
  ValueType: String
}
_Main/BL/Type_YuxTest/StaticMethod_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  YuxTests toExportList
) as String
{
  TextBody:
  [*
    // generate by generate_export_method.py
    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
    <table>
      <name>YuxTest</name>
    ';
    convDateToString := DateToString::StandardConverter();
    convDateToString.SetCustomConversion();
    convDateToString.CustomFormatString( 'yyyy-MM-dd' );
    convDateTimeToString := DateTimeToString::StandardConverter();
    convDateTimeToString.SetCustomConversion();
    convDateTimeToString.CustomFormatString( 'yyyy-MM-dd HH:mm:ss' );
    info( "export start" );
    //---------------------------------------------------------------------------------------------
    columnStr := "<column><name>测试数字</name><type>String</type>";
    traverse( toExportList, Elements, toExportItem ) {
      testNumber := toExportItem.TestNumber();
      cellStr := '<cell value="' + [String]testNumber + '"/>';
      columnStr := columnStr + cellStr;
    }
    columnStr := columnStr + "</column>";
    xmlTemplate := xmlTemplate + columnStr;
    //---------------------------------------------------------------------------------------------
    columnStr := "<column><name>测试小数</name><type>String</type>";
    traverse( toExportList, Elements, toExportItem ) {
      testReal := toExportItem.TestReal();
      cellStr := '<cell value="' + [String]testReal + '"/>';
      columnStr := columnStr + cellStr;
    }
    columnStr := columnStr + "</column>";
    xmlTemplate := xmlTemplate + columnStr;
    //---------------------------------------------------------------------------------------------
    columnStr := "<column><name>测试字符串</name><type>String</type>";
    traverse( toExportList, Elements, toExportItem ) {
      testString := toExportItem.TestString();
      cellStr := '<cell value="' + testString + '"/>';
      columnStr := columnStr + cellStr;
    }
    columnStr := columnStr + "</column>";
    xmlTemplate := xmlTemplate + columnStr;
    //---------------------------------------------------------------------------------------------
    columnStr := "<column><name>测试布尔</name><type>String</type>";
    traverse( toExportList, Elements, toExportItem ) {
      testBoolean := toExportItem.TestBoolean();
      cellStr := '<cell value="' + [String]testBoolean + '"/>';
      columnStr := columnStr + cellStr;
    }
    columnStr := columnStr + "</column>";
    xmlTemplate := xmlTemplate + columnStr;
    //---------------------------------------------------------------------------------------------
    columnStr := "<column><name>测试日期</name><type>String</type>";
    traverse( toExportList, Elements, toExportItem ) {
      testDate := toExportItem.TestDate();
      cellStr := '<cell value="' + ifexpr( testDate = Date::MinDate(), "", convDateToString.Convert( testDate )) + '"/>';
      columnStr := columnStr + cellStr;
    }
    columnStr := columnStr + "</column>";
    xmlTemplate := xmlTemplate + columnStr;
    //---------------------------------------------------------------------------------------------
    columnStr := "<column><name>测试日期时间</name><type>String</type>";
    traverse( toExportList, Elements, toExportItem ) {
      testDateTime := toExportItem.TestDateTime();
      cellStr := '<cell value="' + ifexpr( testDateTime = DateTime::MinDateTime(), "", convDateTimeToString.Convert( testDateTime )) + '"/>';
      columnStr := columnStr + cellStr;
    }
    columnStr := columnStr + "</column>";
    xmlTemplate := xmlTemplate + columnStr;
    //---------------------------------------------------------------------------------------------
    xmlTemplate := xmlTemplate + "</table>";
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
    XLS::SaveTable( tableHandle, OS::TempPath() + "YuxTest.xlsx" );
    file := OSFile::Construct();
    file.Open( OS::TempPath() + "YuxTest.xlsx", "Read", true );
    data := file.ReadBinary()
    info( "export end" );
    return data.AsBase64EncodedString();
  *]
}
_Main/BL/Type_YuxTest/StaticMethod_ExportTest#887.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: #root
StaticMethod ExportTest (
  MPSync parent
) as String
{
  TextBody:
  [*
    // yypsybs Sep-25-2023 (created)
    list := selectset( parent, YuxTest, item, true );
    if( list.Size() = 0 ) {
      for( i := 0; i < 100; i := i + 1 ) {
        parent.YuxTest( relnew,
                        TestBoolean := ifexpr( Number::Random( 0, 1 ) = 1, true, false ),
                        TestDate :=   ifexpr( Number::Random( 0, 1 ) = 1, Date::MinDate(), Date::ActualDate() ),
                        TestDateTime :=   ifexpr( Number::Random( 0, 1 ) = 1,DateTime::MinDateTime(), DateTime::ActualTime() ),
                        TestNumber :=  Number::Random( 100, 200 ),
                        TestReal := Real::Random( 10.0, 20.0 ),
                        TestString := [String]Number::Random( 1000, 2000 )
                        );
      }
    }
    list := selectset( parent, YuxTest, item, true );
    return YuxTest::Export( list );
  *]
}
_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type YuxTest
{
  #keys: '5[414384.0.915854638][414384.0.915854636][0.0.0][414384.0.915854637][414384.0.915854639]'
  BaseType: Object
  StructuredName: 'YuxTests'
}
_Main/Sys/ImgAttr/Global_BrokerExecuteLog.dme
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
#parent: #root
TypeDataInterface Global_BrokerExecuteLog
{
  TypeKey: '[414702.0.265587041]'
  ImageDataMember ImageExecutionStatus
  {
    #keys: '1[414702.0.496052017]'
    ImageSpecifications:
    [
      ImageDataMemberImageSpecification
      {
        Image: 'MEDIA_PLAY_GREEN'
        Quill: 'object.ExecutionStatus() = "InOperation"'
        Value: 'InOperation'
      }
      ImageDataMemberImageSpecification
      {
        Image: 'CHECK'
        Quill: 'object.ExecutionStatus() = "Complete"'
        Value: 'ImageExecutionStatus2'
      }
    ]
  }
}
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -13,6 +13,10 @@
          [
            Component MenuSpecial #extension
            {
              Children:
              [
                Component MenuGlobalOTDTableTest { #keys: '[157968.0.1170224128]' BaseType: 'Menu' Properties: [ Image: 'DUDE2' Text: 'GlobalOTDTable Test' ] }
              ]
              Properties:
              [
                ModeledStringList ChildOrdering
@@ -30,6 +34,7 @@
                  c: MenuTest
                  c: MenuScenarioManagerTest
                  c: MenuMPDomainHandlerTest
                  c: MenuGlobalOTDTableTest
                  c: MenuRemoveHistory
                  c: Menu46
                  c: MenuRefresh
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_TIANMA_JITUAN_mbMainMenu_MenuGlobalOTDTableTest_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: mbMainMenu/MenuGlobalOTDTableTest
Response OnClick () id:Response_TIANMA_JITUAN_mbMainMenu_MenuGlobalOTDTableTest_OnClick
{
  #keys: '[157968.0.1170224134]'
  Body:
  [*
    // Run GlobalOTDTable test method
    GlobalOTDTable.Test();
  *]
  DefinitionID: 'Responsedef_Menu_OnClick'
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupSalesViews#633.def
@@ -18,5 +18,16 @@
        Taborder: 3
      ]
    }
    Component ButtonPriority
    {
      #keys: '[414382.0.587601840]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'QUEUE'
        Label: '优先级因子'
        Taborder: 4
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuSalesFillingCapacity.def
@@ -14,7 +14,7 @@
        Image: 'ELEMENT_BLUE'
        Taborder: 0
        Title: '外卖CELL'
        Tooltip: 'Filling Capacity Scheme List'
        Tooltip: '外卖CELL'
      ]
    }
    Component MenuSalesFillingSchemeDetail
@@ -26,6 +26,7 @@
        Image: 'ELEMENT_ORANGE'
        Taborder: 1
        Title: '填产方案列表'
        Tooltip: '填产方案列表'
      ]
    }
    Component MenuSalesFillingSchemeHistorical
@@ -37,6 +38,7 @@
        Image: 'ELEMENT_ORANGE'
        Taborder: 2
        Title: '填产历史订单列表'
        Tooltip: '填产历史订单列表'
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgInterfaceTest.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
Component abgInterfaceTest
{
  #keys: '[414702.0.457001887]'
  BaseType: 'WebActionBarGroup'
  Children:
  [
    Component btnInterfaceTest
    {
      #keys: '[414702.0.459575623]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'BEAR'
        Label: '接口测试'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    Taborder: 5
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationDevelopmentActionBarPageDef#1.def
@@ -4,5 +4,6 @@
  Children:
  [
    #child: abgTest
    #child: abgInterfaceTest
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonPriority_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ActionBarGroupSalesViews/ButtonPriority
Response OnClick () id:Response_TIANMA_JITUAN_ActionBarGroupSalesViews_ButtonPriority_OnClick
{
  #keys: '[414382.0.587601951]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "PriorityTest",true);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingCapac.def
@@ -10,9 +10,8 @@
    Body:
    [*
      // Open view
      //ApplicationMacroPlanner.OpenView( 'Filling Capacity Scheme List',ButtonSalesFillingCapacity);
      ApplicationMacroPlanner.OpenView( 'FillingCapacityOrder', ButtonSalesFillingCapacity );
      //ApplicationMacroPlanner.OpenView( 'FillingCapacityOrder', ButtonSalesFillingCapacity );
      ApplicationScope.ViewManager().ResetUserViewById( "FillingCapacityOrder",true);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingS#360.def
@@ -10,8 +10,7 @@
    Body:
    [*
      // Open view
      //ApplicationMacroPlanner.OpenView( "FillingCapacitySchemeList",ButtonSalesFillingCapacity);
      ApplicationMacroPlanner.OpenView( "FillingCapacityOrderHistorical");
      ApplicationScope.ViewManager().ResetUserViewById( "FillingCapacityOrderHistorical",true);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ContextMenuSalesFillingCapacity_MenuSalesFillingSchem.def
@@ -10,8 +10,7 @@
    Body:
    [*
      // Open view
      //ApplicationMacroPlanner.OpenView( "FillingCapacitySchemeList",ButtonSalesFillingCapacity);
      ApplicationMacroPlanner.OpenView( "FillingCapacitySchemeList");
      ApplicationScope.ViewManager().ResetUserViewById( "FillingCapacitySchemeList",true);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgInterfaceTest_btnInterfaceTest_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: abgInterfaceTest/btnInterfaceTest
Response OnClick () id:Response_TIANMA_JITUAN_abgInterfaceTest_btnInterfaceTest_OnClick
{
  #keys: '[414702.0.459575742]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "接口测试", true );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def
@@ -12,10 +12,35 @@
      Properties:
      [
        DataBinding: 'DataHolderBusinessType.Data.BusinessTypeName'
        Label: 'Business Type Name'
        Description: '事业部名称输入'
        Label: '事业部名称'
        Taborder: 0
      ]
    }
    Component editScenarioName
    {
      #keys: '[412960.0.275480603]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderBusinessType.Data.ScenarioName'
        Description: '场景名称编辑'
        Label: '场景名称'
        Taborder: 1
      ]
    }
    Component editDisplayType
    {
      #keys: '[412960.0.278321833]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderBusinessType.Data.DisplayType'
        Description: '显示类型编辑'
        Label: '显示类型'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def
@@ -11,14 +11,7 @@
    
    // OnOk
    this.ApplyChanges();
    DataHolderBusinessType.Data().Commit();
    //if( not isnull( DataHolderForm.Data() ) )
    //{
    //  // Access the form, select the new assumption
    //  DataHolderForm.Data().ListAssumptions().SelectByKey( DataHolderDialogData.Data().WrappedInstance().Key() );
    //}
    
    this.Close();
  *]
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[414382.0.563131222]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnOk
    {
      #keys: '[414382.0.563131226]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 0
      ]
    }
    Component btnCancel
    {
      #keys: '[414382.0.563131228]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Cancel'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Border: true
    ExcludeFromActiveComponent: true
    FixedSize: true
    Orientation: 'horizontal'
    Padding: 'true'
    Style: 'footer'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[414382.0.563131220]'
  BaseType: 'WebPanel'
  Children:
  [
    Component PriorityPolicyStringList
    {
      #keys: '[414382.0.563131262]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Taborder: 0
      ]
    }
    Component DataHolderChoosePriorityPolicy
    {
      #keys: '[414382.0.563131279]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityPolicy]*'
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Method_CalculatePriorityResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Method CalculatePriorityResult (
  String name
) id:Method_DialogChoosePriorityPolicy_CalculatePriorityResult
{
  #keys: '[414382.0.577602130]'
  Body:
  [*
    PriorityResult::CalculatePriorityResult(name,MacroPlan,GlobalOTDTable);
    this.Close();
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Method_OpenChoose.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
Method OpenChoose () id:Method_DialogChoosePriorityPolicy_OpenChoose
{
  #keys: '[414382.0.563950563]'
  Body:
  [*
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[414382.0.563131232]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[414382.0.563131231]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      name := PriorityPolicyStringList.Text();
      dlg := construct( DialogChoosePriorityPolicy );
      dlg.CalculatePriorityResult(name);
      dlg.Close();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlContent_DataHolderChoosePriorityPolicy_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pnlContent/DataHolderChoosePriorityPolicy
Response OnCreated () id:Response_pnlContent_DataHolderChoosePriorityPolicy_OnCreated
{
  #keys: '[414382.0.563131469]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      dataList := selectuniquevalues(  MacroPlan,PriorityPolicy,p,p.Name());
      strings := dataList.Concatenate( ";");
      PriorityPolicyStringList.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/Response_pnlContent_DataHolderChoosePriorityPolicy_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pnlContent/DataHolderChoosePriorityPolicy
Response OnDataChanged () id:Response_pnlContent_DataHolderChoosePriorityPolicy_OnDataChanged
{
  #keys: '[414382.0.563131545]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      dataList := selectuniquevalues(  MacroPlan,PriorityPolicy,p,p.Name());
      strings := dataList.Concatenate( ";");
      PriorityPolicyStringList.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogChoosePriorityPolicy/_ROOT_Component_DialogChoosePriorityPolicy.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogChoosePriorityPolicy
{
  #keys: '[414382.0.563131218]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
  ]
  Properties:
  [
    Alignment: 'trailing'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Padding: 'false'
    Title: '选择优先级策略'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditIssueWorkOrder/Response_pnlActions_btnOk_OnClick.def
@@ -4,6 +4,16 @@
{
  #keys: '[414702.0.223820978]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    flag := guard( [Real]efPlannedQuantity.Text() > 0.0, false ) or DataHolderDialogDatas.Data().Size() > 1;
    if ( not flag ) {
      feedback := "请输入一个大于0的数字";
    }
    return flag;
  *]
  QuillAction
  {
    Body:
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral#549.def
@@ -46,8 +46,8 @@
      Properties:
      [
        AllowEmpty: true
        DataBinding: 'DataHolderDialogData.Data.BusinessType'
        Label: 'BusinessType'
        DataBinding: 'DataHolderDialogData.Data.ScenarioName'
        Label: 'Scenario Name'
        Taborder: 4
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -32,6 +32,13 @@
      data.Name( versionname );
      }
    
    // Get Business Type from Scenario Name
    businesstype := select( globalotdtable,
                            BusinessType,
                            b,
                            b.ScenarioName()=data.ScenarioName() ).BusinessTypeName();
    data.BusinessType( businesstype );
    // Copy scenario
    if( isnull( data.WrappedInstance() ) )
    {
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[414382.0.579140304]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnApply
    {
      #keys: '[414382.0.579140306]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Apply'
        Taborder: 0
      ]
    }
    Component btnOk
    {
      #keys: '[414382.0.579140308]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 1
      ]
    }
    Component btnCancel
    {
      #keys: '[414382.0.579140310]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Cancel'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Border: true
    ExcludeFromActiveComponent: true
    FixedSize: true
    Orientation: 'horizontal'
    Padding: 'true'
    Style: 'footer'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[414382.0.579140302]'
  BaseType: 'WebPanel'
  Children:
  [
    Component EditBusinessType
    {
      #keys: '[414382.0.581576821]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderSelectCustomerOrder.Data.BusinessType'
        Label: '事业部'
        Taborder: 0
      ]
    }
    Component EditCustomerPolicy
    {
      #keys: '[414382.0.581576840]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderSelectCustomerOrder.Data.CustomerPolicy'
        Label: '客户策略'
        Taborder: 1
      ]
    }
    Component EditOrderType
    {
      #keys: '[414382.0.581576842]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderSelectCustomerOrder.Data.OrderType'
        Label: '订单类型'
        Taborder: 2
      ]
    }
    Component EditProductGrade
    {
      #keys: '[414382.0.581576844]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderSelectCustomerOrder.Data.ProductGrade'
        Label: '产品等级'
        Taborder: 4
      ]
    }
    Component EditSegmentPriority
    {
      #keys: '[414382.0.581576846]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderSelectCustomerOrder.Data.SegmentPriority'
        Label: '细分市场优先级'
        Taborder: 5
      ]
    }
    Component EditOrderTime
    {
      #keys: '[414382.0.581576988]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        DataBinding: 'DataHolderSelectCustomerOrder.Data.OrderTime'
        Label: '订单下单时间'
        Taborder: 3
      ]
    }
    Component EditSheetProfitability
    {
      #keys: '[414382.0.581577181]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderSelectCustomerOrder.Data.SheetProfitability'
        Label: '大张盈利水平'
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Method_ClickBynOk.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
Method ClickBynOk () id:Method_DialogEditCustomerOrderPriority_ClickBynOk
{
  #keys: '[414382.0.581577357]'
  Body:
  [*
    // Disabled button to prevent the possibility of multiple firing
    btnOk.Enabled(false,'');
    // OnOk
    this.ApplyChanges();
    DataHolderSelectCustomerOrder.Data().Commit();
    this.Close();
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Method_EditCustomerOrderPriority.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
Method EditCustomerOrderPriority (
  CustomerOrder selection
) id:Method_DialogEditCustomerOrderPriority_EditCustomerOrderPriority
{
  #keys: '[414382.0.581575991]'
  Body:
  [*
    // Edits assumption
    data := shadow( selection );
    DataHolderSelectCustomerOrder.Data( &data );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Response_pnlActions_btnApply_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: pnlActions/btnApply
Response OnClick () id:Response_pnlActions_btnApply_OnClick
{
  #keys: '[414382.0.579140312]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  Precondition:
  [*
    return Form.HasChanges();
  *]
  QuillAction
  {
    Body:
    [*
      Form.ApplyChanges();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[414382.0.579140314]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[414382.0.579140313]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      Form.ClickBynOk();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditCustomerOrderPriority/_ROOT_Component_DialogEditCustomerOrderPriority.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogEditCustomerOrderPriority
{
  #keys: '[414382.0.579140300]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
    Component DataHolderSelectCustomerOrder
    {
      #keys: '[414382.0.581575244]'
      BaseType: 'WebDataHolder'
      Databinding: 'shadow[CustomerOrder]*'
      Properties:
      [
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Padding: 'false'
    Title: '修改订单优先级因子信息'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
Method New (
  MacroPlan owner,
  String businessType
) id:Method_DialogEditPriorityFactor_New
{
  #keys: '[414382.0.593002251]'
  Body:
  [*
    data := owner.PriorityFactor(relshadow);
    data.BusinessType(businessType);
    DataHolderEditPriorityFactor.Data(&data);
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Response_pnlActions_btnOk_OnClick.def
@@ -7,10 +7,17 @@
  Precondition:
  [*
    feedback := Translations::FilllingCapacity_ValidateInput();
    checkValue := not Coefficient.Text() = ''
    
    return checkValue;
    if(not checkValue )
    {
      feedback := Translations::PriorityFactor_CheckNameValid();
      editData := DataHolderEditPriorityFactor.Data();
      checkValue := not PriorityFactor::CheckNameValid( MacroPlan,editData.BusinessType(),[Real]Coefficient.Text(),PriorityFactorName.Text(),Desc.Text());
    }
    return checkValue
  *]
  QuillAction
  {
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Component_pnlContent.def
@@ -36,6 +36,7 @@
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMax'
        Label: '最大值'
        Taborder: 4
        Visible: false
      ]
    }
    Component RangeMin
@@ -46,7 +47,8 @@
      [
        DataBinding: 'DataHolderEditPriorityFactorDetails.Data.RangeMin'
        Label: '最小值'
        Taborder: 5
        ReadOnly: true
        Taborder: 6
      ]
    }
    Component GradeDesc
@@ -59,7 +61,7 @@
        FixedSize: false
        Label: '描述'
        SizeRatio: 3
        Taborder: 6
        Taborder: 8
      ]
    }
    Component PriorityFactorName
@@ -84,6 +86,27 @@
        Taborder: 1
      ]
    }
    Component RangeMaxTest
    {
      #keys: '[414382.0.523235618]'
      BaseType: 'WebLabel'
      Properties:
      [
        Label: '最大值'
        Taborder: 5
        Visible: false
      ]
    }
    Component RangeMinText
    {
      #keys: '[414382.0.523361009]'
      BaseType: 'WebLabel'
      Properties:
      [
        Label: '最小值'
        Taborder: 7
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlActions_btnOk_OnClick.def
@@ -12,7 +12,7 @@
    
    if( isRange.Checked() )
    {
       checkValue := not RangeMax.Text() = '' and not RangeMin.Text() = '';
       checkValue := not RangeMax.Text() = '' and not RangeMin.Text() = '' and RangeMax.Text() > RangeMin.Text();
    }
    
    return checkValue;
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnChanged.def
@@ -11,12 +11,18 @@
    [*
      if( this.Checked())
      {
          RangeMax.ReadOnly(false);
          RangeMin.ReadOnly(false)
          RangeMax.Visible(true);
          RangeMin.Visible(true);
          RangeMaxTest.Visible(false);
          RangeMinText.Visible(false);
      }
      else{
          RangeMax.ReadOnly(true);
          RangeMin.ReadOnly(true)
          RangeMax.Visible(false);
          RangeMin.Visible(false);
          RangeMaxTest.Visible(true)
          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMax());
          RangeMinText.Visible(true)
          RangeMinText.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMin());
      }
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactorDetails/Response_pnlContent_isRange_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: pnlContent/isRange
Response OnCreated () id:Response_pnlContent_isRange_OnCreated
{
  #keys: '[414382.0.523105450]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      if( this.Checked())
      {
          RangeMax.Visible(true);
          RangeMin.Visible(true);
          RangeMaxTest.Visible(false);
          RangeMinText.Visible(false);
      }
      else{
          RangeMax.Visible(false);
          RangeMin.Visible(false);
          RangeMaxTest.Visible(true)
          RangeMaxTest.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMax());
          RangeMinText.Visible(true)
          RangeMinText.Text([String]DataHolderEditPriorityFactorDetails.Data().RangeMin());
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
@@ -13,9 +13,10 @@
      [
        AllowEmpty: true
        DataBinding: 'DataHolderFillingCapacityOrder.Data.ProductID'
        Label: 'ProductID'
        Strings: 'productID'
        Enabled: false
        Label: '商品编码'
        Taborder: 0
        Visible: false
      ]
    }
    Component dropDownStringListSalesSegmentName id:dropDownStringListSalesSegmentName_325
@@ -26,9 +27,10 @@
      [
        AllowEmpty: true
        DataBinding: 'DataHolderFillingCapacityOrder.Data.SalesSegmentName'
        Label: 'SalesSegmentName'
        Strings: 'SalesSagmentName'
        Enabled: false
        Label: '销售部门'
        Taborder: 1
        Visible: false
      ]
    }
    Component dropDownStringListStockPointID id:dropDownStringListStockPointID_801
@@ -39,9 +41,10 @@
      [
        AllowEmpty: true
        DataBinding: 'DataHolderFillingCapacityOrder.Data.StockingPointID'
        Label: 'StockPointID'
        Strings: 'StockPointID'
        Enabled: false
        Label: '库存点'
        Taborder: 2
        Visible: false
      ]
    }
    Component dropDownStringListCustomer id:dropDownStringListCustomer_957
@@ -52,9 +55,10 @@
      [
        AllowEmpty: true
        DataBinding: 'DataHolderFillingCapacityOrder.Data.Customer'
        Label: 'Customer'
        Strings: 'Customer'
        Enabled: false
        Label: '客户'
        Taborder: 3
        Visible: false
      ]
    }
    Component edtQuantity id:edtQuantity_995
@@ -64,9 +68,9 @@
      Properties:
      [
        DataBinding: 'DataHolderFillingCapacityOrder.Data.Quantity'
        Label: 'Quantity'
        Label: '数量'
        Mask: 'REAL'
        Taborder: 4
        Taborder: 12
      ]
    }
    Component dropDownStringListUnitOfMeasureName id:dropDownStringListUnitOfMeasureName_750
@@ -77,9 +81,11 @@
      [
        AllowEmpty: true
        DataBinding: 'DataHolderFillingCapacityOrder.Data.UnitOfMeasureName'
        Label: 'UnitOfMeasureName'
        Enabled: false
        Label: '数量单位'
        Strings: 'UnitName'
        Taborder: 5
        Taborder: 4
        Visible: false
      ]
    }
    Component edtSalesAmount id:edtSalesAmount_608
@@ -89,9 +95,9 @@
      Properties:
      [
        DataBinding: 'DataHolderFillingCapacityOrder.Data.SalesAmount'
        Label: 'SalesAmount'
        Label: '销售额'
        Mask: 'NUMBER'
        Taborder: 6
        Taborder: 13
      ]
    }
    Component dsDemandDate
@@ -101,8 +107,8 @@
      Properties:
      [
        DataBinding: 'DataHolderFillingCapacityOrder.Data.DemandDate'
        Label: 'Demand Date'
        Taborder: 8
        Label: '需求日期'
        Taborder: 15
      ]
    }
    Component dsForecastDemandDate
@@ -112,10 +118,181 @@
      Properties:
      [
        DataBinding: 'DataHolderFillingCapacityOrder.Data.ForecastDemandDate'
        Label: 'Forecast Demand Date'
        Label: '预期需求日期'
        Taborder: 14
      ]
    }
    Component ddlSalesSegment
    {
      #keys: '[414702.0.525040441]'
      BaseType: 'WebDropDownList'
      Databinding: 'SalesSegment_MP'
      Children:
      [
        Component deSalesSegment
        {
          #keys: '[414702.0.525040443]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[SalesSegment_MP]'
            FixedFilter: 'object.Child(relsize)=0'
            Source: 'ApplicationMacroPlanner.DataHolderSalesSegment'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '销售部门'
        Taborder: 5
      ]
    }
    Component ddlProduct_MP
    {
      #keys: '[414702.0.525462899]'
      BaseType: 'WebDropDownList'
      Databinding: 'Product_MP'
      Children:
      [
        Component deContent
        {
          #keys: '[414702.0.525462901]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Product_MP]'
            FixedFilter: 'not object.IsSystem()'
            Source: 'ApplicationMacroPlanner.DataHolderProduct'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '产品'
        Taborder: 6
      ]
    }
    Component ddlStockingPoint_MP
    {
      #keys: '[414702.0.525462922]'
      BaseType: 'WebDropDownList'
      Databinding: 'StockingPoint_MP'
      Children:
      [
        Component deContent345
        {
          #keys: '[414702.0.525462924]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[StockingPoint_MP]'
            FixedFilter: 'not object.IsSystem()'
            Source: 'ApplicationMacroPlanner.DataHolderStockingPoint'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '库存点'
        Taborder: 7
      ]
    }
    Component ddlBusinessType
    {
      #keys: '[414702.0.525012300]'
      BaseType: 'WebDropDownList'
      Databinding: 'BusinessType'
      Children:
      [
        Component deContent989
        {
          #keys: '[414702.0.525012302]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'BusinessType'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'BusinessTypeName'
        Label: '事业部'
        Taborder: 8
      ]
    }
    Component ddlUnitOfMeasure_MP
    {
      #keys: '[414702.0.525669735]'
      BaseType: 'WebDropDownList'
      Databinding: 'UnitOfMeasure_MP'
      Children:
      [
        Component deContent703
        {
          #keys: '[414702.0.525669737]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'UnitOfMeasure_MP'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '单位'
        Taborder: 9
      ]
    }
    Component efCustomerName
    {
      #keys: '[414702.0.525734924]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderFillingCapacityOrder.Data.Customer'
        Label: 'Customer name'
        Taborder: 10
      ]
    }
    Component efCustomID
    {
      #keys: '[414702.0.525734943]'
      BaseType: 'WebEditField'
      Properties:
      [
        Label: 'Customer ID'
        Taborder: 11
      ]
    }
    Component ddslOrderType
    {
      #keys: '[414702.0.526239841]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        DataBinding: 'DataHolderFillingCapacityOrder.Data.OrderType'
        Label: '订单类型'
        Strings: '反签;授权'
        Taborder: 16
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_ClickBtnOk.def
@@ -7,12 +7,12 @@
  [*
    // Disabled button to prevent the possibility of multiple firing
    
    btnOk.Enabled(false,'');
    //btnOk.Enabled(false,'');
    
    // OnOk
    this.ApplyChanges();
    
    DataHolderFillingCapacityOrder.Data().Commit();
    //DataHolderFillingCapacityOrder.Data().Commit();
    
    //if( not isnull( DataHolderForm.Data() ) )
    //{
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_Edit.def
@@ -12,6 +12,21 @@
    
    DataHolderFillingCapacityOrder.Data( &data );
    
    salesSegment_MP := select( MacroPlan, SalesSegment_MP, tempSSMP, tempSSMP.Name() = selection.SalesSegmentName() );
    ddlSalesSegment.Data( salesSegment_MP );
    product_MP := select( MacroPlan, Product_MP, tempPMP, tempPMP.ID() = selection.ProductID() );
    ddlProduct_MP.Data( product_MP );
    stockingPoint_MP := select( MacroPlan, StockingPoint_MP, tempSPMP, tempSPMP.ID() = selection.StockingPointID() );
    ddlStockingPoint_MP.Data( stockingPoint_MP );
    businessType := select( GlobalOTDTable, BusinessType, tempBT, tempBT.BusinessTypeName() = selection.BusinessType() );
    ddlBusinessType.Data( businessType );
    unitOfMeasure_MP := select( MacroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = selection.UnitOfMeasureName() );
    ddlUnitOfMeasure_MP.Data( unitOfMeasure_MP );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
@@ -8,10 +8,10 @@
  Body:
  [*
    
    data := owner.FillingCapacityOrder(relshadow);
    data.OrderType("提拉")
    data := owner.FillingCapacityOrder( relshadow );
    //data.OrderType("提拉")
    
    DataHolderFillingCapacityOrder.Data(&data);
    DataHolderFillingCapacityOrder.Data( &data );
    
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
@@ -6,20 +6,52 @@
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    feedback := Translations::FilllingCapacity_ValidateInput();
    checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
                  and not dropDownStringListStockPointID.Text() = '' and not dropDownStringListCustomer.Text() = ''
                  and not edtQuantity.Text() = '' and not dropDownStringListUnitOfMeasureName.Text() = ''
                  and not edtSalesAmount.Text() = ''
    return checkValue;
    //feedback := Translations::FilllingCapacity_ValidateInput();
    //
    //checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
    //              and not dropDownStringListStockPointID.Text() = '' and not dropDownStringListCustomer.Text() = ''
    //              and not edtQuantity.Text() = '' and not dropDownStringListUnitOfMeasureName.Text() = ''
    //              and not edtSalesAmount.Text() = ''
    //
    //return checkValue;
  *]
  QuillAction
  {
    Body:
    [*
      Form.ClickBtnOk()
      Form.ApplyChanges();
      data := guard( DataHolderFillingCapacityOrder.Data().WrappedInstance(), null( FillingCapacityOrder ) );;
      if ( isnull( data ) ) {
        MacroPlan.FillingCapacityOrder( relnew,
                                        ID                 := OS::GenerateGUIDAsString(),
                                        ProductID          := guard( ddlProduct_MP.Data().ID(), "null" ),
                                        BusinessType       := guard( ddlBusinessType.Data().BusinessTypeName(), "null" ),
                                        SalesSegmentName   := guard( ddlSalesSegment.Data().Name(), "null" ),
                                        StockingPointID    := guard( ddlStockingPoint_MP.Data().ID(), "null" ),
                                        Customer           := efCustomerName.Text(),
                                        Quantity           := [Real]edtQuantity.Text(),
                                        UnitOfMeasureName  := ddlUnitOfMeasure_MP.Data().Name(),
                                        ForecastDemandDate := dsForecastDemandDate.Date(),
                                        DemandDate         := dsDemandDate.Date(),
                                        OrderType          := ddslOrderType.Text(),
                                        SalesAmount        := [Number]edtSalesAmount.Text()
                                       );
      } else {
        data.ProductID( guard( ddlProduct_MP.Data().ID(), "null" ) );
        data.BusinessType( guard( ddlBusinessType.Data().BusinessTypeName(), "null" ) );
        data.SalesSegmentName( guard( ddlSalesSegment.Data().Name(), "null" ) );
        data.StockingPointID( guard( ddlStockingPoint_MP.Data().ID(), "null" ) );
        data.Customer( efCustomerName.Text() );
        data.Quantity( [Real]edtQuantity.Text() );
        data.UnitOfMeasureName( ddlUnitOfMeasure_MP.Data().Name() );
        data.ForecastDemandDate( dsForecastDemandDate.Date() );
        data.DemandDate( dsDemandDate.Date() );
        data.OrderType( ddslOrderType.Text() );
        data.SalesAmount( [Number]edtSalesAmount.Text() );
      }
      Form.Close();
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_DialogFillingCustomerAndForecast/Component_pnlContent.def
@@ -12,7 +12,7 @@
      Properties:
      [
        DataBinding: 'DataHolderFilling.Data.VerNo'
        Label: 'VerNo'
        Label: '版本号'
        Taborder: 0
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_Edit.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
Method Edit (
  PriorityPolicy selection
) id:Method_DialogNewPriorityPolicy_Edit
{
  #keys: '[414382.0.603040472]'
  Body:
  [*
    data := shadow( selection );
    DataHolderNewPriorityPolicy.Data( &data);
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[412960.0.278371059]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnOk
    {
      #keys: '[412960.0.278371063]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 0
      ]
    }
    Component btnCancel
    {
      #keys: '[412960.0.278371065]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Cancel'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Border: true
    ExcludeFromActiveComponent: true
    FixedSize: true
    Orientation: 'horizontal'
    Padding: 'true'
    Style: 'footer'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[412960.0.278371057]'
  BaseType: 'WebPanel'
  Children:
  [
    Component editOrganCodeName
    {
      #keys: '[412960.0.280135212]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderOrganCode.Data.OrganCodeName'
        Description: '组织编码名称编辑'
        Label: '组织编码'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
Method ClickBtnOk () id:Method_DialogOrganCode_ClickBtnOk
{
  #keys: '[412960.0.279955432]'
  Body:
  [*
    // Disabled button to prevent the possibility of multiple firing
    btnOk.Enabled(false,'');
    // OnOk
    this.ApplyChanges();
    DataHolderOrganCode.Data().Commit();
    this.Close();
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
Method Edit (
  OrganCode selection
) id:Method_DialogOrganCode_Edit
{
  #keys: '[412960.0.279955433]'
  Body:
  [*
    // Edits assumption
    data := shadow( selection );
    DataHolderOrganCode.Data( &data );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
Method New (
  BusinessType owner
) id:Method_DialogOrganCode_New
{
  #keys: '[412960.0.279955435]'
  Body:
  [*
    data := owner.OrganCode(relshadow);
    DataHolderOrganCode.Data( &data);
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[412960.0.278371069]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[412960.0.278371068]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.ClickBtnOk()
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogOrganCode
{
  #keys: '[412960.0.278371055]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
    Component DataHolderOrganCode
    {
      #keys: '[412960.0.279955517]'
      BaseType: 'WebDataHolder'
      Databinding: 'shadow[OrganCode]*'
      Properties:
      [
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Description: '组织编码边界弹窗'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Padding: 'false'
    Title: '组织编码编辑'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessTypeName","title":"BusinessTypeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessTypeName"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessTypeName","title":"BusinessTypeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessTypeName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayType","title":"DisplayType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ScenarioName","title":"ScenarioName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ScenarioName"}}]'
        ContextMenu: 'listContextMenuBusinessType655'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
Quintiq file version 2.0
Component ListOrganCode
{
  #keys: '[412960.0.278370451]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorOrganCode
    {
      #keys: '[412960.0.278370452]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'BusinessType'
        Description: '组织编码'
        ExtractionMode: 'Selected'
        Source: 'ListBusinessType'
        Taborder: 0
        Transformation: 'OrganCode'
      ]
    }
    #child: listActionBarPageOrganCode
    Component DataSetLevelOrganCode
    {
      #keys: '[412960.0.278370457]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuBusinessType
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCodeName","title":"OrganCodeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCodeName"}}]'
        ContextMenu: 'listContextMenuBusinessType'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Description: '组织编码'
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListOrganCode_WebMenu_OnClick
    {
      #keys: '[412960.0.280046014]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[507.0.16811226]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
Component PanelBusinessType
{
  #keys: '[412960.0.278370440]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: ListOrganCode
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPageOrganCode
{
  #keys: '[412960.0.278370454]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
Quintiq file version 2.0
Component listContextMenuBusinessType
{
  #keys: '[412960.0.278370459]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuEdit526
    {
      #keys: '[412960.0.278370780]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'PENCIL'
        Taborder: 3
        Title: 'Edit'
      ]
    }
    Component MenuDelete267
    {
      #keys: '[412960.0.278370833]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DELETE'
        Taborder: 4
        Title: 'Delete'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def
@@ -38,6 +38,18 @@
        Title: 'Delete'
      ]
    }
    Component MenuNewOrganCode
    {
      #keys: '[412960.0.280077335]'
      BaseType: 'WebMenu'
      Properties:
      [
        Description: '新建组织编码'
        Image: 'EARTH_ADD'
        Taborder: 6
        Title: 'Add Organ Code'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: ListBusinessType
Response OnClick (
  BusinessType selection
) id:Response_ListBusinessType_MenuNewOrganCode_OnClick
{
  #keys: '[412960.0.280105097]'
  CanBindMultiple: false
  DefinitionID => /ListBusinessType/Responsedef_ListBusinessType_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuNewOrganCode'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogOrganCode );
      dlg.New( selection );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListOrganCode
Response OnClick (
  OrganCode selection
) id:Response_ListOrganCode_MenuDelete267_OnClick
{
  #keys: '[412960.0.280046423]'
  CanBindMultiple: false
  DefinitionID => /ListOrganCode/Responsedef_ListOrganCode_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuDelete267'
  QuillAction
  {
    Body:
    [*
      selection.Delete();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: ListOrganCode
Response OnClick (
  OrganCode selection
) id:Response_ListOrganCode_MenuEdit526_OnClick
{
  #keys: '[412960.0.280046170]'
  CanBindMultiple: false
  DefinitionID => /ListOrganCode/Responsedef_ListOrganCode_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuEdit526'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogOrganCode );
      dlg.Edit(  selection );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType#367.def
@@ -8,9 +8,10 @@
  Children:
  [
    #child: ListBusinessType
    #child: PanelBusinessType
  ]
  Properties:
  [
    Title: 'Business Type'
    Title: '事业部&组织编码维护'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -38,6 +38,6 @@
  ]
  Properties:
  [
    Taborder: 1
    Taborder: 2
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: ButtonExportTest
Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonExportTest_OnClick
{
  #keys: '[414384.0.914711825]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MPSync );
  *]
  QuillAction
  {
    Body:
    [*
      base64 := YuxTest::ExportTest( MPSync );
      Application.Download( "result.xlsx", base64 );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
@@ -12,7 +12,7 @@
    [*
      MPSync::TestData( MPSync, MacroPlan );
      GlobalOTDTable.InitTestData();
      MPSync.RefreshCapacityAndSaleBudgeFilter();
      MPSync.RefreshCapacityAndSaleBudgeFilter( GlobalOTDTable );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -19,6 +19,18 @@
        Taborder: 0
      ]
    }
    Component ButtonExportTest
    {
      #keys: '[414384.0.914711826]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出测试'
        Taborder: 1
        Visible: false
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
@@ -17,8 +17,8 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'ScenarioManager'
            Source: 'ScenarioManager'
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'CapacityAndSaleBudgeChartElement'
          ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
@@ -10,19 +10,19 @@
  {
    Body:
    [*
      CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
      CapacityAndSaleBudgeChartElement::TestData( GlobalOTDTable );
      
      ScenarioManager.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(),
                                                 DropDownSaleOrCapacity.Text(),
                                                 DropDownTimeGroup.Text(),
                                                 DropDownByBusinessTypeOrByOrgCode.Text(),
                                                 DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
                                                 DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
                                                 DataHolderCapacityAndSaleBudgeFilterYear.Data(),
                                                 DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
                                                 MPSync,
                                                 GlobalOTDTable,
                                                 MacroPlan );
      GlobalOTDTable.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(),
                                                DropDownSaleOrCapacity.Text(),
                                                DropDownTimeGroup.Text(),
                                                DropDownByBusinessTypeOrByOrgCode.Text(),
                                                DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
                                                DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
                                                DataHolderCapacityAndSaleBudgeFilterYear.Data(),
                                                DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
                                                MPSync,
                                                GlobalOTDTable,
                                                MacroPlan );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
@@ -17,8 +17,8 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'ScenarioManager'
            Source: 'ScenarioManager'
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'CapacityAndSaleBudgeCompareItemColumn.CapacityAndSaleBudgeCompareItemCell'
          ]
@@ -44,8 +44,8 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'ScenarioManager'
            Source: 'ScenarioManager'
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'CapacityAndSaleBudgeCompareItemRow'
          ]
@@ -70,8 +70,8 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'ScenarioManager'
            Source: 'ScenarioManager'
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'CapacityAndSaleBudgeCompareItemColumn'
          ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
@@ -14,13 +14,13 @@
      info( DataHolderCapacityAndSaleBudgeFilterItem.Data().Size() );
      info( DataHolderCapacityAndSaleBudgeFilterYear.Data().Size() );
      info( DataHolderCapacityAndSaleBudgeFilterMonth.Data().Size() );
      ScenarioManager.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(),
                                                   DataHolderCapacityAndSaleBudgeFilterItem.Data(),
                                                   DataHolderCapacityAndSaleBudgeFilterYear.Data(),
                                                   DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
                                                   MPSync,
                                                   GlobalOTDTable,
                                                   MacroPlan );
      GlobalOTDTable.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(),
                                                  DataHolderCapacityAndSaleBudgeFilterItem.Data(),
                                                  DataHolderCapacityAndSaleBudgeFilterYear.Data(),
                                                  DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
                                                  MPSync,
                                                  GlobalOTDTable,
                                                  MacroPlan );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
@@ -13,7 +13,7 @@
  {
    Body:
    [*
      tableBinaryData := ScenarioManager.CapacityAndSaleBudgeCompareExport().AsBinaryData();
      tableBinaryData := GlobalOTDTable.CapacityAndSaleBudgeCompareExport().AsBinaryData();
      Application.Download( "年度产销预算对比.xlsx", tableBinaryData );
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
@@ -11,8 +11,8 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'MPSync'
        Source: 'MPSync'
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        Taborder: 0
        Transformation: 'CapacityAndSaleBudgeFilterBusinessType'
      ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
@@ -10,7 +10,7 @@
  {
    Body:
    [*
      MPSync.RefreshCapacityAndSaleBudgeFilter();
      MPSync.RefreshCapacityAndSaleBudgeFilter( GlobalOTDTable );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def
@@ -11,8 +11,8 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'ScenarioManager'
        Source: 'ScenarioManager'
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        Taborder: 0
        Transformation: 'CapacityAndSaleBudgeFilterItem'
      ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def
@@ -10,7 +10,7 @@
  {
    Body:
    [*
      CapacityAndSaleBudgeFilterItem::Initial( ScenarioManager );
      CapacityAndSaleBudgeFilterItem::Initial( GlobalOTDTable );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def
@@ -11,8 +11,8 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'ScenarioManager'
        Source: 'ScenarioManager'
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        Taborder: 0
        Transformation: 'CapacityAndSaleBudgeFilterMonth'
      ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def
@@ -10,7 +10,7 @@
  {
    Body:
    [*
      CapacityAndSaleBudgeFilterMonth::Initial( ScenarioManager );
      CapacityAndSaleBudgeFilterMonth::Initial( GlobalOTDTable );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
@@ -11,8 +11,8 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'MPSync'
        Source: 'MPSync'
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        Taborder: 0
        Transformation: 'CapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
      ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC#663.def
@@ -10,7 +10,7 @@
  {
    Body:
    [*
      MPSync.RefreshCapacityAndSaleBudgeFilter();
      MPSync.RefreshCapacityAndSaleBudgeFilter( GlobalOTDTable );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def
@@ -11,8 +11,8 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'ScenarioManager'
        Source: 'ScenarioManager'
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        Taborder: 0
        Transformation: 'CapacityAndSaleBudgeFilterYear'
      ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def
@@ -10,7 +10,7 @@
  {
    Body:
    [*
      CapacityAndSaleBudgeFilterYear::Initial( ScenarioManager );
      CapacityAndSaleBudgeFilterYear::Initial( GlobalOTDTable );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_ListSalesDemands.def
@@ -5,6 +5,10 @@
  [
    Component DataSetLevelSalesDemands #extension
    {
      Children:
      [
        #child: listContextMenuSD
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPoint_MP.ID","title":"Stocking point","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"StockingPoint_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegment_MP.Name","title":"Sales segment","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SalesSegment_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"Customer name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerID","title":"Customer ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"Order ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderLineID","title":"Order line ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderLineID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"Order date","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product_MP.ID","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Product_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure_MP.Name","title":"UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"UnitOfMeasure_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfilledQuantity","title":"Fulfilled","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"FulfilledQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeChart","columnid":"Fulfillment","title":"Fulfillment","subtotals":"","tooltip":"","width":-1,"display":"shown","type":"stackbar","relative":true,"attributes":[{"name":"Unfulfilled demand","color":"rgb(232,123,0)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Unfulfilled demand","title":"Unfulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"maxvalue( object.Quantity() - object.FulfilledQuantity(), 0.0).Round( 2)"}},{"name":"Fulfilled demand","color":"rgb(87,184,71)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Fulfilled demand","title":"Fulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.FulfilledQuantity().Round( 2)"}}]}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsFirmed","title":"Is firmed","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsFirmed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsEligibleForNetting","title":"Is eligible for netting","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsEligibleForNetting"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriceUoM","title":"PriceUoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PriceUoM"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderTag","title":"订单标签","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderTag"}}]'
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Component_listContextMenuSD.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
Component listContextMenuSD #extension
{
  Children:
  [
    Component MenuPriorityResult
    {
      #keys: '[414382.0.562012014]'
      BaseType: 'WebMenu'
      Properties:
      [
        Taborder: 10
        Title: '事业部优先级计算'
      ]
    }
    Component MenuEditCustomerOrderPriority
    {
      #keys: '[414382.0.581575364]'
      BaseType: 'WebMenu'
      Properties:
      [
        Taborder: 11
        Title: '修改客户订单优先级因子信息'
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuEditCustomerOrderPriority_OnClic.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: ListSalesDemands
Response OnClick (
  SalesDemandBase selection
) id:Response_ListSalesDemands_MenuEditCustomerOrderPriority_OnClick
{
  #keys: '[414382.0.581575400]'
  CanBindMultiple: false
  DefinitionID => //FormSalesDemands/ListSalesDemands/Responsedef_ListSalesDemands_WebMenu_OnClick
  Initiator: 'MenuEditCustomerOrderPriority'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogEditCustomerOrderPriority );
      data := selection.astype( CustomerOrder );
      dlg.EditCustomerOrderPriority( data);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCustomerOrders/Response_TIANMA_JITUAN_ListSalesDemands_MenuPriorityResult_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListSalesDemands
Response OnClick () id:Response_ListSalesDemands_MenuPriorityResult_OnClick
{
  #keys: '[414382.0.563130924]'
  CanBindMultiple: false
  DefinitionID => //FormSalesDemands/ListSalesDemands/Responsedef_ListSalesDemands_WebMenu_OnClick
  Initiator: 'MenuPriorityResult'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogChoosePriorityPolicy );
      dlg.OpenChoose();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_ListFillingCapacityOrder.def
@@ -37,7 +37,7 @@
  ]
  Properties:
  [
    Taborder: 0
    Taborder: 1
  ]
  ResponseDefinitions:
  [
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_PanelFillingCapacityOrder.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component PanelFillingCapacityOrder
{
  #keys: '[414702.0.526129526]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ButtonDeduct
    {
      #keys: '[414702.0.523642357]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EDITOR_ACCESSIBILITY_LOCAL'
        Label: '冲减'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def
@@ -22,6 +22,7 @@
      BaseType: 'WebMenu'
      Properties:
      [
        BindOnDoubleClick: true
        Image: 'PENCIL'
        Taborder: 4
        Title: 'Edit'
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/_ROOT_Component_FormFillingCapacityOrder.def
@@ -8,6 +8,7 @@
  Children:
  [
    #child: ListFillingCapacityOrder
    #child: PanelFillingCapacityOrder
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_ListCustomerAndFillingCapacityOrder.def
@@ -36,7 +36,7 @@
  ]
  Properties:
  [
    Taborder: 0
    Taborder: 1
  ]
  ResponseDefinitions:
  [
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_PanelButton.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component PanelButton
{
  #keys: '[414702.0.454190771]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ButtonTransform
    {
      #keys: '[414702.0.454190800]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'BARRIER_CLOSED'
        Label: '转换'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Component_listContextMenuCustomerAndFillingCapacityOrder.def
@@ -11,20 +11,43 @@
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'ADD2'
        Image: 'JERRYCAN'
        Taborder: 3
        Title: 'Filling'
        Title: '填产'
      ]
    }
    Component MenuTest
    Component MenuRefresh
    {
      #keys: '[414382.0.415603149]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'ADD2'
        Image: 'EDITOR_HAS_DECLARATIVE_DEFINITION'
        Taborder: 4
        Title: 'Test'
        Title: '创建测试数据'
      ]
    }
    Component MenuDelete
    {
      #keys: '[414702.0.472081906]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DELETE'
        Taborder: 5
        Title: '删除'
      ]
    }
    Component MenuSelectAll
    {
      #keys: '[414702.0.472012591]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DOCUMENT_SELECTION'
        Shortcut: 'Ctrl+A'
        Taborder: 6
        Title: '全选'
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: ListCustomerAndFillingCapacityOrder
Response OnClick (
  CustomerAndForecastOrder selection
) id:Response_ListCustomerAndFillingCapacityOrder_MenuDelete_OnClick
{
  #keys: '[414702.0.472032713]'
  DefinitionID => /ListCustomerAndFillingCapacityOrder/Responsedef_ListCustomerAndFillingCapacityOrder_WebMenu_OnClick
  Initiator: 'MenuDelete'
  QuillAction
  {
    Body:
    [*
      selection.Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListCustomerAndFillingCapacityOrder
Response OnClick () id:Response_ListCustomerAndFillingCapacityOrder_MenuRefresh_OnClick
{
  #keys: '[414382.0.415724061]'
  CanBindMultiple: false
  DefinitionID => /ListCustomerAndFillingCapacityOrder/Responsedef_ListCustomerAndFillingCapacityOrder_WebMenu_OnClick
  Initiator: 'MenuRefresh'
  QuillAction
  {
    Body:
    [*
      CustomerAndForecastOrder::RefreshData(  MacroPlan,GlobalOTDTable);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuSelectAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListCustomerAndFillingCapacityOrder
Response OnClick () id:Response_ListCustomerAndFillingCapacityOrder_MenuSelectAll_OnClick
{
  #keys: '[414702.0.474548365]'
  CanBindMultiple: false
  DefinitionID => /ListCustomerAndFillingCapacityOrder/Responsedef_ListCustomerAndFillingCapacityOrder_WebMenu_OnClick
  Initiator: 'MenuSelectAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_ListCustomerAndFillingCapacityOrder_MenuTest_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/Response_PanelButton_ButtonTransform_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelButton/ButtonTransform
Response OnClick () id:Response_PanelButton_ButtonTransform_OnClick
{
  #keys: '[414702.0.454181189]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      CustomerAndForecastOrder::CreateData( MacroPlan );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityScheme/_ROOT_Component_FormCustomerAndForecastOrder.def
@@ -8,6 +8,7 @@
  Children:
  [
    #child: ListCustomerAndFillingCapacityOrder
    #child: PanelButton
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def
@@ -21,7 +21,8 @@
  {
    Body:
    [*
      selection.Delete()
      FilllingCapacityOrderScheme::DeleteDetails( MacroPlan,selection.SchemeName());
      selection.Delete();
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: ListFillingScheme
Response OnSelectionChanged (
  FilllingCapacityOrderScheme selection
) id:Response_ListFillingScheme_OnSelectionChanged
{
  #keys: '[414382.0.532640606]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      schemeName := selection.SchemeName();
      list := selectset( MacroPlan,FillingCapacityOrder,order,order.SchemeName() = selection.SchemeName());
      DataHolderFillingScheme.Data(&list);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_ListInterfaceTest.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
Quintiq file version 2.0
Component ListInterfaceTest
{
  #keys: '[414702.0.459846558]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorInterfaceTest
    {
      #keys: '[414702.0.459846559]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        Taborder: 0
        Transformation: 'Global_BrokerExecuteLog'
      ]
    }
    #child: listActionBarPageInterfaceTest
    Component DataSetLevelInterfaceTest
    {
      #keys: '[414702.0.459846564]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuInterfaceTest
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImageExecutionStatus","title":"运行状态","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImageExecutionStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ExecuteUser","title":"执行用户","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ExecuteUser"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsSuccess","title":"是否成功","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsSuccess"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BrokerName","title":"Broker名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BrokerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ElementTotal","title":"数据大小","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ElementTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorDateTime","title":"错误时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorDateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorMessage","title":"错误消息","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorMessage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorNo","title":"错误号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"日志名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SuccessDateTime","title":"成功时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SuccessDateTime"}}]'
        ContextMenu: 'listContextMenuInterfaceTest'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListInterfaceTest_WebMenu_OnClick
    {
      #keys: '[414702.0.488307130]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[1041.0.20211517]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog#981.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
Component PanelInterfaceGlobal_BrokerExecuteLog
{
  #keys: '[414702.0.459917264]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: ListInterfaceTest
  ]
  Properties:
  [
    Taborder: 5
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
Quintiq file version 2.0
Component PanelInterfaceOption1
{
  #keys: '[414702.0.459752107]'
  BaseType: 'WebPanel'
  Children:
  [
    Component CheckboxCustomOrder
    {
      #keys: '[414702.0.459786494]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'CustomOrder'
        Taborder: 0
      ]
    }
    Component CheckboxForecast
    {
      #keys: '[414702.0.459501981]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Forecast'
        Taborder: 1
      ]
    }
    Component CheckboxUnitOfMeasure_MP
    {
      #keys: '[414702.0.500042972]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'UnitOfMeasure_MP'
        Taborder: 2
      ]
    }
    Component CheckboxSalesSegment_MP
    {
      #keys: '[414702.0.498882706]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'SalesSegment_MP'
        Taborder: 3
      ]
    }
    Component CheckboxProduct_MP
    {
      #keys: '[414702.0.500281942]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Product_MP'
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2#456.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
Quintiq file version 2.0
Component PanelInterfaceOption2
{
  #keys: '[414702.0.500233382]'
  BaseType: 'WebPanel'
  Children:
  [
    Component CheckboxConversionFactor
    {
      #keys: '[414702.0.501770364]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'ConversionFactor'
        Taborder: 0
      ]
    }
    Component CheckboxOperation
    {
      #keys: '[414702.0.501791718]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Operation'
        Taborder: 1
      ]
    }
    Component CheckboxOperationBOM
    {
      #keys: '[414702.0.501742364]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'OperationBOM'
        Taborder: 2
      ]
    }
    Component CheckboxProductInLane
    {
      #keys: '[414702.0.501792106]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'ProductInLane'
        Taborder: 3
      ]
    }
    Component CheckboxAIPISPIP
    {
      #keys: '[414702.0.503110868]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'AIPISPIP'
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
Quintiq file version 2.0
Component PanelInterfaceOption3
{
  #keys: '[414702.0.501742781]'
  BaseType: 'WebPanel'
  Children:
  [
    Component CheckboxInventorySupply
    {
      #keys: '[414702.0.503576372]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'InventorySupply'
        Taborder: 0
      ]
    }
    Component CheckboxStockingPointCost
    {
      #keys: '[414702.0.503748797]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'StockingPointCost'
        Taborder: 1
      ]
    }
    Component CheckboxOperationCost
    {
      #keys: '[414702.0.503158219]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'OperationCost'
        Taborder: 2
      ]
    }
    Component CheckboxDOI_DSI
    {
      #keys: '[414702.0.503158880]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'DOI_DSI'
        Taborder: 3
      ]
    }
    Component CheckboxCustomerGrade
    {
      #keys: '[414702.0.503159013]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'CustomerGrade'
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 2
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
Quintiq file version 2.0
Component PanelInterfaceOption4
{
  #keys: '[414702.0.504229568]'
  BaseType: 'WebPanel'
  Children:
  [
    Component CheckboxStockingPoint_MP
    {
      #keys: '[414702.0.501794917]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'StockingPoint_MP'
        Taborder: 0
      ]
    }
    Component CheckboxCurrency_MP
    {
      #keys: '[414702.0.504229987]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Currency_MP'
        Taborder: 1
      ]
    }
    Component CheckboxCurrencyRate_MP
    {
      #keys: '[414702.0.503787453]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'CurrencyRate_MP'
        Taborder: 2
      ]
    }
    Component CheckboxLane
    {
      #keys: '[414702.0.503787560]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'Lane'
        Taborder: 3
      ]
    }
    Component CheckboxLaneLeg
    {
      #keys: '[414702.0.503787710]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: 'LaneLeg'
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
Quintiq file version 2.0
Component PanelInterfaceTest
{
  #keys: '[414702.0.459815967]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ButtonPullInterfaceDataToIntermediateTable
    {
      #keys: '[414702.0.457042579]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'WINE'
        Label: '拉取接口数据到中间表'
        Taborder: 0
      ]
    }
    Component ButtonSynchronizeDataToMacroPlan
    {
      #keys: '[414702.0.461471389]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'COFFEE_MACHINE'
        Label: '同步数据到MacroPlan'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listActionBarPageInterfaceTest.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPageInterfaceTest
{
  #keys: '[414702.0.459846561]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
Quintiq file version 2.0
Component listContextMenuInterfaceTest
{
  #keys: '[414702.0.459846566]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuCreateShowData
    {
      #keys: '[414702.0.488246034]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'VIEW'
        Taborder: 3
        Title: '显示数据'
      ]
    }
    Component MenuDelete
    {
      #keys: '[414702.0.495675965]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DELETE'
        Taborder: 4
        Title: '删除'
      ]
    }
    Component MenuSelectionAll
    {
      #keys: '[414702.0.494390825]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'SELECTION'
        Shortcut: 'Ctrl+A'
        Taborder: 5
        Title: '全选'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuCreateShowData_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: ListInterfaceTest
Response OnClick (
  Global_BrokerExecuteLog selection
) id:Response_ListInterfaceTest_MenuCreateShowData_OnClick
{
  #keys: '[414702.0.488307153]'
  CanBindMultiple: false
  DefinitionID => /ListInterfaceTest/Responsedef_ListInterfaceTest_WebMenu_OnClick
  Initiator: 'MenuCreateShowData'
  QuillAction
  {
    Body:
    [*
      GlobalOTDTable.Global_ShowRow( relflush );
      GlobalOTDTable.Global_ShowColumn( relflush );
      GlobalOTDTable.Global_ShowCell( relflush );
      Global_ShowCell::ShowData( GlobalOTDTable, selection );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: ListInterfaceTest
Response OnClick (
  Global_BrokerExecuteLog selection
) id:Response_ListInterfaceTest_MenuDelete_OnClick
{
  #keys: '[414702.0.494333825]'
  DefinitionID => /ListInterfaceTest/Responsedef_ListInterfaceTest_WebMenu_OnClick
  Initiator: 'MenuDelete'
  QuillAction
  {
    Body:
    [*
      selection.Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuSelectionAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListInterfaceTest
Response OnClick () id:Response_ListInterfaceTest_MenuSelectionAll_OnClick
{
  #keys: '[414702.0.494351350]'
  CanBindMultiple: false
  DefinitionID => /ListInterfaceTest/Responsedef_ListInterfaceTest_WebMenu_OnClick
  Initiator: 'MenuSelectionAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
#parent: PanelInterfaceTest/ButtonPullInterfaceDataToIntermediateTable
Response OnClick () id:Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnClick
{
  #keys: '[414702.0.459947783]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( GlobalOTDTable );
  *]
  QuillAction
  {
    Body:
    [*
      GlobalOTDTable.SynchronizationAllMappingBrokerAndAPIByOption( ApplicationMacroPlanner.GetUserName(),
                                                                    CheckboxCustomOrder.Checked(),
                                                                    CheckboxForecast.Checked(),
                                                                    CheckboxUnitOfMeasure_MP.Checked(),
                                                                    CheckboxSalesSegment_MP.Checked(),
                                                                    CheckboxProduct_MP.Checked(),
                                                                    CheckboxConversionFactor.Checked(),
                                                                    CheckboxOperation.Checked(),
                                                                    CheckboxOperationBOM.Checked(),
                                                                    CheckboxProductInLane.Checked(),
                                                                    CheckboxAIPISPIP.Checked(),
                                                                    CheckboxInventorySupply.Checked(),
                                                                    CheckboxStockingPointCost.Checked(),
                                                                    CheckboxOperationCost.Checked(),
                                                                    CheckboxDOI_DSI.Checked(),
                                                                    CheckboxCustomerGrade.Checked(),
                                                                    CheckboxStockingPoint_MP.Checked(),
                                                                    CheckboxCurrency_MP.Checked(),
                                                                    CheckboxCurrencyRate_MP.Checked(),
                                                                    CheckboxLane.Checked(),
                                                                    CheckboxLaneLeg.Checked() );
      WebMessageBox::Information( "数据开始拉取中!(仅限一人操作)", true );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: PanelInterfaceTest/ButtonSynchronizeDataToMacroPlan
Response OnClick () id:Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick
{
  #keys: '[414702.0.465857875]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( GlobalOTDTable ) and not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      GlobalOTDTable.SynchronizeDataToMacroPlan( MacroPlan,
                                                 CheckboxUnitOfMeasure_MP.Checked()
                                                );
      WebMessageBox::Success( "同步成功!", true );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormInterfaceTest
{
  #keys: '[414702.0.459670964]'
  BaseType: 'WebForm'
  Children:
  [
    #child: PanelInterfaceOption1
    #child: PanelInterfaceTest
    #child: PanelInterfaceGlobal_BrokerExecuteLog
    #child: PanelInterfaceOption2
    #child: PanelInterfaceOption3
    #child: PanelInterfaceOption4
  ]
  Properties:
  [
    Image: 'BACON'
    Title: '接口测试'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Component_ListIssueWorkOrder.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductionWorkOrderNumber","title":"ProductionWorkOrderNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductionWorkOrderNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductModel","title":"ProductModel","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductModel"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialDescription","title":"MaterialDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlannedQuantity","title":"PlannedQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlannedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderType","title":"WorkOrderType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderStatus","title":"WorkOrderStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderStatus"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductionWorkOrderNumber","title":"ProductionWorkOrderNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductionWorkOrderNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductModel","title":"Product ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductModel"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialDescription","title":"MaterialDescription","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialDescription"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlannedQuantity","title":"PlannedQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlannedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderType","title":"WorkOrderType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WorkOrderStatus","title":"WorkOrderStatus","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WorkOrderStatus"}}]'
        ContextMenu: 'MenuIssueEdit'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormIssueWorkOrder/Response_ListIssueWorkOrder_MenuEdit_OnClick.def
@@ -8,13 +8,23 @@
  CanBindMultiple: false
  DefinitionID => /ListIssueWorkOrder/Responsedef_ListIssueWorkOrder_WebMenu_OnClick
  Initiator: 'MenuEdit'
  Precondition:
  [*
    flag := DataHolderCheckedMasterPlanReleaseWorkOrderTabulation.Data().Size() > 0;
    if ( not flag ) {
     feedback := "未选择数据";
    }
    return flag;
  *]
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditIssueWorkOrder );
      
      dlg.Edit( selection );
      dlg.Edit( DataHolderCheckedMasterPlanReleaseWorkOrderTabulation.Data() );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormKpiMatrix/Component_PanelKpiMatrixButton.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormKpiMatrix/_ROOT_Component_FormKpiMatrix.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
@@ -5,17 +5,6 @@
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuInitData
    {
      #keys: '[414382.0.482890505]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR'
        Taborder: 3
        Title: 'Init Data'
      ]
    }
    Component MenuEdit
    {
      #keys: '[414382.0.485622263]'
@@ -27,6 +16,39 @@
        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]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'GEAR_NEW'
        Taborder: 6
        Title: '初始化'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorBusinessType_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: DataHolderPriorityFactorBusinessType
Response OnCreated () id:Response_FormPriorityFactor_DataHolderPriorityFactorBusinessType_OnCreated
{
  #keys: '[414382.0.539235155]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      //businessTypeList := selectset( GlobalOTDTable,BusinessType,b,true);
      //this.Data(&businessTypeList);
      list := this.Data();
      strings := selectuniquevalues( list,Elements,e,e.BusinessTypeName()).Concatenate( ";" );
      DropDownStringListBusinessType.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorBusinessType_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: DataHolderPriorityFactorBusinessType
Response OnDataChanged () id:Response_FormPriorityFactor_DataHolderPriorityFactorBusinessType_OnDataChanged
{
  #keys: '[414382.0.539235291]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      //businessTypeList := selectset( GlobalOTDTable,BusinessType,b,true);
      //this.Data(&businessTypeList);
      //strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
      //DropDownStringListBusinessType.Strings(strings);
      list := this.Data();
      strings := selectuniquevalues( list,Elements,e,e.BusinessTypeName()).Concatenate( ";" );
      DropDownStringListBusinessType.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: DataHolderPriorityFactorSelect
Response OnDataChanged () id:Response_FormPriorityFactor_DataHolderPriorityFactorSelect_OnDataChanged
{
  #keys: '[414382.0.593010798]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      data := selectset( MacroPlan,PriorityFactor,p,true);
      this.Data(&data);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
@@ -2,15 +2,16 @@
#parent: DropDownStringListBusinessType
Response OnCreated () id:Response_FormPriorityFactor_DropDownStringListBusinessType_OnCreated
{
  #keys: '[414382.0.461201807]'
  #keys: '[414382.0.539375553]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
      this.Strings(strings);
      info( "create" + DropDownStringListBusinessType.Text());
      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
      DataHolderPriorityFactorSelect.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
@@ -9,6 +9,7 @@
  {
    Body:
    [*
      info( "selection" + DropDownStringListBusinessType.Text());
      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
      DataHolderPriorityFactorSelect.Data(&list);
    *]
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
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
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInitData_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInit_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnClick () id:Response_ListPriorityFactor_MenuInit_OnClick
{
  #keys: '[414382.0.600302015]'
  CanBindMultiple: false
  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
  Initiator: 'MenuInit'
  QuillAction
  {
    Body:
    [*
      // åˆå§‹åŒ–优先级因子
      PriorityFactor::InitData( MacroPlan);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
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
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnClick#106.def
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_OnSelectionChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: ListPriorityFactor
Response OnSelectionChanged (
  PriorityFactor selection
) id:Response_ListPriorityFactor_OnSelectionChanged
{
  #keys: '[414382.0.541275298]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnSelectionChanged'
  QuillAction
  {
    Body:
    [*
      info( "selecion change" );
      detaisls := PriorityFactorDetails::GetDataByPriorityFactor( selection, MacroPlan);
      DataHolderPriorityFactorDetailsSelect.Data(&detaisls);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
@@ -25,6 +25,7 @@
      [
        Label: '事业部:'
        Taborder: 0
        Visible: false
      ]
    }
    #child: ListPriorityFactor
@@ -38,5 +39,34 @@
        Taborder: 3
      ]
    }
    Component DataHolderPriorityFactorBusinessType
    {
      #keys: '[414382.0.539205233]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[BusinessType]*'
      Children:
      [
        Component DataExtractorPriorityFactorBusinessType
        {
          #keys: '[414382.0.584060499]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'BusinessType'
          ]
        }
      ]
      Properties:
      [
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
    Title: '优先级因子'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactorGrading/_ROOT_Component_FormPriorityFactorGrading.def
@@ -33,4 +33,8 @@
    }
    #child: ListPriorityFactorGrading
  ]
  Properties:
  [
    Title: '优先级因子细分'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
@@ -12,7 +12,7 @@
      Properties:
      [
        DataType: 'structured[PriorityPolicy]'
        Source: 'DataHolderPriorityPolicy'
        Source: 'DataHolderPriorityPolicyShowList'
        Taborder: 0
        Transformation: 'Elements'
      ]
@@ -36,7 +36,7 @@
  ]
  Properties:
  [
    Taborder: 2
    Taborder: 3
  ]
  ResponseDefinitions:
  [
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyCoefficient#902.def
@@ -21,7 +21,7 @@
      BaseType: 'WebButton'
      Properties:
      [
        Label: '完成'
        Label: '保存'
        Taborder: 1
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def
@@ -40,7 +40,7 @@
  ]
  Properties:
  [
    Taborder: 3
    Taborder: 4
    Title: '优先级策略配置'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton#713.def
@@ -11,7 +11,7 @@
      BaseType: 'WebButton'
      Properties:
      [
        Label: '添加因子'
        Label: '添加'
        Taborder: 1
      ]
    }
@@ -31,7 +31,7 @@
      BaseType: 'WebButton'
      Properties:
      [
        Label: '*'
        Label: '-'
        Taborder: 3
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyBusinessType_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: DataHolderPriorityPolicyBusinessType
Response OnCreated () id:Response_FormPriorityPolicy_DataHolderPriorityPolicyBusinessType_OnCreated
{
  #keys: '[414382.0.585796031]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      list := this.Data();
      strings := selectuniquevalues( list,Elements,e,e.BusinessTypeName()).Concatenate( ";" );
      PriorityPolicyBusinessType.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyBusinessType_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: DataHolderPriorityPolicyBusinessType
Response OnDataChanged () id:Response_FormPriorityPolicy_DataHolderPriorityPolicyBusinessType_OnDataChanged
{
  #keys: '[414382.0.585796110]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      list := this.Data();
      strings := selectuniquevalues( list,Elements,e,e.BusinessTypeName()).Concatenate( ";" );
      PriorityPolicyBusinessType.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyFactor_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: DataHolderPriorityPolicyFactor
Response OnCreated () id:Response_FormPriorityPolicy_DataHolderPriorityPolicyFactor_OnCreated
{
  #keys: '[414382.0.586001511]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      list := this.Data();
      strings := selectuniquevalues( list,Elements,e,e.Name()).Concatenate( ";" );
      DropDownStringList.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicyFactor_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: DataHolderPriorityPolicyFactor
Response OnDataChanged () id:Response_FormPriorityPolicy_DataHolderPriorityPolicyFactor_OnDataChanged
{
  #keys: '[414382.0.585931640]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      list := this.Data();
      strings := selectuniquevalues( list,Elements,e,e.Name()).Concatenate( ";" );
      DropDownStringList.Strings(strings);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicySelectBusinessType_OnCreated.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: DataHolderPriorityPolicy
Response OnCreated () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnCreated
{
  #keys: '[414382.0.594152096]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      data := this.Data();
      businessType := PriorityPolicyBusinessType.Text();
      list := selectset( data,Elements,e,e.BusinessType() = businessType);
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
@@ -2,15 +2,17 @@
#parent: DataHolderPriorityPolicy
Response OnDataChanged () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnDataChanged
{
  #keys: '[414382.0.502145694]'
  #keys: '[414382.0.595379026]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
      this.Data(&list);
      data := this.Data();
      businessType := PriorityPolicyBusinessType.Text();
      list := selectset( data,Elements,e,e.BusinessType() = businessType);
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuDelete_OnClick.def
@@ -12,6 +12,7 @@
  {
    Body:
    [*
      selection.Delete();
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
@@ -12,8 +12,21 @@
  {
    Body:
    [*
      PanelPriorityPolicyOperation.Visible(true);
      dlg := construct( DialogNewPriorityPolicy );
      businessType := PriorityPolicyBusinessType.Text();
      dlg.Edit( selection);
      PanelPriorityPolicyOperationName.Text(selection.Name());
      businessType := PriorityPolicyBusinessType.Text();
      str := PriorityFactor::GetNameList( MacroPlan, businessType);
      DropDownStringList.Strings(str);
      LabelFormula.Text(selection.Formula());
      LabelCalculateValue.Text(selection.CalculateValue());
      data := shadow( selection );
      DataHolderEditPriorityPolicy.Data( &data );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def
@@ -17,11 +17,11 @@
      str := PriorityFactor::GetNameList( MacroPlan, businessType);
      DropDownStringList.Strings(str);
      
      LabelFormula.Text(selection.Formula());
      LabelCalculateValue.Text(selection.CalculateValue());
      data := shadow( selection );
      DataHolderEditPriorityPolicy.Data( &data );
      //coefficient := PriorityFactor::GetCoeffcientByName( MacroPlan,businessType,DropDownStringList.Text());
      //LabelPriorityPolicyCoefficient.Text([String]coefficient);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
@@ -5,6 +5,12 @@
  #keys: '[414382.0.502145449]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    feedback := "该优先级因子已被选择."
    return not LabelFormula.Text() ~ DropDownStringList.Text();
  *]
  QuillAction
  {
    Body:
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
@@ -13,7 +13,7 @@
      formulaText := PriorityPolicy::RollBackStr( MacroPlan,businessType,LabelFormula.Text());
      LabelFormula.Text(formulaText);
      
      calculateTest := PriorityPolicy::RollBackStr( MacroPlan,businessType,LabelCalculateValue.Text());
      calculateTest := PriorityPolicy::RollBackCalcStr( MacroPlan,businessType,LabelCalculateValue.Text());
      LabelCalculateValue.Text(calculateTest);
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: PanelPriorityPolicyOperationButton/DropDownStringList
Response OnCreated () id:Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnCreated
{
  #keys: '[414382.0.539822108]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      //strs := PriorityFactor::GetNameList( MacroPlan,DropDownStringList.Text());
      //this.Strings(strs);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def
@@ -9,11 +9,9 @@
  {
    Body:
    [*
      info( "select changeed" );
      businessType := PriorityPolicyBusinessType.Text();
      coefficient := PriorityFactor::GetCoeffcientByName( MacroPlan,businessType,DropDownStringList.Text());
      LabelPriorityPolicyCoefficient.Text([String]coefficient);
      info("coefficient := " + [String]coefficient  );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def
@@ -9,8 +9,11 @@
  {
    Body:
    [*
      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
      strings := BusinessType::GetScenarioNamesStr( GlobalOTDTable );
      this.Strings(strings);
      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
@@ -10,7 +10,7 @@
    Body:
    [*
      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
      DataHolderPriorityPolicy.Data(&list);
      DataHolderPriorityPolicyShowList.Data(&list);
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
@@ -22,9 +22,24 @@
      #keys: '[414382.0.487792124]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityPolicy]*'
      Children:
      [
        Component DataExtractorPriorityPolicy216
        {
          #keys: '[414382.0.593061574]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'PriorityPolicy'
          ]
        }
      ]
      Properties:
      [
        Taborder: 1
        Taborder: 2
      ]
    }
    #child: ListPriorityPolicy
@@ -36,7 +51,67 @@
      Databinding: 'shadow[PriorityPolicy]*'
      Properties:
      [
        Taborder: 4
        Taborder: 5
      ]
    }
    Component DataHolderPriorityPolicyBusinessType
    {
      #keys: '[414382.0.585736261]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[BusinessType]*'
      Children:
      [
        Component DataExtractorPriorityPolicyBusinessType
        {
          #keys: '[414382.0.585207663]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'BusinessType'
          ]
        }
      ]
      Properties:
      [
        Taborder: 6
      ]
    }
    Component DataHolderPriorityPolicyFactor
    {
      #keys: '[414382.0.585208237]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityFactor]*'
      Children:
      [
        Component DataExtractorPriorityPolicyFactor
        {
          #keys: '[414382.0.585705356]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'PriorityFactor'
          ]
        }
      ]
      Properties:
      [
        Taborder: 7
      ]
    }
    Component DataHolderPriorityPolicyShowList
    {
      #keys: '[414382.0.593062135]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[PriorityPolicy]*'
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def
@@ -30,4 +30,8 @@
      ]
    }
  ]
  Properties:
  [
    Title: '优先级结果页面'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick#545.def
@@ -16,7 +16,7 @@
      dlg := construct( DialogCreateEditScenario );
      dlg.checkboxEnableSync().Visible( true );
      dlg.dropDownStringListGeneral().Visible( true );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes() );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
      dlg.checkboxIsKeyProduct().Visible( true );
      dlg.checkboxCreatePurchaseSupplyProduct().Visible( true );
      dlg.NewScenario( ScenarioManager, selection, true );
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def
@@ -17,7 +17,7 @@
      dlg := construct( DialogCreateEditScenario );
      dlg.checkboxEnableSync().Visible( true );
      dlg.dropDownStringListGeneral().Visible( true );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes() );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
      dlg.checkboxIsKeyProduct().Visible( true );
      dlg.checkboxCreatePurchaseSupplyProduct().Visible( true );
      parent := selection.Element( 0 ).Parent();
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick#549.def
@@ -17,7 +17,7 @@
      dlg.checkboxEnableSync().Checked( false );
      dlg.checkboxEnableSync().Visible( false );
      dlg.dropDownStringListGeneral().Visible( false );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes() );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
      dlg.checkboxIsKeyProduct().Visible( false );
      dlg.checkboxCreatePurchaseSupplyProduct().Visible( false );
      dlg.NewScenario( ScenarioManager, selection );
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def
@@ -18,7 +18,7 @@
      dlg.checkboxEnableSync().Checked( false );
      dlg.checkboxEnableSync().Visible( false );
      dlg.dropDownStringListGeneral().Visible( false );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes() );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
      dlg.checkboxIsKeyProduct().Visible( false );
      dlg.checkboxCreatePurchaseSupplyProduct().Visible( false );
      parent := selection.Element( 0 ).Parent();
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def
@@ -18,7 +18,7 @@
      // Edit scenario
      dlg := construct( DialogCreateEditScenario );
      dlg.dropDownStringListGeneral().Visible( selection.EnableSync() );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes() );
      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
      dlg.checkboxIsKeyProduct().Visible( selection.EnableSync() );
      dlg.checkboxCreatePurchaseSupplyProduct().Visible( selection.EnableSync() );
      
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_MatrixEditorShowInterfaceData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
Quintiq file version 2.0
Component MatrixEditorShowInterfaceData
{
  #keys: '[414702.0.491402111]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCellShowInterfaceData
    {
      #keys: '[414702.0.491402112]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorShowInterfaceData
        {
          #keys: '[414702.0.491402113]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'Global_ShowCell'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'Value'
        Column: 'Global_ShowColumn'
        Row: 'Global_ShowRow'
        Taborder: 0
      ]
    }
    Component MatrixEditorRowsShowInterfaceData
    {
      #keys: '[414702.0.491402116]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractor703
        {
          #keys: '[414702.0.491402117]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'Global_ShowRow'
          ]
        }
      ]
      Properties:
      [
        Legend: 'RowNr'
        SortCriteria: 'RowNr'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumnsShowInterfaceData
    {
      #keys: '[414702.0.491402120]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractor253
        {
          #keys: '[414702.0.491402121]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'GlobalOTDTable'
            Source: 'GlobalOTDTable'
            Taborder: 0
            Transformation: 'Global_ShowColumn'
          ]
        }
      ]
      Properties:
      [
        Legend: 'ColumnName'
        SortCriteria: 'ColumnIndex'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageShowInterfaceData
    #child: matrixeditorContextMenuShowInterfaceData
  ]
  Properties:
  [
    Columns: 'MatrixEditorColumnsShowInterfaceData'
    ContextMenu: 'matrixeditorContextMenuShowInterfaceData'
    Rows: 'MatrixEditorRowsShowInterfaceData'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_matrixEditorActionBarPageShowInterfaceData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageShowInterfaceData
{
  #keys: '[414702.0.491402124]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_matrixeditorContextMenuShowInterfaceData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuShowInterfaceData
{
  #keys: '[414702.0.491402127]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/_ROOT_Component_FormShowInterfaceData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormShowInterfaceData
{
  #keys: '[414702.0.484442828]'
  BaseType: 'WebForm'
  Children:
  [
    #child: MatrixEditorShowInterfaceData
  ]
  Properties:
  [
    Image: 'PROJECTOR'
    Title: '接口数据显示'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Material/Response_OnCreated.def
@@ -21,9 +21,12 @@
        {
          JInfo := JSON::Parse( SelectItem.ValueJsonString());
          lb_SUK_FAACM.Text(JInfo.Get( "ParentSKU").GetString());
          lb_SKUName_FAACM.Text(JInfo.Get( "ParentSKUName").GetString());
          lb_MaterialCode_FAACM.Text(JInfo.Get( "SKU").GetString());
          lb_MaterialName.Text(JInfo.Get( "MaterialName").GetString());
          lb_Unit_FAACM.Text(JInfo.Get( "Unit").GetString());
          lb_Operator_FAACM.Text(ApplicationMacroPlanner.GetUserName());
          lb_MaterialType_FAACM.Text(JInfo.Get( "MaterialType").GetString());
          txt_CustomID_FAACM.Text(JInfo.Get( "CustomCode").GetString());
          txt_CustomName_FAACM.Text(JInfo.Get( "CustomName").GetString());
        }
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnDoubleClick.def
@@ -16,6 +16,7 @@
        // é¢„测订单基本信息
        CustomCode:="";
        CustomName:="";
        SKUName:="";
        SValueJsonString:="";
        // èŽ·å–å®¢æˆ·åç§°å’Œå®¢æˆ·ID
        if(txtSaveForecastData_FM.Text().Length()>0)
@@ -23,6 +24,7 @@
           jForecast := JSON::Parse( txtSaveForecastData_FM.Text());
           CustomCode := jForecast.Get( "CustomCode").GetString();
           CustomName := jForecast.Get( "CustomName").GetString();
           SKUName := jForecast.Get( "SKUName").GetString();
        }
        
        if(selection.MaterialType()="半成品")
@@ -33,7 +35,7 @@
            JForecast := JSON::Parse(txtSaveForecastData_FM.Text());
            ForecastID := JForecast.Get( "ForecastID").GetString();
          }
         jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.NeedQty(), ForecastID,"-",selection.NeedDate());
         jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.NeedQty(), ForecastID,"-",selection.NeedDate(),GlobalOTDTable);
          if(jResult.Get( "Status").GetBoolean())
          {
                de_dh_FM_ProductMP.FixedFilter( "object.ParentSKU() = " +  selection.SKU().AsQUILL()
@@ -57,6 +59,7 @@
                        .Add( "Unit",selection.Unit())
                        .Add( "CustomCode",CustomCode)
                        .Add( "ParentSKU",lb_SUK_FM.Text())
                        .Add( "ParentSKUName",SKUName)
                        .Add( "CustomName",CustomName).Build().AsString();
          }
          if(isnull( SelectItem))
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Add_FM_OnClick#975.def
@@ -20,12 +20,14 @@
      CustomName:="";
      SValue:="";
      SValueJsonString:="";
      SKUName:="";
      // èŽ·å–å®¢æˆ·åç§°å’Œå®¢æˆ·ID
      if(txtSaveForecastData_FM.Text().Length()>0)
      {
         jForecast := JSON::Parse( txtSaveForecastData_FM.Text());
         CustomCode := jForecast.Get( "CustomCode").GetString();
         CustomName := jForecast.Get( "CustomName").GetString();
         SKUName := jForecast.Get( "SKUName").GetString();
      }
      if(not isnull(selection))
      {
@@ -36,6 +38,7 @@
                    .Add( "Unit",selection.Unit())
                    .Add( "CustomCode",CustomCode)
                    .Add( "ParentSKU",lb_SUK_FM.Text())
                    .Add( "ParentSKUName",SKUName)
                    .Add( "CustomName",CustomName).Build().AsString();
      }
      if( isnull( SelectItem))
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel351.def
@@ -11,9 +11,10 @@
      BaseType: 'WebButton'
      Properties:
      [
        ButtonSize: 'compact'
        Description: '订单新增反签/授权'
        Label: '订单新增反签/授权'
        Taborder: 1
        Taborder: 0
      ]
      ResponseDefinitions:
      [
@@ -39,9 +40,10 @@
      BaseType: 'WebButton'
      Properties:
      [
        ButtonSize: 'compact'
        Description: '原料新增反签/授权'
        Label: '原料新增反签/授权'
        Taborder: 2
        Taborder: 1
      ]
      ResponseDefinitions:
      [
@@ -61,28 +63,17 @@
        }
      ]
    }
    Component btn_InitialData778
    {
      #keys: '[414724.0.115504406]'
      BaseType: 'WebButton'
      Properties:
      [
        Description: '加载数据(假的,后续需要对接数据)'
        Label: '加载预测订单数据'
        Taborder: 0
        Visible: false
      ]
    }
    Component btn_OrderH_FOF
    {
      #keys: '[414724.0.165490408]'
      BaseType: 'WebButton'
      Properties:
      [
        ButtonSize: 'compact'
        Description: 'ERO订单冲减'
        Image: 'AMMUNITION_BOX_CLOSED'
        Label: 'ERP订单冲减'
        Taborder: 3
        Taborder: 2
      ]
    }
    Component txt_QueryContent_FOF
@@ -92,7 +83,7 @@
      Properties:
      [
        PlaceHolder: '模糊搜索'
        Taborder: 4
        Taborder: 3
      ]
    }
    Component btn_Query_FOF
@@ -105,7 +96,7 @@
        Description: '查询'
        Image: 'VIEW'
        Label: '查询'
        Taborder: 5
        Taborder: 4
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Material_FOF503_OnClick#222.def
@@ -18,6 +18,7 @@
        {
           MacroPlan.H_MessagePassing(relnew,FKey :="FrmOrderForecast",ItemKey := "ListSelect",
                                       ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                       .Add( "SKUName",selection.SKUName())
                                                                       .Add( "Util",selection.Unit())
                                                                       .Add( "CustomCode",selection.CustomCode())
                                                                       .Add( "CustomName",selection.CustomName())
@@ -28,6 +29,7 @@
        else
        {
          SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                                   .Add( "SKUName",selection.SKUName())
                                                   .Add( "Util",selection.Unit())
                                                   .Add( "CustomCode",selection.CustomCode())
                                                   .Add( "CustomName",selection.CustomName())
@@ -36,7 +38,7 @@
                                                   .Add( "NeedTime",selection.Month().AsQUILL()).Build().AsString());
        }
        
        jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.ID(),"-",selection.Month());
        jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.ID(),"-",selection.Month(),GlobalOTDTable);
        if(jResult.Get( "Status").GetBoolean())
        {
            Application.OpenForm( "FrmMaterial","popout");
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Order_FOF449_OnClick#880.def
@@ -16,10 +16,12 @@
        SelectItem :=  select( MacroPlan,H_MessagePassing,Obj,Obj.FKey()="FrmOrderForecast" and Obj.ItemKey()="ListSelect");
        if( isnull( SelectItem))
        {
           MacroPlan.H_MessagePassing(relnew,FKey :="FrmOrderForecast",ItemKey := "ListSelect",
                                      ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                       .Add( "Util",selection.Unit())
                                                                       .Add( "CustomCode",selection.CustomCode())
                                                                       .Add( "SKUName",selection.SKUName())
                                                                       .Add( "CustomName",selection.CustomName()).Build().AsString());
        }
        else
@@ -27,6 +29,7 @@
          SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                                   .Add( "Util",selection.Unit())
                                                   .Add( "CustomCode",selection.CustomCode())
                                                   .Add( "SKUName",selection.SKUName())
                                                   .Add( "CustomName",selection.CustomName()).Build().AsString());
        }
        Application.OpenForm( "FrmAuthorizeAndCountersign_Order","modal");  
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_InitialData778_OnClick#971.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_liH_Forecast_OnDoubleClick.def
@@ -16,6 +16,7 @@
      {
         MacroPlan.H_MessagePassing(relnew,FKey :="FrmOrderForecast",ItemKey := "ListSelect",
                                     ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                       .Add( "SKUName",selection.SKUName())
                                                                       .Add( "Util",selection.Unit())
                                                                       .Add( "CustomCode",selection.CustomCode())
                                                                       .Add( "CustomName",selection.CustomName())
@@ -26,6 +27,7 @@
      else
      {
        SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                                 .Add( "SKUName",selection.SKUName())
                                                 .Add( "Util",selection.Unit())
                                                 .Add( "CustomCode",selection.CustomCode())
                                                 .Add( "CustomName",selection.CustomName())
@@ -34,7 +36,7 @@
                                                 .Add( "NeedTime",selection.Month().AsQUILL()).Build().AsString());
      }
      
      jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.ID(),"-",selection.Month());
      jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.ID(),"-",selection.Month(),GlobalOTDTable );
      if(jResult.Get( "Status").GetBoolean())
      {
        Application.OpenForm( "FrmMaterial","popout");
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_List212.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_listActionBarPage441.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_listContextMenu182.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Response_Button593_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Response_ButtonERP¶©µ¥_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/_ROOT_Component_Frm_TEST.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_SWF_DialogCeateNextStepDefinitionDependency/Component_pnlContent.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_SWF_DialogCeateNextStepDefinitionDependency/_ROOT_Component_SWF_DialogCeateNextStepDefinitionDependency.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,351 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_legacy_1
      {
        title: 'Scenario manager'
        shown: true
        componentID: 'FormScenarioManager'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 8
          columnPosition: 1
          columnSpan: 5
        }
        components
        {
          FormScenarioManager_ListScenario
          {
          }
          FormScenarioManager_DataSetLevelScenario
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 90
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 277
            }
            column_ChangedBy
            {
              columnId: 'ChangedBy'
              dataPath: 'ChangedBy'
              dataType: 'string'
              title: 'Changed by'
              index: 2
              subtotals: ''
              width: 106
            }
            column_ChangedOn
            {
              columnId: 'ChangedOn'
              dataPath: 'ChangedOn'
              dataType: 'datetime'
              title: 'Changed on'
              index: 3
              subtotals: ''
              width: 99
            }
            column_StorageMode
            {
              columnId: 'StorageMode'
              dataPath: 'StorageMode'
              dataType: 'string'
              title: 'StorageMode'
              index: 4
              subtotals: ''
              width: 40
            }
          }
        }
      }
      form_legacy_2
      {
        title: 'Assumptions'
        shown: true
        componentID: 'FormAssumptions'
        layout
        {
          mode: 'open'
          rowPosition: 9
          rowSpan: 8
          columnPosition: 1
          columnSpan: 5
        }
        components
        {
          FormAssumptions_ListAssumptions
          {
          }
          FormAssumptions_DataSetLevelAssumptions
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              title: '类别'
              index: 1
              subtotals: ''
              width: 108
            }
            column_Importance
            {
              columnId: 'Importance'
              dataPath: 'Importance'
              dataType: 'string'
              title: '重要性'
              index: 2
              subtotals: ''
              width: 110
            }
            column_Title
            {
              columnId: 'Title'
              dataPath: 'Title'
              dataType: 'string'
              title: '标题'
              index: 3
              subtotals: ''
              width: 150
            }
            column_ChangedBy
            {
              columnId: 'ChangedBy'
              dataPath: 'ChangedBy'
              dataType: 'string'
              title: 'Changed by'
              index: 4
              subtotals: ''
              width: 150
            }
            column_CreatedOn
            {
              columnId: 'CreatedOn'
              dataPath: 'CreatedOn'
              dataType: 'datetime'
              title: 'Created on'
              index: 5
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormScenariosKPIsComparison
      {
        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
        shown: true
        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 16
          columnPosition: 6
          columnSpan: 7
        }
        components
        {
          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 200
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_DisplayValue
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'DisplayValue'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: ''
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'KPISetting.DisplayIndex'"
                  }
                }
              }
            }
          }
        }
      }
      form_FormOptimizerPuzzles
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 0
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI
      {
        title: 'KPI Dashboard'
        shown: true
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 1
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPISelection'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    index: 3
    image: 'ELEMENTS_TREE_EDIT'
    page: 'applicationDevelopmentActionBarPageDef'
    group: ''
    description: ''
  }
  formatversion: 2
  id: 'Business_Type_Maintain'
  name: 'Business Type Maintain'
  isglobal: false
  isroot: true
}
_Main/UI/MacroPlannerWebApp/Views/FillingCapacityOrder.vw
@@ -180,10 +180,10 @@
    userconfigurableinformation
    {
    }
    image: ''
    page: ''
    group: ''
    index: 14
    image: ''
    index: 0
    description: ''
  }
  formatversion: 2
_Main/UI/MacroPlannerWebApp/Views/FillingCapacityOrderHistorical.vw
@@ -2,10 +2,10 @@
{
  viewcontents
  {
    image: ''
    page: ''
    group: ''
    index: 0
    image: ''
    description: ''
  }
  formatversion: 2
_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw
@@ -2244,10 +2244,10 @@
    userconfigurableinformation
    {
    }
    image: ''
    page: ''
    group: ''
    index: 15
    image: ''
    index: 0
    description: ''
  }
  formatversion: 2
_Main/UI/MacroPlannerWebApp/Views/PriorityTest.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2745 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormBusinessType
      {
        title: 'QTIANMA_JITUAN::FormBusinessType'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormBusinessType'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 11
          columnPosition: 9
          columnSpan: 4
        }
        components
        {
          FormBusinessType_ListBusinessType
          {
          }
          FormBusinessType_DataSetLevelBusinessType
          {
            groupDepth: -1
            column_BusinessTypeName
            {
              columnId: 'BusinessTypeName'
              dataPath: 'BusinessTypeName'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormPriorityResult
      {
        title: 'QTIANMA_JITUAN::FormPriorityResult'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormPriorityResult'
        layout
        {
          mode: 'open'
          rowPosition: 13
          rowSpan: 11
          columnPosition: 1
          columnSpan: 4
        }
        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: 1
          rowSpan: 12
          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: 496
            }
            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: 1
          rowSpan: 11
          columnPosition: 5
          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
            }
          }
        }
      }
      form_FormPriorityPolicy
      {
        title: 'QTIANMA_JITUAN::FormPriorityPolicy'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormPriorityPolicy'
        layout
        {
          mode: 'open'
          rowPosition: 12
          rowSpan: 14
          columnPosition: 5
          columnSpan: 7
        }
        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: 433
            }
            column_CalculateValue
            {
              columnId: 'CalculateValue'
              dataPath: 'CalculateValue'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 644
            }
            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_FormOptimizerPuzzles
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 0
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 1
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_1
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 2
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_1
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 3
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_2
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 4
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_2
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 5
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_3
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 6
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_3
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 7
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_4
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 8
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_4
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 9
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_5
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 10
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_5
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 11
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_6
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 12
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_6
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 13
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_7
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 14
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_7
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 15
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormSanityCheck
      {
        title: 'Sanity Check'
        shown: false
        componentID: 'FormSanityCheck'
        layout
        {
          mode: 'dockright'
          index: 16
        }
        components
        {
          FormSanityCheck_PanelSanityCheckToolbar
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckContent
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckGroup
          {
            sizeRatio: 4
          }
          FormSanityCheck_ListSanityCheckGroup
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckGroup
          {
            groupDepth: -1
            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Group
            {
              columnId: 'Group'
              dataPath: 'Group'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 270
            }
            column__Expr3
            {
              columnId: '_Expr3'
              dataPath: '_Expr3'
              dataType: 'number'
              index: 4
              subtotals: ''
              width: 95
            }
          }
          FormSanityCheck_PanelSanityCheckMessage
          {
            sizeRatio: 5
          }
          FormSanityCheck_ListSanityCheckMessage
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckMessage
          {
            groupDepth: -1
            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Messages
            {
              columnId: 'Messages'
              dataPath: 'Messages'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 32
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 585
            }
          }
        }
      }
      form_FormOptimizerPuzzles_8
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 17
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_8
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 18
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_9
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 19
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_9
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 20
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_10
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 21
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_10
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 22
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_11
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 23
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_11
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 24
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_12
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 25
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_12
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 26
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_13
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 27
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_13
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 28
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_14
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 29
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_14
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 30
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormOptimizerPuzzles_15
      {
        title: 'Optimizer Puzzles'
        shown: false
        componentID: 'FormOptimizerPuzzles'
        layout
        {
          mode: 'dockright'
          index: 31
        }
        components
        {
          FormOptimizerPuzzles_ListOptimizerPuzzles
          {
          }
          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 109
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              title: '描述'
              index: 2
              subtotals: ''
              width: 207
            }
          }
        }
      }
      form_FormKPI_15
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 32
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              title: 'All constraints'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 1
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormSanityCheck_1
      {
        title: 'Sanity Check'
        shown: false
        componentID: 'FormSanityCheck'
        layout
        {
          mode: 'dockright'
          index: 33
        }
        components
        {
          FormSanityCheck_PanelSanityCheckToolbar
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckContent
          {
            sizeRatio: 1
          }
          FormSanityCheck_PanelSanityCheckGroup
          {
            sizeRatio: 4
          }
          FormSanityCheck_ListSanityCheckGroup
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckGroup
          {
            groupDepth: -1
            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Group
            {
              columnId: 'Group'
              dataPath: 'Group'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 270
            }
            column__Expr3
            {
              columnId: '_Expr3'
              dataPath: '_Expr3'
              dataType: 'number'
              index: 4
              subtotals: ''
              width: 95
            }
          }
          FormSanityCheck_PanelSanityCheckMessage
          {
            sizeRatio: 5
          }
          FormSanityCheck_ListSanityCheckMessage
          {
          }
          FormSanityCheck_DataSetLevelSanityCheckMessage
          {
            groupDepth: -1
            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_Show
            {
              columnId: 'Show'
              dataPath: 'Show'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 32
            }
            column_Category
            {
              columnId: 'Category'
              dataPath: 'Category'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 32
            }
            column_Messages
            {
              columnId: 'Messages'
              dataPath: 'Messages'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 32
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 585
            }
          }
        }
      }
      form_FormKPI_16
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 34
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Metals_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Food_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Empty_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 0
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormKPI_17
      {
        title: 'KPI Dashboard'
        shown: false
        componentID: 'FormKPI'
        layout
        {
          mode: 'dockright'
          index: 35
        }
        components
        {
          FormKPI_PanelKPI
          {
            sizeRatio: 1
            activeChild: 'PanelKPIDashboard'
          }
          FormKPI_PanelKPIDashboard
          {
            sizeRatio: 1
          }
          FormKPI_PanelKPISelection
          {
            sizeRatio: 1
          }
          FormKPI_ListKPISelection
          {
            QuillViewData
            {
              Metals_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Food_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
              Empty_KPISetting: 'Fulfillment;Fulfillment target;On time fulfillment;On time in full;Sales'
            }
          }
          FormKPI_DataSetLevelKPISelection
          {
            groupDepth: -1
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              title: '名称'
              index: 0
              subtotals: ''
              width: 200
            }
          }
        }
      }
      form_FormPriorities
      {
        title: 'Priorities'
        shown: true
        componentID: 'FormPriorities'
        layout
        {
          mode: 'dockright'
          index: 36
        }
        components
        {
          FormPriorities_ListPriority
          {
          }
          FormPriorities_DataSetLevelPriority
          {
            groupDepth: -1
            column_All_constraints
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 32
            }
            column_ImgHasSalesDemand
            {
              columnId: 'ImgHasSalesDemand'
              dataPath: 'ImgHasSalesDemand'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 30
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 95
            }
            column_Weight
            {
              columnId: 'Weight'
              dataPath: 'Weight'
              dataType: 'real'
              index: 3
              subtotals: ''
              width: 95
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 15
    image: ''
    description: ''
  }
  formatversion: 2
  id: 'PriorityTest'
  name: 'PriorityTest'
  isglobal: false
  isroot: true
}
_Main/UI/MacroPlannerWebApp/Views/Test.vw
@@ -159,6 +159,800 @@
          }
        }
      }
      form_FormCustomerAndForecastOrder
      {
        title: 'QTIANMA_JITUAN::FormCustomerAndForecastOrder'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormCustomerAndForecastOrder'
        layout
        {
          mode: 'open'
          rowPosition: 16
          rowSpan: 16
          columnPosition: 1
          columnSpan: 4
        }
        components
        {
          FormCustomerAndForecastOrder_PanelButton
          {
            sizeRatio: 1
          }
          FormCustomerAndForecastOrder_ListCustomerAndFillingCapacityOrder
          {
          }
          FormCustomerAndForecastOrder_DataSetLevelCustomerAndFillingCapacityOrder
          {
            groupDepth: -1
            column_VerNo
            {
              columnId: 'VerNo'
              dataPath: 'VerNo'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_OrderID
            {
              columnId: 'OrderID'
              dataPath: 'OrderID'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_ProductID
            {
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_BusinessType
            {
              columnId: 'BusinessType'
              dataPath: 'BusinessType'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 150
            }
            column_Customer
            {
              columnId: 'Customer'
              dataPath: 'Customer'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 150
            }
            column_ServiceType
            {
              columnId: 'ServiceType'
              dataPath: 'ServiceType'
              dataType: 'string'
              index: 5
              subtotals: ''
              width: 150
            }
            column_Quantity
            {
              columnId: 'Quantity'
              dataPath: 'Quantity'
              dataType: 'real'
              index: 6
              subtotals: ''
              width: 150
            }
            column_UnitOfMeasureName
            {
              columnId: 'UnitOfMeasureName'
              dataPath: 'UnitOfMeasureName'
              dataType: 'string'
              index: 7
              subtotals: ''
              width: 150
            }
            column_PanelBigSheetQuantity
            {
              columnId: 'PanelBigSheetQuantity'
              dataPath: 'PanelBigSheetQuantity'
              dataType: 'real'
              index: 8
              subtotals: ''
              width: 150
            }
            column_SalesAmount
            {
              columnId: 'SalesAmount'
              dataPath: 'SalesAmount'
              dataType: 'number'
              index: 9
              subtotals: ''
              width: 150
            }
            column_ForecastDemandDate
            {
              columnId: 'ForecastDemandDate'
              dataPath: 'ForecastDemandDate'
              dataType: 'date'
              index: 10
              subtotals: ''
              width: 150
            }
            column_DemandDate
            {
              columnId: 'DemandDate'
              dataPath: 'DemandDate'
              dataType: 'date'
              index: 11
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormFillingCapacityOrder
      {
        title: 'QTIANMA_JITUAN::FormFillingCapacityOrder'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormFillingCapacityOrder'
        layout
        {
          mode: 'open'
          rowPosition: 16
          rowSpan: 16
          columnPosition: 5
          columnSpan: 8
        }
        components
        {
          FormFillingCapacityOrder_ListFillingCapacityOrder
          {
          }
          FormFillingCapacityOrder_DataSetLevelFillingCapacityOrder
          {
            groupDepth: -1
            column_VerNo
            {
              columnId: 'VerNo'
              dataPath: 'VerNo'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_ProductID
            {
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_BusinessType
            {
              columnId: 'BusinessType'
              dataPath: 'BusinessType'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_SalesSegmentName
            {
              columnId: 'SalesSegmentName'
              dataPath: 'SalesSegmentName'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 150
            }
            column_StockingPointID
            {
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 150
            }
            column_Customer
            {
              columnId: 'Customer'
              dataPath: 'Customer'
              dataType: 'string'
              index: 5
              subtotals: ''
              width: 150
            }
            column_Quantity
            {
              columnId: 'Quantity'
              dataPath: 'Quantity'
              dataType: 'real'
              index: 6
              subtotals: ''
              width: 150
            }
            column_UnitOfMeasureName
            {
              columnId: 'UnitOfMeasureName'
              dataPath: 'UnitOfMeasureName'
              dataType: 'string'
              index: 7
              subtotals: ''
              width: 150
            }
            column_PanelBigSheetQuantity
            {
              columnId: 'PanelBigSheetQuantity'
              dataPath: 'PanelBigSheetQuantity'
              dataType: 'real'
              index: 8
              subtotals: ''
              width: 150
            }
            column_SalesAmount
            {
              columnId: 'SalesAmount'
              dataPath: 'SalesAmount'
              dataType: 'number'
              index: 9
              subtotals: ''
              width: 150
            }
            column_ForecastDemandDate
            {
              columnId: 'ForecastDemandDate'
              dataPath: 'ForecastDemandDate'
              dataType: 'date'
              index: 10
              subtotals: ''
              width: 150
            }
            column_DemandDate
            {
              columnId: 'DemandDate'
              dataPath: 'DemandDate'
              dataType: 'date'
              index: 11
              subtotals: ''
              width: 150
            }
            column_OrderType
            {
              columnId: 'OrderType'
              dataPath: 'OrderType'
              dataType: 'string'
              index: 12
              subtotals: ''
              width: 150
            }
          }
        }
      }
      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
    {
_Main/UI/MacroPlannerWebApp/Views/½Ó¿Ú²âÊÔ.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,223 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormInterfaceTest
      {
        title: 'QTIANMA_JITUAN::FormInterfaceTest'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormInterfaceTest'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 16
          columnPosition: 1
          columnSpan: 6
        }
        components
        {
          FormInterfaceTest_PanelInterfaceOption1
          {
            sizeRatio: 1
          }
          FormInterfaceTest_PanelInterfaceOption2
          {
            sizeRatio: 1
          }
          FormInterfaceTest_PanelInterfaceOption3
          {
            sizeRatio: 1
          }
          FormInterfaceTest_PanelInterfaceOption4
          {
            sizeRatio: 1
          }
          FormInterfaceTest_PanelInterfaceTest
          {
            sizeRatio: 1
          }
          FormInterfaceTest_PanelInterfaceGlobal_BrokerExecuteLog
          {
            sizeRatio: 1
          }
          FormInterfaceTest_ListInterfaceTest
          {
          }
          FormInterfaceTest_DataSetLevelInterfaceTest
          {
            groupDepth: -1
            sort: 'IsSuccess'
            column_ImageExecutionStatus
            {
              columnId: 'ImageExecutionStatus'
              dataPath: 'ImageExecutionStatus'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 37
            }
            column_ExecuteUser
            {
              columnId: 'ExecuteUser'
              dataPath: 'ExecuteUser'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 110
            }
            column_IsSuccess
            {
              columnId: 'IsSuccess'
              dataPath: 'IsSuccess'
              dataType: 'boolean'
              index: 2
              subtotals: ''
              width: 96
            }
            column_BrokerName
            {
              columnId: 'BrokerName'
              dataPath: 'BrokerName'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 229
            }
            column_ElementTotal
            {
              columnId: 'ElementTotal'
              dataPath: 'ElementTotal'
              dataType: 'number'
              index: 4
              subtotals: ''
              width: 87
            }
            column_ErrorDateTime
            {
              columnId: 'ErrorDateTime'
              dataPath: 'ErrorDateTime'
              dataType: 'string'
              index: 5
              subtotals: ''
              width: 121
            }
            column_ErrorMessage
            {
              columnId: 'ErrorMessage'
              dataPath: 'ErrorMessage'
              dataType: 'string'
              index: 6
              subtotals: ''
              width: 86
            }
            column_ErrorNo
            {
              columnId: 'ErrorNo'
              dataPath: 'ErrorNo'
              dataType: 'number'
              index: 7
              subtotals: ''
              width: 86
            }
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              index: 8
              subtotals: ''
              width: 150
            }
            column_SuccessDateTime
            {
              columnId: 'SuccessDateTime'
              dataPath: 'SuccessDateTime'
              dataType: 'string'
              index: 9
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormShowInterfaceData
      {
        title: 'QTIANMA_JITUAN::FormShowInterfaceData'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormShowInterfaceData'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 16
          columnPosition: 7
          columnSpan: 6
        }
        components
        {
          FormShowInterfaceData_MatrixEditorShowInterfaceData
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 200
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QTIANMA_JITUAN::FormShowInterfaceData.MatrixEditorShowInterfaceData'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_Value
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'Value'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'ColumnIndex'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'RowNr'"
                  }
                }
              }
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    image: 'SKIN_TIGER'
    page: ''
    group: ''
    index: 0
    description: ''
  }
  formatversion: 2
  id: '接口测试'
  name: '接口测试'
  isglobal: false
  isroot: true
}
_var/_Main/ProjSettings/MacroPlannerWebApp/Views/FillingCapacityOrder.vw
ÎļþÒÑɾ³ý
_var/_Main/ProjSettings/MacroPlannerWebApp/Views/FillingCapacityOrderHistorical.vw
@@ -2,6 +2,9 @@
{
  viewcontents
  {
    userconfigurableinformation
    {
    }
    forms
    {
      form_FormCustomerAndForecastOrder
@@ -417,18 +420,11 @@
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 15
    image: ''
    description: ''
    index: 0
  }
  formatversion: 2
  id: 'FillingCapacityOrderHistorical'
  name: 'FillingCapacityOrderHistorical'
  isglobal: false
  isroot: true
  isroot: false
}