[abap] 20101215 日期转换为系统内部日期
来源:互联网 发布:观韬律所 知乎 编辑:程序博客网 时间:2024/05/29 14:56
说明:查询当前日期之前最新的汇率。
根据原币和汇率时,取凭证日期之前最近的汇率,SQL查询时不能直接使用凭证日期,应该先转换为系统日期,然后才能进行查询。
以下代码实现:
根据交货单上的交货日期,查询交货日期上个月月末的汇率,如果不存在则继续往前查找,直至最新。如交货日期2010-12-15,则查找上个月月末2010-11-30维护的汇率,否则找10月末的,依次递推。
分成4步:
1)'FIMA_DATE_CREATE' 求得上月最后一天;
2)将最后一天转换为系统内部日期;
3)查询汇率有效起始日期,比较关系(大于小于)与外部日期正好相反;
4)将汇率有效起始日期(转为外部日期)代入汇率函数:'READ_EXCHANGE_RATE'。
即: 最后一天 —— 转为系统内部日期 —— 汇率有效起始日期 —— 汇率函数取汇率。
DATA : l_YFKD LIKE MKPF-BLDAT, " 预付款日 中间变量
l_gdatu LIKE TCURR-gdatu, " 日期
l_ukurs LIKE TCURR-ukurs. " 汇率
DATA : l_last_day TYPE DVALUT.
DATA: l_foreign_factor LIKE tcurr-ffact, "汇率转换因子
l_local_factor LIKE tcurr-tfact.
LOOP AT item_out.
*————以下处理原币、本位币计算—————
READ TABLE it_po WITH key EBELN = item_out-EBELN
EBELP = item_out-EBELP.
MOVE-CORRESPONDING it_po to item_out.
if item_out-WAERS = 'JPY' or item_out-WAERS = 'KRW'.
item_out-ZYBJE_S = item_out-ERFMG * item_out-NETPR / 10 .
else.
item_out-ZYBJE_S = item_out-ERFMG * item_out-NETPR .
endif.
IF item_out-WAERS <> 'CNY'.
* 1)求上月最后一天
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
i_date = item_out-BLDAT
i_months = '-1'
i_set_last_day_of_month = 'X'
IMPORTING
e_date = l_last_day.
" 输入20101215 得到l_last_day :20101130
* 2) 将外部日期转换为系统内部日期
CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT'
EXPORTING
input = l_last_day
IMPORTING
output = l_last_day.
" 将 20101130转换为内部日期,得到l_last_day :79898869
* 3)取最近一个月的汇率起始有效日期
* GE —— >= 。 不大于上月月底的,取数据时正好相反处理采用GE
" 关于日期比较:
" 20101130日,转换为系统内部日期时为99999999-20101130=79898869,在20101130日之前的日期(aa< = 20101130),则:
" 转换为系统内部日期后 99999999-bb<= 99999999-20101130,即 bb >= 79898869 (对应gdatu GE l_last_day)。
SELECT MIN( gdatu ) INTO l_gdatu FROM tcurr WHERE kurst = 'M' AND fcurr = item_out-WAERS
AND tcurr = 'CNY' and gdatu ge l_last_day.
IF sy-subrc = 0.
" 4)自定义日期转换,去除了将20101130强制转换为2010-11-30 的write输出
" 也可以直接用99999999直接减,再按格式输出。
CALL FUNCTION 'Z_CONVERSION_EXIT_INVDT_OUTPUT'
EXPORTING
input = l_gdatu
IMPORTING
output = l_last_day.
IF item_out-WAERS is NOT INITIAL.
" 5)读取汇率
CALL FUNCTION 'READ_EXCHANGE_RATE'
EXPORTING
date = l_last_day
foreign_currency = item_out-WAERS
local_currency = 'CNY'
IMPORTING
exchange_rate = l_ukurs
foreign_factor = l_foreign_factor
local_factor = l_local_factor.
ENDIF.
" 本币 = 原币金额 * l_ukurs * l_local_factor / l_foreign_factor .
IF sy-subrc <> 0.
l_ukurs = 1. l_foreign_factor = 1. l_local_factor = 1.
ENDIF.
item_out-UKURS = l_ukurs.
item_out-BWERT_S = item_out-ZYBJE_S * l_ukurs * l_local_factor / l_foreign_factor .
ENDIF.
ELSE.
item_out-BWERT_S = item_out-ZYBJE_S.
endif.
* 暂不考虑预付款比例问题
item_out-ZYBJE = item_out-ZYBJE_S .
item_out-BWERT = item_out-BWERT_S .
* ……
MODIFY item_out.
CLEAR item_out.
ENDLOOP.
另外: 'Z_CONVERSION_EXIT_INVDT_OUTPUT' 是参考'CONVERSION_EXIT_INVDT_OUTPUT' 的函数,主要代码
INPUT 定义不变,OUTPUT定义为DVALUT。
FUNCTION Z_CONVERSION_EXIT_INVDT_OUTPUT.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(INPUT)
*" EXPORTING
*" VALUE(OUTPUT) TYPE DVALUT
*"----------------------------------------------------------------------
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.
IF INPUT <> SPACE.
HILF1 = '99999999' - INPUT.
TRANSLATE HILF1(5) USING ' 0'.
CONDENSE HILF1 NO-GAPS.
OUTDATUM = HILF1.
WRITE OUTDATUM TO OUTPUT. " 去除了原函数中的强制转化为XXXX-XX-XX的10位输出,采用8位输出。
ELSE.
OUTPUT = SPACE.
ENDIF.
ENDFUNCTION.
- [abap] 20101215 日期转换为系统内部日期
- 日期转换为系统内部日期
- ABAP - 日期格式转换
- ABAP 日期格式转换
- ABAP内外日期转换
- ABAP 常用日期转换函数
- ABAP - 日期格式转换 & ABAP常用日期处理函数
- ABAP - 日期格式转换 & ABAP常用日期处理函数
- 转换日期为农历
- 字符串转换为日期
- 日期转换为星期
- 日期格式转换 & ABAP常用日期处理函数
- JavaScript日期转换为东八区的日期
- 数字日期转换为中文文字日期
- 数字日期转换为中文日期
- java日期转换为oracle日期
- 日期字符串转换为本地日期格式
- Java将中文日期转换为日期
- WebService之Axis2(1):用POJO实现0配置的WebService
- (转)比较分析Vector、ArrayList和hashtable hashmap数据结构
- 《Python源码剖析》 读后感
- [abap] STMS-传输管理系统
- VSS的签入和签出
- [abap] 20101215 日期转换为系统内部日期
- WebService之Axis2(2):复合类型数据的传递
- JavaScript初学者应注意的七个细节
- [abap] 'REUSE_ALV_GRID_DISPLAY_LVC' 的用法
- as3 倒影
- a 的CSS 样式
- UVa OJ 113-Power of Cryptography
- [abap] smartforms句柄与以簇的方式存储数据
- Boosting和Bagging