limj
2023-09-25 76c7b6120bb5a3076a31f3c3eb7e068f290f68d3
Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lmj
已修改89个文件
已添加97个文件
已删除5个文件
4652 ■■■■ 文件已修改
LibMacroPlanner/BL/Type_Process_MP/StaticMethod_GetDependentDemandEnd#969.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Export.qbl 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Import.qbl 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_CapacityAllocationResult.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDTable_GlobalOTD.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_H_MaterialInfo_MacroPlan_MacroPlan_H_MaterialInfo.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BaseConversionFactor/StaticMethod_DoSync.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/Attribute_Date.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/Attribute_Description.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/Attribute_ID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/Attribute_ManufacturedDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/Attribute_StockingPointID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/Attribute_UserQuantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/DeclarativeReferenceRelation_CalcCapacityAllocationResultsRuleConfiguration.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_Division.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_ModuleMaterialCode.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_PanelMaterialCode.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_StockingPointID.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Import.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/TypeIndex_CapacityAllocationResultsRuleConfigurationTypeIndex.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/_ROOT_Type_CapacityAllocationResultsRuleConfiguration.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CustomerOrder/StaticMethod_LockUnlock.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Forecast/StaticMethod_CreateOrUpdate.qbl 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperation/StaticMethod_FindMinSeq.qbl 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_Forecast/Attribute_StockingPointID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetALlBOM.qbl 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetBOMBySKU.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetProductInfo#1.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetUnitBySKU.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastData.qbl 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastDataEx.qbl 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_FunctionClass/_ROOT_Type_H_FunctionClass.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_ForecastID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_ID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_MaterialName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_MaterialType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_NeedDate.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_NeedQty.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_OrgCode.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_ParentSKU.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_SKU.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_StockPoint.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_Unit.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/Attribute_VCode.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_H_MaterialInfo/_ROOT_Type_H_MaterialInfo.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoSync.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MPSync/StaticMethod_TestData.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingBaseConversionFactorData.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingInventoryValueAndCostData.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting#576.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingProductInLaneData.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_MappingUnitOfMeasureData.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/StaticMethod_DoSync#618.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/StaticMethod_DoSync.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer.qbl 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Operation/Method_GetHasValidOperationInputOutput.qbl 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Operation/Method_OnCommitCustom.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_SalesSegment_MP/StaticMethod_DoSync.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl 100 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompareExport.qbl 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ScenarioManager/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpointFromJson.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UnitOfMeasure_MP/StaticMethod_DoSync.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationDevelopmentActionBarPageDef#1.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlContent.def 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_Edit.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_New.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnOk_OnClick.def 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/_ROOT_Component_DialogCreateEditCapacityAllocationResultsRuleConfiguration.def 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form234/Component_List174.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_ListCapacityAllocationResults.def 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_PanelCapacityAllocationResults.def 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listActionBarPageCapacityAllocationResults.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listContextMenuCapacityAllocationResults.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_ButtonGenerateCapacityAllocationResults_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR#39.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/_ROOT_Component_FormCapacityAllocationResults.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_PanelImportAndExport.def 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listActionBarPageCapacityAllocationResultsRuleConfiguration.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_DataHolderSelectCapacityAllocationResultsRuleConfiguration_OnDataCh.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuDelete_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuEdit_OnClick.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuNew_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuSelectAll_OnClic.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Export_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Import_OnClick.def 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/_ROOT_Component_FormCapacityAllocationResultsRuleConfiguration.def 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_ListHedgingOfLog.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog221.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog593#93.def 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog593.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog761.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Response_PanelHedgingOfLog593_93_btn_Query_FHO_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/_ROOT_Component_FormHedgingOfLog.def 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/Component_ListMaterialPurchase.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/Component_PanelMaterialPurchase.def 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/Component_PanelMaterialPurchase354.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/_ROOT_Component_FormMaterialPurchase.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock#844.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader#545.def 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/_ROOT_Component_FormPanelMaterialTianHua.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Component_ListReleaseRecord.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Component_ListReleaseRecord243.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Component_PanelReleaseRecord423.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Response_ListReleaseRecord_OnSelectionChanged.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Response_OnCreated.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/_ROOT_Component_FormReleaseRecord.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Material/Response_OnCreated.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Component_List832.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Component_Panel418.def 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnDoubleClick.def 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnSelectionChanged.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_OnCreated.def 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Add_FM_OnClick#975.def 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Add_FM_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Query_FM_OnClick.def 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/_ROOT_Component_FrmMaterial.def 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel351.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Material_FOF503_OnClick#222.def 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_OrderH_FOF_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_liH_Forecast_OnDoubleClick.def 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmOrderResult/Component_List782.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmRAShow/Component_List696.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FrmRAShow/Component_Panel224.def 1 ●●●● 补丁 | 查看 | 原始文档 | 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 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw 451 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Test.vw 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_var/_Main/ProjSettings/MacroPlannerWebApp/TypeConfigs/CustomerOrder.qtc 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Test.vw 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_Process_MP/StaticMethod_GetDependentDemandEnd#969.qbl
@@ -16,10 +16,14 @@
      //get period of start 
      ddstartperiod := select( gp.MacroPlan(), PlanningPeriod, pp, pp.Start() <= start and pp.End() > start );
      
      // if not start from middle and leadtime < period task period duration, make sure dependent demand end before period start
      periodstart :=  ifexpr( not gp.IsOperationLeadTimeLogicFromMiddle() and period.Duration() < process.LeadTime(), period.Start(), DateTime::MaxDateTime() );
      value := minvalue( start + process.LeadTime(), start + ddstartperiod.Duration(), periodstart );
      // Tianma fix 20230920
      if( not isnull( ddstartperiod ) )
      {
        // if not start from middle and leadtime < period task period duration, make sure dependent demand end before period start
        periodstart :=  ifexpr( not gp.IsOperationLeadTimeLogicFromMiddle() and period.Duration() < process.LeadTime(), period.Start(), DateTime::MaxDateTime() );
        value := minvalue( start + process.LeadTime(), start + ddstartperiod.Duration(), periodstart );
      }
    }
    
    return value;
_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
Quintiq file version 2.0
#parent: #root
EDIBroker GlobalOTDTable_CARRC_Export
{
  MDSDefinition: GlobalOTDTable
  TimeZone: 'ACT'
  UseOSTimeZone: false
  EDIModelLink.Source Source11
  {
    EDIMLTable CapacityAllocationResultsRuleConfiguration
    {
      PrimaryKeyColumns: ModuleMaterialCode
      PrimaryKeyColumns: PanelMaterialCode
      PrimaryKeyColumns: StockingPointID
      TargetType: CapacityAllocationResultsRuleConfiguration
      TypeIndex: CapacityAllocationResultsRuleConfigurationTypeIndex
      EDIMLColumn Division { Attribute: Division ValueType: String }
      EDIMLColumn ModuleMaterialCode { Attribute: ModuleMaterialCode ValueType: String }
      EDIMLColumn PanelMaterialCode { Attribute: PanelMaterialCode ValueType: String }
      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
    }
  }
  EDITransformation.Transformation Transformation11
  {
    EDITableTransformation
    {
      InputTable: CapacityAllocationResultsRuleConfiguration
      OutputTable: CapacityAllocationResultsRuleConfiguration
      EDIColumnMatch { InputColumn: Division OutputColumn: Division }
      EDIColumnMatch { InputColumn: ModuleMaterialCode OutputColumn: ModuleMaterialCode }
      EDIColumnMatch { InputColumn: PanelMaterialCode OutputColumn: PanelMaterialCode }
      EDIColumnMatch { InputColumn: StockingPointID OutputColumn: StockingPointID }
    }
  }
  EDIXLSLink.Destination Destination12
  {
    FileName: 'Destination12'
    EDIXLSLinkTable CapacityAllocationResultsRuleConfiguration
    {
      Columns:
      [
        EDIXLSLinkColumn Division { ValueType: String }
        EDIXLSLinkColumn ModuleMaterialCode { ValueType: String }
        EDIXLSLinkColumn PanelMaterialCode { ValueType: String }
        EDIXLSLinkColumn StockingPointID { ValueType: String }
      ]
    }
  }
}
_Main/BL/EDI/Broker_GlobalOTDTable_CARRC_Import.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
Quintiq file version 2.0
#parent: #root
EDIBroker GlobalOTDTable_CARRC_Import
{
  MDSDefinition: GlobalOTDTable
  TimeZone: 'ACT'
  UseOSTimeZone: false
  EDIModelLink.Destination Destination13
  {
    EDIMLTable CapacityAllocationResultsRuleConfiguration
    {
      PrimaryKeyColumns: ModuleMaterialCode
      PrimaryKeyColumns: PanelMaterialCode
      PrimaryKeyColumns: StockingPointID
      TargetType: CapacityAllocationResultsRuleConfiguration
      TypeIndex: CapacityAllocationResultsRuleConfigurationTypeIndex
      EDIMLColumn Division { Attribute: Division ValueType: String }
      EDIMLColumn ModuleMaterialCode { Attribute: ModuleMaterialCode ValueType: String }
      EDIMLColumn PanelMaterialCode { Attribute: PanelMaterialCode ValueType: String }
      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
    }
  }
  EDITransformation.Transformation Transformation12
  {
    EDITableTransformation
    {
      InputTable: CapacityAllocationResultsRuleCo
      OutputTable: CapacityAllocationResultsRuleConfiguration
      EDIColumnMatch { InputColumn: Division OutputColumn: Division }
      EDIColumnMatch { InputColumn: ModuleMaterialCode OutputColumn: ModuleMaterialCode }
      EDIColumnMatch { InputColumn: PanelMaterialCode OutputColumn: PanelMaterialCode }
      EDIColumnMatch { InputColumn: StockingPointID OutputColumn: StockingPointID }
    }
  }
  EDIXLSLink.Source Source12
  {
    FileName: '产能分配结果规则.xlsx'
    EDIXLSLinkTable CapacityAllocationResultsRuleCo
    {
      Columns:
      [
        EDIXLSLinkColumn Division { ValueType: String }
        EDIXLSLinkColumn ModuleMaterialCode { ValueType: String }
        EDIXLSLinkColumn PanelMaterialCode { ValueType: String }
        EDIXLSLinkColumn StockingPointID { ValueType: String }
      ]
    }
  }
}
_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
Quintiq file version 2.0
#parent: #root
EDIBroker GlobalOTDTable_CAR_Export
{
  MDSDefinition: GlobalOTDTable
  TimeZone: 'ACT'
  UseOSTimeZone: false
  EDIModelLink.Source Source13
  {
    EDIMLTable CapacityAllocationResults
    {
      TargetType: CapacityAllocationResults
      EDIMLColumn Date { Attribute: Date ValueType: Date }
      EDIMLColumn Description { Attribute: Description ValueType: String }
      EDIMLColumn Division { Attribute: Division ValueType: String }
      EDIMLColumn ID { Attribute: ID ValueType: String }
      EDIMLColumn ManufacturedDate { Attribute: ManufacturedDate ValueType: Date }
      EDIMLColumn ModuleBase { Attribute: ModuleBase ValueType: String }
      EDIMLColumn ModuleMaterialCode { Attribute: ModuleMaterialCode ValueType: String }
      EDIMLColumn ModuleMeasurementUnit { Attribute: ModuleMeasurementUnit ValueType: String }
      EDIMLColumn NumberOfModules { Attribute: NumberOfModules ValueType: Real }
      EDIMLColumn NumberOfPanels { Attribute: NumberOfPanels ValueType: Real }
      EDIMLColumn PanelBase { Attribute: PanelBase ValueType: String }
      EDIMLColumn PanelMaterialCode { Attribute: PanelMaterialCode ValueType: String }
      EDIMLColumn PanelMeasurementUnit { Attribute: PanelMeasurementUnit ValueType: String }
      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
      EDIMLColumn RequirementDate { Attribute: RequirementDate ValueType: Date }
      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
      EDIMLColumn UserQuantity { Attribute: UserQuantity ValueType: Real }
      EDIMLColumn VersionNumber { Attribute: VersionNumber ValueType: String }
    }
  }
  EDITransformation.Transformation Transformation13
  {
    EDITableTransformation
    {
      InputTable: CapacityAllocationResults
      OutputTable: CapacityAllocationResults
      EDIColumnMatch { InputColumn: Date OutputColumn: Date }
      EDIColumnMatch { InputColumn: Description OutputColumn: Description }
      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
      EDIColumnMatch { InputColumn: ManufacturedDate OutputColumn: ManufacturedDate }
      EDIColumnMatch { InputColumn: ProductID OutputColumn: ProductID }
      EDIColumnMatch { InputColumn: StockingPointID OutputColumn: StockingPointID }
      EDIColumnMatch { InputColumn: UserQuantity OutputColumn: UserQuantity }
    }
  }
  EDIXLSLink.Destination Destination14
  {
    FileName: 'Destination14'
    EDIXLSLinkTable CapacityAllocationResults
    {
      Columns:
      [
        EDIXLSLinkColumn Date { ValueType: Date }
        EDIXLSLinkColumn Description { ValueType: String }
        EDIXLSLinkColumn ID { ValueType: String }
        EDIXLSLinkColumn ProductID { ValueType: String }
        EDIXLSLinkColumn StockingPointID { ValueType: String }
        EDIXLSLinkColumn UserQuantity { ValueType: Real }
        EDIXLSLinkColumn ManufacturedDate { ValueType: Date }
      ]
    }
  }
}
_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_CapacityAllocationResult.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAllocationResultsRuleConfiguration_CapacityAllocationResults_CapacityAllocationResults_CapacityAllocationResultsRuleConfiguration
{
  #keys: '1[414702.0.387791788]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide CapacityAllocationResults
  {
    #keys: '3[414702.0.387791790][414702.0.387791789][414702.0.387791791]'
    Cardinality: '1toN'
    ObjectDefinition: CapacityAllocationResultsRuleConfiguration
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAllocationResultsRuleConfiguration
  {
    #keys: '3[414702.0.387791793][414702.0.387791792][414702.0.387791794]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAllocationResults
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_CapacityAllocationResultsRuleConfiguration_GlobalOTDTable_GlobalOTD.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation CapacityAllocationResultsRuleConfiguration_GlobalOTDTable_GlobalOTDTable_CapacityAllocationResultsRuleConfiguration
{
  #keys: '1[414702.0.374991408]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDTable
  {
    #keys: '3[414702.0.374991410][414702.0.374991409][414702.0.374991411]'
    Cardinality: '0to1'
    ObjectDefinition: CapacityAllocationResultsRuleConfiguration
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CapacityAllocationResultsRuleConfiguration
  {
    #keys: '3[414702.0.374991413][414702.0.374991412][414702.0.374991414]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_H_MaterialInfo_MacroPlan_MacroPlan_H_MaterialInfo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation H_MaterialInfo_MacroPlan_MacroPlan_H_MaterialInfo
{
  #keys: '1[414724.0.142347478]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide MacroPlan
  {
    #keys: '3[414724.0.142347480][414724.0.142347479][414724.0.142347481]'
    Cardinality: '0to1'
    ObjectDefinition: H_MaterialInfo
    OwningSide: 'Reference'
  }
  RelationSide.RightSide H_MaterialInfo
  {
    #keys: '3[414724.0.142347483][414724.0.142347482][414724.0.142347484]'
    Cardinality: '1toN'
    ObjectDefinition: MacroPlan
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
@@ -19,19 +19,22 @@
    result := null(ConversionFactor );
    
    if( isnull( source ) or isnull( target ) ) {
        error( "can't find source or target unit of measure" )
        info(  "can't find source or target unit of measure" )
    }
    if( productId <> "" ) {
    if( not isnull( source) and not isnull( target)){
      if( productId <> "" ) {
        product := Product_MP::FindById( macroPlan, productId );
    }else{
      result := BaseConversionFactor::CreateUpdate( source, target, factor, product, isEnable )
      }else{
        result := BaseConversionFactor::CreateUpdate( source, target, factor, product, isEnable )
      }
    
    if( isnull( product ) ) {
          info( "invalid product id" )
      if( isnull( product ) ) {
          info( "单位转换出现无效id,"+productId )
        }else{
          result := BaseConversionFactor::CreateUpdate( source, target, factor, product, isEnable );
        }
    }
    
    return result;
  *]
_Main/BL/Type_BaseConversionFactor/StaticMethod_DoSync.qbl
@@ -1,16 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod DoSync (
  MacroPlan macroPlan
  MacroPlan macroPlan,
  GlobalOTDTable globalOTDTable
)
{
  Description: '单次同步'
  TextBody:
  [*
    // yypsybs Aug-17-2023 (created)
    info( "Product Finished, Start BaseConversionFactor Data Broker" )
    macroPlan.Broker_OTD_BaseConversionFactor().Execute();
    //info( "Product Finished, Start BaseConversionFactor Data Broker" )
    //macroPlan.Broker_OTD_BaseConversionFactor().Execute();
    info( "BaseConversionFactor Data Broker Finished, Start BaseConversionFactor Mapping" )
    macroPlan.MappingBaseConversionFactorData();
    macroPlan.MappingBaseConversionFactorData(globalOTDTable);
  *]
}
_Main/BL/Type_CapacityAllocationResults/Attribute_Date.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Date
{
  #keys: '3[414702.0.388471426][414702.0.388471425][414702.0.388471427]'
  ValueType: Date
}
_Main/BL/Type_CapacityAllocationResults/Attribute_Description.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Description
{
  #keys: '3[414702.0.388471436][414702.0.388471435][414702.0.388471437]'
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResults/Attribute_ID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ID
{
  #keys: '3[414702.0.388471446][414702.0.388471445][414702.0.388471447]'
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResults/Attribute_ManufacturedDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ManufacturedDate
{
  #keys: '3[414702.0.388471486][414702.0.388471485][414702.0.388471487]'
  ValueType: Date
}
_Main/BL/Type_CapacityAllocationResults/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[414702.0.388471456][414702.0.388471455][414702.0.388471457]'
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResults/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414702.0.388471466][414702.0.388471465][414702.0.388471467]'
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResults/Attribute_UserQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute UserQuantity
{
  #keys: '3[414702.0.388471476][414702.0.388471475][414702.0.388471477]'
  ValueType: Real
}
_Main/BL/Type_CapacityAllocationResults/DeclarativeReferenceRelation_CalcCapacityAllocationResultsRuleConfiguration.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
DeclarativeReferenceRelation CalcCapacityAllocationResultsRuleConfiguration
{
  #keys: '1[414702.0.388304510]'
  Expression:
  [*
    targetCapacityAllocationResultsRuleConfiguration := select( this.GlobalOTDTable(), CapacityAllocationResultsRuleConfiguration, tempCARRC,
                                                                tempCARRC.ModuleMaterialCode() = this.ModuleMaterialCode() and
                                                                tempCARRC.PanelMaterialCode() = this.PanelMaterialCode() );
    return targetCapacityAllocationResultsRuleConfiguration;
  *]
  Relation: CapacityAllocationResultsRuleConfiguration
}
_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl
@@ -2,27 +2,32 @@
#parent: #root
StaticMethod CreateDate (
  GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
  MacroPlan macroPlan,
  Scenario scenario
)
{
  TextBody:
  [*
    globalOTDTable.CapacityAllocationResults( relflush );
    
    finaleProduct_MPs := CapacityAllocationResults::ObtainTheFinalOutputProduct( macroPlan );
    finaleProductInStockingPoint_MPs := CapacityAllocationResults::ObtainTheFinalOutputProduct( macroPlan, globalOTDTable );
    
    period_MPS := null( Period_MPs );
    traverse ( macroPlan, PeriodSpecification_MP, psmp, psmp.ID() = "Planning periods" ) {
      period_MPS := selectsortedset( psmp, PeriodSpecificationPeriod.Period_MP, pmp, not pmp.IsHistorical(), pmp.StartDate() );
    }
    
    traverse ( finaleProduct_MPs, Elements, fpmp/*, fpmp.ID() = "ProXOver 1 D2.6 A"*/ ) {
      traverse ( fpmp, ProductInStockingPoint_MP, pisp, /*pisp.Name() = "ProXOver 1 D2.6 A in Finished Cars (France)" and*/ not pisp.IsSystem() ) {
        traverse ( period_MPS, Elements, pmp ) {
          CapacityAllocationResults::IterativeGeneration( globalOTDTable, pisp, 1, null( NewSupply ), -1.0, pmp.StartDate() );
        }
    //    info( pisp.Name() );
    traverse ( finaleProductInStockingPoint_MPs, Elements, fpispmp ) {
      capacityAllocationResultsRuleConfigurations := selectset( globalOTDTable, CapacityAllocationResultsRuleConfiguration, tempCARRC, tempCARRC.ModuleMaterialCode() = fpispmp.ProductID() and tempCARRC.StockingPointID() = 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 );
      }
    }
    traverse ( globalOTDTable, CapacityAllocationResults, car ) {
      car.VersionNumber( scenario.Name() );
    }
  *]
}
_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  GlobalOTDTable globalOTDTable
) as BinaryValue
{
  TextBody:
  [*
    binaryData := globalOTDTable.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
    return binaryData.AsBinaryValue();
  *]
}
_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration2.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
Quintiq file version 2.0
#parent: #root
StaticMethod IterativeGeneration2 (
  GlobalOTDTable globalOTDTable,
  ProductInStockingPoint_MP pisp,
  Date targetDate,
  CapacityAllocationResultsRuleConfigurations carrcs,
  Number numberOfLayers,
  NewSupply firstLevelSupply,
  Real currentLayerDependentDemandQuantity
)
{
  TextBody:
  [*
    numberOfLayers++;
    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 ) {
        if ( numberOfLayers = 1 ) {
          firstLevelSupply := ns;
        }
        ontype( ns.PeriodTask_MP() ) {
          PeriodTaskOperation as pto : {
            info( "Operation周期任务..." );
            traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) {
              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( "-----------------------------------------------------------------------------------------------------------------" );
              CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
                                                               dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
                                                               targetDate,
                                                               carrcs,
                                                               numberOfLayers,
                                                               firstLevelSupply,
                                                               currentLayerDependentDemandQuantity
                                                              );
            }
            carrc := select( carrcs, Elements, carrc, carrc.PanelMaterialCode() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() );
            if ( not isnull( carrc ) ) {
              info( "找到面板物料..." );
              globalOTDTable.CapacityAllocationResults( relnew,
                                                        PanelBase             := pto.Operation().UnitID(),
                                                        PanelMaterialCode     := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
                                                        NumberOfPanels        := currentLayerDependentDemandQuantity,
                                                        PanelMeasurementUnit  := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
                                                        ModuleMaterialCode    := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
                                                        NumberOfModules       := firstLevelSupply.Quantity(),
                                                        ModuleMeasurementUnit := firstLevelSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().UnitOfMeasureName(),
                                                        ModuleBase            := guard( firstLevelSupply.PeriodTask_MP().astype( PeriodTaskOperation ).Operation().UnitID(), "车道运输" ),
                                                        Division              := carrc.Division(),
                                                        RequirementDate       := ns.Start().Date(),
                                                        Date                  := ns.Start().Date(),
                                                        Description           := "",
                                                        ID                    := OS::GenerateGUIDAsString(),
                                                        ProductID             := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(),
                                                        StockingPointID       := "",
                                                        UserQuantity          := currentLayerDependentDemandQuantity,
                                                        ManufacturedDate      := Date::MinDate()
                                                       );
            }
            info( "-----------------------------------------------------------------------------------------------------------------" );
          }
          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( "-----------------------------------------------------------------------------------------------------------------" );
            CapacityAllocationResults::IterativeGeneration2( globalOTDTable,
                                                             targetDependentDemand.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(),
                                                             targetDate,
                                                             carrcs,
                                                             numberOfLayers,
                                                             firstLevelSupply,
                                                             currentLayerDependentDemandQuantity
                                                            );
          }
        }
        if ( numberOfLayers = 1 ) {
          firstLevelSupply := null( NewSupply );
        }
      }
    }
  *]
}
_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl
@@ -1,25 +1,30 @@
Quintiq file version 2.0
#parent: #root
StaticMethod ObtainTheFinalOutputProduct (
  MacroPlan macroPlan
) as owning Product_MPs
  MacroPlan macroPlan,
  GlobalOTDTable globalOTDTable
) as owning ProductInStockingPoint_MPs
{
  TextBody:
  [*
    finaleProducts := construct( Product_MPs );
    //finaleProducts := construct( Product_MPs );
    //
    //traverse ( macroPlan, Product_MP, pmp, pmp.IsLeaf() ) {
    //  flag := true;
    //  traverse ( macroPlan, Routing.RoutingStep.Operation.OperationInput, oi, flag ) {
    //    if ( pmp = oi.ProductInStockingPoint_MP().Product_MP() ) {
    //      flag := false;
    //    }
    //  }
    //  if ( flag ) {
    //    finaleProducts.Add( pmp );
    //  }
    //}
    
    traverse ( macroPlan, Product_MP, pmp, pmp.IsLeaf() ) {
      flag := true;
      traverse ( macroPlan, Routing.RoutingStep.Operation.OperationInput, oi, flag ) {
        if ( pmp = oi.ProductInStockingPoint_MP().Product_MP() ) {
          flag := false;
        }
      }
      if ( flag ) {
        finaleProducts.Add( pmp );
      }
    }
    finaleProductInStockingPoint_MPs := selectset( macroPlan, Product_MP.ProductInStockingPoint_MP, tempPISPMP,
                                                   exists( globalOTDTable, CapacityAllocationResultsRuleConfiguration, tempCARRC, tempCARRC.ModuleMaterialCode() = tempPISPMP.ProductID() and tempCARRC.StockingPointID() = tempPISPMP.StockingPointID() )
                                                  );
    
    return &finaleProducts;
    return &finaleProductInStockingPoint_MPs;
  *]
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_Division.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Division
{
  #keys: '3[414702.0.374991447][414702.0.374991446][414702.0.374991448]'
  Description: '事业部'
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_ModuleMaterialCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute ModuleMaterialCode
{
  #keys: '3[414702.0.374991437][414702.0.374991436][414702.0.374991438]'
  Description: '模组物料编码'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_PanelMaterialCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute PanelMaterialCode
{
  #keys: '3[414702.0.374991427][414702.0.374991426][414702.0.374991428]'
  Description: '面板物料编码'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414702.0.375010145][414702.0.375010144][414702.0.375010146]'
  Description: '模组产成品库存点ID'
  IsReadOnly: true
  ValueType: String
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  GlobalOTDTable globalOTDTable
) as BinaryValue
{
  TextBody:
  [*
    // hongjli Sep-25-2023 (created)
    binaryValue := globalOTDTable.GlobalOTDTable_CARRC_Export().ExecuteToXLS( true ).AsBinaryValue();
    return binaryValue;
  *]
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/StaticMethod_Import.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Import (
  GlobalOTDTable globalOTDTable,
  String base64String
)
{
  TextBody:
  [*
    binaryData := BinaryData::FromBase64EncodedString( base64String );
    globalOTDTable.GlobalOTDTable_CARRC_Import().ExecuteFromXLS( &binaryData, true );
  *]
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/TypeIndex_CapacityAllocationResultsRuleConfigurationTypeIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
TypeIndex CapacityAllocationResultsRuleConfigurationTypeIndex
{
  Attributes:
  [
    TypeIndexAttribute
    {
      ModelElement: ModuleMaterialCode
    }
    TypeIndexAttribute
    {
      ModelElement: PanelMaterialCode
    }
    TypeIndexAttribute
    {
      ModelElement: StockingPointID
    }
  ]
}
_Main/BL/Type_CapacityAllocationResultsRuleConfiguration/_ROOT_Type_CapacityAllocationResultsRuleConfiguration.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type CapacityAllocationResultsRuleConfiguration
{
  #keys: '5[414702.0.374991403][414702.0.374991401][0.0.0][414702.0.374991402][414702.0.374991404]'
  BaseType: Object
  Description: '产能分配结果,规则配置'
  StructuredName: 'CapacityAllocationResultsRuleConfigurations'
}
_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
@@ -10,7 +10,7 @@
    // yypsybs Sep-15-2023 (created)
    existList := selectuniquevalues( parent, CapacityAndSaleBudgeFilterYear, item, item.YearNo() );
    nowYear := Date::Today().Year();
    for( i := nowYear - 10; i <= nowYear; i++ ) {
    for( i := nowYear - 10; i <= nowYear + 5; i++ ) {
      if( existList.Find( i ) = -1 ) {
        parent.CapacityAndSaleBudgeFilterYear( relnew, 
                                               YearNo := i );
_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
@@ -38,23 +38,23 @@
    }
    // æ£€æŸ¥ä¾èµ–项
    if( isnull( product) ) {
        info( "product not found" );
        info( "product not found" + productId);
    }
    if( isnull( salesSegment) ) {
        info( "sales segment not found" );
        info( "sales segment not found" + salesSegmentName);
    }
    if( isnull( stockingPoint) ) {
        info( "stock point not found" );
        info( "stock point not found" + stockingPointId);
    }
    //if( isnull( currency) ) {
    //    error( "currency not found" );  
    //}
    if( unitOfMeasureName <> "" and isnull( unitOfMeasure) ) {
        info( "unit of measure not found" );
        info( "unit of measure not found" + unitOfMeasureName);
    }
    if( priorityName <> "" and isnull( stockingPoint) ) {
        info( "priority not found" );
    }
    //if( priorityName <> "" and isnull( stockingPoint) ) {
    //    info( "priority not found" );
    //}
    // æ–°å¢ž/更新
    result := CustomerOrder::FindById( macroPlan, id );
    if( isnull( result ) ) {
@@ -62,9 +62,34 @@
                               priorityName, salesSegmentName, currencyId, unitOfMeasureName, 
                               false, customerName, customerId, orderId, orderLineId, true, true, true );
    } else {
        result.Update( product, stockingPoint, orderDate, quantity, price,
                       priorityName, salesSegmentName, currencyId, unitOfMeasureName,
                       false, customerName, customerId, orderId, orderLineId, true, true, true );
        if( result.ProductID() = productId
            and result.StockingPointID() = stockingPointId
            and result.StartDate() = orderDate
            and result.Quantity() = quantity
            and result.Price() = price
            and result.PriorityName() = priorityName
            and result.SalesSegmentName() = salesSegmentName
            and result.CurrencyID() = currencyId
            and result.UnitOfMeasureName() = unitOfMeasureName
            and result.CustomerName() = customerName
            and result.CustomerID() = customerId
            and result.OrderID() = orderId
            and result.OrderLineID() = orderLineId ){
              info( "No need to update this order: " + id );
              }else{
                if( result.IsLocked() = true ){
                  pispips := selectset( result, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true );
                  pispipLeafs := selectset( pispips,
                                            Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ),
                                            pispip,
                                            true );
                  ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, false, true );
                }
                result.Update( product, stockingPoint, orderDate, quantity, price,
                               priorityName, salesSegmentName, currencyId, unitOfMeasureName,
                               false, customerName, customerId, orderId, orderLineId, true, true, true );
                result.IsLocked( false );
                }
    }
    return result;
  *]
_Main/BL/Type_CustomerOrder/StaticMethod_DoSync.qbl
@@ -2,15 +2,16 @@
#parent: #root
StaticMethod DoSync (
  MacroPlan macroPlan,
  Strings businessTypes
  Strings businessTypes,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // yypsybs Aug-17-2023 (created)
    info( "Forecast Finished, Start CustomerOrder Data Broker" );
    macroPlan.Broker_OTD_CustomerOrder().Execute();
    //info( "Forecast Finished, Start CustomerOrder Data Broker" );
    //macroPlan.Broker_OTD_CustomerOrder().Execute();
    info( "CustomerOrder Data Broker Finished, Start CustomerOrder Mapping" );
    macroPlan.MappingCustomerOrderData( businessTypes );
    macroPlan.MappingCustomerOrderData( businessTypes,globalOTDTable );
  *]
}
_Main/BL/Type_CustomerOrder/StaticMethod_LockUnlock.qbl
@@ -20,7 +20,7 @@
        owner.OrderLockLog( relnew, 
                            CustomerName := order.CustomerName(), 
                            End := order.First().AsPlanningBaseSalesDemandInPeriod().End().Date(), 
                            EndDate := order.EndDate(),
                            EndDate := order.StartDate(),
                            IsLocked := order.IsLocked(), 
                            LastModify := order.LastModify(), 
                            LastModifyTime := order.LastModifyTime(), 
@@ -41,7 +41,7 @@
          owner.OrderLockLog( relnew, 
                              CustomerName := order.CustomerName(), 
                              End := order.First().AsPlanningBaseSalesDemandInPeriod().End().Date(), 
                              EndDate := order.EndDate(),
                              EndDate := order.StartDate(),
                              IsLocked := order.IsLocked(), 
                              LastModify := order.LastModify(), 
                              LastModifyTime := order.LastModifyTime(), 
_Main/BL/Type_Forecast/StaticMethod_CreateOrUpdate.qbl
@@ -33,23 +33,23 @@
    }
    // æ£€æŸ¥ä¾èµ–项
    if( isnull( product ) ) {
        error( "product not found" );
        info(  "product not found" + productId);
    }
    if( isnull( salesSegment ) ) {
        error( "sales segment not found" );
        info( "sales segment not found" + salesSegmentName);
    }
    if( isnull( stockingPoint ) ) {
        error( "stock point not found" );
        info( "stock point not found" + stockingPointId);
    }
    if( isnull( currency ) ) {
        error( "currency not found" );
        info(  "currency not found" + currencyId);
    }
    if( unitOfMeasureName <> "" and isnull( unitOfMeasure) ) {
        error( "unit of measure not found" );
        info( "unit of measure not found" + unitOfMeasureName );
    }
    if( priorityName <> "" and isnull( stockingPoint) ) {
        error( "priority not found" );
    }
    //if( priorityName <> "" and isnull( stockingPoint) ) {
    //    info( "priority not found" );
    //}
    // æ–°å¢ž/更新
    result := Forecast::FindById( macroPlan, id );
    if( isnull( result) ) {
_Main/BL/Type_Forecast/StaticMethod_DoSync.qbl
@@ -2,15 +2,16 @@
#parent: #root
StaticMethod DoSync (
  MacroPlan macroPlan,
  Strings businessTypes
  Strings businessTypes,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // yypsybs Aug-17-2023 (created)
    info( "OperationCost Finished, Start Forecast Data Broker" );
    macroPlan.Broker_OTD_Forecast().Execute();
    //info( "OperationCost Finished, Start Forecast Data Broker" );
    //macroPlan.Broker_OTD_Forecast().Execute();
    info( "Forecast Data Broker Finished, Start Forecast Mapping" );
    macroPlan.MappingForecastData( businessTypes );
    macroPlan.MappingForecastData( businessTypes,globalOTDTable );
  *]
}
_Main/BL/Type_Global_MappingOperation/StaticMethod_FindMinSeq.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindMinSeq (
  GlobalOTDTable globalOTDTable,
  String orgCode,
  String productId,
  String processSection
) as Number
{
  TextBody:
  [*
    // renhao Sep-20-2023 (created)
    return guard (min( globalOTDTable, Global_MappingOperation, item,
                item.OrganCode() = orgCode and item.ProductID() = productId and item.ProcessSection() = processSection,
                item.SequenceNumber() ), Number::MinNumber() );
  *]
}
_Main/BL/Type_H_Forecast/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414724.0.149657552][414724.0.149657551][414724.0.149657553]'
  Description: '库存点'
  ValueType: String
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetALlBOM.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_GetALlBOM (
  MacroPlan Owner,
  MappingBOM Material
) as Number
{
  Description: '根据SKU获取期根部所有数据'
  TextBody:
  [*
    AllMaterials := selectset( Owner,MappingBOM,Obj,Obj.ComponentCode()=Material.ProductCode())
    if( AllMaterials.Size()>0)
    {
          traverse( AllMaterials,Elements,Obj,not isnull( Obj))
         {
              H_FunctionClass::SM_GetALlBOM( Owner,Obj);
         }
    }
    else
    {
        Owner.H_MaterialInfo(relnew,ID := H_FunctionClass::SM_GenerateID( "BM")
                                    ,MaterialName := Material.ComponentType()  );
    }
    return 0;
  *]
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetBOMBySKU.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_GetBOMBySKU (
  MacroPlan Owner,
  String SKU
) as MappingBOM
{
  Description: '根据SKU获取BOM'
  TextBody:
  [*
    Obj :=null( MappingBOM,constcontent );
    if( not isnull( Owner) and SKU.Length()>0)
    {
      Obj := select( Owner,MappingBOM,ObjM,ObjM.ProductCode()=SKU);
    }
    return Obj;
  *]
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetMaterialData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_GetMaterialData (
  MacroPlan Owner,
  String ParentSKU,
  Number ProductQty,
  String ForecastId,
  String VCode,
  Date NDate
) as owning JSON
{
  Description: '获取物料信息'
  TextBody:
  [*
    /**********************************初始化物料信息***************************************
    *创建人:yunying
    *创建日期:2023-09-21
    *描述:根据SKU获取下一层物料数据,这里不是遍历得到所有,时触发一次得到一层,并累计
    *参数:
    *****************************************************************************************/
    // åˆå§‹åŒ–结果
    bStatus := false;
    strMsg :="";
    try{
      if( Owner.MappingBOM(relsize )>0)
      {
        // å¾—到下一级数据
        AllData:= selectset( Owner, MappingBOM,object,object.ComponentCode()=ParentSKU);
        ObjProduct := null( MappingProduct,constcontent );
        ObjUnit := null( Unit,constcontent );
        MaterialType:="";
        MaterialName:="-";
        StockPoint := "";
        NRate:=1.0;
        NComponentsUsed :=0.0;
        ObjBOM := H_FunctionClass::SM_GetBOMBySKU( Owner,ParentSKU);
        if(not isnull( ObjBOM))
        {
          NRate := ObjBOM.ComponentOutputRate();
          NComponentsUsed := ObjBOM.UnitUsageOfComponents();
          // äº§å‡ºæ¯”异常按 100%产出计算
          if( NRate <=0.0)
          {
            NRate :=1.0;
          }
        }
        if( AllData.Size()>0)
        {
          traverse( AllData,Elements,Obj,not isnull( Obj))
          {
            // å¾—到当前已存在的物料信息(订单ID + SKU)
            ObjMaterial := select( Owner,H_MaterialInfo,ObjM,ObjM.ForecastID()=ForecastId and ObjM.SKU()=Obj.ProductCode());
            if( isnull( ObjMaterial))
            {
              // ç‰©æ–™ç±»åž‹
              MaterialType := Obj.ProductType();
              // å¾—到物料信息
              ObjProduct:= H_FunctionClass::SM_GetProductInfo(Owner, Obj.ProductCode());
              if( not isnull( ObjProduct))
              {
                MaterialType:= ObjProduct.ProductMajorType();
                MaterialName:=ObjProduct.Name();
              }
              ObjUnit:= H_FunctionClass::SM_GetUnitBySKU( Owner,Obj.ProductCode());
              if( not isnull( ObjUnit))
              {
                StockPoint:= ObjUnit.Name();
              }
              Owner.H_MaterialInfo(relnew,ParentSKU := Obj.ComponentCode(),SKU := Obj.ProductCode(),ForecastID := ForecastId,OrgCode := Obj.OrganCode(),VCode := VCode
                                    ,ID := H_FunctionClass::SM_GenerateID( "MI"),MaterialType := MaterialType,NeedDate := NDate
                                    ,NeedQty := [Number](ProductQty/NRate*NComponentsUsed).Round( 0),Unit := Obj.UnitOfMeasureName()
                                    ,StockPoint :=StockPoint,MaterialName := MaterialName );
            }
            else
            {
              // è€ƒè™‘是否要更新数据,暂不处理
            }
          }
        }
      }
      // æ²¡æœ‰BOM æ·»åŠ æµ‹è¯•æ•°æ®
      else
      {
        nCount :=Owner.H_MaterialInfo(relsize );
        Owner.H_MaterialInfo(relnew,ParentSKU := ParentSKU,SKU := "SKU"+ nCount.AsQUILL() ,ForecastID := ForecastId,OrgCode := "ORG_000",VCode := VCode
                                    ,ID := H_FunctionClass::SM_GenerateID( "MI"),MaterialType := "原材料",NeedDate := NDate
                                    ,NeedQty := [Number](ProductQty*0.8).Round( 0),Unit := "PCS"
                                    ,StockPoint :="测试",MaterialName := "测试数据" );
      }
      bStatus := true;
      strMsg :="";
    }
    onerror
    {
      strMsg :="加载物料失败,请联系系统管理员!";
      Owner.H_ErrorLogs(relnew,EClassName := "H_FunctionClass",EDateTime := DateTime::ActualGMTTime(),EFunctionName := "SM_InitialForcastData",
                         DeveloperInformation :=  e.DeveloperInformation(),ErrorNr := e.ErrorNr(),DetailedInformation := e.DetailedInformation(),
                         GeneralInformation := e.GeneralInformation());
    }
    return JSON::Object().Add( "Status",bStatus)
                         .Add( "Msg",strMsg).Build();
  *]
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetProductInfo#1.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_GetProductInfo (
  MacroPlan Owner,
  String SKU
) as MappingProduct
{
  Description: '根据SKU获取物料信息'
  TextBody:
  [*
    // æ ¹æ®SKU获取物料信息
    Obj := null( MappingProduct,constcontent );
    if( not isnull( Owner) and SKU.Length()>0)
    {
      Obj:= select( Owner,MappingProduct,ObjMP,ObjMP.ID()=SKU);
    }
    return Obj;
  *]
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_GetUnitBySKU.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_GetUnitBySKU (
  MacroPlan Owner,
  String SKU
) as Unit
{
  Description: '通过SKU获取库存点信息'
  TextBody:
  [*
    Obj :=null( Unit,constcontent );
    if( not isnull( Owner) and SKU.Length()>0)
    {
      OrgCode := select( Owner,MappingBOM,ObjM,ObjM.ProductCode()=SKU);
      if( not isnull( OrgCode))
      {
        Obj := select( Owner,Unit,ObjU,ObjU.ID()=  OrgCode.OrganCode());
      }
    }
    return Obj;
  *]
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastData.qbl
@@ -17,7 +17,7 @@
    strMsg :="";
    
    try{
      // é¢„测数据2此处理(筛选+客户名称提取)
      // æ¸…除旧数据,重新拉取
      if(Owner.H_Forecast(relget ).Size()>0)
      {
        traverse( Owner,H_Forecast,Obj,not isnull( Obj))
@@ -25,6 +25,8 @@
          Owner.H_Forecast(reldelete, Obj);
        }
      }
      // èŽ·å–é¢„æµ‹è®¢å•ï¼šå½“æœˆå’Œä¹‹åŽçš„3个月预测数据 ä¸”预测数量>0的
      AllData:= selectset( Owner, Product_MP.SalesDemand.astype( Forecast ),object,object.EndDate().DateTime().Date() >= Date::ActualDate().StartOfMonth() 
                           and object.EndDate().DateTime().Date() <= Date::ActualDate().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth()
                           and object.Quantity()>0 );
@@ -32,8 +34,13 @@
      CustomName:="";
      DepartMent:="";
      idx:=0;
      strOrderCode:="";
      RQty:=0;
      ObjOrderRealQty:=null( H_OrderForecastRealQty,constcontent );
    //  ObjPruduct :=null( MappingProduct,constcontent );
      traverse( AllData,Elements,Obj,not isnull(Obj))
      {
        // è¿™é‡Œç”¨æŸ¥æ‰¾åŽæˆªå–,因为不确定有几个横线,以第一个为准
        idx:=Obj.SalesSegmentName().FindString( "-",0);
        if(idx>0)
        {
@@ -43,18 +50,51 @@
        else
        {
          CustomName :=Obj.SalesSegmentName();
          DepartMent := Obj.SalesSegmentName();
          DepartMent := "部门数据获取失败!"
        }
         Owner.H_Forecast(relnew,OrderCode := H_FunctionClass::SM_GenerateID( "OF"),
    //    // ä»Žç‰©æ–™è¡¨èŽ·å–ç‰©æ–™ä¿¡æ¯
    //    ObjPruduct := H_FunctionClass::SM_GetProductInfo( Owner,Obj.ProductID());
    //    if( not isnull( ObjPruduct))
    //    {
    //
    //    }
         // å†™å…¥é¢„测订单信息表
         strOrderCode:=H_FunctionClass::SM_GenerateID( "OF");
         Owner.H_Forecast(relnew,OrderCode := strOrderCode,
                                SKU := Obj.ProductID(),
                                CustomCode := CustomName,
                               CustomCode := CustomName,
                               CustomName := CustomName,
                               Util:=Obj.UnitOfMeasureName(),
                               NeedTime:=Obj.EndDate(),
                               ForecastQty:=[Number]Obj.Quantity().Round( 0),
                               StockingPointID := Obj.StockingPointID(),
                               Department:=DepartMent);
         // å†™å…¥é¢„测实时信息
         ObjOrderRealQty := select( Owner,H_OrderForecastRealQty,ObjO,ObjO.CustomID()=CustomName and ObjO.SKU()=Obj.ProductID()
                                    and ObjO.Month().StartOfMonth() = Obj.EndDate().StartOfMonth() )
         if( isnull( ObjOrderRealQty))
         {
             Owner.H_OrderForecastRealQty(relnew,CustomID := CustomName,CustomName := CustomName,ForecatsQty := [Number]Obj.Quantity().Round( 0)
                                           ,ForecatsRealQty := [Number]Obj.Quantity().Round( 0),ID := H_FunctionClass::SM_GenerateID( "OR")
                                           ,Month := Obj.EndDate(),OrderCode := strOrderCode,SKU := Obj.ProductID(),Unit := Obj.UnitOfMeasureName());
         }
         else
         {
            if( [Number]Obj.Quantity().Round( 0)<> ObjOrderRealQty.ForecatsQty())
            {
                  RQty := [Number]Obj.Quantity().Round( 0) - ObjOrderRealQty.ForecatsQty();
                  RQty := ObjOrderRealQty.ForecatsRealQty() + RQty;
                  if( RQty<0)
                  {
                      RQty :=0;
                  }
                  ObjOrderRealQty.ForecatsQty([Number]Obj.Quantity().Round( 0));
                  ObjOrderRealQty.ForecatsRealQty(RQty);
            }
         }
      }
      bStatus := true;
      strMsg :="订单预测初始化成功!";
    }
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_InitialForcastDataEx.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_InitialForcastDataEx (
  MacroPlan Owner,
  Boolean IsNew
) as owning JSON
{
  Description: '初始化订单预测信息'
  TextBody:
  [*
    /**********************************初始化订单预测信息***************************************
    *注:未确定上游预测订单更新逻辑和数据有效性,这里进行二次处理,新生成一个列表,避免上游信息变动严重
    *    å½±å“åŠŸèƒ½
    *
    *****************************************************************************************/
    // åˆå§‹åŒ–结果
    bStatus := false;
    strMsg :="";
    try{
      // æ¸…除旧数据,重新拉取
      if(Owner.H_Forecast(relget ).Size()>0)
      {
        traverse( Owner,H_Forecast,Obj,not isnull( Obj))
        {
          Owner.H_Forecast(reldelete, Obj);
        }
      }
      // èŽ·å–é¢„æµ‹è®¢å•ï¼šå½“æœˆå’Œä¹‹åŽçš„3个月预测数据 ä¸”预测数量>0的
      AllData:= selectset( Owner, Product_MP.SalesDemand.astype( Forecast ),object,object.EndDate().DateTime().Date() >= Date::ActualDate().StartOfMonth()
                           and object.EndDate().DateTime().Date() <= Date::ActualDate().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth().StartOfNextMonth()
                           and object.Quantity()>0 );
      CustomName:="";
      DepartMent:="";
      idx:=0;
      strOrderCode:="";
      RQty:=0;
      ObjOrderRealQty:=null( H_OrderForecastRealQty,constcontent );
    //  ObjPruduct :=null( MappingProduct,constcontent );
      traverse( AllData,Elements,Obj,not isnull(Obj))
      {
        // è¿™é‡Œç”¨æŸ¥æ‰¾åŽæˆªå–,因为不确定有几个横线,以第一个为准
        idx:=Obj.SalesSegmentName().FindString( "-",0);
        if(idx>0)
        {
          DepartMent:=Obj.SalesSegmentName().SubString( 0,idx);
          CustomName := Obj.SalesSegmentName().SubString( idx+1, Obj.SalesSegmentName().Length() - (idx+1));
        }
        else
        {
          CustomName :=Obj.SalesSegmentName();
          DepartMent := "部门数据获取失败!"
        }
    //    // ä»Žç‰©æ–™è¡¨èŽ·å–ç‰©æ–™ä¿¡æ¯
    //    ObjPruduct := H_FunctionClass::SM_GetProductInfo( Owner,Obj.ProductID());
    //    if( not isnull( ObjPruduct))
    //    {
    //
    //    }
         // å†™å…¥é¢„测订单信息表
         strOrderCode:=H_FunctionClass::SM_GenerateID( "OF");
         Owner.H_Forecast(relnew,OrderCode := strOrderCode,
                                SKU := Obj.ProductID(),
                               CustomCode := CustomName,
                               CustomName := CustomName,
                               Util:=Obj.UnitOfMeasureName(),
                               NeedTime:=Obj.EndDate(),
                               ForecastQty:=[Number]Obj.Quantity().Round( 0),
                               StockingPointID := Obj.StockingPointID(),
                               Department:=DepartMent);
         // å†™å…¥é¢„测实时信息
         ObjOrderRealQty := select( Owner,H_OrderForecastRealQty,ObjO,ObjO.CustomID()=CustomName and ObjO.SKU()=Obj.ProductID()
                                    and ObjO.Month().StartOfMonth() = Obj.EndDate().StartOfMonth() )
         if( isnull( ObjOrderRealQty))
         {
             Owner.H_OrderForecastRealQty(relnew,CustomID := CustomName,CustomName := CustomName,ForecatsQty := [Number]Obj.Quantity().Round( 0)
                                           ,ForecatsRealQty := [Number]Obj.Quantity().Round( 0),ID := H_FunctionClass::SM_GenerateID( "OR")
                                           ,Month := Obj.EndDate(),OrderCode := strOrderCode,SKU := Obj.ProductID(),Unit := Obj.UnitOfMeasureName());
         }
         else
         {
           if( IsNew)
           {
              ObjOrderRealQty.ForecatsQty([Number]Obj.Quantity().Round( 0));
              ObjOrderRealQty.ForecatsRealQty([Number]Obj.Quantity().Round( 0));
           }
           else
           {
              if( [Number]Obj.Quantity().Round( 0)<> ObjOrderRealQty.ForecatsQty())
              {
                    RQty := [Number]Obj.Quantity().Round( 0) - ObjOrderRealQty.ForecatsQty();
                    RQty := ObjOrderRealQty.ForecatsRealQty() + RQty;
                    if( RQty<0)
                    {
                        RQty :=0;
                    }
                    ObjOrderRealQty.ForecatsQty([Number]Obj.Quantity().Round( 0));
                    ObjOrderRealQty.ForecatsRealQty(RQty);
              }
           }
         }
      }
      bStatus := true;
      strMsg :="订单预测初始化成功!";
    }
    onerror
    {
      strMsg :="订单预测初始化失败,可能影响冲减计算,请联系系统管理员!";
      Owner.H_ErrorLogs(relnew,EClassName := "H_FunctionClass",EDateTime := DateTime::ActualGMTTime(),EFunctionName := "SM_InitialForcastData",
                         DeveloperInformation :=  e.DeveloperInformation(),ErrorNr := e.ErrorNr(),DetailedInformation := e.DetailedInformation(),
                         GeneralInformation := e.GeneralInformation());
    }
    return JSON::Object().Add( "Status",bStatus)
                         .Add( "Msg",strMsg).Build();
  *]
}
_Main/BL/Type_H_FunctionClass/StaticMethod_SM_OrderHedging.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,200 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SM_OrderHedging (
  MacroPlan Owner,
  Boolean IsNew,
  String Operator,
  String OperatorType
) as owning JSON
{
  Description: '订单冲减调用函数'
  TextBody:
  [*
    /************************************订单冲减调用******************************
    *函数名:SM_OrderHedging
    *创建人:yunying
    *创建时间:20230-09-24
    *描述:系统内订单冲减调用函数,IsNew=true时,重新处理预测信息,IsNew=false时,用预测累计信息。
    *****************************************************************************/
    // åˆå§‹åŒ–结果
    bStatus := false;
    strMsg :="";
    // èŽ·å–ç‰ˆæœ¬å·,这里是否需要和版本号功能对接
    VCode :=H_FunctionClass::SM_GenerateID("VC");
    try{
      if( not isnull( Owner))
      {
        // åˆå§‹åŒ–预测信息
        JResult := H_FunctionClass::SM_InitialForcastDataEx( Owner,IsNew);
        if( JResult.Get( "Status").GetBoolean())
        {
          traverse( Owner,SalesDemand.astype( CustomerOrder ),ObjOrder,not isnull( ObjOrder))
          {
            //----------------------------------------以下后去预测 åç­¾ æŽˆæƒæ•°æ®ä¿¡æ¯----------------
            nForecastQtyOld := 0; //原预测数量
            nReverseQtyOld :=0;   //原反签数量
            nAuthorizeQtyOld :=0; //原授权数量
            nForecastQtyNew :=0;  //计算后的预测数量
            nReverseQtyNew :=0;   //计算后的反签数量
            nAuthorizeQtyNew :=0; //计算后的授权数量
            nHaveForecastQty :=0; //有预测数量
            nNoHaveForecastQty:=0;//五预测数量
            OrderQuantity := 0;   //剩余订单数量
            // èŽ·å–é¢„æµ‹æ•°é‡ï¼ˆå®¢æˆ·+SKU+月份 ç†è®ºæ˜¯æ²¡æœ‰ç‰©æ–™é¢„测)
            OrderForecast := select(Owner, H_OrderForecastRealQty , Obj, Obj.SKU() = ObjOrder.ProductID()
                                                  and Obj.CustomID() = ObjOrder.CustomerName()
                                                  and Obj.Month().Format( "YM2") =ObjOrder.EndDate().Format( "YM2"));
            if ( not isnull(OrderForecast))
            {
                nForecastQtyOld := OrderForecast.ForecatsRealQty();
                nForecastQtyNew := nForecastQtyOld;
            }
            // èŽ·å–åç­¾æ•°é‡ï¼ˆåªåˆ¤æ–­SKU)
            ObjReverse := select(Owner, H_ReverseRealQty , Obj, Obj.SKU() = ObjOrder.ProductID());
            if ( not isnull(ObjReverse))
            {
                nReverseQtyOld := ObjReverse.ReverseRealQty();
                nReverseQtyNew := nReverseQtyOld;
            }
            // èŽ·å–æŽˆæƒæ•°é‡ï¼ˆå®¢æˆ·ID+SKU)
            ObjAuthorize := select(Owner, H_AuthorizeRealQty , Obj, Obj.SKU() = ObjOrder.ProductID()
                                                                    and Obj.CustomID() = ObjOrder.CustomerName());
            if ( not isnull(ObjAuthorize))
            {
                nAuthorizeQtyOld := ObjAuthorize.AuthorizeRealQty();
                nAuthorizeQtyNew :=nAuthorizeQtyOld;
            }
            //-----------------------------以下订单冲减--------------------
            // æŽˆæƒè®°å½•ID
            AQID := H_FunctionClass::SM_GenerateID( "AQ");
            // è®¢å•剩余数量
            OrderQuantity := [Number]ObjOrder.Quantity().Round( 0);
            // 1 å…ˆå†²æŽˆæƒ
            if( OrderQuantity>0 and nAuthorizeQtyOld>0)
            {
               OrderQuantity := OrderQuantity-nAuthorizeQtyOld;
               nAuthorizeQtyNew :=0;
               if( OrderQuantity<0)
               {
                 nAuthorizeQtyNew := abs(OrderQuantity);
                 OrderQuantity :=0;
               }
            }
            // 2 å†å†²åç­¾
            if( OrderQuantity>0 and nReverseQtyOld>0)
            {
               OrderQuantity := OrderQuantity-nReverseQtyOld;
               nReverseQtyNew :=0;
               if( OrderQuantity<0)
               {
                 nReverseQtyNew := abs(OrderQuantity);
                 OrderQuantity :=0;
               }
            }
            // 3 æœ€åŽå†²é¢„测
            if( OrderQuantity>0 and nForecastQtyOld>0)
            {
               //默认订单数量>预测数量
               OrderQuantity := OrderQuantity-nForecastQtyOld;
               nForecastQtyNew :=0;
               nHaveForecastQty := nForecastQtyOld;
               nNoHaveForecastQty := OrderQuantity;
               if( OrderQuantity<0)
               {
                 nForecastQtyNew := abs(OrderQuantity);
                 OrderQuantity :=0;
                 nHaveForecastQty := nForecastQtyOld - nForecastQtyNew;
                 nNoHaveForecastQty := 0;
               }
            }
            // è®°å½•动作
            Owner.H_OrderRecord(relnew,
                                   ID := AQID,
                                   VCode:=VCode,
                                   SKU:=ObjOrder.ProductID(),
                                   ReverseQty := nReverseQtyNew,
                                   CustomerCode := ObjOrder.CustomerName(),
                                   CustomerName := ObjOrder.CustomerName(),
                                   ForecastQty := nForecastQtyNew,
                                   OrderDateTime := ObjOrder.EndDate(),
                                   OrderQty := [Number]ObjOrder.Quantity().Round( 0),
                                   OrderCode:=ObjOrder.OrderID(),
                                   AuthorizeQty := nAuthorizeQtyNew,
                                   ReverseDeductQty := nReverseQtyOld - nReverseQtyNew,
                                   AuthorizeDeductQty := 0,
                                   ForecastHitQty :=nHaveForecastQty,
                                   ForecastNoHitQty :=nNoHaveForecastQty,
                                   OperateType := OperatorType,
                                   Operator := Operator,
                                   Unit := ObjOrder.UnitOfMeasureName(),
                                   OperateQty := [Number]ObjOrder.Quantity().Round( 0),
                                   OperateTime := DateTime::ActualTime());
            // æ›´æ–°å½“前反签数量
            if( not isnull( ObjReverse))
            {
              ObjReverse.ReverseRealQty(nReverseQtyNew);
            }
            else
            {
              Owner.H_ReverseRealQty(relnew,ID := H_FunctionClass::SM_GenerateID( "RQ"),SKU := ObjOrder.ProductID(),Unit := ObjOrder.UnitOfMeasureName()
                                      ,ReverseRealQty := nReverseQtyNew);
            }
            // æ›´æ–°æŽˆæƒ
            if( not isnull( ObjAuthorize))
            {
              ObjAuthorize.AuthorizeRealQty(nAuthorizeQtyNew);
            }
            else
            {
              Owner.H_AuthorizeRealQty(relnew,ID := H_FunctionClass::SM_GenerateID( "AR"),SKU := ObjOrder.ProductID(),
                                                                                              Month := ObjOrder.EndDate(),
                                                                                              CustomID := ObjOrder.CustomerName(),
                                                                                              CustomName := ObjOrder.CustomerName(),
                                                                                              OrderCode := "-",
                                                                                              AuthorizeRealQty :=nAuthorizeQtyNew,
                                                                                              Unit := ObjOrder.UnitOfMeasureName());
            }
            // æ›´æ–°é¢„测
            if( not isnull( OrderForecast))
            {
              OrderForecast.ForecatsRealQty(nForecastQtyNew);
            }
            else
            {
              Owner.H_OrderForecastRealQty(relnew,ID := H_FunctionClass::SM_GenerateID( "OF"),SKU := ObjOrder.ProductID(),
                                                                                              Month := ObjOrder.EndDate(),
                                                                                              CustomID := ObjOrder.CustomerName(),
                                                                                              CustomName := ObjOrder.CustomerName(),
                                                                                              OrderCode := "-",
                                                                                              ForecatsQty :=0,
                                                                                              ForecatsRealQty :=nForecastQtyNew,
                                                                                              Unit := ObjOrder.UnitOfMeasureName());
            }
          }
        }
        else
        {
          strMsg:="预测订单信息加载失败,请联系系统管理员!";
        }
      }
    }
    onerror
    {
      strMsg :="订单冲减发生错误,请联系系统管理员!";
      // è¿™é‡Œæ˜¯å¦è¦åˆ é™¤å·²åˆ›å»ºçš„æ•°æ®ï¼Ÿå¾…定,如果按版本号可以不删除
      // è®°å½•错误日志
      Owner.H_ErrorLogs(relnew,EClassName := "H_FunctionClass",EDateTime := DateTime::ActualGMTTime(),EFunctionName := "SM_InitialForcastData",
                         DeveloperInformation :=  e.DeveloperInformation(),ErrorNr := e.ErrorNr(),DetailedInformation := e.DetailedInformation(),
                         GeneralInformation := e.GeneralInformation());
    }
    return JSON::Object().Add( "Status",bStatus)
                         .Add( "VersionCode",VCode)
                         .Add( "Msg",strMsg).Build();
  *]
}
_Main/BL/Type_H_FunctionClass/_ROOT_Type_H_FunctionClass.qbl
@@ -5,6 +5,6 @@
{
  #keys: '5[414724.0.53669729][414724.0.53669727][0.0.0][414724.0.53669728][414724.0.53669730]'
  BaseType: Object
  Description: '冲减操作类'
  Description: '冲减操作公用类'
  StructuredName: 'H_FunctionClasss'
}
_Main/BL/Type_H_MaterialInfo/Attribute_ForecastID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ForecastID
{
  #keys: '3[414724.0.150662643][414724.0.150662642][414724.0.150662644]'
  Description: '预测ID'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_ID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ID
{
  #keys: '3[414724.0.142347495][414724.0.142347494][414724.0.142347496]'
  Description: '主键ID'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_MaterialName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute MaterialName
{
  #keys: '3[414724.0.142347535][414724.0.142347534][414724.0.142347536]'
  Description: '物料名称'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_MaterialType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute MaterialType
{
  #keys: '3[414724.0.142347525][414724.0.142347524][414724.0.142347526]'
  Description: '物料类型:成品、半成品、原材料????'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_NeedDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute NeedDate
{
  #keys: '3[414724.0.143344655][414724.0.143344654][414724.0.143344656]'
  Description: '需求时间'
  ValueType: Date
}
_Main/BL/Type_H_MaterialInfo/Attribute_NeedQty.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute NeedQty
{
  #keys: '3[414724.0.142347555][414724.0.142347554][414724.0.142347556]'
  Description: '需求数量'
  ValueType: Number
}
_Main/BL/Type_H_MaterialInfo/Attribute_OrgCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute OrgCode
{
  #keys: '3[414724.0.142347565][414724.0.142347564][414724.0.142347566]'
  Description: '组织代码'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_ParentSKU.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ParentSKU
{
  #keys: '3[414724.0.142347515][414724.0.142347514][414724.0.142347516]'
  Description: '父物料SKU'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_SKU.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SKU
{
  #keys: '3[414724.0.142347505][414724.0.142347504][414724.0.142347506]'
  Description: 'SKU(产品、半成品、物料)'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_StockPoint.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute StockPoint
{
  #keys: '3[414724.0.142347575][414724.0.142347574][414724.0.142347576]'
  Description: '库存点'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_Unit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Unit
{
  #keys: '3[414724.0.142347545][414724.0.142347544][414724.0.142347546]'
  Description: '单位'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/Attribute_VCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute VCode
{
  #keys: '3[414724.0.142347585][414724.0.142347584][414724.0.142347586]'
  Description: '版本号'
  ValueType: String
}
_Main/BL/Type_H_MaterialInfo/_ROOT_Type_H_MaterialInfo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type H_MaterialInfo
{
  #keys: '5[414724.0.142347475][414724.0.142347473][0.0.0][414724.0.142347474][414724.0.142347476]'
  BaseType: Object
  Description: '物料信息'
  StructuredName: 'H_MaterialInfos'
}
_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoSync.qbl
@@ -1,15 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod DoSync (
  MacroPlan macroPlan
  MacroPlan macroPlan,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // yypsybs Aug-17-2023 (created)
    info( "ActualPISPIP Finished, Start InventoryCost Data Broker" );
    macroPlan.Broker_OTD_InventoryCost().Execute();
    //info( "ActualPISPIP Finished, Start InventoryCost Data Broker" );
    //macroPlan.Broker_OTD_InventoryCost().Execute();
    info( "InventoryCost Data Broker Finished, Start InventoryCost Mapping" );
    macroPlan.MappingInventoryValueAndCostData();
    macroPlan.MappingInventoryValueAndCostData(globalOTDTable);
  *]
}
_Main/BL/Type_MPSync/Method_CapacityAndSaleBudgeExport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
Quintiq file version 2.0
#parent: #root
Method CapacityAndSaleBudgeExport () as BinaryValue
{
  Description: '导出比较结果'
  TextBody:
  [*
    // generate by generate_export.py
    info( "export start" );
    text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>年度产销预算</name>
    <column><name>删除标记</name><type>String</type></column>
    <column><name>年份</name><type>Number</type></column>
    <column><name>业务部门</name><type>String</type></column>
    <column><name>显示技术分类</name><type>String</type></column>
    <column><name>业务分类</name><type>String</type></column>
    <column><name>产品线/产品规格</name><type>String</type></column>
    <column><name>产品料号</name><type>String</type></column>
    <column><name>Array产地</name><type>String</type></column>
    <column><name>蒸镀产地</name><type>String</type></column>
    <column><name>分辨率</name><type>String</type></column>
    <column><name>出货形态</name><type>String</type></column>
    <column><name>切割数</name><type>String</type></column>
    <column><name>产能当量</name><type>String</type></column>
    <column><name>mask数</name><type>String</type></column>
    <column><name>1月产能(PCS)</name><type>Real</type></column>
    <column><name>2月产能(PCS)</name><type>Real</type></column>
    <column><name>3月产能(PCS)</name><type>Real</type></column>
    <column><name>4月产能(PCS)</name><type>Real</type></column>
    <column><name>5月产能(PCS)</name><type>Real</type></column>
    <column><name>6月产能(PCS)</name><type>Real</type></column>
    <column><name>7月产能(PCS)</name><type>Real</type></column>
    <column><name>8月产能(PCS)</name><type>Real</type></column>
    <column><name>9月产能(PCS)</name><type>Real</type></column>
    <column><name>10月产能(PCS)</name><type>Real</type></column>
    <column><name>11月产能(PCS)</name><type>Real</type></column>
    <column><name>12月产能(PCS)</name><type>Real</type></column>
    <column><name>年产能(PCS)</name><type>Real</type></column>
    <column><name>1月产能(实数大张)</name><type>Real</type></column>
    <column><name>2月产能(实数大张)</name><type>Real</type></column>
    <column><name>3月产能(实数大张)</name><type>Real</type></column>
    <column><name>4月产能(实数大张)</name><type>Real</type></column>
    <column><name>5月产能(实数大张)</name><type>Real</type></column>
    <column><name>6月产能(实数大张)</name><type>Real</type></column>
    <column><name>7月产能(实数大张)</name><type>Real</type></column>
    <column><name>8月产能(实数大张)</name><type>Real</type></column>
    <column><name>9月产能(实数大张)</name><type>Real</type></column>
    <column><name>10月产能(实数大张)</name><type>Real</type></column>
    <column><name>11月产能(实数大张)</name><type>Real</type></column>
    <column><name>12月产能(实数大张)</name><type>Real</type></column>
    <column><name>年产能(实数大张)</name><type>Real</type></column>
    <column><name>1月销售额(W)</name><type>Real</type></column>
    <column><name>2月销售额(W)</name><type>Real</type></column>
    <column><name>3月销售额(W)</name><type>Real</type></column>
    <column><name>4月销售额(W)</name><type>Real</type></column>
    <column><name>5月销售额(W)</name><type>Real</type></column>
    <column><name>6月销售额(W)</name><type>Real</type></column>
    <column><name>7月销售额(W)</name><type>Real</type></column>
    <column><name>8月销售额(W)</name><type>Real</type></column>
    <column><name>9月销售额(W)</name><type>Real</type></column>
    <column><name>10月销售额(W)</name><type>Real</type></column>
    <column><name>11月销售额(W)</name><type>Real</type></column>
    <column><name>12月销售额(W)</name><type>Real</type></column>
    <column><name>年销售额(W)</name><type>Real</type></column>
    </table>';
    xmlDOMImplementation := XMLDOMImplementation::Create();
    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
    toExportList := selectsortedset( this, MappingCapacityAndSaleBudge, item, true, item.OrgCode() + "_" + item.PlaceOfProductionOfArray() );
    info( "export size : " + [String]toExportList.Size() );
    nowNo := 1;
    traverse ( toExportList, Elements, toExport ) {
      info( "nowNo : " + [String]nowNo );
      nowNo := nowNo + 1;
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.Deleted(), "Y", "N"), "删除标记" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.YearNo(), "年份" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrgCode(), "业务部门" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.DisplayTechnology(), "显示技术分类" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "业务分类" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.LineAndSpecification(), "产品线/产品规格" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductCode(), "产品料号" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PlaceOfProductionOfArray(), "Array产地" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.PlaceOfProductionOfEvaporation(), "蒸镀产地" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.Resolution(), "分辨率" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ShippingForm(), "出货形态" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.NumberOfCut(), "切割数" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.CapacityEquivalent(), "产能当量" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.NumberOfMask(), "mask数" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth1(), "1月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth2(), "2月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth3(), "3月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth4(), "4月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth5(), "5月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth6(), "6月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth7(), "7月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth8(), "8月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth9(), "9月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth10(), "10月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth11(), "11月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSInMonth12(), "12月产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInPCSTotal(), "年产能(PCS)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth1(), "1月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth2(), "2月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth3(), "3月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth4(), "4月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth5(), "5月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth6(), "6月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth7(), "7月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth8(), "8月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth9(), "9月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth10(), "10月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth11(), "11月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetInMonth12(), "12月产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.CapacityInSheetTotal(), "年产能(实数大张)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth1(), "1月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth2(), "2月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth3(), "3月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth5(), "4月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth4(), "5月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth6(), "6月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth7(), "7月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth8(), "8月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth9(), "9月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth10(), "10月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth11(), "11月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountInMonth12(), "12月销售额(W)" );
      ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.SaleAmountTotal(), "年销售额(W)" );
    }
    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
    tableGroupHandle := TableGroupHandle::Create( "年度产销预算" );
    tableGroupHandle.Add( tableHandle );
    tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
    info( "export end" );
    return tableBinaryData.AsBinaryValue();
  *]
}
_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
@@ -15,7 +15,7 @@
    info( "productCodeList : " + [String]productCodeList.Size() );
    
    mpSync.MappingCapacityAndSaleBudge( relflush );
    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year(); year := year + 1 ) {
    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
      for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
        productCode := productCodeList.Element( i - 1 );
        mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
@@ -41,7 +41,7 @@
    info( "test MappingCapacityAndSaleBudge size : " + [String]result1.Size() );
    
    mpSync.MappingAnnualBudget( relflush );
    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year(); year := year + 1 ) {
    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
      for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
        productCode := productCodeList.Element( i - 1 );
        mappingAnnualBudget := mpSync.MappingAnnualBudget( relnew, 
_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
@@ -7,88 +7,12 @@
    // Administrator Sep-1-2023 (created)
    
    //Set the Default values
    unitofmeasurename := "PCS";
    currencyid := "CNY";
    startdate := Date::Date( 1900, 1, 1 );
    enddate := Date::Date( 9999, 12, 31 );
    capacitytype := "Transport quantity";
    //unitofMeasureName := "PCS";
    //currencyid := "CNY";
    //startdate := Date::Date( 1900, 1, 1 );
    //enddate := Date::Date( 9999, 12, 31 );
    //capacitytype := "Transport quantity";
    
    if( isnull( Unit::FindById( this, "空运" ) ) ){
      this.Unit( relnew,
                 ID := "空运",
                 Name := "空运",
                 UnitOfMeasureName := unitofmeasurename,
                 CurrencyID := currencyid,
                 StartDate := startdate,
                 EndDate := enddate,
                 CapacityType := capacitytype );
      }
    if( isnull( Unit::FindById( this, "库存事务处理" ) ) ){
      this.Unit( relnew,
                 ID := "库存事务处理",
                 Name := "库存事务处理",
                 UnitOfMeasureName := unitofmeasurename,
                 CurrencyID := currencyid,
                 StartDate := startdate,
                 EndDate := enddate,
                 CapacityType := capacitytype );
    }
    unitofmeasurename := "PCS";
    name := "手动创建库存点";
    currencyname := "CNY";
    isplannedinfinite := false;
    datestart := Date::Construct(1900, 1, 1) ;
    dateend := Date::Construct(9999, 12, 31);
    groupname := " ";
    description := " ";
    isfromdb := true;
    if( isnull( StockingPoint_MP::FindById( this, "F13_FG_STOCK" ) ) ){
      StockingPoint_MP::Create( this,
                                "F13_FG_STOCK",
                                "F13",
                                name,
                                unitofmeasurename,
                                currencyname,
                                isplannedinfinite,
                                datestart,
                                dateend,
                                groupname,
                                description,
                                isfromdb );
    }
    if( isnull( StockingPoint_MP::FindById( this, "H10_SA_STOCK" ) ) ){
      StockingPoint_MP::Create( this,
                                "H10_SA_STOCK",
                                "H10",
                                name,
                                unitofmeasurename,
                                currencyname,
                                isplannedinfinite,
                                datestart,
                                dateend,
                                groupname,
                                description,
                                isfromdb );
    }
    if( isnull( StockingPoint_MP::FindById( this, "Q10_FG_STOCK" ) ) ){
      StockingPoint_MP::Create( this,
                                "Q10_FG_STOCK",
                                "Q10",
                                name,
                                unitofmeasurename,
                                currencyname,
                                isplannedinfinite,
                                datestart,
                                dateend,
                                groupname,
                                description,
                                isfromdb );
    }
    
    existcurrency := Currency_MP::FindById( this, "CNY" );
    if( isnull( existcurrency ) ){
_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -2,21 +2,21 @@
#parent: #root
Method MappingActualPISPIPData (
  Strings businessTypes,
  GlobalOTDTable globalOTDTable,
  Boolean nuclear
)
{
  TextBody:
  [*
    // renhao Aug-14-2023 (created)
    date := Date :: Today();
    listtodeal := selectset( this,MappingActualPISPIP,actual,true );
    listtodeal := selectset( globalOTDTable,Global_MappingActualProductInStockingPointInPeriod,actual,actual.ActualInventoryLevelEnd() > 0 );
    totalcount := listtodeal.Size();
    info( "ActualPISPIP has " + totalcount.AsQUILL() + " rows in total" );
    
    count := 0;
    traverse( listtodeal,Elements,actual){
      count := count + 1;
      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){
      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
        info( "Now is dealing with the " + count.AsQUILL() + "ActualPISPIP " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
        }
      product := select( this,MappingProduct,product,product.ID() = actual.ProductID() and product.KeyProduct() = nuclear,true);
_Main/BL/Type_MacroPlan/Method_MappingBaseConversionFactorData.qbl
@@ -1,19 +1,21 @@
Quintiq file version 2.0
#parent: #root
Method MappingBaseConversionFactorData
Method MappingBaseConversionFactorData (
  GlobalOTDTable globalOTDTable
)
{
  Description: 'ETL数据转模型数据'
  TextBody:
  [*
    // yypsybs Aug-15-2023 (created)
    traverse( this, MappingBaseConversionFactor, item ) {
    traverse( globalOTDTable, Global_MappingConversionFactor, item ) {
      //如果ProductID不为空,且匹配不到Product,则不创建,返回为空
    //    info( item.ProductId().AsQUILL() );
        BaseConversionFactor::CreateOrUpdate( this, 
                                              item.SourceUnitOfMeasureName(), 
                                              item.TargetUnitOfMeasureName(), 
                                              item.IsEnabled(), 
                                              item.ProductId(),
                                              item.ProductID(),
                                              item.Factor() );
    }
  *]
_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
@@ -1,7 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method MappingCustomerOrderData (
  Strings businessTypes
  Strings businessTypes,
  GlobalOTDTable globalOTDTable
)
{
  Description: 'ETL订单预测'
@@ -9,15 +10,15 @@
  [*
    // yypsybs Aug-15-2023 (created)
    // å¾…处理数据
    listToDeal := construct( structured[MappingCustomerOrder] );
    listToDeal := construct( Global_MappingCustomOrders );
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
        listToDeal := selectset( this, MappingCustomerOrder, item, true );
        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true );
    } else {
        listToDeal := selectset( this, MappingCustomerOrder, item, businessTypes.Find( item.BusinessType() ) <> -1 );
        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, businessTypes.Find( item.BusinessType() ) <> -1 );
    }
    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( listToDeal, Elements, item, item.OrderDate() >= queryStartDate /*and item.OrderDate() <= queryEndDate*/, not isnull( Product_MP::FindById( this, item.ProductID() ) ) and not isnull( StockingPoint_MP::FindById( this, item.StockPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) );
    listToDeal := selectset( listToDeal, Elements, item, item.OrderDate() >= queryStartDate /*and item.OrderDate() <= queryEndDate*/, not isnull( Product_MP::FindById( this, item.ProductID() ) ) and not isnull( StockingPoint_MP::FindById( this, item.StockingPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) );
    
    totalcount := listToDeal.Size();
    info( "CustomerOrder has " + totalcount.AsQUILL() + " rows in total" );
@@ -35,7 +36,7 @@
      CustomerOrder::CreateOrUpdate( this, item.CurrencyID(), item.Customer(), item.CustomerID(), item.ID(), 
                                     item.OrderDate(), item.OrderID(), item.OrderLineID(), item.Price(), 
                                     priorityName, item.ProductID(), 
                                     item.StockPointID(),
                                     item.StockingPointID(),
                                     item.SalesSegmentName(), 
                                     item.Quantity(), item.UnitOfMeasureName(), item.OrderType(), item.IsAvailable());
    //  }else{
_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -2,7 +2,8 @@
#parent: #root
Method MappingExternalSupplyData (
  Strings businessTypes,
  Boolean nuclear
  Boolean nuclear,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
@@ -10,7 +11,7 @@
    // 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( this,MappingExternalSupply,externalSupply, externalSupply.UserQuantity()>0 and externalSupply.Date() >= queryStartDate /*and externalSupply.Date() <= queryEndDate*/);
    listtodeal := selectset( globalOTDTable,Global_MappingInventorySupply,externalSupply, externalSupply.UserQuantity()>0 and externalSupply.Date() >= queryStartDate /*and externalSupply.Date() <= queryEndDate*/);
    totalcount := listtodeal.Size();
    description := "在途在制";
    info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
@@ -21,7 +22,7 @@
      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
        info( "Now is dealing with the " + count.AsQUILL() + "ExternalSupply " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
       }
      product := select( this,MappingProduct,product,product.ID() = externalSupply.ProductID(),true);
      product := select( globalOTDTable,Global_MappingProduct_MP,product,product.ID() = externalSupply.ProductID(),true);
      
      
      if( not isnull( product)){
_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
@@ -1,7 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method MappingForecastData (
  Strings businessTypes
  Strings businessTypes,
  GlobalOTDTable globalOTDTable
)
{
  Description: 'ETL订单预测'
@@ -9,11 +10,11 @@
  [*
    // yypsybs Aug-15-2023 (created)
    // å¾…处理数据
    listToDeal := construct( structured[MappingForecast] );
    listToDeal := construct( Global_MappingForecasts );
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
        listToDeal := selectset( this, MappingForecast, item, item.Quantity() > 0 );
        listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, item.Quantity() > 0 );
    } else {
        listToDeal := selectset( this, MappingForecast, item, businessTypes.Find( item.BusinessType() ) <> -1 and item.Quantity()>0 );
        listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, businessTypes.Find( item.BusinessType() ) <> -1 and item.Quantity()>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_MappingInventoryValueAndCostData.qbl
@@ -1,11 +1,13 @@
Quintiq file version 2.0
#parent: #root
Method MappingInventoryValueAndCostData
Method MappingInventoryValueAndCostData (
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // yypsybs Aug-15-2023 (created)
    listtodeal := selectset( this,MappingInventoryValueAndCost,item,true );
    listtodeal := selectset( globalOTDTable,Global_MappingStockingPointCost,item,true );
    totalcount := listtodeal.Size();
    
    info( "InventoryCost has " + totalcount.AsQUILL() + " rows in total" );
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -3,7 +3,8 @@
Method MappingOperationBOMData (
  Strings businessTypes,
  Boolean isKeyProduct,
  Boolean createPurchaseSupplyMaterial
  Boolean createPurchaseSupplyMaterial,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
@@ -12,9 +13,9 @@
    
    keyProductList := construct( Strings );
    if( isKeyProduct ) {
        keyProductList := selectuniquevalues( this, MappingProduct, item, item.ProductMajorType()="成品" or item.ProductMajorType()="半成品", item.ID() );
        keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="成品" or item.ProductMajorType()="半成品", item.ID() );
    }
    bomList := selectsortedset(  this, MappingBOM, item,
    bomList := selectsortedset(  globalOTDTable, Global_MappingOperationBOM, item,
                                 ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0, 
                                         true, 
    //                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
@@ -61,9 +62,9 @@
                if( not isnull( stockingPoint)){
                  if( isKeyProduct){
                      keyRows := selectset( routingRows,Elements,routingrow,keyProductList.Find( routingrow.ComponentCode())>=0);
                      this.MappingOperationBOMDataRouting( routing,keyRows);
                      this.MappingOperationBOMDataRouting( routing,globalOTDTable,keyRows);
                    }else{
                      this.MappingOperationBOMDataRouting( routing,routingRows);
                      this.MappingOperationBOMDataRouting( routing,globalOTDTable,routingRows);
                    }
                    
                }
_Main/BL/Type_MacroPlan/Method_MappingOperationBOMDataRouting#576.qbl
@@ -2,7 +2,8 @@
#parent: #root
Method MappingOperationBOMDataRouting (
  Routing routing,
  MappingBOMs routingRows
  GlobalOTDTable globalOTDTable,
  Global_MappingOperationBOMs routingRows
)
{
  TextBody:
@@ -15,7 +16,7 @@
        rows := selectset( routingRows, Elements, row, row.ProcessSection() = processSection );
        firstRow := rows.Element( 0 );
        // æ‰¾orgCode/productId/processSection匹配且sequence最小的一组数据
        minSeq := MappingOperation::FindMinSeq( this, firstRow.OrganCode(), firstRow.ProductCode(), processSection );
        minSeq := Global_MappingOperation::FindMinSeq( globalOTDTable, firstRow.OrganCode(), firstRow.ProductCode(), processSection );
        routingStepId := processSection + "_" + [String]minSeq;
        // æ‰¾å¯¹åº”routingStep
        routingStep := RoutingStep::FindByName( routing, routingStepId );
_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -41,7 +41,10 @@
      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
        info( "Now is dealing with the " + count.AsQUILL() + "OperationCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
        }
      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection() + "_" + item.Line();
      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection();
      if( guard( item.Line(), "" ).Length() > 0 ) {
          id := id + "_" + item.Line();
        }
      operation := Operation::FindOperationTypeIndex( id );
      account := Account_MP::FindByName( this, "Operation cost" );
      isfromdb := false;
_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -1,21 +1,22 @@
Quintiq file version 2.0
#parent: #root
Method MappingOperationData (
  Strings businessTypes
  Strings businessTypes,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // yypsybs Aug-18-2023 (created)
    // èŽ·å–æœ‰åºçš„å¾…å¤„ç†è®°å½•
    toDealList := construct( MappingOperations );
    toDealList := construct( Global_MappingOperations ) ;
    if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
        toDealList := selectsortedset( this, MappingOperation, item,
        toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item,
                                       businessTypes.Find( item.BusinessType() ) >= 0, 
    //                                   businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, 
                                       item.SequenceNumber() );
    } else {
        toDealList := selectsortedset( this, MappingOperation, item,
        toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item,
                                       true, 
                                       item.SequenceNumber() );
    }
@@ -76,7 +77,7 @@
                                        0.0, 0.0, false, true );
        }
        
        ManufactureLTProcessSection::CreateOrUpdate( op );
    //    ManufactureLTProcessSection::CreateOrUpdate( op );
    }
    info( "========" )
    // éåކrouting,进行link
_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
@@ -2,6 +2,7 @@
#parent: #root
Method MappingProductData (
  Strings businesstypes,
  GlobalOTDTable globalOTDTable,
  Boolean iskeyproduct
)
{
@@ -11,21 +12,21 @@
    // Administrator Aug-16-2023 (created)
    // list to deal
    info( "Get list to deal of product" );
    listToDeal := construct( structured[MappingProduct] );
    listToDeal := construct( Global_MappingProduct_MPs );
    
    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
        if( iskeyproduct = true ){
          listToDeal := selectset( this, MappingProduct, item, item.KeyProduct() = true );
          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true );
          }
        else{
          listToDeal := selectset( this, MappingProduct, item, true );
          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, true );
          }
    } else {
        if( iskeyproduct = true ){
          listToDeal := selectset( this, MappingProduct, 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( this, MappingProduct, 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_MappingProductInLaneData.qbl
@@ -1,13 +1,15 @@
Quintiq file version 2.0
#parent: #root
Method MappingProductInLaneData
Method MappingProductInLaneData (
  GlobalOTDTable globalOTDTable
)
{
  Description: 'Get Product In Line data'
  TextBody:
  [*
    // Administrator Aug-17-2023 (created)
    // list to deal
    listtodeal := selectset( this, MappingProductInLane, item ,true );
    listtodeal := selectset( globalOTDTable, Global_MappingProductInLane, item ,true );
    totalcount := listtodeal.Size();
    info( "ProductInLane has " + totalcount.AsQUILL() + " rows in total" );
    
_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
@@ -1,7 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method MappingSalesSegmentData (
  Strings businessTypes
  Strings businessTypes,
  GlobalOTDTable globalOTDTable
)
{
  Description: 'ETL销售部门'
@@ -9,11 +10,11 @@
  [*
    // yypsybs Aug-15-2023 (created)
    // å¾…处理数据
    listToDeal := construct( structured[MappingSalesSegment] );
    listToDeal := construct( Global_MappingSalesSegment_MPs );
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
        listToDeal := selectset( this, MappingSalesSegment, item, true );
        listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, true );
    } else {
        listToDeal := selectset( this, MappingSalesSegment, 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
@@ -1,7 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method MappingUnitData (
  Strings businesstypes
  Strings businesstypes,
  GlobalOTDTable globalOTDTable
)
{
  Description: 'Get unit data from operation mapping'
@@ -9,12 +10,12 @@
  [*
    // Administrator Aug-21-2023 (created)
    // list to deal
    listtodeal := construct( structured[MappingOperation] );
    listtodeal := construct( Global_MappingOperations);
    
    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
        listtodeal := selectset( this, MappingOperation, item, true );
        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
    } else {
        listtodeal := selectset( this, MappingOperation, item,
        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item,
    //                             businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
                                 businesstypes.Find( item.BusinessType() ) >= 0
                                );
_Main/BL/Type_MacroPlan/Method_MappingUnitOfMeasureData.qbl
@@ -1,6 +1,8 @@
Quintiq file version 2.0
#parent: #root
Method MappingUnitOfMeasureData
Method MappingUnitOfMeasureData (
  GlobalOTDTable globalotdtable
)
{
  Description: 'ETL数据转模型数据'
  TextBody:
@@ -16,7 +18,7 @@
        //error( "multi default unit of measure" )
    }
    
    traverse( this, MappingUnitOfMeasure, item ) {
    traverse( globalotdtable, Global_MappingUnitOfMeasure_MP, item ) {
        UnitOfMeasure_MP::CreateOrUpdate( this, item.Name(), item.IsDefault() );
    }
  *]
_Main/BL/Type_MacroPlan/StaticMethod_DoSync#618.qbl
@@ -4,7 +4,8 @@
  MacroPlan macroPlan,
  String businessTypeStr,
  Boolean isKeyProduct,
  Boolean createPurchaseSupplyMaterial
  Boolean createPurchaseSupplyMaterial,
  GlobalOTDTable globalOTDTable
)
{
  Description: '单次同步'
@@ -15,6 +16,6 @@
    if( businessTypeStr.Length() > 0 ) {
        businessTypes := businessTypeStr.Tokenize( ',' );
    }
    MacroPlan::DoSync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial );
    MacroPlan::DoSync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial ,globalOTDTable);
  *]
}
_Main/BL/Type_MacroPlan/StaticMethod_DoSync.qbl
@@ -3,7 +3,8 @@
StaticMethod DoSync (
  MacroPlan macroPlan,
  Boolean isKeyProduct,
  Boolean createPurchaseSupplyMaterial
  Boolean createPurchaseSupplyMaterial,
  GlobalOTDTable globalOTDTable
)
{
  Description: '单次同步'
@@ -11,6 +12,6 @@
  [*
    // yypsybs Aug-17-2023 (created)
    businessTypes := construct( Strings );
    MacroPlan::DoSync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial );
    MacroPlan::DoSync( macroPlan, businessTypes, isKeyProduct, createPurchaseSupplyMaterial ,globalOTDTable);
  *]
}
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -4,7 +4,8 @@
  MacroPlan macroPlan,
  Strings businessTypes,
  Boolean isKeyProduct,
  Boolean createPurchaseSupplyMaterial
  Boolean createPurchaseSupplyMaterial,
  GlobalOTDTable globalOTDTable
)
{
  Description: '单次同步'
@@ -27,10 +28,17 @@
    macroPlan.InitialUnitAndStockingPoint();
    
    // å•位-1
    UnitOfMeasure_MP::DoSync( macroPlan );
    UnitOfMeasure_MP::DoSync( globalOTDTable,macroPlan );
    
    // é”€å”®éƒ¨é—¨-2
    SalesSegment_MP::DoSync( macroPlan, businessTypes );
    SalesSegment_MP::DoSync( macroPlan, businessTypes,globalOTDTable );
    // Unit-9
    // ä¸ŽOperation一同处理
    //info( "BaseConversionFactor Finished, Start Operation Data Broker" );
    //macroPlan.Broker_OTD_Operation().Execute();
    info( "Operation Data Broker Finished, Start Unit Mapping" );
    macroPlan.MappingUnitData( businessTypes ,globalOTDTable);
    
    // åº“存点-3
    info( "Sales Segment Finished, Start Get StockingPoint From Api" )
@@ -63,29 +71,22 @@
    macroPlan.ApiCurencyRatesData( data );
    
    // äº§å“ç‰©æ–™-6
    info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
    macroPlan.Broker_OTD_Product().Execute();
    //info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
    //macroPlan.Broker_OTD_Product().Execute();
    info( "Product Data Broker Finished, Start Product Mapping" );
    //testproduct := construct( Strings );
    macroPlan.MappingProductData( businessTypes, isKeyProduct );
    macroPlan.MappingProductData( businessTypes, globalOTDTable,isKeyProduct );
    
    //单位转换-7
    BaseConversionFactor::DoSync( macroPlan );
    // Unit-9
    // ä¸ŽOperation一同处理
    info( "BaseConversionFactor Finished, Start Operation Data Broker" );
    macroPlan.Broker_OTD_Operation().Execute();
    info( "Operation Data Broker Finished, Start Unit Mapping" );
    macroPlan.MappingUnitData( businessTypes );
    BaseConversionFactor::DoSync( macroPlan ,globalOTDTable);
    
    // å·¥è‰ºè·¯çº¿ + BOM-9
    info( "Unit Finished, Start Operation Mapping" );
    macroPlan.MappingOperationData( businessTypes );
    info( "Operation Finished, Start BOM Data Broker" );
    macroPlan.Broker_OTD_BOM().Execute();
    macroPlan.MappingOperationData( businessTypes ,globalOTDTable);
    //info( "Operation Finished, Start BOM Data Broker" );
    //macroPlan.Broker_OTD_BOM().Execute();
    info( "BOM Data Broker Finished, Start BOM Mapping" );
    macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial );
    macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable );
    
    //车道信息-10
    info( "BOM Finished, Start Get Lanes From Api" );
@@ -108,37 +109,35 @@
    macroPlan.ApiLaneLegsData( data );
    
    // ä¾›åº”网络(车道)-12
    info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
    macroPlan.Broker_OTD_ProductInLane().Execute();
    //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
    //macroPlan.Broker_OTD_ProductInLane().Execute();
    info( "ProductInLane Data Broker Finished, Start ProductInLane Mapping" );
    macroPlan.MappingProductInLaneData();
    macroPlan.MappingProductInLaneData(globalOTDTable);
    
    // åœ¨åº“库存数据-13
    info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
    macroPlan.Broker_OTD_ActualPISPIP().Execute();
    //info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
    //macroPlan.Broker_OTD_ActualPISPIP().Execute();
    info( "ActualPISPIP Data Broker Finished, Start ActualPISPIP Mapping" );
    //macroPlan.MappingActualPISPIPData( businessTypes, true );
    macroPlan.MappingActualPISPIPData( businessTypes, isKeyProduct );
    macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable,isKeyProduct );
    
    // åœ¨é€”库存-14
    info( "ActualPISPIP Finished, Start ExternalSupply Data Broker" );
    macroPlan.Broker_OTD_ExternalSupply().Execute();
    //macroPlan.MappingExternalSupplyData( businessTypes, true );
    //info( "ActualPISPIP Finished, Start ExternalSupply Data Broker" );
    //macroPlan.Broker_OTD_ExternalSupply().Execute();
    info( "ExternalSupply Data Broker Finished, Start ExternalSupply Mapping" );
    macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct );
    macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable);
    
    // åº“存成本-15
    InventoryValueAndCost::DoSync( macroPlan );
    InventoryValueAndCost::DoSync( macroPlan,globalOTDTable );
    
    // todo åˆ¶é€ æˆæœ¬-16
    info( "InventoryCost Finished, Start OperationCost Mapping" );
    //macroPlan.MappingOperationCostData( businessTypes );
    macroPlan.MappingOperationCostData( businessTypes );
    
    // è®¢å•预测-17
    Forecast::DoSync( macroPlan, businessTypes );
    Forecast::DoSync( macroPlan, businessTypes ,globalOTDTable);
    
    // è®¢å•需求-18
    CustomerOrder::DoSync( macroPlan, businessTypes );
    CustomerOrder::DoSync( macroPlan, businessTypes, globalOTDTable);
    
    //删除多余报错数据-19
    macroPlan.DeleteSnaityCheck();
_Main/BL/Type_ManufactureLTImputation/StaticMethod_Transfer.qbl
@@ -8,26 +8,26 @@
  Description: '移交控制权'
  TextBody:
  [*
    // yypsybs Aug-25-2023 (created)
    if( isnull( oldMP ) ) {
        info( "========transfer ManufactureLTImputations to macroPlan " + [String]newMP.MDSID() + "========" );
    } else {
        info( "========transfer ManufactureLTImputations from macroPlan " + [String]oldMP.MDSID() + " to macroPlan " + [String]newMP.MDSID() + "========" );
    }
    // æ¸…空新的,老的复制到新的,清空老的
    if( not isnull( oldMP ) and not isnull( newMP ) ) {
        info( "old ManufactureLTImputation size : " + [String]oldMP.ManufactureLTImputation( relsize ) )
        traverse( oldMP, ManufactureLTImputation, parent, true ) {
            traverse( parent, ManufactureLTProcessSection, child, true ) {
                  ManufactureLTProcessSection::CreateOrUpdate( newMP, parent.OrgCode(), parent.SkuID(), parent.Describe(),
                                                                child.ProcessSection(), child.Sequence(), child.Line(), child.SystemLT(),
                                                               child.Edited(), child.EditLT(), child.Describe() );
            }
        }
    }
    // å¤„理新的的operation
    traverse( newMP, Routing.RoutingStep.Operation, item ) {
         ManufactureLTProcessSection::CreateOrUpdate( item );
    }
    //// yypsybs Aug-25-2023 (created)
    //if( isnull( oldMP ) ) {
    //    info( "========transfer ManufactureLTImputations to macroPlan " + [String]newMP.MDSID() + "========" );
    //} else {
    //    info( "========transfer ManufactureLTImputations from macroPlan " + [String]oldMP.MDSID() + " to macroPlan " + [String]newMP.MDSID() + "========" );
    //}
    //// æ¸…空新的,老的复制到新的,清空老的
    //if( not isnull( oldMP ) and not isnull( newMP ) ) {
    //    info( "old ManufactureLTImputation size : " + [String]oldMP.ManufactureLTImputation( relsize ) )
    //    traverse( oldMP, ManufactureLTImputation, parent, true ) {
    //        traverse( parent, ManufactureLTProcessSection, child, true ) {
    //              ManufactureLTProcessSection::CreateOrUpdate( newMP, parent.OrgCode(), parent.SkuID(), parent.Describe(),
    //                                                            child.ProcessSection(), child.Sequence(), child.Line(), child.SystemLT(),
    //                                                           child.Edited(), child.EditLT(), child.Describe() );
    //        }
    //    }
    //}
    //// å¤„理新的的operation
    //traverse( newMP, Routing.RoutingStep.Operation, item ) {
    //     ManufactureLTProcessSection::CreateOrUpdate( item );
    //}
  *]
}
_Main/BL/Type_ManufactureLTProcessSection/StaticMethod_CreateOrUpdate.qbl
@@ -30,11 +30,11 @@
        line := operationNameSplit.Element( 2 );
    }
    child := null( ManufactureLTProcessSection );
    if( orgCode <> "" and productId <> "" and processStep <> "" and sequence <> "" ) {
        parent := ManufactureLTImputation::CreateOrUpdate( op.RoutingStep().Routing().MacroPlan(), orgCode, productId, "" );
        info( "DaysAsReal : " + [String]op.UserLeadTime().DaysAsReal() );
        child := ManufactureLTProcessSection::CreateOrUpdate( parent, processStep, false, sequence, line, op.UserLeadTime().DaysAsReal(), 0.0, "" );
    }
    //if( orgCode <> "" and productId <> "" and processStep <> "" and sequence <> "" ) {
    //    parent := ManufactureLTImputation::CreateOrUpdate( op.RoutingStep().Routing().MacroPlan(), orgCode, productId, "" );
    //    info( "DaysAsReal : " + [String]op.UserLeadTime().DaysAsReal() );
    //    child := ManufactureLTProcessSection::CreateOrUpdate( parent, processStep, false, sequence, line, op.UserLeadTime().DaysAsReal(), 0.0, "" );
    //}
    return child;
  *]
}
_Main/BL/Type_MappingSaleBudge/StaticMethod_ExpectedHeaders.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
Quintiq file version 2.0
#parent: #root
StaticMethod ExpectedHeaders () as owning Strings
{
  TextBody:
  [*
    // yypsybs Jun-30-2023 (created)
    value := construct( structured[String] );
    value.Add( "删除标记" );
    value.Add( "年份" );
    value.Add( "业务部门" );
    value.Add( "显示技术分类" );
    value.Add( "业务分类" );
    value.Add( "产品线/产品规格" );
    value.Add( "产品料号" );
    value.Add( "Array产地" );
    value.Add( "蒸镀产地" );
    value.Add( "分辨率" );
    value.Add( "出货形态" );
    value.Add( "切割数" );
    value.Add( "产能当量" );
    value.Add( "mask数" );
    value.Add( "1月产能(PCS)" );
    value.Add( "2月产能(PCS)" );
    value.Add( "3月产能(PCS)" );
    value.Add( "4月产能(PCS)" );
    value.Add( "5月产能(PCS)" );
    value.Add( "6月产能(PCS)" );
    value.Add( "7月产能(PCS)" );
    value.Add( "8月产能(PCS)" );
    value.Add( "9月产能(PCS)" );
    value.Add( "10月产能(PCS)" );
    value.Add( "11月产能(PCS)" );
    value.Add( "12月产能(PCS)" );
    value.Add( "年产能(PCS)" );
    value.Add( "1月产能(实数大张)" );
    value.Add( "2月产能(实数大张)" );
    value.Add( "3月产能(实数大张)" );
    value.Add( "4月产能(实数大张)" );
    value.Add( "5月产能(实数大张)" );
    value.Add( "6月产能(实数大张)" );
    value.Add( "7月产能(实数大张)" );
    value.Add( "8月产能(实数大张)" );
    value.Add( "9月产能(实数大张)" );
    value.Add( "10月产能(实数大张)" );
    value.Add( "11月产能(实数大张)" );
    value.Add( "12月产能(实数大张)" );
    value.Add( "年产能(实数大张)" );
    value.Add( "1月销售额(W)" );
    value.Add( "2月销售额(W)" );
    value.Add( "3月销售额(W)" );
    value.Add( "4月销售额(W)" );
    value.Add( "5月销售额(W)" );
    value.Add( "6月销售额(W)" );
    value.Add( "7月销售额(W)" );
    value.Add( "8月销售额(W)" );
    value.Add( "9月销售额(W)" );
    value.Add( "10月销售额(W)" );
    value.Add( "11月销售额(W)" );
    value.Add( "12月销售额(W)" );
    value.Add( "年销售额(W)" );
    return &value;
  *]
}
_Main/BL/Type_MappingSaleBudge/StaticMethod_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  MPSync parent
) as String
{
  TextBody:
  [*
    // yypsybs Jul-1-2023 (created)
    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
    <table>
      <name>MappingCapacityAndSaleBudge</name>
    ';
    //---------------------------------------------------------------------------------------------
    exportFields := MappingCapacityAndSaleBudge::ExportFields();
    exportHeaders := MappingCapacityAndSaleBudge::ExpectedHeaders();
    if( exportFields.Size() <> exportHeaders.Size() ) {
      error( "fields and headers not match" );
    }
    info( "export start" );
    for( i := 0; i < exportFields.Size() ; i++ ) {
      header := exportHeaders.Element( i );
      fieldName := exportFields.Element( i );
      info( "header : " + header )
      info( "fieldName : " + fieldName )
      columnStr := "<column><name>" + header + "</name><type>String</type>";
      traverse( parent, MappingCapacityAndSaleBudge, oldRecord ) {
        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", fieldName);
        if( not isnull( field ) ) {
          fieldValue := "";
          if( fieldValue = "" ) {
            fieldValue := guard( field.GetString( oldRecord ), "" );
          }
          if( fieldValue = "" ) {
            fieldValue := guard( [String]field.GetNumber( oldRecord ), "" );
          }
          if( fieldValue = "" ) {
            fieldValue := guard( [String]field.GetReal( oldRecord ), "" );
          }
          if( fieldValue = "" ) {
            fieldValue := guard( ifexpr( field.GetBoolean( oldRecord ), "Y", "N" ), "" );
          }
          if( fieldValue = "" ) {
            fileDateValue := guard( field.GetDate( oldRecord ), Date::MinDate() );
            if( fileDateValue <> Date::MinDate() ) {
              conv := DateTimeToString::StandardConverter();
              conv.SetCustomConversion();
              conv.CustomFormatString( 'yyyyMMdd' );
              fieldValue := conv.Convert( fileDateValue.DateTime() );
            }
          }
          cellStr := '<cell value="' + fieldValue + '"/>';
          columnStr := columnStr + cellStr;
        } else {
          error( "no field " + fieldName + " in type MappingCapacityAndSaleBudge");
        }
      }
      columnStr := columnStr + "</column>";
      xmlTemplate := xmlTemplate + columnStr;
    }
    //---------------------------------------------------------------------------------------------
    xmlTemplate := xmlTemplate + "</table>";
    info( xmlTemplate );
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
    XLS::SaveTable( tableHandle, OS::TempPath() + "MappingCapacityAndSaleBudge.xlsx" );
    file := OSFile::Construct();
    file.Open( OS::TempPath() + "MappingCapacityAndSaleBudge.xlsx", "Read", true );
    data := file.ReadBinary()
    info( "export end" );
    return data.AsBase64EncodedString();
  *]
}
_Main/BL/Type_MappingSaleBudge/StaticMethod_ExportFields.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
Quintiq file version 2.0
#parent: #root
StaticMethod ExportFields () as owning Strings
{
  TextBody:
  [*
    // yypsybs Jun-30-2023 (created)
    value := construct( structured[String] );
    value.Add( "Deleted" );
    value.Add( "YearNo" );
    value.Add( "OrgCode" );
    value.Add( "DisplayTechnology" );
    value.Add( "BusinessType" );
    value.Add( "LineAndSpecification" );
    value.Add( "ProductCode" );
    value.Add( "PlaceOfProductionOfArray" );
    value.Add( "PlaceOfProductionOfEvaporation" );
    value.Add( "Resolution" );
    value.Add( "ShippingForm" );
    value.Add( "NumberOfCut" );
    value.Add( "CapacityEquivalent" );
    value.Add( "NumberOfMask" );
    value.Add( "CapacityInPCSInMonth1" );
    value.Add( "CapacityInPCSInMonth2" );
    value.Add( "CapacityInPCSInMonth3" );
    value.Add( "CapacityInPCSInMonth4" );
    value.Add( "CapacityInPCSInMonth5" );
    value.Add( "CapacityInPCSInMonth6" );
    value.Add( "CapacityInPCSInMonth7" );
    value.Add( "CapacityInPCSInMonth8" );
    value.Add( "CapacityInPCSInMonth9" );
    value.Add( "CapacityInPCSInMonth10" );
    value.Add( "CapacityInPCSInMonth11" );
    value.Add( "CapacityInPCSInMonth12" );
    value.Add( "CapacityInPCSTotal" );
    value.Add( "CapacityInSheetInMonth1" );
    value.Add( "CapacityInSheetInMonth2" );
    value.Add( "CapacityInSheetInMonth3" );
    value.Add( "CapacityInSheetInMonth4" );
    value.Add( "CapacityInSheetInMonth5" );
    value.Add( "CapacityInSheetInMonth6" );
    value.Add( "CapacityInSheetInMonth7" );
    value.Add( "CapacityInSheetInMonth8" );
    value.Add( "CapacityInSheetInMonth9" );
    value.Add( "CapacityInSheetInMonth10" );
    value.Add( "CapacityInSheetInMonth11" );
    value.Add( "CapacityInSheetInMonth12" );
    value.Add( "CapacityInSheetTotal" );
    value.Add( "SaleAmountInMonth1" );
    value.Add( "SaleAmountInMonth2" );
    value.Add( "SaleAmountInMonth3" );
    value.Add( "SaleAmountInMonth5" );
    value.Add( "SaleAmountInMonth4" );
    value.Add( "SaleAmountInMonth6" );
    value.Add( "SaleAmountInMonth7" );
    value.Add( "SaleAmountInMonth8" );
    value.Add( "SaleAmountInMonth9" );
    value.Add( "SaleAmountInMonth10" );
    value.Add( "SaleAmountInMonth11" );
    value.Add( "SaleAmountInMonth12" );
    value.Add( "SaleAmountTotal" );
    return &value;
  *]
}
_Main/BL/Type_Operation/Method_GetHasValidOperationInputOutput.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
Quintiq file version 2.0
#parent: #root
Method GetHasValidOperationInputOutput (
  output Strings feedback_o,
  output Strings sanitycheckfeedback_o
) declarative remote #extension
{
  TextBody:
  [*
    // desmondt Oct-3-2014 (created)
    feedback := '';
    sanitycheckfeedback := ''
    if( ( this.Unit().QuantityToProcess() = GlobalParameters_MP::GetQTProcessIn()
          or not this.Unit().IsSupplier() ) // Tianma change 20230925: If the unit is not a supplier, raise a data issue if there's no input
        and this.OperationInput( relsize ) = 0 )
    {
      feedback := Translations::MP_Operation_ViolateHasValidOperationInputOutput_NoOperationInput();
      sanitycheckfeedback_o.Add( SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue() );
    }
    else if( this.Unit().QuantityToProcess() = GlobalParameters_MP::GetQTProcessOut()
             and this.OperationOutput( relsize ) = 0 )
    {
      feedback := Translations::MP_Operation_ViolateHasValidOperationInputOutput_NoOperationOutput();
      sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue();
    }
    if( not isnull( feedback_o ) and feedback <> '' )
    {
      name := MacroPlan::GetSubstituteName( this.Name() ); // To avoid empty name/name too long
      feedback_o.Add( SanityCheckMessage::GetFormattedMessage( Translations::MP_Process_Instance( this.DefinitionName(), name ),
                                                               feedback ) );
      sanitycheckfeedback_o.Add( sanitycheckfeedback );
    }
    return feedback = '';
  *]
}
_Main/BL/Type_Operation/Method_OnCommitCustom.qbl
@@ -5,7 +5,7 @@
  TextBody:
  [*
    // yypsybs Aug-25-2023 (created)
    info( "Operation::OnCommitCustom" )
    ManufactureLTProcessSection::CreateOrUpdate( this );
    //info( "Operation::OnCommitCustom" )
    //ManufactureLTProcessSection::CreateOrUpdate( this );
  *]
}
_Main/BL/Type_SalesSegment_MP/StaticMethod_DoSync.qbl
@@ -2,15 +2,16 @@
#parent: #root
StaticMethod DoSync (
  MacroPlan macroPlan,
  Strings businessTypes
  Strings businessTypes,
  GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    // yypsybs Aug-17-2023 (created)
    info( "UnitOfMeasure_MP Finished, Start Sales Segment Data Broker" )
    macroPlan.Broker_OTD_SalesSegment().Execute();
    //info( "UnitOfMeasure_MP Finished, Start Sales Segment Data Broker" )
    //macroPlan.Broker_OTD_SalesSegment().Execute();
    info( "Sales Segment Data Broker Finished, Start Sales Segment Mapping" )
    macroPlan.MappingSalesSegmentData( businessTypes );
    macroPlan.MappingSalesSegmentData( businessTypes,globalOTDTable );
  *]
}
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl
@@ -2,7 +2,7 @@
#parent: #root
Method CapacityAndSaleBudgeChart (
  MacroPlans macroPlans,
  Boolean isCapacity,
  String saleOrCapacity,
  String groupBy,
  String byBusinessTypeOrByOrgCode,
  CapacityAndSaleBudgeFilterBusinessTypes businessTypes,
@@ -19,7 +19,7 @@
  [*
    // yypsybs Sep-19-2023 (created)
    // true, false
    info( isCapacity );
    info( saleOrCapacity );
    // æœˆ;季度;半年;å¹´
    info( groupBy );
    // é¢æ¿åŸºåœ°;事业部
@@ -82,18 +82,18 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                 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( isCapacity,
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                                       )
                                                   ); 
          }                    
@@ -106,18 +106,18 @@
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                   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( isCapacity,
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                         )
                                                     ); 
            }                    
@@ -134,9 +134,9 @@
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + [String]seasonNo + "季度-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                   );  
      //      info( "productCodeList : " + [String]productCodeList.Size() );
            // S&OP
@@ -144,9 +144,9 @@
              this.CapacityAndSaleBudgeChartElement( relnew, 
                                                     TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + [String]seasonNo + "季度-" + macroPlan.ScenarioName(),
                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                     Quantity := ifexpr( isCapacity,
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                                         )
                                                     ); 
            }                    
@@ -162,18 +162,18 @@
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + monthNoString + "月-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                   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( isCapacity,
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                                         )
                                                     ); 
            }
@@ -188,18 +188,18 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
                                                 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( isCapacity,
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) ,
                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
                                                                       )
                                                   ); 
          }                    
@@ -212,18 +212,18 @@
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
                                                   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( isCapacity,
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
                                                                         )
                                                     ); 
            }                    
@@ -238,18 +238,18 @@
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + [String]seasonNo + "季度-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
                                                   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( isCapacity,
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
                                                                         )
                                                     ); 
            }                    
@@ -266,18 +266,18 @@
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year.YearNo() + "å¹´-第" + monthNoString + "月-目标",
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
                                                   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( isCapacity,
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                     Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
                                                                         )
                                                     ); 
            }            
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
@@ -2,7 +2,7 @@
#parent: #root
Method CapacityAndSaleBudgeChart (
  MacroPlans macroPlans,
  Boolean isCapacity,
  String saleOrCapacity,
  String groupBy,
  String byBusinessTypeOrByOrgCode,
  String businessTypeChosen,
@@ -22,7 +22,7 @@
  [*
    // yypsybs Sep-19-2023 (created)
    // true, false
    info( isCapacity );
    info( saleOrCapacity );
    // æœˆ;季度;半年;å¹´
    info( groupBy );
    // é¢æ¿åŸºåœ°;事业部
@@ -61,20 +61,18 @@
        this.CapacityAndSaleBudgeChartElement( relnew, 
                                               TimeStringAndScenarioName := [String]year + "å¹´-目标",
                                               BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                               Quantity := ifexpr( isCapacity,
                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                   // todo QID 23
                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                               Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                               );  
        // S&OP
        traverse( macroPlans, Elements, macroPlan ) {
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-" + macroPlan.ScenarioName(),
                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ),
                                                                     // todo
                                                                     0.0 )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     0.0,
                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ) )
                                                 ); 
        }                    
      }
@@ -86,18 +84,18 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                 );  
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ),
                                                                       0.0 )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       0.0,
                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ) )
                                                   ); 
          }                    
        }
@@ -113,9 +111,9 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-第" + [String]seasonNo + "季度-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                 );  
    //      info( "productCodeList : " + [String]productCodeList.Size() );
          // S&OP
@@ -123,9 +121,9 @@
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year + "å¹´-第" + [String]seasonNo + "季度-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ),
                                                                       0.0 )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       0.0,
                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ) )
                                                   ); 
          }                    
        }
@@ -139,18 +137,18 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-第" + monthNoString + "月-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                 );  
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year + "å¹´-第" + monthNoString + "月-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ),
                                                                       0.0 )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       0.0,
                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ) )
                                                   ); 
          }                    
        }
@@ -163,18 +161,18 @@
        this.CapacityAndSaleBudgeChartElement( relnew, 
                                               TimeStringAndScenarioName := [String]year + "å¹´-目标",
                                               BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                               Quantity := ifexpr( isCapacity,
                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                               Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ),
                                                                   MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                               );  
        // S&OP
        traverse( macroPlans, Elements, macroPlan ) {
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-" + macroPlan.ScenarioName(),
                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ),
                                                                     0.0 )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     0.0,
                                                                     Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ) )
                                                 ); 
        }                    
      }
@@ -186,18 +184,18 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                 );  
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year + "å¹´-" + ifexpr( halfNo = 1, "上", "下" ) + "半年-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ),
                                                                       0.0 )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       0.0,
                                                                       Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ) )
                                                   ); 
          }                    
        }
@@ -210,18 +208,18 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-第" + [String]seasonNo + "季度-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
                                                                     MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                 );  
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year + "å¹´-第" + [String]seasonNo + "季度-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ),
                                                                       0.0 )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       0.0,
                                                                       Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ) )
                                                   ); 
          }                    
        }
@@ -235,18 +233,18 @@
          this.CapacityAndSaleBudgeChartElement( relnew, 
                                                 TimeStringAndScenarioName := [String]year + "å¹´-第" + monthNoString + "月-目标",
                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                 Quantity := ifexpr( isCapacity,
                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                 Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
                                                                     MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                 );  
          // S&OP
          traverse( macroPlans, Elements, macroPlan ) {
            this.CapacityAndSaleBudgeChartElement( relnew, 
                                                   TimeStringAndScenarioName := [String]year + "å¹´-第" + monthNoString + "月-" + macroPlan.ScenarioName(),
                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                   Quantity := ifexpr( isCapacity,
                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ),
                                                                       0.0 )
                                                   Quantity := ifexpr( saleOrCapacity = "销售额",
                                                                       0.0,
                                                                       Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ) )
                                                   ); 
          }                    
        }
_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
@@ -72,7 +72,9 @@
    info( "dealing é¢æ¿åˆ†é…é‡" )
    if( CapacityAndSaleBudgeFilterItem::Contains( items, "面板分配量" ) ) {
      traverse( years, Elements, year ) {
        info( "面板分配量" + [String]year.YearNo() + "å¹´" );
        // åŽ†å²æ•°æ®
        info( "面板分配量" + [String]year.YearNo() + "年历史数据" );
        traverse( months, Elements, month ) {
          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-年度预算" );
          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
@@ -87,6 +89,7 @@
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
        info( "面板分配量" + [String]year.YearNo() + "å¹´S&OP数据" );
        // S&OP数据
        traverse( macroPlans, Elements, macroPlan ) {
          traverse( months, Elements, month ) {
@@ -112,7 +115,9 @@
    info( "dealing é”€å”®é¢" )
    if( CapacityAndSaleBudgeFilterItem::Contains( items, "销售额" ) ) {
      traverse( years, Elements, year ) {
        info( "销售额" + [String]year.YearNo() + "å¹´" );
        // åŽ†å²æ•°æ®
        info( "销售额" + [String]year.YearNo() + "年历史数据" );
        traverse( months, Elements, month ) {
          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-年度预算" );
          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
@@ -127,6 +132,7 @@
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
        info( "销售额" + [String]year.YearNo() + "年历史数据S&OP数据" );
        // S&OP数据
        traverse( macroPlans, Elements, macroPlan ) {
          traverse( months, Elements, month ) {
@@ -151,7 +157,7 @@
    info( "dealing å¤§å¼ ç›ˆåˆ©é¢" )
    traverse( years, Elements, year ) {
      // åŽ†å²æ•°æ®
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-年度预算" );
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´-年度预算" );
      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
        // todo 
        // QID 23
@@ -160,7 +166,7 @@
      }
      // S&OP数据
      traverse( macroPlans, Elements, macroPlan ) {
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´" );
        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 );
@@ -171,16 +177,15 @@
    info( "dealing äº§å“ç›ˆåˆ©é¢" )
    traverse( years, Elements, year ) {
      // åŽ†å²æ•°æ®
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-年度预算" );
      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() + "å¹´" );
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-" + [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName() );
        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
          // todo
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
_Main/BL/Type_ScenarioManager/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 ) {
      info( "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 ) {
      info( "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_ScenarioManager/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GeneratesTheSpecifiedXMLColumn (
  XMLDOMDocument xmlDOMDocument,
  XMLDOMElement tableElement,
  String value,
  String columnName
)
{
  TextBody:
  [*
    columnElements := tableElement.GetElementsByTagName( "column" );
    traverse ( columnElements, Elements, ce ) {
      nameElement := ce.GetElementByTagName( "name", 0 );
      if ( nameElement.TextContent() = columnName ) {
        cell := xmlDOMDocument.CreateElement( "cell" );
        cell.SetAttribute( "value", value );
        ce.AppendChild( cell );
      }
    }
  *]
}
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
@@ -33,7 +33,7 @@
      // Update
      result.Update( unitid, id, name, unitofmeasurename, currencyname, isplannedinfinite, datestart, dateend, groupname, description, isfromdb );
    };
    result.IsPlannedInfinite(true);
    return result;
  *]
}
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpointFromJson.qbl
@@ -13,6 +13,11 @@
    unitid := datarow.Get( "unitid" ).GetString();
    name := datarow.Get( "name" ).GetString();
    
    unit := Unit::FindUnitTypeIndex( unitid);
    if( isnull( unit)){
      unitid := "生产";
    }
    result := StockingPoint_MP::CreateStockingpoint( mp, id, unitid, name );
    
    return result;
_Main/BL/Type_UnitOfMeasure_MP/StaticMethod_DoSync.qbl
@@ -1,16 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod DoSync (
  MacroPlan macroPlan
  GlobalOTDTable globalotdtable,
  MacroPlan macroplan
)
{
  Description: '单次同步'
  TextBody:
  [*
    // yypsybs Aug-17-2023 (created)
    info( "Inital Finished, Start UnitOfMeasure_MP Data Broker" )
    macroPlan.Broker_OTD_UnitOfMeasure().Execute();
    //info( "Inital Finished, Start UnitOfMeasure_MP Data Broker" )
    //macroPlan.Broker_OTD_UnitOfMeasure().Execute();
    info( "UnitOfMeasure_MP Data Broker Finished, Start UnitOfMeasure_MP Mapping" )
    macroPlan.MappingUnitOfMeasureData();
    macroplan.MappingUnitOfMeasureData(globalotdtable);
  *]
}
_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
@@ -5,7 +5,7 @@
  #keys: '[414702.0.340554926]'
  Body:
  [*
    CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan );
    CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan, SelectionScenario.Data() );
  *]
  CanBindMultiple: false
  DefinitionID: 'Responsedef_GUIButtonBase_OnClick'
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgTest.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component abgTest
{
  #keys: '[414702.0.358311816]'
  BaseType: 'WebActionBarGroup'
  Children:
  [
    Component btnTest
    {
      #keys: '[414702.0.358311907]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'WATER_FISH'
        Label: '测试视图'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    Taborder: 4
    Title: 'TestView'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationDevelopmentActionBarPageDef#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
Component applicationDevelopmentActionBarPageDef id:applicationDevelopmentActionBarPageDef_1 #extension
{
  Children:
  [
    #child: abgTest
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_abgTest_btnTest_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: abgTest/btnTest
Response OnClick () id:Response_TIANMA_JITUAN_abgTest_btnTest_OnClick
{
  #keys: '[414702.0.358346189]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "Test", true );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -11,6 +11,7 @@
      [
        #child: ActionBarPageData
        #child: ActionBarPageSales
        #child: applicationDevelopmentActionBarPageDef_1
      ]
    }
    Component DataHolderCapacityAndSaleBudgeFilterItem
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[414702.0.373821470]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnOk
    {
      #keys: '[414702.0.373821474]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 0
      ]
    }
    Component btnCancel
    {
      #keys: '[414702.0.373821476]'
      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_DialogCapacityAllocationResultsRuleConfiguration/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[414702.0.373821468]'
  BaseType: 'WebPanel'
  Children:
  [
    Component efPanelMaterialCode
    {
      #keys: '[414702.0.375722232]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderDialogData.Data.PanelMaterialCode'
        Label: '面板物料编码'
        Taborder: 0
      ]
    }
    Component efModuleMaterialCode
    {
      #keys: '[414702.0.375722245]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderDialogData.Data.ModuleMaterialCode'
        Label: '模板产成品ID'
        Taborder: 1
      ]
    }
    Component efDivision
    {
      #keys: '[414702.0.375722257]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderDialogData.Data.Division'
        Label: '事业部'
        Taborder: 2
      ]
    }
    Component efStockingPointID
    {
      #keys: '[414702.0.375874061]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'DataHolderDialogData.Data.StockingPointID'
        Label: '模组产成品库存点ID'
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_Edit.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
Method Edit (
  CapacityAllocationResultsRuleConfiguration selection
) id:Method_DialogCreateEditCapacityAllocationResultsRuleConfiguration_Edit
{
  #keys: '[414702.0.375759040]'
  Body:
  [*
    // Edits assumption
    data := shadow( selection );
    DataHolderDialogData.Data( &data );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Method_New.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Method New () id:Method_DialogCreateEditCapacityAllocationResultsRuleConfiguration_New
{
  #keys: '[414702.0.375317354]'
  Body:
  [*
    capacityAllocationResultsRuleConfiguration := GlobalOTDTable.CapacityAllocationResultsRuleConfiguration( relshadow );
    DataHolderDialogData.Data( &capacityAllocationResultsRuleConfiguration );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[414702.0.373821480]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[414702.0.373821479]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      Form.ApplyChanges();
      data := DataHolderDialogData.Data().WrappedInstance();
      if ( isnull( data ) ) {
        GlobalOTDTable.CapacityAllocationResultsRuleConfiguration( relnew,
                                                                   PanelMaterialCode  := efPanelMaterialCode.Text(),
                                                                   ModuleMaterialCode := efModuleMaterialCode.Text(),
                                                                   Division           := efDivision.Text(),
                                                                   StockingPointID    := efStockingPointID.Text()
                                                                  );
      } else {
        DataHolderDialogData.Data().PanelMaterialCode( efPanelMaterialCode.Text() );
        DataHolderDialogData.Data().ModuleMaterialCode( efModuleMaterialCode.Text() );
        DataHolderDialogData.Data().Division( efDivision.Text() );
        DataHolderDialogData.Data().StockingPointID( efStockingPointID.Text() );
        DataHolderDialogData.Data().Commit();
      }
      Form.Close();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCapacityAllocationResultsRuleConfiguration/_ROOT_Component_DialogCreateEditCapacityAllocationResultsRuleConfiguration.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogCreateEditCapacityAllocationResultsRuleConfiguration
{
  #keys: '[414702.0.373821466]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
    Component DataHolderDialogData
    {
      #keys: '[414702.0.375413793]'
      BaseType: 'WebDataHolder'
      Databinding: 'shadow[CapacityAllocationResultsRuleConfiguration]*'
      Properties:
      [
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Image: 'BEAR'
    Padding: 'false'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -108,7 +108,7 @@
    // sync data
    if( data.EnableSync() ) {
        MacroPlan::DoSync( macroPlanNew, 
                           data.BusinessType(), data.IsKeyProduct(), data.CreatePurchaseSupplyMaterial() );
                           data.BusinessType(), data.IsKeyProduct(), data.CreatePurchaseSupplyMaterial() ,GlobalOTDTable);
    }
    
    this.Close();
_Main/UI/MacroPlannerWebApp/Component_Form234/Component_List174.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderCode","title":"OrderCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderDateTime","title":"OrderDateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderDateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderQty","title":"OrderQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastHitQty","title":"ForecastHitQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastNoHitQty","title":"ForecastNoHitQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastNoHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"Unit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerCode","title":"CustomerCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerCode"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderCode","title":"订单编号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU编码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderQty","title":"数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderDateTime","title":"需求时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderDateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastHitQty","title":"有预测","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastNoHitQty","title":"无预测","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastNoHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"客户名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerCode","title":"客户ID","subtotals":"","tooltip":"","width":-1,"display":"hidden","editable":false,"attribute":"CustomerCode"}}]'
        ContextMenu: 'listContextMenu108'
        SortCriteria: 'OperateTime'
        Taborder: 2
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_ListCapacityAllocationResults.def
@@ -1,26 +1,26 @@
Quintiq file version 2.0
Component ListCapacityAllocationResults
{
  #keys: '[414702.0.338762075]'
  #keys: '[414702.0.390053833]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorCapacityAllocationResults
    {
      #keys: '[414702.0.338762076]'
      #keys: '[414702.0.390053834]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        DataType: 'structured[CapacityAllocationResultsRuleConfiguration]'
        Source: 'FormCapacityAllocationResultsRuleConfiguration.DataHolderSelectCapacityAllocationResultsRuleConfiguration'
        Taborder: 0
        Transformation: 'CapacityAllocationResults'
        Transformation: 'Elements.CapacityAllocationResults'
      ]
    }
    #child: listActionBarPageCapacityAllocationResults
    Component DataSetLevelCapacityAllocationResults
    {
      #keys: '[414702.0.338762081]'
      #keys: '[414702.0.390053839]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VersionNumber","title":"VersionNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VersionNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMeasurementUnit","title":"PanelMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMaterialCode","title":"PanelMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfPanels","title":"NumberOfPanels","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfPanels"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMeasurementUnit","title":"PanelMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMaterialCode","title":"ModuleMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfModules","title":"NumberOfModules","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfModules"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMeasurementUnit","title":"ModuleMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMeasurementUnit","title":"ModuleMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Division","title":"Division","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Division"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"RequirementDate","title":"RequirementDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"RequirementDate"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Date","title":"Date","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Date"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Description","title":"Description","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Description"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UserQuantity","title":"UserQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UserQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ManufacturedDate","title":"ManufacturedDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ManufacturedDate"}}]'
        ContextMenu: 'listContextMenuCapacityAllocationResults'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_PanelCapacityAllocationResults.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
Quintiq file version 2.0
Component PanelCapacityAllocationResults
{
  #keys: '[414702.0.391687385]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ButtonGenerateCapacityAllocationResults id:ButtonGenerateCapacityAllocationResults_570
    {
      #keys: '[414702.0.391717497]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'PROCESS'
        Label: '生成数据'
        Taborder: 0
      ]
    }
    Component Export id:Export_398
    {
      #keys: '[414702.0.392048461]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listActionBarPageCapacityAllocationResults.def
@@ -1,7 +1,7 @@
Quintiq file version 2.0
Component listActionBarPageCapacityAllocationResults
{
  #keys: '[414702.0.338762078]'
  #keys: '[414702.0.390053836]'
  BaseType: 'listActionBarPage'
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listContextMenuCapacityAllocationResults.def
@@ -1,7 +1,7 @@
Quintiq file version 2.0
Component listContextMenuCapacityAllocationResults
{
  #keys: '[414702.0.338762083]'
  #keys: '[414702.0.390053841]'
  BaseType: 'listContextMenu'
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_ButtonGenerateCapacityAllocationResults_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_ButtonGenerateCapacityAllocationR#39.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelCapacityAllocationResults/ButtonGenerateCapacityAllocationResults_570
Response OnClick () id:Response_FormCapacityAllocationResults_ButtonGenerateCapacityAllocationResults_OnClick_39
{
  #keys: '[414702.0.391717496]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan, DataHolderActiveScenario.Data() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelCapacityAllocationResults/Export_398
Response OnClick () id:Response_PanelCapacityAllocationResults_Export_OnClick
{
  #keys: '[414702.0.391791234]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      Application.Download( "产能分配结果.xlsx", CapacityAllocationResults::Export( GlobalOTDTable ).AsBinaryData() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/_ROOT_Component_FormCapacityAllocationResults.def
@@ -8,17 +8,7 @@
  Children:
  [
    #child: ListCapacityAllocationResults
    Component ButtonGenerateCapacityAllocationResults
    {
      #keys: '[414702.0.340677556]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'PROCESS'
        Label: '生成数据'
        Taborder: 0
      ]
    }
    #child: PanelCapacityAllocationResults
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_ListCapacityAllocationResultsRuleConfiguration.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
Quintiq file version 2.0
Component ListCapacityAllocationResultsRuleConfiguration
{
  #keys: '[414702.0.375255758]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorCapacityAllocationResultsRuleConfiguration
    {
      #keys: '[414702.0.375255759]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'GlobalOTDTable'
        Source: 'GlobalOTDTable'
        Taborder: 0
        Transformation: 'CapacityAllocationResultsRuleConfiguration'
      ]
    }
    #child: listActionBarPageCapacityAllocationResultsRuleConfiguration
    Component DataSetLevelCapacityAllocationResultsRuleConfiguration
    {
      #keys: '[414702.0.375255764]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuCapacityAllocationResultsRuleConfiguration
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMaterialCode","title":"PanelMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMaterialCode","title":"ModuleMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Division","title":"Division","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Division"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}}]'
        ContextMenu: 'listContextMenuCapacityAllocationResultsRuleConfiguration'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListCapacityAllocationResultsRuleConfiguration_WebMenu_OnClick
    {
      #keys: '[414702.0.373845107]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[811.0.13515064]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_PanelImportAndExport.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
Quintiq file version 2.0
Component PanelImportAndExport
{
  #keys: '[414702.0.391512140]'
  BaseType: 'WebPanel'
  Children:
  [
    Component Import
    {
      #keys: '[414702.0.390081531]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'IMPORT1'
        Label: '导入'
        Taborder: 0
      ]
    }
    Component Export
    {
      #keys: '[414702.0.391512453]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listActionBarPageCapacityAllocationResultsRuleConfiguration.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPageCapacityAllocationResultsRuleConfiguration
{
  #keys: '[414702.0.375255761]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Component_listContextMenuCapacityAllocationResultsRuleConfiguration.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
Quintiq file version 2.0
Component listContextMenuCapacityAllocationResultsRuleConfiguration
{
  #keys: '[414702.0.375255766]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuNew
    {
      #keys: '[414702.0.373851234]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'BEAR'
        Taborder: 3
        Title: '创建规则'
      ]
    }
    Component MenuEdit
    {
      #keys: '[414702.0.376312130]'
      BaseType: 'WebMenu'
      Properties:
      [
        BindOnDoubleClick: true
        Image: 'MESSAGE_EDIT'
        Taborder: 4
        Title: '编辑'
      ]
    }
    Component MenuDelete
    {
      #keys: '[414702.0.382537902]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DELETE'
        Taborder: 5
        Title: '删除'
      ]
    }
    Component MenuSelectAll
    {
      #keys: '[414702.0.382602953]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DOCUMENT_SELECTION'
        Shortcut: 'Ctrl+A'
        Taborder: 6
        Title: '全选'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_DataHolderSelectCapacityAllocationResultsRuleConfiguration_OnDataCh.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: DataHolderSelectCapacityAllocationResultsRuleConfiguration
Response OnDataChanged () id:Response_FormCapacityAllocationResultsRuleConfiguration_DataHolderSelectCapacityAllocationResultsRuleConfiguration_OnDataChanged
{
  #keys: '[414702.0.391379706]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  QuillAction
  {
    Body:
    [*
      traverse ( this.Data(), Elements, e ) {
        info( "面板物料ID:", e.PanelMaterialCode() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: ListCapacityAllocationResultsRuleConfiguration
Response OnClick (
  CapacityAllocationResultsRuleConfiguration selection
) id:Response_ListCapacityAllocationResultsRuleConfiguration_MenuDelete_OnClick
{
  #keys: '[414702.0.381071285]'
  DefinitionID => /ListCapacityAllocationResultsRuleConfiguration/Responsedef_ListCapacityAllocationResultsRuleConfiguration_WebMenu_OnClick
  Initiator: 'MenuDelete'
  QuillAction
  {
    Body:
    [*
      selection.Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuEdit_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: ListCapacityAllocationResultsRuleConfiguration
Response OnClick (
  CapacityAllocationResultsRuleConfiguration selection
) id:Response_ListCapacityAllocationResultsRuleConfiguration_MenuEdit_OnClick
{
  #keys: '[414702.0.376349145]'
  CanBindMultiple: false
  DefinitionID => /ListCapacityAllocationResultsRuleConfiguration/Responsedef_ListCapacityAllocationResultsRuleConfiguration_WebMenu_OnClick
  Initiator: 'MenuEdit'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditCapacityAllocationResultsRuleConfiguration );
      dlg.Edit( selection );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuNew_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListCapacityAllocationResultsRuleConfiguration
Response OnClick () id:Response_ListCapacityAllocationResultsRuleConfiguration_MenuNew_OnClick
{
  #keys: '[414702.0.375256192]'
  CanBindMultiple: false
  DefinitionID => /ListCapacityAllocationResultsRuleConfiguration/Responsedef_ListCapacityAllocationResultsRuleConfiguration_WebMenu_OnClick
  Initiator: 'MenuNew'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditCapacityAllocationResultsRuleConfiguration );
      dlg.New();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_ListCapacityAllocationResultsRuleConfiguration_MenuSelectAll_OnClic.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListCapacityAllocationResultsRuleConfiguration
Response OnClick () id:Response_ListCapacityAllocationResultsRuleConfiguration_MenuSelectAll_OnClick
{
  #keys: '[414702.0.381011855]'
  CanBindMultiple: false
  DefinitionID => /ListCapacityAllocationResultsRuleConfiguration/Responsedef_ListCapacityAllocationResultsRuleConfiguration_WebMenu_OnClick
  Initiator: 'MenuSelectAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Export_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelImportAndExport/Export
Response OnClick () id:Response_PanelImportAndExport_Export_OnClick
{
  #keys: '[414702.0.391658465]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      Application.Download( "产能分配结果规则.xlsx", CapacityAllocationResultsRuleConfiguration::Export( GlobalOTDTable ).AsBinaryData() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/Response_PanelImportAndExport_Import_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
#parent: PanelImportAndExport/Import
Response OnClick () id:Response_PanelImportAndExport_Import_OnClick
{
  #keys: '[414702.0.391899822]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      try {
        uploadJsonString := Application.GetFile();
        if ( uploadJsonString <> "" ) {
          uploadJson := JSON::Parse( uploadJsonString );
          fileName := uploadJson.Get( "name" ).GetString();
          base64String := uploadJson.Get( "data" ).GetString();
          CapacityAllocationResultsRuleConfiguration::Import( GlobalOTDTable, base64String );
          WebMessageBox::Success( "上传成功", true );
        }
      } onerror {
        WebMessageBox::Error( e.GeneralInformation(), true );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResultsRuleConfiguration/_ROOT_Component_FormCapacityAllocationResultsRuleConfiguration.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormCapacityAllocationResultsRuleConfiguration
{
  #keys: '[414702.0.373844315]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListCapacityAllocationResultsRuleConfiguration
    Component DataHolderSelectCapacityAllocationResultsRuleConfiguration
    {
      #keys: '[414702.0.390054479]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[CapacityAllocationResultsRuleConfiguration]*'
      Children:
      [
        Component DataExtractorSelectCapacityAllocationResultsRuleConfiguration
        {
          #keys: '[414702.0.391186862]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'CapacityAllocationResultsRuleConfiguration'
            ExtractionMode: 'Selected'
            Source: 'ListCapacityAllocationResultsRuleConfiguration'
            Taborder: 0
          ]
        }
      ]
      Properties:
      [
        Taborder: 2
      ]
    }
    #child: PanelImportAndExport
  ]
  Properties:
  [
    Image: 'DOCUMENT_CHECKS'
    Title: '产能分配结果报表-规则维护'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -38,6 +38,6 @@
  ]
  Properties:
  [
    Taborder: 0
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportDetail_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: ButtonExportDetail
Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonExportDetail_OnClick
{
  #keys: '[414384.0.887310502]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MPSync );
  *]
  QuillAction
  {
    Body:
    [*
      //Application.Download( "年度产销预算详情.xlsx", MPSync.CapacityAndSaleBudgeExport().AsBinaryData() );
      base64 := MappingCapacityAndSaleBudge::Export( MPSync );
      Application.Download( "年度产销预算详情.xlsx", base64 );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_OnCreated.def
@@ -12,6 +12,7 @@
    [*
      MPSync::TestData( MPSync, MacroPlan );
      GlobalOTDTable.InitTestData();
      MPSync.RefreshCapacityAndSaleBudgeFilter();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -8,6 +8,17 @@
  Children:
  [
    #child: ListCapacityAndSaleBudge
    Component ButtonExportDetail
    {
      #keys: '[414384.0.887310503]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
@@ -13,7 +13,7 @@
      CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
      
      ScenarioManager.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
                                                 CheckboxIsCapacity.Checked(),
                                                 DropDownSaleOrCapacity.Text(),
                                                 DropDownTimeGroup.Text(),
                                                 DropDownByBusinessTypeOrByOrgCode.Text(),
                                                 DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
@@ -53,16 +53,6 @@
        Visible: false
      ]
    }
    Component CheckboxIsCapacity
    {
      #keys: '[414384.0.857770765]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        Label: '产能'
        Taborder: 5
      ]
    }
    Component DropDownTimeGroup
    {
      #keys: '[414384.0.857771238]'
@@ -87,6 +77,18 @@
        Taborder: 0
      ]
    }
    Component DropDownSaleOrCapacity
    {
      #keys: '[414384.0.886240556]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        InitialValue: '销售额'
        Label: '销售额/产能'
        Strings: '销售额;产能'
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
@@ -93,6 +93,6 @@
    ContextMenu: 'matrixeditorContextMenuCapacityAndSaleBudgeCompare'
    Editable: false
    Rows: 'MatrixEditorRowsCapacityAndSaleBudgeCompare'
    Taborder: 1
    Taborder: 2
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: ButtonExportCompare
Response OnClick () id:Response_FormCapacityAndSaleBudgeCompare_ButtonExportCompare_OnClick
{
  #keys: '[414384.0.881345276]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( GlobalOTDTable );
  *]
  QuillAction
  {
    Body:
    [*
      tableBinaryData := ScenarioManager.CapacityAndSaleBudgeCompareExport().AsBinaryData();
      Application.Download( "年度产销预算对比.xlsx", tableBinaryData );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
@@ -18,6 +18,17 @@
        Taborder: 0
      ]
    }
    Component ButtonExportCompare
    {
      #keys: '[414384.0.881345277]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_ListHedgingOfLog.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Serial","title":"Serial","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Serial"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastQty","title":"ForecastQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReverseQty","title":"ReverseQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReverseQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AuthorizeQty","title":"AuthorizeQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AuthorizeQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OperateQty","title":"OperateQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OperateQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OperateType","title":"OperateType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OperateType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Operator","title":"Operator","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Operator"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OperateTime","title":"OperateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OperateTime"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Serial","title":"序号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Serial"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU编号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastQty","title":"预测数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReverseQty","title":"反签数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReverseQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AuthorizeQty","title":"授权数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AuthorizeQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OperateQty","title":"动作数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OperateQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OperateType","title":"动作类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OperateType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Operator","title":"操作人","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Operator"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OperateTime","title":"操作时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OperateTime"}}]'
        ContextMenu: 'listContextMenuHedgingOfLog'
        Taborder: 2
      ]
@@ -36,6 +36,6 @@
  ]
  Properties:
  [
    Taborder: 3
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog.def
@@ -27,15 +27,13 @@
      ]
      Properties:
      [
        Taborder: 2
        Taborder: 0
      ]
    }
    #child: ListHedgingOfLog
    #child: PanelHedgingOfLog761
    #child: PanelHedgingOfLog593
  ]
  Properties:
  [
    Taborder: 0
    Taborder: 2
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog221.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component PanelHedgingOfLog221
{
  #keys: '[414724.0.149787927]'
  BaseType: 'WebPanel'
  Children:
  [
    Component LabelHedgingOfLog id:LabelHedgingOfLog_298
    {
      #keys: '[414724.0.149788086]'
      BaseType: 'WebLabel'
      Properties:
      [
        FixedSize: false
        Taborder: 0
        Text: '日志页面'
      ]
    }
  ]
  Properties:
  [
    Border: true
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog593#93.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
Quintiq file version 2.0
Component PanelHedgingOfLog593 id:PanelHedgingOfLog593_93
{
  #keys: '[414724.0.152989129]'
  BaseType: 'WebPanel'
  Children:
  [
    Component txt_QueryContent_FHO
    {
      #keys: '[414724.0.152989222]'
      BaseType: 'WebEditField'
      Properties:
      [
        PlaceHolder: '模糊搜索'
        Taborder: 0
      ]
    }
    Component btn_Query_FHO
    {
      #keys: '[414724.0.152920619]'
      BaseType: 'WebButton'
      Properties:
      [
        ButtonSize: 'compact'
        Image: 'VIEW'
        Label: '查询'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog593.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Component_PanelHedgingOfLog761.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/Response_PanelHedgingOfLog593_93_btn_Query_FHO_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelHedgingOfLog593_93/btn_Query_FHO
Response OnClick () id:Response_PanelHedgingOfLog593_93_btn_Query_FHO_OnClick
{
  #keys: '[414724.0.152920798]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      DataExtractorHedgingOfLog.FixedFilter(  "object.SKU().LikeUserLocale( " + txt_QueryContent_FHO.Text().AsQUILL() + " )"
                                               + " or " + "object.OperateType().LikeUserLocale( " + txt_QueryContent_FHO.Text().AsQUILL() + " )"
                                               + " or " + "object.Operator().LikeUserLocale( " + txt_QueryContent_FHO.Text().AsQUILL() + " )"
                                           );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormHedgingOfLog/_ROOT_Component_FormHedgingOfLog.def
@@ -8,16 +8,8 @@
  Children:
  [
    #child: PanelHedgingOfLog
    Component lb_ForecastQty
    {
      #keys: '[414724.0.31031550]'
      BaseType: 'WebLabel'
      Properties:
      [
        Taborder: 1
        Text: '原材料的预测数量:0'
      ]
    }
    #child: PanelHedgingOfLog221
    #child: PanelHedgingOfLog593_93
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/Component_ListMaterialPurchase.def
@@ -12,6 +12,7 @@
      Properties:
      [
        DataType: 'structured[H_MaterialPurchase]'
        FixedFilter: 'object.Status()="未发布"'
        Source: 'DataHolderMaterialPurchase'
        Taborder: 0
        Transformation: 'Elements'
@@ -28,7 +29,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductSubclassType","title":"ProductSubclassType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductSubclassType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Qty","title":"Qty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Qty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"Unit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"OrgCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WarehouseCode","title":"WarehouseCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WarehouseCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandTime","title":"DemandTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandTime"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU编码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductSubclassType","title":"类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductSubclassType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Qty","title":"数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Qty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"组织代码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WarehouseCode","title":"仓库代码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WarehouseCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandTime","title":"需求时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandTime"}}]'
        ContextMenu: 'listContextMenuMaterialPurchase'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/Component_PanelMaterialPurchase.def
@@ -11,15 +11,17 @@
      BaseType: 'WebLabel'
      Properties:
      [
        NumberOfColumns: 50
        NumberOfColumns: 30
        Taborder: 0
        Text: '开始时间:2023-03-26 12:24:46'
        Visible: false
      ]
    }
    #child: PanelMaterialPurchase613
  ]
  Properties:
  [
    Alignment: 'trailing'
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/Component_PanelMaterialPurchase354.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component PanelMaterialPurchase354
{
  #keys: '[414724.0.149784759]'
  BaseType: 'WebPanel'
  Children:
  [
    Component lb_Title208
    {
      #keys: '[414724.0.149784840]'
      BaseType: 'WebLabel'
      Properties:
      [
        Description: '授权/反签物料采购明细释放'
        Taborder: 0
        Text: '授权/反签物料采购明细释放'
      ]
    }
  ]
  Properties:
  [
    Border: true
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormMaterialPurchase/_ROOT_Component_FormMaterialPurchase.def
@@ -7,17 +7,6 @@
  BaseType: 'WebForm'
  Children:
  [
    Component lb_Title
    {
      #keys: '[414724.0.32644779]'
      BaseType: 'WebLabel'
      Properties:
      [
        Description: '授权/反签物料采购明细释放'
        Taborder: 0
        Text: '授权/反签物料采购明细释放'
      ]
    }
    #child: PanelMaterialPurchase
    Component DataHolderMaterialPurchase
    {
@@ -45,6 +34,7 @@
      ]
    }
    #child: ListMaterialPurchase
    #child: PanelMaterialPurchase354
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock#844.def
@@ -29,7 +29,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLocked","title":"IsLocked","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLocked"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"First.AsPlanningBaseSalesDemandInPeriod.End","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"First.AsPlanningBaseSalesDemandInPeriod.End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModify","title":"LastModify","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModify"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModifyTime","title":"LastModifyTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModifyTime"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLocked","title":"IsLocked","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLocked"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"First.AsPlanningBaseSalesDemandInPeriod.End","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"First.AsPlanningBaseSalesDemandInPeriod.End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModify","title":"LastModify","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModify"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModifyTime","title":"LastModifyTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModifyTime"}}]'
        ContextMenu: 'listContextMenuOrderLock'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_PanelOrderLockHeader#545.def
@@ -87,7 +87,7 @@
        ButtonSize: 'compact'
        Description: '订单锁定'
        Label: '锁定'
        Taborder: 7
        Taborder: 8
      ]
    }
    Component ButtonOrderLockHeaderUnlock
@@ -99,7 +99,7 @@
        ButtonSize: 'compact'
        Description: '订单解锁'
        Label: '解锁'
        Taborder: 8
        Taborder: 9
      ]
    }
    Component ButtonOrderLockHeaderClear
@@ -114,6 +114,18 @@
        Taborder: 6
      ]
    }
    Component ButtonOrderLockHeaderFresh
    {
      #keys: '[412960.0.259721852]'
      BaseType: 'WebButton'
      Properties:
      [
        ButtonSize: 'compact'
        Description: '从数据源刷新订单数据'
        Label: '重新获取订单'
        Taborder: 7
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: PanelOrderLockHeader_545/ButtonOrderLockHeaderFresh
Response OnClick () id:Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderFresh_OnClick
{
  #keys: '[412960.0.259721886]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      macroplan := MacroPlan;
      global := GlobalOTDTable;
      businesstypes := DataHolderOrderLockGlobal.Data().BusinessType().Tokenize( ',' );
      CustomerOrder::DoSync( macroplan, businesstypes, global );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderCustomerOrder_O.def
@@ -19,11 +19,11 @@
      newfilter := "";
      findcount := 0;
      traverse( existfilterlist, Elements, filter ){
        if( filter.FindString( "EndDate()", 0 ) >= 0 ){
        if( filter.FindString( "StartDate()", 0 ) >= 0 ){
          if( newfilter = "" ){
            newfilter := "( object.EndDate() = " + this.Date().AsQUILL() + " )";
            newfilter := "( object.StartDate() = " + this.Date().AsQUILL() + " )";
            }else{
              newfilter := newfilter + " and " + "( object.EndDate() = " + this.Date().AsQUILL() + " )";
              newfilter := newfilter + " and " + "( object.StartDate() = " + this.Date().AsQUILL() + " )";
              }
          findcount := 1;
          }else{
@@ -37,9 +37,9 @@
      
      if( findcount = 0 ){
        if( newfilter = "" ){
          newfilter := "( object.EndDate() = " + this.Date().AsQUILL() + " )";
          newfilter := "( object.StartDate() = " + this.Date().AsQUILL() + " )";
          }else{
            newfilter := newfilter + " and " + "( object.EndDate() = " + this.Date().AsQUILL() + " )";
            newfilter := newfilter + " and " + "( object.StartDate() = " + this.Date().AsQUILL() + " )";
            }
        }
      
_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_DateSelectorOrderLockHeaderPlanDeliver_OnC.def
@@ -19,7 +19,7 @@
      newfilter := "";
      findcount := 0;
      traverse( existfilterlist, Elements, filter ){
        if( filter.FindString( "End()", 0 ) >= 0 and filter.FindString( "EndDate()", 0 ) < 0 ){
        if( filter.FindString( "End()", 0 ) >= 0 ){
          if( newfilter = "" ){
            newfilter := "( object.First().AsPlanningBaseSalesDemandInPeriod().End().Date() = " + this.Date().AsQUILL() + " )";
            }else{
_Main/UI/MacroPlannerWebApp/Component_FormPanelMaterialTianHua/_ROOT_Component_FormPanelMaterialTianHua.def
@@ -32,8 +32,8 @@
  ]
  Properties:
  [
    Description: '天花'
    Description: '天华'
    Image: 'CANDLE'
    Title: '天花'
    Title: '天华'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Component_ListReleaseRecord.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Issuer","title":"Issuer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Issuer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IssuingDate","title":"IssuingDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IssuingDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FinishDate","title":"FinishDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FinishDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Status","title":"Status","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Status"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VCode","title":"VCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Serial","title":"Serial","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Serial"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"hidden","editable":false,"attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Serial","title":"序号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Serial"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IssuingDate","title":"发布时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IssuingDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FinishDate","title":"结束时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FinishDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Issuer","title":"发布人","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Issuer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Status","title":"状态","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Status"}}]'
        ContextMenu: 'listContextMenuReleaseRecord'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Component_ListReleaseRecord243.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"H_ReleaseRecord_ID","title":"H_ReleaseRecord_ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"H_ReleaseRecord_ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"H_HedgingRecord_ID","title":"H_HedgingRecord_ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"H_HedgingRecord_ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Qty","title":"Qty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Qty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Status","title":"Status","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Status"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IssuingDate","title":"IssuingDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IssuingDate"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"物料编号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductSubclassType","title":"类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductSubclassType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Qty","title":"数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Qty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"组织代码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"WarehouseCode","title":"仓库代码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"WarehouseCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandTime","title":"需求时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IssuingDate","title":"发布时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IssuingDate"}}]'
        ContextMenu: 'listContextMenuReleaseRecord690'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Component_PanelReleaseRecord423.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component PanelReleaseRecord423
{
  #keys: '[414724.0.149784904]'
  BaseType: 'WebPanel'
  Children:
  [
    Component LabelReleaseRecord id:LabelReleaseRecord_296
    {
      #keys: '[414724.0.149784974]'
      BaseType: 'WebLabel'
      Properties:
      [
        NumberOfColumns: 20
        Taborder: 0
        Text: '反签/授权物料发布版本明细'
      ]
    }
  ]
  Properties:
  [
    Border: true
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Response_ListReleaseRecord_OnSelectionChanged.def
@@ -11,7 +11,15 @@
  {
    Body:
    [*
      DataExtractorReleaseRecord661.FixedFilter( "object.H_ReleaseRecord_ID() = " + selection.ID().AsQUILL());
      // å‘布ID
      H_ReleaseRecord_ID := "-1";
      H_Status:="已发布";
      if( not isnull( selection))
      {
        H_ReleaseRecord_ID :=  selection.ID();
      }
      DataExtractorReleaseRecord661.FixedFilter( "object.H_ReleaseRecord_ID() = " + H_ReleaseRecord_ID.AsQUILL()
                                                 + " and " + "object.Status() = " + H_Status.AsQUILL());
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/Response_OnCreated.def
@@ -5,12 +5,12 @@
  #keys: '[414724.0.37110847]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dtMonth.Date(Date::Today());
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormReleaseRecord/_ROOT_Component_FormReleaseRecord.def
@@ -7,20 +7,10 @@
  BaseType: 'WebForm'
  Children:
  [
    Component LabelReleaseRecord
    {
      #keys: '[414724.0.36933216]'
      BaseType: 'WebLabel'
      Properties:
      [
        NumberOfColumns: 20
        Taborder: 0
        Text: '反签/授权物料发布版本明细'
      ]
    }
    #child: PanelReleaseRecord
    #child: PanelReleaseRecord108
    #child: PanelReleaseRecord527
    #child: PanelReleaseRecord423
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FrmAuthorizeAndCountersign_Material/Response_OnCreated.def
@@ -17,22 +17,16 @@
      SelectItem := select( MacroPlan,H_MessagePassing,Obj,Obj.FKey()="FrmMaterial" and Obj.ItemKey()="ListSelect");
      if(not isnull( SelectItem))
      {
        if(SelectItem.Value().Length()>0)
        if(SelectItem.ValueJsonString().Length()>0)
        {
          StrValue := SelectItem.Value().Tokenize( ";");
          lb_SUK_FAACM.Text(StrValue.Element( 0));
          lb_MaterialCode_FAACM.Text(StrValue.Element( 1));
          lb_Unit_FAACM.Text(StrValue.Element( 2));
          JInfo := JSON::Parse( SelectItem.ValueJsonString());
          lb_SUK_FAACM.Text(JInfo.Get( "ParentSKU").GetString());
          lb_MaterialCode_FAACM.Text(JInfo.Get( "SKU").GetString());
          lb_Unit_FAACM.Text(JInfo.Get( "Unit").GetString());
          lb_Operator_FAACM.Text(ApplicationMacroPlanner.GetUserName());
          txt_CustomID_FAACM.Text(JInfo.Get( "CustomCode").GetString());
          txt_CustomName_FAACM.Text(JInfo.Get( "CustomName").GetString());
        }
      }
      // èŽ·å–é€‰æ‹©åŽçš„SKU
      SelectItem := select( MacroPlan,H_MessagePassing,Obj,Obj.FKey()="FrmOrderForecast" and Obj.ItemKey()="ListSelect");
      if(not isnull( SelectItem) and SelectItem.Value().Length()>0)
      {
        StrValue := SelectItem.Value().Tokenize( ";");
        txt_CustomID_FAACM.Text(StrValue.Element( 2));
        txt_CustomName_FAACM.Text(StrValue.Element( 3));
      }
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Component_List832.def
@@ -11,7 +11,7 @@
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'structured[Product_MP]'
        DataType: 'structured[H_MaterialInfo]'
        Source: 'dh_FM_PruductMP'
        Taborder: 0
        Transformation: 'Elements'
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TotalInventoryLevels","title":"TotalInventoryLevels","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"TotalInventoryLevels"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Level","title":"Level","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Level"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsProductCategory","title":"IsProductCategory","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"IsProductCategory"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"物料编码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialType","title":"物料类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialName","title":"物料名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NeedQty","title":"需求数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NeedQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NeedDate","title":"需求时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NeedDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"组织代码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockPoint","title":"库存点","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockPoint"}}]'
        ContextMenu: 'listContextMenu892'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Component_Panel418.def
@@ -24,7 +24,7 @@
      [
        NumberOfColumns: 15
        PlaceHolder: '模糊搜索'
        Taborder: 1
        Taborder: 2
      ]
    }
    Component btn_Query_FM
@@ -35,7 +35,7 @@
      [
        Image: 'VIEW'
        Label: '查询'
        Taborder: 2
        Taborder: 3
      ]
    }
    Component btn_Add_FM
@@ -46,7 +46,7 @@
      [
        Image: 'ADD2'
        Label: '新增反签/授权'
        Taborder: 3
        Taborder: 4
      ]
      ResponseDefinitions:
      [
@@ -66,6 +66,16 @@
        }
      ]
    }
    Component ds_Month_FM
    {
      #keys: '[414724.0.148121614]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        DateFormat: 'YMM'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnDoubleClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
Quintiq file version 2.0
#parent: List832
Response OnDoubleClick (
  H_MaterialInfo selection
) id:Response_List832_OnDoubleClick
{
  #keys: '[414724.0.160542461]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebList_OnDoubleClick'
  QuillAction
  {
    Body:
    [*
      if( not isnull( selection))
      {
        if(selection.MaterialType()="半成品")
        {
          OrderCode:="";
          if( txtSaveForecastData_FM.Text().Length()>0)
          {
            JForecast := JSON::Parse( txtSaveForecastData_FM.Text());
            OrderCode := JForecast.Get( "OrderCode").GetString();
          }
         jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.NeedQty(), OrderCode,"-",selection.NeedDate());
          if(jResult.Get( "Status").GetBoolean())
          {
                de_dh_FM_ProductMP.FixedFilter( "object.ParentSKU() = " +  selection.SKU().AsQUILL()
                                                + " and object.ForecastID() = " + OrderCode.AsQUILL()
                                                );
          }
          else
          {
            WebMessageBox::Warning( jResult.Get( "Msg").GetString());
          }
        }
        else
        {
            // å¼¹å‡ºç‰©æ–™åç­¾æŽˆæƒ
        }
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_List832_OnSelectionChanged.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_OnCreated.def
@@ -9,6 +9,7 @@
  {
    Body:
    [*
      ds_Month_FM.Date(Date::ActualDate());
      txtSaveForecastData_FM.Text("");
      // èŽ·å–é€‰æ‹©åŽçš„SKU
      SelectItem := select( MacroPlan,H_MessagePassing,Obj,Obj.FKey()="FrmOrderForecast" and Obj.ItemKey()="ListSelect");
@@ -19,7 +20,9 @@
          txtSaveForecastData_FM.Text(  SelectItem.ValueJsonString());
          JSelect := JSON::Parse( SelectItem.ValueJsonString());
          lb_SUK_FM.Text(JSelect.Get( "SKU").GetString());
          de_dh_FM_ProductMP.FixedFilter( "object.ID() = " + JSelect.Get( "SKU").GetString().AsQUILL());
          de_dh_FM_ProductMP.FixedFilter( "object.ParentSKU() = " + JSelect.Get( "SKU").GetString().AsQUILL()
                                          + " and object.ForecastID() = " + JSelect.Get( "OrderCode").GetString().AsQUILL()
                                          );
        }
      }
    *]
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Add_FM_OnClick#975.def
@@ -1,6 +1,8 @@
Quintiq file version 2.0
#parent: Panel418/btn_Add_FM
Response OnClick () id:Response_Panel418_btn_Add_FM_OnClick_975
Response OnClick (
  H_MaterialInfo selection
) id:Response_Panel418_btn_Add_FM_OnClick_975
{
  #keys: '[414724.0.145238844]'
  CanBindMultiple: false
@@ -14,14 +16,38 @@
    Body:
    [*
      SelectItem :=  select( MacroPlan,H_MessagePassing,Obj,Obj.FKey()="FrmMaterial" and Obj.ItemKey()="ListSelect");
      CustomCode:="";
      CustomName:="";
      SValue:="";
      SValueJsonString:="";
      // èŽ·å–å®¢æˆ·åç§°å’Œå®¢æˆ·ID
      if(txtSaveForecastData_FM.Text().Length()>0)
      {
         jForecast := JSON::Parse( txtSaveForecastData_FM.Text());
         CustomCode := jForecast.Get( "CustomCode").GetString();
         CustomName := jForecast.Get( "CustomName").GetString();
      }
      if(not isnull(selection))
      {
        SValueJsonString:= JSON::Object().Add( "SKU",selection.SKU())
                    .Add( "MaterialName",selection.MaterialName())
                    .Add( "MaterialType",selection.MaterialType())
                    .Add( "OrgCode",selection.OrgCode())
                    .Add( "Unit",selection.Unit())
                    .Add( "CustomCode",CustomCode)
                    .Add( "ParentSKU",lb_SUK_FM.Text())
                    .Add( "CustomName",CustomName).Build().AsString();
      }
      if( isnull( SelectItem))
      {
         MacroPlan.H_MessagePassing(relnew,FKey :="FrmMaterial",ItemKey := "ListSelect",Value := "");
        MacroPlan.H_MessagePassing(relnew,FKey := "FrmMaterial",ItemKey := "ListSelect", Value:=SValue,ValueJsonString:=SValueJsonString);
      }
      else
      {
        //SelectItem.ValueJsonString()
        SelectItem.Value(SValue);
        SelectItem.ValueJsonString( SValueJsonString);
      }
      Application.OpenForm( "FrmAuthorizeAndCountersign_Material","modal");
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Add_FM_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/Response_Panel418_btn_Query_FM_OnClick.def
@@ -9,10 +9,17 @@
  {
    Body:
    [*
      de_dh_FM_ProductMP.FixedFilter( "object.ID().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )" );
      //                                             + " or " + "object.SKU().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
      //                                             + " or " + "object.CustomerCode().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
      //                                             + " or " + "object.CustomerName().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )" );
      de_dh_FM_ProductMP.FixedFilter( "( object.SKU().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
                                                   + " or " + "object.MaterialType().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
                                                   + " or " + "object.MaterialName().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
                                                   + " or " + "object.Unit().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
                                                   + " or " + "object.OrgCode().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
                                                   + " or " + "object.StockPoint().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " )"
                                                   + " or " + "object.Unit().LikeUserLocale( " + txt_QueryContent_FM.Text().AsQUILL() + " ))"
                                                   + " and " + "( object.NeedDate() < " + ds_Month_FM.Date().StartOfNextMonth().AsQUILL()
                                                   + " and " + "object.NeedDate() >= " + ds_Month_FM.Date().StartOfMonth().AsQUILL() + " )"
                                      );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FrmMaterial/_ROOT_Component_FrmMaterial.def
@@ -14,7 +14,7 @@
    {
      #keys: '[414724.0.53475285]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Databinding: 'structured[H_MaterialInfo]*'
      Children:
      [
        Component de_dh_FM_ProductMP
@@ -26,7 +26,7 @@
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'Product_MP'
            Transformation: 'H_MaterialInfo'
          ]
        }
      ]
@@ -53,7 +53,8 @@
  [
    Description: '原料列表页'
    Image: 'NAV_REDO_LIGHT_BLUE'
    MinimumRows: 50
    MinimumColumns: 80
    MinimumRows: 40
    Title: '原料列表页'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Component_Panel351.def
@@ -73,6 +73,18 @@
        Visible: false
      ]
    }
    Component btn_OrderH_FOF
    {
      #keys: '[414724.0.165490408]'
      BaseType: 'WebButton'
      Properties:
      [
        Description: 'ERO订单冲减'
        Image: 'AMMUNITION_BOX_CLOSED'
        Label: 'ERP订单冲减'
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_Add_Material_FOF503_OnClick#222.def
@@ -21,7 +21,10 @@
                                       ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                         .Add( "Util",selection.Util())
                                                                         .Add( "CustomCode",selection.CustomCode())
                                                                         .Add( "CustomName",selection.CustomName()).Build().AsString());
                                                                         .Add( "CustomName",selection.CustomName())
                                                                         .Add( "ForecastQty",selection.ForecastQty())
                                                                         .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                                                         .Add( "OrderCode",selection.OrderCode()).Build().AsString());
        }
        else
        {
@@ -29,9 +32,21 @@
          SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                   .Add( "Util",selection.Util())
                                   .Add( "CustomCode",selection.CustomCode())
                                   .Add( "CustomName",selection.CustomName()).Build().AsString());
                                   .Add( "CustomName",selection.CustomName())
                                   .Add( "ForecastQty",selection.ForecastQty())
                                   .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                   .Add( "OrderCode",selection.OrderCode()).Build().AsString());
        }
        Application.OpenForm( "FrmMaterial","popout");
        jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.OrderCode(),"-",selection.NeedTime());
        if(jResult.Get( "Status").GetBoolean())
        {
            Application.OpenForm( "FrmMaterial","popout");
        }
        else
        {
          WebMessageBox::Warning( jResult.Get( "Msg").GetString());
        }
      }
      else
      {
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_Panel351_btn_OrderH_FOF_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: Panel351/btn_OrderH_FOF
Response OnClick () id:Response_Panel351_btn_OrderH_FOF_OnClick
{
  #keys: '[414724.0.166610329]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      H_FunctionClass::SM_OrderHedging( MacroPlan,true,"System","ERP订单");
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FrmOrderForecast/Response_liH_Forecast_OnDoubleClick.def
@@ -19,7 +19,10 @@
                                     ValueJsonString := JSON::Object().Add( "SKU",selection.SKU())
                                                                       .Add( "Util",selection.Util())
                                                                       .Add( "CustomCode",selection.CustomCode())
                                                                       .Add( "CustomName",selection.CustomName()).Build().AsString());
                                                                       .Add( "CustomName",selection.CustomName())
                                                                       .Add( "ForecastQty",selection.ForecastQty())
                                                                       .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                                                       .Add( "OrderCode",selection.OrderCode()).Build().AsString());
      }
      else
      {
@@ -27,9 +30,21 @@
        SelectItem.ValueJsonString(JSON::Object().Add( "SKU",selection.SKU())
                                 .Add( "Util",selection.Util())
                                 .Add( "CustomCode",selection.CustomCode())
                                 .Add( "CustomName",selection.CustomName()).Build().AsString());
                                 .Add( "CustomName",selection.CustomName())
                                 .Add( "ForecastQty",selection.ForecastQty())
                                 .Add( "NeedTime",selection.NeedTime().AsQUILL())
                                 .Add( "OrderCode",selection.OrderCode()).Build().AsString());
      }
      Application.OpenForm( "FrmMaterial","popout");
      jResult := H_FunctionClass::SM_GetMaterialData( MacroPlan,selection.SKU(),selection.ForecastQty(),selection.OrderCode(),"-",selection.NeedTime());
      if(jResult.Get( "Status").GetBoolean())
      {
        Application.OpenForm( "FrmMaterial","popout");
      }
      else
      {
        WebMessageBox::Warning( jResult.Get( "Msg").GetString());
      }
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FrmOrderResult/Component_List782.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderCode","title":"OrderCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderQty","title":"OrderQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReverseQty","title":"ReverseQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReverseQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AuthorizeQty","title":"AuthorizeQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AuthorizeQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastQty","title":"ForecastQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastHitQty","title":"ForecastHitQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastNoHitQty","title":"ForecastNoHitQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastNoHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerCode","title":"CustomerCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerCode"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderCode","title":"订单编号","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU编码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderQty","title":"新增订单","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReverseQty","title":"反签","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReverseQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AuthorizeQty","title":"授权","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AuthorizeQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastQty","title":"预测","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastHitQty","title":"有预测","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ForecastNoHitQty","title":"无预测","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ForecastNoHitQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"客户名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerCode","title":"客户ID","subtotals":"","tooltip":"","width":-1,"display":"hidden","editable":false,"attribute":"CustomerCode"}}]'
        ContextMenu: 'listContextMenu526'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FrmRAShow/Component_List696.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MType","title":"MType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReverseQty","title":"ReverseQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReverseQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AuthorizeQty","title":"AuthorizeQty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AuthorizeQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"Unit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SKU","title":"SKU编码","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SKU"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MType","title":"类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReverseQty","title":"预测数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReverseQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AuthorizeQty","title":"授权数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AuthorizeQty"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Unit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"客户名称","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}}]'
        ContextMenu: 'listContextMenu660'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FrmRAShow/Component_Panel224.def
@@ -32,6 +32,7 @@
      BaseType: 'WebButton'
      Properties:
      [
        ButtonSize: 'compact'
        Image: 'VIEW'
        Label: '查询'
        Taborder: 2
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_List212.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
Quintiq file version 2.0
Component List212
{
  #keys: '[414724.0.153225431]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractor924
    {
      #keys: '[414724.0.153225432]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'MacroPlan'
        Source: 'MacroPlan'
        Taborder: 0
        Transformation: 'MappingProduct'
      ]
    }
    #child: listActionBarPage441
    Component DataSetLevel622
    {
      #keys: '[414724.0.153225437]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenu182
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CommonBusiness","title":"CommonBusiness","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CommonBusiness"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ID","title":"ID","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsCommon","title":"IsCommon","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsCommon"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"KeyProduct","title":"KeyProduct","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"KeyProduct"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Notes","title":"Notes","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Notes"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductMajorType","title":"ProductMajorType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductMajorType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductSubclassType","title":"ProductSubclassType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductSubclassType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShelfLife","title":"ShelfLife","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShelfLife"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}}]'
        ContextMenu: 'listContextMenu182'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_listActionBarPage441.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPage441
{
  #keys: '[414724.0.153225434]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Component_listContextMenu182.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listContextMenu182
{
  #keys: '[414724.0.153225439]'
  BaseType: 'listContextMenu'
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Response_Button593_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: Button593
Response OnClick () id:Response_Frm_TEST_Button593_OnClick
{
  #keys: '[414724.0.153411735]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      HObj := H_FunctionClass::SM_GetProductInfo( MacroPlan,"");
      if( not isnull( HObj))
      {
        WebMessageBox::Information( HObj.BusinessType());
      }
      else
      {
        WebMessageBox::Information( "得到的空值");
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/Response_ButtonERP¶©µ¥_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ButtonERP订单
Response OnClick () id:Response_Frm_TEST_ButtonERP订单_OnClick
{
  #keys: '[414724.0.164341791]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      H_FunctionClass::SM_OrderHedging( MacroPlan,true,"System","ERP订单");
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_Frm_TEST/_ROOT_Component_Frm_TEST.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent Frm_TEST
{
  #keys: '[414724.0.153225415]'
  BaseType: 'WebForm'
  Children:
  [
    #child: List212
    Component DataHolder417
    {
      #keys: '[414724.0.153253171]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[MappingProduct]*'
      Children:
      [
        Component DataExtractor742
        {
          #keys: '[414724.0.153253184]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'MappingProduct'
          ]
        }
      ]
      Properties:
      [
        Taborder: 2
      ]
    }
    Component Button593
    {
      #keys: '[414724.0.153411711]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'MONITOR_RGB'
        Label: '测试'
        Taborder: 0
      ]
    }
    Component ButtonERP订单
    {
      #keys: '[414724.0.164341716]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'ERP订单'
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
    Title: '测试页面'
  ]
}
_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
@@ -4,204 +4,403 @@
  {
    forms
    {
      form_legacy_1
      form_FormOrderLockLog
      {
        title: 'Scenario manager'
        title: 'QTIANMA_JITUAN::FormOrderLockLog'
        shown: true
        componentID: 'FormScenarioManager'
        componentID: 'QTIANMA_JITUAN::FormOrderLockLog'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowPosition: 14
          rowSpan: 8
          columnPosition: 1
          columnSpan: 5
          columnSpan: 12
        }
        components
        {
          FormScenarioManager_ListScenario
          FormOrderLockLog_PanelOrderLockLog
          {
            sizeRatio: 1
          }
          FormOrderLockLog_ListOrderLockLog
          {
          }
          FormScenarioManager_DataSetLevelScenario
          FormOrderLockLog_DataSetLevelOrderLockLog
          {
            groupDepth: -1
            column_All_constraints
            sort: 'DESC:Notes'
            column_OrderID
            {
              columnId: 'All constraints'
              dataPath: 'All constraints'
              columnId: 'OrderID'
              dataPath: 'OrderID'
              dataType: 'string'
              title: 'All constraints'
              title: '订单号'
              index: 0
              subtotals: ''
              width: 90
              width: 150
            }
            column_Name
            column_ProductID
            {
              columnId: 'Name'
              dataPath: 'Name'
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              title: '名称'
              title: '物料号'
              index: 1
              subtotals: ''
              width: 277
              width: 150
            }
            column_ChangedBy
            column_SalesSegmentName
            {
              columnId: 'ChangedBy'
              dataPath: 'ChangedBy'
              columnId: 'SalesSegmentName'
              dataPath: 'SalesSegmentName'
              dataType: 'string'
              title: 'Changed by'
              title: '销售部门'
              index: 2
              subtotals: ''
              width: 106
              width: 150
            }
            column_ChangedOn
            column_StockingPointID
            {
              columnId: 'ChangedOn'
              dataPath: 'ChangedOn'
              dataType: 'datetime'
              title: 'Changed on'
              index: 3
              subtotals: ''
              width: 99
            }
            column_StorageMode
            {
              columnId: 'StorageMode'
              dataPath: 'StorageMode'
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              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: '标题'
              title: '库存点'
              index: 3
              subtotals: ''
              width: 150
            }
            column_ChangedBy
            column_CustomerName
            {
              columnId: 'ChangedBy'
              dataPath: 'ChangedBy'
              columnId: 'CustomerName'
              dataPath: 'CustomerName'
              dataType: 'string'
              title: 'Changed by'
              title: '客户名称'
              index: 4
              subtotals: ''
              width: 150
            }
            column_CreatedOn
            column_Quantity
            {
              columnId: 'CreatedOn'
              dataPath: 'CreatedOn'
              dataType: 'datetime'
              title: 'Created on'
              columnId: 'Quantity'
              dataPath: 'Quantity'
              dataType: 'real'
              index: 5
              subtotals: ''
              width: 150
            }
            column_UnitOfMeasureName
            {
              columnId: 'UnitOfMeasureName'
              dataPath: 'UnitOfMeasureName'
              dataType: 'string'
              title: '单位'
              index: 6
              subtotals: ''
              width: 150
            }
            column_Price
            {
              columnId: 'Price'
              dataPath: 'Price'
              dataType: 'real'
              title: '销售额'
              index: 7
              subtotals: ''
              width: 150
            }
            column_EndDate
            {
              columnId: 'EndDate'
              dataPath: 'EndDate'
              dataType: 'date'
              title: '客户需求时间'
              index: 8
              subtotals: ''
              width: 150
            }
            column_IsLocked
            {
              columnId: 'IsLocked'
              dataPath: 'IsLocked'
              dataType: 'boolean'
              title: '状态'
              index: 9
              subtotals: ''
              width: 150
            }
            column_End
            {
              columnId: 'End'
              dataPath: 'End'
              dataType: 'date'
              title: '计划交付时间'
              index: 10
              subtotals: ''
              width: 150
            }
            column_LastModify
            {
              columnId: 'LastModify'
              dataPath: 'LastModify'
              dataType: 'string'
              title: '最后操作人'
              index: 11
              subtotals: ''
              width: 150
            }
            column_LastModifyTime
            {
              columnId: 'LastModifyTime'
              dataPath: 'LastModifyTime'
              dataType: 'datetime'
              title: '最后操作时间'
              index: 12
              subtotals: ''
              width: 145
            }
            column_Notes
            {
              columnId: 'Notes'
              dataPath: 'Notes'
              dataType: 'string'
              title: '操作详情'
              index: 13
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormScenariosKPIsComparison
      form_FormOrderLock
      {
        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
        title: 'QTIANMA_JITUAN::FormOrderLock'
        shown: true
        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
        componentID: 'QTIANMA_JITUAN::FormOrderLock'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 16
          columnPosition: 6
          columnSpan: 7
          rowSpan: 13
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
          FormOrderLock_PanelOrderLock
          {
            sizeRatio: 1
          }
          FormOrderLock_PanelOrderLockHeader
          {
            sizeRatio: 1
          }
          FormOrderLock_PanelOrderLockOrder
          {
            sizeRatio: 1
          }
          FormOrderLock_ListOrderLock
          {
          }
          FormOrderLock_DataSetLevelOrderLock
          {
            groupDepth: -1
            sort: 'StartDate'
            column_OrderID
            {
              columnId: 'OrderID'
              dataPath: 'OrderID'
              dataType: 'string'
              title: '订单号'
              index: 0
              subtotals: ''
              width: 150
            }
            column_ProductID
            {
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              title: '物料号'
              index: 1
              subtotals: ''
              width: 150
            }
            column_SalesSegmentName
            {
              columnId: 'SalesSegmentName'
              dataPath: 'SalesSegmentName'
              dataType: 'string'
              title: '销售部门'
              index: 2
              subtotals: ''
              width: 150
            }
            column_StockingPointID
            {
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              dataType: 'string'
              title: '库存点'
              index: 3
              subtotals: ''
              width: 150
            }
            column_CustomerName
            {
              columnId: 'CustomerName'
              dataPath: 'CustomerName'
              dataType: 'string'
              title: '客户名称'
              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'
              title: '单位'
              index: 6
              subtotals: ''
              width: 150
            }
            column_Price
            {
              columnId: 'Price'
              dataPath: 'Price'
              dataType: 'real'
              title: '销售额'
              index: 7
              subtotals: ''
              width: 150
            }
            column_StartDate
            {
              columnId: 'StartDate'
              dataPath: 'StartDate'
              dataType: 'date'
              title: '客户需求时间'
              index: 8
              subtotals: ''
              width: 150
            }
            column_IsLocked
            {
              columnId: 'IsLocked'
              dataPath: 'IsLocked'
              dataType: 'boolean'
              title: '状态'
              index: 9
              subtotals: ''
              width: 150
            }
            column_First_AsPlanningBaseSalesDemandInPeriod_End
            {
              columnId: 'First.AsPlanningBaseSalesDemandInPeriod.End'
              dataPath: 'First.AsPlanningBaseSalesDemandInPeriod.End'
              dataType: 'datetime'
              title: '计划交付时间'
              index: 10
              subtotals: ''
              width: 150
            }
            column_LastModify
            {
              columnId: 'LastModify'
              dataPath: 'LastModify'
              dataType: 'string'
              title: '最后操作人'
              index: 11
              subtotals: ''
              width: 150
            }
            column_LastModifyTime
            {
              columnId: 'LastModifyTime'
              dataPath: 'LastModifyTime'
              dataType: 'datetime'
              title: '最后操作时间'
              index: 12
              subtotals: ''
              width: 150
            }
          }
          FormOrderLock_PanelOrderLockPlanning
          {
            sizeRatio: 1
          }
          FormOrderLock_PanelMatrix
          {
            sizeRatio: 1
          }
          FormOrderLock_MatrixEditorProductPlanning
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 200
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            totalHeaderWidth: 427
            attributeHeaderWidthRatio: 0.325989701966572
            nameHeaderWidthRatio: 0.674010298033429
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
              componentId: 'QTIANMA_JITUAN::FormOrderLock.MatrixEditorProductPlanning'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_DisplayValue
                    attribute_DisplaySupplyQuantity
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'DisplayValue'
                      attribute: 'DisplaySupplyQuantity'
                    }
                    attribute_DependentDemandAndSalesDemandQuantity
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 1
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'DependentDemandAndSalesDemandQuantity'
                    }
                    attribute_TargetInventoryLevel
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 2
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'TargetInventoryLevel'
                    }
                    attribute_InventoryLevelEnd
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 3
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'InventoryLevelEnd'
                    }
                    attribute_StockLevelInDays
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 4
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'StockLevelInDays'
                    }
                  }
                }
@@ -209,14 +408,14 @@
                {
                  sorting
                  {
                    criteria: ''
                    criteria: "datamember:'Start'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'KPISetting.DisplayIndex'"
                    criteria: "datamember:'Product_MP.DisplayIndex';datamember:'Name'"
                  }
                }
              }
@@ -337,10 +536,10 @@
    userconfigurableinformation
    {
    }
    index: 2
    image: 'DOCUMENT_LOCK'
    page: 'applicationDevelopmentActionBarPageDef'
    group: ''
    index: 2
    image: 'DOCUMENT_LOCK'
    description: ''
  }
  formatversion: 2
_Main/UI/MacroPlannerWebApp/Views/Test.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormCapacityAllocationResultsRuleConfiguration
      {
        title: 'QTIANMA_JITUAN::FormCapacityAllocationResultsRuleConfiguration'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormCapacityAllocationResultsRuleConfiguration'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 15
          columnPosition: 1
          columnSpan: 4
        }
        components
        {
          FormCapacityAllocationResultsRuleConfiguration_PanelImportAndExport
          {
            sizeRatio: 1
          }
          FormCapacityAllocationResultsRuleConfiguration_ListCapacityAllocationResultsRuleConfiguration
          {
          }
          FormCapacityAllocationResultsRuleConfiguration_DataSetLevelCapacityAllocationResultsRuleConfiguration
          {
            groupDepth: -1
            column_PanelMaterialCode
            {
              columnId: 'PanelMaterialCode'
              dataPath: 'PanelMaterialCode'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_ModuleMaterialCode
            {
              columnId: 'ModuleMaterialCode'
              dataPath: 'ModuleMaterialCode'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_Division
            {
              columnId: 'Division'
              dataPath: 'Division'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_StockingPointID
            {
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormCapacityAllocationResults
      {
        title: 'QTIANMA_JITUAN::FormCapacityAllocationResults'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormCapacityAllocationResults'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 15
          columnPosition: 5
          columnSpan: 8
        }
        components
        {
          FormCapacityAllocationResults_PanelCapacityAllocationResults
          {
            sizeRatio: 1
          }
          FormCapacityAllocationResults_ListCapacityAllocationResults
          {
          }
          FormCapacityAllocationResults_DataSetLevelCapacityAllocationResults
          {
            groupDepth: -1
            column_Date
            {
              columnId: 'Date'
              dataPath: 'Date'
              dataType: 'date'
              index: 0
              subtotals: ''
              width: 150
            }
            column_Description
            {
              columnId: 'Description'
              dataPath: 'Description'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_ID
            {
              columnId: 'ID'
              dataPath: 'ID'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_ProductID
            {
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 150
            }
            column_StockingPointID
            {
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 150
            }
            column_UserQuantity
            {
              columnId: 'UserQuantity'
              dataPath: 'UserQuantity'
              dataType: 'real'
              index: 5
              subtotals: ''
              width: 150
            }
            column_ManufacturedDate
            {
              columnId: 'ManufacturedDate'
              dataPath: 'ManufacturedDate'
              dataType: 'date'
              index: 6
              subtotals: ''
              width: 150
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    image: 'BEAR'
    page: ''
    group: ''
    index: 0
    description: ''
  }
  formatversion: 2
  id: 'Test'
  name: 'Test'
  isglobal: false
  isroot: true
}
_var/_Main/ProjSettings/MacroPlannerWebApp/TypeConfigs/CustomerOrder.qtc
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
{
  SelectableAttributes
  {
    ID
    {
      attribute: 'ID'
      isactive: true
    }
    IsLocked
    {
      attribute: 'IsLocked'
      isactive: true
    }
  }
  meta_
  {
    type: 'CustomerOrder'
  }
}
_var/_Main/ProjSettings/MacroPlannerWebApp/Views/Test.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormCapacityAllocationResults
      {
        layout
        {
          rowSpan: 15
          columnPosition: 5
          columnSpan: 8
        }
      }
      form_FormCapacityAllocationResultsRuleConfiguration
      {
        title: 'QTIANMA_JITUAN::FormCapacityAllocationResultsRuleConfiguration'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormCapacityAllocationResultsRuleConfiguration'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 15
          columnPosition: 1
          columnSpan: 4
        }
        components: null
      }
      form_FormPanelPullPlanReport
      {
        _removed: true
      }
    }
  }
  formatversion: 2
  id: 'Test'
  name: 'Test'
  isglobal: false
  isroot: false
}