You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Progress 4GL(11.7)导出MS Project日期时间异常问题求助

解决Progress 4GL 11.7导出MS Project日期时间错误及完成率问题

核心问题分析

你遇到的两个问题根源一致:

  1. 变量拼接生成Datetime时的语法错误:未加引号的日期字面量(如02/24/24)被Progress当作算术运算处理,导致生成的字符串格式完全不符合日期要求,最终DATETIME解析出错。
  2. 任务时长取整问题:仅导出日期时,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:00:20