SAP ABAP 数据类型转换或补前导零去前导零(外部系统调用SAP接口数据类型未转换)

由于 SAP 系统用户参数文件数据格式设置或其他原因,外部系统调用接口或不同账户设置的人员使用程序功能时,可能因为数据格式问题报错或查不出数据。

情况1:数据类型转为其他格式
比如汇率有效起始日期这个字段,长度为8
在这里插入图片描述
实际情况,输入值是这样 01.05.2019 或 20190501,系统转换后是这样 79809498。

日期转换代码如下:

form frm_get_date USING date TYPE GDATU_INV.
  DATA: CHDAT(8)   TYPE C,
      HOUTPUT(8) TYPE N,      "Hilfsfeld zum Aufbereiten der Jahre>=9000
      DATUM      LIKE SY-DATUM,
      FEHLER(1)  TYPE C.

  DATA: HILF1(9)   TYPE C,
      OUTDATUM   TYPE D.
    HILF1 = '99999999' - date.
    TRANSLATE HILF1(5) USING ' 0'.     "bspw. Eingabe von Jahr = '0001'
    CONDENSE HILF1 NO-GAPS.
    date = HILF1.
ENDFORM.

情况2:本地调试,会补充前导零。
例如 MATNR 物料编号,不足位数时是 1235,补足位数后是 000000000012345
在这里插入图片描述
解决方法:
找到数据元素的域,点击域下方例程,会弹出一些转换方法。
在这里插入图片描述
双击方法名。
在这里插入图片描述
选择其中一个方法,演示选择的是补充前导零 (CONVERSION_EXIT_MATN1_INPUT)的方法,如需其他转换,自行调试选择。调用方法如下:

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input        = ls_in-matnr
      IMPORTING
        output       = ls_in-matnr.

3.补充日期转换函数
获取两个日期期间的:天数、周数、月数、年数
包括期间月份的开始(月份第一天日期)、截止日期(月份最后一天日期)

TYPE-POOLS: p99sg.

DATA: days   TYPE i,

      weeks  TYPE i,

      months TYPE i,

      years  TYPE i.

DATA: month_tab TYPE STANDARD TABLE OF p99sg_month_tab_row.

CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'

  EXPORTING

    begda     = ''    "开始日期

    endda     = ''    "截止日期

  IMPORTING

    days      = days          "返回天数:266

    c_weeks   = weeks         "返回周数:52

    c_months  = months        "返回月数:12

    c_years   = years         "返回年数:1

    month_tab = month_tab.    "期间月份首尾日
 
通过函数计算两个日期的差异月份

      CALL FUNCTION 'MONTHS_BETWEEN_TWO_DATES_NEW'

        EXPORTING

          I_DATUM_BIS             =

          I_DATUM_VON             =

*       I_KZ_INCL_BIS           = ' '

*       I_KZ_VOLLE_MONATE       = 'X'

       IMPORTING

         E_MONATE                = 

获取输入日期月份的最后一天的日期

ALL FUNCTION 'LAST_DAY_OF_MONTHS'

  EXPORTING

    day_in            = '20160104'     "输入日期

  IMPORTING

    last_day_of_month =            "返回最后一天日期:20160131

  EXCEPTIONS

    day_in_no_date    = 1

    OTHERS            = 2.

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

  EXPORTING

    day_in            = ''

  IMPORTING

    last_day_of_month = date

  EXCEPTIONS

    day_in_no_date    =

    OTHERS            = .

CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'

  EXPORTING

    i_date = ''   "输入日期

  IMPORTING

    e_date = date. 20160131

转换日期为内部数字格式

CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'

  EXPORTING

    date_external            = '2016.01.01' "当前用户日期格式:YYYY.MM.DD

    accept_initial_date      = ' '

  IMPORTING

    date_internal            = date         "输出20160101

  EXCEPTIONS

    date_external_is_invalid =

    OTHERS                   = .

转换日期为系统日期格式

CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'

  EXPORTING

    date_internal            = ''

  IMPORTING

    date_external            =                        2016.01.

  EXCEPTIONS

    date_internal_is_invalid =

    OTHERS                   = .

参考:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值