BP批量导入程序

小编 2026-07-06 阅读:274 评论:0
REPORT zfic_cust_batch_upload. *----------------------------------------------------------------------...
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.

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表