因为SD模块的销售价格分很多维度,有很多的条件类型,每个条件类型又有多个关键字组合,这就导致做价格查询程序的时候非常麻烦,通常是根据需要做多个程序,如果新加或者更改了条件类型/关键字组合就需要改动程序。
这个就很烦。
那么有没有一个程序可以自动列出所有的条件类型和关键字组合并且查询,并且在新加了条件类型或者关键字组合也不需要改动呢?
既然都这么说了,那肯定就是有这个程序咯。
程序界面如下:
功能如下:
1、可以根据权限设置列出所有或者有权限的条件类型
2、选择条件是自适应的,可以根据选择的关键字组合显示选择条件
3、可以一次性展示某个条件类型的所有关键字组合的价格
选择界面需要根据条件动态生成,所以程序分成两个,一个是主程序一个是选择界面程序(ZGETSDPRICEINC)。
分别如下:
*&---------------------------------------------------------------------*
*& Report ZGETSDPRICE
*&
*&---------------------------------------------------------------------*
*& Baitianzhen 2015.08.16
*& 销售价格查询
*&---------------------------------------------------------------------*
REPORT zgetsdprice NO STANDARD PAGE HEADING.
TYPE-POOLS: slis.
TABLES: sscrfields,komg,tvko,dfies,komk,komp,komv,konp.
DATA: fldct TYPE lvc_t_fcat WITH HEADER LINE,
slayt TYPE lvc_s_layo,
title TYPE lvc_title,
varnt LIKE disvariant,
repid LIKE sy-repid,
tabix LIKE sy-tabix.
DATA: BEGIN OF dfaultkey,
srtfd LIKE indx-srtfd,
END OF dfaultkey.
DATA: BEGIN OF it_t682 OCCURS 0,
kschl LIKE t685-kschl,
krech LIKE t685a-krech,
kotab LIKE t681-kotab,
kolnr LIKE t682i-kolnr,
zaehk LIKE t682z-zaehk,
zifna LIKE t682z-zifna,
qustr LIKE t682z-qustr,
qufna LIKE t682z-qufna,
vtext LIKE t685t-vtext,
gstxt LIKE tmc1t-gstxt,
fdlen TYPE i,
END OF it_t682.
DATA: BEGIN OF it_kschl OCCURS 0,
kschl LIKE t685-kschl,
vtext LIKE t685t-vtext,
END OF it_kschl.
DATA: BEGIN OF it_kotab OCCURS 0,
kschl LIKE t685-kschl,
krech LIKE t685a-krech,
kotab LIKE t681-kotab,
gstxt LIKE tmc1t-gstxt,
END OF it_kotab.
DATA: BEGIN OF it_zifna OCCURS 0,
zifna LIKE t682z-zifna,
END OF it_zifna.
DATA: BEGIN OF it_tabs OCCURS 0,
kotab LIKE t681-kotab,
END OF it_tabs.
DATA: BEGIN OF it_lstbox1 OCCURS 0,
key(40) TYPE c,
text(80) TYPE c,
END OF it_lstbox1.
DATA: it_lstbox2 LIKE TABLE OF it_lstbox1 WITH HEADER LINE.
DATA: stable TYPE TABLE OF rsparams WITH HEADER LINE.
DATA: it_komv TYPE TABLE OF komv WITH HEADER LINE,
it_konm TYPE TABLE OF konm WITH HEADER LINE, "等级
wa_konm TYPE konm.
DATA: BEGIN OF it_cdhdr OCCURS 0,
objectid LIKE cdhdr-objectid,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
utime LIKE cdhdr-utime,
END OF it_cdhdr.
DATA: BEGIN OF it_knumh OCCURS 0,
knumh TYPE knumh,
END OF it_knumh.
DATA: BEGIN OF it_makt OCCURS 0,
matnr LIKE makt-matnr,
maktx LIKE makt-maktx,
END OF it_makt.
DATA: hs_makt LIKE HASHED TABLE OF it_makt
WITH UNIQUE KEY matnr WITH HEADER LINE.
DATA: BEGIN OF it_tvkot OCCURS 0,
vkorg LIKE tvkot-vkorg,
vtext LIKE tvkot-vtext,
END OF it_tvkot.
DATA: hs_tvkot LIKE HASHED TABLE OF it_tvkot
WITH UNIQUE KEY vkorg WITH HEADER LINE.
DATA: BEGIN OF it_kna1 OCCURS 0,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
END OF it_kna1.
DATA: hs_kna1 LIKE HASHED TABLE OF it_kna1
WITH UNIQUE KEY kunnr WITH HEADER LINE.
DATA: rf_kotab TYPE REF TO data.
FIELD-SYMBOLS: <fs_kotab> TYPE STANDARD TABLE,
<fs_kowa>,
<fs_fld>.
DATA: rf_out TYPE REF TO data,
it_out_wa TYPE REF TO data.
FIELD-SYMBOLS: <fs_out> TYPE STANDARD TABLE,
<fs_out_wa>.
DATA: flag,
len TYPE i,
knumh TYPE knumh,
tmpstr(60),
whstr TYPE string,
decimals_3(5) VALUE '3 '.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF SCREEN 1001 AS WINDOW .
PARAMETERS: d_kschl TYPE kschl AS LISTBOX VISIBLE LENGTH 18.
PARAMETERS: d_konm AS CHECKBOX .
PARAMETERS: d_cdhdr AS CHECKBOX .
SELECTION-SCREEN END OF SCREEN 1001.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t01.
PARAMETERS: p_kschl TYPE kschl AS LISTBOX VISIBLE LENGTH 18 OBLIGATORY USER-COMMAND ucomm1,
p_kotab TYPE kotab AS LISTBOX VISIBLE LENGTH 40 USER-COMMAND ucomm2.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t02.
INCLUDE zgetsdpriceinc.
SELECT-OPTIONS datbi FOR komg-sdate NO-EXTENSION DEFAULT sy-datum TO sy-datum.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE t03.
PARAMETERS: p_konm AS CHECKBOX DEFAULT 'X'.
PARAMETERS: p_cdhdr AS CHECKBOX .
SELECTION-SCREEN END OF BLOCK b3.
INITIALIZATION.
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
curr_report = sy-repid
TABLES
selection_table = stable
EXCEPTIONS
not_found = 1
no_report = 2
OTHERS = 3.
CONCATENATE 'ZGETSDPRI' sy-uname INTO dfaultkey-srtfd.
IMPORT d_kschl d_konm d_cdhdr FROM DATABASE indx(zz) ID dfaultkey.
p_konm = d_konm.
p_cdhdr = d_cdhdr.
IMPORT it_lstbox1[] it_lstbox2[] it_t682[] it_kotab[] it_kschl[] it_zifna[]
p_kschl p_kotab FROM MEMORY ID 'LISTBOX'.
IF sy-subrc <> 0.
PERFORM get_kotab.
PERFORM fill_listbox USING 'ABC'.
ENDIF.
AT SELECTION-SCREEN OUTPUT.
t01 = '条件类型和关键字组合'.
t02 = '选择条件'.
t03 = '其他选项'.
sscrfields-functxt_01 = '@K8@ 个人设置'.
sscrfields-functxt_02 = '按优先级查询'.
%_d_kschl_%_app_%-text = '条件类型默认值'.
%_d_konm_%_app_%-text = '显示是否存在等级'.
%_d_cdhdr_%_app_%-text = '显示最后修改人'.
%_p_kschl_%_app_%-text = '条件类型'.
%_p_kotab_%_app_%-text = '关键字组合'.
%_p_konm_%_app_%-text = '显示是否存在等级'.
%_p_cdhdr_%_app_%-text = '显示最后修改人'.
%_datbi_%_app_%-text = '日期区间'.
LOOP AT it_zifna.
CONCATENATE '%_' it_zifna-zifna '_%_APP_%-TEXT' INTO tmpstr.
ASSIGN (tmpstr) TO <fs_fld>.
CHECK sy-subrc = 0.
CALL 'C_DD_READ_FIELD'
ID 'TYPE' FIELD 'T'
ID 'TABNAME' FIELD 'KOMG'
ID 'FIELDNAME' FIELD it_zifna-zifna
ID 'LANGUAGE' FIELD sy-langu.
<fs_fld> = dfies-fieldtext.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'D_KSCHL'
values = it_lstbox1[].
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_KSCHL'
values = it_lstbox1[].
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_KOTAB'
values = it_lstbox2[].
LOOP AT SCREEN.
CHECK screen-group1 = 'S'.
CLEAR flag.
LOOP AT it_zifna.
IF screen-name CS it_zifna-zifna .
flag = 'X'.
EXIT.
ENDIF.
ENDLOOP.
IF flag <> 'X'.
screen-active = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN . "PAI
CASE sscrfields-ucomm.
WHEN 'UCOMM1'.
PERFORM fill_listbox USING 'BC'.
WHEN 'UCOMM2'.
PERFORM fill_listbox USING 'C'.
WHEN 'FC01'.
CALL SELECTION-SCREEN 1001 STARTING AT 10 5 .
CHECK sy-subrc = 0 .
EXPORT d_kschl d_konm d_cdhdr TO DATABASE indx(zz) ID dfaultkey.
MESSAGE s000(oo) WITH '维护完成'.
ENDCASE.
START-OF-SELECTION.
PERFORM savelog(zreplog) USING sy-repid '' IF FOUND.
EXPORT it_lstbox1[] it_lstbox2[] it_t682[]
it_kotab[] it_kschl[] it_zifna[]
p_kschl p_kotab TO MEMORY ID 'LISTBOX'.
PERFORM create_itab.
PERFORM getdata.
PERFORM updatelog(zreplog) IF FOUND.
PERFORM outdata.
*&---------------------------------------------------------------------*
*& Form get_kotab
*&---------------------------------------------------------------------*
FORM get_kotab.
SELECT t685~kschl
t685a~krech
t681~kotab
t682i~kolnr
t682z~zaehk
t682z~zifna
t682z~qustr
t682z~qufna
t685t~vtext
tmc1t~gstxt
INTO CORRESPONDING FIELDS OF TABLE it_t682
FROM t682 INNER JOIN t685 ON t682~kvewe = t685~kvewe AND
t682~kappl = t685~kappl AND
t682~kozgf = t685~kozgf
INNER JOIN t685a ON t685~kappl = t685a~kappl AND
t685~kschl = t685a~kschl
INNER JOIN t685t ON t685~kvewe = t685t~kvewe AND
t685~kappl = t685t~kappl AND
t685~kschl = t685t~kschl AND
t685t~spras = sy-langu
INNER JOIN t682i ON t682~kvewe = t682i~kvewe AND
t682~kappl = t682i~kappl AND
t682~kozgf = t682i~kozgf
INNER JOIN t682z ON t682i~kvewe = t682z~kvewe AND
t682i~kappl = t682z~kappl AND
t682i~kozgf = t682z~kozgf AND
t682i~kolnr = t682z~kolnr
INNER JOIN t681 ON t682i~kvewe = t681~kvewe AND
t682i~kotabnr = t681~kotabnr
INNER JOIN tmc1t ON t681~kotab = tmc1t~gstru AND
tmc1t~spras = sy-langu
WHERE t682~kvewe = 'A' AND
t682~kappl = 'V' AND
t682z~qufna <> ''
ORDER BY t685~kschl t682i~kolnr t682z~zaehk.
LOOP AT it_t682.
it_kotab-kschl = it_t682-kschl.
it_kotab-krech = it_t682-krech.
it_kotab-kotab = it_t682-kotab.
it_kotab-gstxt = it_t682-gstxt.
COLLECT it_kotab.
it_kschl-kschl = it_t682-kschl.
it_kschl-vtext = it_t682-vtext.
COLLECT it_kschl.
it_t682-fdlen = strlen( it_t682-zifna ).
MODIFY it_t682.
ENDLOOP.
LOOP AT it_kschl.
AUTHORITY-CHECK OBJECT 'V_KONH_VKS'
ID 'KSCHL' FIELD it_kschl-kschl
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
DELETE it_kschl.
ENDIF.
ENDLOOP.
ENDFORM. "get_kotab
*&---------------------------------------------------------------------*
*& Form fill_listbox
*&---------------------------------------------------------------------*
FORM fill_listbox USING method.
IF method CS 'A'.
CLEAR:p_kschl,it_lstbox1[].
LOOP AT it_kschl.
IF p_kschl = ''.
p_kschl = it_kschl-kschl.
ENDIF.
IF it_kschl-kschl = d_kschl .
p_kschl = it_kschl-kschl.
ENDIF.
it_lstbox1-key = it_kschl-kschl.
it_lstbox1-text = it_kschl-vtext.
APPEND it_lstbox1.
ENDLOOP.
ENDIF.
IF method CS 'B'.
CLEAR:p_kotab, it_lstbox2[].
LOOP AT it_kotab WHERE kschl = p_kschl.
IF p_kotab IS INITIAL.
p_kotab = it_kotab-kotab.
ENDIF.
it_lstbox2-key = it_kotab-kotab.
it_lstbox2-text = it_kotab-gstxt.
APPEND it_lstbox2.
ENDLOOP.
ENDIF.
IF method CS 'C'.
CLEAR it_zifna[].
IF p_kotab = ''.
LOOP AT it_t682 WHERE kschl = p_kschl .
it_zifna-zifna = it_t682-zifna.
COLLECT it_zifna .
ENDLOOP.
ELSE.
LOOP AT it_t682 WHERE kschl = p_kschl AND
kotab = p_kotab.
APPEND it_t682-zifna TO it_zifna.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. "fill_listbox
*&---------------------------------------------------------------------*
*& Form create_itab
*&---------------------------------------------------------------------*
FORM create_itab.
CLEAR:it_zifna[], fldct[],whstr.
IF p_kotab = ''.
LOOP AT it_t682 WHERE kschl = p_kschl .
it_zifna-zifna = it_t682-zifna.
COLLECT it_zifna .
ENDLOOP.
ELSE.
LOOP AT it_t682 WHERE kschl = p_kschl AND
kotab = p_kotab.
APPEND it_t682-zifna TO it_zifna.
ENDLOOP.
ENDIF.
PERFORM fill_fcat USING 'KOTAB' 'T681' 'KOTAB'.
CLEAR flag.
LOOP AT it_zifna.
len = strlen( it_zifna-zifna ).
READ TABLE stable WITH KEY selname = it_zifna-zifna
kind = 'S'.
IF sy-subrc <> 0 AND len < 9.
PERFORM add_fld USING it_zifna-zifna.
flag = 'X'.
ENDIF.
PERFORM fill_fcat USING it_zifna-zifna 'KOMG' it_zifna-zifna.
IF it_zifna-zifna = 'MATNR'.
PERFORM fill_fcat USING : 'MAKTX' 'MAKT' 'MAKTX'.
ENDIF.
IF it_zifna-zifna = 'KUNNR' .
PERFORM fill_fcat USING : 'NAME1' 'KNA1' 'NAME1'.
ENDIF.
IF it_zifna-zifna = 'KUNWE' .
PERFORM fill_fcat USING : 'NAMWE' 'KNA1' 'NAME1'.
ENDIF.
IF it_zifna-zifna = 'KUNAG'.
PERFORM fill_fcat USING : 'NAMAG' 'KNA1' 'NAME1'.
ENDIF.
IF it_zifna-zifna = 'VKORG'.
PERFORM fill_fcat USING : 'VTEXT' 'TVKOT' 'VTEXT'.
ENDIF.
ENDLOOP.
IF flag = 'X'.
MESSAGE s000(oo) WITH '选择界面添加字段,程序已更改,请重新执行程序'.
LEAVE PROGRAM.
ENDIF.
PERFORM fill_fcat USING : 'DATAB' 'KONH' 'DATAB',
'DATBI' 'KONH' 'DATBI'.
IF p_konm = 'X'.
PERFORM fill_fcat USING : 'KSTBM' 'KONM' 'KSTBM',
'KONMS' 'KONP' 'KONMS'.
ENDIF.
PERFORM fill_fcat USING : 'KBETR' 'ZUPLOADPRICET' 'KBETR',
'KONWA' 'KONP' 'KONWA',
'KPEIN' 'KOMV' 'KPEIN',
'KMEIN' 'KOMV' 'KMEIN',
'KNUMH' 'KOMV' 'KNUMH'.
IF p_cdhdr = 'X'.
PERFORM fill_fcat USING : 'USERNAME' 'CDHDR' 'USERNAME',
'UDATE' 'CDHDR' 'UDATE',
'UTIME' 'CDHDR' 'UTIME'.
ENDIF.
IF p_konm = 'X'.
PERFORM fill_fcat USING : 'KOSTKZ' 'RV13A' 'KOSTKZ'.
ENDIF.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = fldct[]
IMPORTING
ep_table = rf_out.
ASSIGN rf_out->* TO <fs_out>.
CREATE DATA it_out_wa LIKE LINE OF <fs_out>.
ASSIGN it_out_wa->* TO <fs_out_wa>.
ENDFORM. "create_itab
*&---------------------------------------------------------------------*
*& Form getdata
*&---------------------------------------------------------------------*
FORM getdata.
DATA: BEGIN OF lw_desc,
vkorg LIKE hs_tvkot-vkorg,
vtext LIKE hs_tvkot-vtext,
matnr LIKE hs_makt-matnr,
maktx LIKE hs_makt-maktx,
kunnr LIKE hs_kna1-kunnr,
name1 LIKE hs_kna1-name1,
kunag LIKE hs_kna1-kunnr,
namag LIKE hs_kna1-name1,
kunwe LIKE hs_kna1-kunnr,
namwe LIKE hs_kna1-name1,
END OF lw_desc.
***权限检查
FIND 'VKORG' IN TABLE it_zifna.
IF sy-subrc = 0.
SELECT * FROM tvko WHERE vkorg IN vkorg.
AUTHORITY-CHECK OBJECT 'V_KONH_VKO'
ID 'VKORG' FIELD tvko-vkorg
ID 'VTWEG' DUMMY
ID 'SPART' DUMMY
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
MESSAGE e000(oo) WITH '无销售组织' tvko-vkorg '的查看权限' .
ENDIF.
ENDSELECT.
ENDIF.
CLEAR it_tabs[].
IF p_kotab = ''.
LOOP AT it_lstbox2.
it_tabs-kotab = it_lstbox2-key.
APPEND it_tabs.
ENDLOOP.
ELSE.
APPEND p_kotab TO it_tabs.
ENDIF.
LOOP AT it_tabs.
CLEAR: whstr,it_knumh[],it_komv[],it_konm[],it_cdhdr[].
CREATE DATA rf_kotab TYPE TABLE OF (it_tabs-kotab).
ASSIGN rf_kotab->* TO <fs_kotab>.
IF datbi[] IS INITIAL.
whstr = `kappl = 'V' AND kschl = p_kschl ` .
ELSE.
whstr = `kappl = 'V' AND kschl = p_kschl AND datbi >= datbi-low AND datab <= datbi-high ` .
ENDIF.
LOOP AT it_t682 WHERE kschl = p_kschl AND
kotab = it_tabs-kotab AND
fdlen < 9.
CONCATENATE whstr 'AND' it_t682-zifna 'IN' it_t682-zifna INTO whstr SEPARATED BY space.
ENDLOOP.
SELECT * INTO TABLE <fs_kotab>
FROM (it_tabs-kotab)
WHERE (whstr).
IF sy-subrc = 0.
LOOP AT <fs_kotab> ASSIGNING <fs_kowa>.
ASSIGN COMPONENT 'KNUMH' OF STRUCTURE <fs_kowa> TO <fs_fld>.
APPEND <fs_fld> TO it_knumh.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
SELECT * FROM konp
FOR ALL ENTRIES IN it_knumh
WHERE knumh = it_knumh-knumh AND
kappl = 'V' AND
kschl = p_kschl AND
loevm_ko = '' .
MOVE-CORRESPONDING konp TO it_komv.
* IF konp-kwaeh = ''.
it_komv-kwaeh = konp-konwa.
* ENDIF.
APPEND it_komv.
ENDSELECT.
SORT it_komv BY knumh.
IF p_konm = 'X'.
CLEAR it_konm[].
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_konm
FROM konm
FOR ALL ENTRIES IN it_knumh
WHERE knumh = it_knumh-knumh .
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE it_konm
FROM konw
FOR ALL ENTRIES IN it_knumh
WHERE knumh = it_knumh-knumh .
SORT it_konm BY knumh kstbm.
ENDIF.
IF p_cdhdr = 'X'.
LOOP AT it_knumh.
it_cdhdr-objectid = it_knumh-knumh.
APPEND it_cdhdr.
ENDLOOP.
SELECT objectid username udate utime INTO TABLE it_cdhdr
FROM cdhdr
FOR ALL ENTRIES IN it_cdhdr
WHERE objectclas = 'COND_A' AND
objectid = it_cdhdr-objectid.
SORT it_cdhdr BY objectid udate DESCENDING utime DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_cdhdr COMPARING objectid.
ENDIF.
LOOP AT <fs_kotab> ASSIGNING <fs_kowa> .
ASSIGN COMPONENT 'KNUMH' OF STRUCTURE <fs_kowa> TO <fs_fld>.
knumh = <fs_fld>.
READ TABLE it_komv WITH KEY knumh = knumh BINARY SEARCH.
IF sy-subrc = 0.
MOVE-CORRESPONDING it_komv TO <fs_out_wa>.
ELSE.
CONTINUE.
ENDIF.
MOVE-CORRESPONDING <fs_kowa> TO <fs_out_wa>.
MOVE-CORRESPONDING <fs_out_wa> TO lw_desc.
READ TABLE it_konm WITH KEY knumh = knumh BINARY SEARCH.
IF sy-subrc = 0.
tabix = sy-tabix.
ASSIGN COMPONENT 'KOSTKZ' OF STRUCTURE <fs_out_wa> TO <fs_fld>.
<fs_fld> = 'X'.
ENDIF.
READ TABLE it_cdhdr WITH KEY objectid = knumh BINARY SEARCH.
IF sy-subrc = 0.
MOVE-CORRESPONDING it_cdhdr TO <fs_out_wa>.
ENDIF.
ASSIGN COMPONENT 'KOTAB' OF STRUCTURE <fs_out_wa> TO <fs_fld>.
<fs_fld> = it_tabs-kotab.
ASSIGN COMPONENT 'KBETR' OF STRUCTURE <fs_out_wa> TO <fs_fld>.
IF it_komv-krech CA 'AHIKJ'. "百分比
WRITE it_komv-kbetr CURRENCY decimals_3 TO <fs_fld> NO-SIGN.
IF it_komv-kbetr < 0.
<fs_fld>(1) = '-'.
CONDENSE <fs_fld> NO-GAPS.
ENDIF.
ASSIGN COMPONENT 'KONWA' OF STRUCTURE <fs_out_wa> TO <fs_fld>.
<fs_fld> = '%'.
ELSE.
WRITE it_komv-kbetr CURRENCY it_komv-kwaeh TO <fs_fld> NO-SIGN NO-GROUPING. "不使用科学计数法
IF it_komv-kbetr < 0.
<fs_fld>(1) = '-'.
CONDENSE <fs_fld> NO-GAPS.
ENDIF.
ASSIGN COMPONENT 'KONWA' OF STRUCTURE <fs_out_wa> TO <fs_fld>.
<fs_fld> = it_komv-kwaeh.
ENDIF.
IF lw_desc-matnr IS NOT INITIAL.
READ TABLE hs_makt TRANSPORTING NO FIELDS WITH TABLE KEY matnr = lw_desc-matnr.
IF sy-subrc <> 0.
hs_makt-matnr = lw_desc-matnr.
INSERT TABLE hs_makt.
ENDIF.
ENDIF.
IF lw_desc-kunnr IS NOT INITIAL.
READ TABLE hs_kna1 TRANSPORTING NO FIELDS WITH TABLE KEY kunnr = lw_desc-kunnr.
IF sy-subrc <> 0.
hs_kna1-kunnr = lw_desc-kunnr.
INSERT TABLE hs_kna1.
ENDIF.
ENDIF.
IF lw_desc-kunag IS NOT INITIAL.
READ TABLE hs_kna1 TRANSPORTING NO FIELDS WITH TABLE KEY kunnr = lw_desc-kunag.
IF sy-subrc <> 0.
hs_kna1-kunnr = lw_desc-kunnr.
INSERT TABLE hs_kna1.
ENDIF.
ENDIF.
IF lw_desc-kunwe IS NOT INITIAL.
READ TABLE hs_kna1 TRANSPORTING NO FIELDS WITH TABLE KEY kunnr = lw_desc-kunwe.
IF sy-subrc <> 0.
hs_kna1-kunnr = lw_desc-kunnr.
INSERT TABLE hs_kna1.
ENDIF.
ENDIF.
LOOP AT it_konm WHERE knumh = knumh.
MOVE-CORRESPONDING it_konm TO <fs_out_wa>.
APPEND <fs_out_wa> TO <fs_out>.
ENDLOOP.
IF sy-subrc <> 0.
APPEND <fs_out_wa> TO <fs_out>.
ENDIF.
CLEAR <fs_out_wa>.
ENDLOOP.
ENDLOOP.
IF <fs_out> IS INITIAL.
MESSAGE s000(oo) WITH '无数据'.
STOP.
ENDIF.
SELECT vkorg vtext INTO TABLE hs_tvkot
FROM tvkot
WHERE spras = sy-langu.
IF hs_makt[] IS NOT INITIAL.
SELECT matnr maktx INTO TABLE hs_makt
FROM makt
FOR ALL ENTRIES IN hs_makt
WHERE matnr = hs_makt-matnr AND
spras = sy-langu.
ENDIF.
IF hs_kna1[] IS NOT INITIAL.
SELECT kunnr name1 INTO TABLE hs_kna1
FROM kna1
FOR ALL ENTRIES IN hs_kna1
WHERE kunnr = hs_kna1-kunnr.
ENDIF.
***描述
LOOP AT <fs_out> INTO <fs_out_wa>.
CLEAR lw_desc.
MOVE-CORRESPONDING <fs_out_wa> TO lw_desc.
READ TABLE hs_tvkot WITH TABLE KEY vkorg = lw_desc-vkorg.
lw_desc-vtext = hs_tvkot-vtext.
READ TABLE hs_makt WITH TABLE KEY matnr = lw_desc-matnr.
lw_desc-maktx = hs_makt-maktx.
READ TABLE hs_kna1 WITH TABLE KEY kunnr = lw_desc-kunnr.
lw_desc-name1 = hs_kna1-name1.
READ TABLE hs_kna1 WITH TABLE KEY kunnr = lw_desc-kunag.
IF sy-subrc = 0.
lw_desc-namag = hs_kna1-name1.
ENDIF.
READ TABLE hs_kna1 WITH TABLE KEY kunnr = lw_desc-kunwe.
IF sy-subrc = 0.
lw_desc-namwe = hs_kna1-name1.
ENDIF.
MOVE-CORRESPONDING lw_desc TO <fs_out_wa>.
MODIFY <fs_out> FROM <fs_out_wa>.
ENDLOOP.
ENDFORM. "getdata
*&---------------------------------------------------------------------*
*& Form outdata
*&---------------------------------------------------------------------*
FORM outdata.
DATA lines(10).
slayt-zebra = 'X'.
slayt-cwidth_opt = 'X'.
repid = sy-repid.
varnt-report = sy-repid.
varnt-handle = p_kotab.
lines = lines( <fs_out> ).
IF p_kotab = ''.
CONCATENATE p_kschl '所有条件表' lines '条' INTO title SEPARATED BY space.
ELSE.
READ TABLE it_kotab WITH KEY kschl = p_kschl kotab = p_kotab .
CONCATENATE it_kotab-kschl it_kotab-gstxt lines '条' INTO title SEPARATED BY space.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
it_fieldcat_lvc = fldct[]
i_save = 'A'
i_grid_title = title
is_variant = varnt
is_layout_lvc = slayt
i_callback_program = repid
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'SET_STATUS'
TABLES
t_outtab = <fs_out>
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "outdata
*&--------------------------------------------------------------------*
*& Form set_status
*&--------------------------------------------------------------------*
FORM set_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD' EXCLUDING rt_extab .
ENDFORM. "set_status
*&---------------------------------------------------------------------*
*& Form fill_fcat
*&---------------------------------------------------------------------*
FORM fill_fcat USING fldname reftab reffld.
fldct-fieldname = fldname.
fldct-ref_table = reftab.
fldct-ref_field = reffld.
IF fldct-fieldname = 'KPEIN' OR fldct-fieldname = 'KSTBM'.
fldct-no_zero = 'X'.
ENDIF.
IF fldct-fieldname = 'KBETR'.
fldct-just = 'R'.
ENDIF.
IF fldct-fieldname = 'KNUMH'.
fldct-no_out = 'X'.
ENDIF.
IF fldct-fieldname = 'KOSTKZ'.
fldct-checkbox = 'X'.
ENDIF.
IF fldct-fieldname = 'KSTBM'.
fldct-qfieldname = 'KONMS'.
ENDIF.
APPEND fldct.
CLEAR fldct.
ENDFORM. "fill_fcat
*&--------------------------------------------------------------------*
*& Form user_command
*&--------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfld TYPE slis_selfield.
READ TABLE <fs_out> INTO <fs_out_wa> INDEX rs_selfld-tabindex.
CASE r_ucomm.
WHEN '&IC1'.
ASSIGN COMPONENT 'KNUMH' OF STRUCTURE <fs_out_wa> TO <fs_fld>.
CALL FUNCTION 'RV_CONDITION_RECORD'
EXPORTING
condition_number = <fs_fld>
item_number = '01'
condition_use = 'A'
check_memory = 'X'.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form add_fld
*&---------------------------------------------------------------------*
FORM add_fld USING fldname.
DATA lt_report TYPE TABLE OF char1024 WITH HEADER LINE.
DATA tmpstr TYPE string.
CALL FUNCTION 'ENQUEUE_ESRDIRE'
EXPORTING
name = 'ZGETSDPRICEINC'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CONCATENATE ` ` fldname ` ` INTO tmpstr.
READ REPORT 'ZGETSDPRICEINC' INTO lt_report.
FIND FIRST OCCURRENCE OF tmpstr IN TABLE lt_report IGNORING CASE.
IF sy-subrc = 0.
RETURN.
ENDIF.
CONCATENATE `SELECT-OPTIONS ` fldname ` FOR KOMG-` fldname ` MODIF ID s.` INTO tmpstr.
APPEND tmpstr TO lt_report.
INSERT REPORT 'ZGETSDPRICEINC' FROM lt_report.
ENDFORM. "add_fld
*&---------------------------------------------------------------------*
*& 包含文件 ZGETSDPRICEINC
*&---------------------------------------------------------------------*
SELECT-OPTIONS VKORG FOR KOMG-VKORG MEMORY ID VKO MODIF ID S.
SELECT-OPTIONS KUNNR FOR KOMG-KUNNR MODIF ID s.
SELECT-OPTIONS KUNWE FOR KOMG-KUNWE MODIF ID s.
SELECT-OPTIONS CHARG FOR KOMG-CHARG MODIF ID s.