Aufrufrahmenprogramm f. MM-Periodenverschieber MMPV
Der vorliegende Report ruft den MM-Periodenverschieber (MMPV) für eine vorgegebene Anzahl von Buchungskreisen und Perioden auf.
Die zu verschiebenden Perioden werden dabei dynamisch aus dem vorgegebenen, gewünschten Buchungsdatum und der aktuell laufenden MM-Periode des jeweiligen Buchungskreises ermittelt (Tab. MARV).
Die Eingaben des Reports sind dabei weitestgehehd identisch mit denen des Reports RMMMPERI (Transaktion MMPV). Zusätzlich kann der Parameter 'Testlauf' gesetzt werden. Hierbei wird keine Periodenverschiebung vorgenommen, sondern lediglich eine Liste der betreffenden Buchungskreise mit den jeweiligen aktuellen MM-Perioden und der gewünschten Periode ausgegeben.
Selektionsbild
Textelemente:
Selektionstexte:
I_BBUKR Bis Buchungskreis
I_DATUM gewünschtes Buchungsdatum
I_LFGJA gewünschte Periode (Jahr)
I_LFMON gewünschte Periode (Monat)
I_VBUKR Von Buchungskreis
I_XCOMP Prüfen und verschieben
I_XINCO Nur prüfen/nicht versch.
I_XMOVE Verschieben ohne prüfen
I_XNEGQ Negative Mengen in Vorperiode
I_XNEGV Negative Werte in Vorperiode e
PA_TEST Testlauf
Spaltenüberschrift
Bukr Name akt.Per LETZTER VERSCHIEBER gewün.
Jahr MM Benutzer am Periode
Quelltext:
*&---------------------------------------------------------------------*
*& Report YYMMPV
*&
*&---------------------------------------------------------------------*
*& Periodenverschieber MM für mehrere Perioden und Buchungskreise
*& aufrufen
*&---------------------------------------------------------------------*
report yymmpv.
tables: marv, t001.
data: list_tab type table of abaplist. "MMPV-Protokoll
* Tabelle mit Buchungskreisen und zu verschiebenden Perioden
data: begin of buktab occurs 0,
bukrs type bukrs,
lfmon type rm03q-nperi,
lfgja type rm03q-lfgja,
bimon type rm03q-nperi,
bigja type rm03q-lfgja,
end of buktab.
*&---------------------------------------------------------------------*
* S E L E C T I O N _ S C R E E N
*&---------------------------------------------------------------------*
parameters: i_vbukr like rm03q-vbukr obligatory,
i_bbukr like rm03q-bbukr.
selection-screen skip 1.
parameters: i_datum like rm03q-datum obligatory.
selection-screen skip 1.
data: : i_kzinv like rm03q-kzinv value space. "ch zu 4.0
* Ab 3.0F kann der Periodenverschieber ohne Ermittlung der Schiefstände
* oder nur zum ermitteln der Schiefstände ausgeführt werden /ch
selection-screen skip 1.
parameters: i_xcomp like rm03q-xcomp radiobutton group rg1
default 'X',
i_xinco like rm03q-xinco radiobutton group rg1,
i_xmove like rm03q-xmove radiobutton group rg1.
selection-screen skip 1.
parameters: i_xnegq like rm03q-xnegq.
parameters: i_xnegv like rm03q-xnegv.
selection-screen skip 1.
parameters: pa_test as checkbox default 'X'.
*&---------------------------------------------------------------------*
* Initialisierung
perform pruefen_initialisierung.
if pa_test = 'X'. exit. endif.
perform buktab_aufbauen.
* Verschiebung durchführen
loop at buktab.
perform submit_mmpv.
endloop.
*&---------------------------------------------------------------------*
*& Form PRUEFEN_INITIALISIERUNG
*&---------------------------------------------------------------------*
* Buchungskreise prüfen und Verarb.tabellen initialisieren
*----------------------------------------------------------------------*
form pruefen_initialisierung .
data: begin of int_pper occurs 2. "Buchhaltungsperioden
include structure pper.
data: end of int_pper.
* Kein Bis-Bukreis angegeben: dann von = bis
if i_bbukr is initial.
i_bbukr = i_vbukr.
endif.
select * from t001 where bukrs between i_vbukr and i_bbukr.
* Periode aus gewünschtem Buchungsdatum holen
call function 'PROGNOSEPERIODEN_ERMITTELN'
exporting
eanzpr = 1
edatum = i_datum
eperiv = t001-periv
tables
pperx = int_pper
exceptions
t009b_fehlerhaft = 01
t009_nicht_gefunden = 02.
if sy-subrc = 0.
read table int_pper index 1.
move int_pper-prper(4) to buktab-bigja.
move int_pper-prper+4(2) to buktab-bimon.
else.
format color col_negative intensified off.
write: / 'Für Buchungskreis', t001-bukrs,
'konnte keine Periode ermittelt werden'.
endif.
* Laufende Periode (MM) besorgen und pro Buchungskreis
* abspeichern
select single * from marv where bukrs = t001-bukrs.
if sy-subrc = 0.
format color col_normal intensified off.
write: / marv-bukrs,
t001-butxt,
marv-lfgja,
marv-lfmon,
marv-aenam,
marv-laeda,
buktab-bimon,
buktab-bigja,
marv-kzinv.
move-corresponding marv to buktab.
append buktab.
else.
format color col_negative intensified off.
write: / 'Kein MARV-Satz für Buchungskreis', t001-bukrs,
'vorhanden'.
endif.
endselect.
* In Buktab steht jetzt pro Buchungskreis die laufende MM-Periode
* und in Abhängigkeit der Geschäftjahresvariante die gewünschte
* Periode drin.
endform. " PRUEFEN_INITIALISIERUNG
*&---------------------------------------------------------------------*
*& Form BUKTAB_AUFBAUEN
*&---------------------------------------------------------------------*
* Tab. m. Buchungskreisen und zu verschiebenden Perioden aufb.
*----------------------------------------------------------------------*
form buktab_aufbauen .
* lokale Kopie ziehen
data: l_buktab like buktab occurs 0 with header line.
l_buktab[] = buktab[].
refresh buktab.
* BUKTAB um alle zu verschiebenen Perioden erweitern, die zwischen der
* laufenden MM-Periode und der gewünschten Periode liegen
loop at l_buktab.
do.
if l_buktab-lfmon >= l_buktab-bimon and
l_buktab-lfgja >= l_buktab-bigja.
exit.
endif.
add 1 to l_buktab-lfmon.
if l_buktab-lfmon gt 12.
l_buktab-lfmon = 1.
add 1 to l_buktab-lfgja.
endif.
append l_buktab to buktab.
enddo.
endloop.
endform. " BUKTAB_AUFBAUEN
*&---------------------------------------------------------------------*
*& Form submit_mmpv
*&---------------------------------------------------------------------*
* Periodenverschieberreport aufrufen + Protokolle sammeln
*----------------------------------------------------------------------*
form submit_mmpv.
submit rmmmperi and return exporting list to memory
with i_bbukr = buktab-bukrs
" WITH i_datum = i_datum
with i_lfgja = buktab-lfgja
with i_lfmon = buktab-lfmon
with i_vbukr = buktab-bukrs
with i_xcomp = i_xcomp
with i_xinco = i_xinco
with i_xmove = i_xmove
with i_xnegq = i_xnegq
with i_xnegv = i_xnegv.
* Protokoll aus Memory holen
call function 'LIST_FROM_MEMORY'
tables
listobject = list_tab
exceptions
not_found = 1
others = 2.
*Ausgabe MMPV-Protokoll
if sy-subrc = 0.
call function 'WRITE_LIST'
tables
listobject = list_tab.
endif.
endform. "submit_mmpv