1.定义检所帮助SE11
2.出口程序ZKJ_MM_F4SERHLP
TYPE-POOLS shlp.
TYPES:
BEGIN OF gtt_zkp090t,
WERKS TYPE zkp090t-WERKS,
MATNR TYPE zkp090t-MATNR,
FELD1 TYPE zkp090t-FELD1,
FELD2 TYPE zkp090t-FELD2,
FELD3 TYPE zkp090t-FELD3,
MAKTG TYPE MAKT-MAKTG,
SPRAS TYPE MAKT-SPRAS,
END OF gtt_zkp090t.
DATA: gdt_zkp090t TYPE TABLE OF gtt_zkp090t,
gds_zkp090t TYPE gtt_zkp090t,
wa_selopt TYPE ddshselopt,
wa_fielddescr TYPE dfies.
DATA:
rc TYPE i,
v_tabix LIKE sy-tabix.
DATA:
GDT_MAKT TYPE STANDARD TABLE OF MAKT WITH HEADER LINE,
GDT_MAKT_RANGE TYPE STANDARD TABLE OF MAKT WITH HEADER LINE,
GDT_ZKP110T_1 TYPE STANDARD TABLE OF ZKP110T WITH HEADER LINE
.
RANGES: S_WERKS FOR kna1-WERKS,
S_FELD1 FOR zkp090t-FELD1,
S_FELD2 FOR zkp090t-FELD2,
S_FELD3 FOR zkp090t-FELD3,
S_MATNR FOR zkp090t-MATNR,
S_MAKTG FOR MAKT-MAKTG,
S_SPRAS FOR MAKT-SPRAS.
FUNCTION ZKJ_MM_F4SERHLP.
*"----------------------------------------------------------------------
*"*"ローカルインタフェース:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
* EXIT immediately, if you do not want to handle this step
CASE callcontrol-step.
WHEN 'SELECT'.
* Change column header texts appearing on the search help hit list
LOOP AT shlp-fielddescr INTO wa_fielddescr."输出制造表头
v_tabix = sy-tabix.
CASE wa_fielddescr-fieldname.
WHEN 'WERKS'.
wa_fielddescr-fieldtext = 'プラント'.
wa_fielddescr-reptext = 'プラント'.
wa_fielddescr-scrtext_s = 'プラント'.
wa_fielddescr-scrtext_m = 'プラント'.
wa_fielddescr-scrtext_l = 'プラント'.
MODIFY shlp-fielddescr FROM wa_fielddescr
INDEX v_tabix TRANSPORTING fieldtext reptext scrtext_s
scrtext_m scrtext_l.
WHEN 'FELD1'.
wa_fielddescr-reptext = '親図'.
wa_fielddescr-fieldtext = '親図'.
wa_fielddescr-scrtext_s = '親図'.
wa_fielddescr-scrtext_m = '親図'.
wa_fielddescr-scrtext_l = '親図'.
MODIFY shlp-fielddescr FROM wa_fielddescr
INDEX v_tabix TRANSPORTING fieldtext reptext scrtext_s
scrtext_m scrtext_l.
WHEN 'FELD2'.
wa_fielddescr-fieldtext = '加工図1'.
wa_fielddescr-reptext = '加工図1'.
wa_fielddescr-scrtext_s = '加工図1'.
wa_fielddescr-scrtext_m = '加工図1'.
wa_fielddescr-scrtext_l = '加工図1'.
MODIFY shlp-fielddescr FROM wa_fielddescr
INDEX v_tabix TRANSPORTING fieldtext reptext scrtext_s
scrtext_m scrtext_l.
WHEN 'FELD3'.
wa_fielddescr-fieldtext = '加工図2'.
wa_fielddescr-reptext = '加工図2'.
wa_fielddescr-scrtext_s = '加工図2'.
wa_fielddescr-scrtext_m = '加工図2'.
wa_fielddescr-scrtext_l = '加工図2'.
MODIFY shlp-fielddescr FROM wa_fielddescr
INDEX v_tabix TRANSPORTING fieldtext reptext scrtext_s
scrtext_m scrtext_l.
WHEN 'MATNR'.
wa_fielddescr-fieldtext = '品目コード'.
wa_fielddescr-reptext = '品目コード'.
wa_fielddescr-scrtext_s = '品目コード'.
wa_fielddescr-scrtext_m = '品目コード'.
wa_fielddescr-scrtext_l = '品目コード'.
MODIFY shlp-fielddescr FROM wa_fielddescr
INDEX v_tabix TRANSPORTING fieldtext reptext scrtext_s
scrtext_m scrtext_l.
WHEN 'MAKTG'.
wa_fielddescr-fieldtext = '品目テキスト'.
wa_fielddescr-reptext = '品目テキスト'.
wa_fielddescr-scrtext_s = '品目テキスト'.
wa_fielddescr-scrtext_m = '品目テキスト'.
wa_fielddescr-scrtext_l = '品目テキスト'.
MODIFY shlp-fielddescr FROM wa_fielddescr
INDEX v_tabix TRANSPORTING fieldtext reptext scrtext_s
scrtext_m scrtext_l.
WHEN 'SPRAS'.
wa_fielddescr-fieldtext = '言語キー'.
wa_fielddescr-reptext = '言語キー'.
wa_fielddescr-scrtext_s = '言語キー'.
wa_fielddescr-scrtext_m = '言語キー'.
wa_fielddescr-scrtext_l = '言語キー'.
MODIFY shlp-fielddescr FROM wa_fielddescr
INDEX v_tabix TRANSPORTING fieldtext reptext scrtext_s
scrtext_m scrtext_l.
ENDCASE.
ENDLOOP.
* Select the Bill to party customer based on the select options
REFRESH S_FELD1.
REFRESH S_FELD2.
REFRESH S_FELD3.
REFRESH S_MATNR.
REFRESH S_MAKTG.
REFRESH S_SPRAS.
LOOP AT shlp-selopt INTO wa_selopt."构造选择屏幕RANGE
* Build a Range for the 5 selection options of the search help
CASE wa_selopt-shlpfield.
WHEN 'WERKS'.
S_WERKS-sign = wa_selopt-sign.
S_WERKS-option = wa_selopt-option.
S_WERKS-low = wa_selopt-low.
S_WERKS-high = wa_selopt-high.
APPEND S_WERKS.
CLEAR S_WERKS.
WHEN 'MATNR'.
S_MATNR-sign = wa_selopt-sign.
S_MATNR-option = wa_selopt-option.
S_MATNR-low = wa_selopt-low.
S_MATNR-high = wa_selopt-high.
APPEND S_MATNR.
CLEAR S_MATNR.
WHEN 'FELD1'.
S_FELD1-sign = wa_selopt-sign.
S_FELD1-option = wa_selopt-option.
S_FELD1-low = wa_selopt-low.
S_FELD1-high = wa_selopt-high.
APPEND S_FELD1.
CLEAR S_FELD1.
WHEN 'FELD2'.
S_FELD2-sign = wa_selopt-sign.
S_FELD2-option = wa_selopt-option.
S_FELD2-low = wa_selopt-low.
S_FELD2-high = wa_selopt-high.
APPEND S_FELD2.
CLEAR S_FELD2.
WHEN 'FELD3'.
S_FELD3-sign = wa_selopt-sign.
S_FELD3-option = wa_selopt-option.
S_FELD3-low = wa_selopt-low.
S_FELD3-high = wa_selopt-high.
APPEND S_FELD3.
CLEAR S_FELD3.
WHEN 'MATNR'.
S_MATNR-sign = wa_selopt-sign.
S_MATNR-option = wa_selopt-option.
S_MATNR-low = wa_selopt-low.
S_MATNR-high = wa_selopt-high.
APPEND S_MATNR.
CLEAR S_MATNR.
WHEN 'MAKTG'.
S_MAKTG-sign = wa_selopt-sign.
S_MAKTG-option = wa_selopt-option.
S_MAKTG-low = wa_selopt-low.
S_MAKTG-high = wa_selopt-high.
APPEND S_MAKTG.
CLEAR S_MAKTG.
WHEN 'SPRAS'.
S_SPRAS-sign = wa_selopt-sign.
S_SPRAS-option = wa_selopt-option.
S_SPRAS-low = wa_selopt-low.
S_SPRAS-high = wa_selopt-high.
APPEND S_SPRAS.
CLEAR S_SPRAS.
ENDCASE.
ENDLOOP.
* Retrieve data from KNVP table for the above selected ranges
* Doing query to retrieve data for the search help
IF SY-UNAME = 'HAND04'.
"BREAK-POINT.
ENDIF.
"取数逻辑
IF S_MAKTG[] IS NOT INITIAL.
SELECT * FROM MAKT INTO CORRESPONDING FIELDS OF TABLE GDT_MAKT_RANGE
WHERE MATNR IN S_MATNR
AND SPRAS IN S_SPRAS
AND MAKTG IN S_MAKTG
.
IF GDT_MAKT_RANGE[] IS NOT INITIAL.
SELECT * FROM ZKP090T INTO CORRESPONDING FIELDS OF TABLE gdt_zkp090t UP TO CALLCONTROL-MAXRECORDS ROWS
FOR ALL ENTRIES IN GDT_MAKT_RANGE
WHERE WERKS IN S_WERKS
AND MATNR = GDT_MAKT_RANGE-MATNR
AND MATNR IN S_MATNR
AND FELD1 IN S_FELD1
AND FELD2 IN S_FELD2
AND FELD3 IN S_FELD3.
ENDIF.
ELSE.
SELECT * FROM ZKP090T INTO CORRESPONDING FIELDS OF TABLE gdt_zkp090t UP TO CALLCONTROL-MAXRECORDS ROWS
WHERE WERKS IN S_WERKS
AND MATNR IN S_MATNR
AND FELD1 IN S_FELD1
AND FELD2 IN S_FELD2
AND FELD3 IN S_FELD3.
ENDIF.
CHECK sy-subrc = 0.
IF gdt_zkp090t IS NOT INITIAL.
SELECT * FROM MAKT INTO CORRESPONDING FIELDS OF TABLE GDT_MAKT
FOR ALL ENTRIES IN gdt_zkp090t
WHERE MATNR = gdt_zkp090t-MATNR
AND SPRAS IN S_SPRAS
AND MAKTG IN S_MAKTG
.
SELECT * FROM ZKP110T INTO CORRESPONDING FIELDS OF TABLE GDT_ZKP110T_1
FOR ALL ENTRIES IN gdt_zkp090t
WHERE FELD1 = gdt_zkp090t-FELD1
OR FELD1 = gdt_zkp090t-FELD2
OR FELD1 = gdt_zkp090t-FELD3
.
LOOP AT gdt_zkp090t INTO gds_zkp090t.
READ TABLE GDT_MAKT WITH KEY MATNR = gds_zkp090t-MATNR.
IF SY-subrc NE 0.
"DELETE gdt_zkp090t.
ELSE.
gds_zkp090t-MAKTG = GDT_MAKT-MAKTG.
gds_zkp090t-SPRAS = GDT_MAKT-SPRAS.
MODIFY gdt_zkp090t FROM gds_zkp090t.
ENDIF.
ENDLOOP.
LOOP AT gdt_zkp090t INTO gds_zkp090t.
CLEAR GDT_ZKP110T_1.
READ TABLE GDT_ZKP110T_1 WITH KEY FELD1 = gdS_zkp090t-FELD1.
IF gdS_zkp090t-FELD1 IS NOT INITIAL.
IF GDT_ZKP110T_1 IS NOT INITIAL.
CONCATENATE GDT_ZKP110T_1-FELD5 gdS_zkp090t-FELD1 ':' GDT_ZKP110T_1-FELD2 INTO gdS_zkp090t-FELD1.
ELSE.
gdS_zkp090t-FELD1 = gdS_zkp090t-FELD1.
ENDIF.
ENDIF.
CLEAR GDT_ZKP110T_1.
READ TABLE GDT_ZKP110T_1 WITH KEY FELD1 = gdS_zkp090t-FELD2.
IF gdS_zkp090t-FELD2 IS NOT INITIAL.
IF GDT_ZKP110T_1 IS NOT INITIAL.
CONCATENATE GDT_ZKP110T_1-FELD5 gdS_zkp090t-FELD2 ':' GDT_ZKP110T_1-FELD2 INTO gdS_zkp090t-FELD2.
ELSE.
gdS_zkp090t-FELD2 = gdS_zkp090t-FELD2.
ENDIF.
ENDIF.
CLEAR GDT_ZKP110T_1.
READ TABLE GDT_ZKP110T_1 WITH KEY FELD1 = gdS_zkp090t-FELD3.
IF gdS_zkp090t-FELD3 IS NOT INITIAL.
IF GDT_ZKP110T_1 IS NOT INITIAL.
CONCATENATE GDT_ZKP110T_1-FELD5 gdS_zkp090t-FELD3 ':' GDT_ZKP110T_1-FELD2 INTO gdS_zkp090t-FELD3.
ELSE.
gdS_zkp090t-FELD3 = gdS_zkp090t-FELD3.
ENDIF.
ENDIF.
MODIFY gdt_zkp090t FROM gds_zkp090t.
ENDLOOP.
ENDIF.
* Move all the selected records to Record_Tab
REFRESH record_tab.
LOOP AT gdt_zkp090t INTO gdS_zkp090t.
v_tabix = sy-tabix.
MOVE gdS_zkp090t TO record_tab-string.
APPEND record_tab.
CLEAR record_tab.
ENDLOOP.
callcontrol-step = 'DISP'.
EXIT.
WHEN 'PRESEL1'.
WHEN 'DISP'.
WHEN OTHERS.
ENDCASE.
ENDFUNCTION.