Lai,Risheng
2023-11-02 30c02e0c981b16be0918483543f4b812956c45d4
Merge remote-tracking branch 'refs/remotes/origin/dev'
已修改46个文件
已添加79个文件
已删除1个文件
6445 ■■■■ 文件已修改
_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl 243 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Lane/StaticMethod_FindById.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Pegging分析.vw 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_var/_Main/ProjSettings/MacroPlanner/Views/X_分析视图_[414702.1.50321581].vw 3645 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
@@ -2,7 +2,7 @@
#parent: #root
EDIBroker GlobalOTDTable_CAR_Export
{
  MDSDefinition: GlobalOTDTable
  MDSDefinition: GlobalOTDSOP
  TimeZone: 'ACT'
  UseOSTimeZone: false
  EDIModelLink.Source Source13
_Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP_PeggingProductInSalesDemandBase
{
  #keys: '1[414702.1.290710058]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide PeggingProduct_MP
  {
    #keys: '3[414702.1.290710060][414702.1.290710059][414702.1.290710061]'
    Cardinality: '0to1'
    ObjectDefinition: PeggingProductInSalesDemandBase
    OwningSide: 'Reference'
  }
  RelationSide.RightSide PeggingProductInSalesDemandBase
  {
    #keys: '3[414702.1.290710063][414702.1.290710062][414702.1.290710064]'
    Cardinality: '1toN'
    ObjectDefinition: PeggingProduct_MP
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP
{
  #keys: '1[414702.1.290710038]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide GlobalOTDSOP
  {
    #keys: '3[414702.1.290710040][414702.1.290710039][414702.1.290710041]'
    Cardinality: '0to1'
    ObjectDefinition: PeggingProduct_MP
    OwningSide: 'Reference'
  }
  RelationSide.RightSide PeggingProduct_MP
  {
    #keys: '3[414702.1.290710043][414702.1.290710042][414702.1.290710044]'
    Cardinality: '1toN'
    ObjectDefinition: GlobalOTDSOP
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PeggingResult_AllChild_PeggingResult_AllParent
{
  #keys: '1[414702.1.294852003]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide AllChild
  {
    #keys: '3[414702.1.294852005][414702.1.294852004][414702.1.294852006]'
    Cardinality: '1toN'
    ObjectDefinition: PeggingResult
    OwningSide: 'Reference'
  }
  RelationSide.RightSide AllParent
  {
    #keys: '3[414702.1.294852008][414702.1.294852007][414702.1.294852009]'
    Cardinality: '0to1'
    ObjectDefinition: PeggingResult
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PeggingResult_AllGroupChild_PeggingResult_AllGroupParent
{
  #keys: '1[414702.1.320753677]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide AllGroupChild
  {
    #keys: '3[414702.1.320753679][414702.1.320753678][414702.1.320753680]'
    Cardinality: '1toN'
    ObjectDefinition: PeggingResult
    OwningSide: 'Reference'
  }
  RelationSide.RightSide AllGroupParent
  {
    #keys: '3[414702.1.320753682][414702.1.320753681][414702.1.320753683]'
    Cardinality: '0to1'
    ObjectDefinition: PeggingResult
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PeggingResult_Child_PeggingResult_Parent
{
  #keys: '1[414702.1.290710113]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Child
  {
    #keys: '3[414702.1.290710115][414702.1.290710114][414702.1.290710116]'
    Cardinality: '1toN'
    ObjectDefinition: PeggingResult
    OwningSide: 'Reference'
  }
  RelationSide.RightSide Parent
  {
    #keys: '3[414702.1.290710118][414702.1.290710117][414702.1.290710119]'
    Cardinality: '0to1'
    ObjectDefinition: PeggingResult
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSalesDemandBase_PeggingResult
{
  #keys: '1[414702.1.290710098]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide PeggingProductInSalesDemandBase
  {
    #keys: '3[414702.1.290710100][414702.1.290710099][414702.1.290710101]'
    Cardinality: '0to1'
    ObjectDefinition: PeggingResult
    OwningSide: 'Reference'
  }
  RelationSide.RightSide PeggingResult
  {
    #keys: '3[414702.1.290710103][414702.1.290710102][414702.1.290710104]'
    Cardinality: '1toN'
    ObjectDefinition: PeggingProductInSalesDemandBase
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
@@ -26,6 +26,20 @@
      if( productId <> "" ) {
        product := Product_MP::FindById( macroPlan, productId );
      }else{
    //    info( productId );
    //    cf := select( source,
    //              AsSourceUnitOfMeasure,
    //              cf,
    //              ( cf.TargetUnitOfMeasure() = target
    //                or cf.TargetUnitOfMeasure() = source )
    //              and cf.Product_MP() = product
    //              );
    //    info( isnull( cf ) );
    //    info( "sourceuomname: " + cf.astype( BaseConversionFactor ).SourceUnitOfMeasureName() );
    //    info( "targetuomname: " + target.Name() );
    //    info( "cf.targetuomname: " + cf.astype( BaseConversionFactor ).TargetUnitOfMeasureName() );
    //    info( "productid: " + guard( product.ID(), "" ) );
    //    info( "cf.product: " + cf.astype( BaseConversionFactor ).ProductID() );
        result := BaseConversionFactor::CreateUpdate( source, target, factor, product, isEnable )
      }
    
_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
@@ -1,12 +1,12 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  GlobalOTDTable globalOTDTable
  GlobalOTDSOP globalOTDSOP
) as BinaryValue
{
  TextBody:
  [*
    binaryData := globalOTDTable.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
    binaryData := globalOTDSOP.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
    
    return binaryData.AsBinaryValue();
  *]
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateData (
  const GlobalOTDTable globalOTDTable,
  GlobalOTDSOP this
)
{
  TextBody:
  [*
    traverse ( globalOTDTable, Global_MappingAnnualBudgetData, gmabd ) {
      productCode := gmabd.ProductID();
      row         := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
      CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
    }
    columnBusinessType             := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "事业部" );
    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板基地" );
    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    }
  *]
}
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreatePanelAllocationBudget (
  GlobalOTDSOP this,
  CapacityAndSaleBudgeFilterMonths months,
  CapacityAndSaleBudgeFilterYear year,
  const GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
      total := 0.0;
      traverse ( months, Elements, m ) {
        columnName  := "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-年度预算";
        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
        cellReal    := Global_MappingForecast::GetQuantityByMonth( casbcir.GetProductCodes(), globalOTDTable, DateTime::Now().Year(), m.MonthNo() );
        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
        total       := total + cellReal;
        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
      }
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-total-年度预算" );
      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
      columnYear.TotalIdentification( year.YearNo() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
    }
  *]
}
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreatePanelAllocationByScenario (
  MacroPlans macroPlans,
  GlobalOTDSOP this,
  CapacityAndSaleBudgeFilterMonths months,
  CapacityAndSaleBudgeFilterYear year
)
{
  TextBody:
  [*
    traverse ( macroPlans, Elements, mp ) {
      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
        total := 0.0;
        traverse ( months, Elements, m ) {
          columnName  := "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-" + mp.ScenarioName();
          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
          cellReal    := Product_MP::GetNewSupplyByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
          total       := total + cellReal;
          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
        }
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-total-" + mp.ScenarioName() );
        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
        columnYear.TotalIdentification( year.YearNo() );
        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
      }
    }
  *]
}
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateSalesVolume (
  GlobalOTDSOP this,
  CapacityAndSaleBudgeFilterMonths months,
  CapacityAndSaleBudgeFilterYear year,
  const GlobalOTDTable globalOTDTable
)
{
  TextBody:
  [*
    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
      total := 0.0;
      traverse ( months, Elements, m ) {
        columnName  := "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-年度预算";
        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
        cellReal    := Global_MappingAnnualBudgetData::GetSaleByMonth( casbcir.GetProductCodes(), globalOTDTable, year.YearNo(), m.MonthNo() );
        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
        total       := total + cellReal;
        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
      }
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-total-年度预算" );
      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
      columnYear.TotalIdentification( year.YearNo() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
    }
  *]
}
_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateSalesVolumeByScenario (
  MacroPlans macroPlans,
  GlobalOTDSOP this,
  CapacityAndSaleBudgeFilterMonths months,
  CapacityAndSaleBudgeFilterYear year
)
{
  TextBody:
  [*
    traverse ( macroPlans, Elements, mp ) {
      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
        total := 0.0;
        traverse ( months, Elements, m ) {
          columnName  := "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-" + mp.ScenarioName();
          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
          cellReal    := Forecast::GetFulfilledBalanceByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
          total       := total + cellReal;
          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
        }
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-total-" + mp.ScenarioName() );
        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
        columnYear.TotalIdentification( year.YearNo() );
        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
      }
    }
  *]
}
_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateCurrencyRate (
  MacroPlan mp,
  String currencyid,
  Date start,
  Real rate
@@ -11,10 +12,10 @@
  [*
    // Administrator Jul-19-2023 (created)
    isfromdb := true;
    currency := Currency_MP::FindCurrencyTypeIndex( currencyid );
    currency := Currency_MP::FindById( mp, currencyid );
    
    //create new currency
    result := CurrencyRate_MP::FindCurrencyRateTypeIndex( currencyid, start );
    result := CurrencyRate_MP::FindByIdAndStart( currency, currencyid, start );
    
    if( isnull( result ) )
    {
_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateCurrencyRateFromJson (
  MacroPlan mp,
  JSON datarow
) as CurrencyRate_MP
{
@@ -16,7 +17,7 @@
    day := [Number]startstring.SubString( 8, 2 );
    
    start := Date::Construct( years, month, day );
    result := CurrencyRate_MP::CreateCurrencyRate( currencyid, start, rate );
    result := CurrencyRate_MP::CreateCurrencyRate( mp, currencyid, start, rate );
    
    return result;
  *]
_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateFromMapping (
  const GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    // Administrator Oct-31-2023 (created)
    updates := construct( CurrencyRate_MPs );
    traverse( globalOTDTable, Global_MappingCurrencyRate_MP, gcr, true )
    {
      a := CurrencyRate_MP::CreateCurrencyRate( macroPlan, gcr.CurrencyID(), gcr.Start(), gcr.Rate() );
      updates.Add( a );
      }
    origindataset := selectset( macroPlan, Currency_MP.CurrencyRate_MP, cr, true );
    obsoletes := origindataset.Difference( updates );
    // delete obsoleted
    difflength := obsoletes.Size();
    for( j:=0; j<difflength; j++ )
    {
      obsolete := obsoletes.Element( j );
      obsolete.Delete();
      }
  *]
}
_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindByIdAndStart (
  Currency_MP owner,
  String id,
  Date start
) as CurrencyRate_MP
{
  TextBody:
  [*
    // yypsybs Aug-14-2023 (created)
    result := select(  owner, CurrencyRate_MP, item, true, item.CurrencyID() = id and item.Start() = start );
    return result;
  *]
}
_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl
@@ -16,7 +16,7 @@
    isfromdb := true;
    
    //create new currency
    result := Currency_MP::FindCurrencyTypeIndex( id );
    result := Currency_MP::FindById( mp, id );
    
    if( isnull( result ) )
    {
_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateFromMapping (
  const GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    // Administrator Oct-31-2023 (created)
    updates := construct( Currency_MPs );
    traverse( globalOTDTable, Global_MappingCurrency_MP, gc, true )
    {
      a := Currency_MP::CreateCurrency( macroPlan, gc.ID(), gc.Name(), " ", gc.IsBase() );
      updates.Add( a );
      }
    origindataset := selectset( macroPlan, Currency_MP, c, true );
    obsoletes := origindataset.Difference( updates );
    // delete obsoleted
    difflength := obsoletes.Size();
    for( j:=0; j<difflength; j++ )
    {
      obsolete := obsoletes.Element( j );
      obsolete.Delete();
      }
  *]
}
_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
@@ -12,11 +12,11 @@
    // yypsybs Sep-18-2023 (created)
    result := sum( macroPlan, 
                   Product_MP.SalesDemand,
                   item,
                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1
                   and item.StartDate().Year() = yearNo
                   and item.StartDate().Month() = monthNo,
                   item.FulfilledQuantity() * item.Price() );
                   tempSD,
                   productNo.Find( tempSD.ProductID() ) > -1
                   and tempSD.StartDate().Year() = yearNo
                   and tempSD.StartDate().Month() = monthNo,
                   tempSD.FulfilledQuantity() * tempSD.Price() );
    return result;
  *]
}
_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl
@@ -50,11 +50,11 @@
    macroPlan.InitialUnitAndStockingPoint();
    
    if ( isUnitOfMeasure_MP ) {
      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
    }
    
    if ( isCustomOrder ) {
      Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, executionUser );
      Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, businessTypes, organcodelist, executionUser );
    }
    
    if ( isForeacst ) {
@@ -82,7 +82,7 @@
    }
    
    if ( isProductInLane ) {
      Global_MappingProductInLane::SynchronizeMacroPlanData( this, macroPlan, executionUser );
      Global_MappingProductInLane::SynchronizeMacroPlanData( this, macroPlan, businessTypes, executionUser );
    }
    
    if ( isAIPISPIP ) {
@@ -94,7 +94,7 @@
    }
    
    if ( isStockingPointCost ) {
      Global_MappingStockingPointCost::SynchronizeMacroPlanData( this, macroPlan, executionUser );
      Global_MappingStockingPointCost::SynchronizeMacroPlanData( this, macroPlan, businessTypes, executionUser );
    }
    
    if ( isOperationCost ) {
_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -5,13 +5,12 @@
  CapacityAndSaleBudgeFilterItems items,
  CapacityAndSaleBudgeFilterYears years,
  CapacityAndSaleBudgeFilterMonths months,
  const GlobalOTDTable otdTable
  const GlobalOTDTable globalOTDTable
)
{
  Description: 'todo : mappingParent改为mpSync, random删了'
  TextBody:
  [*
    // ====不选时默认全选====
    if ( years.Size() = 0 ) {
      years := selectset( this, CapacityAndSaleBudgeFilterYear, tempCASBFY, tempCASBFY.YearNo() = Date::ActualDate().Year() );
    }
@@ -22,219 +21,57 @@
    this.CapacityAndSaleBudgeCompareItemRow( relflush );
    this.CapacityAndSaleBudgeCompareItemColumn( relflush );
    
    // ====汇总所有出现的产品====
    targetglobal_MappingAnnualBudgetData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
    CapacityAndSaleBudgeCompareItemCell::CreateData( globalOTDTable, this );
    
    traverse ( targetglobal_MappingAnnualBudgetData, Elements, gmabd ) {
      productCode := gmabd.ProductID();
    //  Global_MappingOperationBOM::CreateTestData( otdTable, "事业部" + [String](productCode.Length() mod 3), "面板基地" + [String](productCode.Length() mod 4), productCode );
    //  boms := selectset( otdTable, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
    //  if( boms.Size() > 0 ) {
    //    bom := boms.First();
    //    businessType := bom.BusinessType();
    //    placeOfProductionOfArray := bom.OrganCode();
        // ç›¸åŒé¢æ¿åŸºåœ°å’Œäº‹ä¸šéƒ¨çš„æ”¾ä¸€è¡Œ
        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
        // è®°å½•每行包含哪些product
        CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
    //  } else {
    //    debuginfo( "no boms for product : " + productCode );
    //  }
    }
    // ====从左向右生成列头与内容====
    // äº‹ä¸šéƒ¨ï¼Œé¢æ¿åŸºåœ°
    columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "事业部" );
    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板基地" );
    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    }
    // é¢æ¿åˆ†é…é‡ - å¹´åº¦é¢„ç®— (sheets)
    // æ ¼å¼ï¼š é¢æ¿åˆ†é…é‡ - å¹´ - æœˆï¼ˆ1-12 & total) - å¹´åº¦é¢„ç®—/scenarioName
    if ( CapacityAndSaleBudgeFilterItem::Contains( items, "面板分配量" ) ) {
      traverse ( years, Elements, year ) {
        // åŽ†å²æ•°æ®
    //    traverse ( months, Elements, month ) {
    //      columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-年度预算" );
    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //        cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), otdTable, DateTime::Now().Year(), month.MonthNo() );
    //        cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //      }
    //    }
    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-total-年度预算" );
    //    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //      cellReal := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), otdTable, year.YearNo() );
    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //    }
        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
          total := 0.0;
          traverse ( months, Elements, m ) {
            columnName  := "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-年度预算";
            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
            cellReal    := Global_MappingForecast::GetQuantityByMonth( casbcir.GetProductCodes(), otdTable, DateTime::Now().Year(), m.MonthNo() );
            cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
            total       := total + cellReal;
            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
          }
          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-total-年度预算" );
          cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
          columnYear.TotalIdentification( year.YearNo() );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
        }
        // S&OP数据
    //    traverse ( macroPlans, Elements, macroPlan ) {
    //      traverse ( months, Elements, month ) {
    //        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this,
    //                                                                                "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-" + macroPlan.ScenarioName() );
    //        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //          cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
    //          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //        }
    //      }
    //      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this,
    //                                                                             "面板分配量-" + [String]year.YearNo() + "å¹´-total-" + macroPlan.ScenarioName() );
    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //        cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
    //        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //      }
    //    }
        traverse ( macroPlans, Elements, mp ) {
          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
            total := 0.0;
            traverse ( months, Elements, m ) {
              columnName  := "面板分配量-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-" + mp.ScenarioName();
              columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
              cellReal    := Product_MP::GetNewSupplyByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
              cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
              total       := total + cellReal;
              cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
            }
            columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "面板分配量-" + [String]year.YearNo() + "å¹´-total-" + mp.ScenarioName() );
            cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
            columnYear.TotalIdentification( year.YearNo() );
            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
          }
        }
        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationBudget( this, months, year, globalOTDTable );
        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationByScenario( macroPlans, this, months, year );
      }
    }
    
    // å¹´åº¦é”€å”®é¢
    if ( CapacityAndSaleBudgeFilterItem::Contains( items, "销售额" ) ) {
      traverse ( years, Elements, year ) {
        // åŽ†å²æ•°æ®
    //    traverse ( months, Elements, month ) {
    //      columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-年度预算" );
    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //        cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), otdTable, year.YearNo(), month.MonthNo() );
    //        cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //      }
    //    }
    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-年度预算" );
    //    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //      cellReal := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), otdTable, year.YearNo() );
    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //    }
        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
          total := 0.0;
          traverse ( months, Elements, m ) {
            columnName  := "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-年度预算";
            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
            cellReal    := Global_MappingAnnualBudgetData::GetSaleByMonth( casbcir.GetProductCodes(), otdTable, year.YearNo(), m.MonthNo() );
            cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
            total       := total + cellReal;
            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
          }
          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-total-年度预算" );
          cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
          columnYear.TotalIdentification( year.YearNo() );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
        }
        // S&OP数据
    //    traverse ( macroPlans, Elements, macroPlan ) {
    //      traverse ( months, Elements, month ) {
    //        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]month.MonthNo() + "月-" + macroPlan.ScenarioName() );
    //        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //          cellReal := Forecast::GetFulfilledBalanceByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
    //          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //        }
    //      }
    //      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-total-" + macroPlan.ScenarioName() );
    //      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //        // QID 23
    //        cellReal := Forecast::GetFulfilledBalanceByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
    //        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //      }
    //    }
        traverse ( macroPlans, Elements, mp ) {
          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
            total := 0.0;
            traverse ( months, Elements, m ) {
              columnName  := "对外销售额-" + [String]year.YearNo() + "å¹´-" + [String]m.MonthNo() + "月-" + mp.ScenarioName();
              columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
              cellReal    := Forecast::GetFulfilledBalanceByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
              cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
              total       := total + cellReal;
              cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
            }
            columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "对外销售额-" + [String]year.YearNo() + "å¹´-total-" + mp.ScenarioName() );
            cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
            columnYear.TotalIdentification( year.YearNo() );
            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
          }
        }
        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolume( this, months, year, globalOTDTable );
        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeByScenario( macroPlans, this, months, year );
      }
    }
    
    // å¤§å¼ ç›ˆåˆ©é¢
    traverse ( years, Elements, year ) {
      // åŽ†å²æ•°æ®
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´-年度预算" );
      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
      }
      // S&OP数据
      traverse( macroPlans, Elements, macroPlan ) {
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName() );
        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
      }
    }
    // äº§å“ç›ˆåˆ©é¢
    traverse ( years, Elements, year ) {
      // åŽ†å²æ•°æ®
      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-" + [String]year.YearNo() + "å¹´-年度预算" );
      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
      }
      // S&OP数据
      traverse ( macroPlans, Elements, macroPlan ) {
        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-" + [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName() );
        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
          // todo
          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
        }
      }
    }
    //traverse ( years, Elements, year ) {
    //  // åŽ†å²æ•°æ®
    //  columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´-年度预算" );
    //  traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //    cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
    //    cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //  }
    //  // S&OP数据
    //  traverse( macroPlans, Elements, macroPlan ) {
    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "大张盈利额-" + [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName() );
    //    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //    }
    //  }
    //}
    //// äº§å“ç›ˆåˆ©é¢
    //traverse ( years, Elements, year ) {
    //  // åŽ†å²æ•°æ®
    //  columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-" + [String]year.YearNo() + "å¹´-年度预算" );
    //  traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //    cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
    //    cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //  }
    //  // S&OP数据
    //  traverse ( macroPlans, Elements, macroPlan ) {
    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "产品盈利额-" + [String]year.YearNo() + "å¹´-" + macroPlan.ScenarioName() );
    //    traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
    //      // todo
    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
    //    }
    //  }
    //}
    
    // è®¾ç½®rowNo和columnNo
    rowNo := 1;
_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -12,14 +12,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步实际库存数据",
                                                                       BrokerName := "同步实际库存数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable, isKeyProduct, organcodelist );
      macroPlan.DoASyncMappingActualPISPIPData( businessTypes, globalOTDTable, isKeyProduct, organcodelist );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,14 +9,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步单位转换数据",
                                                                       BrokerName := "同步单位转换数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingBaseConversionFactorData(globalOTDTable);
      macroPlan.DoASyncMappingBaseConversionFactorData(globalOTDTable);
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步货币汇率数据",
                                                                       BrokerName := "同步货币汇率数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      updates := construct( CurrencyRate_MPs );
      traverse( globalOTDTable, Global_MappingCurrencyRate_MP, gcr, true )
      {
        a := CurrencyRate_MP::CreateCurrencyRate( gcr.CurrencyID(), gcr.Start(), gcr.Rate() );
        updates.Add( a );
        }
      origindataset := selectset( macroPlan, Currency_MP.CurrencyRate_MP, cr, true );
      obsoletes := origindataset.Difference( updates );
      // delete obsoleted
      difflength := obsoletes.Size();
      for( j:=0; j<difflength; j++ )
      {
        obsolete := obsoletes.Element( j );
        obsolete.Delete();
        }
      CurrencyRate_MP::CreateFromMapping( globalOTDTable, macroPlan );
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
    } onerror {
_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步货币数据",
                                                                       BrokerName := "同步货币数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      updates := construct( Currency_MPs );
      traverse( globalOTDTable, Global_MappingCurrency_MP, gc, true )
      {
        a := Currency_MP::CreateCurrency( macroPlan, gc.ID(), gc.Name(), " ", gc.IsBase() );
        updates.Add( a );
        }
      origindataset := selectset( macroPlan, Currency_MP, c, true );
      obsoletes := origindataset.Difference( updates );
      // delete obsoleted
      difflength := obsoletes.Size();
      for( j:=0; j<difflength; j++ )
      {
        obsolete := obsoletes.Element( j );
        obsolete.Delete();
        }
      Currency_MP::CreateFromMapping( globalOTDTable, macroPlan );
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
    } onerror {
_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,23 @@
StaticMethod SynchronizeMacroPlanData (
  GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan,
  Strings businessTypes,
  Strings organcodelist,
  String executionUser
)
{
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步订单数据",
                                                                       BrokerName := "同步订单数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      Global_MappingCustomOrder::CreateCustomOrder( globalOTDTable, macroPlan );
      macroPlan.DoASyncMappingCustomerOrderData( businessTypes, globalOTDTable, organcodelist );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步预测数据",
                                                                       BrokerName := "同步预测数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingForecastData( businessTypes, globalOTDTable, organcodelist );
      macroPlan.DoASyncMappingForecastData( businessTypes, globalOTDTable, organcodelist );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -12,14 +12,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步在途库存数据",
                                                                       BrokerName := "同步在途库存数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
      macroPlan.DoASyncMappingExternalSupplyData( businessTypes, isKeyProduct, globalOTDTable, organcodelist );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,61 +9,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步车道数据",
                                                                       BrokerName := "同步车道数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      updates := construct( Lanes );
      traverse( globalOTDTable, Global_MappingLane, gl, true )
      {
        id := gl.ID();
        unitid := gl.UnitID();
        name := gl.Name();
        userleadtime := gl.UserLeadTime();
        processingtime := Duration::Zero();
        unitofmeasurename := "PCS";
        currencyid := "CNY";
        startdate := Date::Date( 1900, 1, 1 );
        enddate := Date::Date( 9999, 12, 31 );
        capacitytype := "Transport quantity";
        if( userleadtime.Length() = 0 )
        {
          processingtime := Duration::Zero();
          }
        else
        {
          processingtime := Duration::Hours( [Number]userleadtime );
          };
        unit := Unit::FindUnitTypeIndex( unitid );
        if( isnull( unit)){
          unit :=macroPlan.Unit( relnew,
                                 ID := unitid,
                                 Name := unitid,
                                 UnitOfMeasureName := unitofmeasurename,
                                 CurrencyID := currencyid,
                                 StartDate := startdate,
                                 EndDate := enddate,
                                 CapacityType := capacitytype );
        }
        a := Lane::CreateLane( unit, id, name, processingtime);
        updates.Add( a );
        }
      origindataset := selectset( macroPlan, Unit.Lane, l, true );
      obsoletes := origindataset.Difference( updates );
      // delete obsoleted
      difflength := obsoletes.Size();
      for( j:=0; j<difflength; j++ )
      {
        obsolete := obsoletes.Element( j );
        obsolete.Delete();
        }
      Lane::CreasteFromMapping( globalOTDTable, macroPlan );
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
    } onerror {
_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,44 +9,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步车道路线数据",
                                                                       BrokerName := "同步车道路线数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      updates := construct( LaneLegs );
      traverse( globalOTDTable, Global_MappingLaneLeg, gll, true )
      {
        processingtime := Duration::Zero();
        hasprocessingtime := true;
        userleadtime := gll.UserLeadTime();
        if( userleadtime.Length() = 0 )
        {
          hasprocessingtime := false;
          processingtime := Duration::Zero();
          }
        else
        {
          hasprocessingtime := true;
          processingtime := Duration::Hours( [Number]userleadtime );
          };
        lane := Lane::FindLaneTypeIndex( gll.LaneID() );
        a := LaneLeg::CreateLaneleg(lane, gll.LaneID(), gll.OriginStockingPointID(), gll.DestinationStockingPointID(), gll.Name(), hasprocessingtime, processingtime);
        updates.Add( a );
        }
      origindataset := selectset( macroPlan, Unit.Lane.LaneLeg, ll, true );
      obsoletes := origindataset.Difference( updates );
      // delete obsoleted
      difflength := obsoletes.Size();
      for( j:=0; j<difflength; j++ )
      {
        obsolete := obsoletes.Element( j );
        obsolete.Delete();
        }
      LaneLeg::CreateFromMapping( globalOTDTable, macroPlan );
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
    } onerror {
_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步工艺路线数据",
                                                                       BrokerName := "同步工艺路线数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingOperationData( businessTypes ,globalOTDTable, organcodelist );
      macroPlan.DoASyncMappingOperationData( businessTypes, globalOTDTable, organcodelist );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -13,14 +13,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步BOM数据",
                                                                       BrokerName := "同步BOM数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial, globalOTDTable, organcodelist );
      macroPlan.DoASyncMappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial, globalOTDTable, organcodelist );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,22 @@
StaticMethod SynchronizeMacroPlanData (
  GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan,
  Strings businessTypes,
  String executionUser
)
{
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步运输路线产品数据",
                                                                       BrokerName := "同步运输路线产品数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingProductInLaneData(globalOTDTable);
      macroPlan.DoASyncMappingProductInLaneData( globalOTDTable, businessTypes );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步产品数据",
                                                                       BrokerName := "同步产品数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingProductData( businessTypes, globalOTDTable,isKeyProduct );
      macroPlan.DoASyncMappingProductData( businessTypes, globalOTDTable, isKeyProduct );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -10,14 +10,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步销售部门数据",
                                                                       BrokerName := "同步销售部门数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingSalesSegmentData( businessTypes, globalOTDTable );
      macroPlan.DoASyncMappingSalesSegmentData( businessTypes, globalOTDTable );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,22 @@
StaticMethod SynchronizeMacroPlanData (
  GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan,
  Strings businessTypes,
  String executionUser
)
{
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步库存成本数据",
                                                                       BrokerName := "同步库存成本数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingInventoryValueAndCostData(globalOTDTable);
      macroPlan.DoASyncMappingInventoryValueAndCostData( globalOTDTable, businessTypes );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步库存点数据",
                                                                       BrokerName := "同步库存点数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      updates := construct( StockingPoint_MPs );
      traverse( globalOTDTable, Global_MappingStockingPoint_MP, sp, true )
      {
        a := StockingPoint_MP::CreateStockingpoint( macroPlan, sp.ID(), sp.UnitID(), sp.Name() );
        updates.Add( a );
        }
      origindataset := selectset( macroPlan, StockingPoint_MP, sp, true );
      obsoletes := origindataset.Difference( updates );
      // delete obsoleted
      difflength := obsoletes.Size();
      for( j:=0; j<difflength; j++ )
      {
        obsolete := obsoletes.Element( j );
        obsolete.Delete();
        }
      StockingPoint_MP::CreateFromMapping( globalOTDTable, macroPlan );
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
    } onerror {
_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name        := "同步制造成本数据",
                                                                       BrokerName := "同步制造成本数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
      
    try {
      macroPlan.MappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
      macroPlan.DoASyncMappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
      
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -2,30 +2,30 @@
#parent: #root
StaticMethod SynchronizeMacroPlanData (
  GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
  MacroPlan macroPlan,
  String executionUser
)
{
  TextBody:
  [*
    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
                                                                       Name := "同步单位数据",
                                                                       IsSuccess := true
                                                                       BrokerName := "同步单位数据",
                                                                       ExecutionStatus := "InOperation",
                                                                       IsSuccess   := true,
                                                                       ExecuteUser := executionUser
                                                                      );
                                            
    try {
      traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, gmuommp ) {
        unitOfMeasure_MP := select( macroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = gmuommp.Name() );
        if ( isnull( unitOfMeasure_MP ) ) {
          unitOfMeasure_MP := UnitOfMeasure_MP::Create( macroPlan, gmuommp.Name(), false, false );
        }
        if ( gmuommp.IsDefault() ) {
          unitOfMeasure_MP.SetAsDefault();
        }
      }
      macroPlan.DoASyncMappingUnitOfMeasureData(globalOTDTable);
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
    } onerror {
      global_BrokerExecuteLog.IsSuccess( false );
      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
    }
  *]
}
_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
@@ -32,16 +32,16 @@
    //if( isnull( account ) ) {
    //    error( "account not found" );  
    //}
    result := InventoryValueAndCost::FindById( macroPlan, stockingPointId,productId,start,id );
    result := InventoryValueAndCost::FindById( macroPlan, stockingPointId, productId, start, id );
    if( not isnull( product) and not isnull( stockingPoint) and not isnull( account)){
      if( isnull( result ) ) {
        result := InventoryValueAndCost::Create( id, product, stockingPoint, account, costDriver, start, cost, true ).astype( InventoryValueAndCost );
      } else if( result.ProductID() <> productId ) {
        info( "cannot change product of inventory value and cost" )
      } 
    //  else {
    //    result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
    //  }
      else {
        result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
      }
    }
    
    return result;
_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
@@ -12,6 +12,9 @@
  [*
    // yypsybs Aug-16-2023 (created)
    value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ProductID()=productId and item.StockingPointID() = stockPointId and item.Start() = start );
    if( isnull( value ) ){
      value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ID() = id );
      }
    return value;
  *]
}
_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreasteFromMapping (
  const GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    // Administrator Oct-31-2023 (created)
    updates := construct( Lanes );
    traverse( globalOTDTable, Global_MappingLane, gl, true )
    {
      id := gl.ID();
      unitid := gl.UnitID();
      name := gl.Name();
      userleadtime := gl.UserLeadTime();
      processingtime := Duration::Zero();
      unitofmeasurename := "PCS";
      currencyid := "CNY";
      startdate := Date::Date( 1900, 1, 1 );
      enddate := Date::Date( 9999, 12, 31 );
      capacitytype := "Transport quantity";
      if( userleadtime.Length() = 0 )
      {
        processingtime := Duration::Zero();
        }
      else
      {
        processingtime := Duration::Hours( [Number]userleadtime );
        };
      unit := Unit::FindById( macroPlan, unitid );
      if( isnull( unit)){
        unit :=macroPlan.Unit( relnew,
                               ID := unitid,
                               Name := unitid,
                               UnitOfMeasureName := unitofmeasurename,
                               CurrencyID := currencyid,
                               StartDate := startdate,
                               EndDate := enddate,
                               CapacityType := capacitytype );
      }
      a := Lane::CreateLane( macroPlan, unit, id, name, processingtime);
      updates.Add( a );
      }
    origindataset := selectset( macroPlan, Unit.Lane, l, true );
    obsoletes := origindataset.Difference( updates );
    // delete obsoleted
    difflength := obsoletes.Size();
    for( j:=0; j<difflength; j++ )
    {
      obsolete := obsoletes.Element( j );
      obsolete.Delete();
      }
  *]
}
_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateLane (
  MacroPlan mp,
  Unit unit,
  String id,
  String name,
@@ -19,7 +20,7 @@
    isfromdb := true;
    
    //create new stockingpoint
    result := Lane::FindLaneTypeIndex( id );
    result := Lane::FindById( mp, id );
    
    if( isnull( result ) )
    {
_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
@@ -40,7 +40,7 @@
                   EndDate := enddate );
    }
    
    result := Lane::CreateLane( unit, id, name, processingtime);
    result := Lane::CreateLane( macroplan, unit, id, name, processingtime);
    
    return result;
  *]
_Main/BL/Type_Lane/StaticMethod_FindById.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindById (
  MacroPlan mp,
  String id
) as Lane
{
  TextBody:
  [*
    // yypsybs Aug-14-2023 (created)
    result := select( mp, Unit.Lane, lane, true, lane.ID() = id );
    return result;
  *]
}
_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindByIdAndUnit (
  Unit unit,
  String id
) as Lane
{
  TextBody:
  [*
    // yypsybs Aug-14-2023 (created)
    result := select(  unit, Lane, item, true, item.ID() = id );
    return result;
  *]
}
_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateFromMapping (
  const GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    // Administrator Oct-31-2023 (created)
    updates := construct( LaneLegs );
    traverse( globalOTDTable, Global_MappingLaneLeg, gll, true )
    {
      processingtime := Duration::Zero();
      hasprocessingtime := true;
      userleadtime := gll.UserLeadTime();
      if( userleadtime.Length() = 0 )
      {
        hasprocessingtime := false;
        processingtime := Duration::Zero();
        }
      else
      {
        hasprocessingtime := true;
        processingtime := Duration::Hours( [Number]userleadtime );
        };
      lane := Lane::FindById( macroPlan, gll.LaneID() );
      a := LaneLeg::CreateLaneleg( macroPlan, lane, gll.LaneID(), gll.OriginStockingPointID(), gll.DestinationStockingPointID(), gll.Name(), hasprocessingtime, processingtime);
      updates.Add( a );
      }
    origindataset := selectset( macroPlan, Unit.Lane.LaneLeg, ll, true );
    obsoletes := origindataset.Difference( updates );
    // delete obsoleted
    difflength := obsoletes.Size();
    for( j:=0; j<difflength; j++ )
    {
      obsolete := obsoletes.Element( j );
      obsolete.Delete();
      }
  *]
}
_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateLaneLegFromJson (
  MacroPlan mp,
  JSON datarow
) as LaneLeg
{
@@ -29,7 +30,7 @@
    
    lane := Lane::FindLaneTypeIndex( laneid );
    
    result := LaneLeg::CreateLaneleg(lane, laneid, originstockingpointid, destinationstockingpointid, name, hasprocessingtime, processingtime);
    result := LaneLeg::CreateLaneleg( mp, lane, laneid, originstockingpointid, destinationstockingpointid, name, hasprocessingtime, processingtime);
    
    return result;
  *]
_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateLaneleg (
  MacroPlan mp,
  Lane lane,
  String laneid,
  String originstockingpointid,
@@ -25,16 +26,16 @@
    isfromdb := true;
    
    //create new stockingpoint
    originstockingpoint := StockingPoint_MP::FindStockingPointTypeIndex( originstockingpointid );
    originstockingpoint := StockingPoint_MP::FindById( mp, originstockingpointid );
    lane.AddStockingPoint( originstockingpoint, true, isfromdb );
    Transaction::Transaction().Propagate();
    
    destinationstockingpoint := StockingPoint_MP::FindStockingPointTypeIndex( destinationstockingpointid );
    destinationstockingpoint := StockingPoint_MP::FindById( mp, destinationstockingpointid );
    lane.AddStockingPoint( destinationstockingpoint, false, isfromdb );
    
    Transaction::Transaction().Propagate();
    
    result := LaneLeg::FindLaneLegTypeIndex( laneid, originstockingpointid, destinationstockingpointid );
    result := LaneLeg::FindByIdAndLane( lane, originstockingpointid, destinationstockingpointid );
    
    if( isnull( result ) )
    {
_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindByIdAndLane (
  Lane lane,
  String originstockingpointid,
  String destinationstockingpointid
) as LaneLeg
{
  TextBody:
  [*
    // yypsybs Aug-14-2023 (created)
    result := select(  lane, LaneLeg, item, true, item.OriginStockingPointID() = originstockingpointid and item.DestinationStockingPointID() = destinationstockingpointid );
    return result;
  *]
}
_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
Method ApiCurencyRatesData (
  MacroPlan mp,
  JSON data
)
{
@@ -14,7 +15,7 @@
    for( i:=0; i<data_length; i++ )
    {
      datarow := data.Get( i );
      a := CurrencyRate_MP::CreateCurrencyRateFromJson( datarow );
      a := CurrencyRate_MP::CreateCurrencyRateFromJson( mp, datarow );
      updates.Add( a );
      }
    origindataset := selectset( this, Currency_MP.CurrencyRate_MP, cr, true );
_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl
@@ -1,6 +1,7 @@
Quintiq file version 2.0
#parent: #root
Method ApiLaneLegsData (
  MacroPlan mp,
  JSON data
)
{
@@ -14,7 +15,7 @@
    for( i:=0; i<data_length; i++ )
    {
      datarow := data.Get( i );
      a := LaneLeg::CreateLaneLegFromJson( datarow );
      a := LaneLeg::CreateLaneLegFromJson( mp, datarow );
      updates.Add( a );
      }
    origindataset := selectset( this, Unit.Lane.LaneLeg, ll, true );
_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
@@ -22,7 +22,7 @@
                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
    }
    queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
    queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
    //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.StockingPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) );
    
    totalcount := listToDeal.Size();
_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
@@ -11,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() );
    //queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
    
    listtodeal := construct( Global_MappingInventorySupplys, constcontent );
    if ( businessTypes.Size() > 0 ) {
_Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl
@@ -17,6 +17,8 @@
    info( "Prepare to do sync" )
    info( "Get organ code list" )
    businessTypeName := businessType.BusinessTypeName().Tokenize( "," );
    macroPlan.BusinessType( businessType.BusinessTypeName() );
    organcodelist := selectvalues( businessType, OrganCode, organ, true, organ.OrganCodeName() );
    
    if( organcodelist.Size() = 0 ){
@@ -44,34 +46,23 @@
    macroPlan.DoASyncMappingUnitData( businessTypeName ,globalOTDTable, organcodelist);
    
    // åº“存点-3
    info( "Sales Segment Finished, Start Get StockingPoint From Api" )
    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
    postrequestbody := parameter.PostRequestBody();
    address := parameter.Address();
    url := parameter.AttributeValue();
    port := [Number]parameter.Port();
    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    macroPlan.ApiStockingPointData( data );
    info( "Sales Segment Finished, Start Get StockingPoint From Mapping" )
    StockingPoint_MP::CreateFromMapping( globalOTDTable, macroPlan );
    //parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
    //postrequestbody := parameter.PostRequestBody();
    //address := parameter.Address();
    //url := parameter.AttributeValue();
    //port := [Number]parameter.Port();
    //data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    //macroPlan.ApiStockingPointData( data );
    
    // è´§å¸ä¿¡æ¯-4
    info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Api" )
    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
    postrequestbody := parameter.PostRequestBody();
    address := parameter.Address();
    url := parameter.AttributeValue();
    port := [Number]parameter.Port();
    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    macroPlan.ApiCurenciesData( data );
    info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Mapping" )
    Currency_MP::CreateFromMapping( globalOTDTable, macroPlan );
    
    //货币汇率信息-5
    info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Api" )
    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
    postrequestbody := parameter.PostRequestBody();
    address := parameter.Address();
    url := parameter.AttributeValue();
    port := [Number]parameter.Port();
    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    macroPlan.ApiCurencyRatesData( data );
    info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Mapping" )
    CurrencyRate_MP::CreateFromMapping( globalOTDTable, macroPlan );
    
    // äº§å“ç‰©æ–™-6
    //info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
@@ -92,24 +83,12 @@
    macroPlan.DoASyncMappingOperationBOMData( businessTypeName, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
    
    //车道信息-10
    info( "BOM Finished, Start Get Lanes From Api" );
    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "Lanes" );
    postrequestbody := parameter.PostRequestBody();
    address := parameter.Address();
    url := parameter.AttributeValue();
    port := [Number]parameter.Port();
    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    macroPlan.ApiLanesData( data );
    info( "BOM Finished, Start Get Lanes From Mapping" );
    Lane::CreasteFromMapping( globalOTDTable, macroPlan );
    
    //车道运输段-11
    info( "Get Lanes From Api Finished, Start Get LaneLegs From Api" );
    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
    postrequestbody := parameter.PostRequestBody();
    address := parameter.Address();
    url := parameter.AttributeValue();
    port := [Number]parameter.Port();
    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    macroPlan.ApiLaneLegsData( data );
    info( "Get Lanes From Api Finished, Start Get LaneLegs From Mapping" );
    LaneLeg::CreateFromMapping( globalOTDTable, macroPlan );
    
    // ä¾›åº”网络(车道)-12
    //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -71,7 +71,7 @@
    url := "/otdService/https/GetCurrencyRatesInfo";
    port := 443;
    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    macroPlan.ApiCurencyRatesData( data );
    macroPlan.ApiCurencyRatesData( macroPlan, data );
    
    // äº§å“ç‰©æ–™-6
    //info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
@@ -109,7 +109,7 @@
    url := "/otdService/https/GetLaneLegsInfo";
    port := 443;
    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
    macroPlan.ApiLaneLegsData( data );
    macroPlan.ApiLaneLegsData( macroPlan, data );
    
    // ä¾›åº”网络(车道)-12
    //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[414702.1.294748144][414702.1.294748143][414702.1.294748145]'
  ValueType: Real
}
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute SalesDemandBaseID
{
  #keys: '3[414702.1.294144484][414702.1.294144483][414702.1.294144485]'
  ValueType: String
}
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StartDate
{
  #keys: '3[414702.1.294179414][414702.1.294179413][414702.1.294179415]'
  ValueType: Date
}
_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414702.1.294179270][414702.1.294179269][414702.1.294179271]'
  ValueType: String
}
_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type PeggingProductInSalesDemandBase
{
  #keys: '5[414702.1.290710055][414702.1.290710053][0.0.0][414702.1.290710054][414702.1.290710056]'
  BaseType: Object
  StructuredName: 'PeggingProductInSalesDemandBases'
}
_Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[414702.1.290710074][414702.1.290710073][414702.1.290710075]'
  ValueType: String
}
_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  GlobalOTDSOP globalOTDSOP,
  Product_MPs product_MPs
)
{
  TextBody:
  [*
    globalOTDSOP.PeggingProduct_MP( relflush );
    product_MPs := selectset( product_MPs, Elements, tempPMP, tempPMP.IsLeaf() );
    traverse ( product_MPs, Elements, pmp ) {
      targetPeggingProduct_MP := globalOTDSOP.PeggingProduct_MP( relnew, ProductID := pmp.ID() );
      traverse ( pmp, SalesDemand, sd ) {
        targetPeggingProduct_MP.PeggingProductInSalesDemandBase( relnew,
                                                                 StockingPointID   := sd.StockingPointID(),
                                                                 SalesDemandBaseID := sd.ID(),
                                                                 Quantity          := sd.Quantity(),
                                                                 StartDate         := sd.StartDate() );
      }
    }
  *]
}
_Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type PeggingProduct_MP
{
  #keys: '5[414702.1.290710035][414702.1.290710033][0.0.0][414702.1.290710034][414702.1.290710036]'
  BaseType: Object
  StructuredName: 'PeggingProduct_MPs'
}
_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ActualFulfillmentQuantity
{
  #keys: '3[414702.1.314092328][414702.1.314092327][414702.1.314092329]'
  Description: '实际交付的数量'
  ValueType: Real
}
_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute FulfillmentQuantity
{
  #keys: '3[414702.1.294201083][414702.1.294201082][414702.1.294201084]'
  Description: '订单所需要的数量'
  ValueType: Real
}
_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute NumberOfPlies
{
  #keys: '3[414702.1.294145595][414702.1.294145594][414702.1.294145596]'
  ValueType: Number
}
_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[414702.1.294201096][414702.1.294201095][414702.1.294201097]'
  ValueType: String
}
_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StartDate
{
  #keys: '3[414702.1.294201063][414702.1.294201062][414702.1.294201064]'
  ValueType: Date
}
_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414702.1.294201106][414702.1.294201105][414702.1.294201107]'
  ValueType: String
}
_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute SupplyQuantity
{
  #keys: '3[414702.1.294201073][414702.1.294201072][414702.1.294201074]'
  ValueType: Real
}
_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute SupplyType
{
  #keys: '3[414702.1.294201053][414702.1.294201052][414702.1.294201054]'
  ValueType: String
}
_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute UnitOfMeasurementName
{
  #keys: '3[414702.1.294852022][414702.1.294852021][414702.1.294852023]'
  ValueType: String
}
_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
  String productID,
  String stockingPointID,
  Date startDate,
  Real supplyQuantity,
  Real actualFulfillmentQuantity,
  Real fulfillmentQuantity,
  String supplyType,
  Number numberOfPlies,
  String unitOfMeasurementName
) as PeggingResult
{
  TextBody:
  [*
    peggingResult := peggingProductInSalesDemandBase.PeggingResult( relnew,
                                                                    ProductID                 := productID,
                                                                    StockingPointID           := stockingPointID,
                                                                    StartDate                 := startDate,
                                                                    SupplyQuantity            := supplyQuantity,
                                                                    ActualFulfillmentQuantity := actualFulfillmentQuantity,
                                                                    FulfillmentQuantity       := fulfillmentQuantity,
                                                                    SupplyType                := supplyType,
                                                                    NumberOfPlies             := numberOfPlies,
                                                                    UnitOfMeasurementName     := unitOfMeasurementName
                                                                   );
    return peggingResult;
  *]
}
_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateAllChildRelation (
  PeggingProductInSalesDemandBase ppisdb
)
{
  TextBody:
  [*
    targetPeggingResults := selectset( ppisdb, PeggingResult, tempPR, tempPR.NumberOfPlies() = 0 );
    traverse ( targetPeggingResults, Elements, pr ) {
      parentPeggingResult := pr;
      childPeggingResult  := pr;
      PeggingResult::SetAllChildRelation( ppisdb, parentPeggingResult, childPeggingResult );
    }
  *]
}
_Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateAllGroupChildRelation (
  PeggingProductInSalesDemandBase ppisdb
)
{
}
_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateData (
  PeggingProductInSalesDemandBases peggingProductInSalesDemandBases,
  const MacroPlan macroPlan
)
{
  TextBody:
  [*
    traverse ( peggingProductInSalesDemandBases, Elements, ppisdb ) {
      ppisdb.PeggingResult( relflush );
      targetSalesDemand := select( macroPlan, SalesDemand, tempSD, tempSD.ID() = ppisdb.SalesDemandBaseID() );
      traverse ( targetSalesDemand, SalesDemandInPeriod.Fulfillment, f ) {
        smp                 := f.Supply_MP();
        fulfillmentQuantity := f.Quantity();
        PeggingResult::GeneratePeggingResult( ppisdb,
                                              0,
                                              smp,
                                              fulfillmentQuantity,
                                              fulfillmentQuantity,
                                              null( PeggingResult ) );
      }
      PeggingResult::CreateAllChildRelation( ppisdb );
      PeggingResult::CreateAllGroupChildRelation( ppisdb );
    }
  *]
}
_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateInventorySupply (
  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
  Number numberOfPlies,
  const InventorySupply is,
  Real actualFulfillmentQuantity,
  Real fulfillmentQuantity,
  PeggingResult parentPeggingResult
)
{
  TextBody:
  [*
    //info( "供应类型(InventorySupply)    ", "供应时间:", is.Date().Format( "Y-M2-D2" ), "    ä¾›åº”量:", is.Quantity(),
    //      "    å®žé™…用量:", fulfillmentQuantity, "    ", is.ProductInStockingPoint_MP().Name() );
    pisp := is.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
    childPeggingResult := PeggingResult::Create( peggingProductInSalesDemandBase,
                                                 pisp.ProductID(),
                                                 pisp.StockingPointID(),
                                                 is.Date(),
                                                 is.Quantity(),
                                                 actualFulfillmentQuantity,
                                                 fulfillmentQuantity,
                                                 "库存供应",
                                                 numberOfPlies,
                                                 pisp.UnitOfMeasureName()
                                                );
    PeggingResult::SetParentChildRelationship( parentPeggingResult, childPeggingResult );
  *]
}
_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateNewSupply (
  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
  Number numberOfPlies,
  const NewSupply ns,
  Real actualFulfillmentQuantity,
  Real fulfillmentQuantity,
  PeggingResult parentPeggingResult
)
{
  TextBody:
  [*
    //info( "供应类型(NewSupply)", "    ä¾›åº”量:", ns.Quantity(), "    æ»¡è¶³ï¼š", fulfillmentQuantity );
    pisp := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
    childPeggingResult := PeggingResult::Create( peggingProductInSalesDemandBase,
                                                 pisp.ProductID(),
                                                 pisp.StockingPointID(),
                                                 ns.Start().Date(),
                                                 ns.Quantity(),
                                                 actualFulfillmentQuantity,
                                                 fulfillmentQuantity,
                                                 "",
                                                 numberOfPlies,
                                                 pisp.UnitOfMeasureName() );
    PeggingResult::SetParentChildRelationship( parentPeggingResult, childPeggingResult );
    ontype ( ns.PeriodTask_MP() ) {
      PeriodTaskOperation as pto : {
        childPeggingResult.SupplyType( "产线供应" );
    //    info( "操作周期任务    ", "供应时间:", ns.Start().Format( "Y-M2-D2" ), "    å‘¨æœŸä»»åŠ¡KEY:", pto.Key(), "    ",
    //          ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
        traverse ( pto, DependentDemand, dd, dd.Quantity() > 0 ) {
          traverse ( dd, Fulfillment, f ) {
            actualFulfillmentQuantity := f.Quantity();
            smp1 := f.Supply_MP();
            numberOfPlies++;
            fulfillmentQuantity := ( dd.Quantity() / ns.Quantity() ) * fulfillmentQuantity;
    //        info( "--------------------------------------------------------------" );
            PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, fulfillmentQuantity, childPeggingResult );
            numberOfPlies--;
          }
        }
      }
      PeriodTaskLaneLeg as ptll : {
        childPeggingResult.SupplyType( "车道供应" );
        targetDependentDemand := select( ptll, DependentDemand, dd,
                                         dd.ProcessInput().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and
                                         dd.Quantity() = ns.Quantity() );
    //    info( "车道周期任务    ", "供应时间:", ns.Start().Format( "Y-M2-D2" ), "    å‘¨æœŸä»»åŠ¡KEY:", ptll.Key(), "    ",
    //          ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
        traverse ( targetDependentDemand, Fulfillment, f ) {
          actualFulfillmentQuantity := f.Quantity();
          smp1 := f.Supply_MP();
          numberOfPlies++;
    //      info( "--------------------------------------------------------------" );
          PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, fulfillmentQuantity, childPeggingResult );
          numberOfPlies--;
        }
      }
    }
  *]
}
_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GeneratePeggingResult (
  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
  Number numberOfPlies,
  const Supply_MP smp,
  Real actualFulfillmentQuantity,
  Real fulfillmentQuantity,
  PeggingResult parentPeggingResult
)
{
  TextBody:
  [*
    //info( "层数:", numberOfPlies );
    ontype ( smp ) {
      NewSupply as ns : {
        PeggingResult::GenerateNewSupply( peggingProductInSalesDemandBase, numberOfPlies, ns, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResult );
      }
      InventorySupply as is : {
        PeggingResult::GenerateInventorySupply( peggingProductInSalesDemandBase, numberOfPlies, is, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResult );
      }
    }
  *]
}
_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SetAllChildRelation (
  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
  PeggingResult parentPeggingResult,
  PeggingResult childPeggingResult
)
{
  TextBody:
  [*
    if ( childPeggingResult.Child( relsize ) = 0 ) {
      childPeggingResult.AllParent( relset, parentPeggingResult );
    }
    traverse ( childPeggingResult, Child, pr ) {
      pr.AllParent( relset, parentPeggingResult );
      PeggingResult::SetAllChildRelation( peggingProductInSalesDemandBase, parentPeggingResult, pr );
    }
  *]
}
_Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
StaticMethod SetParentChildRelationship (
  PeggingResult parentPeggingResult,
  PeggingResult childPeggingResult
)
{
  TextBody:
  [*
    if ( not isnull( parentPeggingResult ) and not isnull( childPeggingResult ) ) {
      childPeggingResult.Parent( relset, parentPeggingResult );
    }
  *]
}
_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type PeggingResult
{
  #keys: '5[414702.1.290710095][414702.1.290710093][0.0.0][414702.1.290710094][414702.1.290710096]'
  BaseType: Object
  StructuredName: 'PeggingResults'
}
_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type PeggingResultGroup
{
  #keys: '5[414702.1.320753704][414702.1.320753702][0.0.0][414702.1.320753703][414702.1.320753705]'
  BaseType: Object
  StructuredName: 'PeggingResultGroups'
}
_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
@@ -15,15 +15,15 @@
    
    // Get product&line
    product :=  Product_MP::FindById( owner, productid );
    line :=  Lane::FindLaneTypeIndex( lineid );
    line :=  Lane::FindById( owner, lineid );
    
    if( not isnull( product) and not isnull( line)){
      productinline := ProductInLane::FindProductInLaneTypeIndex( lineid, productid );
      productinline := ProductInLane::FindById( owner, productid, lineid );
    
      if( isnull( productinline ) ){
      ProductInLane::Create( product, line, isexcluded, isfromdb );
      }else{
       productinline.Update( productid, lineid, isexcluded, isfromdb );
        productinline.Update( lineid, productid, isexcluded, isfromdb );
        }
    }
  *]
_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindById (
  MacroPlan mp,
  String id,
  String laneid
) as ProductInLane
{
  TextBody:
  [*
    // yy 2023-11-01
    result := select( mp, Product_MP.ProductInLane, pil, true, pil.ProductID() = id and pil.LaneID() = laneid );
    return result;
  *]
}
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateFromMapping (
  const GlobalOTDTable globalOTDTable,
  MacroPlan macroPlan
)
{
  Description: '从mapping表创建库存点'
  TextBody:
  [*
    // Administrator Oct-31-2023 (created)
    updates := construct( StockingPoint_MPs );
    traverse( globalOTDTable, Global_MappingStockingPoint_MP, sp, true )
    {
      a := StockingPoint_MP::CreateStockingpoint( macroPlan, sp.ID(), sp.UnitID(), sp.Name() );
      updates.Add( a );
      }
    origindataset := selectset( macroPlan, StockingPoint_MP, sp, true );
    obsoletes := origindataset.Difference( updates );
    // delete obsoleted
    difflength := obsoletes.Size();
    for( j:=0; j<difflength; j++ )
    {
      obsolete := obsoletes.Element( j );
      obsolete.Delete();
      }
  *]
}
_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
@@ -22,7 +22,7 @@
    isfromdb := true;
    
    //create new stockingpoint
    result := StockingPoint_MP::FindStockingPointTypeIndex( id );
    result := StockingPoint_MP::FindById( mp, id );
    
    if( isnull( result ) )
    {
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -145,6 +145,8 @@
        Component ComponentMenu666 { #keys: '[414702.0.265704260]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormBrokerExecuteLog' Text: '' ] }
        Component menuSeparator822 { #keys: '[414702.0.340555024]' BaseType: 'Menu' Properties: [ Separator: true ] }
        Component ComponentMenu783 { #keys: '[414702.0.340555035]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormTestButtonCollection' Text: '' ] }
        Component menuSeparator432 { #keys: '[414702.1.299084028]' BaseType: 'Menu' Properties: [ Separator: true ] }
        Component ComponentMenu420 { #keys: '[414702.1.299224194]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormPeggingResult' Text: '' ] }
      ]
      Properties:
      [
@@ -165,6 +167,8 @@
          c: ComponentMenu666
          c: menuSeparator822
          c: ComponentMenu783
          c: menuSeparator432
          c: ComponentMenu420
        }
      ]
    }
_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
Component ColumnTitles552
{
  #keys: '[414702.1.299084155]'
  BaseType: 'ColumnTitles'
  Children:
  [
    Component popupColumnTitles881
    {
      #keys: '[414702.1.299084158]'
      BaseType: 'popupColumnTitles'
    }
  ]
  Properties:
  [
    ContextMenu: 'popupColumnTitles881'
  ]
}
_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
Quintiq file version 2.0
Component ListPeggingProductInSalesDemandBase
{
  #keys: '[414702.1.299084152]'
  BaseType: 'List'
  Children:
  [
    #child: ColumnTitles552
    Component popupList809
    {
      #keys: '[414702.1.299084184]'
      BaseType: 'popupList'
      Children:
      [
        Component PopupParent
        {
          #keys: '[514.0.129466]'
          BaseType: 'PopupParent'
          IsDerived: true
          Children:
          [
            Component menuSeparator { #keys: '[414702.1.299084264]' BaseType: 'Menu' Properties: [ Separator: true ] }
            Component MenuGeneratePeggingResult { #keys: '[414702.1.299084327]' BaseType: 'Menu' Properties: [ Image: 'BEER_GLASS' Text: 'GeneratePeggingResult' ] }
          ]
          Properties:
          [
            ModeledStringList ChildOrdering
            {
              c: MenuActions
              c: MenuFilter
              c: menuListQuintiqSetQuantor
              c: menuSeparator
              c: MenuGeneratePeggingResult
            }
          ]
        }
      ]
      Properties:
      [
        PosX: 35
        PosY: 60
      ]
    }
    Component GUIDataExtractor968
    {
      #keys: '[414702.1.299084216]'
      BaseType: 'GUIDataExtractor'
      Properties:
      [
        DataSet: 'GlobalOTDSOP'
        DataType: 'GlobalOTDSOP'
        PosX: 5
        PosY: 30
        Transformation: 'PeggingProduct_MP.PeggingProductInSalesDemandBase'
      ]
    }
    Component GUIDataSetLevel641
    {
      #keys: '[414702.1.299084219]'
      BaseType: 'GUIDataSetLevel'
      Properties:
      [
        DataExtractor: 'GUIDataExtractor968'
        PosX: 35
        PosY: 30
      ]
    }
  ]
  Properties:
  [
    AutoDrag: true
    BackgroundColor: 'Window'
    Border: true
    ContextMenu: 'popupList809'
    FullRowSelect: true
    ModeledStringList ChildOrdering
    {
      c: ColumnTitles552
      c: popupList809
      c: GUIDataExtractor968
      c: GUIDataSetLevel641
    }
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_Menu_OnClick
    {
      #keys: '[414702.1.299084225]'
      Initiator: 'Menu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[621.0.8331282]'
          Binding: 'this.Selection()'
        }
      ]
    }
    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_GUIButtonBase_OnClick
    {
      #keys: '[414702.1.299084226]'
      Initiator: 'GUIButtonBase'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[621.0.8331327]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: ListPeggingProductInSalesDemandBase
Response OnClick (
  structured[PeggingProductInSalesDemandBase] selection
) id:Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnClick
{
  #keys: '[414702.1.299224579]'
  Body:
  [*
    PeggingResult::CreateData( selection, MacroPlan );
  *]
  CanBindMultiple: false
  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_Menu_OnClick
  Initiator: 'MenuGeneratePeggingResult'
}
_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
Quintiq file version 2.0
#root
#parent: MacroPlanner
OrphanComponent FormPeggingResult
{
  #keys: '[414702.1.299084054]'
  BaseType: 'Form'
  GBLayout
  {
    Type: 'internal[GBLayoutDefinition]'
    Columns:
    [
      GBFlow.Column { grow: 128 id: 199 parent: 0 }
    ]
    Elements:
    [
      GBElement
      {
        Component => ListPeggingProductInSalesDemandBase
        Position { startcolumn: 199 startrow: 785 endcolumn: 199 endrow: 785 }
      }
    ]
    Gaps: [ left: 0 right: 0 top: 0 bottom: 0 inner: 5 ]
    Rows:
    [
      GBFlow.Row { grow: 128 id: 785 parent: 0 }
    ]
  }
  Children:
  [
    #child: ListPeggingProductInSalesDemandBase
  ]
  Properties:
  [
    Height: 270
    Image: 'FISH_BOWL'
    IncludeInView: true
    Title: 'PeggingResult'
    Width: 494
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
@@ -49,7 +49,7 @@
        Title: '面板拉料_集团操作'
      ]
    }
    Component mn224
    Component mn222
    {
      #keys: '[414702.1.5593849]'
      BaseType: 'WebMenu'
@@ -81,6 +81,28 @@
        Title: '数据分发'
      ]
    }
    Component mn666
    {
      #keys: '[414702.1.293023106]'
      BaseType: 'WebMenu'
      Properties:
      [
        Separator: true
        Taborder: 7
      ]
    }
    Component mnPeggingAnalyse
    {
      #keys: '[414702.1.293023171]'
      BaseType: 'WebMenu'
      Properties:
      [
        Description: 'Pegging分析'
        Image: 'COCKTAIL'
        Taborder: 8
        Title: 'Pegging分析'
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: cmTestAttempt/mnPeggingAnalyse
Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick
{
  #keys: '[414702.1.294401302]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "Pegging分析", true );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
@@ -5,11 +5,15 @@
  #keys: '[414702.0.391791234]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( GlobalOTDSOP );
  *]
  QuillAction
  {
    Body:
    [*
      Application.Download( "产能分配结果.xlsx", CapacityAllocationResults::Export( GlobalOTDTable ).AsBinaryData() );
      Application.Download( "产能分配结果.xlsx", CapacityAllocationResults::Export( GlobalOTDSOP ).AsBinaryData() );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
@@ -23,6 +23,16 @@
        Taborder: 0
      ]
    }
    Component DataHolderInterfaceTest
    {
      #keys: '[414502.0.443241895]'
      BaseType: 'WebDataHolder'
      Databinding: 'Scenario'
      Properties:
      [
        Taborder: 7
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
Quintiq file version 2.0
Component ListPeggingAllResult
{
  #keys: '[414702.1.306657922]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorPeggingAllResult
    {
      #keys: '[414702.1.306657923]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'PeggingResult'
        ExtractionMode: 'Selected'
        Source: 'FormPeggingResult.ListPeggingResult'
        Taborder: 0
        Transformation: 'AllChild'
      ]
    }
    #child: listActionBarPagePeggingAllResult
    Component DataSetLevelPeggingAllResult
    {
      #keys: '[414702.1.306657928]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuPeggingAllResult
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PeggingProductInSalesDemandBase.SalesDemandBaseID","title":"订单ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PeggingProductInSalesDemandBase.SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"产品ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"库存点ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"开始时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyQuantity","title":"供应数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfillmentQuantity","title":"实际需要数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyType","title":"供应类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasurementName","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasurementName"}}]'
        ContextMenu: 'listContextMenuPeggingAllResult'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingAllResult_WebMenu_OnClick
    {
      #keys: '[414702.1.305581888]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[639.0.20605876]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPagePeggingAllResult
{
  #keys: '[414702.1.306657925]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component listContextMenuPeggingAllResult
{
  #keys: '[414702.1.306657930]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuSelectAll
    {
      #keys: '[414702.1.305511008]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DOCUMENT_SELECTION'
        Shortcut: 'Ctrl+A'
        Taborder: 3
        Title: '全选'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListPeggingAllResult
Response OnClick () id:Response_ListPeggingAllResult_MenuSelectAll_OnClick
{
  #keys: '[414702.1.306792785]'
  CanBindMultiple: false
  DefinitionID => /ListPeggingAllResult/Responsedef_ListPeggingAllResult_WebMenu_OnClick
  Initiator: 'MenuSelectAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormPeggingAllResult
{
  #keys: '[414702.1.305404879]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListPeggingAllResult
  ]
  Properties:
  [
    Image: 'DIAMOND'
    Title: 'Pegging所有子结果'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
Quintiq file version 2.0
Component ListPeggingProductInSalesDemandBase
{
  #keys: '[414702.1.294477745]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorPeggingProductInSalesDemandBase
    {
      #keys: '[414702.1.294477746]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'PeggingProduct_MP'
        ExtractionMode: 'Selected'
        Source: 'FormPeggingProduct_MP.ListPeggingProduct_MP'
        Taborder: 0
        Transformation: 'PeggingProductInSalesDemandBase'
      ]
    }
    #child: listActionBarPagePeggingProductInSalesDemandBase
    Component DataSetLevelPeggingProductInSalesDemandBase
    {
      #keys: '[414702.1.294477751]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuPeggingProductInSalesDemandBase
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesDemandBaseID","title":"订单ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"库存点ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"开始时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}}]'
        ContextMenu: 'listContextMenuPeggingProductInSalesDemandBase'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
    {
      #keys: '[414702.1.298881590]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[619.0.10848847]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPagePeggingProductInSalesDemandBase
{
  #keys: '[414702.1.294477748]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
Component listContextMenuPeggingProductInSalesDemandBase
{
  #keys: '[414702.1.294477753]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component mGeneratePeggingResult
    {
      #keys: '[414702.1.298700850]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'PUMPKIN_HALLOWEEN'
        Taborder: 3
        Title: '生成Pegging结果'
      ]
    }
    Component MenuSelectionAll
    {
      #keys: '[414702.1.300701803]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'SELECTION'
        Shortcut: 'Ctrl+A'
        Taborder: 4
        Title: '全选'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListPeggingProductInSalesDemandBase
Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick
{
  #keys: '[414702.1.300762760]'
  CanBindMultiple: false
  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
  Initiator: 'MenuSelectionAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: ListPeggingProductInSalesDemandBase
Response OnClick (
  structured[PeggingProductInSalesDemandBase] selection
) id:Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick
{
  #keys: '[414702.1.298700997]'
  CanBindMultiple: false
  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
  Initiator: 'mGeneratePeggingResult'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      PeggingResult::CreateData( selection, MacroPlan );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormPeggingProductInSalesDemandBase
{
  #keys: '[414702.1.291680100]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListPeggingProductInSalesDemandBase
  ]
  Properties:
  [
    Image: 'BANANA'
    Title: 'Pegging产品的订单'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
Quintiq file version 2.0
Component ListPeggingProduct_MP
{
  #keys: '[414702.1.291408736]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorPeggingProduct_MP
    {
      #keys: '[414702.1.291408737]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'GlobalOTDSOP'
        Source: 'GlobalOTDSOP'
        Taborder: 0
        Transformation: 'PeggingProduct_MP'
      ]
    }
    #child: listActionBarPagePeggingProduct_MP
    Component DataSetLevelPeggingProduct_MP
    {
      #keys: '[414702.1.291408742]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuPeggingProduct_MP
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"产品ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"库存点ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}}]'
        ContextMenu: 'listContextMenuPeggingProduct_MP'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProduct_MP_WebMenu_OnClick
    {
      #keys: '[414702.1.309521164]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[645.0.18569723]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPagePeggingProduct_MP
{
  #keys: '[414702.1.291408739]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component listContextMenuPeggingProduct_MP
{
  #keys: '[414702.1.291408744]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuSelectionAll
    {
      #keys: '[414702.1.308101396]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'SELECTION'
        Shortcut: 'Ctrl+A'
        Taborder: 3
        Title: '全选'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
Quintiq file version 2.0
Component pButton
{
  #keys: '[414702.1.288412503]'
  BaseType: 'WebPanel'
  Children:
  [
    Component bCreate
    {
      #keys: '[414702.1.288443069]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'BOMB'
        Label: '创建Pegging产品'
        Taborder: 1
      ]
    }
    Component bRunPeggingAlgorithm
    {
      #keys: '[414702.1.302382530]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'TREE'
        Label: '运行Pegging算法'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListPeggingProduct_MP
Response OnClick () id:Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick
{
  #keys: '[414702.1.309596514]'
  CanBindMultiple: false
  DefinitionID => /ListPeggingProduct_MP/Responsedef_ListPeggingProduct_MP_WebMenu_OnClick
  Initiator: 'MenuSelectionAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: pButton/bCreate
Response OnClick () id:Response_pButton_bCreate_OnClick
{
  #keys: '[414702.1.288443717]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( GlobalOTDSOP ) and not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      form := construct( FormNavigationPanel );
      form.ShowDockLeft();
      PeggingProduct_MP::Create( GlobalOTDSOP, DataHolderCheckedProduct.Data() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: pButton/bRunPeggingAlgorithm
Response OnClick () id:Response_pButton_bRunPeggingAlgorithm_OnClick
{
  #keys: '[414702.1.304801095]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      MacroPlan.RunPeggingAlgorithm();
      WebMessageBox::Success( "运行成功!", true );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormPeggingProduct_MP
{
  #keys: '[414702.1.290901529]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListPeggingProduct_MP
    #child: pButton
  ]
  Properties:
  [
    Image: 'ORANGE'
    Title: 'Pegging产品分析'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
Quintiq file version 2.0
Component ListPeggingResult
{
  #keys: '[414702.1.296178342]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorPeggingResult
    {
      #keys: '[414702.1.296178343]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'PeggingProductInSalesDemandBase'
        ExtractionMode: 'Selected'
        FixedFilter: 'object.NumberOfPlies() = 0'
        Source: 'FormPeggingProductInSalesDemandBase.ListPeggingProductInSalesDemandBase'
        Taborder: 0
        Transformation: 'PeggingResult'
      ]
    }
    #child: listActionBarPagePeggingResult
    Component DataSetLevelPeggingResult
    {
      #keys: '[414702.1.296178348]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuPeggingResult
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PeggingProductInSalesDemandBase.SalesDemandBaseID","title":"订单ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PeggingProductInSalesDemandBase.SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"产品ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"库存点ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"开始时间","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyQuantity","title":"供应数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ActualFulfillmentQuantity","title":"实际需要数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ActualFulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfillmentQuantity","title":"订单需要数量","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyType","title":"供应类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasurementName","title":"单位","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasurementName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfPlies","title":"层数","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfPlies"}}]'
        ContextMenu: 'listContextMenuPeggingResult'
        RelationFromParent: 'Child'
        RelationRepeating: 'Child'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingResult_WebMenu_OnClick
    {
      #keys: '[414702.1.302148620]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[627.0.29218476]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPagePeggingResult
{
  #keys: '[414702.1.296178345]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component listContextMenuPeggingResult
{
  #keys: '[414702.1.296178350]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuSelectionAll
    {
      #keys: '[414702.1.302117859]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'SELECTION'
        Shortcut: 'Ctrl+A'
        Taborder: 3
        Title: '全选'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ListPeggingResult
Response OnClick () id:Response_ListPeggingResult_MenuSelectionAll_OnClick
{
  #keys: '[414702.1.302148638]'
  CanBindMultiple: false
  DefinitionID => /ListPeggingResult/Responsedef_ListPeggingResult_WebMenu_OnClick
  Initiator: 'MenuSelectionAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormPeggingResult
{
  #keys: '[414702.1.295031324]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListPeggingResult
  ]
  Properties:
  [
    Image: 'CUP'
    Title: 'Pegging结果'
  ]
}
_Main/UI/MacroPlannerWebApp/Views/Pegging·ÖÎö.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,332 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormPeggingProduct_MP
      {
        title: 'QTIANMA_JITUAN::FormPeggingProduct_MP'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormPeggingProduct_MP'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 7
          columnPosition: 1
          columnSpan: 3
        }
        components
        {
          FormPeggingProduct_MP_pButton
          {
            sizeRatio: 1
          }
          FormPeggingProduct_MP_ListPeggingProduct_MP
          {
          }
          FormPeggingProduct_MP_DataSetLevelPeggingProduct_MP
          {
            groupDepth: -1
            column_ProductID
            {
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
          }
        }
      }
      form_FormPeggingProductInSalesDemandBase_1
      {
        title: 'QTIANMA_JITUAN::FormPeggingProductInSalesDemandBase'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormPeggingProductInSalesDemandBase'
        layout
        {
          mode: 'open'
          rowPosition: 8
          rowSpan: 6
          columnPosition: 1
          columnSpan: 3
        }
        components
        {
          FormPeggingProductInSalesDemandBase_ListPeggingProductInSalesDemandBase
          {
          }
          FormPeggingProductInSalesDemandBase_DataSetLevelPeggingProductInSalesDemandBase
          {
            groupDepth: -1
            sort: 'StartDate'
            column_SalesDemandBaseID
            {
              columnId: 'SalesDemandBaseID'
              dataPath: 'SalesDemandBaseID'
              dataType: 'string'
              index: 0
              subtotals: 'count'
              width: 61
            }
            column_StockingPointID
            {
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 95
            }
            column_Quantity
            {
              columnId: 'Quantity'
              dataPath: 'Quantity'
              dataType: 'real'
              index: 2
              subtotals: ''
              width: 51
            }
            column_StartDate
            {
              columnId: 'StartDate'
              dataPath: 'StartDate'
              dataType: 'date'
              index: 3
              subtotals: ''
              width: 76
            }
          }
        }
      }
      form_FormPeggingResult
      {
        title: 'QTIANMA_JITUAN::FormPeggingResult'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormPeggingResult'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 13
          columnPosition: 4
          columnSpan: 9
        }
        components
        {
          FormPeggingResult_ListPeggingResult
          {
          }
          FormPeggingResult_DataSetLevelPeggingResult
          {
            groupDepth: -1
            sort: 'ProductID'
            column_PeggingProductInSalesDemandBase_SalesDemandBaseID
            {
              columnId: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
              dataPath: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
              dataType: 'string'
              index: 0
              subtotals: 'count'
              width: 122
            }
            column_ProductID
            {
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 164
            }
            column_StockingPointID
            {
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 92
            }
            column_StartDate
            {
              columnId: 'StartDate'
              dataPath: 'StartDate'
              dataType: 'date'
              index: 3
              subtotals: ''
              width: 82
            }
            column_SupplyQuantity
            {
              columnId: 'SupplyQuantity'
              dataPath: 'SupplyQuantity'
              dataType: 'real'
              index: 4
              subtotals: ''
              width: 86
            }
            column_ActualFulfillmentQuantity
            {
              columnId: 'ActualFulfillmentQuantity'
              dataPath: 'ActualFulfillmentQuantity'
              dataType: 'real'
              index: 5
              subtotals: ''
              width: 97
            }
            column_FulfillmentQuantity
            {
              columnId: 'FulfillmentQuantity'
              dataPath: 'FulfillmentQuantity'
              dataType: 'real'
              index: 6
              subtotals: ''
              width: 108
            }
            column_SupplyType
            {
              columnId: 'SupplyType'
              dataPath: 'SupplyType'
              dataType: 'string'
              index: 7
              subtotals: ''
              width: 78
            }
            column_UnitOfMeasurementName
            {
              columnId: 'UnitOfMeasurementName'
              dataPath: 'UnitOfMeasurementName'
              dataType: 'string'
              index: 8
              subtotals: ''
              width: 50
            }
            column_NumberOfPlies
            {
              columnId: 'NumberOfPlies'
              dataPath: 'NumberOfPlies'
              dataType: 'number'
              index: 9
              subtotals: ''
              width: 56
            }
          }
        }
      }
      form_FormPeggingAllResult
      {
        title: 'QTIANMA_JITUAN::FormPeggingAllResult'
        shown: true
        componentID: 'QTIANMA_JITUAN::FormPeggingAllResult'
        layout
        {
          mode: 'open'
          rowPosition: 14
          rowSpan: 12
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormPeggingAllResult_ListPeggingAllResult
          {
          }
          FormPeggingAllResult_DataSetLevelPeggingAllResult
          {
            groupDepth: 2
            sort: 'ProductID,StockingPointID,StartDate,DESC:PeggingProductInSalesDemandBase.SalesDemandBaseID'
            column_PeggingProductInSalesDemandBase_SalesDemandBaseID
            {
              columnId: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
              dataPath: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
              dataType: 'string'
              index: 0
              subtotals: 'count'
              width: 150
            }
            column_ProductID
            {
              columnId: 'ProductID'
              dataPath: 'ProductID'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_StockingPointID
            {
              columnId: 'StockingPointID'
              dataPath: 'StockingPointID'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_StartDate
            {
              columnId: 'StartDate'
              dataPath: 'StartDate'
              dataType: 'date'
              index: 3
              subtotals: ''
              width: 150
            }
            column_SupplyQuantity
            {
              columnId: 'SupplyQuantity'
              dataPath: 'SupplyQuantity'
              dataType: 'real'
              index: 4
              subtotals: ''
              width: 150
            }
            column_FulfillmentQuantity
            {
              columnId: 'FulfillmentQuantity'
              dataPath: 'FulfillmentQuantity'
              dataType: 'real'
              index: 5
              subtotals: 'sum'
              width: 150
            }
            column_SupplyType
            {
              columnId: 'SupplyType'
              dataPath: 'SupplyType'
              dataType: 'string'
              index: 6
              subtotals: ''
              width: 150
            }
            column_UnitOfMeasurementName
            {
              columnId: 'UnitOfMeasurementName'
              dataPath: 'UnitOfMeasurementName'
              dataType: 'string'
              index: 7
              subtotals: ''
              width: 150
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 0
    image: 'VIEW'
    description: ''
  }
  formatversion: 2
  id: 'Pegging分析'
  name: '分析Pegging'
  isglobal: false
  isroot: true
}
_var/_Main/ProjSettings/MacroPlanner/Views/X_·ÖÎöÊÓͼ_[414702.1.50321581].vw
ÎļþÌ«´ó