*&---------------------------------------------------------------------*
*& Report zsdr010
*& 客户主数据查询
*&---------------------------------------------------------------------*
report zsdr010.
tables: kna1, "客户主文件的一般数据.
knvv, "客户主记录销售数据.
adrc, "地址 (业务地址服务).
adrct, "地址文本 (业务地址服务).
adr3, "传真号 (业务地址服务).
t005u, "税款 :地区关键字:文本.
t016t, "行业名.
tbrct, "工业代码正文(客户主文件).
t171t, "客户: 销售地区: 文本.
vbak, "销售凭证 :抬头.
zsd_ktokd, "账户组类型表.
zbrand_authority. "权限组查询表.
type-pools slis.
*用于填充LV内表
types: begin of ty_tablebylfa1,
kunnr type kna1-kunnr, "客户编码
name1 type kna1-name1, "客户名称
name2 type kna1-name2, "客户名称
name3 type kna1-name3, "原道讯编码
name4 type kna1-name4, "名称 4
sortl type kna1-sortl, "检索项
stras type kna1-stras, "地址
city2 type adrc-city2, "区域(区域科室)
homecity type adrc-home_city, "属主(不同的城市)
homecitys type kna1-name2, "属主名称
bzirk type knvv-bzirk, "销售地区
ort01 type kna1-ort01, "店铺城市
regio type string, "代理商省份和店铺省份
bezei type t005u-bezei, "省份描述
telf1 type kna1-telf1, "电话
telf2 type kna1-telf2, "移动电话
faxnr_long type adr3-faxnr_long, "传真错
fax_number type adr3-fax_number, "传真对
brsch type kna1-brsch, "行业(类型
brtxt type t016t-brtxt, "行业描述(类型)
bahns type kna1-bahns, "列车站(店铺面积)
bran1 type kna1-bran1, "行业代码1(店铺性质)
remark type adrct-remark, "联系人
adrnr type kna1-adrnr, "地址
vtext type tbrct-vtext, "行业代码1描述(店铺性质)
bztxt type t171t-bztxt, "区名
vkorg type knvv-vkorg, "销售组织
ktokd type kna1-ktokd, "客户帐户组
aufsd type kna1-aufsd, "状态
aufsd1 type kna1-name1, "客户名称
begru type kna1-begru, "权限组
zdesp type zbrand_authority-zdesp, "所属AD,
end of ty_tablebylfa1.
"定义内表
types: begin of t_zbrand_authoritys,
zautgrp type zbrand_authority-zautgrp,
zdesp type zbrand_authority-zdesp,
end of t_zbrand_authoritys.
data : t_tab type standard table of ty_tablebylfa1.
data : w_tab type ty_tablebylfa1 .
data: t_zbrand_authority type standard table of t_zbrand_authoritys with header line,
w_zbrand_authority type t_zbrand_authoritys.
data: it_adrt type table of adr2 with header line."定义内表存储电话
data: it_adrp type table of adr2 with header line."定义内表存储移动电话
data: begin of it_kunnr occurs 0,
kunnr type kunnr,
end of it_kunnr.
*定义ALV显示参数
data: t_fieldcat_alv type slis_t_fieldcat_alv,
d_fieldcat type slis_fieldcat_alv,
d_layout type slis_layout_alv.
data: g_ucomm type sy-ucomm.
data: g_ucomm1 type sy-ucomm.
data: g_ucomm2 type sy-ucomm.
data: g_ucomm3 type sy-ucomm.
"过滤条件输入表单
selection-screen begin of block blk with frame title text-t01.
select-options: s_vkorg for knvv-vkorg obligatory, "销售组织
s_kunnr for kna1-kunnr, "客户编码
s_name2 for kna1-name2, "原编码
s_sortl for kna1-sortl, "检索项
s_ort01 for kna1-ort01, "店铺城市
s_regio for kna1-regio, "代理商省份和店铺省份
s_brsch for kna1-brsch, "行业(类型)
s_bzirk for knvv-bzirk, "OBLIGATORY, "销售地区
s_bran1 for kna1-bran1. "行业代码1(店铺性质)
parameters: r_rad1 radiobutton group xxx,
r_rad2 radiobutton group xxx,
r_rad3 radiobutton group xxx default 'X'.
selection-screen end of block blk.
*初始化
initialization.
start-of-selection.
perform frm_get_databylfa1. "根据过滤条件获取业务报表数据填充LV
perform getadr2. "更改it_tab·from adr2
perform frm_field. "设置LV的显示列
perform frm_displaylv_data. "LV显示查询结果集
*&---------------------------------------------------------------------*
*& Form get_dataAD.
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_dataad.
if t_tab[] is not initial.
select distinct
zbrand_authority~zautgrp
zbrand_authority~zdesp
into corresponding fields of table t_zbrand_authority
from zbrand_authority
for all entries in t_tab
where zautgrp = t_tab-begru.
endif.
sort t_zbrand_authority by zautgrp.
endform. "get_dataAD
*&---------------------------------------------------------------------*
*& Form frm_get_dataByLfa1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form frm_get_databylfa1.
if r_rad1 = 'X'."选择查询活动的
select distinct
kna1~kunnr "客户编码
kna1~name1 "客户名称
kna1~name2 "原编码
kna1~name3 "原编码
kna1~name4 "名称4
kna1~aufsd "状态
kna1~sortl "检索项
kna1~stras "地址
kna1~ort01 "店铺城市
kna1~regio "代理商省份和店铺省份
kna1~telf1 "电话
kna1~telf2 "移动电话
kna1~brsch "行业(类型)
kna1~bahns "列车站(店铺面积)
kna1~bran1 "行业代码1
kna1~adrnr "地址
kna1~ktokd "客户帐户组
kna1~begru "权限组
into corresponding fields of table t_tab
from kna1
where kna1~kunnr in s_kunnr
and kna1~name2 in s_name2
and kna1~sortl in s_sortl
and kna1~ort01 in s_ort01
and kna1~regio in s_regio
and kna1~brsch in s_brsch
and kna1~bran1 in s_bran1
and kna1~aufsd = ''
and ktokd in ( select distinct zsd_ktokd~ktokd from zsd_ktokd where zsd_ktokd~programs = 'ZSDR010' and zsd_ktokd~flag = '1' ).
elseif r_rad2 = 'X'."选择查询非活动的
select distinct
kna1~kunnr
kna1~name1
kna1~name2
kna1~name3
kna1~name4
kna1~aufsd
kna1~sortl
kna1~stras
kna1~ort01
kna1~regio
kna1~telf1
kna1~telf2
kna1~brsch
kna1~bahns
kna1~bran1
kna1~adrnr
kna1~ktokd
kna1~begru
into corresponding fields of table t_tab
from kna1
where kna1~kunnr in s_kunnr
and kna1~name2 in s_name2
and kna1~sortl in s_sortl
and kna1~ort01 in s_ort01
and kna1~regio in s_regio
and kna1~brsch in s_brsch
and kna1~bran1 in s_bran1
and kna1~aufsd = '01'
and ktokd in ( select distinct zsd_ktokd~ktokd from zsd_ktokd where zsd_ktokd~programs = 'ZSDR010' and zsd_ktokd~flag = '1' ).
elseif r_rad3 = 'X'."选择查询全部的
select distinct
kna1~kunnr
kna1~name1
kna1~name2
kna1~name3
kna1~name4
kna1~aufsd
kna1~sortl
kna1~stras
kna1~ort01
kna1~regio
kna1~telf1
kna1~telf2
kna1~brsch
kna1~bahns
kna1~bran1
kna1~adrnr
kna1~ktokd
kna1~begru
into corresponding fields of table t_tab
from kna1
where kna1~kunnr in s_kunnr
and kna1~name2 in s_name2
and kna1~sortl in s_sortl
and kna1~ort01 in s_ort01
and kna1~regio in s_regio
and kna1~brsch in s_brsch
and kna1~bran1 in s_bran1
and ktokd in ( select distinct zsd_ktokd~ktokd from zsd_ktokd where zsd_ktokd~programs = 'ZSDR010' and zsd_ktokd~flag = '1' ).
endif.
perform get_dataad. "抓取zbrand_authority 权限组表数据.
loop at t_tab into w_tab.
select single
vkorg
bzirk into (w_tab-vkorg,w_tab-bzirk)
from knvv where kunnr = w_tab-kunnr
and vkorg in s_vkorg
and bzirk in s_bzirk.
read table t_zbrand_authority with key zautgrp = w_tab-begru binary search .
if sy-subrc = 0.
w_tab-zdesp = t_zbrand_authority-zdesp.
endif.
modify t_tab from w_tab.
endloop.
loop at t_tab into w_tab.
select single
bezei into (w_tab-bezei)
from t005u where bland = w_tab-regio
and spras = '1'
and land1 = 'CN'.
modify t_tab from w_tab.
endloop.
loop at t_tab into w_tab.
data:
str5 type string,
str6 type string,
itab1 type table of string,
text3 type string.
text3 = w_tab-homecity.
split text3 at '#' into: str5 str6,
table itab1.
* if str5 = ''.
* w_tab-HOMECITY = str6.
* else.
w_tab-homecity = str5.
* endif.
modify t_tab from w_tab.
endloop.
modify t_tab from w_tab.
append w_tab-adrnr to it_kunnr.
endloop.
delete adjacent duplicates from it_kunnr. "删除重复行2012-07-18 chenmei
endform. "frm_get_dataByLfa1
*&---------------------------------------------------------------------*
*& Form getAdr2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form getadr2.
if it_kunnr[] is initial.
message '没有数据' type 'S' display like 'E'.
return.
endif.
select * from adr2 into table it_adrt for all entries in it_kunnr
where addrnumber = it_kunnr-kunnr "kunnr是it_kunnr内表里面存放客户主数据的字段
and persnumber = ''
and flgdefault = 'X' "x 表示这个值在界面显示的那条记录
and r3_user = '1'. "1是固定电话,3是移动电话,2是第二条或者第三条电话
sort it_adrt by addrnumber.
select * from adr2 into table it_adrp for all entries in it_kunnr
where addrnumber = it_kunnr-kunnr "kunnr是it_kunnr内表里面存放客户主数据的字段
and persnumber = ''
and r3_user = '3'. "1是固定电话,3是移动电话,2是第二条或者第三条电话
sort it_adrp by addrnumber .
clear: w_tab.
loop at t_tab into w_tab.
read table it_adrt with key addrnumber = w_tab-adrnr binary search.
if sy-subrc = 0.
w_tab-telf1 = it_adrt-tel_number.
endif.
read table it_adrp with key addrnumber = w_tab-adrnr binary search.
if sy-subrc = 0.
w_tab-telf2 = it_adrp-tel_number.
endif.
modify t_tab from w_tab.
endloop.
endform. "getAdr2
*&---------------------------------------------------------------------*
*& Form frm_field LV输出列名
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form frm_field.
data tmp_pos type i.
refresh t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'VKORG'.
d_fieldcat-seltext_l = '销售组织'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'KUNNR'.
d_fieldcat-seltext_l = '客户编码'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'NAME1'.
d_fieldcat-seltext_l = '客户名称'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BRSCH'.
d_fieldcat-seltext_l = '类型'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BRTXT'.
d_fieldcat-seltext_l = '类型名称'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BRAN1'.
d_fieldcat-seltext_l = '店铺性质'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'VTEXT'.
d_fieldcat-seltext_l = '性质名称'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'REGIO'.
d_fieldcat-seltext_l = '店铺省份'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BEZEI'.
d_fieldcat-seltext_l = '省份名称'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'ORT01'.
d_fieldcat-seltext_l = '店铺城市'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'NAME2'.
d_fieldcat-seltext_l = '原编码'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'CITY2'.
d_fieldcat-seltext_l = '区域'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'HOMECITY'.
d_fieldcat-seltext_l = '属主'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'HOMECITYS'.
d_fieldcat-seltext_l = '属主名称'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BZIRK'.
d_fieldcat-seltext_l = '销售地区'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BZTXT'.
d_fieldcat-seltext_l = '地区名称'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'REMARK'.
d_fieldcat-seltext_l = '联系人'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BAHNS'.
d_fieldcat-seltext_l = '店铺面积'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'SORTL'.
d_fieldcat-seltext_l = '检索项'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'TELF1'.
d_fieldcat-seltext_l = '电话'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'TELF2'.
d_fieldcat-seltext_l = '移动电话'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'FAX_NUMBER'.
d_fieldcat-seltext_l = '传真'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'STRAS'.
d_fieldcat-seltext_l = '地址'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'BEGRU'.
d_fieldcat-seltext_l = '权限组'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'ZDESP'.
d_fieldcat-seltext_l = '所属AD'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
d_fieldcat-fieldname = 'AUFSD1'.
d_fieldcat-seltext_l = '状态'.
append d_fieldcat to t_fieldcat_alv.
clear d_fieldcat.
endform. "frm_field
*&---------------------------------------------------------------------*
*& Form frm_displaylv_data 生成LV列表窗口
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form frm_displaylv_data.
loop at t_tab into w_tab.
authority-check object 'Z_ZSDBBQX'
id 'BRGRU' field w_tab-begru.
if sy-subrc <> 0.
delete table t_tab from w_tab.
endif.
endloop.
d_layout-colwidth_optimize = 'X'. "设置alv中的字段内容全部显示
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = sy-repid "tmp_repid
it_fieldcat = t_fieldcat_alv
is_layout = d_layout
i_save = 'U'
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'FRM_UCOMM'
tables
t_outtab = t_tab
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.
endform. "frm_displaylv_data
*&---------------------------------------------------------------------*
*& Form FRM_UCOMM
*&---------------------------------------------------------------------*
* 自定义ALV的双击事件
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form frm_ucomm using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case r_ucomm.
when '&IC1'.
check rs_selfield-tabindex > 0.
read table t_tab into w_tab index rs_selfield-tabindex.
set parameter id 'KUN' field w_tab-kunnr. "客户代码
set parameter id 'BUK' field ''. "公司代码
set parameter id 'VKO' field w_tab-vkorg. "销售组织
set parameter id 'VTW' field '00'. "分銷渠道
set parameter id 'SPA' field '00'. "产品组
call transaction 'VD03' and skip first screen.
endcase.
endform. "FRM_UCOMM
*&---------------------------------------------------------------------*
*& Form SET_PF_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->TAB text
*----------------------------------------------------------------------*
form set_pf_status using tab type slis_t_extab.
set pf-status 'PF01'. "123dfdf
endform. "SET_PF_STATUS
*权限分配
*AT SELECTION-SCREEN .
*
*AUTHORITY-CHECK OBJECT 'ZSDBBQX' FOR USER SY-UNAME
* ID 'BZIRK' FIELD S_BZIRK
* ID 'VKORG' FIELD S_VKORG.
*IF SY-SUBRC NE 0.
*
* MESSAGE E002(ZSDMSG) WITH S_BZIRK S_VKORG .
*
*ENDIF.