可配置BOM組件特性查詢
REPORT zpp_rp026.
TABLES: mara,mast.
TYPE-POOLS: slis.
DATA: fieldcat TYPE lvc_t_fcat,
fieldcat_ln TYPE lvc_s_fcat,
it_sort TYPE lvc_t_sort,
wa_sort TYPE lvc_s_sort,
g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
git_events TYPE slis_t_event. "ALV 事件
DATA : ps_layout TYPE lvc_s_layo.
DATA:BEGIN OF itab OCCURS 0,
objek LIKE inob-objek, "物料
maktx LIKE makt-maktx,
stlnr LIKE mast-stlnr,
idnrk LIKE stpo-idnrk,
posnr LIKE stpo-posnr,
knobj LIKE stpo-knobj,
idktx LIKE makt-maktx,
knnum LIKE cuob-knnum,
adzhl LIKE cuob-adzhl,
atbez LIKE cabnt-atbez, "特性描述
atwtb LIKE cawnt-atwtb, "特性值文本
atinn LIKE cuxref-atinn, "特性
atwrt LIKE cuxref-atwrt, "特性值
knblk LIKE cukn-knblk,
sel(1),
END OF itab.
DATA:itab1 LIKE itab OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF tx_itab OCCURS 0,
knnum LIKE cuob-knnum,
atinn LIKE cuxref-atinn,
atwrt LIKE cuxref-atwrt,
atbez LIKE cabnt-atbez, "特性描述
atwtb LIKE cawnt-atwtb, "特性值文本
END OF tx_itab.
DATA:BEGIN OF tz1 OCCURS 0,
atinn LIKE cabn-atinn, "內部特性
atnam LIKE cabn-atnam, "特徵名稱
atwrt LIKE cawn-atwrt, "特性值
atwtb LIKE cawnt-atwtb, "特性值文本
atbez LIKE cabnt-atbez, "特徵描述
END OF tz1.
DATA:tz2 LIKE tz1 OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
PARAMETERS:p_werks LIKE mast-werks OBLIGATORY DEFAULT 'PS01',
p_stlan LIKE mast-stlan OBLIGATORY DEFAULT '1'.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
*PARAMETERS:p_matnr LIKE mara-matnr OBLIGATORY.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN:COMMENT 1(31) t2.
PARAMETERS:p_tx1 LIKE cawn-atwrt AS LISTBOX VISIBLE LENGTH 18.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN:COMMENT 1(31) t3.
PARAMETERS:p_tx2 LIKE cawn-atwrt AS LISTBOX VISIBLE LENGTH 18.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION.
t1 = '選擇條件'.
t2 = '特性1'.
t3 = '特性2'.
CLEAR:p_tx1,p_tx2.
AT SELECTION-SCREEN OUTPUT.
PERFORM set_data.
START-OF-SELECTION.
PERFORM get_data.
END-OF-SELECTION.
PERFORM write_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data .
SELECT inob~objek mast~stlnr stpo~idnrk
stpo~posnr stpo~knobj cuob~knnum adzhl
INTO CORRESPONDING FIELDS OF TABLE itab1
FROM inob
JOIN mast ON inob~objek = mast~matnr
JOIN stpo ON mast~stlnr = stpo~stlnr
LEFT JOIN cuob ON stpo~knobj = cuob~knobj
WHERE inob~objek in s_matnr
AND mast~werks = p_werks
AND mast~stlan = p_stlan
AND inob~obtab = 'MARA'
AND inob~klart = '300'.
LOOP AT itab1.
SELECT SINGLE cukn~knblk INTO itab1-knblk
FROM cukn
WHERE cukn~knnum = itab1-knnum
AND cukn~adzhl = itab1-adzhl.
MODIFY itab1.
ENDLOOP.
IF itab1[] IS NOT INITIAL.
SELECT cuxref~knnum cuxref~atinn cuxref~atwrt
cabnt~atbez cawnt~atwtb
INTO CORRESPONDING FIELDS OF TABLE tx_itab
FROM cuxref
JOIN cawn ON cawn~atinn = cuxref~atinn
AND cawn~atwrt = cuxref~atwrt
JOIN cawnt ON cawnt~atinn = cawn~atinn
AND cawnt~atzhl = cawn~atzhl
AND cawnt~spras = sy-langu
JOIN cabnt ON cabnt~atinn = cuxref~atinn
AND cabnt~spras = sy-langu
FOR ALL entries IN itab1
WHERE cuxref~knnum = itab1-knnum.
ENDIF.
LOOP AT itab1.
SELECT SINGLE maktx INTO itab1-maktx
FROM makt
WHERE matnr = itab1-objek
AND spras = sy-langu.
SELECT SINGLE maktx INTO itab1-idktx
FROM makt
WHERE matnr = itab1-idnrk
AND spras = sy-langu.
MODIFY itab1.
ENDLOOP.
LOOP AT itab1.
MOVE-CORRESPONDING itab1 TO itab.
itab-knblk = itab-knblk+6.
CONDENSE itab-knblk.
LOOP AT tx_itab WHERE knnum = itab-knnum.
itab-atinn = tx_itab-atinn.
itab-atwrt = tx_itab-atwrt.
itab-atbez = tx_itab-atbez.
itab-atwtb = tx_itab-atwtb.
APPEND itab.
ENDLOOP.
IF sy-subrc NE 0.
APPEND itab.
ENDIF.
ENDLOOP.
SORT itab BY objek posnr.
IF p_tx1 IS NOT INITIAL.
DELETE tz1 WHERE atwrt NE p_tx1.
ENDIF.
IF p_tx2 IS NOT INITIAL.
DELETE tz2 WHERE atwrt NE p_tx2.
ENDIF.
LOOP AT tz1.
LOOP AT itab WHERE atwrt = tz1-atwrt AND atinn = tz1-atinn.
itab-sel = 'X'.
MODIFY itab.
ENDLOOP.
ENDLOOP.
LOOP AT tz2.
LOOP AT itab WHERE atwrt = tz2-atwrt AND atinn = tz2-atinn.
itab-sel = 'X'.
MODIFY itab.
ENDLOOP.
ENDLOOP.
IF p_tx1 IS NOT INITIAL OR p_tx2 IS NOT INITIAL.
DELETE itab WHERE sel NE 'X' AND knobj IS NOT INITIAL.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_data .
CLEAR fieldcat.
REFRESH fieldcat.
DATA : col_pos TYPE i VALUE 1.
ps_layout-zebra = 'X'.
ps_layout-cwidth_opt = 'X'.
*----------------------------------------------------------------------*
*& Rerference
*& 1_col_pos 2_fieldname 4_scrtext_l
*----------------------------------------------------------------------*
PERFORM field USING col_pos 'OBJEK' '物料' 'X'.
PERFORM field USING col_pos 'MAKTX' '物料描述' ''.
PERFORM field USING col_pos 'POSNR' '項目' 'X'.
PERFORM field USING col_pos 'IDNRK' '組件編碼' 'X'.
PERFORM field USING col_pos 'IDKTX' '組件描述' ''.
PERFORM field USING col_pos 'ATINN' '特性' ''.
PERFORM field USING col_pos 'ATBEZ' '特性描述' ''.
PERFORM field USING col_pos 'ATWRT' '特性值' ''.
PERFORM field USING col_pos 'ATWTB' '特性值文本' ''.
PERFORM field USING col_pos 'KNBLK' 'Source Code' ''.
REFRESH it_sort.
CLEAR wa_sort.
wa_sort-spos = '1'.
wa_sort-fieldname = 'OBJEK'.
wa_sort-up = 'X'.
APPEND wa_sort TO it_sort.
CLEAR wa_sort.
wa_sort-spos = '2'.
wa_sort-fieldname = 'POSNR'.
wa_sort-up = 'X'.
APPEND wa_sort TO it_sort.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-cprog
is_layout_lvc = ps_layout
it_fieldcat_lvc = fieldcat
* it_sort_lvc = it_sort
i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = itab
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " WRITE_DATA
*&---------------------------------------------------------------------*
*& Form FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_COL_POS text
* -->P_0191 text
* -->P_0192 text
* -->P_ENDFORM text
*----------------------------------------------------------------------*
FORM field USING p_col_pos " 1
p_fieldname " 2
p_seltext_l
p_zero. " 4.
fieldcat_ln-col_pos = p_col_pos.
fieldcat_ln-fieldname = p_fieldname.
fieldcat_ln-reptext = p_seltext_l.
fieldcat_ln-no_zero = p_zero.
APPEND fieldcat_ln TO fieldcat.
p_col_pos = p_col_pos + 1.
CLEAR: fieldcat_ln.
ENDFORM. " FIELD
*&---------------------------------------------------------------------*
*& Form usercommand
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA:str(2),
line TYPE i.
CASE r_ucomm.
WHEN '&IC1'.
CASE rs_selfield-sel_tab_field.
WHEN '1-OBJEK'.
SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
SET PARAMETER ID 'MXX' FIELD 'C'.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form SET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_data .
TYPE-POOLS: vrm.
DATA:n TYPE i,
list TYPE vrm_values, "list box的值
list1 TYPE vrm_values, "list box的值
value LIKE LINE OF list."list box的結構
t2 = '特性1'.
t3 = '特性2'.
DATA:tx1 LIKE tz1 OCCURS 0 WITH HEADER LINE.
DATA:tx2 LIKE tz1 OCCURS 0 WITH HEADER LINE.
REFRESH:list,list1,tz1,tz2.
IF s_matnr-low IS NOT INITIAL.
SELECT cawn~atinn cawn~atwrt cawnt~atwtb cabnt~atbez
INTO CORRESPONDING FIELDS OF TABLE tx1
FROM inob
JOIN kssk ON kssk~objek = inob~cuobj
AND kssk~klart = '300'
JOIN ksml ON ksml~clint = kssk~clint
AND ksml~adzhl = kssk~adzhl
JOIN cawn ON cawn~atinn = ksml~imerk
AND cawn~adzhl = ksml~adzhl
JOIN cawnt ON cawnt~atinn = cawn~atinn
AND cawnt~atzhl = cawn~atzhl
AND cawnt~spras = '1'
JOIN cabnt ON cabnt~atinn = cawn~atinn
AND cabnt~spras = '1'
WHERE inob~objek = s_matnr-low
AND inob~obtab = 'MARA'
AND inob~klart = '300'.
tx2[] = tx1[].
SORT tx2 BY atinn.
DELETE ADJACENT DUPLICATES FROM tx2 COMPARING atinn.
LOOP AT tx2.
n = sy-tabix.
IF n = 1.
t2 = tx2-atbez.
ELSE.
t3 = tx2-atbez.
ENDIF.
LOOP AT tx1 WHERE atinn = tx2-atinn.
CLEAR value.
value-key = tx1-atwrt.
value-text = tx1-atwtb.
IF n = 1.
APPEND value TO list.
MOVE-CORRESPONDING tx1 TO tz1.
APPEND tz1.
ELSE.
APPEND value TO list1.
MOVE-CORRESPONDING tx1 TO tz2.
APPEND tz2.
ENDIF.
ENDLOOP.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES' "將內表中的數據,插入到下拉列表框中
EXPORTING
id = 'P_TX1'
values = list.
CALL FUNCTION 'VRM_SET_VALUES' "將內表中的數據,插入到下拉列表框中
EXPORTING
id = 'P_TX2'
values = list1.
ENDIF.
ENDFORM. " SET_DATA
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.