BW 转换字符空格问题
早上忙了我一早上,以前写的一个季度判断的问题,
首先是调试,不断的调试DTP。让我头晕眼花。
首先关于空格问题,我自我批评,愚蠢的定义成STRING 类型,然后相互加减出现问题。应该定义成内部的日期格式,或者数字类型。
其次找到了很多ABAP日期函数,所以一并贴出来。下面就不改了。当个教训。
http://www.sapjx.com/abap-datetime-function.html#FIMA_DATE_CREATE
loop at RESULT_PACKAGE ASSIGNING <RESULT_FIELDS> . CLEAR <RESULT_FIELDS>-PSTNG_DATE. <RESULT_FIELDS>-PSTNG_DATE = '20171225'. l_date = <RESULT_FIELDS>-PSTNG_DATE+4(4). l_date1 = <RESULT_FIELDS>-PSTNG_DATE+4(2). year = <RESULT_FIELDS>-PSTNG_DATE+0(4). if l_date = 12. --错误一 l_year = year + 1. -- 错误二 endif. IF '0321' <= l_date AND l_date <= '0620'. CONCATENATE year '2' INTO <RESULT_FIELDS>-CALQUARTER. ELSEIF '0621' <= l_date AND l_date <= '0920'. CONCATENATE year '3' INTO <RESULT_FIELDS>-CALQUARTER.. ELSEIF '0921' <= l_date AND l_date <= '1220'. CONCATENATE year '4' INTO <RESULT_FIELDS>-CALQUARTER.. ELSEIF l_date <= '0320'. CONCATENATE year '1' INTO <RESULT_FIELDS>-CALQUARTER.. ELSE. CONCATENATE l_year '1' INTO <RESULT_FIELDS>-CALQUARTER.. ENDIF.
问题:
错误一
本来应该是 20171 ,第一季度。居然明奇妙出现了 1 这个季度。
回过头来看转换里的ABAP 。
发现是 判断的问题,
if l_date = 12. -- 问题就在这里
l_year = year + 1.
endif.
调试发现应该是用L_DATE1 ,月份,而不是月日。这是个简单问题。一下发现了。改正过来。 错误一好改
错误二,就比较匪夷所思了。
发现了 ,这一句根本没有生效
CONCATENATE l_year '1' INTO <RESULT_FIELDS>-CALQUARTER..
结果还是 2018

后来发现是
l_year = year + 1. l_year 有空格 2018 只是看不出来
字段 <RESULT_FIELDS>-CALQUARTER 只有五位,所以造成了这个问题。 要是改成六位 就会变成 2018 1
可以在调试里更改 成 2018 ,下面的数字就会发生变化。不一样。
更正后的代码:
loop at RESULT_PACKAGE ASSIGNING <RESULT_FIELDS> . CLEAR <RESULT_FIELDS>-PSTNG_DATE. <RESULT_FIELDS>-PSTNG_DATE = '20171225'. l_date = <RESULT_FIELDS>-PSTNG_DATE+4(4). l_date1 = <RESULT_FIELDS>-PSTNG_DATE+4(2). year = <RESULT_FIELDS>-PSTNG_DATE+0(4). if l_date1 = 12. l_year = year + 1. -- 问题就在这里
CONDENSE l_year NO-GAPS. --去除空格
endif. IF '0321' <= l_date AND l_date <= '0620'. CONCATENATE year '2' INTO <RESULT_FIELDS>-CALQUARTER. ELSEIF '0621' <= l_date AND l_date <= '0920'. CONCATENATE year '3' INTO <RESULT_FIELDS>-CALQUARTER.. ELSEIF '0921' <= l_date AND l_date <= '1220'. CONCATENATE year '4' INTO <RESULT_FIELDS>-CALQUARTER.. ELSEIF l_date <= '0320'. CONCATENATE year '1' INTO <RESULT_FIELDS>-CALQUARTER.. ELSE. CONCATENATE l_year '1' INTO <RESULT_FIELDS>-CALQUARTER.. ENDIF.
多去换个维度思考问题。不要过于死板。总是能解决的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步