REPORT zmmr084. ************************************************************************ * 功能/技术文档:DANZ-MM-84-批导-供应商批量导入-V01 * 描述: * * 变更记录 * * 修改日期 开发人员 请求号 描述 *----------------------------------------------------------------------* ************************************************************************ * Includes ************************************************************************ INCLUDE zmmr084_top. INCLUDE zmmr084_sel. INCLUDE zmmr084_frm. ************************************************************************ * Initialization ************************************************************************ INITIALIZATION. functxt-icon_id = icon_export. functxt-quickinfo = '模版下载'. functxt-icon_text = '模版下载'. sscrfields-functxt_01 = functxt. ************************************************************************ * at selection screen ************************************************************************ AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_flname." SEACH HELP. PERFORM frm_get_file USING p_flname. AT SELECTION-SCREEN. IF sscrfields-ucomm = 'FC01'. PERFORM frm_get_model USING 'ZMMR084.XLS'. ENDIF. ************************************************************************ * Start of Selection ************************************************************************ START-OF-SELECTION. IF p_flname IS NOT INITIAL. IF p_vendor = 'X'. g_flag = 1. PERFORM frm_alv_show ."ALV结果展示 * PERFORM frm_create_vendor."创建供应商 ELSEIF p_bukrs = 'X'. g_flag = 2. PERFORM frm_alv_show ."ALV结果展示 * PERFORM frm_add_bukrs."扩充公司代码 ENDIF. ENDIF.
*&---------------------------------------------------------------------* *& 包含 ZMMR084_TOP *&---------------------------------------------------------------------* ************************************************************************ * tables ************************************************************************ TABLES:sscrfields. ************************************************************************ * TYPES ************************************************************************ TYPE-POOLS: slis. TYPES:BEGIN OF ty_basic_lf,"供应商创建 "一般数据 lifnr LIKE lfa1-lifnr, partn LIKE but000-partner, ktokk LIKE lfa1-ktokk, name1 LIKE lfa1-name1, sortl LIKE lfa1-sortl, stras LIKE lfa1-stras, ort01 LIKE lfa1-ort01, land1 LIKE lfa1-land1, spras LIKE lfa1-spras, telf1 LIKE lfa1-telf1, telfx LIKE lfa1-telfx, telbx LIKE lfa1-telbx, taxtype LIKE dfkkbptaxnum-taxtype, taxnumxl LIKE dfkkbptaxnum-taxnumxl, augrp LIKE but000-augrp, "权限组 "公司代码 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, ztermb LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, "采购组织 ekorg LIKE lfm1-ekorg, waers LIKE lfm1-waers, ztermc LIKE lfm1-zterm, webre LIKE lfm1-webre, END OF ty_basic_lf. TYPES:BEGIN OF ty_basic_bk,"公司代码扩充 "一般数据 lifnr LIKE lfa1-lifnr, "公司代码 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, zterm LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, END OF ty_basic_bk. TYPES:BEGIN OF ty_bankdetail,"银行数据 lifnr TYPE lifnr, banks TYPE banks, bankl TYPE bankk, bankn TYPE bankn, END OF ty_bankdetail. TYPES:BEGIN OF ty_lfb1,"公司代码 lifnr TYPE lfb1-lifnr, bukrs TYPE lfb1-bukrs, akont TYPE lfb1-akont, zterm TYPE lfb1-zterm, zuawa TYPE lfb1-zuawa, END OF ty_lfb1. * ALV输出 TYPES:BEGIN OF ty_vendor,"创建供应商 sel TYPE c, lifnr LIKE lfa1-lifnr, partn LIKE but000-partner, ktokk LIKE lfa1-ktokk, name1 LIKE lfa1-name1, sortl LIKE lfa1-sortl, stras LIKE lfa1-stras, ort01 LIKE lfa1-ort01, land1 LIKE lfa1-land1, spras LIKE lfa1-spras, telf1 LIKE lfa1-telf1, telfx LIKE lfa1-telfx, telbx LIKE lfa1-telbx, taxtype LIKE dfkkbptaxnum-taxtype, taxnumxl LIKE dfkkbptaxnum-taxnumxl, augrp LIKE but000-augrp, "权限组 "公司代码 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, ztermb LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, "采购组织 ekorg LIKE lfm1-ekorg, waers LIKE lfm1-waers, ztermc LIKE lfm1-zterm, webre LIKE lfm1-webre, *&----------------附加数据 num(3) TYPE c, "当前行数 type(1) TYPE c, "执行结果 message(60) TYPE c, "消息 light(4) TYPE c, "执行情况(灯) END OF ty_vendor. TYPES:BEGIN OF ty_bukrs,"扩充公司代码 sel TYPE c, "一般数据 lifnr LIKE lfa1-lifnr, "公司代码 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, zterm LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, *&----------------附加数据 num(3) TYPE c, "当前行数 type(1) TYPE c, "执行结果 message(60) TYPE c, "消息 light(4) TYPE c, "执行情况(灯) END OF ty_bukrs. ************************************************************************ * internal tables ************************************************************************ DATA:gt_data TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE."保存EXCEL数据的内表 FIELD-SYMBOLS: <gs_itab> TYPE alsmex_tabline."同上,结构 DATA:gt_basic_lf TYPE TABLE OF ty_basic_lf, "保存EXCEL导入的原始数据,供应商创建 gs_basic_lf TYPE ty_basic_lf. DATA:gt_basic_bk TYPE TABLE OF ty_basic_bk, "保存EXCEL导入的原始数据,公司代码扩充 gs_basic_bk TYPE ty_basic_bk. DATA functxt TYPE smp_dyntxt."下载模板按钮要用到的结构 * ALV相关的内表和结构 DATA:gs_fieldcat TYPE slis_fieldcat_alv, gt_fieldcat TYPE slis_t_fieldcat_alv, g_layout TYPE slis_layout_alv. DATA:gt_alv_vendor TYPE TABLE OF ty_vendor, gs_alv_vendor TYPE ty_vendor. DATA:gt_alv_bukrs TYPE TABLE OF ty_bukrs, gs_alv_bukrs TYPE ty_bukrs. ************************************************************************ * internal data fields ************************************************************************ DATA g_flag TYPE i. DATA g_msg TYPE c VALUE IS INITIAL. DATA g_mode TYPE c VALUE IS INITIAL."业务逻辑判断 DATA g_num TYPE i VALUE 0. DATA:gs_value TYPE string, "字段格式转换时用到的变量 gs_code TYPE string. CONSTANTS:yes TYPE flag VALUE 'X', no TYPE flag VALUE space. CONSTANTS:c_insr TYPE flag VALUE 'I', c_edit TYPE flag VALUE 'U', c_del TYPE flag VALUE 'D'. * ALV常量 CONSTANTS c_cns_pf_status TYPE slis_formname VALUE 'ALV_PF_STATUS'. " ALV自定义按钮 CONSTANTS c_cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND'." ALV自定义按钮响应事件
*&---------------------------------------------------------------------* *& 包含 ZMMR084_SEL *&---------------------------------------------------------------------* ************************************************************************ * Parameters and Selection Options ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001. PARAMETERS: p_flname TYPE rlgrap-filename. SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002. PARAMETERS p_vendor RADIOBUTTON GROUP rad1. PARAMETERS p_bukrs RADIOBUTTON GROUP rad1. SELECTION-SCREEN END OF BLOCK blk2. SELECTION-SCREEN:FUNCTION KEY 1.
*&---------------------------------------------------------------------* *& 包含 ZMMR084_FRM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FRM_GET_FILE *&---------------------------------------------------------------------* * 选择要上传的模板文件 *----------------------------------------------------------------------* * -->P_P_FLNAME text *----------------------------------------------------------------------* FORM frm_get_file USING p_flname. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING mask = ',EXCEL FILE,*.XLS;*.XLSX;' mode = 'O' "S为保存,O为打开 IMPORTING filename = p_flname EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. IF sy-subrc <> 0. EXIT. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CREATE_VENDOR *&---------------------------------------------------------------------* * 创建供应商 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_create_vendor . *----------------------------供应商创建-函数参数----------------------------------------* * 最外层参数 DATA:lt_extern TYPE cvis_ei_extern_t, "输入参数 ls_extern TYPE cvis_ei_extern. DATA:lt_return TYPE bapiretm, "返回参数 ls_return TYPE bapireti, lt_omsg TYPE bapiretct, ls_omsg TYPE bapiretc. * 伙伴 DATA ls_partner TYPE bus_ei_extern. DATA:lt_addr TYPE bus_ei_bupa_address_t, "地址 ls_addr TYPE bus_ei_bupa_address. DATA:lt_smtp TYPE bus_ei_bupa_smtp_t, "电子邮件 ls_smtp TYPE bus_ei_bupa_smtp. DATA:lt_phone TYPE bus_ei_bupa_telephone_t, "电话 ls_phone TYPE bus_ei_bupa_telephone. DATA:lt_fax TYPE bus_ei_bupa_fax_t, "传真 ls_fax TYPE bus_ei_bupa_fax. * 供应商 DATA ls_vendor TYPE vmds_ei_extern. DATA:lt_company TYPE vmds_ei_company_t, "公司视图 ls_company TYPE vmds_ei_company. DATA:lt_bankdetail TYPE cvis_ei_bankdetail_t, "银行信息 ls_bankdetail TYPE cvis_ei_cvi_bankdetail. DATA:lt_purchasing TYPE vmds_ei_purchasing_t, "采购视图 ls_purchasing TYPE vmds_ei_purchasing. DATA:lt_purchasing_function TYPE vmds_ei_functions_t, "合作伙伴功能 ls_purchasing_function TYPE vmds_ei_functions. * 其它字段 "取供应商编号的类的方法的参数 cvi_mapper DATA: lt_partnerguid_list TYPE bu_partner_guid_t, ls_partnerguid_list LIKE LINE OF lt_partnerguid_list, lt_vendor_list TYPE cvis_vend_link_t, ls_vendor_list LIKE LINE OF lt_vendor_list. DATA l_bpcat TYPE c VALUE '2'."伙伴类型 DATA l_bprole1 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色 DATA l_bprolecat1 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色类型 DATA l_bprole2 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色 DATA l_bprolecat2 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色类型 DATA l_bprole3 TYPE c LENGTH 6 VALUE 'ZLVN00'."伙伴角色 DATA l_bprolecat3 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色类型 DATA l_bprole4 TYPE c LENGTH 6 VALUE 'ZLVN01'."伙伴角色 DATA l_bprolecat4 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色类型 DATA l_parvw TYPE parvw."用来保存通过函数转换过后的合作伙伴功能字段 CONSTANTS c_parvw1 TYPE c LENGTH 2 VALUE 'OA'."合作伙伴功能 CONSTANTS c_parvw2 TYPE c LENGTH 2 VALUE 'VN'."合作伙伴功能 CONSTANTS c_parvw3 TYPE c LENGTH 2 VALUE 'PI'."合作伙伴功能 * 异常 DATA l_uuid_error TYPE REF TO cx_uuid_error."调用UUID的相关创建类时可能出现的异常 g_mode = 'I'. IF gs_basic_lf-lifnr IS INITIAL."EXCEL中没有传入供应商编号的情况 "新增或更新业务伙伴的标识 ls_partner-header-object_task = g_mode. "通过系统类方法生成一个16位的GUID给业务伙伴 TRY . ls_partner-header-object_instance-bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ). CATCH cx_uuid_error . ENDTRY. "业务伙伴类别 ls_partner-central_data-common-data-bp_control-category = l_bpcat. "简称(搜索项) ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_basic_lf-sortl. ls_partner-central_data-common-data-bp_centraldata-authorizationgroup = gs_basic_lf-augrp. "供应商名称(中文) ls_partner-central_data-common-data-bp_organization-name1 = gs_basic_lf-name1. "为业务伙伴添加角色 ls_partner-central_data-role-roles[] = VALUE #( ( task = g_mode data_key = l_bprole1 data-rolecategory = l_bprolecat1 ) ( task = g_mode data_key = l_bprole2 data-rolecategory = l_bprolecat2 ) ). "税 IF gs_basic_lf-taxtype IS NOT INITIAL AND gs_basic_lf-taxnumxl IS NOT INITIAL. ls_partner-central_data-taxnumber-taxnumbers[] = VALUE #( ( task = g_mode data_key-taxtype = gs_basic_lf-taxtype data_key-taxnumber = gs_basic_lf-taxnumxl data_key-taxnumxl = gs_basic_lf-taxnumxl ) ). ENDIF . "银行代码 IF gs_basic_lf-bankl IS NOT INITIAL OR gs_basic_lf-bankn IS NOT INITIAL. ls_partner-central_data-bankdetail-bankdetails[] = VALUE #( ( task = g_mode data-bank_ctry = gs_basic_lf-land1 data-bank_key = gs_basic_lf-bankl data-bank_acct = gs_basic_lf-bankn ) ). ENDIF. * 电子邮件 ls_smtp-contact-data-e_mail = gs_basic_lf-telbx. APPEND ls_smtp TO lt_smtp. MOVE-CORRESPONDING lt_smtp TO ls_addr-data-communication-smtp-smtp. * 传真 ls_fax-contact-data-fax = gs_basic_lf-telfx. APPEND ls_fax TO lt_fax. MOVE-CORRESPONDING lt_fax TO ls_addr-data-communication-fax-fax. * 电话 ls_phone-contact-data-telephone = gs_basic_lf-telf1. APPEND ls_phone TO lt_phone. MOVE-CORRESPONDING lt_phone TO ls_addr-data-communication-phone-phone. * 其它地址信息 "国家 ls_addr-data-postal-data-country = gs_basic_lf-land1. "语言 ls_addr-data-postal-data-langu = gs_basic_lf-spras. "城市 ls_addr-data-postal-data-city = gs_basic_lf-ort01. "地址 ls_addr-data-postal-data-street = gs_basic_lf-stras. "邮政编码 ls_addr-data-postal-data-postl_cod1 = '000000'. APPEND ls_addr TO lt_addr. MOVE-CORRESPONDING lt_addr TO ls_partner-central_data-address-addresses. MOVE-CORRESPONDING ls_partner TO ls_extern-partner. "供应商编号,标识为创建 ls_vendor-header-object_task = g_mode. "外部界面:中心数据 ls_vendor-central_data-central-data-kunnr = gs_basic_lf-kunnr."客户 ls_vendor-central_data-central-data-stenr = gs_basic_lf-taxnumxl."税号 * 公司信息 ls_company-task = g_mode. ls_company-data_key-bukrs = gs_basic_lf-bukrs."公司代码 "格式化akont输入,在前面加够0. PERFORM frm_format_alpha_input USING gs_basic_lf-akont. ls_company-data-akont = gs_basic_lf-akont."统驭科目 ls_company-data-zterm = gs_basic_lf-ztermb."付款条件代码 ls_company-data-reprf = gs_basic_lf-reprf."双重发票检查 APPEND ls_company TO lt_company. ls_vendor-company_data-company = lt_company. * 银行信息 * ls_bankdetail-task = g_mode. * ls_bankdetail-data_key-banks = gs_basic_lf-land1. "国家 * ls_bankdetail-data_key-bankl = gs_basic_lf-bankl. "银行代码 * ls_bankdetail-data_key-bankn = gs_basic_lf-bankn. "银行帐户 * APPEND ls_bankdetail TO lt_bankdetail. * ls_vendor-central_data-bankdetail-bankdetails = lt_bankdetail. * 采购组织 ls_purchasing-task = g_mode. ls_purchasing-data_key-ekorg = gs_basic_lf-ekorg."采购组织 ls_purchasing-data-waers = gs_basic_lf-waers."订单货币 ls_purchasing-data-zterm = gs_basic_lf-ztermc."付款条件 ls_purchasing-data-webre = gs_basic_lf-webre."基于收货的发票校验 * 合作伙伴功能 CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw1 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw2 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw3 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. MOVE-CORRESPONDING lt_purchasing_function TO ls_purchasing-functions-functions. CLEAR lt_purchasing_function. APPEND ls_purchasing TO lt_purchasing. ls_vendor-purchasing_data-purchasing = lt_purchasing. MOVE-CORRESPONDING ls_vendor TO ls_extern-vendor. APPEND ls_extern TO lt_extern. CALL FUNCTION 'CVI_EI_INBOUND_MAIN' EXPORTING i_data = lt_extern IMPORTING e_return = lt_return. READ TABLE lt_return INTO ls_return INDEX 1. READ TABLE ls_return-object_msg WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. READ TABLE ls_return-object_msg WITH KEY type = 'A' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_msg = 'S'. ENDIF. ENDIF. * 根据伙伴GUID取出供应商编号 ls_partnerguid_list = ls_partner-header-object_instance-bpartnerguid. APPEND ls_partnerguid_list TO lt_partnerguid_list. lt_vendor_list = cvi_mapper=>get_instance( )->get_assigned_vendors_for_bps( i_partner_guids = lt_partnerguid_list ). IF lt_vendor_list IS NOT INITIAL. READ TABLE lt_vendor_list INTO ls_vendor_list INDEX 1 . ENDIF. "附加数据 gs_alv_vendor-lifnr = ls_vendor_list-vendor. gs_alv_vendor-num = g_num. gs_alv_vendor-type = g_msg. IF g_msg = 'S'. gs_alv_vendor-light = '@5B@'. CONCATENATE '供应商'gs_basic_lf-name1'创建成功' INTO gs_alv_vendor-message. ELSEIF g_msg = 'E'. gs_alv_vendor-light = '@5C@'. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'E'. IF sy-subrc <> 0. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'A'. ENDIF. CONCATENATE '供应商'gs_basic_lf-name1'创建失败,原因是:'ls_omsg-message INTO gs_alv_vendor-message. ENDIF. MODIFY gt_alv_vendor FROM gs_alv_vendor. CLEAR:ls_partner,ls_smtp,ls_fax,ls_phone,ls_addr,ls_vendor,ls_company,ls_bankdetail, ls_purchasing,ls_purchasing_function,ls_extern,ls_return,ls_partnerguid_list, ls_vendor_list. REFRESH:lt_smtp,lt_fax,lt_phone,lt_addr,lt_company,lt_bankdetail,lt_purchasing,lt_purchasing_function, lt_extern,lt_return,lt_partnerguid_list,lt_vendor_list. CLEAR:l_parvw. ELSE."EXCEL中传入了供应商编号的情况 "新增或更新业务伙伴的标识 ls_partner-header-object_task = g_mode. PERFORM frm_format_alpha_input USING gs_basic_lf-lifnr. ls_partner-header-object_instance-bpartner = gs_basic_lf-partn. "通过系统类方法生成一个16位的GUID给业务伙伴 TRY . ls_partner-header-object_instance-bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ). CATCH cx_uuid_error . ENDTRY. "业务伙伴类别 ls_partner-central_data-common-data-bp_control-category = l_bpcat. ls_partner-central_data-common-data-bp_control-grouping = gs_basic_lf-ktokk. "简称(搜索项) ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_basic_lf-sortl. "供应商名称(中文) ls_partner-central_data-common-data-bp_organization-name1 = gs_basic_lf-name1. "为业务伙伴添加角色 ls_partner-central_data-role-roles[] = VALUE #( ( task = g_mode data_key = l_bprole1 data-rolecategory = l_bprolecat1 ) ( task = g_mode data_key = l_bprole2 data-rolecategory = l_bprolecat2 ) ). * IF gs_basic_lf-bankl IS NOT INITIAL OR * gs_basic_lf-bankn IS NOT INITIAL. * "银行代码 * ls_partner-central_data-bankdetail-bankdetails[] = VALUE #( * ( task = g_mode * data-bank_ctry = gs_basic_lf-land1 * data-bank_key = gs_basic_lf-bankl * data-bank_acct = gs_basic_lf-bankn * ) * ). * ENDIF. * 电子邮件 ls_smtp-contact-data-e_mail = gs_basic_lf-telbx. APPEND ls_smtp TO lt_smtp. MOVE-CORRESPONDING lt_smtp TO ls_addr-data-communication-smtp-smtp. * 传真 ls_fax-contact-data-fax = gs_basic_lf-telfx. APPEND ls_fax TO lt_fax. MOVE-CORRESPONDING lt_fax TO ls_addr-data-communication-fax-fax. * 电话 ls_phone-contact-data-telephone = gs_basic_lf-telf1. APPEND ls_phone TO lt_phone. MOVE-CORRESPONDING lt_phone TO ls_addr-data-communication-phone-phone. * 其它地址信息 "国家 ls_addr-data-postal-data-country = gs_basic_lf-land1. "语言 ls_addr-data-postal-data-langu = gs_basic_lf-spras. "城市 ls_addr-data-postal-data-city = gs_basic_lf-ort01. "地址 ls_addr-data-postal-data-street = gs_basic_lf-stras. "邮政编码 ls_addr-data-postal-data-postl_cod1 = '000000'. APPEND ls_addr TO lt_addr. MOVE-CORRESPONDING lt_addr TO ls_partner-central_data-address-addresses. MOVE-CORRESPONDING ls_partner TO ls_extern-partner. * ls_extern-ensure_create-create_vendor = 'X'. "供应商编号,标识为创建 ls_vendor-header-object_task = g_mode. PERFORM frm_format_alpha_input USING gs_basic_lf-lifnr. ls_vendor-header-object_instance-lifnr = gs_basic_lf-lifnr. "外部界面:中心数据 ls_vendor-central_data-central-data-kunnr = gs_basic_lf-kunnr."客户 ls_vendor-central_data-central-data-stenr = gs_basic_lf-taxnumxl."税号 * ls_vendor-central_data-central-data-ktokk = gs_basic_lf-ktokk."税号 * 公司信息 ls_company-task = g_mode. ls_company-data_key-bukrs = gs_basic_lf-bukrs."公司代码 "格式化akont输入,在前面加够0. PERFORM frm_format_alpha_input USING gs_basic_lf-akont. ls_company-data-akont = gs_basic_lf-akont."统驭科目 ls_company-data-zterm = gs_basic_lf-ztermb."付款条件代码 ls_company-data-reprf = gs_basic_lf-reprf."双重发票检查 APPEND ls_company TO lt_company. ls_vendor-company_data-company = lt_company. * 银行信息 * ls_bankdetail-task = g_mode. * ls_bankdetail-data_key-banks = gs_basic_lf-land1. "国家 * ls_bankdetail-data_key-bankl = gs_basic_lf-bankl. "银行代码 * ls_bankdetail-data_key-bankn = gs_basic_lf-bankn. "银行帐户 * APPEND ls_bankdetail TO lt_bankdetail. * ls_vendor-central_data-bankdetail-bankdetails = lt_bankdetail. * 采购组织 ls_purchasing-task = g_mode. ls_purchasing-data_key-ekorg = gs_basic_lf-ekorg."采购组织 ls_purchasing-data-waers = gs_basic_lf-waers."订单货币 ls_purchasing-data-zterm = gs_basic_lf-ztermc."付款条件 ls_purchasing-data-webre = gs_basic_lf-webre."基于收货的发票校验 * 合作伙伴功能 CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw1 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw2 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw3 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. MOVE-CORRESPONDING lt_purchasing_function TO ls_purchasing-functions-functions. CLEAR lt_purchasing_function. APPEND ls_purchasing TO lt_purchasing. ls_vendor-purchasing_data-purchasing = lt_purchasing. MOVE-CORRESPONDING ls_vendor TO ls_extern-vendor. APPEND ls_extern TO lt_extern. CALL FUNCTION 'CVI_EI_INBOUND_MAIN' EXPORTING i_data = lt_extern IMPORTING e_return = lt_return. READ TABLE lt_return INTO ls_return INDEX 1. READ TABLE ls_return-object_msg WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. READ TABLE ls_return-object_msg WITH KEY type = 'A' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_msg = 'S'. ENDIF. ENDIF. "附加数据 gs_alv_vendor-lifnr = gs_basic_lf-lifnr. gs_alv_vendor-num = g_num. gs_alv_vendor-type = g_msg. IF g_msg = 'S'. gs_alv_vendor-light = '@5B@'. CONCATENATE '供应商'gs_basic_lf-name1'创建成功' INTO gs_alv_vendor-message. ELSEIF g_msg = 'E'. gs_alv_vendor-light = '@5C@'. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'E'. IF sy-subrc <> 0. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'A'. ENDIF. CONCATENATE '供应商'gs_basic_lf-name1'创建失败,原因是:'ls_omsg-message INTO gs_alv_vendor-message. ENDIF. MODIFY gt_alv_vendor FROM gs_alv_vendor. CLEAR:ls_partner,ls_smtp,ls_fax,ls_phone,ls_addr,ls_vendor,ls_company,ls_bankdetail, ls_purchasing,ls_purchasing_function,ls_extern,ls_return. REFRESH:lt_smtp,lt_fax,lt_phone,lt_addr,lt_company,lt_bankdetail,lt_purchasing,lt_purchasing_function, lt_extern,lt_return. CLEAR:l_parvw. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ADD_BUKRS *&---------------------------------------------------------------------* * 扩充公司代码 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_add_bukrs . *-------------------------------公司代码扩充-函数参数-------------------------------------* * 中间处理时用到的参数 DATA:lt_bankdetail2 TYPE TABLE OF ty_bankdetail, "从数据表里取出的银行数据 ls_bankdetail2 TYPE ty_bankdetail, ls_bankdetail2_1 TYPE ty_bankdetail. DATA:lt_bankdetail4 TYPE TABLE OF ty_bankdetail, "从数据表里取出的银行数据 ls_bankdetail4 TYPE ty_bankdetail. DATA:lt_lfb1 TYPE TABLE OF ty_lfb1, "从数据表中取出的公司代码数据 ls_lfb1 TYPE ty_lfb1. * 调用类需要的参数 DATA ls_master_data TYPE vmds_ei_main. "最外层参数 DATA:lt_vendor2 TYPE vmds_ei_extern_t, ls_vendor2 TYPE vmds_ei_extern. DATA:lt_bankdetail3 TYPE cvis_ei_bankdetail_t, "银行数据 ls_bankdetail3 TYPE cvis_ei_cvi_bankdetail. DATA:lt_company2 TYPE vmds_ei_company_t, ls_company2 TYPE vmds_ei_company. DATA:ls_return_message TYPE cvis_message, lt_message TYPE bapiret2_t, ls_message TYPE bapiret2. DATA:ls_return_data TYPE vmds_ei_main, "返回的供应商数据 lt_return_vendors TYPE vmds_ei_extern_t, "返回的供应商编号 ls_return_verdors LIKE LINE OF lt_return_vendors. * 其它字段 DATA l_ifbukrs TYPE c. "判断是否供应商创建过视图 DATA l_land1 TYPE c LENGTH 2 VALUE 'CN'."默认国家 DATA l_lifnr TYPE lifnr VALUE 0. "返回的供应商编号 g_mode = 'U'. * 查出所有的银行信息 SELECT lifnr "供应商或债权人的帐号 banks "银行国家代码 bankl "银行代码 bankn "银行帐户号码 FROM lfbk INTO CORRESPONDING FIELDS OF TABLE lt_bankdetail2. SORT lt_bankdetail2 BY lifnr. * 查出所有公司代码数据 SELECT lifnr bukrs akont zterm zuawa INTO CORRESPONDING FIELDS OF TABLE lt_lfb1 FROM lfb1. SORT lt_lfb1 BY lifnr bukrs. PERFORM frm_format_alpha_input USING gs_basic_bk-lifnr."添加前导零 * 找出对应供应商编号的银行代码数据 READ TABLE lt_bankdetail2 INTO ls_bankdetail2 WITH KEY lifnr = gs_basic_bk-lifnr BINARY SEARCH. IF sy-subrc = 0. LOOP AT lt_bankdetail2 INTO ls_bankdetail2_1 FROM sy-tabix . IF ls_bankdetail2_1-lifnr = ls_bankdetail2-lifnr. MOVE-CORRESPONDING ls_bankdetail2_1 TO ls_bankdetail4. APPEND ls_bankdetail4 TO lt_bankdetail4. ELSE. EXIT. ENDIF. CLEAR:ls_bankdetail4,ls_bankdetail2_1. ENDLOOP. ENDIF. "查找了LFB1中是否存在公司,即该供应商是否之前创建公司视图 READ TABLE lt_lfb1 WITH KEY lifnr = gs_basic_bk-lifnr bukrs = gs_basic_bk-bukrs TRANSPORTING NO FIELDS . IF sy-subrc = 0. CLEAR l_ifbukrs. l_ifbukrs = yes."之前有创建过当前传入的公司代码数据 ENDIF. * 银行数据 "将传入的银行数据和根据供应商查找到的数据进行比对,如果相同,则将查找到的内表数据打上删除标记 LOOP AT lt_bankdetail4 INTO ls_bankdetail4 WHERE bankl = gs_basic_bk-bankl AND bankn = gs_basic_bk-bankn. ls_bankdetail3-task = c_del. " 打上删除标记 ls_bankdetail3-data_key-banks = ls_bankdetail4-banks. "国家 ls_bankdetail3-data_key-bankl = ls_bankdetail4-bankl. "银行代码 ls_bankdetail3-data_key-bankn = ls_bankdetail4-bankn. "银行帐户 APPEND ls_bankdetail3 TO lt_bankdetail3. CLEAR:ls_bankdetail3,ls_bankdetail4. ENDLOOP. * 客户通用数据 ls_vendor2-header-object_task = g_mode."更新标识 ls_vendor2-header-object_instance-lifnr = gs_basic_bk-lifnr."供应商编号 ls_vendor2-central_data-central-data-kunnr = gs_basic_bk-kunnr."客户 ls_vendor2-central_data-central-datax-kunnr = yes. * 公司代码数据 "如果之前已经创建了公司视图的话,就对其进行修改,否则对其进行新建 IF l_ifbukrs = yes. ls_company2-task = c_edit. "如果传入的公司存在,则进行修改 ELSE. ls_company2-task = c_insr. "如果一个供应商没有公司视图,则进行新建公司视图 ENDIF. ls_company2-data_key-bukrs = gs_basic_bk-bukrs."公司代码 ls_company2-data-akont = gs_basic_bk-akont. "统驭科目 ls_company2-data-zterm = gs_basic_bk-zterm. "付款条件代码 ls_company2-data-reprf = gs_basic_bk-reprf. "付款条件代码 ls_company2-datax-akont = yes. ls_company2-datax-zterm = yes. ls_company2-datax-reprf = yes. APPEND ls_company2 TO lt_company2. ls_vendor2-company_data-company = lt_company2. "此时再将传入的数据导入系统中进行赋值 ls_bankdetail3-task = c_insr. ls_bankdetail3-data_key-banks = l_land1."国家 ls_bankdetail3-data_key-bankl = gs_basic_bk-bankl."银行代码 ls_bankdetail3-data_key-bankn = gs_basic_bk-bankn."银行帐户 = 合作银行类型 APPEND ls_bankdetail3 TO lt_bankdetail3. CLEAR ls_bankdetail3. IF gs_basic_bk-bankl IS NOT INITIAL OR gs_basic_bk-bankn IS NOT INITIAL. "这2个值有其中一个不为空时才加入银行数据 ls_vendor2-central_data-bankdetail-bankdetails = lt_bankdetail3."银行明细 ENDIF. *将整理好的数据添加到供应商主数据中 APPEND ls_vendor2 TO lt_vendor2. ls_master_data-vendors = lt_vendor2. CALL METHOD vmd_ei_api=>maintain_bapi EXPORTING is_master_data = ls_master_data IMPORTING es_message_defective = ls_return_message "错误消息 es_master_data_correct = ls_return_data. "创建成功返回的供应商数据 lt_message = ls_return_message-messages. lt_return_vendors = ls_return_data-vendors. READ TABLE lt_return_vendors INTO ls_return_verdors INDEX 1. IF sy-subrc = 0 . WRITE ls_return_verdors-header-object_instance TO l_lifnr."读取供应商编号 ENDIF. IF lt_message IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_msg = 'S'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ENDIF. "附加数据 gs_alv_bukrs-num = g_num. gs_alv_bukrs-type = g_msg. IF g_msg = 'S'. gs_alv_bukrs-light = '@5B@'. CONCATENATE '供应商'gs_basic_bk-lifnr'扩充公司代码成功' INTO gs_alv_bukrs-message. ELSEIF g_msg = 'E'. gs_alv_bukrs-light = '@5C@'. CONCATENATE '供应商'gs_basic_bk-lifnr'扩充公司代码失败' INTO gs_alv_bukrs-message. ENDIF. MODIFY gt_alv_bukrs FROM gs_alv_bukrs. CLEAR:ls_bankdetail2,ls_bankdetail3,ls_vendor2,ls_company2,ls_master_data,ls_return_message, ls_return_data,ls_return_verdors. REFRESH:lt_bankdetail3,lt_company2,lt_vendor2,lt_message,lt_return_vendors,lt_bankdetail2, lt_lfb1. CLEAR:l_ifbukrs,l_lifnr. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_MODEL *&---------------------------------------------------------------------* * 下载模板 *----------------------------------------------------------------------* * -->P_0146 text *----------------------------------------------------------------------* FORM frm_get_model USING p_objid TYPE wwwdata-objid. DATA: l_objdata LIKE wwwdatatab, l_destination LIKE rlgrap-filename, l_rc LIKE sy-subrc, l_errtxt TYPE string. DATA: l_fullpath TYPE string, l_extension TYPE string, l_fname LIKE rlgrap-filename, l_formkey LIKE wwwdatatab. l_extension = p_objid. PERFORM get_file_name USING '.xls' 'Excel|*.xls;' CHANGING l_fullpath. IF l_fullpath = space. MESSAGE '请选择下载文件名' TYPE 'E'. ELSE. CONCATENATE l_fullpath '' INTO l_fname. SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF l_objdata WHERE relid = 'MI' AND objid = p_objid . IF sy-subrc NE 0 OR l_objdata-objid = space. MESSAGE e001(00) WITH '文件不存在!'. ELSE. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = l_objdata destination = l_fname IMPORTING rc = l_rc CHANGING temp = l_fname. IF l_rc NE 0. MESSAGE e001(00) WITH '文件下载失败!'. ENDIF. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form GET_FILE_NAME *&---------------------------------------------------------------------* * 获取要下载的文件名字 *----------------------------------------------------------------------* * -->P_0274 text * -->P_0275 text * <--P_L_FULLPATH text *----------------------------------------------------------------------* FORM get_file_name USING p_extension p_file_filter CHANGING p_fullpath. DATA: l_filename TYPE string, l_path TYPE string, l_fullpath TYPE string, l_titile TYPE string, l_init_dir TYPE string. CLEAR p_fullpath. l_titile = TEXT-t04. l_init_dir = TEXT-t03. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = l_titile default_extension = '.xls' initial_directory = l_init_dir prompt_on_overwrite = 'X' file_filter = p_file_filter CHANGING filename = l_filename path = l_path fullpath = l_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. p_fullpath = l_fullpath. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FORMAT_ALPHA_INPUT *&---------------------------------------------------------------------* * 添加前导零 *----------------------------------------------------------------------* * -->P_IM_S_GENERAL_LIFNR text *----------------------------------------------------------------------* FORM frm_format_alpha_input USING p1. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = p1 IMPORTING output = p1. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ALV_SHOW *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_G_flag text *----------------------------------------------------------------------* FORM frm_alv_show . PERFORM frm_get_data."数据获取 PERFORM frm_layout_build." 设置表格样式 PERFORM frm_field_build. " 建立表头数据 PERFORM frm_data_out."输出 ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * 往ALV输出内表里填值 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_data . IF g_flag = 1. CALL FUNCTION 'ZXXX001' EXPORTING filename = p_flname i_begin_col = '1' "起始列号 i_begin_row = '3' "起始行号 i_end_col = '26' "终止列号 i_end_row = '65535' "终止行号 im_sheet_name = 1 TABLES intern = gt_data[] EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF gt_data[] IS INITIAL. MESSAGE '清单中无数据' TYPE 'E'. ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *格式转化 LOOP AT gt_data ASSIGNING <gs_itab>. CASE <gs_itab>-col. WHEN '0001'. gs_alv_vendor-lifnr = <gs_itab>-value."供应商编号 WHEN '0002'. gs_alv_vendor-partn = <gs_itab>-value."供应商账户组 WHEN '0003'. gs_alv_vendor-ktokk = <gs_itab>-value."供应商账户组 WHEN '0004'. gs_alv_vendor-name1 = <gs_itab>-value."供应商名称 WHEN '0005'. gs_alv_vendor-sortl = <gs_itab>-value."简称(搜索项) WHEN '0006'. gs_alv_vendor-stras = <gs_itab>-value."地址(中) WHEN '0007'. gs_alv_vendor-ort01 = <gs_itab>-value."城市 WHEN '0008'. gs_alv_vendor-land1 = <gs_itab>-value."国家 WHEN '0009'. gs_alv_vendor-spras = <gs_itab>-value."语言 WHEN '0010'. gs_alv_vendor-telf1 = <gs_itab>-value."电话 WHEN '0011'. gs_alv_vendor-telfx = <gs_itab>-value."传真 WHEN '0012'. gs_alv_vendor-telbx = <gs_itab>-value."邮箱地址 WHEN '0013'. gs_alv_vendor-taxtype = <gs_itab>-value."税类别 WHEN '0014'. gs_alv_vendor-taxnumxl = <gs_itab>-value."税号 WHEN '0015'. gs_alv_vendor-augrp = <gs_itab>-value."权限组 WHEN '0016'. gs_alv_vendor-bukrs = <gs_itab>-value."公司代码 WHEN '0017'. gs_alv_vendor-kunnr = <gs_itab>-value."客户 WHEN '0018'. gs_alv_vendor-akont = <gs_itab>-value."统驭科目 WHEN '0019'. gs_alv_vendor-ztermb = <gs_itab>-value."付款条件 WHEN '0020'. gs_alv_vendor-bankl = <gs_itab>-value."银行代码 WHEN '0021'. gs_alv_vendor-bankn = <gs_itab>-value."银行帐号 WHEN '0022'. gs_alv_vendor-reprf = <gs_itab>-value."双重发票检查 WHEN '0023'. gs_alv_vendor-ekorg = <gs_itab>-value."采购组织 WHEN '0024'. gs_alv_vendor-waers = <gs_itab>-value."订单货币 WHEN '0025'. gs_alv_vendor-ztermc = <gs_itab>-value."付款条件 WHEN '0026'. gs_alv_vendor-webre = <gs_itab>-value."基于收货的发票校验 ENDCASE. AT END OF row. "权限检查 AUTHORITY-CHECK OBJECT 'ZBUKRS' ID 'BUKRS' FIELD gs_alv_vendor-bukrs. IF sy-subrc <> 0. MESSAGE ID 'ZMM001' TYPE 'E' NUMBER '19' WITH gs_alv_vendor-bukrs. ENDIF. AUTHORITY-CHECK OBJECT 'ZAUGRP' ID 'AUGRP' FIELD gs_alv_vendor-augrp. IF sy-subrc <> 0. MESSAGE ID 'ZMM001' TYPE 'E' NUMBER '20' WITH gs_alv_vendor-augrp. ENDIF. APPEND gs_alv_vendor TO gt_alv_vendor. CLEAR gs_alv_vendor. ENDAT. ENDLOOP. ELSEIF g_flag = 2. CALL FUNCTION 'ZXXX001' EXPORTING filename = p_flname i_begin_col = '1' "起始列号 i_begin_row = '3' "起始行号 i_end_col = '8' "终止列号 i_end_row = '65535' "终止行号 im_sheet_name = 2 TABLES intern = gt_data[] EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF gt_data[] IS INITIAL. MESSAGE '清单中无数据' TYPE 'E'. ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *格式转化 LOOP AT gt_data ASSIGNING <gs_itab>. CASE <gs_itab>-col. WHEN '0001'. gs_alv_bukrs-lifnr = <gs_itab>-value."供应商编号 WHEN '0002'. gs_alv_bukrs-bukrs = <gs_itab>-value."公司代码 WHEN '0003'. gs_alv_bukrs-kunnr = <gs_itab>-value."客户 WHEN '0004'. gs_alv_bukrs-akont = <gs_itab>-value."统驭科目 WHEN '0005'. gs_alv_bukrs-zterm = <gs_itab>-value."付款条件 WHEN '0006'. gs_alv_bukrs-bankl = <gs_itab>-value."银行代码 WHEN '0007'. gs_alv_bukrs-bankn = <gs_itab>-value."银行帐号 WHEN '0008'. gs_alv_bukrs-reprf = <gs_itab>-value."双重发票检查 ENDCASE. AT END OF row. APPEND gs_alv_bukrs TO gt_alv_bukrs. CLEAR gs_alv_bukrs. ENDAT. ENDLOOP. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_LAYOUT_BUILD *&---------------------------------------------------------------------* * " 设置表格样式 *----------------------------------------------------------------------* FORM frm_layout_build . g_layout-box_fieldname = 'SEL'. " 选择模式,在最左端有选择按钮 g_layout-colwidth_optimize = 'X'. " 自动调整列宽 g_layout-zebra = 'X'. " 表格斑马线 ENDFORM. "frm_layout_build *&---------------------------------------------------------------------* *& Form FRM_FIELD_BUILD *&---------------------------------------------------------------------* * " 建立表头数据 *----------------------------------------------------------------------* FORM frm_field_build . IF g_flag = 1. "一般数据 * PERFORM field_set USING 'SEL' '' '' '15' '' '' . PERFORM field_set USING 'LIFNR' '供应商号' '供应商号' '15' '' '' . PERFORM field_set USING 'KTOKK' '供应商账户组' '供应商账户组' '15' '' '' . PERFORM field_set USING 'NAME1' '供应商名称(中文)' '供应商名称(中文)' '15' '' '' . PERFORM field_set USING 'SORTL' '简称(搜索项)' '简称(搜索项)' '15' '' '' . PERFORM field_set USING 'STRAS' '地址(中)' '地址(中)' '15' '' '' . PERFORM field_set USING 'ORT01' '城市' '城市' '15' '' '' . PERFORM field_set USING 'LAND1' '国家' '国家' '15' '' '' . PERFORM field_set USING 'SPRAS' '语言' '语言' '15' '' '' . PERFORM field_set USING 'TELF1' '电话' '电话' '15' '' '' . PERFORM field_set USING 'TELFX' '传真' '传真' '15' '' '' . PERFORM field_set USING 'TELBX' '邮箱地址' '邮箱地址' '15' '' '' . PERFORM field_set USING 'TAXTYPE' '税类别' '税类别' '15' '' '' . PERFORM field_set USING 'TAXNUMXL' '税号' '税号' '15' '' '' . PERFORM field_set USING 'AUGRP' '权限组' '权限组' '15' '' '' . "公司代码 PERFORM field_set USING 'BUKRS' '公司代码' '公司代码' '15' '' '' . PERFORM field_set USING 'KUNNR' '客户' '客户' '15' '' '' . PERFORM field_set USING 'AKONT' '统驭科目' '统驭科目' '15' '' '' . PERFORM field_set USING 'ZTERMB' '付款条件' '付款条件' '15' '' '' . PERFORM field_set USING 'BANKL' '银行代码' '银行代码' '15' '' '' . PERFORM field_set USING 'BANKN' '银行帐号' '银行帐号' '15' '' '' . PERFORM field_set USING 'REPRF' '双重发票检查' '双重发票检查' '15' '' '' . "采购组织 PERFORM field_set USING 'EKORG' '采购组织' '采购组织' '15' '' '' . PERFORM field_set USING 'WAERS' '订单货币' '订单货币' '15' '' '' . PERFORM field_set USING 'ZTERMC' '付款条件' '付款条件' '15' '' '' . PERFORM field_set USING 'WEBRE' '基于收货的发票校验' '基于收货的发票校验' '15' '' '' . "附加数据 PERFORM field_set USING 'NUM' '当前行数' '当前行数' '15' '' '' . PERFORM field_set USING 'TYPE' '执行结果' '执行结果' '15' '' '' . PERFORM field_set USING 'MESSAGE' '返回消息' '返回消息' '15' '' '' . PERFORM field_set USING 'LIGHT' '执行情况' '执行情况' '15' '' '' . ELSEIF g_flag = 2. "一般数据 * PERFORM field_set USING 'SEL' '' '' '15' '' '' . PERFORM field_set USING 'LIFNR' '供应商号' '供应商号' '15' '' '' . "公司代码 PERFORM field_set USING 'BUKRS' '公司代码' '公司代码' '15' '' '' . PERFORM field_set USING 'KUNNR' '客户' '客户' '15' '' '' . PERFORM field_set USING 'AKONT' '统驭科目' '统驭科目' '15' '' '' . PERFORM field_set USING 'ZTERM' '付款条件' '付款条件' '15' '' '' . PERFORM field_set USING 'BANKL' '银行代码' '银行代码' '15' '' '' . PERFORM field_set USING 'BANKN' '银行帐号' '银行帐号' '15' '' '' . PERFORM field_set USING 'REPRF' '双重发票检查' '双重发票检查' '15' '' '' . "附加数据 PERFORM field_set USING 'NUM' '当前行数' '当前行数' '15' '' '' . PERFORM field_set USING 'TYPE' '执行结果' '执行结果' '15' '' '' . PERFORM field_set USING 'MESSAGE' '返回消息' '返回消息' '15' '' '' . PERFORM field_set USING 'LIGHT' '执行情况' '执行情况' '15' '' '' . ENDIF. ENDFORM. "frm_field_build *&---------------------------------------------------------------------* *& Form FRM_DATA_OUT *&---------------------------------------------------------------------* * 输出数据 *----------------------------------------------------------------------* FORM frm_data_out . IF g_flag = 1. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = c_cns_pf_status i_callback_user_command = c_cns_user_command is_layout = g_layout it_fieldcat = gt_fieldcat i_save = 'X' TABLES t_outtab = gt_alv_vendor EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ELSEIF g_flag = 2. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = c_cns_pf_status i_callback_user_command = c_cns_user_command is_layout = g_layout it_fieldcat = gt_fieldcat i_save = 'X' TABLES t_outtab = gt_alv_bukrs EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. "frm_data_out *&---------------------------------------------------------------------* *& Form FIELD_SET *&---------------------------------------------------------------------* FORM field_set USING p_fieldname p_seltext_l p_seltext_s p_outputlen p_ref_fieldname p_ref_tabname . IF p_fieldname = 'MESSAGE'. gs_fieldcat-key = 'X'. ELSEIF p_fieldname = 'TYPE'. gs_fieldcat-key = 'X'. ELSEIF p_fieldname = 'NUM'. gs_fieldcat-key = 'X'. ELSEIF p_fieldname = 'LIGHT'. gs_fieldcat-key = 'X'. ENDIF. gs_fieldcat-fieldname = p_fieldname . gs_fieldcat-seltext_l = p_seltext_l . gs_fieldcat-seltext_s = p_seltext_s . gs_fieldcat-outputlen = p_outputlen . gs_fieldcat-ref_fieldname = p_ref_fieldname. gs_fieldcat-ref_tabname = p_ref_tabname. APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. ENDFORM. "field_set *&------------------------------------------------------------------- * 添加按钮,双击下面的 STANDARD_FULLSCREEN *-------------------------------------------------------------------- FORM alv_pf_status USING ut_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING ut_extab. ENDFORM. "ALV_PF_STATUS *-------------------------------------------------------------------- * 自定义事件、双击事件 *-------------------------------------------------------------------- FORM alv_user_command USING u_ucomm LIKE sy-ucomm us_selfield TYPE slis_selfield. DATA:l_index TYPE sy-tabix. CASE u_ucomm. WHEN 'SAVE'."保存数据到数据表 * PERFORM F_REFRESH_ALV. "刷新ALV,下面有说明 PERFORM frm_create. * WHEN '&IC1'."双击 ** 获取当前ALV所在行数据 * READ TABLE IT_GW INDEX RS_SELFIELD-TABINDEX. * SET PARAMETER ID: 'ANR' FIELD IT_GW-AUFNR. * CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN. ENDCASE. us_selfield-refresh = 'X'. ENDFORM. "ALV_USER_COMMAND *&---------------------------------------------------------------------* *& Form FRM_PRINT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_create . IF g_flag = 1." 供应商创建 LOOP AT gt_alv_vendor INTO gs_alv_vendor. g_num = g_num + 1. MOVE-CORRESPONDING gs_alv_vendor TO gs_basic_lf. PERFORM frm_create_vendor. CLEAR:gs_alv_vendor,gs_basic_lf. ENDLOOP. ELSEIF g_flag = 2."公司代码扩充 LOOP AT gt_alv_bukrs INTO gs_alv_bukrs. g_num = g_num + 1. MOVE-CORRESPONDING gs_alv_bukrs TO gs_basic_bk. PERFORM frm_add_bukrs. CLEAR:gs_alv_bukrs,gs_basic_bk. ENDLOOP. ENDIF. CLEAR g_num. ENDFORM. " FRM_CREATE FORM sub_auth_chk. ENDFORM.