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.