xiaoding721
2024-09-30 03f93088637930acbda3cd0b405114e0b00c13e4
Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev
已重命名4个文件
已修改64个文件
已添加92个文件
已删除3个文件
2719 ■■■■ 文件已修改
_Main/BL/InfoMessages.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionColumn_Cell_AssemblyOnlinePlanVersionCell_.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionColumn_InterfaceDataset_InterfaceDataset_A.qbl 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionRow_Cell_AssemblyOnlinePlanVersionCell_Row.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionRow_InterfaceDataset_InterfaceDataset_Asse.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanColumn_OfflinePlanColumn_OfflinePlanCell.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanRow_OfflinePlanRow_OfflinePlanCell.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_OfflinePlanImportData_MacroPlan_MacroPlan_OfflinePlanImportData.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_TransferMinimumQuantity_MacroPlan_MacroPlan_TransferMinimumQuantity.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_InventoryWeight.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_ProductionSerialNumber.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_Quantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_Shift.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_Value.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/DefaultValue_Shift.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/DefaultValue_Value.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/StaticMethod_Download.qbl 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/StaticMethod_RefreshData.qbl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanCell0/_ROOT_Type_AssemblyOnlinePlanVersionCell#0.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanColumn0/Attribute_ColumnDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanColumn0/Attribute_ColumnIndex.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanColumn0/Attribute_ColumnName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanColumn0/DefaultValue_ColumnName.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanColumn0/_ROOT_Type_AssemblyOnlinePlanVersionColumn#0.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_ProductionLine.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_RowNr.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_Type.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_ProductID.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_ProductionLine.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_RowNr.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_Type.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlinePlanVersionRow/_ROOT_Type_AssemblyOnlinePlanVersionRow.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_AssemblyOnlineQuantity/Attribute_DLZKM.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetCCFactory.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_InitiateSearch.qbl 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetCCFactory.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDLFactory.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitializeNew.qbl 164 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitiateSearch.qbl 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ChangeLossSetting/Attribute_ChangeLossNr.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ChangeLossSetting/Attribute_ChangeLossNumber.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ChangeLossSetting/StaticMethod_ValidateInput.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_CheckImport.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_ExportTemplate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_Import.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_EnginePipelineSource/StaticMethod_InitiateSearch.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionCell/Attribute_Quantity.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/Method_Initialize#110.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialSalesSource/StaticMethod_InitiateSearch.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_InitiateSearch.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachiningPipelineSource0/StaticMethod_InitiateSearch.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MacroPlan/Attribute_A_PreviousScenaioName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanCell/Attribute_IsQuantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanCell/Function_CalcIsQuantity.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanCell/Function_CalcQuantity.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanCell/Method_QuantityGreaterThan0.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanCell/StaticMethod_DeductionOfReplacementLoss.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanCell/StaticMethod_Download.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanColumn/Attribute_IsShow.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanColumn/DefaultValue_IsShow.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanColumn/Function_CalcColumnIndex.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanImportData/Attribute_Date.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanImportData/Attribute_Order.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanImportData/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanImportData/Attribute_Quantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanImportData/StaticMethod_UpdateCell.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanImportData/StaticMethod_Upload.qbl 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanImportData/_ROOT_Type_OfflinePlanImportData.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanRow/Attribute_Notes.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TransferMinimumQuantity/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TransferMinimumQuantity/Attribute_Quantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TransferMinimumQuantity/_ROOT_Type_TransferMinimumQuantity.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Unit/Method_WholeShiftFiltering.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/Sys/Repr/Global/OfflinePlanCell.qrp 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis627/Component_swTop.def 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis627/Component_swTopMost.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis627/_ROOT_Component_frmStandardAnalysis627.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogAssemblyOnlineQuantity/Component_pnlContent.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Component_pnlContent.def 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_Edit.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_New.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_OnOK.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnOk_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlContent_ddslProductID_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/_ROOT_Component_DialogCreateEditTransferMinimumQuantity.def 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditChangeLossSetting/Component_pnlContent.def 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditChangeLossSetting/Response_pnlActions_btnOk_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_abpContent.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_cmContent.def 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_lstContent.def 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_pnlContent.def 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mDelete_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mEdit_OnClick.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mNew_OnClick.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mSelectAll_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/_ROOT_Component_DialogTransferMinimumQuantity.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_ListEntity.def 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_listContextMenu902#1.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_pHeader.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_pnlContent.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Response_pHeader_bDeselectAll_OnClick.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlan/Component_pHeader.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlan/Response_MatrixEditor951_480_OnUpdateValue.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport#670.def 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormChangeLossSetting/Component_ListChangeLossSetting#568.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_bRefresh_OnClick#57.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport#570.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_OnCreated.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport#545.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_MatrixEditor951.def 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pContent#611.def 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader.def 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader1#799.def 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader2.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_MatrixEditor951_OnUpdateValue.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bConfirm_OnClick.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bDeductChangeoverLoss_OnClick.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bDownload_OnClick.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bGenerateReport_OnClick.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bImport_OnClick.def 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bRestore_OnClick.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bSaveAsDraft_OnClick.def 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader2_sDateFilter_OnUserChanged.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bConfirm_OnClick.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDownload_OnClick.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/_ROOT_Component_FormOfflinePlan.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Change_loss_setting_view.vw 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/metadata.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl
@@ -172,7 +172,7 @@
  }
  InfoMessage MP_ChangeLossSettingExcel_Import_PositiveInteger
  {
    DefaultText: 'The import ChangeLossNr is not positive integer.'
    DefaultText: 'The import ChangeLossNr is not positive number.'
  }
  InfoMessage MP_ChangeLossSettingExcel_Import_ProductNoExist
  {
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionColumn_Cell_AssemblyOnlinePlanVersionCell_.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation AssemblyOnlinePlanVersionColumn_Cell_AssemblyOnlinePlanVersionCell_Column
{
  #keys: '1[415136.0.1174730270]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Cell
  {
    #keys: '3[415136.0.1174730272][415136.0.1174730271][415136.0.1174730273]'
    Cardinality: '1toN'
    ObjectDefinition: AssemblyOnlinePlanVersionColumn
    OwningSide: 'Owned'
  }
  RelationSide.RightSide Column
  {
    #keys: '3[415136.0.1174730275][415136.0.1174730274][415136.0.1174730276]'
    Cardinality: '0to1'
    ObjectDefinition: AssemblyOnlinePlanVersionCell
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionColumn_InterfaceDataset_InterfaceDataset_A.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
Quintiq file version 2.0
#parent: #root
Relation AssemblyOnlinePlanVersionColumn_InterfaceDataset_InterfaceDataset_AssemblyOnlinePlanVersionColumn
{
  #keys: '1[415136.0.1176550032]'
  DeclarativeSequenceRelationStrategy
  {
    #keys: '13[0.0.0][415136.0.1176550051][415136.0.1176550045][415136.0.1176550052][415136.0.1176550046][415136.0.1176550053][415136.0.1176550047][415136.0.1176550054][415136.0.1176550048][415136.0.1176550055][415136.0.1176550049][415136.0.1176550056][415136.0.1176550050]'
    SequenceElementSuffix: 'AssemblyOnlinePlanVersionColumn'
    SequenceSuffix: 'AssemblyOnlinePlanVersionColumn'
    SortAttributes:
    [
      DeclarativeSequenceRelationSortAttribute
      {
        #keys: '1[415136.0.1176550058]'
        Attribute: 'ColumnDate'
      }
    ]
  }
  RelationSide.LeftSide InterfaceDataset
  {
    #keys: '3[415136.0.1176550034][415136.0.1176550033][415136.0.1176550035]'
    Cardinality: '0to1'
    ObjectDefinition: AssemblyOnlinePlanVersionColumn
    OwningSide: 'Reference'
  }
  RelationSide.RightSide AssemblyOnlinePlanVersionColumn
  {
    #keys: '3[415136.0.1176550037][415136.0.1176550036][415136.0.1176550038]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceDataset
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionRow_Cell_AssemblyOnlinePlanVersionCell_Row.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation AssemblyOnlinePlanVersionRow_Cell_AssemblyOnlinePlanVersionCell_Row
{
  #keys: '1[415136.0.1174730181]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Cell
  {
    #keys: '3[415136.0.1174730183][415136.0.1174730182][415136.0.1174730184]'
    Cardinality: '1toN'
    ObjectDefinition: AssemblyOnlinePlanVersionRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide Row
  {
    #keys: '3[415136.0.1174730186][415136.0.1174730185][415136.0.1174730187]'
    Cardinality: '0to1'
    ObjectDefinition: AssemblyOnlinePlanVersionCell
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_AssemblyOnlinePlanVersionRow_InterfaceDataset_InterfaceDataset_Asse.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation AssemblyOnlinePlanVersionRow_InterfaceDataset_InterfaceDataset_AssemblyOnlinePlanVersionRow
{
  #keys: '1[415136.0.1176550018]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide InterfaceDataset
  {
    #keys: '3[415136.0.1176550020][415136.0.1176550019][415136.0.1176550021]'
    Cardinality: '0to1'
    ObjectDefinition: AssemblyOnlinePlanVersionRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide AssemblyOnlinePlanVersionRow
  {
    #keys: '3[415136.0.1176550023][415136.0.1176550022][415136.0.1176550024]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceDataset
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanColumn_OfflinePlanColumn_OfflinePlanCell.qbl
@@ -18,6 +18,6 @@
    #keys: '3[413988.0.1296697094][413988.0.1296697093][413988.0.1296697095]'
    Cardinality: '1toN'
    ObjectDefinition: OfflinePlanColumn
    OwningSide: 'Owned'
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_OfflinePlanCell_OfflinePlanRow_OfflinePlanRow_OfflinePlanCell.qbl
@@ -18,6 +18,6 @@
    #keys: '3[413988.0.1296697107][413988.0.1296697106][413988.0.1296697108]'
    Cardinality: '1toN'
    ObjectDefinition: OfflinePlanRow
    OwningSide: 'Reference'
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_OfflinePlanImportData_MacroPlan_MacroPlan_OfflinePlanImportData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation OfflinePlanImportData_MacroPlan_MacroPlan_OfflinePlanImportData
{
  #keys: '1[413988.0.1558681405]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide MacroPlan
  {
    #keys: '3[413988.0.1558681407][413988.0.1558681406][413988.0.1558681408]'
    Cardinality: '0to1'
    ObjectDefinition: OfflinePlanImportData
    OwningSide: 'Reference'
  }
  RelationSide.RightSide OfflinePlanImportData
  {
    #keys: '3[413988.0.1558681410][413988.0.1558681409][413988.0.1558681411]'
    Cardinality: '1toN'
    ObjectDefinition: MacroPlan
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_TransferMinimumQuantity_MacroPlan_MacroPlan_TransferMinimumQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation TransferMinimumQuantity_MacroPlan_MacroPlan_TransferMinimumQuantity
{
  #keys: '1[413988.0.1584313394]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide MacroPlan
  {
    #keys: '3[413988.0.1584313396][413988.0.1584313395][413988.0.1584313397]'
    Cardinality: '0to1'
    ObjectDefinition: TransferMinimumQuantity
    OwningSide: 'Reference'
  }
  RelationSide.RightSide TransferMinimumQuantity
  {
    #keys: '3[413988.0.1584313399][413988.0.1584313398][413988.0.1584313400]'
    Cardinality: '1toN'
    ObjectDefinition: MacroPlan
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
@@ -11,7 +11,9 @@
    macroPlan.AssemblyOnlinePlanColumn( relflush );
    
    // æ‰¾è£…配线行
    oprs := selectsortedset( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = "DL-MoMo" or tempOPR.ProductionLine() = "CC-MoMo", tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    oprs := selectsortedset( opt, OfflinePlanRow, tempOPR,
                             tempOPR.ProductionLine() = "DL MoMo" or tempOPR.ProductionLine() = "CC MoMo" or tempOPR.ProductionLine() = "DL ZKM",
                             tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    opcs := selectsortedset( opt, OfflinePlanColumn, tempOPC, true, tempOPC.ColumnDate() );
    
    // ç”Ÿæˆè¡¨æ ¼
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_InventoryWeight.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute InventoryWeight
{
  #keys: '3[415136.0.1174730142][415136.0.1174730141][415136.0.1174730143]'
  Description: '剩余库存 - æœ€å°åº“å­˜'
  ValueType: Real
}
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_ProductionSerialNumber.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductionSerialNumber
{
  #keys: '3[415136.0.1174730145][415136.0.1174730144][415136.0.1174730146]'
  ValueType: Number
}
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[415136.0.1174730148][415136.0.1174730147][415136.0.1174730149]'
  ValueType: Real
}
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_Shift.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Shift
{
  #keys: '3[415136.0.1174730151][415136.0.1174730150][415136.0.1174730152]'
  Description: '班次'
  ValueType: String
}
_Main/BL/Type_AssemblyOnlinePlanCell0/Attribute_Value.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Value
{
  #keys: '3[415136.0.1174730154][415136.0.1174730153][415136.0.1174730155]'
  ValueType: String
}
_Main/BL/Type_AssemblyOnlinePlanCell0/DefaultValue_Shift.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Shift
}
_Main/BL/Type_AssemblyOnlinePlanCell0/DefaultValue_Value.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Value
}
_Main/BL/Type_AssemblyOnlinePlanCell0/StaticMethod_Download.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Download (
  MacroPlan macroPlan
) as BinaryValue
{
  TextBody:
  [*
    xmlDOMI      := XMLDOMImplementation::Create();
    xmlDOM       := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name></table>' );
    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
    opcs := selectsortedset( macroPlan, AssemblyOnlinePlanColumn, tempOPC, true, tempOPC.ColumnDate() );
    oprs := selectsortedset( macroPlan, AssemblyOnlinePlanRow, tempOPR, true, tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    traverse ( opcs, Elements, opc ) {
      column := xmlDOM.CreateElement( "column" );
      name   := xmlDOM.CreateElement( "name" );
      type   := xmlDOM.CreateElement( "type" );
      name.TextContent( ifexpr( opc.ColumnDate() < macroPlan.StartOfPlanning().Date(), "", opc.ColumnDate().Format( "Y/M2/D2" ) ) );
      type.TextContent( "String" );
      column.AppendChild( name );
      column.AppendChild( type );
      traverse ( oprs, Elements, opr ) {
        c    := select( opc, AssemblyOnlinePlanCell, tempOPC, tempOPC.AssemblyOnlinePlanRow() = opr );
        cell := xmlDOM.CreateElement( "cell" );
        cell.SetAttribute( "value", guard( c.Value(), "" ) );
        column.AppendChild( cell );
      }
      tableElement.AppendChild( column );
    }
    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
    //info( xmlString );
    tableGroupHandle := TableGroupHandle::Create( "Sheet1" );
    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
    tableGroupHandle.Add( tableHandle );
    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
    return binaryData.AsBinaryValue();
  *]
}
_Main/BL/Type_AssemblyOnlinePlanCell0/StaticMethod_RefreshData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
#parent: #root
StaticMethod RefreshData (
  MacroPlan macroPlan,
  OfflinePlanTable opt
)
{
  TextBody:
  [*
    macroPlan.AssemblyOnlinePlanRow( relflush );
    macroPlan.AssemblyOnlinePlanColumn( relflush );
    // æ‰¾è£…配线行
    oprs := selectsortedset( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = "DL-MoMo" or tempOPR.ProductionLine() = "CC-MoMo", tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    opcs := selectsortedset( opt, OfflinePlanColumn, tempOPC, true, tempOPC.ColumnDate() );
    // ç”Ÿæˆè¡¨æ ¼
    traverse ( opcs, Elements, opc ) {
      aopc := macroPlan.AssemblyOnlinePlanColumn( relnew, ColumnDate := opc.ColumnDate(), ColumnIndex := opc.ColumnIndex() );
      traverse ( oprs, Elements, opr ) {
        aopr := select( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductID() = opr.ProductID() and tempAOPR.ProductionLine() = opr.ProductionLine() and tempAOPR.Type() = opr.Type() );
        if ( isnull( aopr ) ) {
          aopr := macroPlan.AssemblyOnlinePlanRow( relnew, ProductID := opr.ProductID(), ProductionLine := opr.ProductionLine(), Type := opr.Type() );
        }
        cellOPC := select( opr, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanColumn() = opc );
        if ( not isnull( cellOPC ) ) {
          cellAOPC := aopc.AssemblyOnlinePlanCell( relnew, Value := cellOPC.Value() );
          cellAOPC.AssemblyOnlinePlanRow( relset, aopr );
        }
      }
    }
    // å¤„理日历事件
  *]
}
_Main/BL/Type_AssemblyOnlinePlanCell0/_ROOT_Type_AssemblyOnlinePlanVersionCell#0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type AssemblyOnlinePlanVersionCell
{
  #keys: '5[415136.0.1174730139][415136.0.1174730137][0.0.0][415136.0.1174730138][415136.0.1174730140]'
  BaseType: Object
  Description: '装配上线计划版本'
  StructuredName: 'AssemblyOnlinePlanVersionCells'
}
_Main/BL/Type_AssemblyOnlinePlanColumn0/Attribute_ColumnDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ColumnDate
{
  #keys: '3[415136.0.1174730129][415136.0.1174730128][415136.0.1174730130]'
  ValueType: Date
}
_Main/BL/Type_AssemblyOnlinePlanColumn0/Attribute_ColumnIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ColumnIndex
{
  #keys: '3[415136.0.1174730132][415136.0.1174730131][415136.0.1174730133]'
  ValueType: Number
}
_Main/BL/Type_AssemblyOnlinePlanColumn0/Attribute_ColumnName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ColumnName
{
  #keys: '3[415136.0.1174730135][415136.0.1174730134][415136.0.1174730136]'
  ValueType: String
}
_Main/BL/Type_AssemblyOnlinePlanColumn0/DefaultValue_ColumnName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: ColumnName
}
_Main/BL/Type_AssemblyOnlinePlanColumn0/_ROOT_Type_AssemblyOnlinePlanVersionColumn#0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type AssemblyOnlinePlanVersionColumn
{
  #keys: '5[415136.0.1174730126][415136.0.1174730124][0.0.0][415136.0.1174730125][415136.0.1174730127]'
  BaseType: Object
  Description: '装配上线计划版本'
  StructuredName: 'AssemblyOnlinePlanVersionColumns'
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[415136.0.1174730079][415136.0.1174730078][415136.0.1174730080]'
  ValueType: String
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_ProductionLine.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductionLine
{
  #keys: '3[415136.0.1174730082][415136.0.1174730081][415136.0.1174730083]'
  ValueType: String
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_RowNr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute RowNr
{
  #keys: '3[415136.0.1174730085][415136.0.1174730084][415136.0.1174730086]'
  ValueType: String
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/Attribute_Type.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
Attribute Type
{
  #keys: '3[415136.0.1174730088][415136.0.1174730087][415136.0.1174730089]'
  Description:
  [*
    äº§çº¿åè¡Œ    ï¼š0
    Quantity行:1
    Order行     ï¼š2
    åˆè®¡è¡Œ        ï¼š3
    ç­æ¬¡è¡Œ        ï¼š4
  *]
  ValueType: String
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: ProductID
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_ProductionLine.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: ProductionLine
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_RowNr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: RowNr
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/DefaultValue_Type.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Type
}
_Main/BL/Type_AssemblyOnlinePlanVersionRow/_ROOT_Type_AssemblyOnlinePlanVersionRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type AssemblyOnlinePlanVersionRow
{
  #keys: '5[415136.0.1174730076][415136.0.1174730074][0.0.0][415136.0.1174730075][415136.0.1174730077]'
  BaseType: Object
  Description: '装配上线计划版本'
  StructuredName: 'AssemblyOnlinePlanVersionRows'
}
_Main/BL/Type_AssemblyOnlineQuantity/Attribute_DLZKM.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute DLZKM
{
  #keys: '3[415754.0.315331249][415754.0.315331248][415754.0.315331250]'
  ValueType: Number
}
_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetCCFactory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetCCFactory () const as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    return '长春工厂';
    //return 'VWED CC';
    //return 'Assembly Plant (France)';
  *]
}
_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
@@ -11,6 +11,7 @@
    produtparent              := CCEngineLogisticsCostReport::GetDefaultProductParent();
    name                      := CCEngineLogisticsCostReport::GetDefaultName();
    allunit                   := CCEngineLogisticsCostReport::GetDefaultAllUnit();
    ccfactory                 := CCEngineLogisticsCostReport::GetCCFactory();
    ccunit                    := CCEngineLogisticsCostReport::GetDefaultCCUnit();
    ccline                    := CCEngineLogisticsCostReport::GetStockingPointCCLine();
    ccrent                    := CCEngineLogisticsCostReport::GetStockingPointCCRent();
@@ -36,7 +37,7 @@
            //查询对应的发动机成本
            enginecosts       := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = ccunit );
                                                 and engine.Factory() = ccfactory );//ccunit
            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
              ccrow           := table.GetRow( row.Name() );
              products.Add( product );
@@ -66,7 +67,7 @@
            //查询对应的发动机成本
            enginecosts       := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = ccunit );
                                                 and engine.Factory() = ccfactory );
            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
              ccrow           := table.GetRow( row.Name() );
              products.Add( product );
@@ -110,7 +111,7 @@
                //在发动机成本参数表找到对应的包装容量
                enginecost     := selectobject( enginecosts, Elements, engine, engine.Generation().ToLower() = product.Generation().ToLower()
                                                   and engine.MLB_MQB() = product.MQBMLB()
                                                   and engine.Factory() = ccunit );
                                                   and engine.Factory() = ccfactory );
                //在运输成本参数表里找到发动机对应运输单价和装载容量
                transcost      := selectobject( transcosts, Elements, trans, trans.Origin() = ccline 
                                                  and trans.Destination() = ccrent 
@@ -143,7 +144,7 @@
            //查询对应的发动机成本
            enginecosts        := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = ccunit );
                                                 and engine.Factory() = ccfactory );
            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
              row              := table.GetRow( pisp.ProductID() );
              products.Add( product );
_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_InitiateSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitiateSearch (
  MacroPlan owner
) as CCEngineLogisticsCostReport
{
  TextBody:
  [*
    // ç”„兰鸽 Sep-29-2024 (created)
    allunit                   := DLEngineLogisticsCostReport::GetDefaultAllUnit();
    search                    := owner.CCEngineLogisticsCostSearch();
    if( isnull( search ) ){
      owner.CCEngineLogisticsCostSearch( relnew, Generation := allunit, MqbMlb := allunit, Power := allunit );
    }else{
      search                  := owner.CCEngineLogisticsCostSearch();
      search.Generation( allunit );
      search.MqbMlb( allunit );
      search.Power( allunit );
    }
    table := selectobject( owner, CCEngineLogisticsCostReport, table, table.IsShow() );
    if( not isnull( table ) ){
      products                := selectset( owner, Product_MP, product, true );
      table.Generate( search, products );
    }
    return table;
  *]
}
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetCCFactory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetCCFactory () const as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    return '长春工厂';
    //return 'VWED CC';
    //return 'Assembly Plant (France)';
  *]
}
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDLFactory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDLFactory () const as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-25-2024 (created)
    return '大连工厂';
    //return 'VWED DL';
    //return 'Assembly Plant (France)';
  *]
}
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitializeNew.qbl
@@ -13,9 +13,11 @@
    allunit                   := DLEngineLogisticsCostReport::GetDefaultAllUnit();
    ccunit                    := DLEngineLogisticsCostReport::GetDefaultCCUnit();
    dlunit                    := DLEngineLogisticsCostReport::GetDefaultDLUnit();
    ccfactory                 := DLEngineLogisticsCostReport::GetCCFactory();
    dlfactory                 := DLEngineLogisticsCostReport::GetDLFactory();
    //dlline                    := DLEngineLogisticsCostReport::GetStockingPointDLLine();
    ccrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
    dlrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
    //ccrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
    //dlrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
    
    startofplanning           := owner.StartOfPlanning().Date();
    //startofyear               := startofplanning.StartOfYear();
@@ -28,14 +30,74 @@
    products                  := construct( Product_MPs );
    
    table.GenerateColumn( owner );
    //外租库仓储费用:仓储数量/包装容量*仓储单价,在Actual inventories里取到长春外租库/大连外租库该发动机的仓储量,根据发动机号找到对应的Generation å’Œæ¨ªçºµåˆ¶ï¼Œåœ¨å‘动机成本参数表里找到对应的仓储单价和包装容量,用公式计算,月度进行汇总
    //长春外租库入库/出库费用,大连发动机的长春外租库的New supply
    traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '外租库' ) ){
    //  unit                    := stockingpoint.Unit();
    //  parentunits             := unit.GetAllParent();
      //是否属于长春外租库
      isccrent                := stockingpoint.ID().StartsWith( '长春' ) or stockingpoint.ID().StartsWith( 'CC' );
      //是否属于大连发动机的长春外租库
      isdltoccrent            := stockingpoint.ID().StartsWith( '大连发动机的长春' );
      //是否属于大连外租库
      isdlrent                := stockingpoint.ID().StartsWith( '大连' ) or stockingpoint.ID().StartsWith( 'DL' );
      if( isccrent or isdlrent ){
        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf()
                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
          //获取行
          product             := pisp.Product_MP();
          productparents      := product.GetAllParent();
          if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//查询产品类型是发动机
            row               := table.GetRow( pisp.ProductID() );
            enginecosts       := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() and engine.MLB_MQB() = product.MQBMLB() );
            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
              products.Add( pisp.Product_MP() );
              traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0  ){
                periodtime    := pispip.Start().StartOfMonth().Date();
                periodname    := periodtime.Format( "M2/D2/Y" );
                column        := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
                cell          := selectobject( row, Cell, cell, cell.Column() = column );
                if( isccrent or isdltoccrent){
                  //在发动机成本参数表找到对应的包装容量
                  enginecost  := selectobject( enginecosts, Elements, engine, engine.StartDate() <= pispip.Start().Date() and engine.EndDate() >= pispip.Start().Date()
                                                     and engine.Factory() = ccfactory );
                   if( not isnull( enginecost ) ){
                     quantity :=   [Number]pispip.NewSupplyQuantity();
                     if( isccrent ){
                       cost        := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//四舍五入
                       cell.CCRentStorCost( cell.CCRentStorCost() + cost );
                     }else{
                       cell.CCRentQuantity( cell.CCRentQuantity() + quantity );
                       //长春外租库入库费用:入库量/包装容量*入库单价
                       entercost  := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
                       //长春外租库出库费用: å‡ºåº“量/包装容量*出库单价
                       outcost    := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
                       cell.CCRentInCost( cell.CCRentInCost() + entercost );
                       cell.CCRentOutOfCost( cell.CCRentOutOfCost() + outcost );
                     }
                   }
                } else {
                  //在发动机成本参数表找到对应的包装容量
                  enginecost     := selectobject( enginecosts, Elements, engine, engine.StartDate() <= pispip.Start().Date() and engine.EndDate() >= pispip.Start().Date()
                                                     and engine.Factory() = dlfactory  );
                   if( not isnull( enginecost ) ){
                     cost        := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//四舍五入
                     cell.DLRentStorCost( cell.DLRentStorCost() + cost );
                   }
                }
              }
            }
          }
        }
      }
    }
    //在 trip plan里找到大连装配线边库到大连外租库的运输数量//大连厂内库到外租库
    traverse( owner, Unit.Lane.LaneLeg, laneleg ){
      //起始库存点是否是大连装配线边库
    //  originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
      isdlspline             := laneleg.OriginStockingPointID().EndsWith( '厂内库' ) and ( laneleg.OriginStockingPointID().StartsWith( '大连' ) or laneleg.OriginStockingPointID().StartsWith( 'DL' ) );//table.IsInUnit( originsp, dlline );
      isdlspline             := laneleg.OriginStockingPointID().EndsWith( '厂内库' ) and ( laneleg.OriginStockingPointID().StartsWith( '大连' ) or laneleg.OriginStockingPointID().StartsWith( 'DL' ) );
      //目的地是否是大连外租库
    //  destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
      isdlrent               := laneleg.DestinationStockingPointID().EndsWith( '外租库' ) and ( laneleg.DestinationStockingPointID().StartsWith( '大连' ) or laneleg.DestinationStockingPointID().StartsWith( 'DL' ) );//table.IsInUnit( destisp, dlrent );
      isdlrent               := laneleg.DestinationStockingPointID().EndsWith( '外租库' ) and ( laneleg.DestinationStockingPointID().StartsWith( '大连' ) or laneleg.DestinationStockingPointID().StartsWith( 'DL' ) );
      if( isdlspline and isdlrent ){
        traverse( laneleg, Trip, trip, trip.Departure().Date() < startofnextyear ){//由于需要考虑产品运输lead time,每个月的汇总数据需要推迟两天进行计算
          periodtime         := trip.Departure().StartOfMonth().Date();
@@ -54,7 +116,7 @@
              //在发动机成本参数表找到对应的包装容量
              enginecost     := selectobject( enginecosts, Elements, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                   and engine.MLB_MQB() = product.MQBMLB()
                                                   and engine.Factory() = dlunit  );
                                                   and engine.Factory() = dlfactory  );
              //在运输成本参数表里找到发动机对应运输单价和装载容量
              transcost      := selectobject( transcosts, Elements, trans, trans.Origin() = laneleg.OriginStockingPointID() 
                                                  and trans.Destination() = laneleg.DestinationStockingPointID() 
@@ -66,29 +128,12 @@
                cost         := ceil( ceil( quantity / enginecost.PackagingCapacity() ) / transcost.LoadingCapacity() ) * transcost.TransportPrice();//四舍五入
                cell.WerkToDLRentTransCost( cell.WerkToDLRentTransCost() + cost );
              }
    //          if( isccrent ){//目的地是长春外租库
    //            //在发动机成本参数表找到对应的包装容量
    //            enginecost   := selectobject( enginecosts, Elements, engine, engine.Generation().ToLower() = product.Generation().ToLower()
    //                                               and engine.MLB_MQB() = product.MQBMLB()
    //                                               and engine.Factory() = ccunit );
    //            if( not isnull( enginecost ) ){
    //              products.Add( product );
    //              cell       := selectobject( row, Cell, cell, cell.Column() = column );
    //              cell.CCRentQuantity( cell.CCRentQuantity() + quantity );
    //              //长春外租库入库费用:入库量/包装容量*入库单价
    //              entercost  := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
    //              //长春外租库出库费用: å‡ºåº“量/包装容量*出库单价
    //              outcost    := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
    //              cell.CCRentEnterCost( cell.CCRentEnterCost() + entercost );
    //              cell.CCRentOutCost( cell.CCRentOutCost() + outcost );
    //            }
    //          }
            }
          }
        }
      }
    }
    //大连外租库入库费用:入库量/包装容量*入库单价,入库量等于大连工厂该产品产量减去发往长春的数量-newSupply
    //大连外租库入库费用:入库量/包装容量*入库单价,入库量等于大连工厂该产品产量减去发往长春(大连的长春外租库)的数量-newSupply
    traverse( owner, FinancialProductionSource, source, not source.IsImport() ){//财务产量报表非导入
      traverse( source, FinancialProductionReport, report, not report.IsShow() ){//财务产量报表不显示
        traverse( report, FinancialProductionRow, row, row.Unit() = dlunit and exists( row, FinancialProductionCell, cell, cell.Value() <> '0' and cell.FinancialProductionColumn().IsDay() ) ){//财务产量报表里的大连产量, ä¸ä¸º0
@@ -98,7 +143,7 @@
            //查询对应的发动机成本
            enginecosts      := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = dlunit );
                                                 and engine.Factory() = dlfactory );
            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
              products.Add( product );
              ccrow          := table.GetRow( row.Name() );
@@ -126,7 +171,7 @@
            //查询对应的发动机成本
            enginecosts      := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = dlunit );
                                                 and engine.Factory() = dlfactory );
            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
              products.Add( product );
              ccrow          := table.GetRow( row.Name() );
@@ -149,17 +194,15 @@
      product                 := selectobject( owner, Product_MP, product, product.ID() = tprow.ProductID() );
      productparents          := product.GetAllParent();
      if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//查询产品类型是发动机
        //起始库存点是否是大连
        originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
        isdl                   := table.IsInUnit( originsp, dlunit );
        //目的地库存点是否是长春
        destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
        iscc                   := table.IsInUnit( destisp, ccunit );
        //起始库存点是否是大连(大连厂内库)
        isdl                   := tprow.SourceStockpoingPointID().EndsWith( '厂内库' ) and ( tprow.TargetStockpoingPointID().StartsWith( '大连' ) or tprow.TargetStockpoingPointID().StartsWith( 'DL' ) );
        //目的地库存点是否是长春(长春外租库)
        iscc                   := tprow.TargetStockpoingPointID().EndsWith( '外租库' ) and ( tprow.TargetStockpoingPointID().StartsWith( '长春' ) or tprow.TargetStockpoingPointID().StartsWith( 'CC' ) );
        if( isdl and iscc ){
          //查询对应的发动机成本
          enginecosts          := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = ccunit );
                                                 and engine.Factory() = ccfactory );
          //在运输成本参数表里找到发动机对应运输单价和装载容量
          transcosts           := selectset( owner, LogisticsCostTransport, trans, trans.Origin() = tprow.SourceStockpoingPointID() 
                                                  and trans.Destination() = tprow.TargetStockpoingPointID() 
@@ -190,7 +233,7 @@
      salessegment            := forecast.SalesSegment_MP();
      parentsalessegments     := salessegment.GetAllParent();
      //是否属于长春
      iscc                    := salessegment.Name() = ccunit or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = ccunit );
      iscc                    := salessegment.Name().StartsWith( 'Changechun' ) or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( 'Changechun' ) );
      if( iscc ){
        product               := forecast.Product_MP();
        productparents        := product.GetAllParent();
@@ -198,7 +241,7 @@
          //查询对应的发动机成本
          enginecosts         := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
                                                 and engine.MLB_MQB() = product.MQBMLB()
                                                 and engine.Factory() = ccunit );
                                                 and engine.Factory() = ccfactory );
          if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
            products.Add( forecast.Product_MP() );
            row               := table.GetRow( forecast.ProductID() );
@@ -219,54 +262,7 @@
        }
      }
    }
    //外租库仓储费用:仓储数量/包装容量*仓储单价,在Actual inventories里取到长春外租库/大连外租库该发动机的仓储量,根据发动机号找到对应的Generation å’Œæ¨ªçºµåˆ¶ï¼Œåœ¨å‘动机成本参数表里找到对应的仓储单价和包装容量,用公式计算,月度进行汇总
    traverse( owner, StockingPoint_MP, stockingpoint ){
      unit                    := stockingpoint.Unit();
      parentunits             := unit.GetAllParent();
      //是否属于长春外租库
      isccrent                := stockingpoint.ID() = ccrent or unit.ID() = ccrent or exists( parentunits, Elements, punit, punit.ID() = ccrent );
      //是否属于大连外租库
      isdlrent                := stockingpoint.ID() = dlrent or unit.ID() = dlrent or exists( parentunits, Elements, punit, punit.ID() = dlrent );
      if( isccrent or isdlrent ){
        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf()
                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
          //获取行
          product             := pisp.Product_MP();
          productparents      := product.GetAllParent();
          if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//查询产品类型是发动机
            row               := table.GetRow( pisp.ProductID() );
            enginecosts       := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() and engine.MLB_MQB() = product.MQBMLB() );
            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
              products.Add( pisp.Product_MP() );
              traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0  ){
                periodtime    := pispip.Start().StartOfMonth().Date();
                periodname    := periodtime.Format( "M2/D2/Y" );
                column        := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
                cell          := selectobject( row, Cell, cell, cell.Column() = column );
                if( isccrent ){
                  //在发动机成本参数表找到对应的包装容量
                  enginecost     := selectobject( enginecosts, Elements, engine, engine.StartDate() <= pispip.Start().Date() and engine.EndDate() >= pispip.Start().Date()
                                                     and engine.Factory() = ccunit );
                   if( not isnull( enginecost ) ){
                     cost        := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//四舍五入
                     cell.CCRentStorCost( cell.CCRentStorCost() + cost );
                   }
                } else {
                  //在发动机成本参数表找到对应的包装容量
                  enginecost     := selectobject( enginecosts, Elements, engine, engine.StartDate() <= pispip.Start().Date() and engine.EndDate() >= pispip.Start().Date()
                                                     and engine.Factory() = dlunit  );
                   if( not isnull( enginecost ) ){
                     cost        := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//四舍五入
                     cell.DLRentStorCost( cell.DLRentStorCost() + cost );
                   }
                }
              }
            }
          }
        }
      }
    }
    rows := selectsortedset( table, Row, row, row.Name() );
    i    := 0;
    traverse( rows, Elements, e ){
_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitiateSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitiateSearch (
  MacroPlan owner
) as DLEngineLogisticsCostReport
{
  TextBody:
  [*
    // ç”„兰鸽 Sep-29-2024 (created)
    allunit                   := DLEngineLogisticsCostReport::GetDefaultAllUnit();
    search                    := owner.DLEngineLogisticsCostSearch();
    if( isnull( search ) ){
      owner.DLEngineLogisticsCostSearch( relnew, Generation := allunit, MqbMlb := allunit, Power := allunit );
    }else{
      search                  := owner.DLEngineLogisticsCostSearch();
      search.Generation( allunit );
      search.MqbMlb( allunit );
      search.Power( allunit );
    }
    table                     := selectobject( owner, DLEngineLogisticsCostReport, table, table.IsShow() );
    if( not isnull( table ) ){
      products                := selectset( owner, Product_MP, product, true );
      table.Generate( search, products );
    }
    return table;
  *]
}
_Main/BL/Type_ChangeLossSetting/Attribute_ChangeLossNr.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_ChangeLossSetting/Attribute_ChangeLossNumber.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ChangeLossNumber
{
  #keys: '3[415136.0.1176550071][415136.0.1176550070][415136.0.1176550072]'
  ValueType: Real
}
_Main/BL/Type_ChangeLossSetting/StaticMethod_ValidateInput.qbl
@@ -9,15 +9,17 @@
  Product_MP product2,
  Date startdate,
  Date enddate,
  Number number
  String number
) as Boolean
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-5-2024 (created)
    feedback := '';
    if( isnull( unit ) or isnull( product1 ) or isnull( product2 ) or number < 1 ){
    if( [Number]number < 0 ){
      feedback := Translations::MP_ChangeLossSettingExcel_Import_PositiveInteger();
    }
    if( isnull( unit ) or isnull( product1 ) or isnull( product2 ) or [Number]number = 0 ){
      feedback := Translations::MP_ChangeLossSetting_CheckNull();
    }
    if( product1 = product2 ){
_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_CheckImport.qbl
@@ -16,7 +16,7 @@
      error( Translations::MP_ChangeLossSettingExcel_Import_NullInputRequiredField() );
    }
    //导入的数量小于0
    if( exists( macroplan, ChangeLossSettingExcel, excel, [Real]excel.ChangeLossNumber() > 0 and ceil( [Real]excel.ChangeLossNumber() ) <> floor( [Real]excel.ChangeLossNumber() ) ) ){
    if( exists( macroplan, ChangeLossSettingExcel, excel, [Real]excel.ChangeLossNumber() <= 0 ) ){
      error( Translations::MP_ChangeLossSettingExcel_Import_PositiveInteger() );
    }
    //导入产品是否存在
_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_ExportTemplate.qbl
@@ -9,7 +9,7 @@
  [*
    // ç”„兰鸽 Aug-22-2024 (created)
    traverse( macroplan, ChangeLossSetting, cls ){
      macroplan.ChangeLossSettingExcel( relnew, Product1 := cls.ProductFirst().ID(), Product2 := cls.ProductSecond().ID(), Unit := cls.Unit().ID(), ChangeLossNumber := [String]cls.ChangeLossNr(), StartDate := cls.StartDate(), EndDate := cls.EndDate() );
      macroplan.ChangeLossSettingExcel( relnew, Product1 := cls.ProductFirst().ID(), Product2 := cls.ProductSecond().ID(), Unit := cls.Unit().ID(), ChangeLossNumber := [String]cls.ChangeLossNumber(), StartDate := cls.StartDate(), EndDate := cls.EndDate() );
    }
    value := macroplan.MP_ExportChangeLossSettingsBroker().ExecuteToXLS( isxlsxformat ).AsBinaryValue();
    macroplan.ChangeLossSettingExcel( relflush );
_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_Import.qbl
@@ -28,13 +28,14 @@
                                          and cls.Unit().ID() = excel.Unit()
                                          and cls.StartDate() = excel.StartDate()
                                          and cls.EndDate() = excel.EndDate() );
      info( excel.ChangeLossNumber() );
      if( isnull( cls ) ){
        product1        := selectobject( macroplan, Product_MP, product, product.ID() = excel.Product1() );
        product2        := selectobject( macroplan, Product_MP, product, product.ID() = excel.Product2() );
        unit            := selectobject( macroplan, Unit, unit, unit.ID() = excel.Unit() );
        feedback        := '';
        if( ChangeLossSetting::ValidateInput( feedback, macroplan, null( ChangeLossSetting ), unit, product1, product2, excel.StartDate(), excel.EndDate(), [Number]excel.ChangeLossNumber() ) ){
          cls             := macroplan.ChangeLossSetting( relnew, ChangeLossNr := [Number]excel.ChangeLossNumber() );
        if( ChangeLossSetting::ValidateInput( feedback, macroplan, null( ChangeLossSetting ), unit, product1, product2, excel.StartDate(), excel.EndDate(), excel.ChangeLossNumber() ) ){
          cls             := macroplan.ChangeLossSetting( relnew, ChangeLossNumber := [Real]excel.ChangeLossNumber() );
          
          cls.ProductFirst( relset, product1 );
          cls.ProductSecond( relset, product2 );
@@ -47,8 +48,9 @@
          error( feedback );
        }
      }else {
        cls.ChangeLossNr( [Number]excel.ChangeLossNumber() );
        cls.ChangeLossNumber( [Real]excel.ChangeLossNumber() );
      }
      info( '-------------------', cls.ChangeLossNumber() );
      excel.Delete();
    }
  *]
_Main/BL/Type_EnginePipelineSource/StaticMethod_InitiateSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitiateSearch (
  MacroPlan owner
) as EnginePipelineReport
{
  TextBody:
  [*
    // ç”„兰鸽 Sep-29-2024 (created)
    search                    := owner.EnginePipelineSearch();
    if( isnull( search ) ){
      owner.EnginePipelineSearch( relnew, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), TimeUnit := Translations::MP_GlobalParameters_Day() );
    }else{
      search                  := owner.EnginePipelineSearch();
      search.TimeUnit( Translations::MP_GlobalParameters_Day() );
      search.StartDate( Date::MinDate() );
      search.EndDate( Date::MaxDate() );
    }
    table                     := selectobject( owner, EnginePipelineSource.Report, table, table.IsShow() );
    if( not isnull( table ) ){
      products                := selectset( owner, Product_MP, product, true );
      table.Generate( search, products );
    }
    return table;
  *]
}
_Main/BL/Type_FinancialProductionCell/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[415136.0.1167140019][415136.0.1167140018][415136.0.1167140020]'
  Description: '数量'
  ValueType: Real
}
_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl
@@ -29,16 +29,22 @@
          
          sumcell  := selectobject( column, FinancialProductionCell, c, c.FinancialProductionRow() = sumrow );
          if( isnull( sumcell ) ){
            sumcell := column.FinancialProductionCell( relnew, Value := '0' );
            sumcell := column.FinancialProductionCell( relnew, Quantity := 0 );
            sumrow.FinancialProductionCell( relinsert, sumcell );
          }
          
          showcell := column.FinancialProductionCell( relnew, Value := cell.Value() );
          showcell := column.FinancialProductionCell( relnew, Quantity := cell.Quantity() );
          showrow.FinancialProductionCell( relinsert, showcell );
          value := [Real]cell.Value() + [Real]sumcell.Value();
          sumcell.Value( [String]value );
    //      value := [Real]cell.Value() + [Real]sumcell.Value();
          sumcell.Quantity( sumcell.Quantity() + cell.Quantity() );
        }
      }
    }
    traverse( this, FinancialProductionRow, row ){
      traverse( row, FinancialProductionCell, cell ){
        cell.Value( [String]([Number]cell.Quantity()) );
      }
    }
  *]
}
_Main/BL/Type_FinancialProductionRow/Method_Initialize#110.qbl
@@ -10,7 +10,7 @@
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := column.FinancialProductionCell( relnew, Value := '' );
    cell := column.FinancialProductionCell( relnew, Quantity := 0 );
    
    this.FinancialProductionCell( relinsert, cell );
    if( unit <> FinancialProductionReport::GetDefaultAllUnit() ){
_Main/BL/Type_FinancialProductionRow/Method_Initialize.qbl
@@ -2,7 +2,7 @@
#parent: #root
Method Initialize (
  FinancialProductionColumn column,
  Number quantity
  Real quantity
)
{
  TextBody:
@@ -10,7 +10,8 @@
    // ç”„兰鸽 Jun-24-2024 (created)
    cell := selectobject( this, FinancialProductionCell, cell, cell.FinancialProductionColumn() = column );
          
    value := [Number]cell.Value() + quantity;
    cell.Value( [String]value );
    //value := [Number]cell.Value() + quantity;
    //cell.Value( [String]value );
    cell.Quantity( cell.Quantity() + quantity );
  *]
}
_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
@@ -28,11 +28,13 @@
          allcell  := selectobject( allrow, FinancialProductionCell, allcell, allcell.FinancialProductionColumn().Name() = column.Name() );
    //      info( isnull( unitcell ), isnull( allcell ), cell.Value(), unitcell.Value(), allcell.Value() );
          if( not isnull( unitcell ) ){
            unitcell.Value( cell.Value() );
    //        unitcell.Value( cell.Value() );
            unitcell.Quantity( [Real]cell.Value() );
          }
          if( not isnull( allcell ) ){
            value := [Real]cell.Value() + [Real]allcell.Value();
            allcell.Value( [String]value );
    //        value := [Real]cell.Value() + [Real]allcell.Value();
    //        allcell.Value( [String]value );
            allcell.Quantity( allcell.Quantity() + [Real]allcell.Value() );
          }
        }
      }
_Main/BL/Type_FinancialProductionSource/StaticMethod_Download.qbl
@@ -33,7 +33,8 @@
    
    tableElement.AppendChild( productcolumnelement ); 
    tableElement.AppendChild( unitcolumnelement ); 
    traverse ( table, FinancialProductionColumn, column ) {
    minindex        := min( table, FinancialProductionColumn, column, not column.IsDay(), column.Index() );
    traverse ( table, FinancialProductionColumn, column, not column.IsDay() ) {
      columnelement := xmlDOM.CreateElement( "column" );
      nameelement   := xmlDOM.CreateElement( "name" );
      typeelement   := xmlDOM.CreateElement( "type" );
@@ -45,7 +46,7 @@
      cells := selectsortedset( column, FinancialProductionCell, cell, cell.FinancialProductionRow().RowNr() );
    
      traverse ( cells, Elements, c ) {
        if( column.Index() = 0 ){
        if( column.Index() = minindex ){
          row := c.FinancialProductionRow();
          //Product
          productcellElement := xmlDOM.CreateElement( "cell" );
_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
@@ -36,7 +36,7 @@
    table.GenerateColumn( owner );
    //取当前版本的product planning里new supply字段,分大连和长春工厂的产线,进行加总
    //traverse( owner, StockingPoint_MP, stockingpoint ){
    traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '厂内库' ) ){
    traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '厂内库' ) or stockingpoint.ID() = '大连外租库' ){
      iscc                    := stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID().StartsWith( '长春' );
      isdl                    := stockingpoint.ID().StartsWith( 'DL' ) or stockingpoint.ID().StartsWith( '大连' );
    //  unit                    := stockingpoint.Unit();
@@ -59,12 +59,12 @@
            dayperiodname     := dayperiodtime.Format( "M2/D2/Y" );
            periodtime        := pispip.Start().StartOfMonth().Date();
            periodname        := periodtime.Format( "M2/D2/Y" );
            quantity          := [Number]pispip.NewSupplyQuantity();//四舍五入
    //        quantity          := [Number]pispip.NewSupplyQuantity();//四舍五入
            daycolumn         := selectobject( table, FinancialProductionColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
            column            := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
            factoryrow.Initialize( daycolumn, quantity );
            factoryrow.Initialize( column, quantity );
            allrow.Initialize( column, quantity );
            factoryrow.Initialize( daycolumn, pispip.NewSupplyQuantity() );
            factoryrow.Initialize( column, pispip.NewSupplyQuantity() );
            allrow.Initialize( column, pispip.NewSupplyQuantity() );
          }    
        }
      }
_Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitiateSearch (
  MacroPlan owner
) as FinancialProductionReport
{
  TextBody:
  [*
    // ç”„兰鸽 Sep-29-2024 (created)
    allunit                   := FinancialProductionReport::GetDefaultAllUnit();
    search                    := owner.FinancialProductionSearch();
    if( isnull( owner.FinancialProductionSearch() ) ){
      owner.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
    }else{
      search                  := owner.FinancialProductionSearch();
      search.Unit( allunit );
      search.Generation( allunit );
      search.MqbMlb( allunit );
      search.Power( allunit );
    }
    table                     := selectobject( owner, FinancialProductionSource.FinancialProductionReport, table, table.IsShow() );
    if( not isnull( table ) ){
      products                := selectset( owner, Product_MP, product, true );
      table.Generate( search, products );
    }
    return table;
  *]
}
_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
@@ -33,7 +33,8 @@
    
    tableElement.AppendChild( productcolumnelement ); 
    tableElement.AppendChild( unitcolumnelement ); 
    traverse ( table, FinancialSalesColumn, column ) {
    minindex        := min( table, FinancialSalesColumn, column, not column.IsDay(), column.Index() );
    traverse ( table, FinancialSalesColumn, column, not column.IsDay() ) {
      columnelement := xmlDOM.CreateElement( "column" );
      nameelement   := xmlDOM.CreateElement( "name" );
      typeelement   := xmlDOM.CreateElement( "type" );
@@ -45,7 +46,7 @@
      cells := selectsortedset( column, FinancialSalesCell, cell, cell.FinancialSalesRow().RowNr() );
    
      traverse ( cells, Elements, c ) {
        if( column.Index() = 0 ){
        if( column.Index() = minindex ){
          row := c.FinancialSalesRow();
          //Product
          productcellElement := xmlDOM.CreateElement( "cell" );
_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -83,27 +83,29 @@
      //是否属于长春装配线
    //  iscc                  := unit.ID() = ccspline or exists( parentunits, Elements, punit, punit.ID() = ccspline );
    //  if( table.IsInUnit( stockingpoint, ccspline ) ){
        traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and pisp.Product_MP().MQBMLB() = 'MQB'
        traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf()
                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear 
                              and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ) ){//产品为MQB
          product           := pisp.Product_MP();
          allrow            := table.GetRow( allunit, product );
          ccrow             := table.GetRow( ccunit, product );
          products.Add( product );
          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
                    and pispip.Period_MP().StartDate() < startofnextyear
                    and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){
            dayperiodtime   := pispip.Start().Date();
            dayperiodname   := dayperiodtime.Format( "M2/D2/Y" );
            periodtime      := pispip.Start().StartOfMonth().Date();
            periodname      := periodtime.Format( "M2/D2/Y" );
            daycolumn       := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
            column          := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
            quantity        := ifexpr( isdl, [Number]pispip.NewSupplyQuantity(), [Number]pispip.DependentDemandAndSalesDemandQuantity() );//四舍五入
            ccrow.Initialize( column, quantity );//取Total Demand字段按月汇总需求数量
            ccrow.Initialize( daycolumn, quantity );
            allrow.Initialize( column, quantity );
          if( isdl or pisp.Product_MP().MQBMLB() = 'MQB' ){
            factoryrow      := table.GetRow( ifexpr( isdl, dlunit, ccunit ), product );
            products.Add( product );
            traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
                      and pispip.Period_MP().StartDate() < startofnextyear
                      and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){
              dayperiodtime := pispip.Start().Date();
              dayperiodname := dayperiodtime.Format( "M2/D2/Y" );
              periodtime    := pispip.Start().StartOfMonth().Date();
              periodname    := periodtime.Format( "M2/D2/Y" );
              daycolumn     := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
              column        := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
              quantity      := ifexpr( isdl, [Number]pispip.NewSupplyQuantity(), [Number]pispip.DependentDemandAndSalesDemandQuantity() );//四舍五入
              factoryrow.Initialize( column, quantity );//取Total Demand字段按月汇总需求数量
              factoryrow.Initialize( daycolumn, quantity );
              allrow.Initialize( column, quantity );
            }
          }
        }
    //  }
_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitializeNew (
  MacroPlan owner
)
{
  Description: '初始化'
  TextBody:
  [*
    // ç”„兰鸽 Jun-24-2024 (created)
    owner.FinancialSalesSource( relflush );
    products                  := construct( Product_MPs );
    allunit                   := FinancialSalesReport::GetDefaultAllUnit();
    ccunit                    := FinancialSalesReport::GetDefaultCCUnit();
    dlunit                    := FinancialSalesReport::GetDefaultDLUnit();
    ccsalessegment            := FinancialSalesReport::GetSalesSegmentCC();
    tjsalessegment            := FinancialSalesReport::GetSalesSegmentTJ();
    fssalessegment            := FinancialSalesReport::GetSalesSegmentFS();
    //ccspline                  := FinancialSalesReport::GetStockingPointCCLine();
    //dlspline                  := FinancialSalesReport::GetStockingPointDLLine();
    //ccrent                    := FinancialSalesReport::GetStockingPointCCRent();
    source                    := owner.FinancialSalesSource( relnew, IsImport := false, Name := FinancialSalesReport::GetDefaultName() );
    table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
    showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
    startofplanning           := owner.StartOfPlanning().Date();
    //startofyear               := startofplanning.StartOfYear();
    startofnextyear           := startofplanning.StartOfNextYear();
    search                    := owner.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
    table.GenerateColumn( owner );
    //首先在forecast界面查找sales segment为长春的所有需求,识别出MLB的所有产品,每个产品按月汇总需求数量
    traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() < startofnextyear and forecast.Quantity() <> 0
              and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){
      salessegment            := forecast.SalesSegment_MP();
      parentsalessegments     := salessegment.GetAllParent();
      stockingpoint           := forecast.StockingPointID();
      product                 := forecast.Product_MP();
      //是否属于长春
      iscc                    := salessegment.Name().StartsWith( ccsalessegment ) or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( ccsalessegment ) );
      isccrent                := iscc and stockingpoint.EndsWith( '外租库' ) and ( stockingpoint.StartsWith( 'CC' ) or stockingpoint.StartsWith( '长春' ) );
      isdl                    := salessegment.Name().StartsWith( tjsalessegment ) or salessegment.Name().StartsWith( fssalessegment )
                                  or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( tjsalessegment ) )
                                  or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( fssalessegment ) );
      //Forecast的Sales Segment为长春,识别出MLB的所有产品汇总
      //大连财务销量:首先在forecast界面查找Sales Segment是天津和佛山的所有需求,每个产品按月汇总需求数量 and forecast.Product_MP().MQBMLB() = 'MLB' )
      if( ( iscc and product.MQBMLB() = 'MLB' ) or ( isccrent and product.MQBMLB() = 'MQB' ) or isdl ){
        //获取合计行
        allrow               := table.GetRow( allunit, product );
        //获取工厂行
        factoryrow           := table.GetRow( ifexpr( isdl, dlunit, ccunit ), product );
        products.Add( product );
        traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){
          dayperiodtime      := psdip.StartDate();
          dayperiodname      := dayperiodtime.Format( "M2/D2/Y" );
          periodtime         := psdip.StartDate().StartOfMonth();
          periodname         := periodtime.Format( "M2/D2/Y" );
    //      info( '-------------------------', periodname, periodtime );
          daycolumn          := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
          column             := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
    //      info( '-------------------------', column.Name() );
          quantity   := [Number]psdip.Quantity();//四舍五入
          factoryrow.Initialize( column, quantity );
          factoryrow.Initialize( daycolumn, quantity );
          allrow.Initialize( column, quantity );
        }
      }
    }
    //从Product planning查找库存点为大连发动机的长春外租库,取New supply字段按月汇总需求数量
    traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID() = '大连发动机的长春外租库' ){
        traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf()
                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear
                              and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ) ){//产品为MQB
          product           := pisp.Product_MP();
          allrow            := table.GetRow( allunit, product );
          factoryrow        := table.GetRow( dlunit, product );
          products.Add( product );
          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
                    and pispip.Period_MP().StartDate() < startofnextyear
                    and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){
            dayperiodtime   := pispip.Start().Date();
            dayperiodname   := dayperiodtime.Format( "M2/D2/Y" );
            periodtime      := pispip.Start().StartOfMonth().Date();
            periodname      := periodtime.Format( "M2/D2/Y" );
            daycolumn       := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
            column          := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
            quantity        := [Number]pispip.NewSupplyQuantity();//四舍五入
            factoryrow.Initialize( column, quantity );//取Total Demand字段按月汇总需求数量
            factoryrow.Initialize( daycolumn, quantity );
            allrow.Initialize( column, quantity );
          }
        }
    //  }
    }
    //startofnextyearlead       := startofplanning.StartOfNextYear() + FinancialSalesReport::GetDefaultTripLeadingTime();
    //大连财务销量:长春的需求需要在trip plan里面找到起始库存点为大连装配线边库,目的地为长春外租库的产品,由于需要考虑产品运输lead time,每个月的汇总数据需要推迟两天进行计算
    //traverse( owner, Unit.Lane.LaneLeg, laneleg ){
    //  //起始库存点是否是大连装配线边库
    //  originsp              := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
    //  isdlspline            := table.IsInUnit( originsp, dlspline );
    //  //目的地是否是长春外租库
    //  destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
    //  isccrent              := table.IsInUnit( destisp, ccrent );
    //  if( isdlspline and isccrent ){
    //    traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead and exists( trip, ProductInTrip, pit, pit.Quantity() <> 0 ) ){
    ////      periodtime        := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date();
    //      dayperiodtime     := trip.Departure().Date();
    //      dayperiodname     := dayperiodtime.Format( "M2/D2/Y" );
    //      periodtime        := trip.Departure().StartOfMonth().Date();
    //      periodname        := periodtime.Format( "M2/D2/Y" );
    //
    //      daycolumn         := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
    //      column            := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
    //      if( not isnull( column ) ){
    //        traverse( trip, ProductInTrip, pit, pit.Quantity() <> 0 ){
    //          product       := pit.Product_MP();
    //          products.Add( product );
    //          quantity      := [Number]pit.Quantity();//四舍五入
    //          dlrow         := table.GetRow( dlunit, pit.Product_MP() );
    //          dlrow.Initialize( column, quantity );//汇总数量
    //          dlrow.Initialize( daycolumn, quantity );
    //
    //          allrow        := table.GetRow( allunit, pit.Product_MP() );
    //          allrow.Initialize( column, quantity );
    //        }
    //      }
    //    }
    //  }
    //}
    rows := selectsortedset( table, FinancialSalesRow, row, row.Name() );
    i    := 0;
    traverse( rows, Elements, e ){
      e.RowNr( i );
      i := i + 1;
    }
    showtable.Generate( search, products );
  *]
}
_Main/BL/Type_FinancialSalesSource/StaticMethod_InitiateSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitiateSearch (
  MacroPlan owner
) as FinancialSalesReport
{
  TextBody:
  [*
    // ç”„兰鸽 Sep-29-2024 (created)
    allunit                   := FinancialSalesReport::GetDefaultAllUnit();
    search                    := owner.FinancialSalesSearch();
    if( isnull( search ) ){
      owner.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
    }else{
      search                  := owner.FinancialSalesSearch();
      search.Unit( allunit );
      search.Generation( allunit );
      search.MqbMlb( allunit );
      search.Power( allunit );
    }
    table                     := selectobject( owner, FinancialSalesSource.FinancialSalesReport, table, table.IsShow() );
    if( not isnull( table ) ){
      products                := selectset( owner, Product_MP, product, true );
      table.Generate( search, products );
    }
    return table;
  *]
}
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,8 @@
  TextBody:
  [*
    // ç”„兰鸽 Jun-28-2024 (created)
    return '长春工厂';
    //return '长春工厂';
    return 'VWED CC';
    //return 'Assembly Plant (France)';
  *]
}
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,8 @@
  TextBody:
  [*
    // ç”„兰鸽 Jun-28-2024 (created)
    return '大连工厂';
    //return '大连工厂';
    return 'VWED DL';
    //return 'Assembly Plant (Spain)';
  *]
}
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
@@ -44,38 +44,38 @@
    ccsvaluecumulant          := [Real]0;
    
    traverse( table, FinancialWeeklyColumn, column ){
      productioncolumn      := selectobject( productiontable, FinancialProductionColumn, pcolumn, pcolumn.Name() = column.Name() and pcolumn.Period() = column.Period() );
      salescolumn           := selectobject( salestable, FinancialSalesColumn, scolumn, scolumn.Name() = column.Name() and scolumn.Period() = column.Period() );
      productioncolumn      := selectobject( productiontable, FinancialProductionColumn, pcolumn, pcolumn.Name() = column.Name() and pcolumn.Period() = column.Period() and not pcolumn.IsDay() );
      salescolumn           := selectobject( salestable, FinancialSalesColumn, scolumn, scolumn.Name() = column.Name() and scolumn.Period() = column.Period() and not scolumn.IsDay() );
      
      //产量汇总
      totalpvalue           := [Real]0;
      dlpvalue              := [Real]0;
      ccpvalue              := [Real]0;
      traverse( productioncolumn, FinancialProductionCell, cell, [Real]cell.Value() > 0 ){
      traverse( productioncolumn, FinancialProductionCell, cell, cell.Quantity() > 0 ){
        unit                := cell.FinancialProductionRow().Unit();
        
        if( unit = allunit ){
          totalpvalue       := totalpvalue + [Real]cell.Value();
          totalpvalue       := totalpvalue + cell.Quantity();
          if( column.Period() = startofplanning.StartOfMonth().Date() ){
            totalpvaluecumulant := totalpvaluecumulant - cell.PlanValue();
          }
        }else if( unit = dlunit ){
          dlpvalue          := dlpvalue + [Real]cell.Value();
          dlpvalue          := dlpvalue + cell.Quantity();
          if( column.Period() = startofplanning.StartOfMonth().Date() ){
            dlpvaluecumulant := dlpvaluecumulant - cell.PlanValue();
          }
        }else if( unit = ccunit ){
          ccpvalue          := ccpvalue + [Real]cell.Value();
          ccpvalue          := ccpvalue + cell.Quantity();
          if( column.Period() = startofplanning.StartOfMonth().Date() ){
            ccpvaluecumulant := ccpvaluecumulant - cell.PlanValue();
          }
        }
      }
      totalpcell            := column.FinancialWeeklyCell( relnew, Value := [String]totalpvalue );
      totalpcell            := column.FinancialWeeklyCell( relnew, Value := [String]( [Number]totalpvalue ) );
      totalproduction.FinancialWeeklyCell( relinsert, totalpcell );
      dlpcell               := column.FinancialWeeklyCell( relnew, Value := [String]dlpvalue );
      dlpcell               := column.FinancialWeeklyCell( relnew, Value := [String]( [Number]dlpvalue ) );
      dlproduction.FinancialWeeklyCell( relinsert, dlpcell );
      ccpcell               := column.FinancialWeeklyCell( relnew, Value := [String]ccpvalue );
      ccpcell               := column.FinancialWeeklyCell( relnew, Value := [String]( [Number]ccpvalue ) );
      ccproduction.FinancialWeeklyCell( relinsert, ccpcell );
      
      //销量汇总
_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
@@ -26,17 +26,17 @@
    startofyear               := startofplanning.StartOfYear();
    startofnextyear           := startofplanning.StartOfNextYear();
    
    search                    := owner.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
    search                    := owner.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, Category := Translations::MP_GlobalParameters_Day(), StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
    
    table.GenerateColumn( owner, 'All', startofyear, startofnextyear );
    //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) );
    //库存数量为Actual inventories里面的点Planned inventories字段库存量加总
    //traverse( owner, StockingPoint_MP, stockingpoint ){
    traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '厂内库' ) ){
    traverse( owner, StockingPoint_MP, stockingpoint ){
    //traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '厂内库' ) ){
    //  unit                    := stockingpoint.Unit();
    //  parentunits             := unit.GetAllParent();
      //是否属于长春工厂
      iscc                    := stockingpoint.ID().StartsWith( 'CC' );//unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
      iscc                    := stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID() = '长春' ;//unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
    //  iscc                    := stockingpoint.ID().StartsWith( 'CC' ) or unit.ID().StartsWith( 'CC' ) or exists( parentunits, Elements, punit, punit.ID().StartsWith( 'CC' ) );
      //是否属于大连工厂
      isdl                    := stockingpoint.ID().StartsWith( '大连' );//unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
@@ -59,6 +59,7 @@
                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
    
          traverse( pispips, Elements, pispip ){
            products.Add( pisp.Product_MP() );
            period            := pispip.Period_MP();
            periodtime        := period.Start().Date();
            periodname        := periodtime.Format( "M2/D2/Y" );
@@ -150,7 +151,7 @@
      if( exists( e, InventorySummaryCell, cell, cell.AverageInventory() <> 0 or cell.EndingInventory() <> 0 or cell.MaximumInventory() <> 0 or cell.MinimumInventory() <> 0 ) ){
        e.RowNr( i );
        i := i + 1;
      }{
      }else{
        e.Delete();
      }
    }
_Main/BL/Type_InventorySummarySource/StaticMethod_InitiateSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitiateSearch (
  MacroPlan owner
) as InventorySummaryReport
{
  TextBody:
  [*
    // ç”„兰鸽 Sep-29-2024 (created)
    allunit                   := InventorySummaryReport::GetDefaultAllUnit();
    search                    := owner.InventorySummarySearch();
    if( isnull( search ) ){
      owner.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, Category := Translations::MP_GlobalParameters_Day(), StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
    }else{
      search                  := owner.InventorySummarySearch();
      search.Unit( allunit );
      search.Generation( allunit );
      search.MqbMlb( allunit );
      search.Power( allunit );
      search.Category( Translations::MP_GlobalParameters_Day() );
      search.StartDate( Date::MinDate() );
      search.EndDate( Date::MaxDate() );
    }
    table                     := selectobject( owner, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
    if( not isnull( table ) ){
      products                := selectset( owner, Product_MP, product, true );
      table.Generate( search, products );
    }
    return table;
  *]
}
_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
@@ -9,8 +9,8 @@
    // ç”„兰鸽 Jun-24-2024 (created)
    owner.FinancialProductionSource( relflush );
    productparent             := MachiningPipelineReport::GetDefaultProductParent();
    ccunit                    := MachiningPipelineReport::GetDefaultCCUnit();
    dlunit                    := MachiningPipelineReport::GetDefaultDLUnit();
    //ccunit                    := MachiningPipelineReport::GetDefaultCCUnit();
    //dlunit                    := MachiningPipelineReport::GetDefaultDLUnit();
    //allunit                   := EnginePipelineReport::GetDefaultAllUnit();
    source                    := owner.MachiningPipelineSource( relnew, Name := MachiningPipelineReport::GetDefaultName() );
    table                     := source.Report( relnew, ID := source.Name(), Name := source.Name() );
@@ -32,19 +32,21 @@
      //是否属于大连工厂
      isdl                    := stockingpoint.ID().StartsWith( 'DL' ) or unit.ID().StartsWith( 'DL' ) or exists( parentunits, Elements, punit, punit.ID().StartsWith( 'DL' ) );//unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
      //是否属于长春装配线CC厂内库
      isccassemnly            := stockingpoint.ID().EndsWith( '厂内库' ) and ( stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID().StartsWith( '长春' ) );//unit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() );
    //  isccassemnly            := stockingpoint.ID().EndsWith( '厂内库' ) and ( stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID().StartsWith( '长春' ) );//unit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() );
      //是否属于大连装配线DL厂内库
      isdlassemnly            := stockingpoint.ID().EndsWith( '厂内库' ) and ( stockingpoint.ID().StartsWith( 'DL' ) or stockingpoint.ID().StartsWith( '大连' ) );//unit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() );
    //  isdlassemnly            := stockingpoint.ID().EndsWith( '厂内库' ) and ( stockingpoint.ID().StartsWith( 'DL' ) or stockingpoint.ID().StartsWith( '大连' ) );//unit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() );
      //是否属于长春机加产线
      isccproduction          := stockingpoint.ID().EndsWith( '线边库' ) and ( stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID().StartsWith( '长春' ) );//unit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() );
      //是否属于大连机加产线
      isdlproduction          := unit.ID().EndsWith( 'MoMo' ) and unit.ID().StartsWith( 'DL' );//unit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() );
      if( iscc or isdl ){
        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() 
    //              and exists( pisp.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent )
                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 ) ) ){
                  and exists( pisp.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent )
                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 or pispip.DependentDemandAndSalesDemandQuantity() <> 0 ) ) ){
          isccassemnly        := stockingpoint.ID().EndsWith( pisp.Product_MP().ParentID() + '线边库' ) and ( stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID().StartsWith( '长春' ) );
          isdlassemnly        := stockingpoint.ID().EndsWith( pisp.Product_MP().ParentID() ) and ( stockingpoint.ID().StartsWith( 'DL' ) or stockingpoint.ID().StartsWith( '大连' ) );
          pispips             := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 ), pispip.Start() );
                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 or pispip.DependentDemandAndSalesDemandQuantity() <> 0 ), pispip.Start() );
          traverse( pispips, Elements, pispip ){
            supplyquantity    := [Number]pispip.NewSupplyQuantity();//四舍五入
            //天
@@ -54,12 +56,13 @@
            
            //装配线
            if( isccassemnly or isdlassemnly ){
              quantity        := [Number]pispip.DependentDemandAndSalesDemandQuantity();//四舍五入
              if( isccassemnly ){
                daycolumn.CCAssemblyPlanQty( daycolumn.CCAssemblyPlanQty() + supplyquantity );
                weekcolumn.CCAssemblyPlanQty( weekcolumn.CCAssemblyPlanQty() + supplyquantity );
                daycolumn.CCAssemblyPlanQty( daycolumn.CCAssemblyPlanQty() + quantity );
                weekcolumn.CCAssemblyPlanQty( weekcolumn.CCAssemblyPlanQty() + quantity );
              } else {
                daycolumn.DLAssemblyPlanQty( daycolumn.DLAssemblyPlanQty() + supplyquantity );
                weekcolumn.DLAssemblyPlanQty( weekcolumn.DLAssemblyPlanQty() + supplyquantity );
                daycolumn.DLAssemblyPlanQty( daycolumn.DLAssemblyPlanQty() + quantity );
                weekcolumn.DLAssemblyPlanQty( weekcolumn.DLAssemblyPlanQty() + quantity );
              } 
            }
            
@@ -95,17 +98,17 @@
      productparents        := product.GetAllParent();
      if( exists( productparents, Elements, e, e.ID() = productparent ) ){//查询产品类型是发动机
        //起始库存点是否是大连or长春
        originsp              := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
        originunit            := originsp.Unit();
        originparentunits     := originunit.GetAllParent();
        originiscc            := originsp.ID() = ccunit or originunit.ID() = ccunit or exists( originparentunits, Elements, punit, punit.ID() = ccunit );
        originisdl            := originsp.ID() = dlunit or originunit.ID() = dlunit or exists( originparentunits, Elements, punit, punit.ID() = dlunit );
    //    originsp              := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
    //    originunit            := originsp.Unit();
    //    originparentunits     := originunit.GetAllParent();
        originiscc            := tprow.SourceStockpoingPointID() = 'CC';//originsp.ID() = ccunit or originunit.ID() = ccunit or exists( originparentunits, Elements, punit, punit.ID() = ccunit );
        originisdl            := tprow.SourceStockpoingPointID() = 'DL';//originsp.ID() = dlunit or originunit.ID() = dlunit or exists( originparentunits, Elements, punit, punit.ID() = dlunit );
        //目的地是否是长春外租库
        destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
        destiunit             := destisp.Unit();
        destiparentunits      := destiunit.GetAllParent();
        destiiscc             := destisp.ID() = ccunit or destiunit.ID() = ccunit or exists( destiparentunits, Elements, punit, punit.ID() = ccunit );
        destiisdl             := destisp.ID() = dlunit or destiunit.ID() = dlunit or exists( destiparentunits, Elements, punit, punit.ID() = dlunit );
    //    destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
    //    destiunit             := destisp.Unit();
    //    destiparentunits      := destiunit.GetAllParent();
        destiiscc             := tprow.TargetStockpoingPointID() = 'CC';//destisp.ID() = ccunit or destiunit.ID() = ccunit or exists( destiparentunits, Elements, punit, punit.ID() = ccunit );
        destiisdl             := tprow.TargetStockpoingPointID() = 'DL';//destisp.ID() = dlunit or destiunit.ID() = dlunit or exists( destiparentunits, Elements, punit, punit.ID() = dlunit );
        if( ( originiscc and destiisdl ) or ( originisdl and destiiscc ) ){
          row := table.GetRow( tprow.ProductID() );
          traverse( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() <> Date::MinDate() ){
@@ -114,7 +117,6 @@
            //周
            weekcolumn       := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), tpcell.TransferPlanColumn().ColumnDate() );
            quantity         := [Real]tpcell.Value();//四舍五入
            if( not isnull( daycolumn ) ){
              row.SetCellTransferValue( daycolumn, ( originiscc and destiisdl ), quantity );
            }
_Main/BL/Type_MachiningPipelineSource0/StaticMethod_InitiateSearch.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: #root
StaticMethod InitiateSearch (
  MacroPlan owner
) as MachiningPipelineReport
{
  TextBody:
  [*
    // ç”„兰鸽 Sep-29-2024 (created)
    search                    := owner.MachiningPipelineSearch();
    if( isnull( search ) ){
      owner.MachiningPipelineSearch( relnew, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), TimeUnit := Translations::MP_GlobalParameters_Day() );
    }else{
      search                  := owner.MachiningPipelineSearch();
      search.TimeUnit( Translations::MP_GlobalParameters_Day() );
      search.StartDate( Date::MinDate() );
      search.EndDate( Date::MaxDate() );
    }
    table                     := selectobject( owner, MachiningPipelineSource.Report, table, table.IsShow() );
    if( not isnull( table ) ){
      products                := selectset( owner, Product_MP, product, true );
      table.Generate( search, products );
    }
    return table;
  *]
}
_Main/BL/Type_MacroPlan/Attribute_A_PreviousScenaioName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute A_PreviousScenaioName
{
  #keys: '3[413988.0.1581730054][413988.0.1581730053][413988.0.1581730055]'
  Description: '用于下线计划确认功能'
  ValueType: String
}
_Main/BL/Type_OfflinePlanCell/Attribute_IsQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute IsQuantity
{
  #keys: '3[413988.0.1565814440][413988.0.1565814439][413988.0.1565814441]'
  ValueType: Boolean
}
_Main/BL/Type_OfflinePlanCell/Function_CalcIsQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcIsQuantity
{
  TextBody:
  [*
    // lihongji Sep-27-2024 (created)
    value := ifexpr( this.OfflinePlanRow().Type() = "1" and this.OfflinePlanColumn().ColumnIndex() > 1 and this.Quantity() > 0, true, false );
    this.IsQuantity( value );
  *]
}
_Main/BL/Type_OfflinePlanCell/Function_CalcQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Function CalcQuantity
{
  TextBody:
  [*
    // lihongji Sep-27-2024 (created)
    value := ifexpr( ( this.OfflinePlanRow().Type() = "1" or this.OfflinePlanRow().Type() = "2" ) and this.OfflinePlanColumn().ColumnIndex() > 1,
                     guard( [Number]this.Value(), 0 ), 0 );
    this.Quantity( value );
  *]
}
_Main/BL/Type_OfflinePlanCell/Method_QuantityGreaterThan0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Method QuantityGreaterThan0 (
  String type,
  String pl
) as Boolean
{
  TextBody: 'return this.OfflinePlanRow().Type() = type and this.OfflinePlanRow().ProductionLine() = pl and this.Quantity() > 0.0;'
}
_Main/BL/Type_OfflinePlanCell/StaticMethod_DeductionOfReplacementLoss.qbl
@@ -36,7 +36,7 @@
                                         tempOPC.OfflinePlanRow().Type() = "1" and 
                                         tempOPC.OfflinePlanRow().ProductID() = firstOrderCell.OfflinePlanRow().ProductID()
                                        );
            firstQuantityCell.Value( [String] ( [Number]firstQuantityCell.Value() - cls.ChangeLossNr() ) );
            firstQuantityCell.Value( [String] ( [Number]firstQuantityCell.Value() - cls.ChangeLossNumber() ) );
    //        info( "当前列时间:", opc.ColumnDate().Format( "Y-M2-D2" ), "    å½“前序号:", i, "    å•元格的值:", firstOrderCell.Value(), "    äº§å“åï¼š", firstOrderCell.OfflinePlanRow().ProductID(),
    //              "下一个序号:", i + 1, "    å•元格的值:", secondOrderCell.Value(), "    äº§å“åï¼š", secondOrderCell.OfflinePlanRow().ProductID() );
          }
_Main/BL/Type_OfflinePlanCell/StaticMethod_Download.qbl
@@ -1,7 +1,8 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Download (
  MacroPlan macroPlan
  MacroPlan macroPlan,
  OfflinePlanRows selectedOPRs
) as BinaryValue
{
  TextBody:
@@ -13,12 +14,12 @@
    
    opt  := maxselect( macroPlan, OfflinePlanTable, tempOPT, true, tempOPT.SaveDateTime() );
    opcs := selectsortedset( opt, OfflinePlanColumn, tempOPC, true, tempOPC.ColumnDate() );
    oprs := selectsortedset( opt, OfflinePlanRow, tempOPR, true, tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    oprs := selectsortedset( selectedOPRs, Elements, tempOPR, true, tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
    traverse ( opcs, Elements, opc ) {
      column := xmlDOM.CreateElement( "column" );
      name   := xmlDOM.CreateElement( "name" );
      type   := xmlDOM.CreateElement( "type" );
      name.TextContent( ifexpr( opc.ColumnDate() < macroPlan.StartOfPlanning().Date(), "", opc.ColumnDate().Format( "Y/M2/D2" ) ) );
      name.TextContent( ifexpr( opc.ColumnDate() < macroPlan.StartOfPlanning().Date(), "*", opc.ColumnDate().Format( "Y/M2/D2" ) ) );
      type.TextContent( "String" );
      column.AppendChild( name );
      column.AppendChild( type );
_Main/BL/Type_OfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl
@@ -35,12 +35,13 @@
          }
          
          // èµ‹å€¼å•元格
          cellQuantity := opc.OfflinePlanCell( relnew, Value := [String]ns.Quantity().Round( 0 ), Shift := ns.PeriodTask_MP().UnitPeriod().astype( UnitPeriodTimeBase ).ShiftPattern().Name(), Quantity := ns.Quantity() );
          cellQuantity.OfflinePlanRow( relset, oprQuantity );
          cellOrder := opc.OfflinePlanCell( relnew, Value := "单号" + [String]ns.Quantity().Round( 0 ) + "_" + [String]( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ),
                                            Quantity := ns.Quantity(),
                                            InventoryWeight := ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() );
          cellOrder.OfflinePlanRow( relset, oprOrder );
          cellQuantity := oprQuantity.OfflinePlanCell( relnew, Value := [String]ns.Quantity().Round( 0 ), Shift := ns.PeriodTask_MP().UnitPeriod().astype( UnitPeriodTimeBase ).ShiftPattern().Name() );
          cellQuantity.OfflinePlanColumn( relset, opc );
          cellOrder := oprOrder.OfflinePlanCell( relnew,
    //                                             Value := "单号" + [String]ns.Quantity().Round( 0 ) + "_" + [String]( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ),
                                                 Value := [String]ns.Quantity().Round( 0 ),
                                                 InventoryWeight := ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() );
          cellOrder.OfflinePlanColumn( relset, opc );
        }
      }
      
@@ -59,30 +60,30 @@
    typeOPC    := opt.OfflinePlanColumn( relnew, ColumnDate := macroPlan.StartOfPlanning().Date() - 1 );
    traverse ( opt, OfflinePlanRow, opr ) {
      if ( opr.Type() = "0" ) {
        productLineCell := productOPC.OfflinePlanCell( relnew, Value := opr.ProductionLine() );
        productLineCell.OfflinePlanRow( relset, opr );
        productLineCell := opr.OfflinePlanCell( relnew, Value := opr.ProductionLine() );
        productLineCell.OfflinePlanColumn( relset, productOPC );
      } else if( opr.Type() = "1" ) {
        productCell := productOPC.OfflinePlanCell( relnew, Value := opr.ProductID() + ifexpr( opr.Notes() = "", "", "-" + opr.Notes() ) );
        productCell.OfflinePlanRow( relset, opr );
        typeCell    := typeOPC.OfflinePlanCell( relnew, Value :=  "Quantity" );
        typeCell.OfflinePlanRow( relset, opr );
        productCell := opr.OfflinePlanCell( relnew, Value := opr.ProductID() + ifexpr( opr.Notes() = "", "", "-" + opr.Notes() ) );
        productCell.OfflinePlanColumn( relset, productOPC );
        typeCell    := opr.OfflinePlanCell( relnew, Value :=  "Quantity" );
        typeCell.OfflinePlanColumn( relset, typeOPC );
      } else if ( opr.Type() = "2" ) {
        typeCell    := typeOPC.OfflinePlanCell( relnew, Value :=  "Order" );
        typeCell.OfflinePlanRow( relset, opr );
        typeCell    := opr.OfflinePlanCell( relnew, Value :=  "Order" );
        typeCell.OfflinePlanColumn( relset, typeOPC );
      } else if ( opr.Type() = "3" ) {
        totalCell := productOPC.OfflinePlanCell( relnew, Value := "合计" );
        totalCell.OfflinePlanRow( relset, opr );
        totalCell := typeOPC.OfflinePlanCell( relnew, Value :=  "总量" );
        totalCell.OfflinePlanRow( relset, opr );
        totalCell := opr.OfflinePlanCell( relnew, Value := "合计" );
        totalCell.OfflinePlanColumn( relset, productOPC );
        totalCell := opr.OfflinePlanCell( relnew, Value :=  "总量" );
        totalCell.OfflinePlanColumn( relset, typeOPC );
      } else if ( opr.Type() = "4" ) {
        shiftCell := typeOPC.OfflinePlanCell( relnew, Value :=  "班次" );
        shiftCell.OfflinePlanRow( relset, opr );
        shiftCell := opr.OfflinePlanCell( relnew, Value :=  "班次" );
        shiftCell.OfflinePlanColumn( relset, typeOPC );
      } else if ( opr.Type() = "5" ) {
        shiftStartDateCell := typeOPC.OfflinePlanCell( relnew, Value :=  "班次开始时间" );
        shiftStartDateCell.OfflinePlanRow( relset, opr );
        shiftStartDateCell := opr.OfflinePlanCell( relnew, Value :=  "班次开始时间" );
        shiftStartDateCell.OfflinePlanColumn( relset, typeOPC );
      } else if ( opr.Type() = "6" ) {
        shiftEndDateCell := typeOPC.OfflinePlanCell( relnew, Value :=  "班次结束时间" );
        shiftEndDateCell.OfflinePlanRow( relset, opr );
        shiftEndDateCell := opr.OfflinePlanCell( relnew, Value :=  "班次结束时间" );
        shiftEndDateCell.OfflinePlanColumn( relset, typeOPC );
      }
    }
    
@@ -92,35 +93,39 @@
    shiftStartDateOPRs := selectset( opt, OfflinePlanRow, tempOPR, tempOPR.Type() = "5" );
    shiftEndDateOPRs   := selectset( opt, OfflinePlanRow, tempOPR, tempOPR.Type() = "6" );
    traverse ( opt, OfflinePlanColumn, opc, opc.OfflinePlanCell( relsize ) > 0 and opc.ColumnDate() >= macroPlan.StartOfPlanning().Date() ) {
      // è¡¥å…¨æ€»é‡
      traverse ( totalOPRs, Elements, totalOPR ) {
        total     := sum( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = totalOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1", [Real]tempOPC.Value() );
        totalCell := opc.OfflinePlanCell( relnew, Value := [String]total );
        totalCell.OfflinePlanRow( relset, totalOPR );
        totalCell := totalOPR.OfflinePlanCell( relnew, Value := [String]total );
        totalCell.OfflinePlanColumn( relset, opc );
      }
      
      // &班次
      traverse ( shiftOPRs, Elements, shiftOPR ) {
        shift := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = shiftOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1" ); 
        if ( not isnull( shift ) ) {
          shiftCell := opc.OfflinePlanCell( relnew, Value := shift.Shift() );
          shiftCell.OfflinePlanRow( relset, shiftOPR );
          shiftCell := shiftOPR.OfflinePlanCell( relnew, Value := shift.Shift() );
          shiftCell.OfflinePlanColumn( relset, opc );
        }
      }
      
      // ç­æ¬¡å¼€å§‹æ—¶é—´
      traverse ( shiftStartDateOPRs, Elements, ssdOPR ) {
        shift := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = ssdOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1" ); 
        if ( not isnull( shift ) ) {
          startDate     := guard( minselect( macroPlan, ShiftPattern.ShiftDayTime, tempSDT, tempSDT.ShiftPattern().Name() = shift.Shift(), tempSDT.Sequence() ).StartDateTime().Format( "H:m" ), "" );
          startDateCell := opc.OfflinePlanCell( relnew, Value := startDate );
          startDateCell.OfflinePlanRow( relset, ssdOPR );
          startDateCell := ssdOPR.OfflinePlanCell( relnew, Value := startDate );
          startDateCell.OfflinePlanColumn( relset, opc );
        }
      }
      
      // ç­æ¬¡ç»“束时间
      traverse ( shiftEndDateOPRs, Elements, sedOPR ) {
        shift := select( opc, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanRow().ProductionLine() = sedOPR.ProductionLine() and tempOPC.OfflinePlanRow().Type() = "1" ); 
        if ( not isnull( shift ) ) {
          endDate     := guard( maxselect( macroPlan, ShiftPattern.ShiftDayTime, tempSDT, tempSDT.ShiftPattern().Name() = shift.Shift(), tempSDT.Sequence() ).EndDateTIme().Format( "H:m" ), "" );
          endDateCell := opc.OfflinePlanCell( relnew, Value := endDate );
          endDateCell.OfflinePlanRow( relset, sedOPR );
          endDateCell := sedOPR.OfflinePlanCell( relnew, Value := endDate );
          endDateCell.OfflinePlanColumn( relset, opc );
        }
      }
    }
@@ -136,6 +141,18 @@
      indexDate := indexDate + 1;
    }
    
    // è¡¥å…¨ç©ºæ ¼å­
    traverse ( opt, OfflinePlanRow, opr ) {
      traverse ( opt, OfflinePlanColumn, opc ) {
        cell := select( opr, OfflinePlanCell, tempOPC, tempOPC.OfflinePlanColumn() = opc );
        if ( isnull( cell ) ) {
          cell := opr.OfflinePlanCell( relnew, Value := "" );
          cell.OfflinePlanColumn( relset, opc );
        }
      }
    }
    Transaction::Transaction().Propagate( attribute( OfflinePlanCell, Quantity ) );
    Transaction::Transaction().PropagateAll();
    
    // è®¾ç½®ç”Ÿäº§é¡ºåº
@@ -146,12 +163,13 @@
      nextColumn     := indexColumn.NextColumn();
      
      while ( not isnull( indexColumn.NextColumn() ) 
    //          and indexColumn.ColumnDate() <= Date::Construct( 2024, 4, 16 ) // æµ‹è¯•实际场景时可以过滤
    //          and indexColumn.ColumnDate() <= Date::Construct( 2020, 4, 1 ) // æµ‹è¯•实际场景时可以过滤
             ) {
        productionSerialNumber := 1;
        opcs                   := selectsortedset( indexColumn, OfflinePlanCell, tempOPC, tempOPC.FindType( "2", pl ), tempOPC.InventoryWeight() );
        initialSize            := opcs.Size();
        if ( opcs.Size() > 0 ) {
        info( "计划开始时间:", macroPlan.StartOfPlanning().Date().Format( "Y-M2-D2" ), "    ç´¢å¼•时间:", indexDate.Format( "Y-M2-D2" ), "    ä¸ªæ•°ï¼š", opcs.Size() );
        if ( opcs.Size() > 0 ) {
          // åˆ¤å®š1
          previousOPC := maxselect( previousColumn, OfflinePlanCell, tempOPC, tempOPC.FindType( "2", pl ), tempOPC.ProductionSerialNumber() );
          if ( isnull( previousOPC ) or indexColumn.ColumnDate() = macroPlan.StartOfPlanning().Date() ) {
_Main/BL/Type_OfflinePlanColumn/Attribute_IsShow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute IsShow
{
  #keys: '3[413988.0.1565821671][413988.0.1565821670][413988.0.1565821672]'
  ValueType: Boolean
}
_Main/BL/Type_OfflinePlanColumn/DefaultValue_IsShow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  ISOValue: 'true'
  TargetAttribute: IsShow
}
_Main/BL/Type_OfflinePlanColumn/Function_CalcColumnIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcColumnIndex
{
  TextBody:
  [*
    // lihongji Sep-27-2024 (created)
    value := guard( this.PreviousColumn().ColumnIndex() + 1, 0 )
    this.ColumnIndex( value );
  *]
}
_Main/BL/Type_OfflinePlanImportData/Attribute_Date.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Date
{
  #keys: '3[413988.0.1558681449][413988.0.1558681448][413988.0.1558681450]'
  ValueType: Date
}
_Main/BL/Type_OfflinePlanImportData/Attribute_Order.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Order
{
  #keys: '3[413988.0.1558681429][413988.0.1558681428][413988.0.1558681430]'
  ValueType: String
}
_Main/BL/Type_OfflinePlanImportData/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[413988.0.1558681419][413988.0.1558681418][413988.0.1558681420]'
  ValueType: String
}
_Main/BL/Type_OfflinePlanImportData/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[413988.0.1558681439][413988.0.1558681438][413988.0.1558681440]'
  ValueType: String
}
_Main/BL/Type_OfflinePlanImportData/StaticMethod_UpdateCell.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod UpdateCell (
  GeneralExcelImportAndExportDataTable table,
  GeneralExcelImportAndExportDataRow row,
  OfflinePlanTable opt,
  OfflinePlanRow opr
)
{
  TextBody:
  [*
    traverse ( table, GeneralExcelImportAndExportDataColumn, column ) {
      if ( column.ColumnIndex() = 0 ) {
        cell := select( column, GeneralExcelImportAndExportDataCell, tempColumn, tempColumn.GeneralExcelImportAndExportDataRow() = row );
        opc  := select( opt, OfflinePlanColumn, tempOPC, tempOPC.ColumnIndex() = 0 );
        opcell := opr.OfflinePlanCell( relnew, Value := cell.Value() );
        opcell.OfflinePlanColumn( relset, opc );
      } else if ( column.ColumnIndex() = 1 ) {
        cell := select( column, GeneralExcelImportAndExportDataCell, tempColumn, tempColumn.GeneralExcelImportAndExportDataRow() = row );
        opc  := select( opt, OfflinePlanColumn, tempOPC, tempOPC.ColumnIndex() = 1 );
        opcell := opr.OfflinePlanCell( relnew, Value := cell.Value() );
        opcell.OfflinePlanColumn( relset, opc );
      } else {
        cell   := select( column, GeneralExcelImportAndExportDataCell, tempColumn, tempColumn.GeneralExcelImportAndExportDataRow() = row );
        opc    := select( opt, OfflinePlanColumn, tempOPC, tempOPC.ColumnName() = column.Name() );
        opcell := opr.OfflinePlanCell( relnew, Value := cell.Value() );
        opcell.OfflinePlanColumn( relset, opc );
      }
    }
  *]
}
_Main/BL/Type_OfflinePlanImportData/StaticMethod_Upload.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Upload (
  MacroPlan macroPlan,
  OfflinePlanTable opt,
  GeneralExcelImportAndExportDataTable table
)
{
  TextBody:
  [*
    indexUnitID    := "";
    indexProductID := "";
    traverse ( table, GeneralExcelImportAndExportDataRow, row ) {
      firstColumn  := select( table, GeneralExcelImportAndExportDataColumn, tempC, tempC.ColumnIndex() = 0 );
      secondColumn := select( table, GeneralExcelImportAndExportDataColumn, tempC, tempC.ColumnIndex() = 1 );
      firstCell    := select( row, GeneralExcelImportAndExportDataCell, tempC, tempC.GeneralExcelImportAndExportDataColumn() = firstColumn );
      u            := select( macroPlan, Unit, tempU, tempU.ID() = firstCell.Value() );
      product      := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = firstCell.Value() );
      secondCell    := select( row, GeneralExcelImportAndExportDataCell, tempC, tempC.GeneralExcelImportAndExportDataColumn() = secondColumn );
      if ( not isnull( u ) and secondCell.Value() = "" ) {
        indexUnitID := u.ID();
        opr         := select( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = indexUnitID and tempOPR.ProductID() = "" and tempOPR.Type() = "0" );
        opr.OfflinePlanCell( relflush );
        OfflinePlanImportData::UpdateCell( table, row, opt, opr );
      } else if ( not isnull( product ) and secondCell.Value() = "Quantity" ) {
        indexProductID := product.ID();
        opr            := select( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = indexUnitID and tempOPR.ProductID() = indexProductID and tempOPR.Type() = "1" );
        opr.OfflinePlanCell( relflush );
        OfflinePlanImportData::UpdateCell( table, row, opt, opr );
      } else if ( isnull( product ) and secondCell.Value() = "Order" ) {
        opr := select( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = indexUnitID and tempOPR.ProductID() = indexProductID and tempOPR.Type() = "2" );
        opr.OfflinePlanCell( relflush );
        OfflinePlanImportData::UpdateCell( table, row, opt, opr );
      } else if ( firstCell.Value() = "合计" and secondCell.Value() = "总量" ) {
        opr := select( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = indexUnitID and tempOPR.ProductID() = "Z" and tempOPR.Type() = "3" );
        opr.OfflinePlanCell( relflush );
        OfflinePlanImportData::UpdateCell( table, row, opt, opr );
      } else if ( firstCell.Value() = "" and secondCell.Value() = "班次" ) {
        opr := select( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = indexUnitID and tempOPR.ProductID() = "Z" and tempOPR.Type() = "4" );
        opr.OfflinePlanCell( relflush );
        OfflinePlanImportData::UpdateCell( table, row, opt, opr );
      } else if ( firstCell.Value() = "" and secondCell.Value() = "班次开始时间" ) {
        opr := select( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = indexUnitID and tempOPR.ProductID() = "Z" and tempOPR.Type() = "5" );
        opr.OfflinePlanCell( relflush );
        OfflinePlanImportData::UpdateCell( table, row, opt, opr );
      } else if ( firstCell.Value() = "" and secondCell.Value() = "班次结束时间" ) {
        opr := select( opt, OfflinePlanRow, tempOPR, tempOPR.ProductionLine() = indexUnitID and tempOPR.ProductID() = "Z" and tempOPR.Type() = "6" );
        opr.OfflinePlanCell( relflush );
        OfflinePlanImportData::UpdateCell( table, row, opt, opr );
      } else {
        error( "导入失败,数据异常" );
      }
    }
  *]
}
_Main/BL/Type_OfflinePlanImportData/_ROOT_Type_OfflinePlanImportData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type OfflinePlanImportData
{
  #keys: '5[413988.0.1558681402][413988.0.1558681400][0.0.0][413988.0.1558681401][413988.0.1558681403]'
  BaseType: Object
  StructuredName: 'OfflinePlanImportDatas'
}
_Main/BL/Type_OfflinePlanRow/Attribute_Notes.qbl
@@ -3,5 +3,6 @@
Attribute Notes
{
  #keys: '3[415754.0.180041713][415754.0.180041712][415754.0.180041714]'
  Description: '4位码'
  ValueType: String
}
_Main/BL/Type_TransferMinimumQuantity/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[413988.0.1584313375][413988.0.1584313374][413988.0.1584313376]'
  ValueType: String
}
_Main/BL/Type_TransferMinimumQuantity/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[413988.0.1584313385][413988.0.1584313384][413988.0.1584313386]'
  ValueType: Real
}
_Main/BL/Type_TransferMinimumQuantity/_ROOT_Type_TransferMinimumQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type TransferMinimumQuantity
{
  #keys: '5[413988.0.1584313371][413988.0.1584313369][0.0.0][413988.0.1584313370][413988.0.1584313372]'
  BaseType: Object
  StructuredName: 'TransferMinimumQuantitys'
}
_Main/BL/Type_Unit/Method_WholeShiftFiltering.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
Method WholeShiftFiltering () declarative remote as Boolean
{
  TextBody: 'return this.HasCapacityTypeTime() or this.HasCapacityTypeTransportQuantity();'
}
_Main/Sys/Repr/Global/OfflinePlanCell.qrp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: #root
TypeRepresentation OfflinePlanCell
{
  AttributeRepresentation Value
  {
    AttributeKey: '[413988.0.1296697079]'
    Conditional:
    [
      DataRepresentation.Conditional
      {
        BackgroundColor: '$FF3399'
        ConditionBody: 'object.IsQuantity()'
        ConversionBody: ''
        DefaultBackgroundColor: false
        InheritConversion: false
      }
    ]
  }
  RelationRepresentation OfflinePlanColumn { RelationKey: '[413988.0.1296697090]' Visibility: 'Normal' }
}
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -85,6 +85,8 @@
        Component ComponentMenu702 { #keys: '[413988.0.1234424010]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis822' Text: 'Interface Dataset' ] }
        Component menuSeparator891 { #keys: '[413988.0.1263894630]' BaseType: 'Menu' Properties: [ Separator: true ] }
        Component MenuWholeShift { #keys: '[413988.0.1263894682]' BaseType: 'Menu' Properties: [ Image: 'FISH_BOWL' Text: '测试整班' ] }
        Component menuSeparator604 { #keys: '[413988.0.1559834087]' BaseType: 'Menu' Properties: [ Separator: true ] }
        Component ComponentMenu710 { #keys: '[413988.0.1559834106]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis627' Text: '' ] }
      ]
      Properties:
      [
@@ -104,10 +106,12 @@
          c: ComponentMenu469
          c: ComponentMenu357
          c: ComponentMenu702
          c: ComponentMenu710
          c: menuSeparator222
          c: ComponentMenu347
          c: menuSeparator891
          c: MenuWholeShift
          c: menuSeparator604
        }
      ]
    }
_Main/UI/MacroPlanner/Component_frmStandardAnalysis627/Component_swTop.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
Component swTop
{
  #keys: '[530.0.3531806]'
  BaseType: 'swTop'
  IsDerived: true
  Children:
  [
    Component spTopLeft
    {
      #keys: '[530.0.3531807]'
      BaseType: 'spTopLeft'
      IsDerived: true
      Children:
      [
        Component Analysis
        {
          #keys: '[530.0.3532065]'
          BaseType: 'Analysis'
          IsDerived: true
          Properties:
          [
            GlobalInstance: 'RecycleBin'
          ]
        }
      ]
    }
  ]
}
_Main/UI/MacroPlanner/Component_frmStandardAnalysis627/Component_swTopMost.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
Component swTopMost
{
  #keys: '[530.0.3531801]'
  BaseType: 'swTopMost'
  IsDerived: true
  Children:
  [
    Component SplitterPane1
    {
      #keys: '[530.0.3531802]'
      BaseType: 'SplitterPane1'
      IsDerived: true
      Children:
      [
        #child: swTop
      ]
    }
  ]
}
_Main/UI/MacroPlanner/Component_frmStandardAnalysis627/_ROOT_Component_frmStandardAnalysis627.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#root
#parent: MacroPlanner
OrphanComponent frmStandardAnalysis627
{
  #keys: '[413988.0.1559834123]'
  BaseType: 'frmStandardAnalysis'
  Children:
  [
    #child: swTopMost
  ]
  Properties:
  [
    Title: 'RecycleBin'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogAssemblyOnlineQuantity/Component_pnlContent.def
@@ -27,6 +27,17 @@
        Taborder: 1
      ]
    }
    Component npDLZKM
    {
      #keys: '[415754.0.318111807]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'MacroPlan.AssemblyOnlineQuantity.DLZKM'
        Label: 'DL-ZKM (pcs)'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[413988.0.1584412873]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnOk
    {
      #keys: '[413988.0.1584412877]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 0
      ]
    }
    Component btnCancel
    {
      #keys: '[413988.0.1584412879]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Cancel'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Border: true
    ExcludeFromActiveComponent: true
    FixedSize: true
    Orientation: 'horizontal'
    Padding: 'true'
    Style: 'footer'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[413988.0.1584412871]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddslProductID
    {
      #keys: '[413988.0.1584413067]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        DataBinding: 'DataHolderDialogData.Data.ProductID'
        Label: 'Product ID'
        Taborder: 0
      ]
    }
    Component npQuantity
    {
      #keys: '[413988.0.1584413087]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'DataHolderDialogData.Data.Quantity'
        Label: 'Quantity'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_Edit.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
Method Edit (
  TransferMinimumQuantity selection
) id:Method_DialogCreateEditTransferMinimumQuantity_Edit
{
  #keys: '[413988.0.1584413050]'
  Body:
  [*
    data := shadow( selection );
    DataHolderDialogData.Data( &data );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_New.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Method New () id:Method_DialogCreateEditTransferMinimumQuantity_New
{
  #keys: '[413988.0.1584413052]'
  Body:
  [*
    data := MacroPlan.TransferMinimumQuantity( relshadow );
    DataHolderDialogData.Data( &data );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_OnOK.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
Method OnOK () id:Method_DialogCreateEditTransferMinimumQuantity_OnOK
{
  #keys: '[413988.0.1584413053]'
  Body:
  [*
    // On ok
    Form.ApplyChanges();
    data := DataHolderDialogData.Data();
    data.Commit();
    Form.Close();
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[413988.0.1584412883]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[413988.0.1584412882]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      Form.OnOK();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlContent_ddslProductID_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pnlContent/ddslProductID
Response OnCreated () id:Response_pnlContent_ddslProductID_OnCreated
{
  #keys: '[413988.0.1584413155]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      ids := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.ID() );
      this.Strings( ids.Concatenate( ";" ) );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/_ROOT_Component_DialogCreateEditTransferMinimumQuantity.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogCreateEditTransferMinimumQuantity
{
  #keys: '[413988.0.1584412869]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
    Component DataHolderDialogData id:DataHolderDialogData_438
    {
      #keys: '[413988.0.1584413005]'
      BaseType: 'WebDataHolder'
      Databinding: 'shadow[TransferMinimumQuantity]*'
      Properties:
      [
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Padding: 'false'
    Title: 'TransferMinimumQuantity'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditChangeLossSetting/Component_pnlContent.def
@@ -89,18 +89,6 @@
        Taborder: 2
      ]
    }
    Component npChangeLossNr
    {
      #keys: '[415136.0.738250237]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'dhDialogData.Data.ChangeLossNr'
        Label: 'Change loss number'
        Min: '0'
        Taborder: 5
      ]
    }
    Component dsStartDate
    {
      #keys: '[415136.0.1132411785]'
@@ -123,6 +111,17 @@
        Taborder: 4
      ]
    }
    Component efChangeLossNr
    {
      #keys: '[415136.0.1176801957]'
      BaseType: 'WebEditField'
      Properties:
      [
        DataBinding: 'dhDialogData.Data.ChangeLossNumber'
        Label: 'Change loss number'
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditChangeLossSetting/Response_pnlActions_btnOk_OnClick.def
@@ -6,7 +6,7 @@
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return ChangeLossSetting::ValidateInput( feedback, MacroPlan, dhDialogData.Data().WrappedInstance(), ddlUnit.Data(), ddlProduct1.Data(), ddlProduct2.Data(), dsStartDate.Date(), dsEndDate.Date(), [Number]npChangeLossNr.Number() );
    return ChangeLossSetting::ValidateInput( feedback, MacroPlan, dhDialogData.Data().WrappedInstance(), ddlUnit.Data(), ddlProduct1.Data(), ddlProduct2.Data(), dsStartDate.Date(), dsEndDate.Date(), efChangeLossNr.Text() );
  *]
  QuillAction
  {
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_abpContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component abpContent
{
  #keys: '[413988.0.1584413600]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_cmContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
Quintiq file version 2.0
Component cmContent
{
  #keys: '[413988.0.1584413605]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuSeparator
    {
      #keys: '[121142.1.1147171519]'
      BaseType: 'MenuSeparator'
      IsDerived: true
      Properties:
      [
        Taborder: 3
      ]
    }
    Component mSelectAll
    {
      #keys: '[413988.0.1584413729]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'SELECTION_VIEW'
        Shortcut: 'Ctrl+A'
        Taborder: 2
        Title: 'Select all'
      ]
    }
    Component mNew
    {
      #keys: '[413988.0.1584413791]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'ADD2'
        Taborder: 4
        Title: 'New'
      ]
    }
    Component mEdit
    {
      #keys: '[413988.0.1584413813]'
      BaseType: 'WebMenu'
      Properties:
      [
        BindOnDoubleClick: true
        Image: 'PENCIL'
        Taborder: 5
        Title: 'Edit'
      ]
    }
    Component mDelete
    {
      #keys: '[413988.0.1584413835]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DELETE'
        Taborder: 6
        Title: 'Delete'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_lstContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
Quintiq file version 2.0
Component lstContent
{
  #keys: '[413988.0.1584413597]'
  BaseType: 'WebList'
  Children:
  [
    Component deContent
    {
      #keys: '[413988.0.1584413598]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'MacroPlan'
        Source: 'MacroPlan'
        Taborder: 0
        Transformation: 'TransferMinimumQuantity'
      ]
    }
    #child: abpContent
    Component dslContent
    {
      #keys: '[413988.0.1584413603]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: cmContent
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}}]'
        ContextMenu: 'cmContent'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_lstContent_WebMenu_OnClick
    {
      #keys: '[413988.0.1584413922]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[3751.0.8761425]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Component_pnlContent.def
@@ -5,61 +5,7 @@
  BaseType: 'WebPanel'
  Children:
  [
    Component npCylinderBlock
    {
      #keys: '[413988.0.1273522242]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'MacroPlan.CylinderBlock'
        Label: '缸体(pcs)'
        Taborder: 0
      ]
    }
    Component npCylinderHead
    {
      #keys: '[413988.0.1273522255]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'MacroPlan.CylinderHead'
        Label: '缸盖(pcs)'
        Taborder: 1
      ]
    }
    Component npConnectingRod
    {
      #keys: '[413988.0.1273522267]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'MacroPlan.ConnectingRod'
        Label: '连杆(pcs)'
        Taborder: 2
      ]
    }
    Component npCrankshaft
    {
      #keys: '[413988.0.1273522280]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'MacroPlan.Crankshaft'
        Label: '曲轴(pcs)'
        Taborder: 3
      ]
    }
    Component npBalanceAxis
    {
      #keys: '[413988.0.1273522292]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'MacroPlan.BalanceAxis'
        Label: '平衡轴(pcs)'
        Taborder: 4
      ]
    }
    #child: lstContent
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: lstContent
Response OnClick (
  structured[TransferMinimumQuantity] selection
) id:Response_lstContent_mDelete_OnClick
{
  #keys: '[413988.0.1584415019]'
  CanBindMultiple: false
  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
  Initiator: 'mDelete'
  QuillAction
  {
    Body:
    [*
      MacroPlan::DeleteObjects( selection );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mEdit_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: lstContent
Response OnClick (
  TransferMinimumQuantity selection
) id:Response_lstContent_mEdit_OnClick
{
  #keys: '[413988.0.1584414766]'
  CanBindMultiple: false
  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
  Initiator: 'mEdit'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditTransferMinimumQuantity );
      dlg.Edit( selection );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mNew_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: lstContent
Response OnClick () id:Response_lstContent_mNew_OnClick
{
  #keys: '[413988.0.1584414263]'
  CanBindMultiple: false
  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
  Initiator: 'mNew'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditTransferMinimumQuantity );
      dlg.New();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/Response_lstContent_mSelectAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: lstContent
Response OnClick () id:Response_lstContent_mSelectAll_OnClick
{
  #keys: '[413988.0.1584414036]'
  CanBindMultiple: false
  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
  Initiator: 'mSelectAll'
  QuillAction
  {
    Body:
    [*
      this.SelectAll();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogTransferMinimumQuantity/_ROOT_Component_DialogTransferMinimumQuantity.def
@@ -16,6 +16,8 @@
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    MinimumColumns: 50
    MinimumRows: 30
    Padding: 'false'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_ListEntity.def
@@ -12,10 +12,10 @@
      Properties:
      [
        DataType: 'MacroPlan'
        FixedFilter: 'not object.GetIsSystem() and object.IsUnit();'
        FixedFilter: 'not object.GetIsSystem() and object.IsUnit() and object.WholeShiftFiltering();'
        Source: 'MacroPlan'
        Taborder: 0
        Transformation: 'RootEntity'
        Transformation: 'Unit'
      ]
    }
    Component DataSetLevelRootEntity
@@ -25,27 +25,11 @@
      Children:
      [
        #child: listContextMenu902_1
        Component DataSetLevelChildEntity
        {
          #keys: '[414702.2.1845329623]'
          BaseType: 'WebDataSetLevel'
          Properties:
          [
            Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayName","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayCapacityType","title":"Capacity type","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayCapacityType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsToFill","title":"ImgIsToFill","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsToFill"}}]'
            ContextMenu: 'listContextMenu902'
            FixedFilter: 'not object.GetIsSystem() and object.IsUnit();'
            RelationFromParent: 'ChildEntity'
            RelationRepeating: 'ChildEntity'
            SortCriteria: 'DisplayIndex'
            Taborder: 0
          ]
        }
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":-1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayName","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayCapacityType","title":"Capacity type","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"DisplayCapacityType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsToFill","title":"ImgIsToFill","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsToFill"}}]'
        ContextMenu: 'listContextMenu902'
        RelationFromParent: 'ChildEntity'
        SortCriteria: 'DisplayIndex'
        Taborder: 1
      ]
@@ -55,7 +39,7 @@
  Properties:
  [
    DefaultExpandLevels: 100
    Taborder: 0
    Taborder: 1
  ]
  ResponseDefinitions:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_listContextMenu902#1.def
@@ -52,6 +52,6 @@
  ]
  Properties:
  [
    Taborder: 1
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_pHeader.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
Component pHeader
{
  #keys: '[413988.0.1584415148]'
  BaseType: 'WebPanel'
  Children:
  [
    Component bDeselectAll
    {
      #keys: '[413988.0.1585579042]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'SELECTION_DELETE'
        Label: 'Deselect all'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    Border: true
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Component_pnlContent.def
@@ -6,6 +6,7 @@
  Children:
  [
    #child: ListEntity
    #child: pHeader
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogWholeShiftSystem/Response_pHeader_bDeselectAll_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: pHeader/bDeselectAll
Response OnClick () id:Response_pHeader_bDeselectAll_OnClick
{
  #keys: '[413988.0.1585579057]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      traverse ( MacroPlan, Unit, u ) {
        u.IsToFill( false );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlan/Component_pHeader.def
@@ -21,7 +21,7 @@
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Online quantity'
        Label: 'Filing line volume'
        Taborder: 2
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlan/Response_MatrixEditor951_480_OnUpdateValue.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: MatrixEditor951_480
Response OnUpdateValue (
  AssemblyOnlinePlanRow row,
  AssemblyOnlinePlanColumn column,
  AssemblyOnlinePlanCell cell,
  String value,
  String oldvalue
) id:Response_MatrixEditor951_480_OnUpdateValue
{
  #keys: '[415754.0.313052247]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMatrixEditor_OnUpdateValue'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      if ( row.Type() = "1" and column.ColumnDate() >= MacroPlan.StartOfPlanning().Date() and cell.Value() <> "" ) {
        cell.Value( value );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport#670.def
@@ -12,7 +12,8 @@
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 1
        Label: '导出'
        Taborder: 2
      ]
    }
    Component ButtonSearch
@@ -32,7 +33,8 @@
      Properties:
      [
        Image: 'IMPORT1'
        Taborder: 2
        Label: '导入'
        Taborder: 1
      ]
    }
    Component bRefresh
_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def
@@ -10,13 +10,10 @@
    Body:
    [*
      //初始化
      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
      //  CCEngineLogisticsCostReport::Initialize( MacroPlan );
      //}
      //info( '------------------1----------------' );
      table := CCEngineLogisticsCostReport::InitiateSearch( MacroPlan );
      //table := selectobject( MacroPlan, CCEngineLogisticsCostReport, table, table.IsShow() );
      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
      //DataHolderTable.Data( table );
      DataHolderTable.Data( table );
      
      //dhSearch.Data( table.MacroPlan().CCEngineLogisticsCostSearch() );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormChangeLossSetting/Component_ListChangeLossSetting#568.def
@@ -28,7 +28,7 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit.ID","title":"Unit","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Unit.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductFirst.ID","title":"Product1","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductFirst.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductSecond.ID","title":"Product2","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductSecond.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ChangeLossNr","title":"ChangeLossNr","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ChangeLossNr"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit.ID","title":"Unit","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Unit.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductFirst.ID","title":"Product1","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductFirst.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductSecond.ID","title":"Product2","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ProductSecond.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ChangeLossNumber","title":"ChangeLossNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ChangeLossNumber"}}]'
        ContextMenu: 'listContextMenuChangeLossSetting'
        Taborder: 2
      ]
_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def
@@ -12,6 +12,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
@@ -32,6 +33,7 @@
      Properties:
      [
        Image: 'IMPORT1'
        Label: '导入'
        Taborder: 2
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def
@@ -10,13 +10,10 @@
    Body:
    [*
      //初始化
      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
      //  DLEngineLogisticsCostReport::Initialize( MacroPlan );
      //}
      //info( '------------------1----------------' );
      //table := selectobject( MacroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );
      table := DLEngineLogisticsCostReport::InitiateSearch( MacroPlan );
      //table := selectobject( MacroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );/
      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
      //DataHolderTable.Data( table );
      DataHolderTable.Data( table );
      
      //dhSearch.Data( table.MacroPlan().DLEngineLogisticsCostSearch() );
      //info( '------------------2----------------', isnull( dhSearch.Data() ) );
_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_bRefresh_OnClick#57.def
@@ -13,7 +13,7 @@
  {
    Body:
    [*
      DLEngineLogisticsCostReport::Initialize( MacroPlan );
      DLEngineLogisticsCostReport::InitializeNew( MacroPlan );
      
      table := selectobject( MacroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );
      
_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport#570.def
@@ -11,7 +11,8 @@
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'IMPORT1'
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_OnCreated.def
@@ -9,13 +9,10 @@
  {
    Body:
    [*
      //if( not isnull( MacroPlan.EnginePipelineSource() ) ){
      //  EnginePipelineSource::Initialize( MacroPlan );
      //}
      //info( '------------------1----------------' );
      table := EnginePipelineSource::InitiateSearch( MacroPlan );
      //table := selectobject( MacroPlan, EnginePipelineSource.Report, table, table.IsShow() );
      //info( '------------------2----------------', table.IsShow() );
      //DataHolderTable.Data( table );
      DataHolderTable.Data( table );
      
      //dhSearch.Data( table.Source().Search() );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
@@ -12,6 +12,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def
@@ -23,6 +23,7 @@
      Properties:
      [
        Image: 'IMPORT1'
        Label: '导入'
        Taborder: 1
      ]
    }
@@ -33,6 +34,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 2
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
@@ -10,13 +10,10 @@
    Body:
    [*
      //初始化
      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
      //  FinancialProductionSource::Initialize( MacroPlan );
      //}
      //info( '------------------1----------------' );
      table := FinancialProductionSource::InitiateSearch( MacroPlan );
      //table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
      //DataHolderTable.Data( table );
      DataHolderTable.Data( table );
      
      //dhSearch.Data( MacroPlan.FinancialProductionSearch() );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport#545.def
@@ -12,6 +12,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def
@@ -23,6 +23,7 @@
      Properties:
      [
        Image: 'IMPORT1'
        Label: '导入'
        Taborder: 1
      ]
    }
@@ -33,6 +34,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 2
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -9,13 +9,10 @@
  {
    Body:
    [*
      //if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
      //  FinancialSalesSource::Initialize( MacroPlan );
      //}
      //info( '------------------1----------------' );
      table := FinancialSalesSource::InitiateSearch( MacroPlan );
      //table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
      //DataHolderTable.Data( table );
      DataHolderTable.Data( table );
      
      //dhSearch.Data( MacroPlan.FinancialSalesSearch() );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def
@@ -13,7 +13,7 @@
  {
    Body:
    [*
      FinancialSalesSource::Initialize( MacroPlan );
      FinancialSalesSource::InitializeNew( MacroPlan );
      
      table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
      
_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def
@@ -12,6 +12,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 0
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def
@@ -12,6 +12,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 1
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
@@ -9,13 +9,10 @@
  {
    Body:
    [*
      //if( not isnull( MacroPlan.InventorySummarySource() ) ){
      //  InventorySummarySource::Initialize( MacroPlan, InterfaceDataset );
      //}
      //info( '------------------1----------------' );
      table := InventorySummarySource::InitiateSearch( MacroPlan );
      //table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
      //info( '------------------2----------------', table.IsShow() );
      //DataHolderTable.Data( table );
      DataHolderTable.Data( table );
      
      //dhSearch.Data( table.InventorySummarySource().InventorySummarySearch() );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
@@ -11,7 +11,8 @@
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'IMPORT1'
        Image: 'EXPORT1'
        Label: '导入'
        Taborder: 1
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def
@@ -9,13 +9,10 @@
  {
    Body:
    [*
      //if( not isnull( MacroPlan.EnginePipelineSource() ) ){
      //  MachiningPipelineSource::Initialize( MacroPlan );
      //}
      //info( '------------------1----------------' );
      table := MachiningPipelineSource::InitiateSearch( MacroPlan );
      //table := selectobject( MacroPlan, MachiningPipelineSource.Report, table, table.IsShow() );
      //info( '------------------2----------------', table.IsShow() );
      //DataHolderTable.Data( table );
      DataHolderTable.Data( table );
      
      //dhSearch.Data( table.Source().Search() );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_MatrixEditor951.def
@@ -44,12 +44,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'OfflinePlanTable'
            FilterArguments: 'entities:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderCheckedEntities'
            FixedFilter: 'object.Filter( entities )'
            Source: 'dhOfflinePlanTable'
            DataType: 'structured[OfflinePlanRow]'
            Source: 'dhSelectedOfflinePlanRow'
            Taborder: 0
            Transformation: 'OfflinePlanRow'
            Transformation: 'Elements'
          ]
        }
      ]
@@ -73,6 +71,7 @@
          Properties:
          [
            DataType: 'OfflinePlanTable'
            FixedFilter: 'object.IsShow()'
            Source: 'dhOfflinePlanTable'
            Taborder: 0
            Transformation: 'OfflinePlanColumn'
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pContent#611.def
@@ -16,6 +16,33 @@
        Taborder: 1
      ]
    }
    Component dhSelectedOfflinePlanRow
    {
      #keys: '[413988.0.1557550767]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[OfflinePlanRow]*'
      Children:
      [
        Component deSelectedOfflinePlanRow
        {
          #keys: '[413988.0.1557550817]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'OfflinePlanTable'
            FilterArguments: 'entities:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderCheckedEntities'
            FixedFilter: 'object.Filter( entities )'
            Source: 'dhOfflinePlanTable'
            Taborder: 0
            Transformation: 'OfflinePlanRow'
          ]
        }
      ]
      Properties:
      [
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader.def
@@ -1,76 +1,17 @@
Quintiq file version 2.0
Component pHeader
{
  #keys: '[413988.0.1296872680]'
  #keys: '[413988.0.1568330469]'
  BaseType: 'WebPanel'
  Children:
  [
    Component bRefresh
    {
      #keys: '[413988.0.1296860898]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'REFRESH'
        Taborder: 0
      ]
    }
    Component bDownload
    {
      #keys: '[413988.0.1296875316]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Download'
        Taborder: 1
      ]
    }
    Component bDeductionOfReplacementLoss
    {
      #keys: '[413988.0.1297911732]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Deduction of replacement loss'
        Taborder: 2
      ]
    }
    Component bRestore
    {
      #keys: '[413988.0.1297911774]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Restore'
        Taborder: 3
      ]
    }
    Component bSaveAsDraft
    {
      #keys: '[413988.0.1297973728]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Save as draft'
        Taborder: 4
      ]
    }
    Component bConfirm
    {
      #keys: '[413988.0.1297973782]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Confirm'
        Taborder: 5
      ]
    }
    #child: pHeader1_799
    #child: pHeader2
  ]
  Properties:
  [
    Border: true
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader1#799.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
Quintiq file version 2.0
Component pHeader1 id:pHeader1_799
{
  #keys: '[413988.0.1568330588]'
  BaseType: 'WebPanel'
  Children:
  [
    Component bGenerateReport
    {
      #keys: '[413988.0.1568330589]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Generate report'
        Taborder: 0
      ]
    }
    Component bDownload
    {
      #keys: '[413988.0.1568330590]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Download'
        Taborder: 1
      ]
    }
    Component bDeductChangeoverLoss
    {
      #keys: '[413988.0.1568330591]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Deduct changeover loss'
        Taborder: 3
      ]
    }
    Component bRestore
    {
      #keys: '[413988.0.1568330592]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Restore'
        Taborder: 4
      ]
    }
    Component bSaveAsDraft
    {
      #keys: '[413988.0.1568330593]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Save as draft'
        Taborder: 5
      ]
    }
    Component bConfirm
    {
      #keys: '[413988.0.1568330594]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Confirm'
        Taborder: 6
      ]
    }
    Component bImport
    {
      #keys: '[413988.0.1568330595]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Import'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Component_pHeader2.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component pHeader2
{
  #keys: '[413988.0.1568330735]'
  BaseType: 'WebPanel'
  Children:
  [
    Component sDateFilter
    {
      #keys: '[413988.0.1567271085]'
      BaseType: 'WebSlider'
      Properties:
      [
        NumberOfColumns: 100
        Taborder: 0
        Visible: false
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_MatrixEditor951_OnUpdateValue.def
@@ -23,6 +23,8 @@
        cell.IsQuantityChange( true );
        cell.Value( value );
        cell.Quantity( [Real]value );
      } else if ( row.Type() = "2" and column.ColumnDate() >= MacroPlan.StartOfPlanning().Date() ) {
        cell.Value( value );
      }
    *]
    GroupServerCalls: false
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bConfirm_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: pHeader1_799/bConfirm
Response OnClick () id:Response_pHeader1_799_bConfirm_OnClick
{
  #keys: '[413988.0.1568330582]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan ) and MacroPlan.A_PreviousScenaioName() <> MacroPlan.ScenarioName();
  *]
  QuillAction
  {
    Body:
    [*
      OfflinePlanCell::SynchronizeToNewSupply( MacroPlan, dhOfflinePlanTable.Data() );
      MacroPlan.A_PreviousScenaioName( MacroPlan.ScenarioName() );
      WebMessageBox::Success( Translations::A_VWED_Success() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bDeductChangeoverLoss_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDeductionOfReplacementLoss_OnClick.def ÐÞ¸Ä
@@ -1,13 +1,13 @@
Quintiq file version 2.0
#parent: pHeader/bDeductionOfReplacementLoss
Response OnClick () id:Response_pHeader_bDeductionOfReplacementLoss_OnClick
#parent: pHeader1_799/bDeductChangeoverLoss
Response OnClick () id:Response_pHeader1_799_bDeductChangeoverLoss_OnClick
{
  #keys: '[413988.0.1297973984]'
  #keys: '[413988.0.1568330585]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
    return not isnull( MacroPlan ) and MacroPlan.A_PreviousScenaioName() <> MacroPlan.ScenarioName();
  *]
  QuillAction
  {
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bDownload_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: pHeader1_799/bDownload
Response OnClick () id:Response_pHeader1_799_bDownload_OnClick
{
  #keys: '[413988.0.1568330586]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      binaryValue := OfflinePlanCell::Download( MacroPlan, dhSelectedOfflinePlanRow.Data() );
      Application.Download( "Offline plan.xlsx", binaryValue.AsBinaryData() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bGenerateReport_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRefresh_OnClick.def ÐÞ¸Ä
@@ -1,13 +1,13 @@
Quintiq file version 2.0
#parent: pHeader/bRefresh
Response OnClick () id:Response_pHeader_bRefresh_OnClick
#parent: pHeader1_799/bGenerateReport
Response OnClick () id:Response_pHeader1_799_bGenerateReport_OnClick
{
  #keys: '[413988.0.1297973814]'
  #keys: '[413988.0.1568330587]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
    return not isnull( MacroPlan ) and MacroPlan.A_PreviousScenaioName() <> MacroPlan.ScenarioName();
  *]
  QuillAction
  {
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bImport_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
Quintiq file version 2.0
#parent: pHeader1_799/bImport
Response OnClick () id:Response_pHeader1_799_bImport_OnClick
{
  #keys: '[413988.0.1568330581]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan ) and MacroPlan.A_PreviousScenaioName() <> MacroPlan.ScenarioName();
  *]
  QuillAction
  {
    Body:
    [*
      try {
        uploadJsonString := Application.GetFile();
        if ( uploadJsonString <> "" ) {
          uploadJson := JSON::Parse( uploadJsonString );
          Archive::VerifyTheFileName( uploadJson );
          fileName := uploadJson.Get( "name" ).GetString();
          base64String := uploadJson.Get( "data" ).GetString();
          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
          generalExcelImportAndExportDataSource := GeneralExcelImportAndExportDataSource::Upload( RecycleBin, webFileBinaryData, fileName );
          generalExcelImportAndExportDataSource.ReadStructure();
          selection := select( generalExcelImportAndExportDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, tempGEIAEDT.Name() = "Sheet1" );
          OfflinePlanImportData::Upload( MacroPlan, dhOfflinePlanTable.Data(), selection );
          // åŽç»­åˆ é™¤
      //    generalExcelImportAndExportDataSource.Delete();
          WebMessageBox::Success( Translations::A_VWED_Success() );
        }
      } onerror {
        WebMessageBox::Error( e.GeneralInformation() );
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bRestore_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bRestore_OnClick.def ÐÞ¸Ä
@@ -1,13 +1,13 @@
Quintiq file version 2.0
#parent: pHeader/bRestore
Response OnClick () id:Response_pHeader_bRestore_OnClick
#parent: pHeader1_799/bRestore
Response OnClick () id:Response_pHeader1_799_bRestore_OnClick
{
  #keys: '[413988.0.1297974069]'
  #keys: '[413988.0.1568330584]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
    return not isnull( MacroPlan ) and MacroPlan.A_PreviousScenaioName() <> MacroPlan.ScenarioName();
  *]
  QuillAction
  {
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader1_799_bSaveAsDraft_OnClick.def
ÎļþÃû´Ó _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bSaveAsDraft_OnClick.def ÐÞ¸Ä
@@ -1,13 +1,13 @@
Quintiq file version 2.0
#parent: pHeader/bSaveAsDraft
Response OnClick () id:Response_pHeader_bSaveAsDraft_OnClick
#parent: pHeader1_799/bSaveAsDraft
Response OnClick () id:Response_pHeader1_799_bSaveAsDraft_OnClick
{
  #keys: '[413988.0.1297974155]'
  #keys: '[413988.0.1568330583]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( MacroPlan );
    return not isnull( MacroPlan ) and MacroPlan.A_PreviousScenaioName() <> MacroPlan.ScenarioName();
  *]
  QuillAction
  {
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader2_sDateFilter_OnUserChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: pHeader2/sDateFilter
Response OnUserChanged () id:Response_pHeader2_sDateFilter_OnUserChanged
{
  #keys: '[413988.0.1568579788]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebSlider_OnUserChanged'
  Precondition:
  [*
    return not isnull( MacroPlan );
  *]
  QuillAction
  {
    Body:
    [*
      traverse ( dhOfflinePlanTable.Data(), OfflinePlanColumn, opc ) {
       opc.IsShow( true );
        if ( opc.ColumnIndex() > 1 and opc.ColumnIndex() < this.EndReal() ) {
          opc.IsShow( false );
        }
      }
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bConfirm_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/Response_pHeader_bDownload_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlan/_ROOT_Component_FormOfflinePlan.def
@@ -7,8 +7,8 @@
  BaseType: 'WebForm'
  Children:
  [
    #child: pHeader
    #child: pContent
    #child: pHeader
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Views/Change_loss_setting_view.vw
@@ -78,14 +78,14 @@
              subtotals: ''
              width: 150
            }
            column_ChangeLossNr
            column_ChangeLossNumber
            {
              columnId: 'ChangeLossNr'
              dataPath: 'ChangeLossNr'
              dataType: 'number'
              columnId: 'ChangeLossNumber'
              dataPath: 'ChangeLossNumber'
              dataType: 'real'
              index: 5
              subtotals: ''
              width: 150
              width: 183
            }
          }
        }
_Main/metadata.properties
@@ -1,6 +1,6 @@
component=submodel
kind=Quintiq Metadata File
name=MacroPlanner
version.component=2022.3.0.0
version.component=2022.3.0.56
version.fileformat=2
version.quintiq=6.3.3.0 , build 248673