zoukankan      html  css  js  c++  java
  • BDC中日期数量金额格式转换

    在BDC录屏中,数量和日期格式是和su3中的设置相关的,如果格式不一致BDC会报错,
    例如:日期格式不一致报错

    Tcode:SU3,可以看到小数点,日期格式以及时间格式的设置。

     

     

     

    日期:格式 DD.MM.YYYY和中文环境不同,
    小数:点好做千分位,逗号做小数点   所以需要转换

    • 1,日期&时间格式:方法1 write to ,这是个万金油,可以解决日期,数量,金额格式的问题;

    DATA l_datum(10).
    WRITE p_budat TO l_datum.


    方法2,调用CONVERT_DATE_TO_EXTERNAL将日期转换为外部格式。

     

    • 2数量转换:注意不要忘了单位 UNIT

    WRITE <lfs_alv>-romen TO gwa_stpo_r-romen UNIT <lfs_alv>-romei.

     

    • 3金额格式不一致报错:


    方法1,  Write to

     DATA: lv_dmbtr TYPE BDCDATA-FVAL,

    WRITE gt_bsik9-wrbtr_1 TO lv_dmbtr.
    CONDENSE lv_dmbtr NO-GAPS.             

    使用WRITE TO 后得到:

     

     WRITE TO  语法说明:

    WRITE {source|(source_name)} TO destination
    [LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED]
        { { [EXPONENT exp]
            [NO-GROUPING]
            [NO-SIGN]
            [NO-ZERO]
            [CURRENCY cur]
            { {[DECIMALS dec][ROUND scale]}|[UNIT unit]}
    }
          | {[ENVIRONMENT TIME FORMAT][TIME ZONE tz]} [STYLE stl]
    }
        [USING{ {NO EDIT MASK}|{EDIT MASK mask} }]
        [ DD/MM/YY|MM/DD/YY|DD/MM/YYYY|MM/DD/YYYY|DDMMYY|MMDDYY|YYMMDD ].

    Write具体成什么格式的日期,这与当前用户主数据所设定的格式来显示,用户主数据日期格式可以通过以下方式获取到:

      SELECT SINGLE dcpfm INTO l_dcpfm FROM usr01 WHERE bname = sy-uname.

     

     

     

    DATA: date_short TYPE c LENGTH 8,
          date_long  TYPE c LENGTH 10,
          date_mask  TYPE c LENGTH 8,
          date_mask2  TYPE c LENGTH 10.
    WRITE sy-datum TO: date_short,
                       date_long,
                       date_mask  USING EDIT MASK 'DD/MM/YY',
                       date_mask2 USING EDIT MASK 'DD/MM/YYYY'.

    WRITE: sy-datum,
         / date_short,
         / date_long,
         / date_mask ,
         / date_mask2."


    方法2,   使用函数转换,函数效果
    正数测试

    负数测试



    输入

    输出

     

     

     函数代码

    FUNCTION z_bficonver_amount_format.
    *"----------------------------------------------------------------------
    *"*"Local Interface:
    *"  IMPORTING
    *"     REFERENCE(I_STRING)
    *"     REFERENCE(I_DECIMALS) TYPE  I
    *"  EXPORTING
    *"     REFERENCE(OUT_STRING)
    *"----------------------------------------------------------------------
    *======================================================================*
    *                                                                      *
    *  PROGRAM        : Z_BFICONVER_AMOUNT_FORMAT                          *
    *  DESCRIPTION    : Convert the amount field format                        *
    *                                                                      *
    *                                                                      *
    *======================================================================*
    *                                                                      *
    *  CREATION DATE  : 14/10/2020                                         *
    *  AUTHOR         : Rainy.cai                                *
    *                                                                      *
    *======================================================================*
    *                                                                      *
    *  MODIFICATIONS LIST :                                                *
    *                                                                      *
    *  ----------|----------|----------|---------------------------------  *
    *   N° MODIF |  AUTHOR  |   DATE   | MODIFICATION DESCRIPTION         *
    *  ----------|----------|----------|---------------------------------  *
    *  XXXDATE   |USER      |Date      |Description text of modification   *
    *  ----------|----------|----------|---------------------------------  *
    ** 为清账程序转换金额字段格式
      DATA:l_dcpfm   LIKE usr01-dcpfm,
           l_string  TYPE char20,
           l_reverse TYPE char20,
           l_strout  TYPE char20,
           l_str1    TYPE string,
           l_str2    TYPE string,
    
           l_mask    TYPE string.
      DATA:l_lenth TYPE i.
      DATA:l_lenth2 TYPE i.
      CLEAR l_mask.
      l_str2 = '___'.
      CASE i_decimals.
        WHEN 2.
          l_str1 = '__'.
        WHEN 3.
          l_str1 = '___'.
        WHEN 4.
          l_str1 = '____'.
        WHEN OTHERS.
      ENDCASE.
    
    **处理负数情况
      IF i_string < 0.
        l_string = abs( i_string ).
      ELSE.
        l_string = i_string.
      ENDIF.
      "remove Punctuation by space
      REPLACE '.' WITH '' INTO l_string.
      CONDENSE l_string NO-GAPS.
      l_lenth = strlen( l_string ).
      l_lenth2 = l_lenth - i_decimals.
    
      CASE l_lenth2.
        WHEN 1 OR 2 OR 3.
        WHEN 4 OR 5 OR 6.
        WHEN OTHERS.
      ENDCASE.
      "reverse string
      CALL FUNCTION 'STRING_REVERSE'
        EXPORTING
          string  = l_string
          lang    = sy-langu
        IMPORTING
          rstring = l_reverse.
    
    
      SELECT SINGLE dcpfm INTO l_dcpfm FROM usr01 WHERE bname = sy-uname.
    
      CASE l_dcpfm.
        WHEN ''.
          CASE l_lenth2.
            WHEN 1 OR 2 OR 3.
              CONCATENATE l_str1 l_str2 INTO l_mask SEPARATED BY ','.
            WHEN 4 OR 5 OR 6.
              CONCATENATE l_str2 l_str2 INTO l_mask SEPARATED BY '.'.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
            WHEN 7 OR 8 OR 9.
              CONCATENATE l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY '.'.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
            WHEN 10 OR 11 OR 12.
              CONCATENATE l_str2 l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY '.'.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
            WHEN OTHERS.
          ENDCASE.
        WHEN 'X'.
          CASE l_lenth2.
            WHEN 1 OR 2 OR 3.
              CONCATENATE l_str1 l_str2 INTO l_mask SEPARATED BY '.'.
            WHEN 4 OR 5 OR 6.
              CONCATENATE l_str2 l_str2 INTO l_mask SEPARATED BY ','.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY '.'.
            WHEN 7 OR 8 OR 9.
              CONCATENATE l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY ','.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY '.'.
            WHEN 10 OR 11 OR 12.
              CONCATENATE l_str2 l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY ','.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY '.'.
            WHEN OTHERS.
          ENDCASE.
        WHEN 'Y'.
          CASE l_lenth2.
            WHEN 1 OR 2 OR 3.
              CONCATENATE l_str1 l_str2 INTO l_mask SEPARATED BY ','.
            WHEN 4 OR 5 OR 6.
              CONCATENATE l_str2 l_str2 INTO l_mask SEPARATED BY space.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
            WHEN 7 OR 8 OR 9.
              CONCATENATE l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY space.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
            WHEN 10 OR 11 OR 12.
              CONCATENATE l_str2 l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY space.
              CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
            WHEN OTHERS.
          ENDCASE.
      ENDCASE.
    
      WRITE  l_reverse USING EDIT MASK l_mask TO l_strout.
    
      IF sy-subrc = 0.
        "reverse string
        CALL FUNCTION 'STRING_REVERSE'
          EXPORTING
            string  = l_strout
            lang    = sy-langu
          IMPORTING
            rstring = out_string.
      ENDIF.
      IF i_string < 0.
        CONCATENATE out_string '-' into out_string.
    **    out_string = out_string * -1.
      ENDIF.
    
    ENDFUNCTION.

     

     

  • 相关阅读:
    《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九:导航结构层次
    windows live messenger 2009登录失败,提示“错误代码:81000605”的一个解决办法
    《Microsoft SQL Server 2008 MDX Step by Step》学习笔记七:执行聚合(上)
    Java反编译插件Jdclipse导致Eclipse 3.7.2启动崩溃的解决方法
    关于婚姻,你能事先回答这些问题吗?(来自网络)
    邀月的一些其他随笔索引
    《Microsoft SQL Server 2008 MDX Step by Step》学习笔记十一:计算成员和动态命名集
    一点一滴培养你的领袖气质,要经常自我激励(转自网络)
    Firefox中卸载Java Console
    Jquery.Validate验证CheckBoxList,RadioButtonList,DropDownList是否选中
  • 原文地址:https://www.cnblogs.com/rainysblog/p/13819977.html
Copyright © 2011-2022 走看看