BP批量导入程序

REPORT zfic_cust_batch_upload.
*-----------------------------------------------------------------------
*  数据定义
*&---------------------------------------------------------------------*
TABLES sscrfields.
CONSTANTS:cn_flag TYPE char1 VALUE 'X'.
DATA smp_dyntxt TYPE smp_dyntxt.
*"模板下载
DATA: gv_objid_xls           TYPE wwwdatatab-objid,
      gv_export_filename_xls TYPE string.
DATA: gs_layout   TYPE lvc_s_layo,
      gs_settings TYPE lvc_s_glay.
DATA: gt_fcat TYPE lvc_t_fcat,
      gs_fcat TYPE lvc_s_fcat.
DATA: gt_sort TYPE lvc_t_sort,
      gs_sort TYPE lvc_s_sort.
DATA  lw_grid TYPE REF TO cl_gui_alv_grid.
DATA: gv_struct TYPE dd02l-tabname.

TYPES:BEGIN OF ty_alv,
        icon    TYPE icon_d,
        message TYPE bapi_msg.
    INCLUDE TYPE zfis_cust_base.
TYPES:END OF ty_alv.

DATA: gt_alv TYPE TABLE OF ty_alv,
      gs_alv TYPE ty_alv.

TYPES:BEGIN OF ty_alv1,
        icon    TYPE icon_d,
        message TYPE bapi_msg.
    INCLUDE TYPE zfis_cust_company.
TYPES:END OF ty_alv1.

DATA: gt_alv1 TYPE TABLE OF ty_alv1,
      gs_alv1 TYPE ty_alv1.

DATA: gt_upload_base TYPE TABLE OF zfis_cust_base,
      gs_upload_base TYPE zfis_cust_base,
      gt_upload_comp TYPE TABLE OF zfis_cust_company,
      gs_upload_comp TYPE zfis_cust_company.
DATA:
  "ALV 选定单元格&行项目
  gt_cell      TYPE lvc_t_cell,
  gs_cell      TYPE lvc_s_cell,
  gt_row       TYPE lvc_t_roid,
  gs_row       TYPE  lvc_s_roid,
  "ALV被选定行数量
  gv_row_lines TYPE i.

"下载文件类型
CONSTANTS gc_file_type_xls TYPE string VALUE 'xls'.
*-----------------------------------------------------------------------
*  选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN: FUNCTION KEY 1.
SELECTION-SCREEN: FUNCTION KEY 2.
PARAMETERS:p_1 RADIOBUTTON GROUP rg1, "批量创建
           p_2 RADIOBUTTON GROUP rg1. "批量修改(扩充客户公司主数据)
*           p_3 RADIOBUTTON GROUP rg1. "批量修改(扩充供应商公司数据)
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
PARAMETERS: p_upload TYPE rlgrap-filename MODIF ID m4.
SELECTION-SCREEN END OF BLOCK b3.

*-----------------------------------------------------------------------
* 屏幕初始化,设置图标和文本
*&---------------------------------------------------------------------*
INITIALIZATION.

  smp_dyntxt-icon_id   = icon_table_settings .
  smp_dyntxt-quickinfo = 'Preselected Carrier'.
  smp_dyntxt-icon_text = '下载客商主数据导入模板'.
  sscrfields-functxt_01 = smp_dyntxt.

*-----------------------------------------------------------------------
* 文本框选择
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_upload.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name = 'P_UPLOAD'
    IMPORTING
      file_name  = p_upload.

*-----------------------------------------------------------------------
* 选择屏幕下载事件
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.

    WHEN 'FC01'.

      gv_objid_xls = 'ZFIC_CUST_BATCACH'.
      gv_export_filename_xls = '客商主数据导入模板'.

      PERFORM frm_download_xls_template USING  gv_objid_xls
                                               gc_file_type_xls
                                               gv_export_filename_xls.

  ENDCASE.
*-----------------------------------------------------------------------
* 程序入口
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_upload_excel.
  PERFORM frm_create_bp.
  PERFORM frm_show_result.
*&---------------------------------------------------------------------*
*& 从EXCEL里导入数据
*&---------------------------------------------------------------------*
FORM frm_upload_excel .

  DATA: lt_tab TYPE TABLE OF alsmex_tabline WITH HEADER LINE,
        ls_tab TYPE alsmex_tabline.
  DATA: l_str   TYPE string.
  DATA: l_no    TYPE i VALUE 1,
        l_char  TYPE char4 VALUE '0001',
        l_tabix LIKE sy-tabix.
  DATA: l_new_row TYPE kcd_ex_row_n.


  FIELD-SYMBOLS:<fs> TYPE any.


**->基本视图导入
*  IF p_1 = 'X'.
*从EXCEL中上载数据
  CLEAR lt_tab[].

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename    = p_upload
      i_begin_col = 1
      i_begin_row = 2
      i_end_col   = 24
      i_end_row   = 65536
      sheet_name  = 'BP客户供应商数据初始化' "'基本视图'
    TABLES
      intern      = lt_tab[].

  LOOP AT lt_tab.
    CONDENSE lt_tab-value.
    ASSIGN COMPONENT lt_tab-col OF STRUCTURE gs_upload_base TO <fs>.         "动态方法将值传到相应的内表
    IF <fs> IS ASSIGNED.
      MOVE lt_tab-value TO <fs>.
      UNASSIGN <fs>.
    ENDIF.
    AT END OF row.
      APPEND gs_upload_base TO gt_upload_base.
      CLEAR:gs_upload_base,
            l_tabix.
    ENDAT.
  ENDLOOP.

  CLEAR lt_tab[].

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename    = p_upload
      i_begin_col = 1
      i_begin_row = 2
      i_end_col   = 5
      i_end_row   = 65536
      sheet_name  = 'BP客户供应商分配公司代码' "'基本视图'
    TABLES
      intern      = lt_tab[].

  LOOP AT lt_tab.
    CONDENSE lt_tab-value.
    ASSIGN COMPONENT lt_tab-col OF STRUCTURE gs_upload_comp TO <fs>.         "动态方法将值传到相应的内表
    IF <fs> IS ASSIGNED.
      MOVE lt_tab-value TO <fs>.
      UNASSIGN <fs>.
    ENDIF.
    AT END OF row.
      APPEND gs_upload_comp TO gt_upload_comp.
      CLEAR: gs_upload_comp,
            l_tabix.
    ENDAT.
  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_XLS_TEMPLATE
*&---------------------------------------------------------------------*
* 下载模板
*----------------------------------------------------------------------*
FORM frm_download_xls_template USING fu_objid           TYPE wwwdatatab-objid
                                     fu_file_type       TYPE string
                                     fu_export_filename TYPE string.

  DATA: lo_objdata     LIKE wwwdatatab,
        lo_mime        LIKE w3mime,
        lc_filename    TYPE string,
        lc_fullpath    TYPE string,
        lc_path        TYPE string,
        ls_destination LIKE rlgrap-filename,
        li_rc          LIKE sy-subrc.
  DATA:p_objid TYPE wwwdatatab-objid, "SAP WWW 网关对象名
       p_dest  LIKE sapb-sappfad. "SAP 存档链接文件路径

  lc_filename = fu_export_filename.
  p_objid = fu_objid.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_extension    = fu_file_type
      default_file_name    = lc_filename
      initial_directory    = 'C:Documents and Settings\Desktop'
    CHANGING
      filename             = lc_filename
      path                 = lc_path
      fullpath             = lc_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF lc_fullpath = ''.
    MESSAGE e001(00) WITH fu_export_filename '无法打开'.
  ENDIF.
  IF sy-subrc = 0.
    "检查模板是否存在
    p_dest = lc_fullpath.
    SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS
    OF lo_objdata
    WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
    IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
      MESSAGE e001(00) WITH fu_export_filename '不存在'.
    ENDIF.
    "下载模板
    ls_destination = p_dest.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lo_objdata
        destination = ls_destination
      IMPORTING
        rc          = li_rc.
    IF li_rc NE 0.
      MESSAGE e001(00) WITH fu_export_filename '下载失败'.
    ENDIF.
  ENDIF.

ENDFORM. " DOWNLOAD_XLS_TEMPLATE
*&---------------------------------------------------------------------*
*&创建BP主数据
*&---------------------------------------------------------------------*
FORM frm_create_bp .

  DATA:lt_input   TYPE TABLE OF zfis_cust_base,
       ls_input   TYPE zfis_cust_base,
       lt_company TYPE TABLE OF zfis_cust_company,
       ls_company TYPE zfis_cust_company,
       lt_return  TYPE TABLE OF zfis_cust_return,
       ls_return  TYPE bapiret2,
       lt_comp    TYPE TABLE OF zfis_054_bp_company,
       wa_comp    TYPE zfis_054_bp_company,
       lt_return1 TYPE TABLE OF zfis_054_bp_return,
       wa_return1 TYPE zfis_054_bp_return,
       l_type     TYPE char1,
       l_index    TYPE i.


  LOOP AT gt_upload_base INTO gs_upload_base.
    MOVE-CORRESPONDING gs_upload_base TO ls_input.
    APPEND ls_input TO lt_input.
  ENDLOOP.

  LOOP AT gt_upload_comp INTO gs_upload_comp.
    MOVE-CORRESPONDING gs_upload_comp TO ls_company.
    APPEND ls_company TO lt_company.
  ENDLOOP.
*
  IF p_1 = 'X'.

    CALL FUNCTION 'ZF_FI_CUST_CREATE'
      TABLES
        it_input  = lt_input
        it_comp   = lt_company
        ot_return = lt_return.

    LOOP AT gt_upload_base INTO gs_upload_base.

      ADD 1 TO l_index.

      MOVE-CORRESPONDING gs_upload_base TO gs_alv.

      READ TABLE lt_return INTO DATA(wa_return) INDEX l_index.

      IF sy-subrc EQ 0.
        CASE wa_return-status.
          WHEN 'S'.
            gs_alv-icon = icon_led_green.
          WHEN 'E'.
            gs_alv-icon = icon_led_red.
        ENDCASE.
        gs_alv-message = wa_return-message.
        gs_alv-kunnr   = wa_return-kunnr.
      ENDIF.
      APPEND gs_alv TO gt_alv.
    ENDLOOP.

  ENDIF.


  LOOP AT gt_upload_comp INTO gs_upload_comp.
    MOVE-CORRESPONDING gs_upload_comp TO gs_alv1.
    APPEND gs_alv1 TO gt_alv1.
  ENDLOOP.

  SORT gt_alv1 BY kunnr.

ENDFORM.
*&---------------------------------------------------------------------*
*显示创建结果
*&---------------------------------------------------------------------*
FORM frm_show_result .

  DATA: lv_stylerow TYPE lvc_s_styl.

  gs_layout-cwidth_opt = 'X'.
  gs_layout-sel_mode   = 'A'.

  IF p_1 = 'X'.
    gv_struct            = 'ZFIS_CUST_BASE'.
  ELSE.
    gv_struct            = 'ZFIS_CUST_COMPANY'.
  ENDIF.

  PERFORM frm_get_fieldcat_via_fm   USING    gv_struct
                                    CHANGING gt_fcat.

  CLEAR gs_fcat.
  gs_fcat-col_pos   = '1'.
  gs_fcat-fieldname = 'ICON'.
  gs_fcat-scrtext_s =  '状态'.
  gs_fcat-scrtext_l =  '状态'.
  gs_fcat-scrtext_l =  '状态'.
  gs_fcat-outputlen =  '4'.
  gs_fcat-no_zero   =  'X'.
  APPEND gs_fcat TO gt_fcat.

  CLEAR gs_fcat.
  gs_fcat-col_pos   = '2'.
  gs_fcat-fieldname = 'MESSAGE'.
  gs_fcat-scrtext_s =  '消息'.
  gs_fcat-scrtext_l =  '消息 '.
  gs_fcat-scrtext_l =  '消息'.
  gs_fcat-outputlen =  '4'.
  gs_fcat-no_zero   =  'X'.
  APPEND gs_fcat TO gt_fcat.


  DATA:l_grid_settings TYPE lvc_s_glay.
  l_grid_settings-edt_cll_cb = 'X'.

  IF p_1 = 'X'.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
      EXPORTING
        i_callback_program       = sy-repid
        i_callback_pf_status_set = 'PF_STATUS_SET'
        i_callback_user_command  = 'USER_COMMAND'
        is_layout_lvc            = gs_layout
        it_fieldcat_lvc          = gt_fcat[]
        i_save                   = 'A'
*       it_events                = gt_events
        i_grid_settings          = l_grid_settings
      TABLES
        t_outtab                 = gt_alv[]
      EXCEPTIONS
        program_error            = 1
        OTHERS                   = 2.
  ELSE.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
      EXPORTING
        i_callback_program       = sy-repid
        i_callback_pf_status_set = 'PF_STATUS_SET'
        i_callback_user_command  = 'USER_COMMAND'
        is_layout_lvc            = gs_layout
        it_fieldcat_lvc          = gt_fcat[]
        i_save                   = 'A'
*       it_events                = gt_events
        i_grid_settings          = l_grid_settings
      TABLES
        t_outtab                 = gt_alv1[]
      EXCEPTIONS
        program_error            = 1
        OTHERS                   = 2.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& 获取FCAT
*&---------------------------------------------------------------------*
FORM frm_get_fieldcat_via_fm  USING pv_structure TYPE dd02l-tabname
                              CHANGING pt_fieldcat TYPE lvc_t_fcat.

  DATA:lt_fieldcats      TYPE slis_t_fieldcat_alv,
       lt_kkblo_fieldcat TYPE kkblo_t_fieldcat.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
*     i_program_name         = sy-repid
*     i_internal_tabname     = pv_tabname
      i_structure_name       = pv_structure
*     I_CLIENT_NEVER_DISPLAY = 'X'
*     i_inclname             = sy-repid
      i_bypassing_buffer     = 'X'
*     I_BUFFER_ACTIVE        =
    CHANGING
      ct_fieldcat            = lt_fieldcats
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_TRANSFER_DATA'
    EXPORTING
      it_fieldcat = lt_fieldcats[]
    IMPORTING
      et_fieldcat = lt_kkblo_fieldcat.

  CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO'
    EXPORTING
      it_fieldcat_kkblo = lt_kkblo_fieldcat
    IMPORTING
      et_fieldcat_lvc   = pt_fieldcat
    EXCEPTIONS
      it_data_missing   = 1
      OTHERS            = 2.
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& 设置STATUS
*&---------------------------------------------------------------------*
FORM pf_status_set USING extab TYPE slis_t_extab.
  SET PF-STATUS 'ZFIC_CUST_STATUS'.
ENDFORM.
*&---------------------------------------------------------------------*
*& 设置USER-COMMAND
*&---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  DATA:l_type     TYPE char1,
       wa_comp    TYPE zfis_054_bp_company,
       lt_comp    TYPE TABLE OF zfis_054_bp_company,
       lt_return1 TYPE TABLE OF zfis_054_bp_return.


  CASE r_ucomm.
    WHEN '&F02' OR '&F15' OR '&F12'.
      LEAVE TO SCREEN 0.
    WHEN '&EXCUST'.

      LOOP AT gt_alv1 INTO gs_alv1.
        gs_alv1-kunnr = |{ gs_alv1-kunnr ALPHA = IN }|.
        SELECT SINGLE
               bu_group
               FROM but000
               WHERE partner = @gs_alv1-kunnr
               INTO @DATA(l_bptype).
        CASE l_bptype.
          WHEN 'Z001' OR 'Z003'.
            l_type = '2'.
          WHEN 'Z002' OR 'Z006'.
            l_type = '1'.
        ENDCASE.
        gs_alv1-kunnr = |{ gs_alv1-kunnr ALPHA = OUT }|.
        MOVE-CORRESPONDING gs_alv1 TO wa_comp.
        wa_comp-kunnr = |{ wa_comp-kunnr ALPHA = IN }|.
        APPEND wa_comp TO lt_comp.
      ENDLOOP.

      CASE l_type.
        WHEN '1'.
          CALL FUNCTION 'ZF_FI_BP_ADDCOMPANY_VEND'
            TABLES
              it_comp   = lt_comp
              ot_return = lt_return1.
        WHEN '2'.
          CALL FUNCTION 'ZF_FI_BP_ADDCOMPANY_CUST'
            TABLES
              it_comp   = lt_comp
              ot_return = lt_return1.
      ENDCASE.

      DATA:l_line TYPE i.

      LOOP AT gt_alv1 INTO gs_alv1.
        ADD 1 TO l_line.
        READ TABLE lt_return1 INTO DATA(wa_return1) WITH KEY kunnr = gs_alv1-kunnr.
        CASE wa_return1-type.
          WHEN 'S'.
            gs_alv1-icon = icon_led_green.
          WHEN 'E'.
            gs_alv1-icon = icon_led_red.
        ENDCASE.
        gs_alv1-message = wa_return1-message.
        MODIFY gt_alv1 FROM gs_alv1 INDEX l_line.
      ENDLOOP.

  ENDCASE.
*设置刷新
  rs_selfield-refresh = 'X'.

ENDFORM.

  

FUNCTION zf_fi_cust_create.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      IT_INPUT STRUCTURE  ZFIS_CUST_BASE
*"      IT_COMP STRUCTURE  ZFIS_CUST_COMPANY
*"      OT_RETURN STRUCTURE  ZFIS_CUST_RETURN
*"----------------------------------------------------------------------
  DATA:wa_return TYPE zfis_cust_return,
       ls_return TYPE bapiret2.
*进度条
  DATA: l_perc TYPE i VALUE 0.
  DATA: l_line  TYPE string,
        l_total TYPE string.
  DATA: l_stxt TYPE string.
  DATA: l_sperc(3) TYPE c.


  DESCRIBE TABLE it_input LINES l_total.

  LOOP AT it_input ASSIGNING FIELD-SYMBOL(<fs_in>).

    ADD 1 TO l_line.
*->纳税人登记号加上前导0
    <fs_in>-taxnumber = |{ <fs_in>-taxnumber ALPHA = IN }|.

    SELECT
           COUNT(*)
           FROM bp000
           WHERE partnr = <fs_in>-kunnr.

    IF sy-subrc EQ 0."如果存在了,则提示错误
      wa_return-kunnr    = <fs_in>-kunnr.
      wa_return-message  = TEXT-001.
      wa_return-status   = 'E'.
      APPEND wa_return TO ot_return.
      CONTINUE.
    ELSE.
      PERFORM frm_create_customer  USING <fs_in>
                                 CHANGING wa_return.
      APPEND wa_return TO ot_return.
    ENDIF.

    l_perc = l_line * 100 / l_total.

    CONCATENATE '已导入: 第' l_line '条,' '共'  l_total  INTO l_stxt.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        percentage = l_perc     "百分比的数值,用来控制秒表的指针。
        text       = l_stxt.   "状态栏显示的文本。

  ENDLOOP.

  CLEAR:
        l_perc,
        l_line,
        l_total,
        l_stxt,
        l_sperc.

ENDFUNCTION.
*----------------------------------------------------------------------*
***INCLUDE LZF_FI_068F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_CUSTOMER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> OT_RETURN
*&      --> <FS_IN>
*&---------------------------------------------------------------------*
FORM frm_create_customer  USING    ps_in TYPE zfis_cust_base
                         CHANGING   ps_return TYPE zfis_cust_return.

  DATA: l_partn_cat       TYPE bapibus1006_head-partn_cat,
        ls_central        TYPE bapibus1006_central,
        ls_partn_group    TYPE bapibus1006_head,
        ls_central_person TYPE bapibus1006_central_person,
        ls_central_organ  TYPE bapibus1006_central_organ,
        l_partn_grp       TYPE bapibus1006_head-partn_grp,
        ls_central_group  TYPE bapibus1006_central_group,
        ls_address        TYPE bapibus1006_address,
        l_bpartner        TYPE bapibus1006_head-bpartner,
        l_bpextern        TYPE bapibus1006_head-bpartner,
        lt_bapiadtel      LIKE TABLE OF bapiadtel WITH HEADER LINE,
        lt_bapiret2       LIKE TABLE OF bapiret2 WITH HEADER LINE,
        lt_guid           LIKE TABLE OF bus000___i WITH HEADER LINE,
        lt_custo          TYPE TABLE OF bus000_eew WITH HEADER LINE,
        lt_commusage      TYPE TABLE OF bapiaduse WITH HEADER LINE,
        lt_bapicomrem     TYPE TABLE OF bapicomrem WITH HEADER LINE.
  DATA:ls_but0bk  TYPE but0bk,
       lv_bkvid   TYPE but0bk-bkvid,
       lv_type    TYPE char1,
       l_str      TYPE string,
       l_role     TYPE bapibus1006_head-partnerrole VALUE 'FLCU00',
       l_country  TYPE char2 VALUE 'CN',
       l_city     TYPE char4 VALUE '广州',
       l_postcode TYPE char6 VALUE '510000'.
  DATA:ls_bankdetail TYPE bapibus1006_bankdetail.
  DATA:ls_bankdetail_x TYPE bapibus1006_bankdetail_x.
  DATA:lt_return TYPE TABLE OF bapiret2.
  DATA:ls_return TYPE bapiret2.
  DATA:l_len TYPE i.
  DATA:wa_bp001 TYPE bp001.

  "客户类型
  l_partn_cat = '3'.
  l_role = ps_in-role.
  "简称
  ls_central-searchterm1          = ps_in-bu_sort1_txt.
  ls_central-partnerexternal      = ps_in-kunnr.

  ls_central_group-namegroup1     = ps_in-name_org1.
  ls_central_group-namegroup2     = ps_in-name_org2.
  "国家代码
  ls_address-country              = ps_in-country.
  "地区
  ls_address-region               = ps_in-region.
  "城市
  ls_address-city                 = ps_in-city.
  "邮政编码
  ls_address-postl_cod1           = ps_in-postl_cod1.
  "街道
  ls_address-street               = ps_in-street.
  "语言
  ls_address-langu = '1'.
  "账户组
  l_partn_grp = ps_in-partn_grp.

*  lscentral_data-central-data-vbund  = p_s_indata-vbund . "002000贸易伙伴

  CLEAR lt_bapiadtel.
  lt_bapiadtel-country   = ps_in-country.
  lt_bapiadtel-telephone = ps_in-telf1.
  lt_bapiadtel-std_no = 'X'.
  lt_bapiadtel-r_3_user = '1'.
  lt_bapiadtel-home_flag = 'X'.
  lt_bapiadtel-consnumber = '001'.
  APPEND lt_bapiadtel.

  CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
    EXPORTING
      businesspartnerextern   = ps_in-kunnr
      partnercategory         = l_partn_cat
      partnergroup            = l_partn_grp
      centraldata             = ls_central
      centraldataperson       = ls_central_person
      centraldataorganization = ls_central_organ
      centraldatagroup        = ls_central_group
      addressdata             = ls_address
*     UPLICATE_MESSAGE_TYPE   =
*     CCEPT_ERROR             = ' '
    IMPORTING
      businesspartner         = l_bpartner
    TABLES
      telefondata             = lt_bapiadtel
*     AXDATA                  =
*     ELETEXDATA              =
*     ELEXDATA                =
*     _MAILDATA               =
*     MLADDRESSDATA           =
*     400ADDRESSDATA          =
*     FCADDRESSDATA           =
*     RTADDRESSDATA           =
*     SFADDRESSDATA           =
*     RIADDRESSDATA           =
*     AGADDRESSDATA           =
*     DDRESSNOTES             =
*     communicationnotes      = lt_bapicomrem
*     communicationusage      = lt_commusage
**     ELEFONDATANONADDRESS    =
**     AXDATANONADDRESS        =
*     telefondatanonaddress   = lt_bapiadtel
*     ELEXDATANONADDRESS      =
*     _MAILDATANONADDRESS     =
*     MLADDRESSDATANONADDRESS =
*     400ADDRESSDATANONADDRESS          =
*     FCADDRESSDATANONADDRESS =
*     RTADDRESSDATANONADDRESS =
*     SFADDRESSDATANONADDRESS =
*     RIADDRESSDATANONADDRESS =
*     AGADDRESSDATANONADDRESS =
*     OMMUNICATIONNOTESNONADDRESS       =
*     OMMUNICATIONUSAGENONADDRESS       =
      return                  = lt_bapiret2.
*     DDRESSDUPLICATES        =

*  READ TABLE lt_bapiret2 WITH KEY type = 'E' TRANSPORTING NO FIELDS.

  IF lt_bapiret2[] IS INITIAL.

    CALL FUNCTION 'BUP_MEMORY_BUT000_GET'
      EXPORTING
        iv_partner       = l_bpartner
      IMPORTING
        es_but000        = lt_guid
      EXCEPTIONS
        not_found        = 1
        parameter_error  = 2
        bpext_not_unique = 3
        OTHERS           = 4.

    READ TABLE lt_guid INDEX 1.

    lt_custo-partnr_guid = lt_guid-partner_guid.

    APPEND lt_custo.

    CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'
      EXPORTING
        is_bus000_eew = lt_custo.

    IF sy-subrc EQ 0.
      ps_return-kunnr      = l_bpartner.
      ps_return-message    = '客户创建成功!'.
      ps_return-status     = 'S'.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ENDIF.
  ELSE.
    CLEAR l_str.
    LOOP AT lt_bapiret2.
      IF l_str IS INITIAL.
        l_str = lt_bapiret2-message.
      ELSE.
        CONCATENATE l_str lt_bapiret2-message INTO l_str.
      ENDIF.
    ENDLOOP.

    ps_return-kunnr      = ps_in-kunnr.
    ps_return-message    = l_str.
    ps_return-status     = 'E'.


  ENDIF.

*->添加银行数据
  IF l_bpartner IS NOT INITIAL.

*->添加业务角色
    CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
      EXPORTING
        businesspartner     = l_bpartner
        businesspartnerrole = l_role
      TABLES
        return              = lt_return.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.


    ls_bankdetail-bank_ctry       = 'CN'.       "银行国家代码
*    ps_in-bank_key = |{ ps_in-bank_key ALPHA = IN }|.
    ls_bankdetail-bank_key        = ps_in-bank_key.           "银行代码
    ls_bankdetail-bank_acct       = ps_in-bank_acct+0(18).   "银行账户
*    ls_bankdetail-ctrl_key        = '01'.
*->16位以后的放到参考明细
    l_len = strlen( ps_in-bank_acct ).
    IF l_len > 18.
      l_len = l_len - 18.
      ls_bankdetail-bank_ref       = ps_in-bank_acct+18(l_len).
    ENDIF.
*    ls_bankdetail-bankaccountname = ps_in-k.  "银行账户名称
*    ls_bankdetail-ctrl_key        = '01'.
    ls_bankdetail-accountholder   = ps_in-accountholder.  "银行账户持有人
    ls_bankdetail-coll_auth       = ps_in-coll_auth.          "首选项

    CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
      EXPORTING
        businesspartner = l_bpartner
        bankdetaildata  = ls_bankdetail
      TABLES
        return          = lt_return.

    READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
    IF sy-subrc NE 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ENDIF.

    CLEAR lt_return[].

*->添加纳税人登记信息
    CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
      EXPORTING
        businesspartner = l_bpartner
        taxtype         = 'CN0'
        taxnumber       = ps_in-taxnumber
      TABLES
        return          = lt_return.

    READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
    IF sy-subrc NE 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ENDIF.

  ENDIF.

**->更新vbund字段,如果BAPI插入无效的话
  "更新BP
  DATA:is_data TYPE cvis_ei_extern,
       it_data TYPE cvis_ei_extern_t.
  DATA rv_has_error  TYPE abap_bool.
  DATA:lv_message    TYPE string, "错误消息
       lw_bapireturn TYPE bapiret2.
  DATA:text0(220) TYPE c.
  DATA:l_partner          TYPE bus_ei_extern,
       l_partner_relation TYPE burs_ei_extern,
       l_vendor           TYPE vmds_ei_extern,
       l_company_vendor   TYPE vmds_ei_company,
       l_customer         TYPE cmds_ei_extern,
       l_company_customer TYPE cmds_ei_company,
       l_common           TYPE bus_ei_bupa_central,
*         l_role             TYPE bus_ei_bupa_roles,
       l_roles            TYPE bus_ei_roles,
       l_sales            TYPE cmds_ei_sales,
       l_tax_ind          TYPE cmds_ei_tax_ind,
       l_function         TYPE cmds_ei_functions,
       lv_partner_guid    TYPE but000-partner_guid,
       wa_return          TYPE zfis_054_bp_return.


*    l_bpartner = |{ wa_comp-kunnr ALPHA = IN }|.
  SELECT SINGLE
         partner_guid
         FROM but000
         INTO lv_partner_guid
         WHERE partner = l_bpartner.

  l_partner-header-object_instance-bpartner     = l_bpartner.
  l_partner-header-object_instance-bpartnerguid = lv_partner_guid.
  l_partner-header-object_task                  = 'U'.
  l_partner-central_data-common-data-bp_control-category = '3'.


*  l_partner-customer-central_data-central-data-vbund = ps_in-vbund ."贸易伙伴
*  l_partner-customer-central_data-central-data-ktokd = ps_in-ktokd ."'Z001'.
**  ls_bpdata-customer-central_data-central-data-kunnr = ps_ind-kunnr .
*  l_partner-customer-central_data-central-datax-vbund = 'X'.
**  l_partner-customer-central_data-central-datax-ktokd = 'X'.
**    IF ps_in-vbund NE space.
  ps_in-vbund = |{ ps_in-vbund ALPHA = IN }|.
  l_partner-finserv_data-common-data-fsbp_centrl-vbund       = ps_in-vbund. "002000贸易伙伴
  l_partner-finserv_data-common-data-fsbp_centrl-unw_remark  = l_bpartner.
  l_partner-finserv_data-common-datax-fsbp_centrl-vbund      = 'X'.
  l_partner-finserv_data-common-datax-fsbp_centrl-unw_remark = 'X'.
*    ENDIF.

  MOVE l_partner TO is_data-partner.
  APPEND is_data TO it_data.

  TRY.

      cl_md_bp_maintain=>maintain(
        EXPORTING i_data   = it_data
        IMPORTING e_return =  DATA(lt_bapi_return)
      ).

    CATCH cx_root INTO DATA(lo_excep2).
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = sy-msgid
          msgnr               = sy-msgno
          msgv1               = sy-msgv1
          msgv2               = sy-msgv2
          msgv3               = sy-msgv3
          msgv4               = sy-msgv4
        IMPORTING
          message_text_output = text0.
      lv_message = text0.
      rv_has_error = abap_true.

  ENDTRY.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

  CLEAR:
        it_data[],
        lt_bapi_return[],
        l_partner,
        l_customer,
        l_customer-company_data-company[],
        l_vendor-company_data-company[],
        l_company_customer,
        l_company_vendor.

  REFRESH:it_data.

ENDFORM.
FUNCTION ZF_FI_BP_ADDCOMPANY_VEND .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      IT_COMP STRUCTURE  ZFIS_054_BP_COMPANY
*"      OT_RETURN STRUCTURE  ZFIS_054_BP_RETURN
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      IT_COMP STRUCTURE  ZFIS_054_BP_COMPANY
*"      OT_RETURN STRUCTURE  ZFIS_054_BP_RETURN
*"------------------------ ----------------------------------------------
*->扩充公司代码数据
  "更新BP

  DATA: ls_return TYPE bapiret2.
  DATA: lt_master_data TYPE vmds_ei_main.
  DATA: lt_master_data_correct  TYPE  vmds_ei_main,
        lt_message_correct  TYPE  cvis_message,
        lt_master_data_defective  TYPE  vmds_ei_main,
        lt_message_defective  TYPE  cvis_message.
  DATA: ls_vmds_ei_extern TYPE vmds_ei_extern.
  DATA: ls_correct_extern TYPE vmds_ei_extern.
  DATA: ls_remarks TYPE cvis_ei_rem.
  DATA: ls_bank TYPE cvis_ei_cvi_bankdetail.
  DATA: ls_communication_phone TYPE cvis_ei_phone_str,
        ls_communication_fax TYPE  cvis_ei_fax_str,
        ls_communication_smtp TYPE cvis_ei_smtp_str.
  DATA: lv_string TYPE string .
  DATA: ls_vmds_cmp TYPE vmds_ei_company,
        ls_vmds_pur TYPE vmds_ei_purchasing,
        ls_vmds_fun TYPE vmds_ei_functions.
  DATA: iv_flag  TYPE c .
  DATA: wa_return TYPE zfis_054_bp_return.

  DATA:BEGIN OF lt_bp OCCURS 0,
       kunnr TYPE kna1-kunnr,
       END OF lt_bp.

  LOOP AT it_comp INTO DATA(wa_comp).
    lt_bp-kunnr = wa_comp-kunnr.
    APPEND lt_bp.
  ENDLOOP.

  SORT lt_bp.
  DELETE ADJACENT DUPLICATES FROM lt_bp.

  LOOP AT lt_bp.
* 维护标识:插入、更新
  iv_flag =  'I' .
  ls_vmds_ei_extern-header-object_task = 'U'.
  ls_vmds_ei_extern-header-object_instance-lifnr = lt_bp-kunnr.  "供应商

* 公司代码默认:JNPC    ???
  LOOP AT it_comp INTO wa_comp WHERE kunnr = lt_bp-kunnr.
  CLEAR ls_vmds_cmp.
  ls_vmds_cmp-task = 'I'.
  ls_vmds_cmp-data_key-bukrs = wa_comp-bukrs.  "取采购组织下的
  ls_vmds_cmp-data-akont     = wa_comp-hkont.        "总帐中的统驭科目  其他应付款-往来
  ls_vmds_cmp-data-zuawa     = wa_comp-zuawa.
*  ls_vmds_cmp-data-xverr  = 'x'.                 " 结算客户
  ls_vmds_cmp-datax-zuawa    = wa_comp-zuawa.
  ls_vmds_cmp-datax-akont = 'X'.                  "总帐中的统驭科目  其他应付款-往来
*  LS_VMDS_CMP-DATAX-XVERR = 'X'.                "结算客户
  APPEND ls_vmds_cmp TO ls_vmds_ei_extern-company_data-company.
  ENDLOOP.

  APPEND ls_vmds_ei_extern TO lt_master_data-vendors.

* 调用api维护供应商
  CALL METHOD vmd_ei_api=>maintain_bapi
    EXPORTING
      iv_collect_messages      = 'X'
      is_master_data           = lt_master_data
    IMPORTING
      es_master_data_correct   = lt_master_data_correct
      es_message_correct       = lt_message_correct
      es_master_data_defective = lt_master_data_defective
      es_message_defective     = lt_message_defective.

* 返回结果处理
  CLEAR lv_string.
  LOOP AT lt_message_defective-messages
  TRANSPORTING NO FIELDS
  WHERE type CA 'EA'.
    EXIT.
  ENDLOOP.
  IF sy-subrc = 0. "失败
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
     LOOP AT lt_message_defective-messages INTO DATA(wa_messages)
           WHERE type CA 'EA'.
      CONCATENATE lv_string wa_messages-message INTO lv_string.
     ENDLOOP.

     wa_return-kunnr = lt_bp-kunnr.
     wa_return-kunnr = |{ wa_return-kunnr ALPHA = OUT }|.
     wa_return-type  = 'E'.
     wa_return-message = lv_string.
     APPEND wa_return TO ot_return.

  ELSE."成功

    wa_return-kunnr = lt_bp-kunnr.
    wa_return-kunnr = |{ wa_return-kunnr ALPHA = OUT }|.
    wa_return-type  = 'S'.
    wa_return-message = text-001.
    APPEND wa_return TO ot_return.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ENDIF.

    CLEAR:
        lt_bp,
        ls_return ,
        lt_master_data ,
        lt_master_data_correct ,
        lt_message_correct  ,
        lt_master_data_defective  ,
        lt_message_defective  ,
        ls_vmds_ei_extern ,
        ls_correct_extern ,
        lv_string ,
        ls_vmds_cmp ,
        ls_vmds_pur ,
        ls_vmds_fun ,
        iv_flag .
  CLEAR ls_vmds_ei_extern.

  ENDLOOP.


ENDFUNCTION.
FUNCTION ZF_FI_BP_ADDCOMPANY_CUST.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      IT_COMP STRUCTURE  ZFIS_054_BP_COMPANY
*"      OT_RETURN STRUCTURE  ZFIS_054_BP_RETURN
*"----------------------------------------------------------------------
*->扩充公司代码数据
  "更新BP

  DATA: ls_return TYPE bapiret2.
  DATA: lt_master_data TYPE cmds_ei_main.
  DATA: lt_master_data_correct  TYPE  cmds_ei_main,
        lt_message_correct  TYPE  cvis_message,
        lt_master_data_defective  TYPE  cmds_ei_main,
        lt_message_defective  TYPE  cvis_message.
  DATA: ls_cmds_ei_extern TYPE cmds_ei_extern.
  DATA: ls_correct_extern TYPE cmds_ei_extern.
  DATA: ls_remarks TYPE cvis_ei_rem.
  DATA: lv_string TYPE string .
  DATA: wa_return TYPE zfis_054_bp_return.
  DATA: iv_flag TYPE char1.
  DATA: ls_cmds_cmp TYPE cmds_ei_company.
  DATA:BEGIN OF lt_bp OCCURS 0,
       kunnr TYPE kna1-kunnr,
       END OF lt_bp.

  LOOP AT it_comp INTO DATA(wa_comp).
    lt_bp-kunnr = wa_comp-kunnr.
    APPEND lt_bp.
  ENDLOOP.

  SORT lt_bp.
  DELETE ADJACENT DUPLICATES FROM lt_bp.

  LOOP AT lt_bp.
* 维护标识:插入、更新
  iv_flag =  'I' .
  ls_cmds_ei_extern-header-object_task = 'U'.
  ls_cmds_ei_extern-header-object_instance-kunnr = lt_bp-kunnr.  "供应商

* 公司代码默认:JNPC    ???
  LOOP AT it_comp INTO wa_comp WHERE kunnr = lt_bp-kunnr.
  CLEAR ls_cmds_cmp.
  ls_cmds_cmp-task = 'I'.
  ls_cmds_cmp-data_key-bukrs = wa_comp-bukrs.  "取采购组织下的
  ls_cmds_cmp-data-akont  =  wa_comp-hkont.        "总帐中的统驭科目  其他应付款-往来
*  LS_VMDS_CMP-DATA-XVERR  = 'X'.                 " 结算客户
  ls_cmds_cmp-data-zuawa     = wa_comp-zuawa.
*  ls_vmds_cmp-data-xverr  = 'x'.                 " 结算客户
  ls_cmds_cmp-datax-zuawa    = wa_comp-zuawa.
  ls_cmds_cmp-datax-akont = 'X'.                  "总帐中的统驭科目  其他应付款-往来
*  LS_VMDS_CMP-DATAX-XVERR = 'X'.                "结算客户
  APPEND ls_cmds_cmp TO ls_cmds_ei_extern-company_data-company.
  ENDLOOP.

  APPEND ls_cmds_ei_extern TO lt_master_data-customers.

* 调用api维护供应商
  CALL METHOD cmd_ei_api=>maintain_bapi
    EXPORTING
      iv_collect_messages      = 'X'
      is_master_data           = lt_master_data
    IMPORTING
      es_master_data_correct   = lt_master_data_correct
      es_message_correct       = lt_message_correct
      es_master_data_defective = lt_master_data_defective
      es_message_defective     = lt_message_defective.

* 返回结果处理
  CLEAR lv_string.
  LOOP AT lt_message_defective-messages
  TRANSPORTING NO FIELDS
  WHERE type CA 'EA'.
    EXIT.
  ENDLOOP.
  IF sy-subrc = 0. "失败
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
     LOOP AT lt_message_defective-messages INTO DATA(wa_messages)
           WHERE type CA 'EA'.
      CONCATENATE lv_string wa_messages-message INTO lv_string.
     ENDLOOP.

     wa_return-kunnr = lt_bp-kunnr.
     wa_return-type  = 'E'.
     wa_return-message = lv_string.
     APPEND wa_return TO ot_return.

  ELSE."成功

    wa_return-kunnr = lt_bp-kunnr.
    wa_return-type  = 'S'.
    wa_return-message = text-001.
    APPEND wa_return TO ot_return.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ENDIF.

    CLEAR:
        lt_bp,
        ls_return ,
        lt_master_data ,
        lt_master_data_correct ,
        lt_message_correct  ,
        lt_master_data_defective  ,
        lt_message_defective  ,
        ls_cmds_ei_extern ,
        ls_correct_extern ,
        lv_string ,
        ls_cmds_cmp ,
        iv_flag .
  CLEAR ls_cmds_ei_extern.

  ENDLOOP.


ENDFUNCTION.

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值