Progress 4GL(11.7)导出MS Project日期时间异常问题求助
解决Progress 4GL 11.7导出MS Project日期时间错误及完成率问题
核心问题分析
你遇到的两个问题根源一致:
- 变量拼接生成Datetime时的语法错误:未加引号的日期字面量(如
02/24/24)被Progress当作算术运算处理,导致生成的字符串格式完全不符合日期要求,最终DATETIME解析出错。 - 任务时长取整问题:仅导出日期时,MS Project按整天计算时长,1.5天会被向上取整为2天,进而错误调整完成率。
正确的Datetime赋值方式
推荐方案:直接用DATE/TIME类型构造Datetime
避免字符串拼接的格式风险,直接通过Progress的DATETIME(dateVar, timeVar)函数构造精确的日期时间值,无需转换为字符串:
DEF VAR objPrj AS COM-HANDLE NO-UNDO. DEF VAR objActivePrj AS COM-HANDLE NO-UNDO. DEF VAR objActiveTask AS COM-HANDLE NO-UNDO. DEF VAR vStartDate AS DATE NO-UNDO. DEF VAR vStartTime AS TIME NO-UNDO. DEF VAR dtTaskStart AS DATETIME NO-UNDO. /* 初始化MS Project对象 */ CREATE "MSProject.Application" objPrj. objActivePrj = objPrj:ActiveProject(). /* 从业务数据获取日期和时间(示例赋值) */ vStartDate = DATE("02/24/2024"). /* 注意日期字面量需加引号 */ vStartTime = TIME("15:00:00"). /* 构造精确的Datetime */ dtTaskStart = DATETIME(vStartDate, vStartTime). /* 添加并赋值任务 */ objActiveTask = objActivePrj:Tasks:ADD("", vTaskId). objActiveTask:START = dtTaskStart.
备选方案:严格格式的字符串拼接(不推荐)
如果必须用字符串构造Datetime,需确保:
- 日期字面量加引号,避免被解析为算术运算
- 字符串格式完全匹配Progress支持的Datetime解析规则
/* 正确的字符串拼接示例 */ objActiveTask:START = DATETIME( STRING(DATE("02/24/2024"), "MM/DD/YYYY") + " " + STRING(TIME("15:00:00"), "HH:MM:SS") ).
完成率问题的解决
通过导出精确的日期时间(包含时分秒),MS Project会基于实际时长(如1.5天=36小时)计算任务进度,而非按整天取整,从而避免完成率被自动变更。同时建议:
- 将MS Project任务设置为手动调度,防止系统自动调整任务时间或时长。
- 确保导出的开始/结束时间差与业务系统中的任务时长完全匹配。
内容的提问来源于stack exchange,提问作者time pass
相关产品推荐
相关产品推荐

