*&---------------------------------------------------------------------*
*& Report ZRSD0089 *
*& REJECT SCRAP REPORT
*& CREATED BY KENN TANG *
*& ON 2006.05.30 *
*=======================================================================
* Last Modified By: Wei_Zhu
* Last Modified Date: 2007-02-01
* Modifed Description: 1)"CB_NOZERO" CheckBox Choice,
* The records in stock quantity will be
* suppressed .
* 2)batches in XREJ storage location
* not shown in the report
* 3)the bill VW indicator will be marked ‘X’ if
* any batch of an assembly lot is marked for
* bill VW reject.
* Task#1038 request#DEVK921904
* #DEVK921908
* #DEVK921916
* #DEVK921934
*&------------------------------------------------------------
report zrsd0089 no standard page heading
message-id 00
line-size 132. .
*======================================================================
type-pools: slis. " FOR ALV USAGE
*======================================================================
*tables
*-----------------------------------------------------------------------
tables: vbap, mcha, mchb, kna1, ausp, cabn.
*data
*-----------------------------------------------------------------------
data: begin of gt_tab occurs 0,
kunnr like kna1-kunnr, "CUST CODE
werks like mcha-werks, "PLANT
charg like mcha-charg, "BATCH
ersda like mcha-ersda, "BATCH CRT.DATE
matnr like mcha-matnr, "DEVICE
kdmat(30) type c," LIKE VBAP-KDMAT, "LOT NO
qty like mchb-clabs, "QTY
scrap(1) type c, "SCRAP INDICATOR
bill_vw(1) type c, "BILL VW INDICATOR
cuobj_bm like mcha-cuobj_bm, "OBJECT
end of gt_tab.
*======================================================================
* FOR ALV USAGE - START
*======================================================================
data: gt_fieldcat type slis_t_fieldcat_alv, "ALV Field Catalog
ls_fieldcat type slis_fieldcat_alv,
g_layout type slis_layout_alv,
g_title type lvc_title,
g_repid like sy-repid,
* VARIANT LIKE DISVARIANT, "Layout Variant
sort type slis_t_sortinfo_alv, "for subtotal
sort_str type slis_sortinfo_alv,
gt_events type slis_t_event,
gt_top_of_page type slis_t_listheader. "ALV Top-of-page
*======================================================================
* FOR ALV USAGE - END
*======================================================================
*SELECTION-SCREEN
******************************************************
select-options:
s_cust for kna1-kunnr no-extension,
s_lotnum for vbap-kdmat no-extension,
s_ersda for mcha-ersda no-extension,"NO INTERVALS,
s_werks for mcha-werks no-extension.
parameters: cb_zero as checkbox default 'X'.
*&---------------------------------------------------------------------*
*& Event initialization
*&---------------------------------------------------------------------*
initialization.
g_repid = sy-repid.
************************************************************************
* Check screen input
************************************************************************
*AT SELECTION-SCREEN.
*START-OF-SELECTION.
start-of-selection.
perform get_data.
perform fill_data.
perform filter_data.
end-of-selection.
*======================================================================
* FOR ALV USAGE - START
*======================================================================
* Set top-of-page content
perform set_top_of_page.
* Display report
perform build_fieldcat.
perform comment_build using ''
changing gt_top_of_page.
perform eventtab_build changing gt_events[].
*======================================================================
* FOR ALV USAGE - END
*======================================================================
*======================================================================
* FOR ALV USAGE - START
*======================================================================
* DISPLAY TO ALV
g_repid = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_grid_title = g_title
it_fieldcat = gt_fieldcat
* IT_SORT = GT_SORT
i_callback_program = g_repid
is_layout = g_layout
i_save = 'A'
i_callback_top_of_page = 'TOP_OF_PAGE' "Top-of-page display
tables
t_outtab = gt_tab.
*======================================================================
* FOR ALV USAGE - END
*======================================================================
*--------------------------------------------------*
form get_data .
clear gt_tab.
select mcha~matnr mcha~werks
mcha~charg mcha~ersda
mcha~cuobj_bm
into corresponding fields of table gt_tab
* BEGIN DEVK921934
from mcha inner join mchb
on mcha~charg = mchb~charg
* END DEVK921934
where mcha~ersda in s_ersda
* BEGIN DEVK921934
and mchb~lgort <> 'XREJ'
and mchb~ersda in s_ersda
and mcha~werks = mchb~werks
and mcha~matnr = mchb~matnr
* BEGIN DEVK921934
and mcha~werks in s_werks.
endform. " get_data
*&---------------------------------------------------------------------*
*& Form COMMENT_BUILD
*&---------------------------------------------------------------------*
* FOR ALV USAGE
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
form comment_build using p_title
changing lt_top_of_page type slis_t_listheader.
data: ls_line type slis_listheader.
data: ls_rm61r type rm61r,
ls_tmp1(15) type c, ls_tmp2(15) type c.
*
* Initialisieren
clear lt_top_of_page[].
* Zeitstempel ermitteln
* PERFORM get_timestamp CHANGING ls_rm61r-memda
* ls_rm61r-memtm.
* Listenüberschrift: Typ H
clear ls_line.
ls_line-typ = 'H'.
* LS_LINE-KEY: not used for this type
if p_title is initial.
ls_line-info = sy-title.
else.
ls_line-info = p_title.
endif.
append ls_line to lt_top_of_page.
* Kopfinfo: Typ S
clear ls_line.
ls_line-typ = 'S'.
ls_line-key = text-h01.
ls_line-info = sy-repid.
append ls_line to lt_top_of_page.
clear ls_line.
ls_line-typ = 'S'.
ls_line-key = text-h02.
ls_line-info = sy-uname.
append ls_line to lt_top_of_page.
clear ls_line.
write sy-datum to ls_tmp1.
write sy-uzeit to ls_tmp2.
ls_line-typ = 'S'.
ls_line-key = text-h03.
* ls_line-info = sy-datum.
* ls_line-info+10 = sy-uzeit.
concatenate ls_tmp1 ls_tmp2 into ls_line-info separated by space.
append ls_line to lt_top_of_page.
* Aktionsinfo: Typ A
clear ls_line.
ls_line-typ = 'A'.
* LS_LINE-KEY: not used for this type
ls_line-info = text-h04.
write ls_rm61r-memda to ls_line-info+20(10).
ls_line-info+32(3) = text-h05.
ls_line-info+35(5) = ls_rm61r-memtm.
ls_line-info+41(4) = text-h06.
* APPEND ls_line TO lt_top_of_page.
endform. "COMMENT_BUILD
*&---------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&---------------------------------------------------------------------*
* FOR ALV USAGE
*----------------------------------------------------------------------*
* <--P_GT_EVENTS[] text
*----------------------------------------------------------------------*
form eventtab_build changing p_st_events type slis_t_event.
*
call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = p_st_events.
endform. " EVENTTAB_BUILD
*&--------------------------------------------------------------------*
*& Form top_of_page-alv
*&--------------------------------------------------------------------*
* FOR ALV USAGE
*---------------------------------------------------------------------*
form top_of_page.
*
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = gt_top_of_page
i_logo = 'ASAT_LOGO'
* I_END_OF_LIST_GRID =
.
endform. "TOP_OF_PAGE-ALV
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* FOR ALV USAGE
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form build_fieldcat .
g_layout-colwidth_optimize = 'X'.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'KUNNR'.
ls_fieldcat-seltext_l = 'Customer Code'.
ls_fieldcat-no_zero = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'WERKS'.
ls_fieldcat-seltext_l = 'Plant'.
ls_fieldcat-no_zero = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'CHARG'.
ls_fieldcat-seltext_l = 'Batch'.
ls_fieldcat-no_zero = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'ERSDA'.
ls_fieldcat-seltext_l = 'Batch Creation Date'.
ls_fieldcat-no_zero = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-seltext_l = 'Device'.
ls_fieldcat-no_zero = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'KDMAT'.
ls_fieldcat-seltext_l = 'Lot Number'.
* LS_FIELDCAT-NO_ZERO = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'QTY'.
ls_fieldcat-seltext_l = 'Stock Quality'.
* LS_FIELDCAT-NO_ZERO = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'SCRAP'.
ls_fieldcat-seltext_l = 'Scrap Indicator'.
ls_fieldcat-no_zero = 'X'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-tabname = 'GT_TAB'.
ls_fieldcat-fieldname = 'BILL_VW'.
ls_fieldcat-seltext_l = 'Bill VW Indicator'.
ls_fieldcat-no_zero = 'X'.
append ls_fieldcat to gt_fieldcat.
endform. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form GT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* FOR ALV USAGE
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form set_top_of_page .
data: l_line type slis_listheader,
l_lines type i,
l_text1(36) type c,
l_text2(30) type c,
dat(10) type c,
tim(8) type c.
l_text1 = 'ASAT PO STATUS WITH SO STATUS REPORT'.
refresh gt_top_of_page.
dat = sy-datum.
tim = sy-uzeit.
* CONCATENATE S_DATE+6(2) '/' S_DATE+4(2) '/' S_DATE+0(4) INTO DAT.
* CONCATENATE SY-UZEIT+0(2) ':' SY-UZEIT+2(2) ':' SY-UZEIT+4(2) INTO TIM
.
data : mnames like t247 occurs 0 with header line.
data : name(20) type c.
call function 'MONTH_NAMES_GET'
exporting
language = sy-langu
* IMPORTING
* RETURN_CODE =
tables
month_names = mnames
* EXCEPTIONS
* MONTH_NAMES_NOT_FOUND = 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.
* READ TABLE MNAMES WITH KEY MNR = ZPERIODM+4(2).
*
* IF SY-SUBRC = 0.
*
* CONCATENATE MNAMES-LTX ',' ZPERIODM+0(4) INTO NAME.
*
* ENDIF.
*Header
**Program Name
clear l_line.
l_line-typ = 'S'.
l_line-key = 'REPORT DATE :'.
l_line-info = dat.
append l_line to gt_top_of_page.
**REPORT TIME
clear l_line.
l_line-typ = 'S'.
l_line-key = 'REPORT TIME : '.
l_line-info = tim.
append l_line to gt_top_of_page.
*REPORT MONTH
clear l_line.
l_line-typ = 'S'.
l_line-key = 'MONTH : '.
l_line-info = name.
append l_line to gt_top_of_page.
*REPORT TILE
clear l_line.
l_line-typ = 'S'.
l_line-key = 'REPORT TITLE :'.
l_line-info = l_text1.
append l_line to gt_top_of_page.
endform. " GT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form FILL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fill_data .
loop at gt_tab.
perform get_cust_name.
endloop.
endform. " FILL_DATA
*&---------------------------------------------------------------------*
*& Form GET_CUST_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_cust_name .
* GET CUSTOMER NAME
select single ausp~atwrt
into gt_tab-kunnr
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
where ausp~objek = gt_tab-matnr
and cabn~atnam = 'CUSTOMER'
and ausp~atwrt in s_cust.
if sy-subrc = 0.
modify gt_tab..
endif.
endform. " GET_CUST_NAME
*&---------------------------------------------------------------------*
*& Form GET_RJ_QTY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_rj_qty .
data: l_fgqty like mchb-clabs.
loop at gt_tab.
clear: mchb, l_fgqty.
select *
from mchb
where matnr = gt_tab-matnr
and werks = gt_tab-werks
and charg = gt_tab-charg
* DEVK921916 BEGIN
and lgort <> 'XREJ'.
* DEVK921916 BEGIN
add: mchb-clabs to l_fgqty,
mchb-cinsm to l_fgqty,
mchb-cspem to l_fgqty.
endselect.
gt_tab-qty = gt_tab-qty + l_fgqty.
modify gt_tab.
** DEVK921904 begin
* If CB_ZERO = 'X'.
* DELETE GT_TAB WHERE QTY = 0.
* EndIF.
** DEVK921904 end
endloop.
* DEVK921908 begin
if cb_zero = 'X'.
delete gt_tab where qty = 0.
endif.
* DEVK921908 end
endform. " GET_RJ_QTY
*&---------------------------------------------------------------------*
*& Form FILTER_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form filter_data .
delete gt_tab where kunnr eq space.
perform get_batch_class.
perform get_rj_qty.
endform. " FILTER_DATA
*&---------------------------------------------------------------------*
*& Form GET_BATCH_CLASS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_batch_class .
data: l_atwrt type atwrt.
* DEVK921916 BEGIN
* DATA GT_TAB_NEW LIKE STANDARD TABLE OF GT_TAB WITH HEADER LINE.
* DEVK921916 END
* DEVK921934 BEGIN
data: begin of objek_tab occurs 0,
objek_new like ausp-objek,
kdmat_new like vbap-kdmat,
end of objek_tab.
data: begin of s_lotnum_1 occurs 0,
* KDMAT LIKE VBAP-KDMAT,
kdmat like ausp-atwrt,
end of s_lotnum_1.
* DEVK921934 END
loop at gt_tab.
clear: mcha, ausp, cabn, l_atwrt.
* get reject batch only
select single ausp~atwrt
into (l_atwrt)
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
where ausp~objek = gt_tab-cuobj_bm
and cabn~atnam = 'BIN'.
check l_atwrt = 'R'.
* filter assembly lot number
select single ausp~atwrt
into (gt_tab-kdmat)
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
where ausp~objek = gt_tab-cuobj_bm
and ausp~atwrt in s_lotnum
and cabn~atnam = 'ASMLOT'.
* DEVK921934 BEGIN
read table s_lotnum_1 with key kdmat = gt_tab-kdmat.
if sy-subrc <> 0.
s_lotnum_1 = gt_tab-kdmat.
append s_lotnum_1.
endif.
* DEVK921934 END
* SCRAP INDICATOR
select single ausp~atwrt
into (gt_tab-scrap)
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
where ausp~objek = gt_tab-cuobj_bm
and cabn~atnam = 'SCRAP_REJ'.
* BILL VW INDICATOR
select single ausp~atwrt
into (gt_tab-bill_vw)
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
where ausp~objek = gt_tab-cuobj_bm
and cabn~atnam = 'BILL_VW_REJ'.
modify gt_tab.
* DEVK921934 BEGIN
* DEVK921916 BEGIN
* IF GT_TAB-BILL_VW = 'X'.
* APPEND GT_TAB TO GT_TAB_NEW.
* ENDIF.
* DEVK921916 END
clear gt_tab.
endloop.
* DEVK921916 BEGIN
* LOOP AT GT_TAB_NEW.
* LOOP AT GT_TAB WHERE KDMAT = GT_TAB_NEW-KDMAT.
* GT_TAB-SCRAP = 'X'.
* GT_TAB-BILL_VW = 'X'.
* MODIFY GT_TAB.
* CLEAR GT_TAB.
* ENDLOOP.
* ENDLOOP.
* DEVK921916 END
delete gt_tab where kdmat = space.
* DEVK921934 BEGIN
delete s_lotnum_1 where kdmat = space.
select ausp~objek ausp~atwrt
into table objek_tab
* INTO CORRESPONDING FIELDS OF TABLE OBJEK_TAB
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
for all entries in s_lotnum_1
where ausp~atwrt = s_lotnum_1-kdmat
and cabn~atnam = 'ASMLOT'.
loop at objek_tab.
select single ausp~atwrt
into (gt_tab-bill_vw)
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
where ausp~objek = objek_tab-objek_new
and cabn~atnam = 'BILL_VW_REJ'
and ausp~atwrt = 'X'.
if sy-subrc = 0.
* GT_TAB-SCRAP = 'X'.
gt_tab-bill_vw = 'X'.
modify gt_tab transporting bill_vw
where kdmat = objek_tab-kdmat_new.
clear gt_tab.
delete objek_tab where kdmat_new = objek_tab-kdmat_new.
endif.
endloop.
* DEVK921934 END
endform.
" GET_BATCH_CLASS
-----------------------------------1-----------------------------------
* LOOP AT GT_TAB_NEW.
* LOOP AT GT_TAB WHERE KDMAT = GT_TAB_NEW-KDMAT.
* GT_TAB-SCRAP = 'X'.
* GT_TAB-BILL_VW = 'X'.
* MODIFY GT_TAB.
* CLEAR GT_TAB.
* ENDLOOP.
* ENDLOOP.
------> 通常loop 嵌套loop 来对两个internal table 间的数据进行处理
-----------------------------------2-----------------------------------
将modify 放入一个loop 中也可以实现上面的那些功能,如
if sy-subrc = 0.
* GT_TAB-SCRAP = 'X'.
gt_tab-bill_vw = 'X'.
modify gt_tab transporting bill_vw
where kdmat = objek_tab-kdmat_new.
clear gt_tab.
delete objek_tab where kdmat_new = objek_tab-kdmat_new.
endif.
-----------------------------------3-----------------------------------
For all entries in itab 的使用,如:
select ausp~objek ausp~atwrt
into table objek_tab
* INTO CORRESPONDING FIELDS OF TABLE OBJEK_TAB
from ausp
inner join cabn
on ausp~atinn = cabn~atinn
for all entries in s_lotnum_1 “这一句 1
where ausp~atwrt = s_lotnum_1-kdmat ”和这一句2 是单值匹配,加上 1句就可以查列表list 了
and cabn~atnam = 'ASMLOT'.
-----------------------------------3-----------------------------------
Read Table I_tab whit key xx = o_tab-xx 如:
read table s_lotnum_1 with key kdmat = gt_tab-kdmat.
if sy-subrc <> 0.
s_lotnum_1 = gt_tab-kdmat.
append s_lotnum_1.
endif.
-------------------------------4------------------------------------
sy-subrc 一个系统函数
sy-subrc = 0 “ 代表成功
sy-subrc = 4 " 代表失败
转载请注明原文地址: https://ibbs.8miu.com/read-17797.html