ZFI_VENDOR_CREATE

创建供应商函数,

需要考虑是 G_TASK = I /U /M 

FUNCTION zfyj_vendor_create.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IS_DATA) TYPE  ZSYJ_VENDOR
*"  EXPORTING
*"     REFERENCE(EX_STATU) TYPE  CHAR1
*"     REFERENCE(EX_MSG) TYPE  MSG
*"     REFERENCE(EX_LIFNR) TYPE  LIFNR
*"  TABLES
*"      IT_BANK STRUCTURE  ZSYJ_BANKDATA
*"----------------------------------------------------------------------

*----------------------------------------------------------------------*
*             Internal Table & Work Area
*----------------------------------------------------------------------*
  DATA:ls_bank LIKE LINE OF it_bank.

  DATA:ls_main         TYPE vmds_ei_main,
       ls_cvismesg     TYPE cvis_message,
**消息
       lt_msg          TYPE bapiret2_t,
       ls_msg          TYPE bapiret2,
**主数据
       lt_vend         TYPE vmds_ei_extern_t,
       ls_vend         TYPE vmds_ei_extern,
**银行数据
       lt_bankdetails  TYPE cvis_ei_bankdetail_t,
       ls_bankdetails  TYPE cvis_ei_cvi_bankdetail, "CVIS_EI_BANKDETAIL.
***公司代码
       lt_company      TYPE vmds_ei_company_t,
       ls_company      TYPE vmds_ei_company, "CVIS_EI_BANKDETAIL.
**电话
       lt_phone        TYPE cvis_ei_phone_t,
       ls_phone        TYPE cvis_ei_phone_str,
**传真
       lt_fax          TYPE cvis_ei_fax_t,
       ls_fax          TYPE cvis_ei_fax_str,
**联系人
       lt_pernr        TYPE vmds_ei_contacts_t,
       ls_pernr        TYPE vmds_ei_contacts,

       ls_main1        TYPE vmds_ei_main,
       ls_main2        TYPE vmds_ei_main,
       ls_cvismesg1    TYPE cvis_message,
       lt_get          TYPE vmds_ei_extern_t,
       ls_get          TYPE vmds_ei_extern.
*----------------------------------------------------------------------*
*             CONSTANTS
*----------------------------------------------------------------------*
  CONSTANTS:c_update TYPE c VALUE 'M',
            c_create TYPE c VALUE 'I'."创建

*----------------------------------------------------------------------*
*             DATA
*----------------------------------------------------------------------*
  DATA:g_mode  TYPE c.
  DATA:g_lfb1  TYPE c.
  DATA:ls_lfa1 TYPE lfa1.
*----------------------------------------------------------------------*
* VMD_EI_OBJECT_TASK 外部接口:更改对象标识
* I    创建
*  U  更改
*  M  创建/更改
*  C  当前状态
*----------------------------------------------------------------------*



*&S1.检查是否传参
  IF is_data IS INITIAL.
    ex_statu = 'E'.
    ex_msg   = '没有传入参数'(e01).
    RETURN.
  ENDIF.
*  CALL FUNCTION 'BUFFER_REFRESH_ALL'.

*&基础数据是否创建
  SELECT SINGLE *
           INTO ls_lfa1
           FROM lfa1
          WHERE lifnr = is_data-lifnr.
  IF sy-subrc EQ 0.
    g_mode = 'M'.
  ELSE.
    g_mode = 'I'.
  ENDIF.

*&s1.主数据
  ls_vend-header-object_task = g_mode.
  ls_vend-header-object_instance-lifnr    = is_data-lifnr.

  ls_vend-central_data-central-data-ktokk = is_data-ktokk. "帐户组
  ls_vend-central_data-central-data-actss = is_data-actss. "状态
  ls_vend-central_data-central-data-fityp = is_data-fityp. "税类型
  ls_vend-central_data-central-data-stceg = is_data-stceg. "税号
*LS_VEND-CENTRAL_DATA-CENTRAL-DATA-STCDT = '01'."税号类型
  ls_vend-central_data-central-datax-ktokk = 'X'.
  ls_vend-central_data-central-datax-actss = 'X'.
  ls_vend-central_data-central-datax-fityp = 'X'.
  ls_vend-central_data-central-datax-stceg = 'X'.
*s2.地址数据
  ls_vend-central_data-address-task = g_mode.
  ls_vend-central_data-address-postal-data-title   = is_data-title. "‘3’公司
  ls_vend-central_data-address-postal-data-name    = is_data-name1. "名称 1
  ls_vend-central_data-address-postal-data-sort1   = is_data-sort1. "搜索项 1
  ls_vend-central_data-address-postal-data-sort2   = is_data-sort2. "搜索项 2
  ls_vend-central_data-address-postal-data-langu   = is_data-langu.
  ls_vend-central_data-address-postal-data-country = is_data-land1.
  ls_vend-central_data-address-postal-data-region  = ''.            "地区(是否默认值)
  ls_vend-central_data-address-postal-data-street  = is_data-stras. "地址
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT1    = 'LSI'.  "检索项1
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT2    = 'LSI'.  "检索项2
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-HOUSE_NO = 'California'."门牌号
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-POSTL_COD1 = '466303'.
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-CITY   = '青岛'.
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGION = '120'.
*&sign
  ls_vend-central_data-address-postal-datax-title   = 'X'.
  ls_vend-central_data-address-postal-datax-name    = 'X'.
  ls_vend-central_data-address-postal-datax-langu   = 'X'.
  ls_vend-central_data-address-postal-datax-country = 'X'.
  ls_vend-central_data-address-postal-datax-street  = 'X'.
  ls_vend-central_data-address-postal-datax-sort1 = 'X'.
  ls_vend-central_data-address-postal-datax-sort2 = 'X'.
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-HOUSE_NO = 'X'.
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POSTL_COD1 = 'X'.
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-CITY   = 'X'.
*LS_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-REGION = 'X'.

* break c_xiangc.
  DATA:lt_lfbk LIKE STANDARD TABLE OF lfbk.
  CLEAR:lt_lfbk.
  SELECT * INTO TABLE lt_lfbk
    FROM lfbk
   WHERE lifnr = is_data-lifnr.
  IF sy-subrc EQ 0.

    DELETE lfbk FROM TABLE lt_lfbk.
    COMMIT WORK.
  ENDIF.
*&s3. 银行数据
  LOOP AT it_bank INTO ls_bank.
    ls_bankdetails-task = g_mode.
    ls_bankdetails-data_key-banks = ls_bank-banks."国家代码
    ls_bankdetails-data_key-bankl = ls_bank-bankl."银行编号
    ls_bankdetails-data_key-bankn = ls_bank-bankn."银行帐户号码

    ls_bankdetails-data-koinh = ls_bank-koinh.    "银行户主

    ls_bankdetails-datax-koinh = 'X'.             "银行户主
*    ls_bankdetails-datax-banks = 'X'.             "银行户主
*    ls_bankdetails-datax-bankn = 'X'.             "银行户主
    APPEND ls_bankdetails TO lt_bankdetails.
    ls_vend-central_data-bankdetail-bankdetails = lt_bankdetails."外部界面:银行详细数据
  ENDLOOP.
*&s4.会计信息+支付交易
*AKONT 统驭科目:2202020000、
*MINDK 少数标识:T0、
*CERDT 证书日期:默认创建日期、
*ZTERM 付款条件(固定值未定)、
*ZWELS 付款方式默认T。

*  ls_vend-COMPANY_DATA-object_task = G_MODE.
*  ls_vend-header-object_instance-lifnr    = is_data-lifnr.
*  ls_vend-central_data-central-data-ktokk = is_data-ktokk. "帐户组
*  ls_vend-central_data-central-data-actss = is_data-actss. "状态
*  ls_vend-central_data-central-data-fityp = is_data-fityp. "税类型
*  ls_vend-central_data-central-data-stceg = is_data-stceg. "税号
**LS_VEND-CENTRAL_DATA-CENTRAL-DATA-STCDT = '01'."税号类型
*  ls_vend-central_data-central-datax-ktokk = 'X'.
*  ls_vend-central_data-central-datax-actss = 'X'.
*  ls_vend-central_data-central-datax-fityp = 'X'.
*  ls_vend-central_data-central-datax-stceg = 'X'.

  ls_company-task = g_mode.
  ls_company-data_key-bukrs = is_data-bukrs.
  ls_company-data-akont = is_data-akont."统驭科目
  ls_company-data-mindk = is_data-mindk."少数标识
  ls_company-data-cerdt = is_data-cerdt."证书日期
  ls_company-data-zterm = is_data-zterm."付款条件
  ls_company-data-zwels = is_data-zwels."付款方式

  ls_company-datax-akont = 'X'.
  ls_company-datax-mindk = 'X'.
  ls_company-datax-cerdt = 'X'.
  ls_company-datax-zterm = 'X'.
  ls_company-datax-zwels = 'X'.
  APPEND ls_company TO lt_company.
  ls_vend-company_data-company = lt_company."外部界面:银行详细数据

**&s4.电话
*  ls_phone-contact-task = G_MODE.
*  ls_phone-contact-data-telephone = in_data-telf1."拨区号 + 号码
*  append ls_phone to lt_phone.
*  ls_vend-central_data-address-communication-phone-phone = lt_phone."外部界面:银行详细数据
*
*  ls_phone-contact-data-telephone = in_data-telf2."拨区号 + 号码
*  ls_phone-contact-data-r_3_user  =  '2'.         "电话类型标识,‘2’移动电话
*  append ls_phone to lt_phone.
*  ls_vend-central_data-address-communication-phone-phone = lt_phone.
**&s5.传真
*  ls_fax-contact-task = 'M'.
*  ls_fax-contact-data-fax = in_data-telfx."传真号: 拨号+编号
*  ls_fax-contact-data-country = ''.       "传真号码的国家
*  append ls_fax to lt_fax.
*  ls_vend-central_data-address-communication-fax-fax = lt_fax.
**&s6.联系人(error)
*  ls_pernr-task = G_MODE.
*  ls_pernr-address_type_3-task = 'i'."'m'.
*  ls_pernr-address_type_3-postal-data-fullname = in_data-namel."联系人名称/fullname
**ls_pernr-address_type_3-postal-data-firstname = '二小'."联系人名称/fullname
**ls_pernr-address_type_3-postal-data-lastname  = '王'.  "联系人名称/fullname
**ls_pernr-address_type_3-postal-data-title_p   = '0001'.  "地址关键字的表格
**ls_pernr-address_type_3-postal-datax-fullname = 'x'."联系人名称/fullname
**ls_pernr-address_type_3-postal-datax-firstname = 'x'.  "地址关键字的表格
**ls_pernr-address_type_3-postal-datax-lastname  = 'x'.  "地址关键字的表格
**append ls_pernr to lt_pernr.
* ls_vend-central_data-contact-contacts = lt_pernr.

  APPEND ls_vend TO lt_vend.
  ls_main-vendors = lt_vend."供应商总数据

**Create vendor
  CALL METHOD vmd_ei_api=>maintain_bapi
    EXPORTING
*       IV_TEST_RUN              = P_TEST
      iv_collect_messages      = 'X'
      is_master_data           = ls_main
    IMPORTING
      es_master_data_correct   = ls_main1
      es_message_correct       = ls_cvismesg1
      es_master_data_defective = ls_main2
      es_message_defective     = ls_cvismesg.

**get message
  lt_msg = ls_cvismesg-messages.
  lt_get[] = ls_main1-vendors.

  LOOP AT lt_msg INTO ls_msg WHERE type = 'E' OR type = 'A'.
    ex_statu = 'E'.
    ex_msg  = ls_msg-message.
  ENDLOOP.
**return
  IF ex_statu NE 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    READ TABLE lt_get INTO ls_get INDEX 1.
    ex_lifnr = ls_get-header-object_instance-lifnr.
    ex_statu = 'S'.
    ex_msg  = '创建供应商成功!'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
* ROLLBACK WORK.
* ex_statu = 'E'.
* ex_msg  = '创建供应商失败!'.
  ENDIF.

ENDFUNCTION.

----------------------------------------------------------------------------------
Extracted by Direct Download Enterprise version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 701
原文地址:https://www.cnblogs.com/rainysblog/p/6839103.html