由于 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 = .