Sie sind auf Seite 1von 7

REPORT ZSUMANPRO2.

TABLES:vbak,vbap,cdpos,tvko,tvkoV, TVAK,kna1,tvag.
type-pools: slis.
*creating the fieldcatalog
data : it_fcat type slis_t_fieldcat_alv .
*CREATING THE INTERNAL TABLE IT_VBAK
DATA:BEGIN OF IT_VBAK OCCURS 2,
VBELN
VDATU
AEDAT
KUNNR

LIKE
LIKE
LIKE
LIKE

VBAK-VBELN,
VBAK-VDATU,
VBAK-AEDAT,
VBAK-KUNNR,

END OF IT_VBAK.
*CREATING THE INTERNAL TABLE IT_VBAP
DATA:BEGIN OF IT_VBAP OCCURS 3,
vbeln like vbap-vbeln,
POSNR LIKE VBAP-POSNR,
MATNR LIKE VBAP-MATNR,
KDMAT LIKE VBAP-KDMAT,
PRCTR LIKE VBAP-PRCTR,
ABGRU LIKE VBAP-ABGRU,
KWMENG LIKE VBAP-KWMENG,
END OF IT_VBAP.
*creating the WORK AREA g_R_soinfo
data : begin of g_T_soinfo OCCURS 2,
VBELN
VDATU
AEDAT
KUNNR

LIKE
LIKE
LIKE
LIKE

VBAK-VBELN,
VBAK-VDATU,
VBAK-AEDAT,
VBAK-KUNNR,

POSNR LIKE VBAP-POSNR,


MATNR LIKE VBAP-MATNR,
KDMAT LIKE VBAP-KDMAT,
PRCTR LIKE VBAP-PRCTR,
ABGRU LIKE VBAP-ABGRU,
KWMENG LIKE VBAP-KWMENG,
end of g_T_soinfo.

*creating the internal table g_t_vakpa


data: begin of g_t_vakpa occurs 2 ,
vbeln like vakpa-vbeln,
end of g_t_vakpa.

*CREATING THE INTERNAL TABLE G_T_VBKD


DATA : BEGIN OF G_T_VBKD OCCURS 3,
VBELN like vbkd-VBELN,
POSNR like vbkd-POSNR,
BSTKD like vbkd-BSTKD,
END OF G_T_VBKD.

*CREATING THE INTERNAL TABLE IT_CDPOS


DATA : BEGIN OF G_T_CDPOS OCCURS 2 ,
OBJECTID like cdpos-OBJECTID,
VALUE_NEW like CDPOS-VALUE_NEW,
VALUE_OLD LIKE CDPOS-VALUE_OLD,
END OF G_T_CDPOS.

data G_r_CDPOS like table of G_t_CDPOS with header line.


* creating the internal table it_final
data : begin of G_T_FINAL occurs 3,
VBELN LIKE VBAK-VBELN,
POSNR LIKE VBAP-POSNR,
KUNNR LIKE VBAK-KUNNR,
BSTKD LIKE VBKD-BSTKD,
MATNR LIKE VBAP-MATNR,
KDMAT LIKE VBAP-KDMAT,
PRCTR LIKE VBAP-PRCTR,
ABGRU LIKE VBAP-ABGRU,
KWMENG LIKE VBAP-KWMENG,
VDATU LIKE VBAK-VDATU,
HISTORY1 LIKE CDPOS-VALUE_OLD,
HISTORY2 LIKE CDPOS-VALUE_OLD,
HISTORY3 LIKE CDPOS-VALUE_OLD,

end of G_T_FINAL.

*select-options
SELECT-OPTIONS
SELECT-OPTIONS
SELECT-OPTIONS
SELECT-OPTIONS
SELECT-OPTIONS
SELECT-OPTIONS

S_VKORG
S_VTWEG
S_AUART
S_AUDAT
S_KUNNR
S_ABGRU

*start-of-selection
start-of-selection.
perform get_vakpa.

FOR
FOR
FOR
FOR
FOR
FOR

TVKO-VKORG.
tvkoV-vtweg.
TVAK-AUART.
VBAK-AUDAT .
KNA1-KUNNR .
TVAG-ABGRU .

perform
perform
perform
perform
perform
perform

get_vbak.
get_vbap.
g_t_soinfo.
g_t_vbkd.
get_chage_dates.
final_table.

*&---------------------------------------------------------------------*
*&
Form get_vakpa
*&---------------------------------------------------------------------*
FORM get_vakpa .
select vbeln from vakpa into table g_t_vakpa where kunde in s_kunnr and
vkorg in s_vkorg and
vtweg in s_vtweg and
audat in s_audat and
kunnr in s_kunnr.

ENDFORM.
" get_vakpa
*&---------------------------------------------------------------------*
*&
Form get_vbak
*&---------------------------------------------------------------------*
FORM get_vbak.
select VBELN
VDATU
AEDAT
KUNNR from vbak into corresponding fields of table it_vbak for
all
entries in g_t_vakpa where vbeln = g_t_vakpa-vbeln and
audat in s_audat and vkorg in s_vkorg and vtweg in s_vtweg
and auart in s_auart and kunnr in s_kunnr ." and abgru in s_abgru.

ENDFORM.
" get_vbak
*&---------------------------------------------------------------------*
*&
Form get_vbap
*&---------------------------------------------------------------------*
FORM get_vbap .
select vbeln
POSNR
MATNR
KDMAT
PRCTR
ABGRU
KWMENG from vbap into corresponding fields of table it_vbap for

all
entries in it_vbak where vbeln = it_vbak-vbeln .

ENDFORM.

" get_vbap

*&---------------------------------------------------------------------*
*&
Form g_t_soinfo
*&---------------------------------------------------------------------*
FORM g_t_soinfo .
loop at it_vbap.
read table it_vbak with key vbeln = it_vbap-vbeln .
if sy-subrc = 0.
g_t_soinfo-VBELN
g_t_soinfo-VDATU
g_t_soinfo-AEDAT
g_t_soinfo-KUNNR

=
=
=
=

it_vbak-vbeln.
it_vbak-vdatu.
it_vbak-aedat.
it_vbak-kunnr.

endif.
g_t_soinfo-MATNR = it_vbap-MATNR.
G_T_SOINFO-POSNR = IT_VBAP-POSNR.
g_t_soinfo-KDMAT = it_vbap-kDMAT.
g_t_soinfo-PRCTR = it_vbap-PRCTR.
g_t_soinfo-ABGRU = it_vbap-ABGRU.
g_t_soinfo-KWMENG = IT_VBAP-KWMENG.
append g_t_soinfo.
clear g_t_soinfo.
endloop.

eNDFORM.

" g_t_soinfo

*&---------------------------------------------------------------------*
*&
Form g_t_vbkd
*&---------------------------------------------------------------------*
FORM g_t_vbkd .
IF G_T_SOINFO[] IS NOT INITIAL.
select VBELN
POSNR
BSTKD FROM VBKD INTO CORRESPONDING FIELDS OF TABLE G_T_VBKD
FOR ALL ENTRIES IN g_t_soinfo
WHERE VBELN = G_T_SOINFO-VBELN.

ENDIF.

ENDFORM.

" g_t_vbkd

*&---------------------------------------------------------------------*
*&
Form get_chage_docs
*&---------------------------------------------------------------------*
FORM get_chage_dates .
SELECT OBJECTID
VALUE_NEW
VALUE_OLD
FROM CDPOS
INTO TABLE g_t_cdpos
WHERE OBJECTCLAS = 'VERKBELEG'
AND TABNAME = 'VBAK'
AND FNAME = 'VDATU'.
LOOP AT g_t_soinfo.
IF g_t_soinfo-aedat <> '00000000'.
READ TABLE g_t_cdpos WITH KEY OBJECTID = g_t_soinfo-vbeln.
g_r_cdpos-objectid = g_t_cdpos-objectid.
g_r_cdpos-value_new = g_t_cdpos-value_new.
g_r_cdpos-value_old = g_t_cdpos-value_old.
APPEND g_r_cdpos.
CLEAR g_r_cdpos.
endif.
ENDLOOP.

ENDFORM.
" get_chage_dates
*&---------------------------------------------------------------------*
*&
Form final_table
*&---------------------------------------------------------------------*
FORM final_table .

IF g_r_CDPOS[] IS NOT INITIAL.


sort g_r_cdpos by value_old descending.
loop at g_t_soinfo.
*IF g_t_soinfo-aedat <> '00000000'.
g_t_final-vbeln = g_t_soinfo-vbeln.

g_t_final-posnr = g_t_soinfo-posnr.
g_t_final-kunnr = g_t_soinfo-kunnr.

*read the single record from internal table g_t_vbkd


read table g_t_vbkd with key vbeln = g_t_soinfo-vbeln
posnr = g_t_soinfo-posnr.
if sy-subrc = 0.
g_t_final-bstkd = g_t_vbkd-bstkd.
ENDIF.
g_t_final-matnr = g_t_soinfo-matnr.
g_t_final-kdmat = g_t_soinfo-kdmat.
g_t_final-prctr = g_t_soinfo-prctr.
g_t_final-abgru = g_t_soinfo-abgru.
g_t_final-kwmeng = g_t_soinfo-kwmeng.
g_t_final-vdatu = g_t_soinfo-vdatu.
*getting records from internal table g_t_cdpos
loop at g_r_cdpos WHERE OBJECTID = g_t_soinfo-vbeln.
if sy-tabix = 1.
g_t_final-history1 = g_r_cdpos-value_old.
elseif sy-tabix = 2.
g_t_final-history2 = g_r_cdpos-value_old.
elseif sy-tabix = 3.
g_t_final-history3 = g_r_cdpos-value_old.
else.
exit.
endif.
clear g_r_cdpos.
endloop. "g_r_cdpos
append g_t_final.
clear g_t_final.
clear g_t_soinfo.
*endif.
endloop. "g_r_soinfo
sort g_t_final by vbeln posnr kunnr .
PERFORM DISPLAY_final.
ELSE.
WRITE : / 'NO RECORDS WERE CHANGED'.
ENDIF.
ENDFORM.

" final_table

*&---------------------------------------------------------------------*
*&
Form display_final
*&---------------------------------------------------------------------*
FORM display_final .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME
= SY-REPID
I_INTERNAL_TABNAME
= 'G_T_FINAL'
I_INCLNAME
= SY-REPID
CHANGING
CT_FIELDCAT
= IT_FCAT
EXCEPTIONS
INCONSISTENT_INTERFACE
= 1
PROGRAM_ERROR
= 2
OTHERS
= 3
.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM
= sy-repid
IT_FIELDCAT
= IT_FCAT
TABLES
T_OUTTAB
= g_t_final
EXCEPTIONS
PROGRAM_ERROR
= 1
OTHERS
= 2
.
ENDFORM.
" display_final

Das könnte Ihnen auch gefallen