*&---------------------------------------------------------------------*
*& Report Z_BOM_REV *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT Z_BOM_REV LINE-SIZE 200 .
TYPES : BEGIN OF ty_mat,
matnr_s TYPE matnr,
maktx_s TYPE maktx,
matnr TYPE matnr,
andat TYPE andat,
maktx TYPE maktx,
vwalt TYPE stalt,
END OF ty_mat.
TYPES:BEGIN OF ty_matnr,
matnr TYPE matnr,
END OF ty_matnr.
DATA ms TYPE TABLE OF ty_matnr WITH HEADER LINE.
DATA it_mat TYPE TABLE OF ty_mat WITH HEADER LINE.
DATA: itab TYPE TABLE OF stpov WITH HEADER LINE ,
equi TYPE TABLE OF cscequi,
knd TYPE TABLE OF cscknd,
mat TYPE TABLE OF cscmat,
std TYPE TABLE OF cscstd,
tpl TYPE TABLE OF csctpl.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE t1.
PARAMETERS:
p_werks TYPE werks OBLIGATORY,
p_stlan TYPE stlan OBLIGATORY.
SELECT-OPTIONS s_matnr FOR it_mat-matnr NO INTERVALS ."obligatory.
SELECTION-SCREEN END OF BLOCK bl1 .
INITIALIZATION.
t1 = '查询'.
AT SELECTION-SCREEN.
IF s_matnr IS INITIAL.
MESSAGE '物料号码是必输!' TYPE 'E'.
ENDIF.
START-OF-SELECTION.
SELECT matnr FROM marc INTO TABLE ms WHERE matnr IN s_matnr AND werks = p_werks.
WRITE:/ ' 源物料号 ' ,' 源物料描述 ', ' 顶层物料号 ' ,' 顶层物料描述 ', ' 创建日期 ', '可选BOM号'.
LOOP AT ms.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = ms-matnr
IMPORTING
output = ms-matnr.
MODIFY ms.
PERFORM gettops USING ms-matnr '' '' .
PERFORM disp.
WRITE /.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form gettops
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->MATNR text
* -->ANDAT text
* -->VWALT text
*----------------------------------------------------------------------*
FORM gettops USING matnr andat vwalt.
DATA intab TYPE TABLE OF stpov WITH HEADER LINE .
DATA count TYPE i.
intab[] = itab[].
LOCAL itab.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = sy-datum
datuv = sy-datum
matnr = matnr
stlan = ''
werks = p_werks
mclmt = '00000000'
mnstl = ''
mxstl = ''
stltp = ''
newsi = ''
TABLES
wultb = intab
equicat = equi
kndcat = knd
matcat = mat
stdcat = std
tplcat = tpl
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
cx_sy_dyn_call_illegal_type = 6
OTHERS.
IF sy-subrc = 0.
LOOP AT intab WHERE matnr <> matnr AND stlan = p_stlan.
count = count + 1.
ENDLOOP.
* IF intab-matnr <> matnr.
* PERFORM gettops USING intab-matnr intab-andat intab-vwalt .
*
* ENDIF.
* ENDLOOP.
IF count = 0.
it_mat-matnr = matnr.
it_mat-andat = andat.
it_mat-vwalt = vwalt.
it_mat-matnr_s = ms-matnr.
APPEND it_mat.
ELSE.
LOOP AT intab WHERE matnr <> matnr AND stlan = p_stlan.
PERFORM gettops USING intab-matnr intab-andat intab-vwalt .
ENDLOOP.
ENDIF.
ELSE.
it_mat-matnr = matnr.
it_mat-andat = andat.
it_mat-vwalt = vwalt.
it_mat-matnr_s = ms-matnr.
APPEND it_mat.
ENDIF.
ENDFORM. "gettops
*&---------------------------------------------------------------------*
*& Form DISP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM disp.
* WRITE:/ matnr ,andat, vwalt.
SORT it_mat BY matnr andat vwalt.
DELETE ADJACENT DUPLICATES FROM it_mat.
LOOP AT it_mat.
SELECT SINGLE maktx INTO it_mat-maktx
FROM makt
WHERE matnr = it_mat-matnr AND spras = '1'.
SELECT SINGLE maktx INTO it_mat-maktx_s
FROM makt
WHERE matnr = it_mat-matnr_s AND spras = '1'.
* write: / it_mat-matnr under '物料号',it_mat-maktx under '物料描述',IT_MAT-ANDAT UNDER '创建日期' ,IT_MAT-VWALT UNDER '可选BOM号'.
* WRITE:/ ' 源物料号 ' ,' 源物料描述 ', ' 顶层物料号 ' ,' 顶层物料描述 ', ' 创建日期 ', '可选BOM号'.
WRITE: / it_mat-matnr_s,it_mat-maktx_s UNDER ' 源物料描述 ', it_mat-matnr UNDER ' 顶层物料号 ',it_mat-maktx UNDER ' 顶层物料描述 ',it_mat-andat UNDER ' 创建日期 ' ,it_mat-vwalt UNDER
'可选BOM号' .
ENDLOOP.
CLEAR it_mat.
REFRESH it_mat.
ENDFORM. "DISP
*& Report Z_BOM_REV *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT Z_BOM_REV LINE-SIZE 200 .
TYPES : BEGIN OF ty_mat,
matnr_s TYPE matnr,
maktx_s TYPE maktx,
matnr TYPE matnr,
andat TYPE andat,
maktx TYPE maktx,
vwalt TYPE stalt,
END OF ty_mat.
TYPES:BEGIN OF ty_matnr,
matnr TYPE matnr,
END OF ty_matnr.
DATA ms TYPE TABLE OF ty_matnr WITH HEADER LINE.
DATA it_mat TYPE TABLE OF ty_mat WITH HEADER LINE.
DATA: itab TYPE TABLE OF stpov WITH HEADER LINE ,
equi TYPE TABLE OF cscequi,
knd TYPE TABLE OF cscknd,
mat TYPE TABLE OF cscmat,
std TYPE TABLE OF cscstd,
tpl TYPE TABLE OF csctpl.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE t1.
PARAMETERS:
p_werks TYPE werks OBLIGATORY,
p_stlan TYPE stlan OBLIGATORY.
SELECT-OPTIONS s_matnr FOR it_mat-matnr NO INTERVALS ."obligatory.
SELECTION-SCREEN END OF BLOCK bl1 .
INITIALIZATION.
t1 = '查询'.
AT SELECTION-SCREEN.
IF s_matnr IS INITIAL.
MESSAGE '物料号码是必输!' TYPE 'E'.
ENDIF.
START-OF-SELECTION.
SELECT matnr FROM marc INTO TABLE ms WHERE matnr IN s_matnr AND werks = p_werks.
WRITE:/ ' 源物料号 ' ,' 源物料描述 ', ' 顶层物料号 ' ,' 顶层物料描述 ', ' 创建日期 ', '可选BOM号'.
LOOP AT ms.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = ms-matnr
IMPORTING
output = ms-matnr.
MODIFY ms.
PERFORM gettops USING ms-matnr '' '' .
PERFORM disp.
WRITE /.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form gettops
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->MATNR text
* -->ANDAT text
* -->VWALT text
*----------------------------------------------------------------------*
FORM gettops USING matnr andat vwalt.
DATA intab TYPE TABLE OF stpov WITH HEADER LINE .
DATA count TYPE i.
intab[] = itab[].
LOCAL itab.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = sy-datum
datuv = sy-datum
matnr = matnr
stlan = ''
werks = p_werks
mclmt = '00000000'
mnstl = ''
mxstl = ''
stltp = ''
newsi = ''
TABLES
wultb = intab
equicat = equi
kndcat = knd
matcat = mat
stdcat = std
tplcat = tpl
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
cx_sy_dyn_call_illegal_type = 6
OTHERS.
IF sy-subrc = 0.
LOOP AT intab WHERE matnr <> matnr AND stlan = p_stlan.
count = count + 1.
ENDLOOP.
* IF intab-matnr <> matnr.
* PERFORM gettops USING intab-matnr intab-andat intab-vwalt .
*
* ENDIF.
* ENDLOOP.
IF count = 0.
it_mat-matnr = matnr.
it_mat-andat = andat.
it_mat-vwalt = vwalt.
it_mat-matnr_s = ms-matnr.
APPEND it_mat.
ELSE.
LOOP AT intab WHERE matnr <> matnr AND stlan = p_stlan.
PERFORM gettops USING intab-matnr intab-andat intab-vwalt .
ENDLOOP.
ENDIF.
ELSE.
it_mat-matnr = matnr.
it_mat-andat = andat.
it_mat-vwalt = vwalt.
it_mat-matnr_s = ms-matnr.
APPEND it_mat.
ENDIF.
ENDFORM. "gettops
*&---------------------------------------------------------------------*
*& Form DISP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM disp.
* WRITE:/ matnr ,andat, vwalt.
SORT it_mat BY matnr andat vwalt.
DELETE ADJACENT DUPLICATES FROM it_mat.
LOOP AT it_mat.
SELECT SINGLE maktx INTO it_mat-maktx
FROM makt
WHERE matnr = it_mat-matnr AND spras = '1'.
SELECT SINGLE maktx INTO it_mat-maktx_s
FROM makt
WHERE matnr = it_mat-matnr_s AND spras = '1'.
* write: / it_mat-matnr under '物料号',it_mat-maktx under '物料描述',IT_MAT-ANDAT UNDER '创建日期' ,IT_MAT-VWALT UNDER '可选BOM号'.
* WRITE:/ ' 源物料号 ' ,' 源物料描述 ', ' 顶层物料号 ' ,' 顶层物料描述 ', ' 创建日期 ', '可选BOM号'.
WRITE: / it_mat-matnr_s,it_mat-maktx_s UNDER ' 源物料描述 ', it_mat-matnr UNDER ' 顶层物料号 ',it_mat-maktx UNDER ' 顶层物料描述 ',it_mat-andat UNDER ' 创建日期 ' ,it_mat-vwalt UNDER
'可选BOM号' .
ENDLOOP.
CLEAR it_mat.
REFRESH it_mat.
ENDFORM. "DISP