zoukankan      html  css  js  c++  java
  • 供应商主数据 同步接口

    FUNCTION zrfc_mm007.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  IMPORTING
    *"     VALUE(CALLNO) TYPE  ZCALLNO
    *"     VALUE(ZDATE) TYPE  SY-DATUM OPTIONAL
    *"  EXPORTING
    *"     VALUE(FLAG) LIKE  BAPIRET2-TYPE
    *"     VALUE(MESSAGE) LIKE  BAPIRET2-MESSAGE
    *"  TABLES
    *"      ZLFA1 STRUCTURE  ZLFA1
    *"----------------------------------------------------------------------
    TYPES:BEGIN OF ty_lifnr,
          lifnr       TYPE lfa1-lifnr,
         END OF ty_lifnr.
    
    DATA: BEGIN OF ls_lfa1.
    INCLUDE TYPE zlfa1.
    DATA:  name2      TYPE lfa1-name2,
           name3      TYPE lfa1-name3,
           name4      TYPE lfa1-name4,
           street     TYPE adrc-street,
           str_suppl1 TYPE adrc-str_suppl1.
    DATA:  END OF ls_lfa1.
    
    DATA:lt_lfa1      LIKE TABLE OF ls_lfa1,
         ls_zlfa1     TYPE zlfa1,
         lv_datano    TYPE zdatano.
    
    DATA:lt_cdhdr     TYPE TABLE OF cdhdr,
         ls_cdhdr     TYPE cdhdr,
         lt_lifnr     TYPE TABLE OF ty_lifnr,
         ls_lifnr     TYPE ty_lifnr.
    
    DATA:lt_lfa2      TYPE TABLE OF lfa1,
         lt_lfb1      TYPE TABLE OF lfb1,
         lt_lfm1      TYPE TABLE OF lfm1,
         lt_lfbk      TYPE TABLE OF lfbk,
         lt_adrc      TYPE TABLE OF adrc,
         lt_bnka      TYPE TABLE OF bnka,
         ls_lfa2      TYPE  lfa1,
         ls_lfb1      TYPE  lfb1,
         ls_lfm1      TYPE  lfm1,
         ls_lfbk      TYPE  lfbk,
         ls_adrc      TYPE  adrc,
         ls_bnka      TYPE  bnka.
    
    FIELD-SYMBOLS <fs> TYPE  zlfa1.
    
    *--取得所有银行主数据
    SELECT * INTO TABLE lt_bnka FROM bnka.
    SORT lt_bnka BY banks bankl.
    
    IF zdate IS INITIAL.
    *---全量查询
    SELECT  lfa1~lifnr
            lfb1~bukrs
            lfa1~ktokk
            lfm1~ekorg
            lfa1~name1
            lfa1~stras
            lfa1~telf1
            lfm1~verkf
            lfa1~stceg
            lfbk~banks
            lfbk~bankl
            lfbk~bankn
            lfbk~koinh
            lfb1~zterm
            lfb1~zwels
            lfb1~akont
            lfa1~loevm
            lfa1~name2
            lfa1~name3
            lfa1~name4
            lfa1~name4
            adrc~street
            adrc~str_suppl1
      INTO CORRESPONDING FIELDS OF TABLE lt_lfa1
      FROM lfa1
      LEFT JOIN lfb1 ON lfa1~lifnr = lfb1~lifnr
      LEFT JOIN lfbk ON lfa1~lifnr = lfbk~lifnr
      LEFT JOIN lfm1 ON lfa1~lifnr = lfm1~lifnr
      LEFT JOIN adrc ON lfa1~adrnr = adrc~addrnumber.
    
     zlfa1[] = lt_lfa1.
    
     SORT lt_lfa1 BY lifnr.
     LOOP AT zlfa1 ASSIGNING <fs>.
     READ TABLE lt_lfa1 INTO ls_lfa1 WITH  KEY lifnr = <fs>-lifnr BINARY SEARCH.
       IF sy-subrc = 0.
    
    *---公司名称
        CONCATENATE ls_lfa1-name1  ls_lfa1-name2
                    ls_lfa1-name3  ls_lfa1-name4 INTO <fs>-name1.
    
    *---地址街道
        CONCATENATE ls_lfa1-street ls_lfa1-str_suppl1 INTO <fs>-stras.
       ENDIF.
    
    *--银行名称
        READ TABLE lt_bnka INTO ls_bnka WITH KEY banks = <fs>-banks
                                                 bankl = <fs>-bankl BINARY SEARCH.
        IF sy-subrc = 0.
        <fs>-banka = ls_bnka-banka.
        ENDIF.
     ENDLOOP.
    
    *----增量查询
    ELSE.
    
      SELECT * INTO TABLE lt_cdhdr FROM cdhdr
        WHERE objectclas = 'KRED'
         AND  udate     = zdate.
    
      SORT lt_cdhdr BY objectid.
      DELETE ADJACENT DUPLICATES FROM lt_cdhdr COMPARING objectid.
    
      LOOP AT lt_cdhdr INTO ls_cdhdr.
        ls_lifnr-lifnr = ls_cdhdr-objectid+0(10).
        APPEND ls_lifnr TO lt_lifnr.
      ENDLOOP.
    
    IF lt_lifnr IS NOT INITIAL.
      SELECT * INTO TABLE lt_lfa2 FROM lfa1        " 供应商一般数据据
        FOR ALL ENTRIES IN lt_lifnr
        WHERE lifnr = lt_lifnr-lifnr.
    
      SELECT * INTO TABLE  lt_lfb1 FROM lfb1       "供应商财务数据
        FOR ALL ENTRIES IN  lt_lifnr
        WHERE lifnr = lt_lifnr-lifnr.
    
      SELECT * INTO TABLE lt_lfm1 FROM lfm1        "供应商主记录采购数据
        FOR ALL ENTRIES IN  lt_lifnr
        WHERE lifnr = lt_lifnr-lifnr.
    
      SELECT * INTO TABLE lt_lfbk FROM lfbk        "供应商银行数据
        FOR ALL ENTRIES IN lt_lifnr
        WHERE lifnr = lt_lifnr-lifnr.
    
      IF lt_lfa2 IS NOT INITIAL.
         SELECT * INTO TABLE lt_adrc FROM adrc     "地址
           FOR ALL ENTRIES IN lt_lfa2
           WHERE addrnumber = lt_lfa2-adrnr.
      ENDIF.
    ENDIF.
    SORT lt_lfb1 BY lifnr.
    SORT lt_lfm1 BY lifnr.
    SORT lt_lfbk BY lifnr.
    SORT lt_adrc BY addrnumber.
    LOOP AT lt_lfa2 INTO ls_lfa2.
      ls_zlfa1-lifnr = ls_lfa2-lifnr.
      ls_zlfa1-ktokk = ls_lfa2-ktokk.
      ls_zlfa1-stras = ls_lfa2-stras.
      ls_zlfa1-stceg = ls_lfa2-stceg.
      ls_zlfa1-loevm = ls_lfa2-loevm.
      ls_zlfa1-telf1 = ls_lfa2-telf1.
    *---公司名称
      CONCATENATE ls_lfa2-name1  ls_lfa2-name2
                  ls_lfa2-name3  ls_lfa2-name4 INTO ls_zlfa1-name1.
    
    READ TABLE lt_lfb1 INTO ls_lfb1 WITH KEY lifnr = ls_lfa2-lifnr BINARY SEARCH.
    IF sy-subrc = 0.
    ls_zlfa1-bukrs = ls_lfb1-bukrs.
    ls_zlfa1-zterm = ls_lfb1-zterm.
    ls_zlfa1-zwels = ls_lfb1-zwels.
    ls_zlfa1-akont = ls_lfb1-akont.
    ENDIF.
    
    READ TABLE lt_lfm1 INTO ls_lfm1 WITH KEY lifnr = ls_lfa2-lifnr BINARY SEARCH.
    IF sy-subrc = 0.
    ls_zlfa1-ekorg = ls_lfm1-ekorg.
    ls_zlfa1-verkf = ls_lfm1-verkf.
    ENDIF.
    
    READ TABLE lt_lfbk INTO ls_lfbk WITH KEY lifnr = ls_lfa2-lifnr BINARY SEARCH.
    IF sy-subrc = 0.
    ls_zlfa1-banks = ls_lfbk-banks.
    ls_zlfa1-bankl = ls_lfbk-bankl.
    ls_zlfa1-bankn = ls_lfbk-bankn.
    ls_zlfa1-koinh = ls_lfbk-koinh.
    ENDIF.
    
    READ TABLE lt_adrc INTO ls_adrc WITH KEY addrnumber = ls_lfa2-adrnr BINARY SEARCH.
    IF sy-subrc = 0.
    *---地址街道
        CONCATENATE ls_adrc-street ls_adrc-str_suppl1 INTO ls_zlfa1-stras.
    ENDIF.
    
    *--银行名称
    READ TABLE lt_bnka INTO ls_bnka WITH KEY banks = ls_zlfa1-banks
                                             bankl = ls_zlfa1-bankl BINARY SEARCH.
    IF sy-subrc = 0.
    ls_zlfa1-banka = ls_bnka-banka.
    ENDIF.
    
    APPEND ls_zlfa1 TO zlfa1.
    ENDLOOP.
    ENDIF.
    
    *---返回消息
    IF zlfa1[] IS NOT INITIAL.
         flag  = 'S'.
         message = '查询成功'.
    ELSE.
         flag = 'E'.
         message = '没有数据'.
    ENDIF.
    
    
    *----*日志记录
     CLEAR:gs_log,gt_log.
     LOOP AT zlfa1 ASSIGNING <fs>.
        lv_datano     = lv_datano + 1.
        gs_log-datano = lv_datano.
        gs_log-name   = 'ZRFC_MM007'.
        gs_log-cdate  = sy-datum.
        GET TIME.
        gs_log-ctime  = sy-uzeit.
        gs_log-callno = callno.
        gs_log-flag   = flag.
        gs_log-log    = message.
    
        CONCATENATE zdate
        <fs>-lifnr  <fs>-bukrs  <fs>-ktokk  <fs>-ekorg  <fs>-name1  <fs>-stras  <fs>-telf1  <fs>-verkf  <fs>-stceg
        <fs>-banks  <fs>-bankl  <fs>-banka  <fs>-bankn  <fs>-koinh  <fs>-zterm  <fs>-zwels  <fs>-akont
        <fs>-loevm
        INTO gs_log-content SEPARATED BY ''.
        CONDENSE gs_log-content NO-GAPS.
        gs_log-length = STRLEN( gs_log-content ).
        APPEND gs_log TO gt_log.
        CLEAR  gs_log.
     ENDLOOP.
    
       IF gt_log IS NOT INITIAL.
         INSERT zrfc_mm01in_log FROM TABLE gt_log.
         IF sy-subrc = 0.
           COMMIT WORK.
         ENDIF.
       ENDIF.
    
    
    ENDFUNCTION.
  • 相关阅读:
    sql刷题day03
    sql刷题day2
    sql刷题day1
    Vue学习
    HashMap学习笔记整理
    数组问题(鸽巢原理、数字交换、链表寻环)
    mybatis参数设置问题
    codeforces 327A
    codeforces 189A
    codeforces-455A
  • 原文地址:https://www.cnblogs.com/caizjian/p/6074219.html
Copyright © 2011-2022 走看看