使用BAPI批导客户主数据
BAPI: CVI_EI_INBOUND_MAIN
场景: 上传EXCEL文件,程序读出EXCEL文件并显示在ALV上,点击按钮即可批量导入客户主数据。
打上更新标识的数据,即为更新而不是创建
注意点:
客户角色FLCU00、FLCU01
FUNCTIONS伙伴功能的覆盖
客户主数据前台T-CODE:BP
REPORT: zsdb002.
*----------------------------------------------------------------------*
* 表声明
*----------------------------------------------------------------------*
TABLES:sscrfields. "选择屏幕上的字段
*----------------------------------------------------------------------*
* 数据类型
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_input,
zgxbs TYPE c, "更新标识
bu_partner TYPE bu_partner, " 合作伙伴号
partner_role TYPE bu_role, " 屏幕用途的BP角色
bu_group TYPE tb001-bu_group, " 业务伙伴分组
* BPEXT TYPE BUT000-BPEXT, " 外部客户号
name_org1 TYPE but000-name_org1, " 名称1
name_org2 TYPE but000-name_org2, " 名称2
* NAME_ORG3 TYPE BUT000-NAME_ORG3, " 名称3
* NAME_ORG4 TYPE BUT000-NAME_ORG4, " 名称4
bu_sort1 TYPE but000-bu_sort1, " 搜索项1
bu_sort2 TYPE but000-bu_sort2, " 搜索项2
post_code1 TYPE ad_pstcd1, " 邮政编码
region TYPE regio, " 省份/地区
city TYPE ad_city1, " 城市
country TYPE land1, " 国家
street1 TYPE char200, "adrc-street, " 街道1
* STREET2 TYPE ADRC-STR_SUPPL1, " 街道2
comp_head TYPE bp_comp_hd, " 身份证号(原字段描述为街道办事处)
tel_number TYPE ad_tlnmbr1, " 电话
* LANGU TYPE SY-LANGU, " 语言 (传1位 eg:1)
langue TYPE char2, " 语言(传2位 eg:EN)
taxtype TYPE bptaxtype, " 税号类别
taxnumxl TYPE bptaxnum, " 业务伙伴税号
zzcust_sc TYPE kna1-zzcust_sc, "客户来源
zzcust_cls TYPE kna1-zzcust_cls, "客户分类
zzchannel_m TYPE kna1-zzchannel_m, "渠道管理
zzrelated TYPE kna1-zzrelated, "是否关联方
banks TYPE bu_banks, " 银行国家代码
bankn TYPE bu_bankn, " 银行账户
bkref TYPE bu_bkref, " 参考明细
bankl TYPE bu_bankk, " 银行代码
banka TYPE banka, " 开户行
bahne TYPE bahne, " 组织机构代码
kukla TYPE kukla, " 客户集团
bran1 TYPE bran1_d, " 二级公司
* REMARK TYPE AD_REMARK1, " 注释
bukrs TYPE t001-bukrs, " 公司代码
togru TYPE knb1-togru, " 容差组
akont TYPE knb1-akont, " 统驭科目
zterm TYPE knb1-zterm, " 公司付款条件
zuawa TYPE dzuawa, " 排序码
* TEXT TYPE C LENGTH 1000, " 公司文本(部门)
vkorg TYPE rf02d-vkorg, " 销售组织
vtweg TYPE rf02d-vtweg, " 分销渠道
spart TYPE rf02d-spart, " 产品组
bzirk TYPE knvv-bzirk, " 销售区域
vkbur TYPE knvv-vkbur, " 销售部门
vkgrp TYPE knvv-vkgrp, " 销售组
waers TYPE knvv-waers, " 币种
konda TYPE knvv-konda, " 价格组
kalks TYPE knvv-kalks, " 定价过程
vwerk TYPE knvv-vwerk, " 交货工厂
vsbed TYPE knvv-vsbed, " 装运条件
podkz TYPE knvv-podkz, " POD-相关的
zterm2 TYPE knb1-zterm, " 销售付款条件
ktgrd TYPE knvv-ktgrd, " 客户分配账户组别
taxkd TYPE knvi-taxkd, " 税分类
parvw TYPE parvw, " 合作伙伴功能
xsy TYPE kna1-kunnr, " 销售员ID
icon TYPE c LENGTH 4, " 预警信号灯
message TYPE c LENGTH 360, " 信息
box TYPE c,
langu TYPE sy-langu, " 语言
num TYPE i, " 行数
END OF ty_input.
DATA:gt_alv TYPE STANDARD TABLE OF ty_input, "ALV内表
gs_alv TYPE ty_input.
TYPES:BEGIN OF ty_input2,
bu_partner TYPE bu_partner, " 合作伙伴号
partner_role TYPE bu_role, " 屏幕用途的BP角色
limit_rule TYPE ukm_limit_rule, " 规则
risk_class TYPE ukm_risk_class, " 风险类
check_rule TYPE ukm_check_rule, " 检查规则
credit_group TYPE ukm_cred_group, " 信用组
credit_sgmnt TYPE ukm_credit_sgmnt, " 信用段
credit_limit TYPE ukm_credit_limit, " 信用额度
limit_valid_date TYPE ukm_valid_date, " 有效期
icon TYPE c LENGTH 4, " 预警信号灯
message TYPE c LENGTH 360, " 信息
box TYPE c,
partner_guid TYPE bu_partner_guid, " 合作伙伴GUID
role_exist TYPE c,
sgmnt_exist TYPE c,
END OF ty_input2.
DATA:gt_alv2 TYPE STANDARD TABLE OF ty_input2, "ALV内表
gs_alv2 TYPE ty_input2.
DATA gt_alv_tax TYPE STANDARD TABLE OF ty_input. "校验税号重复临时表
DATA gt_tax_post TYPE STANDARD TABLE OF dfkkbptaxnum."税号存在性校验临时内表
*----------------------------------------------------------------------*
* ALV参数声明
*----------------------------------------------------------------------*
DATA:gt_fieldcat TYPE lvc_t_fcat, " 字段目录内表
gs_fieldcat TYPE lvc_s_fcat, " 字段目录工作区
gs_layout TYPE lvc_s_layo. " ALV布局
"选择界面下载按钮参数
DATA: functxt TYPE smp_dyntxt.
CONSTANTS : c_parvw1 TYPE parvw VALUE 'SP',
c_parvw2 TYPE parvw VALUE 'BP',
c_parvw3 TYPE parvw VALUE 'PY',
c_parvw4 TYPE parvw VALUE 'SH'.
*----------------------------------------------------------------------*
* 选择屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN:FUNCTION KEY 1. "在屏幕定义功能码
SELECTION-SCREEN:FUNCTION KEY 2. "在屏幕定义功能码
SELECTION-SCREEN: BEGIN OF BLOCK blk1.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_file TYPE dxfields-longpath. "文件路径
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_rd1 RADIOBUTTON GROUP rg1 DEFAULT 'X',
p_rd2 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN: END OF BLOCK blk1.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
*&---初始化选择屏幕值
*&---初始化变量
functxt-icon_id = icon_export.
functxt-icon_text = '模板下载'.
sscrfields-functxt_01 = functxt.
functxt-icon_id = icon_export.
functxt-icon_text = '信贷模板下载'.
sscrfields-functxt_02 = functxt.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
"下载模板
CASE sscrfields-ucomm.
WHEN 'FC01'."系统预留的功能码
"下载模板文件
PERFORM frm_download.
WHEN 'FC02'."系统预留的功能码
"下载模板文件
PERFORM frm_download_cms.
WHEN OTHERS.
ENDCASE.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN OUTPUT *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN ON VALUE-REQUEST *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
"选择路径
PERFORM frm_select_infile CHANGING p_file.
************************************************************************
* S T A R T O F S E L E C T I O N
************************************************************************
START-OF-SELECTION.
* 检查导入文件是否存在
PERFORM frm_check_para.
* 导入文件
PERFORM frm_upload.
* 校验导入的数据
PERFORM frm_check_data.
************************************************************************
* E N D O F S E L E C T I O N
************************************************************************
END-OF-SELECTION.
PERFORM frm_set_layout.
PERFORM frm_set_fieldcat.
PERFORM frm_display_data.
*&---------------------------------------------------------------------*
*& Form FRM_F4_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0010 text
*----------------------------------------------------------------------*
FORM frm_f4_file CHANGING p_0010 .
DATA:lt_filetable TYPE filetable,
lv_rc TYPE i.
* 打开文件对话
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = '请选择导入文件' " 默认名称'请选择导入文件'
file_filter = cl_gui_frontend_services=>filetype_excel " 默认文件后缀名
multiselection = space "
CHANGING
file_table = lt_filetable "导入数据放入内表
rc = lv_rc "返回正误判断
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
* 打开文件对话成功的情况下
IF sy-subrc = 0 AND lv_rc = 1.
* 读取内表
READ TABLE lt_filetable INTO p_0010 INDEX 1.
* 因为执行成功,读取第一行一定可以读到
IF sy-subrc NE 0.
CLEAR p_0010.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& 下载 SMW0中上传的文件
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download .
DATA: fname(128), ftype(3), fsize TYPE i.
DATA: l_fieldname TYPE string.
DATA: lv_num TYPE i.
DATA: user_action TYPE i. "文件保存对话框,用户行为
DATA: lv_filename TYPE string, "下载文件名
lv_wintitle TYPE string, "下载对话框标题名
lv_filepath TYPE string, "文件路径
lv_fullpath TYPE string, "全文件路径
lv_file TYPE rlgrap-filename,
lv_title TYPE string,
lv_xlsname TYPE wwwdatatab-objid VALUE 'ZSDB002', "模板名称
lv_key TYPE wwwdatatab,
lv_subrc TYPE sy-subrc.
DATA :def_file_name TYPE string. "默认文件名
CONCATENATE '客户批导导入模板' '.xlsx' INTO def_file_name.
"文件保存对话框,获得保存路径
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = '另存为' "对话框的标题
default_extension = 'XLSX' "默认的文件后缀名
default_file_name = def_file_name "默认文件名
file_filter = 'EXCEL 文档|*.' "文件类型过滤(只显示本地文件夹)
* INITIAL_DIRECTORY = "初始化的目录
CHANGING
filename = lv_filename "保存的文件名
path = lv_filepath "文件路径
fullpath = lv_fullpath "全文件路径
user_action = user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE TEXT-003 TYPE 'S' DISPLAY LIKE 'E'. "文件保存失败
RETURN.
ENDIF.
* 取消下载
IF user_action = '9'.
MESSAGE TEXT-004 TYPE 'S' DISPLAY LIKE 'E'. "下载已取消
RETURN.
ENDIF.
"从SAP资源库中下载文件
lv_file = lv_fullpath.
lv_key-relid = 'MI'.
lv_key-objid = lv_xlsname. "SMW0 中对象ID
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_key
destination = lv_file
IMPORTING
rc = lv_subrc.
IF sy-subrc <> 0.
MESSAGE TEXT-005 TYPE 'S' DISPLAY LIKE 'E'. "SAP WEB资源库中无可用模板供使用,请检查模板是否存在!
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_CMS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download_cms .
DATA: fname(128), ftype(3), fsize TYPE i.
DATA: l_fieldname TYPE string.
DATA: lv_num TYPE i.
DATA: user_action TYPE i. "文件保存对话框,用户行为
DATA: lv_filename TYPE string, "下载文件名
lv_wintitle TYPE string, "下载对话框标题名
lv_filepath TYPE string, "文件路径
lv_fullpath TYPE string, "全文件路径
lv_file TYPE rlgrap-filename,
lv_title TYPE string,
lv_xlsname TYPE wwwdatatab-objid VALUE 'ZSDB002_XD', "模板名称
lv_key TYPE wwwdatatab,
lv_subrc TYPE sy-subrc.
DATA :def_file_name TYPE string. "默认文件名
CONCATENATE '客户-信贷批导导入模板' '.xlsx' INTO def_file_name.
"文件保存对话框,获得保存路径
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = '另存为' "对话框的标题
default_extension = 'XLSX' "默认的文件后缀名
default_file_name = def_file_name "默认文件名
file_filter = 'EXCEL 文档|*.' "文件类型过滤(只显示本地文件夹)
* INITIAL_DIRECTORY = "初始化的目录
CHANGING
filename = lv_filename "保存的文件名
path = lv_filepath "文件路径
fullpath = lv_fullpath "全文件路径
user_action = user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE TEXT-003 TYPE 'S' DISPLAY LIKE 'E'. "文件保存失败
RETURN.
ENDIF.
* 取消下载
IF user_action = '9'.
MESSAGE TEXT-004 TYPE 'S' DISPLAY LIKE 'E'. "下载已取消
RETURN.
ENDIF.
"从SAP资源库中下载文件
lv_file = lv_fullpath.
lv_key-relid = 'MI'.
lv_key-objid = lv_xlsname. "SMW0 中对象ID
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_key
destination = lv_file
IMPORTING
rc = lv_subrc.
IF sy-subrc <> 0.
MESSAGE TEXT-005 TYPE 'S' DISPLAY LIKE 'E'. "SAP WEB资源库中无可用模板供使用,请检查模板是否存在!
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_PARA
*&---------------------------------------------------------------------*
*& 检查导入文件是否存在
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_para .
IF p_file IS INITIAL .
MESSAGE TEXT-001 TYPE 'S' DISPLAY LIKE 'E' .
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD
*&---------------------------------------------------------------------*
*& 导入文件
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_upload .
DATA lt_raw TYPE truxs_t_text_data .
DATA lv_path TYPE rlgrap-filename .
DATA lt_line TYPE c VALUE 1.
lv_path = p_file .
CASE 'X'.
WHEN p_rd1.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
i_line_header = lt_line "第一行不读
i_tab_raw_data = lt_raw "必输参数
i_filename = lv_path "路径
TABLES
i_tab_converted_data = gt_alv[] "读取EXCEL数据到内表
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
WHEN p_rd2.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
i_line_header = lt_line "第一行不读
i_tab_raw_data = lt_raw "必输参数
i_filename = lv_path "路径
TABLES
i_tab_converted_data = gt_alv2[] "读取EXCEL数据到内表
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
WHEN OTHERS.
ENDCASE.
*&---校验数据是否为空
IF p_rd1 = 'X' AND gt_alv IS INITIAL OR p_rd2 = 'X' AND gt_alv2 IS INITIAL.
MESSAGE TEXT-002 TYPE 'S' DISPLAY LIKE 'E'.
* MESSAGE S003(ZMSG). "无数据
LEAVE LIST-PROCESSING.
ENDIF.
IF p_rd2 = 'X'.
LOOP AT gt_alv2 INTO gs_alv2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_alv2-bu_partner
IMPORTING
output = gs_alv2-bu_partner.
MODIFY gt_alv2 FROM gs_alv2.
CLEAR gs_alv2.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
CLEAR gs_layout.
gs_layout-box_fname = 'BOX'.
gs_layout-sel_mode = 'A'. "选择行模式
gs_layout-cwidth_opt = 'X'. "优化列宽设置
gs_layout-zebra = 'X'. "设置斑马线
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat .
CLEAR:gs_fieldcat,gt_fieldcat.
*&--field宏设置
DEFINE fc.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_l = &2.
gs_fieldcat-ref_table = &3.
gs_fieldcat-ref_field = &4.
gs_fieldcat-no_zero = &5.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
fc 'ICON' '预警信号灯' '' '' ''.
fc 'MESSAGE' '消息' '' '' ''.
CASE 'X'.
WHEN p_rd1.
fc 'ZGXBS' '更新标识' '' '' ''.
fc 'BU_PARTNER' '合作伙伴编号' '' '' 'X'.
fc 'PARTNER_ROLE' '客户类型' '' '' ''.
fc 'BU_GROUP' '分组' '' '' ''.
fc 'NAME_ORG1' '名称1' '' '' ''.
fc 'NAME_ORG2' '名称2' '' '' ''.
fc 'BU_SORT1' '搜索项1' '' '' ''.
fc 'BU_SORT2' '搜索项2' '' '' 'X'.
fc 'POST_CODE1' '邮政编码' '' '' ''.
fc 'REGION' '省份' '' '' ''.
fc 'CITY' '城市' '' '' ''.
fc 'COUNTRY' '国家' '' '' ''.
fc 'STREET1' '街道1' '' '' ''.
fc 'COMP_HEAD' '身份证号' '' '' ''.
fc 'TEL_NUMBER' '电话' '' '' ''.
fc 'LANGUE' '语言' '' '' ''.
fc 'TAXTYPE' '税号类别' '' '' ''.
fc 'TAXNUMXL' '业务伙伴税号' '' '' ''.
fc 'ZZCUST_SC ' '客户来源' '' '' ''.
fc 'ZZCUST_CLS ' '客户分类' '' '' ''.
fc 'ZZCHANNEL_M' '渠道管理' '' '' ''.
fc 'ZZRELATED ' '是否关联方' '' '' ''.
fc 'BANKS' '银行国家代码' '' '' ''.
fc 'BANKN' '银行账户' '' '' ''.
fc 'BKREF' '参考明细' '' '' ''.
fc 'BANKL' '银行代码' '' '' ''.
fc 'BANKA' '开户行' '' '' ''.
fc 'BAHNE' '组织机构代码' '' '' ''.
fc 'KUKLA' '客户集团' '' '' ''.
fc 'BRAN1' '二级公司' '' '' ''.
fc 'BUKRS' '公司代码' '' '' ''.
fc 'TOGRU' '容差组' '' '' ''.
fc 'AKONT' '统驭科目' '' '' ''.
fc 'ZTERM' '付款条件' '' '' ''.
fc 'ZUAWA' '排序码' '' '' ''.
fc 'VKORG' '销售组织' '' '' ''.
fc 'VTWEG' '分销渠道' '' '' ''.
fc 'SPART' '产品组' '' '' ''.
fc 'BZIRK' '销售区域' '' '' ''.
fc 'VKBUR' '销售部门' '' '' ''.
fc 'vkgrp' '销售组' '' '' ''.
fc 'WAERS' '币种' '' '' ''.
fc 'KONDA' '价格组' '' '' ''.
fc 'KALKS' '定价过程' '' '' ''.
fc 'VWERK' '交货工厂' '' '' ''.
fc 'VSBED' '装运条件' '' '' ''.
fc 'PODKZ' 'POD-相关的' '' '' ''.
fc 'ZTERM2' '付款条件' '' '' ''.
fc 'KTGRD' '客户分配帐户组别' '' '' ''.
fc 'TAXKD' '税分类' '' '' ''.
fc 'PARVW' '合作伙伴功能' '' '' ''.
fc 'XSY' '销售员ID' '' '' ''.
WHEN p_rd2.
fc 'BU_PARTNER' '合作伙伴编号' '' '' 'X'.
fc 'PARTNER_ROLE ' ' 屏幕用途的BP角色' '' '' ''.
fc 'LIMIT_RULE ' ' 规则' '' '' ''.
fc 'RISK_CLASS ' ' 风险类' '' '' ''.
fc 'CHECK_RULE ' ' 检查规则' '' '' ''.
fc 'CREDIT_GROUP ' ' 信用组' '' '' ''.
fc 'CREDIT_SGMNT ' ' 信用段' '' '' ''.
fc 'CREDIT_LIMIT ' ' 信用额度' '' '' ''.
fc 'LIMIT_VALID_DATE' ' 有效期' '' '' ''.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data .
CASE 'X'.
WHEN p_rd1.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
WHEN p_rd2.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_alv2
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_status USING rt_extab TYPE slis_t_extab.
DATA ls_alv TYPE ty_input.
DATA ls_extab LIKE LINE OF rt_extab.
*当有错误时,隐藏创建客户按钮
READ TABLE gt_alv INTO ls_alv WITH KEY icon = icon_red_light.
IF sy-subrc = 0.
ls_extab-fcode = 'CREATE'.
APPEND ls_extab TO rt_extab.
ENDIF.
*当有错误时,隐藏创建客户按钮
READ TABLE gt_alv2 INTO gs_alv2 WITH KEY icon = icon_red_light.
IF sy-subrc = 0.
ls_extab-fcode = 'CREATE'.
APPEND ls_extab TO rt_extab.
ENDIF.
SET PF-STATUS 'STATUS_1000' EXCLUDING rt_extab..
ENDFORM.
FORM top_of_page USING cl_dd TYPE REF TO cl_dd_document.
DATA:
lv_lines TYPE i,
lv_buff TYPE sdydo_text_element,
lv_sline TYPE string.
CLEAR: lv_buff,lv_lines.
DESCRIBE TABLE gt_alv LINES lv_lines.
lv_sline = lv_lines.
CONCATENATE '条数,共:' lv_sline '条' INTO lv_buff. " 居中 <H1>设置字体格式
CALL METHOD cl_dd->add_text
EXPORTING
text = lv_buff
sap_style = 'KEY'.
ENDFORM. "TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA:ref_grid TYPE REF TO cl_gui_alv_grid.
DATA ls_alv TYPE ty_input.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid. " 获取全局变量
CASE r_ucomm.
WHEN 'CREATE'.
CASE 'X'.
WHEN p_rd1.
* 检查税号是否存在(防止创建后,再次点击创建按钮)
PERFORM frm_check_data_post.
IF gt_tax_post[] IS NOT INITIAL.
MESSAGE '税号已存在' TYPE 'E'.
ELSE.
"创建客户数据
* PERFORM FRM_CALL_BAPI.
PERFORM frm_call_bapi_cvi_ei.
ENDIF.
WHEN p_rd2.
PERFORM frm_call_bapi_cvi_cms.
WHEN OTHERS.
ENDCASE.
ENDCASE.
"刷新ALV
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid. " 获取全局变量
CALL METHOD ref_grid->check_changed_data. " 获取响应事件
rs_selfield-refresh = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_call_bapi_cvi_ei
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_call_bapi_cvi_ei .
DATA : lv_bpartnerguid TYPE bu_partner_guid_bapi.
DATA : lt_data TYPE cvis_ei_extern_t,
ls_data TYPE cvis_ei_extern,
lt_return TYPE bapiretm,
ls_return TYPE bapireti,
ls_msg TYPE bapiretc.
DATA : lv_msg TYPE string.
DATA : ls_partner TYPE bus_ei_extern,
ls_customer TYPE cmds_ei_extern.
DATA : lt_roles TYPE bus_ei_bupa_roles_t,
ls_roles TYPE bus_ei_bupa_roles,
lt_banks TYPE bus_ei_bupa_bankdetail_t,
ls_banks TYPE bus_ei_bupa_bankdetail,
lt_taxs TYPE bus_ei_bupa_taxnumber_t,
ls_taxs TYPE bus_ei_bupa_taxnumber,
lt_ident_numbers TYPE bus_ei_bupa_identification_t,
ls_ident_numbers TYPE bus_ei_bupa_identification,
lt_addresses TYPE bus_ei_bupa_address_t,
ls_addresses TYPE bus_ei_bupa_address,
lt_phone TYPE bus_ei_bupa_telephone_t,
ls_phone TYPE bus_ei_bupa_telephone,
lt_fax TYPE bus_ei_bupa_fax_t,
ls_fax TYPE bus_ei_bupa_fax,
lt_smtp TYPE bus_ei_bupa_smtp_t,
ls_smtp TYPE bus_ei_bupa_smtp,
ls_central TYPE cmds_ei_cmd_central,
lt_company TYPE cmds_ei_company_t,
ls_company TYPE cmds_ei_company,
lt_sales TYPE cmds_ei_sales_t,
ls_sales TYPE cmds_ei_sales,
lt_functions TYPE cmds_ei_functions_t,
ls_functions TYPE cmds_ei_functions,
lt_texts TYPE cvis_ei_text_t,
ls_texts TYPE cvis_ei_text,
lt_tab TYPE tline_tab,
ls_tab TYPE tline,
lt_tax_ind TYPE cmds_ei_tax_ind_t,
ls_tax_ind TYPE cmds_ei_tax_ind,
ls_remarks TYPE bus_ei_bupa_comrem,
lt_remarks TYPE bus_ei_bupa_comrem_t.
DATA : lt_partnerguid_list TYPE bu_partner_guid_t,
ls_partnerguid_list LIKE LINE OF lt_partnerguid_list.
DATA : lt_customer_list TYPE cvis_cust_link_t,
ls_customer_list TYPE cvi_cust_link.
DATA : ls_header TYPE cmds_ei_header,
ls_central_data TYPE cmds_ei_central_data,
ls_company_data TYPE cmds_ei_cmd_company,
ls_sales_data TYPE cmds_ei_cmd_sales.
CONSTANTS: gc_insert TYPE c VALUE 'I',
gc_update TYPE c VALUE 'U',
gc_modify TYPE c VALUE 'M',
gc_DELETE TYPE c VALUE 'D'.
DATA: lv_task TYPE c.
DATA: lv_object_task TYPE c.
DATA: lv_functions_task TYPE c.
DATA: lv_guid TYPE but000-partner_guid.
LOOP AT gt_alv INTO gs_alv WHERE box = 'X'.
CLEAR:lt_data,lt_return,lt_partnerguid_list,lt_customer_list.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_alv-bu_partner
IMPORTING
output = gs_alv-bu_partner.
IF gs_alv-zgxbs = 'X'.
lv_object_task = gc_update.
lv_task = gc_modify.
lv_functions_task = gc_modify.
"查业务伙伴是否存在
CLEAR lv_guid.
SELECT SINGLE partner_guid INTO lv_guid
FROM but000 WHERE partner = gs_alv-bu_partner.
lv_bpartnerguid = lv_guid.
ELSE.
lv_object_task = gc_insert.
lv_task = gc_insert.
lv_functions_task = gc_insert.
TRY .
CLEAR lv_bpartnerguid.
lv_bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
CATCH cx_uuid_error.
"返回消息
ENDTRY.
ENDIF.
CHECK lv_bpartnerguid IS NOT INITIAL.
CLEAR ls_partner.
ls_partner-header-object_task = lv_object_task.
ls_partner-header-object_instance-bpartner = gs_alv-bu_partner.
ls_partner-header-object_instance-bpartnerguid = lv_bpartnerguid.
****业务合作伙伴数据的中心数据***********************************
ls_partner-central_data-common-data-bp_control-category = '2'. "业务伙伴类别(1代表人员,2代表组织,3代表组)
ls_partner-central_data-common-data-bp_control-grouping = gs_alv-bu_group. "业务伙伴分组
ls_partner-central_data-common-data-bp_centraldata-title_key = '0003'. "固定值,代表公司
ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_alv-bu_sort1. "检索项1
ls_partner-central_data-common-data-bp_centraldata-searchterm2 = gs_alv-bu_sort2. "检索项2
* ls_partner-central_data-common-data-bp_centraldata-partnerexternal = gs_alv-bpext. "外部系统中的业务伙伴编号
ls_partner-central_data-common-data-bp_organization-name1 = gs_alv-name_org1. "供应商名称1
ls_partner-central_data-common-data-bp_organization-name2 = gs_alv-name_org2. "供应商名称2
* ls_partner-central_data-common-data-bp_organization-name3 = gs_alv-name_org1+80(40). "供应商名称3
* ls_partner-central_data-common-data-bp_organization-name4 = gs_alv-name_org1+120(40). "供应商名称4
ls_partner-central_data-common-data-bp_organization-foundationdate = sy-datum."'20170508' "建立日期
ls_partner-central_data-common-datax-bp_centraldata-title_key = abap_true.
ls_partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true.
ls_partner-central_data-common-datax-bp_centraldata-searchterm2 = abap_true.
ls_partner-central_data-common-datax-bp_centraldata-partnerexternal = abap_true.
ls_partner-central_data-common-datax-bp_organization-name1 = abap_true.
ls_partner-central_data-common-datax-bp_organization-name2 = abap_true.
ls_partner-central_data-common-datax-bp_organization-name3 = abap_true.
ls_partner-central_data-common-datax-bp_organization-name4 = abap_true.
ls_partner-central_data-common-datax-bp_organization-foundationdate = abap_true.
CLEAR:lt_roles.
IF gs_alv-partner_role = 'FLCU01'.
ls_roles-task = lv_task.
ls_roles-data_key = 'FLCU01'. "销售角色
APPEND ls_roles TO lt_roles.
ls_roles-task = lv_task.
ls_roles-data_key = 'FLCU00'. "公司角色
APPEND ls_roles TO lt_roles.
ELSEIF gs_alv-partner_role = 'FLCU00'.
ls_roles-task = lv_task.
ls_roles-data_key = 'FLCU00'. "公司角色
APPEND ls_roles TO lt_roles.
ENDIF.
ls_partner-central_data-role-roles = lt_roles.
CLEAR: lt_banks.
IF gs_alv-bankn IS NOT INITIAL.
ls_banks-task = lv_task.
ls_banks-data-bank_ctry = gs_alv-banks. "银行国家代码
ls_banks-data-bank_key = gs_alv-bankl. "银行代码
ls_banks-data-bank_acct = gs_alv-bankn. "银行帐户号码
ls_banks-data-bank_ref = gs_alv-bkref. "银行帐户号码
ls_banks-data-bankaccountname = gs_alv-banka. "开户行
ls_banks-datax-bank_ctry = 'X'.
ls_banks-datax-bank_key = 'X'.
ls_banks-datax-bank_acct = 'X'.
ls_banks-datax-bank_ref = 'X'.
ls_banks-datax-bankaccountname = 'X'.
APPEND ls_banks TO lt_banks.
ls_partner-central_data-bankdetail-bankdetails = lt_banks.
ENDIF.
CLEAR: lt_taxs.
IF gs_alv-taxnumxl IS NOT INITIAL.
ls_taxs-task = lv_task.
ls_taxs-data_key-taxtype = gs_alv-taxtype. "CN0 税号类别
ls_taxs-data_key-taxnumber = gs_alv-taxnumxl. "增值税登记号
APPEND ls_taxs TO lt_taxs.
ls_partner-central_data-taxnumber-taxnumbers = lt_taxs.
ENDIF.
***地址信息
CLEAR:lt_remarks,lt_phone,lt_fax,lt_smtp,lt_addresses.
ls_addresses-task = lv_task.
ls_addresses-data-postal-data-postl_cod1 = gs_alv-post_code1. "邮编
ls_addresses-data-postal-data-city = gs_alv-city. "城市
ls_addresses-data-postal-data-street = gs_alv-street1(40). "街道
ls_addresses-data-postal-data-str_suppl1 = gs_alv-street1+40(40). "街道
ls_addresses-data-postal-data-str_suppl2 = gs_alv-street1+80(40). "街道
ls_addresses-data-postal-data-str_suppl3 = gs_alv-street1+120(40). "街道
ls_addresses-data-postal-data-location = gs_alv-street1+160(40). "街道
ls_addresses-data-postal-data-country = gs_alv-country. "国家
ls_addresses-data-postal-data-region = gs_alv-region. "地区
ls_addresses-data-postal-data-languiso = gs_alv-langue. "语言
ls_addresses-data-postal-datax-postl_cod1 = abap_true.
ls_addresses-data-postal-datax-city = abap_true.
ls_addresses-data-postal-datax-street = abap_true.
ls_addresses-data-postal-datax-country = abap_true.
ls_addresses-data-postal-datax-region = abap_true. "地区
ls_addresses-data-postal-datax-langu_iso = abap_true. "语言
ls_addresses-data-postal-datax-str_suppl1 = abap_true.
ls_addresses-data-postal-datax-str_suppl2 = abap_true.
ls_addresses-data-postal-datax-str_suppl3 = abap_true.
ls_addresses-data-postal-datax-location = abap_true.
"电话1
CLEAR:ls_phone.
ls_phone-contact-task = lv_task.
ls_phone-contact-data-telephone = gs_alv-tel_number. "电话1
ls_phone-contact-datax-telephone = abap_true.
* "电话备注1(联系人)
* ls_remarks-task = 'I'.
* ls_remarks-data-langu = sy-langu.
* ls_remarks-data-comm_notes = gs_alv-remark.
* ls_remarks-datax-langu = abap_true.
* ls_remarks-datax-comm_notes = abap_true.
* APPEND ls_remarks TO lt_remarks.
* ls_phone-remark-remarks = lt_remarks.
APPEND ls_phone TO lt_phone.
"手机1
* CLEAR:ls_phone.
* ls_phone-contact-task = 'I'.
* ls_phone-contact-data-telephone = gs_alv-phone."手机1
* ls_phone-contact-data-r_3_user = '3'. "3表示移动电话
* ls_phone-contact-datax-telephone = abap_true.
* ls_phone-contact-datax-r_3_user = abap_true.
"手机备注1(联系人)
* ls_remarks-task = 'I'.
* ls_remarks-data-langu = sy-langu.
* ls_remarks-data-comm_notes = gs_alv-remark.
* ls_remarks-datax-langu = abap_true.
* ls_remarks-datax-comm_notes = abap_true.
* APPEND ls_remarks TO lt_remarks.
* ls_phone-remark-remarks = lt_remarks.
* APPEND ls_phone TO lt_phone.
ls_addresses-data-communication-phone-phone = lt_phone.
"传真1
* CLEAR:lt_fax.
* ls_fax-contact-task = 'I'.
* ls_fax-contact-data-fax = gs_alv-telfx. "传真号
* ls_fax-contact-datax-fax = abap_true.
* APPEND ls_fax TO lt_fax.
* ls_addresses-data-communication-fax-fax = lt_fax.
"邮件1
* CLEAR:lt_smtp.
* ls_smtp-contact-task = 'I'.
* ls_smtp-contact-data-e_mail = gs_alv-email. "邮件
* ls_smtp-contact-datax-e_mail = abap_true.
* APPEND ls_smtp TO lt_smtp.
* ls_addresses-data-communication-smtp-smtp = lt_smtp.
APPEND ls_addresses TO lt_addresses.
ls_partner-central_data-address-addresses = lt_addresses.
CLEAR: ls_phone,lt_phone,ls_remarks,lt_remarks,ls_fax,lt_fax,ls_smtp,lt_smtp.
* "电话2
* ls_phone-contact-task = 'I'.
* ls_phone-contact-data-telephone = gs_alv-tel1. "电话2
* ls_phone-contact-datax-telephone = abap_true.
* "电话备注2(联系人)
* ls_remarks-task = 'I'.
* ls_remarks-data-langu = sy-langu.
* ls_remarks-data-comm_notes = gs_alv-remark1.
* ls_remarks-datax-langu = abap_true.
* ls_remarks-datax-comm_notes = abap_true.
* APPEND ls_remarks TO lt_remarks.
* ls_phone-remark-remarks = lt_remarks.
* APPEND ls_phone TO lt_phone.
* "手机2
* ls_phone-contact-task = 'I'.
* ls_phone-contact-data-telephone = gs_alv-phone1."手机1
* ls_phone-contact-data-r_3_user = '3'. "3表示移动电话
* ls_phone-contact-datax-telephone = abap_true.
* ls_phone-contact-datax-r_3_user = abap_true.
* "手机备注2(联系人)
* ls_remarks-task = 'I'.
* ls_remarks-data-langu = sy-langu.
* ls_remarks-data-comm_notes = gs_alv-remark1.
* ls_remarks-datax-langu = abap_true.
* ls_remarks-datax-comm_notes = abap_true.
* APPEND ls_remarks TO lt_remarks.
* ls_phone-remark-remarks = lt_remarks.
* APPEND ls_phone TO lt_phone.
*
* "传真2
* ls_fax-contact-task = 'I'.
* ls_fax-contact-data-fax = gs_alv-telfx1. "传真号
* ls_fax-contact-datax-fax = abap_true.
* APPEND ls_fax TO lt_fax.
*
* "邮件2
* ls_smtp-contact-task = 'I'.
* ls_smtp-contact-data-e_mail = gs_alv-email1. "邮件
* ls_smtp-contact-datax-e_mail = abap_true.
* APPEND ls_smtp TO lt_smtp.
* ls_partner-central_data-communication-phone-phone = lt_phone.
* ls_partner-central_data-communication-fax-fax = lt_fax.
* ls_partner-central_data-communication-smtp-smtp = lt_smtp.
****供应商数据表头**********************************************
ls_header-object_task = lv_object_task.
ls_header-object_instance-kunnr = gs_alv-bu_partner.
ls_customer-header = ls_header.
****中心数据****************************************************
"数据已经在BP里面录入了,此处不需重复的填写了
ls_central-data-stcd5 = gs_alv-taxnumxl. "增值税登记号
ls_central-datax-stcd5 = abap_true.
ls_central-data-zzcust_sc = gs_alv-zzcust_sc. "客户来源
ls_central-datax-zzcust_sc = abap_true.
ls_central-data-zzcust_cls = gs_alv-zzcust_cls. "客户分类
ls_central-datax-zzcust_cls = abap_true.
ls_central-data-zzchannel_m = gs_alv-zzchannel_m. "渠道管理
ls_central-datax-zzchannel_m = abap_true.
ls_central-data-zzrelated = gs_alv-zzrelated. "是否关联方
ls_central-datax-zzrelated = abap_true.
ls_central-data-kukla = gs_alv-kukla. "客户集团
ls_central-datax-kukla = abap_true.
ls_central-data-bran1 = gs_alv-bran1. "二级公司
ls_central-datax-bran1 = abap_true.
ls_central-data-bahne = gs_alv-bahne. "组织机构代码
ls_central-datax-bahne = abap_true.
ls_central_data-central = ls_central.
ls_customer-central_data = ls_central_data.
IF gs_alv-taxkd IS NOT INITIAL.
ls_customer-central_data-tax_ind-tax_ind = VALUE cmds_ei_cmd_tax_ind-tax_ind( (
task = 'M'
data_key-aland = gs_alv-country
data_key-tatyp = 'MWST'
data-taxkd = gs_alv-taxkd " 客户税分类
datax-taxkd = 'X' " 客户税分类
) ).
ENDIF.
****公司代码数据************************************************
"---------ADD BY WENJ-------------
IF gs_alv-bukrs IS NOT INITIAL.
"---------ADD BY WENJ-------------
CLEAR:lt_company.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " 统驭科目补零
EXPORTING
input = gs_alv-akont
IMPORTING
output = gs_alv-akont.
ls_company-task = lv_task.
ls_company-data_key-bukrs = gs_alv-bukrs. "公司代码
ls_company-data-akont = gs_alv-akont. "统驭科目
ls_company-data-zuawa = gs_alv-zuawa. "排序码
ls_company-data-zterm = gs_alv-zterm. "付款条件
ls_company-data-togru = gs_alv-togru. "容差组
* ls_company-data-zwels = gs_alv-zwels. "付款条件
* ls_company-data-reprf = gs_alv-reprf. "检查重复发票
ls_company-datax-akont = abap_true.
ls_company-datax-zuawa = abap_true.
ls_company-datax-zterm = abap_true.
ls_company-datax-togru = abap_true.
* ls_company-datax-reprf = abap_true.
* ls_company-datax-zwels = abap_true.
APPEND ls_company TO lt_company.
ls_company_data-company = lt_company.
ls_customer-company_data = ls_company_data.
ENDIF.
****销售数据****************************************************
"---------ADD BY WENJ-------------
IF gs_alv-vkorg IS NOT INITIAL
AND gs_alv-vtweg IS NOT INITIAL
AND gs_alv-spart IS NOT INITIAL.
"---------ADD BY WENJ-------------
IF gs_alv-partner_role = 'FLCU01'.
CLEAR:lt_functions,lt_sales.
CLEAR ls_sales.
ls_sales-task = lv_task.
ls_sales-data_key-vkorg = gs_alv-vkorg. "销售组织
ls_sales-data_key-vtweg = gs_alv-vtweg. "分销渠道
ls_sales-data_key-spart = gs_alv-spart. "产品组
ls_sales-data-bzirk = gs_alv-bzirk. "销售区域
ls_sales-data-vkbur = gs_alv-vkbur. "销售部门
"---------ADD BY WENJ-------------
ls_sales-data-vkgrp = gs_alv-vkgrp. "销售组
"---------ADD BY WENJ-------------
ls_sales-data-zterm = gs_alv-zterm2. "销售付款条件
ls_sales-data-waers = gs_alv-waers. "币种
ls_sales-data-konda = gs_alv-konda. "价格组
ls_sales-data-kalks = gs_alv-kalks. "定价过程
ls_sales-data-vwerk = gs_alv-vwerk. "交货工厂
ls_sales-data-vsbed = gs_alv-vsbed. "装运条件
ls_sales-data-ktgrd = gs_alv-ktgrd. "客户分配账户组别
"---------ADD BY WENJ-------------
ls_sales-data-podkz = gs_alv-podkz. "POD-相关的
"---------ADD BY WENJ-------------
ls_sales-datax-bzirk = abap_true.
ls_sales-datax-vkbur = abap_true.
"---------ADD BY WENJ-------------
ls_sales-datax-vkgrp = abap_true.
"---------ADD BY WENJ-------------
ls_sales-datax-zterm = abap_true.
"---------ADD BY WENJ-------------
IF gs_alv-waers IS NOT INITIAL.
"---------ADD BY WENJ-------------
ls_sales-datax-waers = abap_true.
ENDIF.
ls_sales-datax-konda = abap_true.
IF gs_alv-kalks IS NOT INITIAL.
ls_sales-datax-kalks = abap_true.
ENDIF.
ls_sales-datax-vwerk = abap_true.
ls_sales-datax-vsbed = abap_true.
IF gs_alv-ktgrd IS NOT INITIAL.
ls_sales-datax-ktgrd = abap_true.
ENDIF.
"---------ADD BY WENJ-------------
ls_sales-datax-podkz = abap_true.
"---------ADD BY WENJ-------------
ENDIF.
"Function伙伴功能
CLEAR ls_functions.
ls_functions-task = lv_functions_task.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw1 "SP 售达方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw2 "BP 收票方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw3 "PY 付款方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw4 "SH 送达方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
* Z1 业务员
* Z2 物流商
* Z3 商米客户层次
IF gs_alv-parvw IS NOT INITIAL.
IF gs_alv-parvw = 'Z1'.
SELECT SINGLE
knvp~lifnr
FROM knvp
INTO @DATA(lv_lifnr)
WHERE
kunnr = @gs_alv-bu_partner AND
vkorg = @gs_alv-vkorg AND
vtweg = @gs_alv-vtweg AND
spart = @gs_alv-spart AND
parvw = @gs_alv-parvw AND
parza = 0.
IF lv_lifnr IS NOT INITIAL.
ls_functions-task = gc_DELETE.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = gs_alv-parvw
IMPORTING
output = ls_functions-data_key-parvw.
ls_functions-data_key-parza = 0.
ls_functions-data-partner = lv_lifnr.
APPEND ls_functions TO lt_functions.
ENDIF.
ENDIF.
ls_functions-task = gc_modify.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = gs_alv-parvw
IMPORTING
output = ls_functions-data_key-parvw.
ls_functions-data_key-parza = 0.
ls_functions-data-partner = gs_alv-xsy.
APPEND ls_functions TO lt_functions.
ENDIF.
ls_sales-functions-functions = lt_functions.
*text文本
* CLEAR:lt_tab,lt_texts.
* ls_texts-task = 'I'.
* ls_texts-data_key-langu = sy-langu.
* ls_texts-data_key-text_id = '0002'.
* ls_tab-tdline = gs_alv-ltext.
* APPEND ls_tab TO lt_tab.
* ls_texts-data = lt_tab.
* APPEND ls_texts TO lt_texts.
* ls_sales-texts-texts = lt_texts.
APPEND ls_sales TO lt_sales.
ls_sales_data-sales = lt_sales.
ls_customer-sales_data = ls_sales_data.
ENDIF.
ls_data-partner = ls_partner.
ls_data-customer = ls_customer.
APPEND ls_data TO lt_data.
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
i_data = lt_data
* I_EXT_DATA =
IMPORTING
e_return = lt_return.
CLEAR lv_msg.
LOOP AT lt_return INTO ls_return.
LOOP AT ls_return-object_msg INTO ls_msg WHERE type = 'E' OR type = 'A'.
CONCATENATE lv_msg ls_msg-message INTO lv_msg.
ENDLOOP.
ENDLOOP.
IF lv_msg IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
* 根据伙伴GUID取出供应商编号
ls_partnerguid_list = ls_partner-header-object_instance-bpartnerguid.
APPEND ls_partnerguid_list TO lt_partnerguid_list.
lt_customer_list = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps(
i_partner_guids = lt_partnerguid_list ).
IF lt_customer_list IS NOT INITIAL.
READ TABLE lt_customer_list INTO ls_customer_list INDEX 1 .
IF sy-subrc EQ 0.
CONCATENATE '客户' ls_customer_list-customer '创建成功!' INTO gs_alv-message.
gs_alv-icon = icon_green_light.
PERFORM frm_add_comp_head USING gs_alv-bu_partner gs_alv.
ENDIF.
ELSE.
"可能创建成功了BP,但未创建成功Vendor
DATA : ls_cvis_error TYPE cvis_error.
ls_cvis_error = cvi_mapper=>get_instance( )->undo_assignments(
i_for_partners = lt_partnerguid_list ).
gs_alv-message = '供应商创建出错,供应商部分数据出错,请检查是否是BP伙伴功能问题'.
gs_alv-icon = icon_red_light.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gs_alv-message = lv_msg.
gs_alv-icon = icon_red_light.
ENDIF.
MODIFY gt_alv FROM gs_alv.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_call_bapi_cvi_cms
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_call_bapi_cvi_cms .
DATA : lv_bpartnerguid TYPE bu_partner_guid_bapi.
DATA : lt_data TYPE cvis_ei_extern_t,
ls_data TYPE cvis_ei_extern,
lt_return TYPE bapiretm,
ls_return TYPE bapireti,
ls_msg TYPE bapiretc.
DATA : lv_msg TYPE string.
DATA : ls_partner TYPE bus_ei_extern,
ls_customer TYPE cmds_ei_extern.
DATA : lt_roles TYPE bus_ei_bupa_roles_t,
ls_roles TYPE bus_ei_bupa_roles,
lt_banks TYPE bus_ei_bupa_bankdetail_t,
ls_banks TYPE bus_ei_bupa_bankdetail,
lt_taxs TYPE bus_ei_bupa_taxnumber_t,
ls_taxs TYPE bus_ei_bupa_taxnumber,
lt_ident_numbers TYPE bus_ei_bupa_identification_t,
ls_ident_numbers TYPE bus_ei_bupa_identification,
lt_addresses TYPE bus_ei_bupa_address_t,
ls_addresses TYPE bus_ei_bupa_address,
lt_phone TYPE bus_ei_bupa_telephone_t,
ls_phone TYPE bus_ei_bupa_telephone,
lt_fax TYPE bus_ei_bupa_fax_t,
ls_fax TYPE bus_ei_bupa_fax,
lt_smtp TYPE bus_ei_bupa_smtp_t,
ls_smtp TYPE bus_ei_bupa_smtp,
ls_central TYPE cmds_ei_cmd_central,
lt_company TYPE cmds_ei_company_t,
ls_company TYPE cmds_ei_company,
lt_sales TYPE cmds_ei_sales_t,
ls_sales TYPE cmds_ei_sales,
lt_functions TYPE cmds_ei_functions_t,
ls_functions TYPE cmds_ei_functions,
lt_texts TYPE cvis_ei_text_t,
ls_texts TYPE cvis_ei_text,
lt_tab TYPE tline_tab,
ls_tab TYPE tline,
lt_tax_ind TYPE cmds_ei_tax_ind_t,
ls_tax_ind TYPE cmds_ei_tax_ind,
ls_remarks TYPE bus_ei_bupa_comrem,
lt_remarks TYPE bus_ei_bupa_comrem_t.
DATA : lt_partnerguid_list TYPE bu_partner_guid_t,
ls_partnerguid_list LIKE LINE OF lt_partnerguid_list.
DATA : lt_customer_list TYPE cvis_cust_link_t,
ls_customer_list TYPE cvi_cust_link.
DATA : ls_header TYPE cmds_ei_header,
ls_central_data TYPE cmds_ei_central_data,
ls_company_data TYPE cmds_ei_cmd_company,
ls_sales_data TYPE cmds_ei_cmd_sales.
DATA : ls_cms_profile TYPE ukm_ei_bp_cms,
lt_cms_segments TYPE ukmt_ei_bp_cms_sgm,
ls_cms_segments TYPE ukm_ei_bp_cms_sgm.
LOOP AT gt_alv2 INTO gs_alv2 WHERE box = 'X'.
CLEAR:lt_data,lt_return,lt_partnerguid_list,lt_customer_list.
CHECK gs_alv2-partner_guid IS NOT INITIAL.
CLEAR ls_partner.
ls_partner-header-object_task = 'M'.
ls_partner-header-object_instance-bpartner = gs_alv2-bu_partner.
ls_partner-header-object_instance-bpartnerguid = gs_alv2-partner_guid.
***角色
CLEAR:lt_roles.
IF gs_alv2-role_exist <> 'X'.
ls_roles-task = 'I'.
ls_roles-data_key = gs_alv2-partner_role. "信贷角色
APPEND ls_roles TO lt_roles.
ls_partner-central_data-role-roles = lt_roles.
ENDIF.
***信贷
CLEAR ls_cms_profile.
ls_cms_profile-data-limit_rule = gs_alv2-limit_rule. " 规则
ls_cms_profile-data-risk_class = gs_alv2-risk_class. " 风险类
ls_cms_profile-data-check_rule = gs_alv2-check_rule. " 检查规则
ls_cms_profile-data-credit_group = gs_alv2-credit_group. " 信用组
ls_cms_profile-datax-limit_rule = abap_true.
ls_cms_profile-datax-risk_class = abap_true.
ls_cms_profile-datax-check_rule = abap_true.
ls_cms_profile-datax-credit_group = abap_true.
ls_partner-ukmbp_data-profile = ls_cms_profile.
CLEAR lt_cms_segments.
CLEAR ls_cms_segments.
IF gs_alv2-sgmnt_exist = 'X'.
ls_cms_segments-task = 'M'.
ELSE.
ls_cms_segments-task = 'I'.
ENDIF.
ls_cms_segments-data_key-partner = gs_alv2-bu_partner.
ls_cms_segments-data_key-credit_sgmnt = gs_alv2-credit_sgmnt.
ls_cms_segments-data-credit_limit = gs_alv2-credit_limit.
ls_cms_segments-data-limit_valid_date = gs_alv2-limit_valid_date.
ls_cms_segments-datax-credit_limit = abap_true.
ls_cms_segments-datax-limit_valid_date = abap_true.
APPEND ls_cms_segments TO lt_cms_segments.
ls_partner-ukmbp_data-segments-segments = lt_cms_segments.
ls_data-partner = ls_partner.
APPEND ls_data TO lt_data.
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
i_data = lt_data
* I_EXT_DATA =
IMPORTING
e_return = lt_return.
CLEAR lv_msg.
LOOP AT lt_return INTO ls_return.
LOOP AT ls_return-object_msg INTO ls_msg WHERE type = 'E' OR type = 'A'.
CONCATENATE lv_msg ls_msg-message INTO lv_msg.
ENDLOOP.
ENDLOOP.
IF lv_msg IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
CONCATENATE '客户' gs_alv2-bu_partner '信贷批导成功!' INTO gs_alv2-message.
gs_alv2-icon = icon_green_light.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gs_alv2-message = lv_msg.
gs_alv2-icon = icon_red_light.
ENDIF.
MODIFY gt_alv2 FROM gs_alv2.
IF gs_alv2-icon = icon_green_light.
gs_alv2-role_exist = 'X'.
MODIFY gt_alv2 FROM gs_alv2 TRANSPORTING role_exist WHERE bu_partner = gs_alv2-bu_partner
AND partner_role = gs_alv2-partner_role.
gs_alv2-sgmnt_exist = 'X'.
MODIFY gt_alv2 FROM gs_alv2 TRANSPORTING sgmnt_exist WHERE bu_partner = gs_alv2-bu_partner
AND credit_sgmnt = gs_alv2-credit_sgmnt.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CALL_BAPI
*&---------------------------------------------------------------------*
*& 创建客户数据
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_call_bapi .
DATA:lv_partner LIKE bapibus1006_head-bpartner. "业务伙伴编号
DATA lv_flg TYPE char1.
LOOP AT gt_alv INTO gs_alv WHERE box = 'X'.
* 创建合作伙伴主体数据
PERFORM frm_create_partner USING gs_alv CHANGING lv_partner lv_flg.
* 主数据创建失败,不允许继续创建
IF lv_flg = 'X'.
CLEAR lv_flg.
CONTINUE.
ELSE.
IF lv_partner IS NOT INITIAL.
* 添加合作伙伴角色
PERFORM frm_add_role USING lv_partner gs_alv lv_flg.
* 伙伴角色创建失败,不允许继续创建对应角色下的数据
IF lv_flg = 'X'.
CLEAR lv_flg.
CONTINUE.
ENDIF.
* 添加税
PERFORM frm_add_tax USING lv_partner gs_alv.
* 添加银行信息
PERFORM frm_add_bank USING lv_partner gs_alv.
* 添加客户身份证号(原字段注册办事处)
PERFORM frm_add_comp_head USING lv_partner gs_alv.
* 调用CMD_EI_API,添加外部客户
PERFORM f_call_cmd_api USING lv_partner gs_alv.
ENDIF.
gs_alv-bu_partner = lv_partner.
MODIFY gt_alv FROM gs_alv.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_PARTNER
*&---------------------------------------------------------------------*
*& 创建合作伙伴主体数据
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_partner USING ls_gs_alv STRUCTURE gs_alv
CHANGING lv_businesspartner lv_flg TYPE char1.
DATA:lv_businesspartnerextern TYPE bapibus1006_head-bpartner,
lv_partnercategory TYPE bapibus1006_head-partn_cat,
lv_partnergroup TYPE bapibus1006_head-partn_grp,
ls_centraldata TYPE bapibus1006_central,
ls_centraldataorganization TYPE bapibus1006_central_organ,
ls_addressdata TYPE bapibus1006_address.
DATA:lt_telefondata TYPE STANDARD TABLE OF bapiadtel,
ls_telefondata TYPE bapiadtel,
lt_addressnotes TYPE STANDARD TABLE OF bapiad_rem,
ls_addressnotes TYPE bapiad_rem,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2.
" 外部客户号:如果您需要在外部分配号码,您可以在创建业务伙伴时提供号码,在内部号码分配的情况下,您将此参数留空。
lv_businesspartnerextern = ls_gs_alv-bu_partner.
" 业务伙伴类别(1代表人员,2代表组织,3代表组)
lv_partnercategory = '2'.
" 业务伙伴分组:创建业务伙伴时,在“分组”字段中输入的内容决定业务伙伴号码字段是否以及如何填写数据。
lv_partnergroup = ls_gs_alv-bu_group.
*&--检索项信息
" 搜索项1
ls_centraldata-searchterm1 = ls_gs_alv-bu_sort1.
" 搜索项2
ls_centraldata-searchterm2 = ls_gs_alv-bu_sort2.
" 外部业务伙伴编号
* LS_CENTRALDATA-PARTNEREXTERNAL = LS_GS_ALV-BPEXT.
*&--名称信息
"名称1
ls_centraldataorganization-name1 = ls_gs_alv-name_org1.
* "名称2
ls_centraldataorganization-name2 = ls_gs_alv-name_org2.
* "名称3
* LS_CENTRALDATAORGANIZATION-NAME3 = LS_GS_ALV-NAME_ORG3.
* "名称4
* LS_CENTRALDATAORGANIZATION-NAME4 = LS_GS_ALV-NAME_ORG4.
*&--标准地址
" 邮政编码
ls_addressdata-postl_cod1 = ls_gs_alv-post_code1.
" 城市
ls_addressdata-city = ls_gs_alv-city.
" 国家
ls_addressdata-country = ls_gs_alv-country.
" 省份/地区
ls_addressdata-region = ls_gs_alv-region.
" 街道1
ls_addressdata-street = ls_gs_alv-street1.
" 街道2
* LS_ADDRESSDATA-STR_SUPPL1 = LS_GS_ALV-STREET2.
"语言代码
ls_addressdata-langu = ls_gs_alv-langu.
*&--通信
"语言代码
ls_addressnotes-langu = ls_gs_alv-langu.
" 地址注释
* LS_ADDRESSNOTES-ADR_NOTES = LS_GS_ALV-REMARK.
APPEND ls_addressnotes TO lt_addressnotes.
ls_telefondata-telephone = ls_gs_alv-tel_number. "电话号码: 拨区号 + 号码
APPEND ls_telefondata TO lt_telefondata.
* 创建BP基本数据
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
EXPORTING
businesspartnerextern = lv_businesspartnerextern
partnercategory = lv_partnercategory
partnergroup = lv_partnergroup
centraldata = ls_centraldata
centraldataorganization = ls_centraldataorganization
addressdata = ls_addressdata
IMPORTING
businesspartner = lv_businesspartner
TABLES
telefondata = lt_telefondata
* FAXDATA =
* TELETEXDATA =
* TELEXDATA =
* E_MAILDATA = E_MAILDATA
addressnotes = lt_addressnotes
return = lt_return
* ADDRESSDUPLICATES =
.
CLEAR lv_flg .
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gs_alv-icon = icon_red_light.
gs_alv-message = ls_return-message.
MODIFY gt_alv FROM gs_alv.
lv_flg = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
CLEAR:
lv_businesspartnerextern,
lv_partnercategory,
lv_partnergroup,
ls_centraldata,
ls_centraldataorganization,
ls_addressdata,
ls_addressnotes,
lt_addressnotes,
ls_return,
lt_return.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_ROLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_add_role USING lv_partner
ls_gs_alv STRUCTURE gs_alv lv_flg TYPE char1.
DATA:lt_return TYPE STANDARD TABLE OF bapiret2.
DATA lt_tb003i TYPE STANDARD TABLE OF tb003i.
DATA ls_tb003i TYPE tb003i.
CLEAR:lt_tb003i[],lv_flg.
* 查询角色视图
SELECT rltgr
role
INTO CORRESPONDING FIELDS OF TABLE lt_tb003i
FROM tb003i
WHERE rltgr = 'S_CUST'. "LS_GS_ALV-PARTNER_ROLE.
SORT lt_tb003i.
DELETE ADJACENT DUPLICATES FROM lt_tb003i COMPARING ALL FIELDS.
LOOP AT lt_tb003i INTO ls_tb003i.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
EXPORTING
businesspartner = lv_partner
businesspartnerrole = ls_tb003i-role "财务视图
TABLES
return = lt_return.
READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
IF sy-subrc = 0.
lv_flg = 'X'.
EXIT.
ENDIF.
CLEAR ls_tb003i.
ENDLOOP.
IF lv_flg = 'X'.
gs_alv-icon = icon_red_light.
gs_alv-message = '角色添加失败'.
MODIFY gt_alv FROM gs_alv.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
*
* CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
* EXPORTING
* BUSINESSPARTNER = LV_PARTNER
* BUSINESSPARTNERROLE = 'ZFLCU0' "财务视图
** BUSINESSPARTNERROLE = LS_GS_ALV-PARTNER_ROLE "客户角色
* TABLES
* RETURN = LT_RETURN.
*
* CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
* EXPORTING
* BUSINESSPARTNER = LV_PARTNER
* BUSINESSPARTNERROLE = 'ZFLCU1' "销售视图
** BUSINESSPARTNERROLE = LS_GS_ALV-PARTNER_ROLE "客户角色
* TABLES
* RETURN = LT_RETURN.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_CALL_CMD_API
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_V_PARTNER text
* -->LS_GS_ALV text
*&---------------------------------------------------------------------*
FORM f_call_cmd_api USING lv_partner
ls_gs_alv STRUCTURE gs_alv.
DATA:ls_master_data TYPE cmds_ei_main,
ls_extern TYPE cmds_ei_extern,
ls_master_data_correct TYPE cmds_ei_main,
ls_message_correct TYPE cvis_message,
ls_master_data_defective TYPE cmds_ei_main,
ls_message_defective TYPE cvis_message,
ls_return TYPE bapiret2.
DATA:ls_cvi_cust_link TYPE cvi_cust_link.
CLEAR:ls_master_data ,ls_extern .
*&--1.1外部接口:客户数据表头
ls_extern-header-object_instance-kunnr = lv_partner.
ls_extern-header-object_task = 'M' . "I 创建 ;U 更改 ;M 创建/更改 ;C 当前状态
***************************************
*&--1.2外部界面:中心数据
PERFORM frm_prepare_partner USING gs_alv CHANGING ls_extern .
IF gs_alv-bukrs IS NOT INITIAL.
*&--1.3外部接口:公司代码数据
PERFORM frm_prepare_bukrs USING gs_alv CHANGING ls_extern .
IF gs_alv-vkorg IS NOT INITIAL.
*&--1.4外部接口:销售数据
PERFORM frm_prepare_vkorg USING lv_partner gs_alv CHANGING ls_extern .
ENDIF.
*&--添加数据进入LS_MASTER_DATA-CUSTOMERS内表中
APPEND ls_extern TO ls_master_data-customers .
ENDIF.
* Initialize all the data
cmd_ei_api=>initialize( ).
CALL METHOD cmd_ei_api=>maintain_bapi
EXPORTING
iv_test_run = space
iv_collect_messages = 'X'
is_master_data = ls_master_data
IMPORTING
es_master_data_correct = ls_master_data_correct "LO_CMDS_CORRECT
es_message_correct = ls_message_correct "LO_CVIS_MSG_CORRECT
es_master_data_defective = ls_master_data_defective "LO_CMDS
es_message_defective = ls_message_defective. "LO_CVIS_MSG_ERROR.
IF ls_message_defective-is_error IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
SELECT SINGLE * INTO ls_cvi_cust_link FROM cvi_cust_link WHERE customer = lv_partner.
IF sy-subrc = 0.
gs_alv-icon = icon_green_light.
CONCATENATE '创建成功,客户编号为:' lv_partner INTO gs_alv-message.
MODIFY gt_alv FROM gs_alv.
ENDIF.
ELSE.
gs_alv-icon = icon_red_light.
LOOP AT ls_message_defective-messages INTO ls_return WHERE type = 'E'.
CONCATENATE ls_return-message gs_alv-message INTO gs_alv-message.
ENDLOOP.
MODIFY gt_alv FROM gs_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PREPARE_PARTNER
*&---------------------------------------------------------------------*
*& 外部界面:中心数据
*&---------------------------------------------------------------------*
* -->LS_GS_ALV text
* <--P_L_EXTERN text
*&---------------------------------------------------------------------*
FORM frm_prepare_partner USING ls_gs_alv STRUCTURE gs_alv
CHANGING ls_extern TYPE cmds_ei_extern.
DATA:ls_tbd001 TYPE tbd001.
*&--外部接口:中心客户数据
" 需要获取账户组
CLEAR ls_tbd001.
SELECT SINGLE * INTO ls_tbd001 FROM tbd001 WHERE bu_group = ls_gs_alv-bu_group.
ls_extern-central_data-central-data-ktokd = ls_tbd001-ktokd . "客户账户组
ls_extern-central_data-central-datax-ktokd = 'X' .
ls_extern-central_data-central-data-kukla = ls_gs_alv-kukla . "客户集团
ls_extern-central_data-central-datax-kukla = 'X' .
ls_extern-central_data-central-data-bran1 = ls_gs_alv-bran1 . "二级公司
ls_extern-central_data-central-datax-bran1 = 'X' .
ls_extern-central_data-central-data-bahne = ls_gs_alv-bahne . "组织机构代码
ls_extern-central_data-central-datax-bahne = 'X' .
*&--外部接口:税收标识
ls_extern-central_data-tax_ind-tax_ind = VALUE cmds_ei_cmd_tax_ind-tax_ind( (
task = 'M'
data_key-aland = gs_alv-country
data_key-tatyp = 'MWST'
data-taxkd = gs_alv-taxkd " 客户税分类
datax-taxkd = 'X' " 客户税分类
) ).
*&----外部接口:组织地址
ls_extern-central_data-address-postal-data-name = gs_alv-name_org1 . " 名称1
ls_extern-central_data-address-postal-data-name_2 = gs_alv-name_org2 . " 名称2
ls_extern-central_data-address-postal-data-sort1 = gs_alv-bu_sort1 . " 搜索项1
ls_extern-central_data-address-postal-data-sort2 = gs_alv-bu_sort2 . " 搜索项2
ls_extern-central_data-address-postal-data-city = gs_alv-city. " 城市
ls_extern-central_data-address-postal-data-postl_cod1 = gs_alv-post_code1. "邮政编码
ls_extern-central_data-address-postal-data-country = gs_alv-country. "国家
ls_extern-central_data-address-postal-data-countryiso = gs_alv-country. "国家的ISO代码
ls_extern-central_data-address-postal-data-street = gs_alv-street1. "街道1
* LS_EXTERN-CENTRAL_DATA-ADDRESS-POSTAL-DATA-STREET_NO = GS_ALV-STREET2. 街道2
ls_extern-central_data-address-postal-data-langu = gs_alv-langu. "语言 (1)
* LS_EXTERN-CENTRAL_DATA-ADDRESS-POSTAL-DATA-ADDR_VERS = 'C'. " 国际地址的版本标识
ls_extern-central_data-address-postal-datax-name = 'X' .
ls_extern-central_data-address-postal-datax-name_2 = 'X' .
ls_extern-central_data-address-postal-datax-sort1 = 'X' .
ls_extern-central_data-address-postal-datax-sort2 = 'X' .
ls_extern-central_data-address-postal-datax-city = 'X' .
ls_extern-central_data-address-postal-datax-postl_cod1 = 'X' .
ls_extern-central_data-address-postal-datax-country = 'X' .
ls_extern-central_data-address-postal-datax-countryiso = 'X' .
ls_extern-central_data-address-postal-datax-street = 'X' .
* LS_EXTERN-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-STREET_NO = 'X' .
ls_extern-central_data-address-postal-datax-langu = 'X' .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PREPARE_BUKRS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->LS_GS_ALV text
* <--P_L_EXTERN text
*&---------------------------------------------------------------------*
FORM frm_prepare_bukrs USING ls_gs_alv STRUCTURE gs_alv
CHANGING ls_extern TYPE cmds_ei_extern.
DATA:ls_company TYPE cmds_ei_company.
DATA:ls_texts TYPE cvis_ei_cvis_text.
DATA:lt_text TYPE STANDARD TABLE OF cvis_ei_text,
ls_text TYPE cvis_ei_text.
DATA:lt_data TYPE STANDARD TABLE OF tline,
ls_data TYPE tline.
*&--外部接口:公司代码数据
ls_text-task = 'M'.
ls_text-data_key-text_id = '0001'. "文本 ID
ls_text-data_key-langu = ls_gs_alv-langu. "语言 1
ls_text-data_key-languiso = ''.
ls_data-tdformat = ''.
* LS_DATA-TDLINE = GS_ALV-TEXT.
APPEND ls_data TO lt_data.
ls_text-data = lt_data.
APPEND ls_text TO lt_text.
ls_texts-texts = lt_text.
ls_company-texts = ls_texts.
ls_company-task = 'I'.
ls_company-data_key-bukrs = gs_alv-bukrs. " 公司代码
* LS_COMPANY-DATA-SPERR = 'X'.
ls_company-data-akont = gs_alv-akont. "统驭科目
ls_company-data-zterm = gs_alv-zterm. "付款条款
ls_company-data-togru = gs_alv-togru. "容差组
ls_company-data-zuawa = gs_alv-zuawa. "排序码
ls_company-datax-zuawa = 'X' . "排序码
ls_company-datax-akont = 'X'.
ls_company-datax-zterm = 'X'.
ls_company-datax-togru = 'X'.
APPEND ls_company TO ls_extern-company_data-company.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PREPARE_VKORG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_LV_PARTNER text
* -->LS_GS_ALV text
* <--P_L_EXTERN text
*&---------------------------------------------------------------------*
FORM frm_prepare_vkorg USING lv_partner
ls_gs_alv STRUCTURE gs_alv
CHANGING ls_extern TYPE cmds_ei_extern.
*&--外部接口:销售数据
ls_extern-sales_data-sales = VALUE cmds_ei_cmd_sales-sales(
(
task = 'I'
data_key-vkorg = ls_gs_alv-vkorg "销售组织
data_key-vtweg = ls_gs_alv-vtweg "分销渠道
data_key-spart = ls_gs_alv-spart "产品组
data-bzirk = ls_gs_alv-bzirk " 销售地区
data-vkbur = ls_gs_alv-vkbur " 销售部门
data-waers = gs_alv-waers " 币种
* DATA-KDGRP = PL_GOAL-KDGRP " 客户组
data-konda = ls_gs_alv-konda " 客户价格组
data-kalks = ls_gs_alv-kalks " 用于确定定价过程的客户分类
data-vwerk = ls_gs_alv-vwerk " 交货工厂
data-vsbed = ls_gs_alv-vsbed " 装运条件
data-zterm = ls_gs_alv-zterm2 " 付款条件
data-ktgrd = ls_gs_alv-ktgrd " 客户组的帐户分配
* DATA-AWAHR = '100' " 该项目的订单可能性
datax-bzirk = 'X'
datax-vkbur = 'X'
datax-waers = 'X'
datax-konda = 'X'
datax-kalks = 'X'
datax-vwerk = 'X'
datax-vsbed = 'X'
datax-zterm = 'X'
datax-ktgrd = 'X'
* 业务伙伴功能
functions-functions = VALUE cmds_ei_cmd_functions-functions(
(
task = 'M'
data_key-parvw = 'AG'
data-partner = lv_partner
datax-partner = 'X'
)
(
task = 'M'
data_key-parvw = 'RE'
data-partner = lv_partner
datax-partner = 'X'
)
(
task = 'M'
data_key-parvw = 'RG'
data-partner = lv_partner
datax-partner = 'X'
)
(
task = 'M'
data_key-parvw = 'WE'
* DATA-DEFPA = ''
data-partner = lv_partner
* DATAX-DEFPA = 'X'
datax-partner = 'X'
)
)
)
).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_TAX
*&---------------------------------------------------------------------*
*& 添加税
*&---------------------------------------------------------------------*
*& --> V_PARTNER
*& --> GS_ALV
*&---------------------------------------------------------------------*
FORM frm_add_tax USING lv_partner
ls_gs_alv STRUCTURE gs_alv.
DATA:lt_return TYPE STANDARD TABLE OF bapiret2.
* 传入税信息存在时,再调用该BAPI,否则会认为添加空税信息并报错
IF ls_gs_alv-taxtype IS NOT INITIAL.
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
businesspartner = lv_partner
taxtype = ls_gs_alv-taxtype
taxnumber = ls_gs_alv-taxnumxl
TABLES
return = lt_return.
READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
IF sy-subrc = 0.
gs_alv-icon = icon_red_light.
gs_alv-message = '税信息添加失败'.
MODIFY gt_alv FROM gs_alv.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_BANK
*&---------------------------------------------------------------------*
*& 添加银行信息
*&---------------------------------------------------------------------*
*& --> V_PARTNER
*& --> GS_ALV
*&---------------------------------------------------------------------*
FORM frm_add_bank USING lv_partner
ls_gs_alv STRUCTURE gs_alv.
DATA:lt_return TYPE STANDARD TABLE OF bapiret2.
DATA ls_bankdetaildata TYPE bapibus1006_bankdetail.
DATA:ls_bapi1011_address TYPE bapi1011_address,
lv_bank_key TYPE bapi1011_key-bank_key.
* 传入银行信息存在,创建银行页数据
IF ls_gs_alv-banks IS NOT INITIAL.
CLEAR:lv_bank_key, ls_bapi1011_address.
* 根据传入的银行帐户的名称,自动生成内部流水银行代码
ls_bapi1011_address-bank_name = ls_gs_alv-banka."开户行/银行帐户的名称
CALL FUNCTION 'BAPI_BANK_CREATE'
EXPORTING
bank_ctry = ls_gs_alv-banks "国家
bank_address = ls_bapi1011_address
i_xupdate = 'X'
IMPORTING
bankkey = lv_bank_key. "内部流水号:银行代码
* 在表NBNK生成当前流水号
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
CLEAR ls_bankdetaildata.
ls_bankdetaildata-bank_ctry = ls_gs_alv-banks. "国家
ls_bankdetaildata-bank_acct = ls_gs_alv-bankn. "银行账户/银行帐户号码
ls_bankdetaildata-bankaccountname = ls_gs_alv-banka. "开户行/银行帐户的名称
ls_bankdetaildata-bank_ref = ls_gs_alv-bkref. "参考明细
* LS_BANKDETAILDATA-BANK_KEY = LS_GS_ALV-BANKL. "银行代码
ls_bankdetaildata-bank_key = lv_bank_key. "银行代码
CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
EXPORTING
businesspartner = lv_partner
* BANKDETAILID = '0001'
bankdetaildata = ls_bankdetaildata
* IMPORTING
* BANKDETAILIDOUT =
TABLES
return = lt_return.
READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
IF sy-subrc = 0.
gs_alv-icon = icon_red_light.
* GS_ALV-MESSAGE = '银行信息添加失败'.
CONCATENATE gs_alv-message '银行信息添加失败' INTO gs_alv-message.
MODIFY gt_alv FROM gs_alv.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
* ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_IDNUMBER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
**& --> V_PARTNER
**& --> GS_ALV
**&---------------------------------------------------------------------*
*FORM FRM_ADD_IDNUMBER USING LV_PARTNER
* LS_GS_ALV STRUCTURE GS_ALV.
*
** DATA : w_identification TYPE bapibus1006_identification.
** uv_id_type TYPE bu_id_category
*
* DATA:LT_RETURN TYPE STANDARD TABLE OF BAPIRET2.
* DATA L_IDENTIFICATIONNUMBER TYPE BU_ID_NUMBER. "标识号
* CLEAR L_IDENTIFICATIONNUMBER.
*
* L_IDENTIFICATIONNUMBER = LS_GS_ALV-IDNUMBER. "标识号
*
*
*
* CALL FUNCTION 'BAPI_IDENTIFICATION_ADD'
* EXPORTING
* BUSINESSPARTNER = LV_PARTNER
** IDENTIFICATIONCATEGORY =
* IDENTIFICATIONNUMBER = L_IDENTIFICATIONNUMBER
** IDENTIFICATION =
* TABLES
* RETURN = LT_RETURN.
*
*
*
* READ TABLE LT_RETURN TRANSPORTING NO FIELDS WITH KEY TYPE = 'E'.
* IF SY-SUBRC = 0.
* GS_ALV-ICON = ICON_RED_LIGHT.
* GS_ALV-MESSAGE = '身份信息添加失败'.
* MODIFY GT_ALV FROM GS_ALV.
* ELSE.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT = 'X'.
* ENDIF.
** ENDIF.
*ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_COMP_HEAD
*&---------------------------------------------------------------------*
*& 添加客户身份证号(原字段注册办事处
*&---------------------------------------------------------------------*
*& --> V_PARTNER
*& --> GS_ALV
*&---------------------------------------------------------------------*
FORM frm_add_comp_head USING lv_partner
ls_gs_alv STRUCTURE gs_alv.
DATA ls_treasurydata TYPE bapi_str_bupa_fs_treasury.
DATA ls_treasurydatachange TYPE bapi_str_bupa_fs_treasury_x.
DATA:lt_return TYPE STANDARD TABLE OF bapiret2.
* 当身份证号存在
IF ls_gs_alv-comp_head IS NOT INITIAL.
ls_treasurydata-comp_head = ls_gs_alv-comp_head. "身份证号(原字段:注册办事处)
ls_treasurydatachange-comp_head = 'X'.
CALL FUNCTION 'BAPI_BUPA_FS_TREASURY_CHANGE'
EXPORTING
businesspartner = lv_partner
treasurydata = ls_treasurydata
* TESTRUN =
treasurydatachange = ls_treasurydatachange
* CHANGEDOCU =
TABLES
return = lt_return.
.
READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
IF sy-subrc = 0.
gs_alv-icon = icon_red_light.
CONCATENATE gs_alv-message '身份信息添加失败' INTO gs_alv-message.
MODIFY gt_alv FROM gs_alv.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& 校验导入的数据
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_data .
DATA lt_tax TYPE STANDARD TABLE OF dfkkbptaxnum.
DATA ls_tax TYPE dfkkbptaxnum.
DATA ls_alv TYPE ty_input.
DATA ls_alv_tmp TYPE ty_input.
DATA lv_tabix TYPE sy-tabix.
DATA lt_alv_tmp TYPE STANDARD TABLE OF ty_input.
DATA lv_num TYPE i.
FIELD-SYMBOLS <fs_alv> TYPE ty_input.
CASE 'X'.
WHEN p_rd1.
CLEAR lv_num.
LOOP AT gt_alv INTO ls_alv.
lv_num = lv_num + 1.
* 转化导入的语言代码(EN->1)
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = ls_alv-langue
IMPORTING
output = ls_alv-langu
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ls_alv-num = lv_num.
MODIFY gt_alv FROM ls_alv.
CLEAR ls_alv.
ENDLOOP.
* 得到传入税号的行
LOOP AT gt_alv INTO ls_alv WHERE taxnumxl IS NOT INITIAL.
"---------ADD BY WENJ-------------
IF ls_alv-zgxbs = 'X'.
CONTINUE.
ENDIF.
"---------ADD BY WENJ-------------
APPEND ls_alv TO gt_alv_tax[].
CLEAR ls_alv.
ENDLOOP.
* 校验是否有重复(税号具有唯一性)
IF gt_alv_tax[] IS NOT INITIAL.
SORT gt_alv_tax BY taxnumxl.
REFRESH lt_alv_tmp.
lt_alv_tmp[] = gt_alv_tax[].
LOOP AT gt_alv_tax ASSIGNING <fs_alv>.
CLEAR lv_tabix.
lv_tabix = sy-tabix.
CLEAR sy-tabix.
LOOP AT lt_alv_tmp INTO ls_alv WHERE taxnumxl = <fs_alv>-taxnumxl.
IF sy-tabix <> lv_tabix .
<fs_alv>-icon = icon_red_light.
<fs_alv>-message = '税号重复!'.
CONTINUE.
ENDIF.
CLEAR ls_alv.
ENDLOOP.
ENDLOOP.
* 检查导入的税号是否已存在
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_tax
FROM dfkkbptaxnum
FOR ALL ENTRIES IN gt_alv_tax
WHERE taxtype = gt_alv_tax-taxtype
AND taxnum = gt_alv_tax-taxnumxl.
IF lt_tax[] IS NOT INITIAL.
LOOP AT gt_alv_tax INTO ls_alv.
READ TABLE lt_tax INTO ls_tax WITH KEY taxtype = ls_alv-taxtype
taxnum = ls_alv-taxnumxl.
IF sy-subrc = 0.
ls_alv-icon = icon_red_light.
CONCATENATE ls_alv-message ' 税号已存在!' INTO ls_alv-message .
MODIFY gt_alv_tax FROM ls_alv.
ENDIF.
CLEAR ls_alv.
ENDLOOP.
ENDIF.
LOOP AT gt_alv INTO ls_alv .
READ TABLE gt_alv_tax INTO ls_alv_tmp WITH KEY num = ls_alv-num.
IF sy-subrc = 0.
ls_alv-icon = ls_alv_tmp-icon .
ls_alv-message = ls_alv_tmp-message.
ENDIF.
MODIFY gt_alv FROM ls_alv.
CLEAR :ls_alv,ls_alv_tmp.
ENDLOOP.
ENDIF.
WHEN p_rd2.
DATA(lt_temp_cms) = gt_alv2.
SORT lt_temp_cms BY bu_partner.
DELETE ADJACENT DUPLICATES FROM lt_temp_cms COMPARING bu_partner.
SELECT FROM but000
FIELDS partner, partner_guid
FOR ALL ENTRIES IN @lt_temp_cms
WHERE partner = @lt_temp_cms-bu_partner
INTO TABLE @DATA(lt_but000).
SORT lt_but000 BY partner.
SELECT FROM but100
FIELDS partner, rltyp
FOR ALL ENTRIES IN @lt_temp_cms
WHERE partner = @lt_temp_cms-bu_partner
INTO TABLE @DATA(lt_but100).
SORT lt_but100 BY partner rltyp.
SELECT FROM ukmbp_cms_sgm
FIELDS partner, credit_sgmnt
FOR ALL ENTRIES IN @lt_temp_cms
WHERE partner = @lt_temp_cms-bu_partner
INTO TABLE @DATA(lt_cms_sgm).
SORT lt_cms_sgm BY partner credit_sgmnt.
LOOP AT gt_alv2 INTO gs_alv2.
READ TABLE lt_but000 WITH KEY partner = gs_alv2-bu_partner BINARY SEARCH
INTO DATA(ls_but000).
IF sy-subrc <> 0.
gs_alv2-icon = icon_red_light .
gs_alv2-message = |客户{ gs_alv2-bu_partner }不存在|.
ELSE.
gs_alv2-partner_guid = ls_but000-partner_guid.
ENDIF.
READ TABLE lt_but100 WITH KEY partner = gs_alv2-bu_partner
rltyp = gs_alv2-partner_role BINARY SEARCH
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
gs_alv2-role_exist = abap_true.
ENDIF.
READ TABLE lt_cms_sgm WITH KEY partner = gs_alv2-bu_partner
credit_sgmnt = gs_alv2-credit_sgmnt BINARY SEARCH
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
gs_alv2-sgmnt_exist = abap_true.
ENDIF.
MODIFY gt_alv2 FROM gs_alv2.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA_POST
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_data_post .
* 校验数据
DATA ls_tax TYPE dfkkbptaxnum.
DATA ls_alv TYPE ty_input.
DATA lt_alv_tmp TYPE STANDARD TABLE OF ty_input.
* 检查导入的税号是否已存在
LOOP AT gt_alv INTO ls_alv WHERE taxnumxl IS NOT INITIAL AND box = 'X' AND zgxbs IS INITIAL.
APPEND ls_alv TO lt_alv_tmp[].
CLEAR ls_alv.
ENDLOOP.
IF lt_alv_tmp[] IS NOT INITIAL.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_tax_post
FROM dfkkbptaxnum
FOR ALL ENTRIES IN lt_alv_tmp
WHERE taxtype = lt_alv_tmp-taxtype
AND taxnum = lt_alv_tmp-taxnumxl.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_INFILE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- P_FILE
*&---------------------------------------------------------------------*
FORM frm_select_infile CHANGING p_p_file.
*&---定义传出文件名内表 和传出参数
DATA:wl_t_upfile TYPE filetable,
wl_rc TYPE i.
*&---调用类方法
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = '请选择本地文件'
file_filter = 'EXCEL文件 (*.xlsx)|*.xlsx|EXCEL文件 (*.xls)|*.xls|文本|*.txt|'
default_filename = '*.xlsx'
CHANGING
file_table = wl_t_upfile
rc = wl_rc.
*&---读取成功
IF sy-subrc = 0 AND wl_rc = 1.
READ TABLE wl_t_upfile INTO p_file INDEX 1.
ENDIF.
ENDFORM.
*Text elements
*----------------------------------------------------------
* 001 选择路径
*
*
*Selection texts
*----------------------------------------------------------
* P_FILE 文件路径
* RB_B1 上传文件
* RB_B2 下载模板