SAP-ecc供应商主数据维护

METHOD zmm_i002_ii_si_sap_cmd_in~si_sap_cmd_in.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA: output_hd TYPE zmmi005_dt_mesg_hd,
output_body TYPE zsd_dt_hxm_res_msgbd_tab,
output_line TYPE zsd_dt_hxm_res_msgbd.
DATA: r_obj TYPE REF TO zco_si_unhxm_out.
DATA: out TYPE zsd_mt_hxm_res.

DATA:es_master_data_correct	  TYPE vmds_ei_main,
     es_message_correct       TYPE cvis_message,
     es_master_data_defective TYPE vmds_ei_main,
     es_message_defective     TYPE cvis_message.


DATA:lv_flg.
DATA:ls_main         TYPE vmds_ei_main,
     ls_mesg         TYPE cvis_message,

     lt_msg          TYPE bapiret2_t,
     lwa_msg         TYPE bapiret2,

     lt_vend         TYPE vmds_ei_extern_t,
     lwa_vend        TYPE vmds_ei_extern,

     lt_company      TYPE vmds_ei_company_t,
     lwa_company     TYPE vmds_ei_company,

     lt_bankdetails  TYPE cvis_ei_bankdetail_t,
     lwa_bankdetails TYPE cvis_ei_cvi_bankdetail, "CVIS_EI_BANKDETAIL.

     lt_purchasing   TYPE vmds_ei_purchasing_t,
     lwa_purchasing  TYPE vmds_ei_purchasing,

     lt_functions    TYPE vmds_ei_functions_t,
     lwa_functions   TYPE vmds_ei_functions.

DATA: ilen  TYPE i.


DATA: l_lifnr  TYPE lifnr.

DATA:gv_bcy    TYPE banks,
     gw_add    TYPE bapi1011_address,
     gv_bck    TYPE bankk,
     gw_return TYPE bapiret2.

DATA: lt_lfbk TYPE STANDARD TABLE OF lfbk,
      lw_lfbk TYPE lfbk.

DATA: nextno TYPE char8.


LOOP AT input-mt_sap_cmd-msgbd INTO DATA(ls_item).

  ilen = strlen( ls_item-lifnr ).

  IF  ilen > 10.
    output_line-msg = '供应商编码超长,请检查'.
    output_line-msgcode    = 'E'.
    APPEND output_line TO output_body.
    EXIT.
  ELSE.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = ls_item-lifnr
      IMPORTING
        output = lwa_vend-header-object_instance-lifnr.

  ENDIF.

  l_lifnr = lwa_vend-header-object_instance-lifnr.

  CASE ls_item-zflag.
    WHEN '' OR 'A'.
  • 主数据
    IF ls_item-zflag = ‘’.
    lwa_vend-header-object_task = ‘I’."创建/更改
    ELSE.
    lwa_vend-header-object_task = ‘U’."创建/更改
    ENDIF.

        lwa_vend-central_data-central-data-ktokk = ls_item-ktokk.
        lwa_vend-central_data-central-data-stceg = ls_item-taxnumxl.
        lwa_vend-central_data-central-datax-stceg = 'X'.
        lwa_vend-central_data-central-datax-ktokk = 'X'.
    

*地址数据
IF ls_item-zflag = ‘’.
lwa_vend-central_data-address-task = ‘I’."创建/更改
ELSE.
lwa_vend-central_data-address-task = ‘U’."创建/更改
ENDIF.

      lwa_vend-central_data-address-postal-data-title = ls_item-text15.
      lwa_vend-central_data-address-postal-data-name = ls_item-name_org1.
      lwa_vend-central_data-address-postal-data-langu = ls_item-spras.
      lwa_vend-central_data-address-postal-data-country = ls_item-land1.
      lwa_vend-central_data-address-postal-data-sort1 = ls_item-bu_sort1.
  • lwa_vend-central_data-address-postal-data-sort2 = ‘LSI’.
    lwa_vend-central_data-address-postal-data-street = ls_item-stras.

  • lwa_vend-central_data-address-postal-data-house_no = ls_item-stras.
    lwa_vend-central_data-address-postal-data-postl_cod1 = ls_item-pstlz.
    lwa_vend-central_data-address-postal-data-city = ls_item-ort01.
    lwa_vend-central_data-address-postal-data-region = ls_item-regio.

     lwa_vend-central_data-address-postal-datax-title = 'X'.
     lwa_vend-central_data-address-postal-datax-name = 'X'.
     lwa_vend-central_data-address-postal-datax-langu = 'X'.
     lwa_vend-central_data-address-postal-datax-country = 'X'.
     lwa_vend-central_data-address-postal-datax-sort1 = 'X'.
    
  •  lwa_vend-central_data-address-postal-datax-sort2 = 'X'.
        lwa_vend-central_data-address-postal-datax-street = 'X'.
    
  •  lwa_vend-central_data-address-postal-datax-house_no = 'X'.
        lwa_vend-central_data-address-postal-datax-postl_cod1 = 'X'.
        lwa_vend-central_data-address-postal-datax-city = 'X'.
        lwa_vend-central_data-address-postal-datax-country = 'X'.
        lwa_vend-central_data-address-postal-datax-region = 'X'.
    
    
        "电话
        CLEAR lwa_vend-central_data-address-communication-phone-phone[].
        DATA:ls_phone LIKE LINE OF lwa_vend-central_data-address-communication-phone-phone.
        ls_phone-contact-task = 'I'.
        ls_phone-contact-data-telephone = ls_item-telf1.
        ls_phone-contact-datax-telephone = 'X'.
        APPEND ls_phone TO lwa_vend-central_data-address-communication-phone-phone.
        CLEAR ls_phone.
    

**银行数据

      LOOP AT ls_item-hxm INTO DATA(ls_bank).
        "20230511-不传银联号
        SELECT SINGLE *
          FROM bnka
          INTO @DATA(s_bnka)
          WHERE banka = @ls_bank-banka.

        IF sy-subrc NE 0."银行不存在就创建银行再存


          "20230511业务需求生成随机数10位AG********1

          CALL FUNCTION 'NUMBER_GET_NEXT'
            EXPORTING
              nr_range_nr = '1' "上面起始编号前面的序号
              object      = 'ZBANKID' "编号对象
            IMPORTING
              number      = nextno.

          gv_bcy             = ls_bank-banks.
          gv_bck             = 'AG' && nextno.
          gw_add-bank_name   = ls_bank-banka.

          gw_add-region      = ls_item-regio.
  •         CALL FUNCTION 'BAPI_BANK_CREATE'
              EXPORTING
                bank_ctry    = gv_bcy
                bank_key     = gv_bck
                bank_address = gw_add
              IMPORTING
                return       = gw_return
                bankkey      = gv_bck.
    
            IF gv_bck IS NOT INITIAL.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
            ENDIF.
    
            CLEAR: nextno.
          ENDIF.
    

*****************************************************"20230511-不传银联号

        SELECT  *
        INTO TABLE lt_lfbk
        FROM lfbk
        WHERE lifnr = l_lifnr.

        IF sy-subrc <> 0.
          lwa_bankdetails-task = 'I'.
           "20230511取银行最新id
          SELECT  *
          FROM bnka
          INTO TABLE @DATA(lt_bnka)
          WHERE banka = @ls_bank-banka.

          SORT  lt_bnka BY erdat DESCENDING.

          READ TABLE lt_bnka INTO DATA(ls_bnka) INDEX 1.

          lwa_bankdetails-data_key-bankl = ls_bnka-bankl.  "银行编号

          lwa_bankdetails-data_key-bankn = ls_bank-bankn.  "银行帐户号码
          lwa_bankdetails-data_key-banks = ls_bank-banks.    "银行国家代码
  •          lwa_bankdetails-data-koinh     = ls_bank-koinh.  "银行帐户编号
            lwa_bankdetails-data-koinh  =    ls_bank-bankn. "20230119
            lwa_bankdetails-datax-koinh    =  'X'.
            APPEND lwa_bankdetails TO lt_bankdetails.
            CLEAR lwa_bankdetails.
          ELSE.
    
            SELECT SINGLE *
            INTO lw_lfbk
            FROM lfbk
            WHERE lifnr = l_lifnr
    
  •          AND   bankl = ls_bank-bankl
               AND   banks = ls_bank-banks  AND   bankn = ls_bank-bankn.
    
            IF sy-subrc = 0.
              IF ls_item-zflag = 'A'.
                lwa_bankdetails-task = 'U'.
    
  •              lwa_bankdetails-data_key-bankl = ls_bank-bankl.  "银行编号
                lwa_bankdetails-data_key-bankn = ls_bank-bankn.  "银行帐户号码
                lwa_bankdetails-data_key-banks = ls_bank-banks.    "银行国家代码
                lwa_bankdetails-data-koinh  =    ls_bank-bankn. "20230119
                lwa_bankdetails-datax-koinh    =  'X'.
                APPEND lwa_bankdetails TO lt_bankdetails.
                CLEAR lwa_bankdetails.
              ENDIF.
            ELSE.
              LOOP AT lt_lfbk INTO lw_lfbk.
                lwa_bankdetails-task = 'D'.
    
  •              lwa_bankdetails-data_key-bankl = lw_lfbk-bankl.  "银行编号
                lwa_bankdetails-data_key-bankn = lw_lfbk-bankn.  "银行帐户号码
                lwa_bankdetails-data_key-banks = lw_lfbk-banks.    "银行国家代码
                APPEND lwa_bankdetails TO lt_bankdetails.
                CLEAR lwa_bankdetails.
              ENDLOOP.
    
              lwa_bankdetails-task = 'I'.
    
  •            lwa_bankdetails-data_key-bankl = ls_bank-bankl.  "银行编号
              lwa_bankdetails-data_key-bankn = ls_bank-bankn.  "银行帐户号码
              lwa_bankdetails-data_key-banks = ls_bank-banks.    "银行国家代码
              lwa_bankdetails-data-koinh  =    ls_bank-bankn. "20230119
              lwa_bankdetails-datax-koinh    =  'X'.
              APPEND lwa_bankdetails TO lt_bankdetails.
              CLEAR lwa_bankdetails.
            ENDIF.
          ENDIF.
        ENDLOOP.
        lwa_vend-central_data-bankdetail-bankdetails = lt_bankdetails.
    
      APPEND lwa_vend TO lt_vend.
      ls_main-vendors = lt_vend.

    WHEN 'B' OR 'C'.
      lwa_vend-header-object_task = 'U'."创建/更改
  •      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    
  •        EXPORTING
    
  •          input         = ls_item-lifnr
    
  •       IMPORTING
    
  •         OUTPUT        = lwa_vend-header-object_instance-lifnr.
    
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = lwa_vend-header-object_instance-lifnr
          IMPORTING
            output = lwa_vend-header-object_instance-lifnr.
        IF ls_item-zflag = 'B'.
          lwa_vend-central_data-central-data-loevm = 'X'.
        ELSE.
          lwa_vend-central_data-central-data-loevm = ''.
        ENDIF.
        lwa_vend-central_data-central-datax-loevm = 'X'.
        APPEND lwa_vend TO lt_vend.
        ls_main-vendors = lt_vend.
      WHEN OTHERS.
    ENDCASE.
    
    "     vmd_ei_api=>initialize( ).
    
    CLEAR:es_master_data_correct,es_message_correct,es_master_data_defective,es_message_defective.
    
    CALL METHOD vmd_ei_api=>maintain_bapi
      EXPORTING
    
  •     iv_test_run              = SPACE
    
  •     iv_collect_messages      = SPACE
        is_master_data           = ls_main
      IMPORTING
        es_master_data_correct   = es_master_data_correct
        es_message_correct       = es_message_correct
        es_master_data_defective = es_master_data_defective
        es_message_defective     = es_message_defective.
    
  •  CALL METHOD vmd_ei_api=>maintain
    
  •    EXPORTING
    

** IV_TEST_RUN = SPACE

  •      is_master_data = ls_main
    
  •    IMPORTING
    
  •      es_error       = ls_mesg.
    
    
    IF es_message_defective IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'
    
  •     IMPORTING
    
  •       RETURN        =
        .
    
      READ TABLE es_master_data_correct-vendors INTO DATA(ls_vendor)  INDEX 1.
      output_line-orderunm1  = |ID_{ ls_item-zyl-yl1 }|.
      output_line-orderunm2  = ls_vendor-header-object_instance-lifnr.
      output_line-msgcode = 'S'.
      IF ls_item-zflag = 'B'.
        output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }冻结成功|.
      ELSEIF ls_item-zflag = 'C'.
        output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }解冻成功|.
      ELSE.
        output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }保存成功|.
      ENDIF.
      output_line-itemid = ls_item-itemid.
      APPEND output_line TO output_body.
      CLEAR output_line.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      IF ls_item-zflag = 'B'.
        output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }冻结失败|.
      ELSEIF ls_item-zflag = 'C'.
        output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }解冻失败|.
      ELSE.
        LOOP AT es_message_defective-messages INTO DATA(gs_message) WHERE type = 'E' .
          CONCATENATE output_line-msg gs_message-message INTO output_line-msg.
        ENDLOOP.
      ENDIF.
      output_line-orderunm1  = |ID_{ ls_item-zyl-yl1 }|.
      output_line-orderunm2  = ''.
      output_line-msgcode = 'E'.
      output_line-itemid = ls_item-itemid.
      APPEND output_line TO output_body.
      CLEAR output_line.
    ENDIF.
    
    CLEAR:ilen,ls_item.
    

    ENDLOOP.

    "反馈头信息
    out-mt_hxm_res-msghd-msgid = input-mt_sap_cmd-msghd-msgid.
    out-mt_hxm_res-msghd-tlgid = input-mt_sap_cmd-msghd-tlgid.
    out-mt_hxm_res-msghd-tlgname = input-mt_sap_cmd-msghd-tlgname.
    out-mt_hxm_res-msghd-dtsend = sy-datum && sy-uzeit.
    out-mt_hxm_res-msghd-sender = ‘ERP’.
    out-mt_hxm_res-msghd-receiver = input-mt_sap_cmd-msghd-sender.
    "反馈行信息
    out-mt_hxm_res-msgbd = output_body.
    TRY .
    CREATE OBJECT r_obj.
    CALL METHOD r_obj->si_unhxm_out
    EXPORTING
    output = out.
    COMMIT WORK AND WAIT.
    CALL FUNCTION ‘ZFUN_PO_LOG’
    EXPORTING

  •       OUTPUT1 =
          output2 = out.
    
    CATCH cx_ai_system_fault.
    

    ENDTRY.
    ENDMETHOD.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值