SAP取汇率接口 OB08

业务背景:
其他系统需要从SAP取OB08汇率
我们知道,SAP可以仅维护3月和5月两条汇率,如果4月没有维护,则会取3月的汇率。
但接口要求,3月那条生效日期为3月1日,失效日期为4月30号,SAP本身是没有的,需要程序里面处理下。
输入参数为可以为空,返回所有
(对于顾问亦可以作为FS开发说明书,懂基础ABAP的,右上角可以找我免费领取源码)

FUNCTION ZRFC_OA_004.
*”———————————————————————-
*”*”本地接口:
*”  IMPORTING
*”     REFERENCE(IN_DATE) TYPE  GDATU_INV
*”  TABLES
*”      T_OUT STRUCTURE  ZBAPI1093_0
*”———————————————————————-


  DATA: BEGIN OF gs_tcurr,
          fcurr LIKE tcurr-fcurr,
          gdatu LIKE tcurr-gdatu,
        END OF gs_tcurr .
  DATA: gt_tcurr LIKE TABLE OF gs_tcurr .

  DATA: ls_out2 LIKE zbapi1093_0 .
  DATA: lt_out2 LIKE TABLE OF zbapi1093_0 .

 DATA: HILF1(9)   TYPE C,
      OUTDATUM   TYPE D.
  DATA:  ls_exch_rate LIKE  bapi1093_0 .
  DATA:  ls_out LIKE zbapi1093_0 .
  DATA:  lv_date TYPE c LENGTH 10 .
  DATA:  lv_date2 TYPE bapi1093_2-trans_date .

  SELECT DISTINCT  fcurr gdatu
   INTO TABLE gt_tcurr
   FROM tcurr
   WHERE kurst EQ ‘M’
    and GDATU >= IN_DATE .
 .

  LOOP AT gt_tcurr INTO gs_tcurr .
*    CALL FUNCTION ‘CONVERSION_EXIT_INVDT_OUTPUT’
*      EXPORTING
*        input  = gs_tcurr-gdatu
*      IMPORTING
*        output = lv_date.
*
*    CALL FUNCTION ‘CONVERT_DATE_TO_INTERNAL’
*      EXPORTING
*        date_external            = lv_date
*        accept_initial_date      = ‘X’
*      IMPORTING
*        date_internal            = lv_date2
*      EXCEPTIONS
*        date_external_is_invalid = 1
*        OTHERS                   = 2.
*    IF sy-subrc <> 0.
** Implement suitable error handling here
*    ENDIF.


     IF gs_tcurr-gdatu <> SPACE.
    HILF1 = ‘99999999’ – gs_tcurr-gdatu.
    TRANSLATE HILF1(5) USING ‘ 0’.     “bspw. Eingabe von Jahr = ‘0001’
    CONDENSE HILF1 NO-GAPS.
    OUTDATUM = HILF1.
    WRITE OUTDATUM TO lv_date2  .
  ELSE.
    gs_tcurr-gdatu = SPACE.       ” damit bei ‘Springen->Anderer Eintrag’ nicht
  ENDIF.


    CALL FUNCTION ‘BAPI_EXCHANGERATE_GETDETAIL’
      EXPORTING
        rate_type  = ‘M’
        from_curr  = gs_tcurr-fcurr
        to_currncy = ‘CNY’
        date       = lv_date2
      IMPORTING
        exch_rate  = ls_exch_rate
*       RETURN     =
      .
    MOVE-CORRESPONDING  ls_exch_rate TO ls_out .
    ls_out-exch_rate2 = ls_out-exch_rate  / ls_out-from_factor .
    APPEND ls_out TO t_out .
    APPEND ls_out TO lt_out2 .
  ENDLOOP .

  SORT lt_out2 BY  from_curr valid_from .
  SORT t_out BY    from_curr valid_from .
  DATA lv_tabix TYPE sy-tabix .
  LOOP AT t_out INTO ls_out .
    READ TABLE lt_out2 WITH KEY   from_curr = ls_out-from_curr
                                  valid_from  = ls_out-valid_from
                                  TRANSPORTING NO FIELDS .
    IF sy-subrc EQ 0 .
      lv_tabix =  sy-tabix  .
      READ TABLE lt_out2 INTO ls_out2  INDEX  lv_tabix + 1 .
      ls_out-invalid = ls_out2-valid_from – 1 .

    ENDIF .


    MODIFY t_out FROM  ls_out .
    CLEAR : ls_out ,ls_out2 .

  ENDLOOP .

ENDFUNCTION.


ICP备案号: 鄂ICP备2022007022号-1