zoukankan      html  css  js  c++  java
  • 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.

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

  • 相关阅读:
    整理:分页存储过程整理
    净利润-流通市值比率”与公司估值
    常见7种股票底部形态(图解)
    nginx
    移动成本分布1
    浅谈公开信息检索和判断能力
    股票技术分析 成交量与换手率专题
    成份股和成份股指数
    股票底部形态初探
    筹码拉抬派发法
  • 原文地址:https://www.cnblogs.com/sakura3/p/8942290.html
Copyright © 2011-2022 走看看