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.

 

多去换个维度思考问题。不要过于死板。总是能解决的。 

 

转载于:https://www.cnblogs.com/sakura3/p/8942290.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值