Dynamics 365 BC报表变量值无法显示,消息框可正常输出求助
先看你贴的代码,这里有个明显的语法错误,很可能是导致变量赋值逻辑没正确执行的核心原因:
你写的IF语句块里,当Payment Method Code为空时,PaymentMethod.INIT和MESSAGE这两个语句没有用BEGIN...END包裹,还多了一个多余的END,直接导致ELSE分支的逻辑结构乱掉了。修正后的代码应该是这样:
IF "Cust. Ledger Entry"."Payment Method Code" = '' THEN BEGIN PaymentMethod.INIT; MESSAGE('Empty Payment Method Code'); END ELSE BEGIN PaymentMethodCode := "Cust. Ledger Entry"."Payment Method Code"; PaymentMethod.GET(PaymentMethodCode); PaymentMethodDescription := PaymentMethod.Description; MESSAGE('PaymentMethodCode %1', "Cust. Ledger Entry"."Payment Method Code"); END;
先把语法问题Fix掉,然后再按下面的步骤排查其他可能的原因:
确认报表控件的绑定:打开报表设计器,找到你要显示这个变量的文本框,检查它的
SourceExpr属性是不是真的绑定到了PaymentMethodDescription。要是控件没和变量关联上,哪怕变量有值也出不来。检查变量的作用域:一定要保证
PaymentMethodDescription是报表的全局变量(在报表的Variables节点下定义),不是OnAfterGetRecord()触发器里的局部变量。局部变量只能在触发器内部用,报表控件根本访问不到。验证数据集的记录处理情况:看看报表的过滤条件是不是把需要的Cust. Ledger Entry记录过滤掉了?你可以在
OnAfterGetRecord()开头加一句MESSAGE('Processing entry %1', "Entry No.");,看看哪些记录被处理了,确认赋值逻辑有没有触发到目标记录。再检查"Include in dataset"设置:虽然你说已经开了,但还是再核对一遍变量属性——找到
PaymentMethodDescription,确保Include in dataset是Yes,而且变量的DataType是Text(和你要显示的Description类型匹配)。考虑赋值逻辑的时机:如果报表用了分组或者合计,可能赋值逻辑的位置不对。比如要是这个变量是要显示在分组头部/尾部,那得把代码放到
OnAfterGetGroup()触发器里,而不是OnAfterGetRecord()。
按照这些步骤一步步查,应该就能搞定变量不显示的问题了。
内容的提问来源于stack exchange,提问作者Cátia Matos

