Overblog
Edit post Folge diesem Blog Administration + Create my blog
SAPManDoo - SAP Resource

Der vorliegende Blog enthält von mir im Laufe meiner beruflichen Tätigkeit als SAP-Berater zusammengetragene Informationen / Beispiel-Codings zum Themenkreis SAP, speziell FI/CO.

MM-Periodenverschieber für mehrere Buchungskreise/Perioden auf einmal

Veröffentlicht am 17. Februar 2011 von sapmandoo in SAP Reports

Kurztext

Aufrufrahmenprogramm f. MM-Periodenverschieber MMPV

Verwendung

Der vorliegende Report ruft den MM-Periodenverschieber (MMPV) für eine vorgegebene Anzahl von Buchungskreisen und Perioden auf.

Funktionsumfang

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).

Selektion

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

 

image001-Kopie-1.png

 

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

Kommentiere diesen Post