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.
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。


