Overblog Alle Blogs
Folge diesem Blog Administration + Create my blog
MENU
Werbung
SAPManDoo - SAP Resource
Neueste Posts

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

17. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht 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

Weiterlesen
Werbung

Automatische Generierung von CO-Vorschlagskontierungen (OKB9)

17. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht in #SAP Reports

Kurztext

Einträge f. Transaktion OKB9 generieren

Verwendung

Der Report generiert automatisch CO-Vorschlagskontierungen (OKB9) und stellt die Einträge auf Wunsch in einen Transportauftrag.

Funktionsumfang

Ab einer bestimmten Anzahl von Werken (bzw. Betrieben im IS-Retail) und Kostenarten, gestaltet sich die Pflege von werksabhängigen Vorschlagskontierungen in der Standardtransaktion OKB9 mitunter recht aufwändig, zumindest die 'Erstpflege'. Das vorliegende Programm erzeugt für eine vorgegebene Menge von Kostenarten und Werken automatisch Einträge in den entsprechenden Anwendungstabellen und erzeugt auf Wunsch auch gleich einen Transportauftrag, so dass die so generierten Einträge in die Folgesysteme transportiert werden können. Alternativ können Sie den Report auch in QS- bzw. Produktivsystemen laufen lassen, jedoch ist die Nutzung des Transportanschlusses die empfohlene Vorgehensweise.

Selektion

Objektabgrenzungen

Geben Sie die zu berücksichtigenden Kostenarten, Werke und ggf. Buchungskreise vor, für die Vorschlagskontierungen generiert werden sollen.

Kreuzen Sie bei Bedarf die Option 'Kostenarten aus MM-Kontenfindung'  an. Es werden in diesem Fall alle Kostenarten hinzugelesen, die in der MM-Kontenfindung zum Kontenplan des ausgewählten Kostenrechnungskreises hinterlegt sind.
Tipp: um nur diese MM-Kostenarten zu selektieren, geben Sie einfach im Selektionsparameter Kostenart einen nicht existenten Wert ein (z.B. XXXXXXXXX).

Steuerung der Kostenstellenfindung

Vielfach gilt in Unternehmen: Werk = Bewertungskreis = Kostenstelle. Wählen Sie in diesem Fall die Option 'Kostenstelle = Bewertungskreis' aus.

Andernfalls können Sie eine zweispaltige Umsetztabelle in Excel anlegen, die folgendem Aufbau genügen muss:

Werk 

Kostenstelle

4711

KST4711

4712

6969

...

...

Hinweis: Die Tabelle kann dabei unkonvertiert verwendet werden, d.h. ein vorheriges Abspeichern im .txt-Format o.ä. ist nicht erforderlich.

Sofern die Option 'nur Werke in Excel-Tab. berücksichtigen' ausgewählt wurde, werden nur die Werke betrachtet, zu denen entsprechende Einträge in der vorliegenden Excel-Tabelle hinterlegt sind, ungeachtet der Vorgaben im Bereich 'Objektabgrenzungen'.

Verarbeitungssteuerung

Hier können Sie u.a. festlegen, ob bereits vorhandene Einträge in der OKB9 ggf. überschrieben werden sollen. Verwenden Sie diese Option mit Vorsicht, da hierbei u.U. Tabellenschiefstände erzeugt werden können, insbesondere, wenn z.B. schon Geschäftsbereich- und/oder Profitcenterabhängige Einträge vorhanden sind.

Deaktivieren Sie die Option 'Testlauf', um die generierten Vorschlagskontierungen in die Tabellen zu schreiben. Jedoch sollten Sie zuvor einen Testlauf durchführen, um anhand des Protokolls die korrekte Arbeitsweise des Programms im Sinne der Anforderung zu überprüfen.

Wenn Sie den Transportanschluss nutzen möchten, aktivieren Sie im 'Echtlauf' zudem die Option 'Transportauftrag anlegen'. Sie werden in diesem Fall dazu aufgefordert, einen Customizingauftrag anzulegen bzw. einen bereits vorhandenen Auftrag auszuwählen.

Ausgabe

Die generierten (bzw. im Testlauf: zu generierenden) Einträge werden in übersichtlicher Form aufgelistet. Die Ausgabeliste ist dabei in bestimmten Grenzen konfigurierbar, d.h. es können bspw. Felder aus der Anzeige entfernt oder die Sortierung geändert werden. Zuvor werden etwaig aufgetretene Fehlersituationen in Form eines Fehlerprotokolls ausgegeben.

 

 

Selektionsbild:

image001

 

Texte:

image003.png

 

image005.png

   

Quelltext:

 

*&---------------------------------------------------------------------*
*& Report  YYOKB9
*&
*&---------------------------------------------------------------------*
*& Der Report generiert für eine Menge von Kostenarten und Werken/Betr.
*& Einträge zur automatisierten Kostenstellenfindung (TA OKB9)
*& Details s. Reportdokumentation
*&---------------------------------------------------------------------*

report  yyokb9.

type-pools: slis.

tables: t001w, cskb, tka3a, tka3c, tka02, t001k.
tables: t030.

ranges: gr_mmkoa for cskb-kstar.

data: begin of gt_xl occurs 0,
        werks type t001w-werks,
        kostl type kostl,
      end of gt_xl,

      gt_tka3a type table of tka3a,
      gt_tka3c type table of tka3c,
      gv_dummy,
      gv_message_occured,
      gv_repid type sy-repid value sy-repid.

selection-screen begin of block bl1 with frame title text-bl1.
parameters:     pa_kokrs type cskb-kokrs obligatory memory id cac.
select-options: so_bukrs for tka3a-bukrs.
select-options: so_kstar for cskb-kstar,
                so_katyp for cskb-katyp,
                so_werks for t001w-werks.
selection-screen skip.
parameters:     pa_mmkoa as checkbox default 'X'.
selection-screen end of block bl1.
selection-screen begin of block bl2 with frame title text-bl2.
parameters:
*               Kostenstelle = Bewertungskreis = Werk
                pa_xequa radiobutton group r1 default 'X'
                                     user-command r1,
*               Excel-Umsetztabelle verwenden
                pa_xexcl radiobutton group r1.
selection-screen begin of block bu2 with frame title text-bu2.
parameters:     pa_xhead as checkbox default 'X',
                pa_fnam  like rlgrap-filename.
parameters:     pa_xonly as checkbox default space.
selection-screen end of block bu2.
selection-screen end of block bl2.
selection-screen begin of block bl3 with frame title text-bl3.
parameters:     pa_xovwr as checkbox.
parameters:     pa_test  as checkbox default 'X'
                         user-command t1.
parameters:     pa_xtran as checkbox default ' '.
selection-screen end of block bl3.

* PBO Selection Screen
*&---------------------------------------------------------------------*
at selection-screen output.
*&---------------------------------------------------------------------*
  loop at screen.
    if screen-name = 'PA_XHEAD' or screen-name = 'PA_FNAM' or
       screen-name = 'PA_XONLY'.
      if pa_xexcl = 'X'.
        screen-input = '1'.
      else.
        screen-input = '0'.
      endif.
      modify screen.
    endif.
  endloop.

*&---------------------------------------------------------------------*
at selection-screen on value-request for pa_fnam.
*&---------------------------------------------------------------------*
  perform f4_excelfile.

*
*&---------------------------------------------------------------------*
start-of-selection.
*&---------------------------------------------------------------------*
  perform check_parameters.
  perform init_log.
  if pa_xexcl = 'X'.
    perform upload_table.
  endif.
  if pa_mmkoa = 'X'.
    perform read_mm_costelements.
  endif.

  perform generate_okb9_entries.

  if pa_test is initial.
    perform update_tables.
    if pa_xtran = 'X'.
      perform create_transport.
    endif.
  endif.

  perform generation_log.

*&---------------------------------------------------------------------*
*&      Form  F4_EXCELFILE
*&---------------------------------------------------------------------*
*       Werthilfe Excel-Datei
*----------------------------------------------------------------------*
form f4_excelfile .

  call function 'FAA_FILE_F4'
    exporting
      i_default_extension = 'XLS'
    importing
      e_filename          = pa_fnam
    exceptions
      interface_error     = 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.

endform.                    " F4_EXCELFILE

*&---------------------------------------------------------------------*
*&      Form  CHECK_PARAMETERS
*&---------------------------------------------------------------------*
*       Selektionsparameter auf Plausibilität prüfen
*----------------------------------------------------------------------*
form check_parameters .

  if pa_xexcl = 'X' and pa_fnam is initial.
    message e600(fr) with 'Bitte Namen der Excel-Datei angeben'.
  endif.
  call function 'K_KOKRS_READ'
    exporting
      kokrs           = pa_kokrs
    exceptions
      not_found       = 1
      not_found_gjahr = 2
      others          = 3.
  if sy-subrc <> 0.
    message e600(fr) with 'Kostenrechnungskreis' pa_kokrs 'fehlerhaft'.
  endif.

endform.                    " CHECK_PARAMETERS

*&---------------------------------------------------------------------*
*&      Form  UPLOAD_TABLE
*&---------------------------------------------------------------------*
*       Excel-Umsetztabelle laden
*----------------------------------------------------------------------*
form upload_table .

* Daten in internes SAP-Format konvertieren
  define konvertiere.
    call function 'RS_CONV_EX_2_IN_DTEL'
      exporting
        input_external  = &1
        dtel            = '&2'
      importing
        output_internal = &1.
  end-of-definition.

  data: lt_buf type table of string,
        l_buf type string.

* Upload der Excel-Datei
  call function 'FAA_FILE_UPLOAD_EXCEL'
    exporting
      i_filename           = pa_fnam
    tables
      et_filecontent       = lt_buf
    exceptions
      error_accessing_file = 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.

* Strukturiert ablegen
  loop at lt_buf into l_buf.
    if pa_xhead = 'X'.       "ggf. Überschrift überlesen
      check sy-tabix gt 1.
    endif.
    split l_buf at ',' into gt_xl-werks gt_xl-kostl.
    konvertiere gt_xl-werks werks_d.
    konvertiere gt_xl-kostl kostl.
    append gt_xl.
  endloop.

  sort gt_xl by werks.      "Für BINARY SEARCH

endform.                    " UPLOAD_TABLE

*&---------------------------------------------------------------------*
*&      Form  GENERATE_OKB9_ENTRIES
*&---------------------------------------------------------------------*
*       OKB9-Einträge generieren
*----------------------------------------------------------------------*
form generate_okb9_entries .

* Kostenarten selektieren
  select * from  cskb
         where  kokrs  = pa_kokrs
         and    katyp in so_katyp
         and    datbi ge sy-datum.
    if pa_mmkoa = 'X'.
      if cskb-kstar in gr_mmkoa.
      else.
        check cskb-kstar in so_kstar.
      endif.
    else.
      check cskb-kstar in so_kstar.
    endif.

*   Buchungskreise
    select * from tka02 where kokrs = pa_kokrs.
      check tka02-bukrs in so_bukrs.
      select single * from  tka3a
             where  bukrs  = tka02-bukrs
             and    kstar  = cskb-kstar.
      if sy-subrc = 0.
        perform entry_kstar_exists.
      endif.
      if pa_xovwr = 'X' or sy-subrc ne 0.
        perform generate_tka3a_entry.
      endif.
*     Werk / Bewertungskreis lesen
      select * from t001w where werks in so_werks.
        select single * from t001k where bwkey = t001w-bwkey.
        check sy-subrc = 0.
        check t001k-bukrs = tka02-bukrs.
        if pa_xexcl  = 'X' and pa_xonly = 'X'.
          read table gt_xl with key werks = t001w-werks
               binary search.
          check sy-subrc = 0.
        endif.
        select single * from  tka3c
               where  bukrs  = t001k-bukrs
               and    kstar  = cskb-kstar
               and    bwkey  = t001k-bwkey.
        if sy-subrc = 0.
          perform entry_werks_exists.
        endif.
        if pa_xovwr = 'X' or sy-subrc ne 0.
          perform generate_tka3c_entry.
        endif.
      endselect.
    endselect.
  endselect.

  perform remove_redundant_entries.

endform.                    " GENERATE_OKB9_ENTRIES

*&---------------------------------------------------------------------*
*&      Form  CREATE_TRANSPORT
*&---------------------------------------------------------------------*
*       Zuvor generierte OKB9-Einträge in Transportauftrag aufnehmen
*----------------------------------------------------------------------*
form create_transport .

  data: lit_e071  type tr_objects,
        lwa_e071  like line of lit_e071,
        lit_e071k type tr_keys,
        lwa_e071k like line of lit_e071k.

  data: lv_order  type e070-trkorr,
        lv_task   type e070-trkorr.

* Arbeitstabellen f. Transportanschluss füllen
  clear lwa_e071.
  lwa_e071-pgmid = 'R3TR'.
  lwa_e071-object = 'CDAT'.
  lwa_e071-obj_name = 'V_TKA3'.
  lwa_e071-objfunc = 'K'.
  lwa_e071-as4pos = 1.
  append lwa_e071 to lit_e071.

  loop at gt_tka3a into tka3a.
    clear lwa_e071k.
    lwa_e071k-pgmid        = 'R3TR'.
    lwa_e071k-object       = 'TABU'.
    lwa_e071k-objname      = 'TKA3A'.
    lwa_e071k-as4pos       = 1.
    lwa_e071k-mastertype   = 'CDAT'.
    lwa_e071k-mastername   = 'V_TKA3'.
    lwa_e071k-viewname     = 'V_TKA3A'.
    lwa_e071k-tabkey(3)    = tka3a-mandt.
    lwa_e071k-tabkey+3(4)  = tka3a-bukrs.
    lwa_e071k-tabkey+7(10) = tka3a-kstar.
    lwa_e071k-sortflag     = '2'.
    append lwa_e071k to lit_e071k.
  endloop.

  loop at gt_tka3c into tka3c.
    clear lwa_e071k.
    lwa_e071k-pgmid        = 'R3TR'.
    lwa_e071k-object       = 'TABU'.
    lwa_e071k-objname      = 'TKA3C'.
    lwa_e071k-as4pos       = 1.
    lwa_e071k-mastertype   = 'CDAT'.
    lwa_e071k-mastername   = 'V_TKA3'.
    lwa_e071k-viewname     = 'V_TKA3C'.
    lwa_e071k-tabkey(3)    = tka3c-mandt.
    lwa_e071k-tabkey+3(4)  = tka3c-bukrs.
    lwa_e071k-tabkey+7(10) = tka3c-kstar.
    lwa_e071k-tabkey+17(4) = tka3c-bwkey.
    lwa_e071k-sortflag     = '2'.
    append lwa_e071k to lit_e071k.
  endloop.

* Transportauftrag / Aufgabe anfordern
  call function 'TR_ORDER_CHOICE_CORRECTION'
*   EXPORTING
*     IV_CATEGORY                  = 'CUST'
*     IV_CLI_DEP                   = 'X'
    importing
      ev_order                     = lv_order
      ev_task                      = lv_task
    exceptions
      invalid_category             = 1
      no_correction_selected       = 2
      others                       = 3
            .
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    exit.
  endif.

* Transporteinträge schreiben
  call function 'TR_APPEND_TO_COMM_OBJS_KEYS'
    exporting
*      WI_SIMULATION                        = ' '
*      WI_SUPPRESS_KEY_CHECK                = ' '
      wi_trkorr                            = lv_task
    tables
      wt_e071                              = lit_e071
      wt_e071k                             = lit_e071k
    exceptions
      key_char_in_non_char_field           = 1
      key_check_keysyntax_error            = 2
      key_inttab_table                     = 3
      key_longer_field_but_no_generc       = 4
      key_missing_key_master_fields        = 5
      key_missing_key_tablekey             = 6
      key_non_char_but_no_generic          = 7
      key_no_key_fields                    = 8
      key_string_longer_char_key           = 9
      key_table_has_no_fields              = 10
      key_table_not_activ                  = 11
      key_unallowed_key_function           = 12
      key_unallowed_key_object             = 13
      key_unallowed_key_objname            = 14
      key_unallowed_key_pgmid              = 15
      key_without_header                   = 16
      ob_check_obj_error                   = 17
      ob_devclass_no_exist                 = 18
      ob_empty_key                         = 19
      ob_generic_objectname                = 20
      ob_ill_delivery_transport            = 21
      ob_ill_lock                          = 22
      ob_ill_parts_transport               = 23
      ob_ill_source_system                 = 24
      ob_ill_system_object                 = 25
      ob_ill_target                        = 26
      ob_inttab_table                      = 27
      ob_local_object                      = 28
      ob_locked_by_other                   = 29
      ob_modif_only_in_modif_order         = 30
      ob_name_too_long                     = 31
      ob_no_append_of_corr_entry           = 32
      ob_no_append_of_c_member             = 33
      ob_no_consolidation_transport        = 34
      ob_no_original                       = 35
      ob_no_shared_repairs                 = 36
      ob_no_systemname                     = 37
      ob_no_systemtype                     = 38
      ob_no_tadir                          = 39
      ob_no_tadir_not_lockable             = 40
      ob_privat_object                     = 41
      ob_repair_only_in_repair_order       = 42
      ob_reserved_name                     = 43
      ob_syntax_error                      = 44
      ob_table_has_no_fields               = 45
      ob_table_not_activ                   = 46
      tr_enqueue_failed                    = 47
      tr_errors_in_error_table             = 48
      tr_ill_korrnum                       = 49
      tr_lockmod_failed                    = 50
      tr_lock_enqueue_failed               = 51
      tr_not_owner                         = 52
      tr_no_systemname                     = 53
      tr_no_systemtype                     = 54
      tr_order_not_exist                   = 55
      tr_order_released                    = 56
      tr_order_update_error                = 57
      tr_wrong_order_type                  = 58
      ob_invalid_target_system             = 59
      tr_no_authorization                  = 60
      ob_wrong_tabletyp                    = 61
      ob_wrong_category                    = 62
      ob_system_error                      = 63
      ob_unlocal_objekt_in_local_ord       = 64
      tr_wrong_client                      = 65
      ob_wrong_client                      = 66
      key_wrong_client                     = 67
      others                               = 68
            .
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  else.
    message i600(fr) with
         'Generierte Einträge in Transport'
         lv_order
         'aufgenommen'.
  endif.

endform.                    " CREATE_TRANSPORT

*&---------------------------------------------------------------------*
*&      Form  ENTRY_KSTAR_EXISTS
*&---------------------------------------------------------------------*
*       Eintrag in TKA3A für Kostenart gibt's schon!
*----------------------------------------------------------------------*
form entry_kstar_exists .

  message w600(fr) with
         'Eintrag für Kostenart schon vorhanden:'
          cskb-kstar
          'Buchungskreis'
          tka02-bukrs into gv_dummy.
  perform msg_log.


endform.                    " ENTRY_KSTAR_EXISTS

*&---------------------------------------------------------------------*
*&      Form  GENERATE_TKA3A_ENTRY
*&---------------------------------------------------------------------*
*       Eintrag TKA3A generieren und merken
*----------------------------------------------------------------------*
form generate_tka3a_entry .

  clear tka3a.
  tka3a-mandt = sy-mandt.
  tka3a-bukrs = tka02-bukrs.
  tka3a-kstar = cskb-kstar.
  tka3a-kokrs = pa_kokrs.
  tka3a-regel = '1'.
  append tka3a to gt_tka3a.

endform.                    " GENERATE_TKA3A_ENTRY

*&---------------------------------------------------------------------*
*&      Form  ENTRY_WERKS_EXISTS
*&---------------------------------------------------------------------*
*       Eintrag in TKA3C für Werk x gibts schon
*----------------------------------------------------------------------*
form entry_werks_exists .

  message w600(fr) with
           'Eintrag für Werk'
           t001w-werks
           'schon vorhanden:'
           tka3c-kostl into gv_dummy.
  perform msg_log.

endform.                    " ENTRY_WERKS_EXISTS

*&---------------------------------------------------------------------*
*&      Form  GENERATE_TKA3C_ENTRY
*&---------------------------------------------------------------------*
*       Eintrag TKA3C generieren und merken
*----------------------------------------------------------------------*
form generate_tka3c_entry .

  clear tka3c.
  tka3c-mandt = sy-mandt.
  tka3c-bukrs = tka02-bukrs.
  tka3c-kstar = cskb-kstar.
  tka3c-bwkey = t001w-bwkey.
  tka3c-kokrs = pa_kokrs.

* Werk = Bewertungskreis = Kostenstelle
  if pa_xequa = 'X'.
    call function 'RS_CONV_EX_2_IN_DTEL'
      exporting
        input_external  = t001w-bwkey
        dtel            = 'KOSTL'
      importing
        output_internal = tka3c-kostl.
  else.
* Kostenstelle anhand Excel-Tab. umsetzen
    read table gt_xl with key werks = t001w-bwkey
         binary search.
    if sy-subrc = 0.
      tka3c-kostl = gt_xl-kostl.
    else.
      message e600(fr) with 'Fehler: zu Werk' t001w-bwkey
               'konnte keine KoSt.' 'ermittelt werden'
               into gv_dummy.
      perform msg_log.
      exit.
    endif.
  endif.

* Ermittelte Kostenstelle prüfen
  call function 'RK_KOSTL_READ'
    exporting
      datum                    = sy-datum
      kokrs                    = pa_kokrs
      kostl                    = tka3c-kostl
    exceptions
*     KOSTL_NOT_COMPLETE       = 1
      kostl_not_found          = 2
*     TEXT_NOT_FOUND           = 3
      kokrs_missing            = 4
      others                   = 5.
  if sy-subrc <> 0.
    message e600(fr) with 'Ermittelte Kostenstelle'
                          tka3c-kostl 'ungültig'
                     into gv_dummy.
    perform msg_log.
  else.
    append tka3c to gt_tka3c.
  endif.

endform.                    " GENERATE_TKA3C_ENTRY

*&---------------------------------------------------------------------*
*&      Form  GENERATION_LOG
*&---------------------------------------------------------------------*
*       Generierte Einträge ausgeben
*----------------------------------------------------------------------*
form generation_log .

  data: ls_keyinfo type slis_keyinfo_alv.

  clear ls_keyinfo.
  ls_keyinfo-header01 = ls_keyinfo-item01 = 'BUKRS'.
  ls_keyinfo-header02 = ls_keyinfo-item02 = 'KSTAR'.
  ls_keyinfo-header03 = ls_keyinfo-item03 = 'KOKRS'.

  if gv_message_occured = 'X'.
    call function 'MESSAGES_SHOW'.
  endif.

  call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    exporting
      i_callback_program      = gv_repid
      i_tabname_header        = 'GT_TKA3A'
      i_tabname_item          = 'GT_TKA3C'
      i_structure_name_header = 'TKA3A'
      i_structure_name_item   = 'TKA3C'
      is_keyinfo              = ls_keyinfo
    tables
      t_outtab_header         = gt_tka3a
      t_outtab_item           = gt_tka3c.

endform.                    " GENERATION_LOG

*&---------------------------------------------------------------------*
*&      Form  UPDATE_TABLES
*&---------------------------------------------------------------------*
*       Sichern der generierten Einträge in die Datenbank
*----------------------------------------------------------------------*
form update_tables .

  modify tka3a from table gt_tka3a.
  if sy-subrc ne 0.
    rollback work.
    message a600(fr) with 'Fehler beim Update auf TKA3A'.
  else.
    modify tka3c from table gt_tka3c.
    if sy-subrc ne 0.
      rollback work.
      message a600(fr) with 'Fehler beim Update auf TKA3C'.
    else.
      commit work.
      message i600(fr) with 'Update OKB9 ausgeführt'.
    endif.
  endif.

endform.                    " UPDATE_TABLES
*&---------------------------------------------------------------------*
*&      Form  REMOVE_REDUNDANT_ENTRIES
*&---------------------------------------------------------------------*
*       Wenn keine Einträge in der untergeordneten Tab. TKA3C
*       enthalten sind, ist der korrespondierende, übergeordnete
*       Eintrag in der TKA3A natürlich obsolet
*----------------------------------------------------------------------*
form remove_redundant_entries .

  data: lv_tabix type sy-tabix.

  loop at gt_tka3a into tka3a.
    lv_tabix = sy-tabix.
    read table gt_tka3c into tka3c
                        with key bukrs = tka3a-bukrs
                                 kstar = tka3a-kstar
                                 kokrs = tka3a-kokrs.
    if sy-subrc ne 0.
      delete gt_tka3a index lv_tabix.
    endif.
  endloop.

endform.                    " REMOVE_REDUNDANT_ENTRIES
*&---------------------------------------------------------------------*
*&      Form  INIT_LOG
*&---------------------------------------------------------------------*
*       Message-Handler anfordern und initialisieren
*----------------------------------------------------------------------*
form init_log .

  call function 'MESSAGES_INITIALIZE'.

endform.                    " INIT_LOG

*&---------------------------------------------------------------------*
*&      Form  MSG_LOG
*&---------------------------------------------------------------------*
*       Fehlermeldung ins Log eintragen
*----------------------------------------------------------------------*
form msg_log .

  gv_message_occured = 'X'.

  call function 'MESSAGE_STORE'
    exporting
      arbgb = sy-msgid
      msgty = sy-msgty
      msgv1 = sy-msgv1
      msgv2 = sy-msgv2
      msgv3 = sy-msgv3
      msgv4 = sy-msgv4
      txtnr = sy-msgno.

endform.                    " MSG_LOG

*&---------------------------------------------------------------------*
*&      Form  READ_MM_COSTELEMENTS
*&---------------------------------------------------------------------*
*       Kostenarten aus MM-Kontenfindung lesen
*----------------------------------------------------------------------*
form read_mm_costelements .

  data: lv_ktopl type tka01-ktopl,
        lv_cskb type cskbv.

* Kontenplan des Kostenrechnungskreises besorgen
  select single ktopl from tka01 into lv_ktopl where kokrs = pa_kokrs.
  check sy-subrc = 0 and not lv_ktopl is initial.

* MM-Kofi auslesen
  select * from t030 where ktopl = lv_ktopl.
*   Ist Soll-Konto gültige Kostenart
    call function 'RK_KSTAR_CHECK'
      exporting
        datum             = sy-datum
        kokrs             = pa_kokrs
        kstar             = t030-konts
      importing
        v_cskb            = lv_cskb
      exceptions
        kstar_not_allowed = 1
        kstar_not_found   = 2
        kstar_not_primary = 3
        kokrs_not_valid   = 4
        others            = 5.
*   Wenn ja: hinzufügen
    if sy-subrc = 0 and lv_cskb-katyp = '01'.
      gr_mmkoa-sign = 'I'.
      gr_mmkoa-option = 'EQ'.
      gr_mmkoa-low = t030-konts.
      collect gr_mmkoa.
    endif.
*  Dito f. Haben-Konto
    call function 'RK_KSTAR_CHECK'
      exporting
        datum             = sy-datum
        kokrs             = pa_kokrs
        kstar             = t030-konth
      importing
        v_cskb            = lv_cskb
      exceptions
        kstar_not_allowed = 1
        kstar_not_found   = 2
        kstar_not_primary = 3
        kokrs_not_valid   = 4
        others            = 5.
    if sy-subrc = 0 and lv_cskb-katyp = '01'.
      gr_mmkoa-sign = 'I'.
      gr_mmkoa-option = 'EQ'.
      gr_mmkoa-low = t030-konth.
      collect gr_mmkoa.
    endif.

  endselect.

endform.                    " READ_MM_COSTELEMENTS

Weiterlesen
<< < 1 2 3 4 5 6 7 8