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

Archtitektur der RW-Schnittstelle

23. März 2011 , Geschrieben von sapmandoo Veröffentlicht in #FI

 

Sofern ein warenwirtschaftlicher Prozess Niederschlag in den SAP-Rechnungswesenmodulen findet, erfolgt die Integration mithilfe des RW-Interfaces. Im technischen Kern besteht die RW-Schnittstelle aus folgenden Bestandteilen:

 

  • Systemtabelle TRWPR
  • Interne Übergabestrukturen und -tabellen ACCHD, ACCIT, ACCTX, …
  • Funktionsbaustein AC_DOCUMENT_CREATE

 

RWInterface

Schematische Darstellung der RW-Schnittstelle

 

Im Rahmen der Verbuchung der warenwirtschaftlichen Belege werden die Strukturen bzw. Tabellen ACCHD, ACCIT etc. aufgebaut und in einem übergeordneten Hauptspeicherbereich abgelegt. Das RW-Interface in Form des Funktionsbausteins AC_DOCUMENT_CREATE ‚loopt’ über die Tabelle TRWPR und ruft nacheinander die dort zum jeweiligen Rechnungswesenmodul hinterlegten Verbuchungsbausteine auf. Diese bedienen sich der zuvor im Memory abgelegten ACC*-Strukturen und generieren daraus ihre jeweiligen Belege.

 

Hinweis: Im Rahmen der Verbuchung werden im SAP-Standard die ACC*-Tabellen persistent abgespeichert (DB-Tabellen ACCTHD, ACCTIT usw.). Diese können je nach Durchsatz in der RW-Schnittstelle sehr schnell und umfangreich anwachsen. Diese Ursprungsbeleginformationen werden für den Fall gesichert, dass im Nachgang neue Rechnungswesenmodule aktiviert werden und eine Nachbuchung der Belege erfolgen muss. Detaillierte Informationen hierzu finden sich im Beratungshinweis 48009. Hierin ist auch eine Möglichkeit aufgeführt, die Fortschreibung der genannten Tabellen generell zu unterbinden bzw. die Tabelleninhalte zu archivieren, falls das Wachstum der Tabellen performancekritsche Ausmaße annimmt.

Weiterlesen
Werbung

Belegverdichtung

1. März 2011 , Geschrieben von sapmandoo Veröffentlicht in #FI

 

Das Design der RW-Schnittstelle ist im Standard so, dass pro Position im Ursprungsbeleg (z.B. Faktura oder Artikelbeleg) jeweils ein Buchungssatz im FI erzeugt wird. Dies resultiert daraus, dass im FI-Beleg eine Vielzahl der Informationen aus dem Ursprungsbeleg übernommen wird (bspw. die Artikelnummer aus den zugrunde liegenden Artikelbelegen). Bei der Buchung von Belegen über die RW-Schnittstelle (aus SD, MM oder anderen Applikationen) entstehen somit im FI-Beleg Positionen, die in allen oder fast allen Feldern identisch sind. Dies kann auch eine Ursache für die Fehlermeldung F5/727 ('Maximale Anzahl von Positionen im FI erreicht') sein, die dann erscheint, wenn die maximale Anzahl von 999 Positionen[1] im FI-Beleg erreicht wird.

 

Beispiel:

 

Preisänderung (Abschrift)

Artikelbeleg (vereinfacht)

 

FI-Beleg (vereinfacht)

Pos.     Artikel   Betrieb  Preis (alt)  Preis (neu)

 

Pos.     S/H      Konto               Betrag

001       4711     1000     1,--           0,50

 

001       S          Aufw.XYZ          0,50

002       4712     1000     2,--           1,--

 

002       H          Bestand            0,50

 

 

003       S          Aufw.XYZ          1,--

 

 

004       H          Bestand            1,--

Belegfortschreibung im FI ohne Belegverdichtung

 

Über die Funktion Belegverdichtung im SAP kann das System angewiesen werden, bestimmte Feldinhalte eben nicht aus dem Ursprungsbeleg in den FI-Beleg zu übernehmen und damit eine Zusammenfassung von Belegpositionen in der Finanzbuchhaltung zu ermöglichen. Wenn also üblicherweise die Artikelnummer aus dem FI-Beleg entfernt wird, können die im obigen Beispiel vier Belegpositionen zu zweien verdichtet werden:

 

Artikelbeleg (vereinfacht)

 

FI-Beleg (vereinfacht)

Pos.     Artikel   Betrieb  Preis (alt)  Preis (neu)

 

Pos.     S/H      Konto               Betrag

001       4711     1000     1,--           0,50

 

001       S          Aufw.XYZ          1,50

001       4712     1000     2,--           1,--

 

002       H          Bestand            1,50

Belegfortschreibung im FI mit Belegverdichtung über Artikelnummer

 

Zwar geht damit die Information ‚Artikel’ im FI-Beleg verloren, jedoch kann diese aus dem zugrunde liegenden Artikelbeleg einfach besorgt werden. Auf die gleiche Weise kann man auch mit anderen Feldern im Beleg verfahren, z. B. ‚Menge’.

 

Customizing

Über die Transaktion OBCY werden pro Referenzvorgang[2] die Felder definiert, die nicht in den FI-Beleg übernommen werden. Die relevanten Referenzvorgänge, d.h. diejenigen, die das meiste Einsparungspotenzial an Belegzeilen beinhalten, sind:

 

MKPF   Artikelbelege

RMRP  Belege aus der log. Rechnungsprüfung

VBRK   Faktura

 

Um bspw. die Übernahme der Artikelnummer beim Referenzvorgang MKPF zu unterbinden, muss das entsprechende Feld im FI-Beleg (Tabelle BSEG) spezifiziert werden:

 

Referenzvorgang MKPF                          

Bezeichnung     Artikelbeleg                                                                                                

 

  Tabellenname          Feldname                             

  BSEG                  MATNR      

 

Customizing Belegverdichtung (Transaktion OBCY)

 

Im SAP-Hinweis 36353 sind häufig verwendete Einstellungen für die oben genannten Referenzvorgänge enthalten:

 

Applikation       

AWTYP  

Tabelle

Feldname

SD                

VBRK  

BSEG    

MATNR

Fakturierung      

 

 

MEINS

 

 

 

MENGE

 

 

 

PAOBJNR

 

 

 

POSN2

 

 

 

VBEL2

 

 

 

WERKS

MM                

MKPF  

BSEG    

BPMNG

Bestandsführung   

 

 

BPRME

 

 

 

ERFME

 

 

 

ERFMG

 

 

 

MATNR

 

 

 

MEINS

 

 

 

MENGE

 

 

 

PAOBJNR

 

 

 

POSN2

 

 

 

WERKS

 

 

 

BWTAR

MM                

RMRP  

BSEG    

BPMNG

Logistik-         

 

 

BPRME

Rechnungsprüfung  

 

 

ERFME

 

 

 

ERFMG

 

 

 

MATNR

 

 

 

MEINS

 

 

 

MENGE

 

 

 

PAOBJNR

 

 

 

WERKS

 Empfohlene Einstellungen zur Belegverdichtung gem. SAP-Hinweis 36353

 

Sonderfall Verdichtung von FI-Belegen mit Bestellbezug

Im SAP-Standard kann über die Felder Bestellnummer (EBELN) und Bestellposition (EBELP) NICHT verdichtet werden. Sie werden sowohl bei dem Wareneingang mit Bezug auf die Bestellung (MB01) als auch bei der Rechnungsprüfung im FI-Beleg mitkontiert und verhindern hier die Verdichtung des FI-Belegs. Dies ermöglicht, das WE/RE-Verrechnungskonto auf der Ebene der Bestellposition auszugleichen. Dadurch kann es jedoch bei umfangreichen Wareneingangsbuchungen bzw. Rechnungseingängen zu Problemen, d.h. zur Überschreitung der maximal möglichen Anzahl von Belegpositionen (999) kommen. Im SAP-Hinweis 77161 ist eine Möglichkeit aufgezeigt, wie diese Art von Belegen wenigstens über die Belegposition (EBELP) verdichtet werden können. In neueren Releases können FI-Belege, die bspw. aus Wareneingangsbuchungen herrühren, automatisch gesplittet werden, wenn der Ursprungsbeleg zu groß ist.

 

Simulation/Analyse

Mithilfe des Analyseprogramms RSUMSIFI kann die Belegverdichtung vor Aktivierung simuliert werden, um bspw. zu evaluieren, ob sich die Einrichtung der Belegverdichtung ‚lohnt’. Details hierzu finden sich im Hinweis 310837. Gewisse ABAP-Kenntnisse vorausgesetzt, eignet sich der Report zudem als Analysetool für Fragestellungen wie: ‚warum wurde der Beleg xxx trotz aktiver Belegverdichtung nicht komprimiert?’. Setzen Sie hierzu einfach einen Break-Point in der Routine ‚COMPRESS_BSEG’ und vergleichen Sie nach Durchlauf im Debugger die Tabellen t_bseg und t_bseg_compr. Sie können hier leicht erkennen, welche nicht-initialen Beleginhalte die Verdichtung verhindern.

 

Besonderheiten

Verdichtung von FI-Belgen aus internen Fakturen (Szenario ‚CC-Nachschub’)

Beim genannten Szenario reichen die im Hinweis 36353 genannten Felder zum Vorgang VBRK (s.o.) nicht aus, um die FI-Belege aus den internen Fakturen zu verdichten, da hierbei die Bestellnummer und-position der zugrunde liegenden UB in die FI-Belegpositionen übertragen werden. Diese verhindern eine Verdichtung des Beleges im vorgenannten Sinne. In diesem Fall müssen zum Vorgang VBRK in leichter Abwandlung des Hinweises 77161 zusätzlich die Felder BSEG-EBELN und BSEG-EBELP aufgenommen werden. Dies ist ohne weiteres möglich, da bei der Verbuchung der Faktura das WE/RE-Konto nicht berührt wird und somit die Einschränkungen des Hinweises 77161 nicht greifen.

 

Einsatz der Ergebnis- und Marktsegmentrechnung (CO-PA)

Bei aktivem CO-PA ist unter bestimmten Umständen eine Belegverdichtung über Materialbelege (Referenzvorgang MKPF) nicht möglich. Dies ist z.B. dann der Fall, wenn Abschriften oder Inventurdifferenzen ins CO-PA durchgebucht (man spricht auch von ‚…ins Ergebnis abgerechnet’) werden sollen. Der CO-PA-Beleg wird mit Ausnahme der Faktura ausschließlich aus dem FI-Beleg befüllt. Wenn also mithilfe der Belegverdichtung bspw. die Artikelnummer aus den FI-Belegen entfernt wird, ist eine Fortschreibung der Artikelnummer und den daraus abgeleiteten Merkmalen (Warengruppe etc.) im CO-PA unmöglich. Dem kann zum einen begegnet werden, in dem organisatorisch bzw. technisch dafür gesorgt wird, dass Artikelbelege einen bestimmten Umfang (ca. 450 Pos.) nicht überschreiten (vgl. Hinweis 1411253 - Warenbewegungen aus EWM) oder zum anderen ein automatisierter Belegsplit im FI erfolgt. Letzteres ist jedoch nur in neueren Releases[3] möglich. Eine Vorabkorrektur ist ab Rel. 6.03 verfügbar. Details hierzu finden sich im Hinweis 1353827.

 

Belegsplit bei log. Eingangsrechnungen (MIRO)

Im Hinweis 1497092 findet sich eine Lösung, wie sich - unter bestimmten Voraussetzungen - ein Belegsplit im Rahmen der log. Rechnungsprüfung implementieren lässt, so dass eine Belegverdichtung des Vorgangs RMRP (s.o.) nicht mehr zwingend erforderlich ist.



[1] Die Einschränkung ist historisch dem numerischen Feld ‚Buchungszeile’ (BUZEI) in der BSEG geschuldet, dessen Domäne mit Typ NUMC der Länge 3 definiert ist.

[2] Der Referenzvorgang ist eine betriebswirtschaftliche Klassifizierung von Belegen im SAP-System. Dieser wird durch eine 4-5stellige, eindeutige Zeichenfolge qualifiziert.

[3] Rel. 6.03 / ab HP 06 bzw. 6.04 / ab HP 04

Weiterlesen

Wissenswertes zum Thema Substitution / Validierung

22. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht in #FI

Validierungen und Substitutionen sind mächtige Werkzeuge im FI/CO-Umfeld und können so manches Ungemach vom Buchungsstoff abwenden bzw. das Leben der Buchhalter/Controller erleichtern. Typische Anwendungsfälle sind z.B.:

 

- Profitcenter-Substution (s.u.)

- Dummy-Funktionsbereich setzen, wenn die Funktionsbereichsableitung bis dahin kein Ergebnis brachte

- Validierung, ob für bestimmte Konten eine Partnerkontierung abgeleitet werden konnte (s.u.)

- Validierung, dass Investitionsaufträge nur mit bestimmten Kostenarten/Konten bebucht werden dürfen (vgl. link)

- und, und und...

 

Die Validierung greift auch bei der Vorerfassung (Details s. HW 158739), während die Substitution erst beim Buchen wirkt.

 

Interessante SAP-Hinweise

842318 - umfangreiches FAQ zu diesem Themenkomplex

42615  - die Mutter aller Hinweise zum Thema Substitutionen im FI

438076 - (gutes) Beispiel für eine Substitution zum Zeitpunkt 3 (kompletter Beleg)

386896 - Substitution zum Zeitpunkt 3 (RW-Interface SD/MM)

413956 - Validierung kompletter Beleg (Zeitpunkt 3)

48121 - Verwendung von Userexits in Validierungen und Substitutionen

158739 - Validierung bei der Belegvorerfassung im FI

 

 

Generieren von Validierungen und Substitutionen

Unter bestimmen Umständen ist eine Nachgenerierung des Validierungs- bzw. Substitutionscodings erforderlich. Dies erfolgt mithilfe des Reports RGUGBR00.

 

 

Pflege der Tab. GB01

Lt. SAP-Hinweis 42615 sind Änderungen an der Tabelle GB01 Modifikationen, deshalb gibt es auch keinen offiziellen Pflegeview. In neueren Releases gibt es aber einen 'inoffiziellen': VWTYGB01 (Pflege über Transaktion SM30).

 

 

Neuer Substitutions-/Validierungsexit

1. Prüfen, ob in GCX2 bereits zum Arbeitsgebiet GBLS (Substitution) bzw. GBLR (Validierung) ein Z-Programm zugewiesen ist. Falls nicht, die Standardformpools RGGBS000 bzw. RGGBR000 in den Kundennamensraum kopieren und in der GCX2 dem entsprechenden Arbeitsgebiet zuweisen.

2. Exit-Routine gemäß untenstehendem Muster ausprogrammieren. Zusätzliche Infos (u.a. auch zur Verwendung von Parametern) finden sich im SAP Hinweis 48121.

 

FORM GET_EXIT_TITLES

Block einfügen

 exits-name = 'U900'.  "Kd.namensraum: U9xx / Zxxx / Yxxx
 exits-param = c_exit_param_class. "s. HW 48121 
 exits-title = ''. "<---insert appropriate text here
 append exits.
 

Block einfügen

 form u900 using is_booldata type GB002_015.
 * insert your substitution logic here
 * document header: is_booldata-bkpf
 * document lines: is_booldata-bseg
 *!!!!! change only 'allowed' fields according to table GB01 !!!!*
 * ...
 endform.
 

Konkrete Anwendungsbeispiele

 

Profitcenter-Substitution

Mithilfe der Profitcenter-Substitution kann das zu kontierende Profitcenter in Abhängigkeit von bestimmten Informationen aus dem Ursprungsbeleg gefunden werden. Die Implementierung der entsprechenden Ableitungsregeln erfolgt im IMG unter Controlling > Profit-Center-Rechnung > Zuordnungen von Kontierungsobjekten zu Profitcentern > Kundenaufträge > Substitutionen Kundenaufträge bzw. Transaktion 0KEM

 

Pro Substitutionsschritt kann eine Voraussetzung (Bedingung) angegeben und das Profitcenter auf folgende Weise zurückgegeben werden:

  • Konstanter Wert
  • Feld an Feld-Zuweisung (z.B. Profitcenter = Betrieb)
  • Exit

 

Hierbei stehen die Felder der Struktur PCASUB sowie div. Systemfelder (z.B. SY-TCODE = rufender Transaktionscode) zur Verfügung.

 

Beispiel:

Das Profitcenter soll aus der Verkäufergruppe des Vertriebsbelegs abgeleitet und jeweils als ein konstanter Wert zurückgeliefert werden. Hierbei muss für jede auszusteuernde Verkäufergruppe über den ‚Formula Builder’ ein Substitutionsschritt angelegt werden, der als Voraussetzung die jeweilige Abfrage auf die Verkäufergruppe(n) beinhaltet (PCASUB-VKGRP = ‚<Wert>’) und das entsprechende Profitcenter zuordnet (Abschnitt ‚Substitutionen’).

 

Substitutionsexits

Reichen die Funktionen des Formulabuilders nicht aus oder müssen andere Daten hinzu gelesen werden, kann die Substitution mithilfe eines Exits vorgenommen werden. Folgende Schritte sind dazu nötig:

  • Kopieren des SAP-Formpools RGGBS000 in den Kundennamensraum (z.B. ZGGBS000)
  • Anmelden des kundeneigenen Formpools im Arbeitsgebiet GBLS (Transaktion GCX2)

 

ArbGb

Ex.prog.

Arbeitsgebiet

GBLR

RGGBR000

Val/Sub:Exits for Rules

GBLS

ZGGBS000

Val/Sub:Exits for Substitution

GBRU

RGLVU000

Rollup: User-Exits

Transaktion GXC2 - Zuweisung Formpool

  • Implementierung des Substitutionsexits

 

Ein Beispiel zur Implementierung eines Substitutionsexits im Rahmen der Profitcenter-Substitution findet sich in der zugehörigen Korrektur des Beratungshinweises 173798. Zudem sollten folgende Punkte bei der Entwicklung des Substitutionsexits beachtet werden:

  • Die (kundeneigenen) Substitutionsroutinen tragen eine 4stellige Bezeichnung. Diese kann wahlweise mit Z oder Y (z.B. Zxxx) beginnen oder im Bereich U900-U999 angesiedelt sein. Diese Routinen müssen in der Form get_exit_tables am System angemeldet werden (s. Beispielcoding im o.g. Hinweis)
  • Die Rückgabe des ermittelten Profitcenters erfolgt immer im Feld PRCTR der Übergabestruktur PCASUB.
  • Die Felder der Struktur PCASUB werden durch den Ursprungsbeleg so weit wie möglich gefüllt. Zusätzlich benötigte Dateninhalte müssen ggf. von der Datenbank nachgelesen oder mittels ‚Dirty Assign’ aus den rufenden Programmen geholt werden.
  • Beim Szenario ‚Buchungskreisübergreifender Verkauf’ wird die Substitution zweimal durchlaufen, weil einmal das Profitcenter für die Faktura an den Endkunden und einmal für die interne Verrechnung ermittelt wird. Details hierzu finden sich Hinweis 815972.

 

  Zuordnung der Substitution

Abschließend muss die Substitution noch dem Kostenrechnungskreis zugewiesen und aktiviert werden (IMG siehe oben, à …Substitutionsregeln zuordnen), Transaktion 0KEL:

 

Kostenrechnungskreis

Substitution

Aktivkennzeichen

<XXXX>

<Substitution>

Kennzeichen 0,1,2,3,4 (siehe unten)

Customizing – Aktivierung der Substitution im Kostenrechnungskreis

 

Aktivkennzeichen

Kennzeichen

Bedeutung

0

Es werden keine Substitutionen verwendet. Das Profit Center wird aus dem Betriebsegment des Artikelstammes abgeleitet.

1

Die Substitution wird bei ‚Cross Company’ und sonstigen Abwicklungen aufgerufen. Bei ‚Cross-Company-Abwicklungen’ erfolgt der Aufruf nur zum Zeitpunkt ‚Faktura anlegen’.

2

Die Substitutionsregel wird nur im Falle einer ‚Cross Company’ Abwicklung verwendet und der Aufruf erfolgt nur zum Zeitpunkt ‚Faktura anlegen’.

3

Die Substitution wird bei ‚Cross Company’ und sonstigen Abwicklungen aufgerufen. Bei ‚Cross-Company-Abwicklungen’ erfolgt der Aufruf zu den Zeitpunkten ‚Kundenauftrag anlegen’ und ‚Faktura anlegen’.

4

Die Substitutionsregel wird nur im Falle einer ‚Cross Company-Abwicklung’ verwendet, der Aufruf erfolgt zu den Zeitpunkten ‚Kundenauftrag anlegen’ und ‚Faktura anlegen’.

Aktivkennzeichen für Substitutionen

 

Details hierzu finden sich zudem im Hinweis 167912. Programmtechnisch findet der Aufruf im Rahmen des Funktionsbausteins COPCA_SD_PRCTR_GET statt. In ihm wird auch das o.g. Aktivierungskennzeichen abgefragt. Dieser Baustein eignet sich somit als Ausgangspunkt zur Fehleranalyse, wenn die Substitution scheinbar überhaupt nicht durchlaufen wird oder falsche bzw. unverständliche Ergebnisse liefert.

 

Aufruf der PC-Subst. in eigenen Programmen

Bei Bedarf kann die Profitcenter-Substitution auch in eigenen Programmen gerufen werden. Hierzu sind folgende Schritte nötig:

  • Versorgung der benötigten Felder der Struktur PCASUB
  • Aufruf des Funktionsbausteins COPCA_SD_PRCTR_GET

 

Beispiel:

report zmyprog.
* PC-Substitution explizit in eigenem Coding ausführen
data:  ls_pcasub type pcasub,          "Workarea f. PC-Substitution
       l_prctr   type prctr.           „Substituiertes PC

* WorkArea PCASUB (Subst.-Schnittstelle) füllen
ls_pcasub-werks = ‚1234‘.
ls_pcasub-… = …
* Substitution aufrufen
  call function 'COPCA_SD_PRCTR_GET'
    exporting
      i_pcasub = ls_pcasub
      i_bukrs  = ‚1000‘
    importing
      prctr    = l_prctr
    exceptions
      no_bukrs = 1
      others   = 2.
* Fehlerbehandlung …
 

CO-Substitution

 

Details zu den Aufrufzeitpunkten finden sich im Beratungshinweis 392273. Die Substitution wird im IMG unter Controlling > Controlling Allgemein > Kontierungslogik > Substitution definieren bzw. Transaktion OKC9 angelegt bzw. gepflegt.

 

Kostenrechnungs-kreis

Anw. Zeitpunkt

Substitutionsname

Aktivierungs-

grad

1100

1 Belegzeile

DEMO

1

> Umfeld > Substitution

 

Pro Substitutionsschritt kann eine Voraussetzung (Bedingung) angegeben und das CO-Kontierungsobjekt auf folgende Weise zurückgegeben werden:

  • Konstanter Wert
  • Feld an Feld-Zuweisung (z.B. Kostenstelle = Betrieb)
  • Exit

 

Im Rahmen der Substitutionsbearbeitung stehen folgende Datenstrukturen zur Verfügung, wobei nicht alle Strukturen / Felder in jedem Aufrufkontext vollständig gefüllt sind:

 

Struktur


Bezeichnung


AFVC

Auftragsarbeitsvorgang

AUFKV

Generierte Tabelle zum View AUFKV

CAUFV

Generierte Tabelle zum View CAUFV

CBPRV

Geschäftsprozeß: CBPR + CBPT

CKPHV

View für CKPH + Text + Steuerungsdaten...

COBK

CO-Objekt: Belegkopf

COBL

Kontierungsblock

CSKSV

Steuerungskennzeichen aus Kostenstellenstammsatz

PRPS

PSP-Element (Projektstrukturplanelement) Stammdaten

SYST

ABAP-Systemfelder

VBAK

Verkaufsbeleg: Kopfdaten

VBAP

Verkaufsbeleg: Positionsdaten

 

Die Rückgabe des jeweiligen Kontierungsobjektes erfolgt im entsprechenden Feld der Struktur COBL.

 

 

Validierung im Rahmen der Konsolidierungsvorbereitung

Es sollen folgende Sachverhalte validiert werden:

1. Wenn ein Konto bebucht wird, welches im Set ZFI_KONTEN_BWA_RS(Rückstellungen) enthalten ist, soll geprüft werden, ob a) überhaupt eine Bewegungsart kontiert wurde und b) ob es sich dabei um eine für den Rückstellungsspiegel zulässige Bewegungsart handelt. Diese sind wiederum im Set ZFI_BWA_RS aufgeführt.

Vaidierung zum Zeitpunkt 2 (Belegposition):
Voraussetzung:
BSEG-HKONT IN ZFI_KONTEN_BWA_RS
Prüfung:
BSEG-BEWAR <> '' AND BSEG-BEWAR IN ZFI_BWA_RS

2. Wenn ein Konto bebucht wird, welches im Set ZFI_KONTEN_PARTNER enthalten ist, soll geprüft werden, ob es dem System möglich war, eine gültige Partnerkontierung (z.B. aus den Gegenpositionen) abzuleiten.

Validierung zum Zeitpunkt 3 (kompletter Beleg):
(...muss hier gemacht werden, da die 'Vererbung' der Partnerges. in die Gegenpositionen erst zu diesem Zeitpunkt erfolgt)

Voraussetzung:
BKPF-GLVOR <> 'RFBV'
nicht bei Vorerfassung, da die Ableitung der Partnerges. erst im Modus 'Buchen' erfolgt.

Prüfung:
Exit U901

Coding-Auszug U901:

Code:

* RA_HKONT aufbauen (Nachlesen aus Set...)
...
*----------------------------------------------------------------------*
* Abfrage Partnerkontierung für alle Belegzeilen, deren
* Konto im SET enthalten ist
* Die Selektionsrange darf aber nicht leer sein, sonst meckert er
* bei jedem Konto
*----------------------------------------------------------------------*
  check not ra_hkont[] is initial.
  loop at bool_data-bseg into bseg where hkont in ra_hkont.
    if bseg-vbund is initial.
      b_result = b_false.
    endif.
  endloop.

Weiterlesen

Abgleich Zahlungsbedingungen FI - MM/SD

21. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht in #MM

Bei den Debitoren- und Kreditorenstammdaten existieren die Zahlungsbedingungen sowohl in der FI-Sicht als auch in der jeweiligen Einkaufs- bzw. Vertriebssicht. Bei der Stammdatenanlage ist also ggf. darauf zu achten, dass die Zahlungsbedingungen gleichlautend eingegeben werden. Der nachfolgende, kleine Prüfreport listet Abweichungen auf und vereinfacht somit die Fehlersuche und ggf. Nachbearbeitung der Stammsätze

 

*&---------------------------------------------------------------------*
*& Report  YYZTERM01
*&
*&---------------------------------------------------------------------*
*& Der Report prüft die Zahlungsbedingungen im FI gegen die
*& Zahlungsbedingungen im SD bzw. MM
*&---------------------------------------------------------------------*

REPORT  yyzterm01.

TABLES: knb1, lfb1, lfm1, knvv.
SELECT-OPTIONS: so_bukrs FOR knb1-bukrs OBLIGATORY.
SELECTION-SCREEN SKIP.
PARAMETERS: p_mm RADIOBUTTON GROUP r1 DEFAULT 'X'.
SELECT-OPTIONS: so_lifnr FOR lfb1-lifnr,
                so_ekorg FOR lfm1-ekorg.
SELECTION-SCREEN SKIP.
PARAMETERS: p_sd RADIOBUTTON GROUP r1.
SELECT-OPTIONS: so_kunnr FOR knb1-kunnr,
                so_vkorg FOR knvv-vkorg,
                so_vtweg FOR knvv-vtweg,
                so_spart FOR knvv-spart.

START-OF-SELECTION.
  IF p_mm = 'X'.
    PERFORM zterm_mm.
  ELSE.
    PERFORM zterm_sd.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  ZTERM_MM
*&---------------------------------------------------------------------*
*       Ableich Zahlungsbed. FI/MM
*----------------------------------------------------------------------*
FORM zterm_mm .
  SELECT * FROM lfb1 WHERE lifnr IN so_lifnr
                       AND bukrs IN so_bukrs.
    SELECT * FROM lfm1 WHERE lifnr = lfb1-lifnr
                         AND ekorg IN so_ekorg.
      IF lfm1-zterm NE lfb1-zterm.
        WRITE: / 'Lief.', lfb1-lifnr,
                 'Bukrs', lfb1-bukrs,
                 'Z-Bed FI', lfb1-zterm,
                 'EK-Org', lfm1-ekorg,
                 'Z-Bed MM', lfm1-zterm.
      ENDIF.
    ENDSELECT.
  ENDSELECT.

ENDFORM.                    " ZTERM_MM

*&---------------------------------------------------------------------*
*&      Form  ZTERM_SD
*&---------------------------------------------------------------------*
*       Ableich Zahlungsbed. FI/SD
*----------------------------------------------------------------------*

FORM zterm_sd .
  SELECT * FROM knb1 WHERE kunnr IN so_kunnr
                       AND bukrs IN so_bukrs.
    SELECT * FROM knvv WHERE kunnr = knb1-kunnr
                         AND vkorg IN so_vkorg
                         AND vtweg IN so_vtweg
                         AND spart IN so_spart.
      IF knvv-zterm NE knb1-zterm.
        WRITE: / 'Kunde', knb1-kunnr,
                 'Bukrs', knb1-bukrs,
                 'Z-Bed FI', knb1-zterm,
                 'Vetr.bereich', knvv-vkorg, knvv-vtweg, knvv-spart,
                 'Z-Bed SD', knvv-zterm.
      ENDIF.
    ENDSELECT.
  ENDSELECT.
ENDFORM.                    " ZTERM_SD

 

Weiterlesen
Werbung

Modifikationsfreie Erweiterung des SAP Referenz-IMG

17. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht in #Basis-Entwicklung allg.

Modifikationsfreie Erweiterung des Standard-IMG’s

 

 

Ruft die Transaktion S_IMG_EXTENSION auf.

 

 image001-Kopie-2.png

 

Wählt als IMG-Struktur SAP Customizing Einführungsleitfaden aus. Fügt diesen am besten in Eure Favoritenliste ein.

 

image003-Kopie-1.png

 

Klappt die Werthilfe zur Erweiterungs-ID auf und wählt entweder ‚Neu’ bzw. wählt unter ‚Originale’ eine vorhandene aus. Die so angelegte Erw.-Id erscheint hinterher in der Werthilfe unter ‚Originale’. Wählt diese aus und klickt auf Struktur erweitern.

 

image005-Kopie-1.png

 

Navigiert an die Stelle, wo Ihr Eure IMG-Aktivität einfügen wollt und fügt eine Aktivität oder einen Knoten ein (Drucktasten image007.png).

 

Hier gibt es natürlich verschiedene Ansätze:

  • Ihr könnt die Aktivität an die Stelle einfügen, wo auch die Standardeinstellungen zum bearbeiteten Themenkreis zu finden sind, z.B. im SD - ‚Steuerung der Preisfindung…’.
  • Ihr könnt am Ende des Standard-IMG’s einen Knoten <Kunde>-Einstellungen einfügen und darunter themenkreisspezifische Ordner anlegen, in denen Ihr letztendlich Eure Customizing-Aktivität einhängt.

Möglicherweise ist der Königsweg eine Mischform nach dem Motto: ‚Wenn es eine Erweiterung des SAP-Standards ist, dann 1., handelt es sich um eine Eigenentwicklung dann 2.’ oder so…

 

image009.png

 

Gebt dem Kind einen Namen und tragt unter ‚Bezeichnung’ den Titel ein, unter dem die Aktivität später im Referenz-IMG erscheinen soll. Sinnvollerweise sollte dieser aus den Standard-Aktivitäten in irgendeiner Form herausstechen, bspw. durch Voranstellen des Kunden-Namens (<KUNDE>: Steuerungsparameter zum Buchungskreis). Gebt einen Dokumentennamen für die IMG-Dokumentation ein (er kann identisch mit dem technischen Namen der IMG-Aktivität selbst sein) und klickt auf ‚Anlegen’.

 

image011.png

 

Pflege eine entsprechende Doku zur IMG-Aktivität ein.

 

Den Reiter ‚Attribute’ könnt Ihr überspringen, es sei denn, Ihr wollt diese Aktivität in die ASAP-Roadmap einhängen oder landesspezifisch ausprägen. Ich weiß es nicht genau, aber es kann sein, dass die Angaben auch für Projekt-IMG’s benötigt werden.

 

image013.png

 

Tragt ggf. im Reiter ‚Attribute’ die entsprechenden Werte ein. Die ASAP-Road-MAP-ID und ‚zugeordn. Anwendungskomponenten’ sind Pflichtangaben. Fürs erstere gibt’s eine Werthilfe, fürs zweite leider nicht. Sucht Euch ggf. die Komponente aus den umliegenden (Standard-)Aktivitäten heraus.

 

image015.png

 

Weist Eurer IMG-Aktivität unter ‚Pflegeobjekte’ abschließend das entsprechende Customizing-Objekt zu (hier: einfache Tabelle mit generiertem Tabellenpflegedialog). Es gehen aber auch Pflegeviews / Viewcluster, Transaktionen und Tod und Teufel was (siehe F4-Hilfe ‚Typ’)…

 

Alles Speichern à fertig!

 

Im Ergebnis sieht’s dann so aus:

 

image018.png

 

Und jetzte kommt das geilste:

 

Ihr könnt in Euren Programm- oder sonst wie gearteten Dokumentationen auf die IMG-Aktivität verweisen.

Syntax: <DS:SIMG.Eure IMG-Aktivität>Text in Doku</>

 

image020.png

 

image023.png

Weiterlesen

Buchen Beleg per BAPI BAPI_ACC_DOCUMENT_POST

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

Das nachfolgende Coding dient als Hilfestellung, wie der BAPI BAPI_ACC_DOCUMENT_POST mit Daten zu versorgen ist, damit er funzt. Hier haben sich nämlich schon etliche nicht-FI-kundige Entwickler die Ohren gebrochen...

Weiter unten sind 4 Beispielcodings zu diesem Themenkomplex aufgeführt:

  • Einfache Sachkontenbuchung ohne Steuer.
  • Debitorische Buchung mit normaler Ausgangssteuer
  • Kreditorische Buchung mit Reverse Charge-Steuer, also mit zwei Steuerzeilen (Stichwort ESE/ESA).
  • Erhaltene Anzahlung (debitorisch) mit Steuer und separater Übergabe in Beleg- und Hauswährung

UPDATE: Im  Beratungshinweis "2083799 - Sammelhinweis: Buchungen mit Rechnungswesen-BAPIs" finden sich über das unten beschriebene hinaus wertvolle Informationen und weitere Beispiele.

 

*&---------------------------------------------------------------------*
*& Report  YTEST_SIMPLE_POST
*&
*&---------------------------------------------------------------------*
*& Demoprogramm zur Erläuterung der Aufrufparameter für das BAPI
*&    BAPI_ACC_DOCUMENT_POST
*&---------------------------------------------------------------------*

REPORT  ytest_simple_post.

* Beispieldaten für Beleginhalte
DATA:   bukrs  TYPE bukrs  VALUE '1000',        "Buchungskreis
        hkonts TYPE hkont  VALUE '0000047011',  "Konto Soll
        hkonth TYPE hkont  VALUE '0000047012',  "Konto Haben
        waers  TYPE waers  VALUE 'EUR',         "Belegwährung
        wrbtr  TYPE wrbtr  VALUE 100,           "Betrag
        sgtxt  TYPE sgtxt  VALUE 'Test',        "Belegpos.text
        kostl  TYPE kostl  VALUE '0000001000',  "Kostenstelle
        zuonr  TYPE dzuonr VALUE '23456',       "Zuordnung
        xblnr  TYPE xblnr  VALUE 'REFERENZ',    "Referenznummer
        blart  type blart  value 'SA',          "Belegart
        docnum TYPE belnr_d.                    "Belegnummer

* Schnittstellendaten für Verbuchungs-BAPI
DATA:
* Returnparameter des BAPIs
  l_obj_type         TYPE bapiache09-obj_type,  "Objekttyp
* Objejktschlüssel erhält vom BAPI die Belegidentifikation:
* NNNNNNNNNNYYYYBBBB  N = Belegnummer, Y = GJahr, B = Buchungskreis
  l_obj_key          TYPE bapiache09-obj_key,   "Objektschlüssel
  l_obj_sys          TYPE bapiache09-obj_sys,   "log. System

* Belegkopf
  ls_documentheader  TYPE bapiache09,

* Sachkontenpositionen
  lit_accountgl      TYPE TABLE OF bapiacgl09,
  ls_accountgl       TYPE bapiacgl09,

* Steuerzeilen (in vorliegendem Bsp. nicht relevant)
  lit_accounttax     TYPE TABLE OF bapiactx09,
  ls_accounttax      TYPE bapiactx09,

* Betragsinformationen
  lit_currencyamount TYPE TABLE OF bapiaccr09,
  ls_currencyamount  TYPE bapiaccr09,

* Meldungen des BAPI's
  lit_return         TYPE TABLE OF bapiret2,
  ls_return          TYPE bapiret2.

DATA:
  l_itemno           TYPE posnr_acc.           "Postionsnummer (s.u.)

*-----------------------------------------------------------------------
* Initialisierung
*-----------------------------------------------------------------------
CLEAR: lit_accountgl[],
       lit_accounttax[],
       lit_currencyamount[],
       lit_return[].

*-----------------------------------------------------------------------
* Positionsnummer (fängt bei 1 an und wird pro Belegpos. um 1 inkr.)
* Hinweis: Es können auch 10er Schritte verwendet werden, wichtig ist
*          nur eins: Die Einträge der Tabellen l_accountgl und
*          l_currencyamount finden über den jeweiligen Inhalt des Felds
*          itemno_acc 'zueinander', d.h. anders ausgedrückt:
*          Für jede Belegposition muss jeweils ein Eintrag in den
*          genannten Tabellen mit identischer itemno_acc aufgenommen
*          werden.
*-----------------------------------------------------------------------
l_itemno = 1.

*-----------------------------------------------------------------------
* Belegkopf
*-----------------------------------------------------------------------
CLEAR ls_documentheader.
ls_documentheader-bus_act    = 'RFBU'.     "Vorgang (fix)
ls_documentheader-username   = sy-uname.   "Belegerfasser
ls_documentheader-comp_code  = bukrs.      "Buchungskreis
ls_documentheader-doc_date   = sy-datum.   "Belegdatum
ls_documentheader-pstng_date = sy-datum.   "Buchungsdatum
ls_documentheader-ref_doc_no = xblnr.      "Referenznummer
ls_documentheader-doc_type   = blart.      "Belegart

*-----------------------------------------------------------------------
* 1. Belegposition (Soll)
*-----------------------------------------------------------------------
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc      = l_itemno.   "Positionsidentifier
ls_accountgl-gl_account      = hkonts.     "Sachkonto (Soll)
ls_accountgl-item_text       = sgtxt.      "Belegtext
ls_accountgl-costcenter      = kostl.      "Kostenstelle
ls_accountgl-alloc_nmbr      = zuonr.      "Zuordnung

* Betragssegment zur Sachkontenposition 1 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = wrbtr.      "positiver Betrag = Soll

APPEND: ls_accountgl      TO lit_accountgl,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* 2. Belegposition (Haben)
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc      = l_itemno.
ls_accountgl-gl_account      = hkonth.
ls_accountgl-item_text       = sgtxt.
ls_accountgl-alloc_nmbr      = zuonr.

* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = wrbtr * -1.   "Haben --> Minus

APPEND: ls_accountgl      TO lit_accountgl,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* BAPI-Aufruf
*-----------------------------------------------------------------------
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
    documentheader    = ls_documentheader
  IMPORTING
    obj_type          = l_obj_type
    obj_key           = l_obj_key
    obj_sys           = l_obj_sys
  TABLES
    accountgl         = lit_accountgl
*   ACCOUNTRECEIVABLE =
*   ACCOUNTPAYABLE    =
*   accounttax        =
    currencyamount    = lit_currencyamount
*   CRITERIA          =
*   VALUEFIELD        =
*   EXTENSION1        =
    return            = lit_return
*   PAYMENTCARD       =
*   CONTRACTITEM      =
*   EXTENSION2        =
*   REALESTATE        =
*   ACCOUNTWT         =
  .
COMMIT WORK.

*-----------------------------------------------------------------------
* BAPI Meldungen ausgeben
*-----------------------------------------------------------------------
IF NOT lit_return[] IS INITIAL.
  CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab = lit_return.
ENDIF.

* systemseitig vergebene Belegnummer kommt zurück!
docnum = l_obj_key(10).

...und weil' so schön war, das gleiche nochmal als debitorische Buchung:

per Debitor 119,-- an Sachkonto 100,--, Steuer 19,--

*&---------------------------------------------------------------------*
*& Report  YTEST_SIMPLE_POST
*&
*&---------------------------------------------------------------------*
*& Demoprogramm zur Erläuterung der Aufrufparameter für das BAPI
*&    BAPI_ACC_DOCUMENT_POST
*&---------------------------------------------------------------------*

REPORT  ytest_simple_post.

* Beispieldaten für Beleginhalte
DATA:   bukrs  TYPE bukrs  VALUE '1002',        "Buchungskreis
        kunnr  TYPE kunnr  VALUE '0000064756',  "Debitor Soll
        hkonth TYPE hkont  VALUE '0000331000',  "Konto Haben
        waers  TYPE waers  VALUE 'EUR',         "Belegwährung
        wrbtr  TYPE wrbtr  VALUE 119,           "Betrag
        sgtxt  TYPE sgtxt  VALUE 'Test',        "Belegpos.text
        kostl  TYPE kostl  VALUE '0000102719',  "Kostenstelle
        zuonr  TYPE dzuonr VALUE '23456',       "Zuordnung
        xblnr  TYPE xblnr  VALUE 'REFERENZ',    "Referenznummer
        blart  TYPE blart  VALUE 'DR',          "Belegart
        mwskz  TYPE mwskz  VALUE 'A1',          "Steuerkennzeichen
        docnum TYPE belnr_d.                    "Belegnummer

* Schnittstellendaten für Verbuchungs-BAPI
DATA:
* Returnparameter des BAPIs
  l_obj_type         TYPE bapiache09-obj_type,  "Objekttyp
* Objektschlüssel erhält vom BAPI die Belegidentifikation:
* NNNNNNNNNNYYYYBBBB  N = Belegnummer, Y = GJahr, B = Buchungskreis
  l_obj_key          TYPE bapiache09-obj_key,   "Objektschlüssel
  l_obj_sys          TYPE bapiache09-obj_sys,   "log. System

* Belegkopf
  ls_documentheader  TYPE bapiache09,

* Sachkontenpositionen
  lit_accountgl      TYPE TABLE OF bapiacgl09,
  ls_accountgl       TYPE bapiacgl09,

* Debitorenposition
  lit_accountrec     TYPE TABLE OF bapiacar09,
  ls_accountrec      TYPE bapiacar09,

* Steuerzeilen 
  lit_accounttax     TYPE TABLE OF bapiactx09,
  ls_accounttax      TYPE bapiactx09,

* Betragsinformationen
  lit_currencyamount TYPE TABLE OF bapiaccr09,
  ls_currencyamount  TYPE bapiaccr09,

* Meldungen des BAPI's
  lit_return         TYPE TABLE OF bapiret2.

DATA:
  l_itemno           TYPE posnr_acc.           "Postionsnummer (s.u.)

* Steuerdaten
DATA:
  lit_mwdat TYPE TABLE OF rtax1u15,
  ls_mwdat  TYPE rtax1u15.

*-----------------------------------------------------------------------
* Initialisierung
*-----------------------------------------------------------------------
CLEARlit_accountgl[],
       lit_accounttax[],
       lit_accountrec[],
       lit_currencyamount[],
       lit_return[].

*-----------------------------------------------------------------------
* Steuerdaten holen
*-----------------------------------------------------------------------
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
  EXPORTING
    i_bukrs bukrs
    i_mwskz mwskz
    i_waers waers
    i_wrbtr wrbtr
  TABLES
    t_mwdat lit_mwdat
  EXCEPTIONS
    OTHERS  16.

IF sy-subrc NE 0.
*   Fehlerbehandlung
ELSE.
  READ TABLE lit_mwdat INTO ls_mwdat INDEX 1.
ENDIF.

*-----------------------------------------------------------------------
* Positionsnummer (fängt bei 1 an und wird pro Belegpos. um 1 inkr.)
* Hinweis: Es können auch 10er Schritte verwendet werden, wichtig ist
*          nur eins: Die Einträge der Tabellen l_accountgl und
*          l_currencyamount finden über den jeweiligen Inhalt des Felds
*          itemno_acc 'zueinander', d.h. anders ausgedrückt:
*          Für jede Belegposition muss jeweils ein Eintrag in den
*          genannten Tabellen mit identischer itemno_acc aufgenommen
*          werden.
*-----------------------------------------------------------------------
l_itemno 1.

*-----------------------------------------------------------------------
* Belegkopf
*-----------------------------------------------------------------------
CLEAR ls_documentheader.
ls_documentheader-bus_act    'RFBU'.     "Vorgang (fix)
ls_documentheader-username   sy-uname.   "Belegerfasser
ls_documentheader-comp_code  bukrs.      "Buchungskreis
ls_documentheader-doc_date   sy-datum.   "Belegdatum
ls_documentheader-pstng_date sy-datum.   "Buchungsdatum
ls_documentheader-ref_doc_no xblnr.      "Referenznummer
ls_documentheader-doc_type   blart.      "Belegart

*-----------------------------------------------------------------------
* 1. Belegposition (Soll - Debitor)
*-----------------------------------------------------------------------
CLEARls_accountrecls_currencyamount.
ls_accountrec-itemno_acc     l_itemno.   "Positionsidentifier
ls_accountrec-customer       kunnr.      "Debitor (Soll)
ls_accountrec-item_text      sgtxt.      "Belegtext
ls_accountrec-alloc_nmbr     zuonr.      "Zuordnung

* Betragssegment zur Sachkontenposition 1 mit identischem Identifier:
ls_currencyamount-itemno_acc ls_accountrec-itemno_acc.
ls_currencyamount-currency   waers.
ls_currencyamount-amt_doccur wrbtr.      "positiver Betrag = Soll

APPENDls_accountrec     TO lit_accountrec,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* 2. Belegposition (Haben - Sachkonto)
*-----------------------------------------------------------------------
ADD TO l_itemno.
CLEARls_accountglls_currencyamount.
ls_accountgl-itemno_acc      l_itemno.
ls_accountgl-gl_account      hkonth.
ls_accountgl-costcenter      kostl.
ls_accountgl-item_text       sgtxt.
ls_accountgl-tax_code        mwskz.
ls_accountgl-alloc_nmbr      zuonr.

* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc ls_accountgl-itemno_acc.
ls_currencyamount-currency   waers.
ls_currencyamount-amt_doccur ls_mwdat-kawrt * -1.   "Nettobetrag / Haben --> Minus

APPENDls_accountgl      TO lit_accountgl,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* Steuerzeile (Haben)
*-----------------------------------------------------------------------
ADD TO l_itemno.
CLEARls_accounttaxls_currencyamount.
ls_accounttax-itemno_acc     l_itemno.
ls_accounttax-tax_code       mwskz.

ls_currencyamount-itemno_acc ls_accounttax-itemno_acc.
ls_currencyamount-currency   waers.
ls_currencyamount-amt_doccur ls_mwdat-wmwst * -1.
ls_currencyamount-amt_base   ls_mwdat-kawrt * -1.

APPENDls_accounttax     TO lit_accounttax,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* BAPI-Aufruf
*-----------------------------------------------------------------------
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
    documentheader    ls_documentheader
  IMPORTING
    obj_type          l_obj_type
    obj_key           l_obj_key
    obj_sys           l_obj_sys
  TABLES
    accountgl         lit_accountgl
    accountreceivable lit_accountrec
*   ACCOUNTPAYABLE    =
    accounttax        lit_accounttax
    currencyamount    lit_currencyamount
*   CRITERIA          =
*   VALUEFIELD        =
*   EXTENSION1        =
    return            lit_return
*   PAYMENTCARD       =
*   CONTRACTITEM      =
*   EXTENSION2        =
*   REALESTATE        =
*   ACCOUNTWT         =
  .
COMMIT WORK.

*-----------------------------------------------------------------------
* BAPI Meldungen ausgeben
*-----------------------------------------------------------------------
IF NOT lit_return[] IS INITIAL.
  CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab lit_return.
ENDIF.


* systemseitig vergebene Belegnummer kommt zurück!
docnum l_obj_key(10).

*&---------------------------------------------------------------------*
*& Report ZTESTBAPI
*&---------------------------------------------------------------------*
*&  kreditorische Buchung mit E1 (Reverse Charge, ESA/ESE)
*&---------------------------------------------------------------------*
REPORT ztestbapi.

* Beispieldaten für Beleginhalte
DATA: bukrs  TYPE bukrs  VALUE '9000',        "Buchungskreis
      lifnr  TYPE lifnr  VALUE '0000000117',  "Kreditor Haben
      hkonts TYPE hkont  VALUE '0000688000',  "Konto soll
      waers  TYPE waers  VALUE 'EUR',         "Belegwährung
      wrbtr  TYPE wrbtr  VALUE 100,           "Betrag
      sgtxt  TYPE sgtxt  VALUE 'Test',        "Belegpos.text
      kostl  TYPE kostl  VALUE '9000000000',  "Kostenstelle
      zuonr  TYPE dzuonr VALUE '23456',       "Zuordnung
      xblnr  TYPE xblnr  VALUE '4711-001',    "Referenznummer
      blart  TYPE blart  VALUE 'KR',          "Belegart
      mwskz  TYPE mwskz  VALUE 'E1',          "Steuerkennzeichen
      docnum TYPE belnr_d.                    "Belegnummer

* Schnittstellendaten für Verbuchungs-BAPI
DATA:
* Returnparameter des BAPIs
  l_obj_type         TYPE bapiache09-obj_type,  "Objekttyp
* Objektschlüssel erhält vom BAPI die Belegidentifikation:
* NNNNNNNNNNYYYYBBBB  N = Belegnummer, Y = GJahr, B = Buchungskreis
  l_obj_key          TYPE bapiache09-obj_key,   "Objektschlüssel
  l_obj_sys          TYPE bapiache09-obj_sys,   "log. System

* Belegkopf
  ls_documentheader  TYPE bapiache09,

* Sachkontenpositionen
  lit_accountgl      TYPE TABLE OF bapiacgl09,
  ls_accountgl       TYPE bapiacgl09,

* Kreditorenposition
  lit_accountpay     TYPE TABLE OF bapiacap09,
  ls_accountpay      TYPE bapiacap09,

* Steuerzeilen
  lit_accounttax     TYPE TABLE OF bapiactx09,
  ls_accounttax      TYPE bapiactx09,

* Betragsinformationen
  lit_currencyamount TYPE TABLE OF bapiaccr09,
  ls_currencyamount  TYPE bapiaccr09,

* Meldungen des BAPI's
  lit_return         TYPE TABLE OF bapiret2.

DATA:
  l_itemno           TYPE posnr_acc.           "Postionsnummer (s.u.)

* Steuerdaten
DATA:
  lit_mwdat TYPE TABLE OF rtax1u15,
  ls_mwdat  TYPE rtax1u15.

*-----------------------------------------------------------------------
* Initialisierung
*-----------------------------------------------------------------------
CLEAR: lit_accountgl[],
       lit_accounttax[],
       lit_accountpay[],
       lit_currencyamount[],
       lit_return[].

*-----------------------------------------------------------------------
* Steuerdaten holen
*-----------------------------------------------------------------------
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
  EXPORTING
    i_bukrs = bukrs
    i_mwskz = mwskz
    i_waers = waers
    i_wrbtr = wrbtr
  TABLES
    t_mwdat = lit_mwdat
  EXCEPTIONS
    OTHERS  = 16.

IF sy-subrc NE 0.
*   Fehlerbehandlung
ELSE.
  break srohde.
ENDIF.

*-----------------------------------------------------------------------
* Positionsnummer (fängt bei 1 an und wird pro Belegpos. um 1 inkr.)
* Hinweis: Es können auch 10er Schritte verwendet werden, wichtig ist
*          nur eins: Die Einträge der Tabellen l_accountgl und
*          l_currencyamount finden über den jeweiligen Inhalt des Felds
*          itemno_acc 'zueinander', d.h. anders ausgedrückt:
*          Für jede Belegposition muss jeweils ein Eintrag in den
*          genannten Tabellen mit identischer itemno_acc aufgenommen
*          werden.
*-----------------------------------------------------------------------
l_itemno = 1.

*-----------------------------------------------------------------------
* Belegkopf
*-----------------------------------------------------------------------
CLEAR ls_documentheader.
ls_documentheader-bus_act    = 'RFBU'.     "Vorgang (fix)
ls_documentheader-username   = sy-uname.   "Belegerfasser
ls_documentheader-comp_code  = bukrs.      "Buchungskreis
ls_documentheader-doc_date   = sy-datum.   "Belegdatum
ls_documentheader-pstng_date = sy-datum.   "Buchungsdatum
ls_documentheader-ref_doc_no = xblnr.      "Referenznummer
ls_documentheader-doc_type   = blart.      "Belegart

*-----------------------------------------------------------------------
* 1. Belegposition (Haben - Kreditor)
*-----------------------------------------------------------------------
CLEAR: ls_accountpay, ls_currencyamount.
ls_accountpay-itemno_acc     = l_itemno.   "Positionsidentifier
ls_accountpay-vendor_no      = lifnr.      "Kreditor
ls_accountpay-item_text      = sgtxt.      "Belegtext
ls_accountpay-alloc_nmbr     = zuonr.      "Zuordnung

* Betragssegment zur Sachkontenposition 1 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountpay-itemno_acc.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = wrbtr * -1. "negativer Betrag = Haben

APPEND: ls_accountpay     TO lit_accountpay,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* 2. Belegposition (Soll - Sachkonto)
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc      = l_itemno.
ls_accountgl-gl_account      = hkonts.
ls_accountgl-costcenter      = kostl.
ls_accountgl-item_text       = sgtxt.
ls_accountgl-tax_code        = mwskz.
ls_accountgl-alloc_nmbr      = zuonr.

* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = wrbtr.   "Soll

APPEND: ls_accountgl      TO lit_accountgl,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* Steuerzeile 1 (HABEN) - ESA
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accounttax, ls_currencyamount.
ls_accounttax-itemno_acc     = l_itemno.
ls_accounttax-tax_code       = mwskz.
read table lit_mwdat index 1 into ls_mwdat.
ls_accounttax-acct_key       = ls_mwdat-ktosl.

ls_currencyamount-itemno_acc = ls_accounttax-itemno_acc.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = ls_mwdat-wmwst.
ls_currencyamount-amt_base   = ls_mwdat-kawrt * -1.  "Steuerbasis VZ drehen

APPEND: ls_accounttax     TO lit_accounttax,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* Steuerzeile 2 (Haben) - ESE
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accounttax, ls_currencyamount.
ls_accounttax-itemno_acc     = l_itemno.
ls_accounttax-tax_code       = mwskz.
read table lit_mwdat index 2 into ls_mwdat.
ls_accounttax-acct_key       = ls_mwdat-ktosl.

ls_currencyamount-itemno_acc = ls_accounttax-itemno_acc.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = ls_mwdat-wmwst.
ls_currencyamount-amt_base   = ls_mwdat-kawrt * -1.

APPEND: ls_accounttax     TO lit_accounttax,
        ls_currencyamount TO lit_currencyamount.

*-----------------------------------------------------------------------
* BAPI-Aufruf
*-----------------------------------------------------------------------
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
    documentheader = ls_documentheader
  IMPORTING
    obj_type       = l_obj_type
    obj_key        = l_obj_key
    obj_sys        = l_obj_sys
  TABLES
    accountgl      = lit_accountgl
    accountpayable = lit_accountpay
    accounttax     = lit_accounttax
    currencyamount = lit_currencyamount
*   CRITERIA       =
*   VALUEFIELD     =
*   EXTENSION1     =
    return         = lit_return
*   PAYMENTCARD    =
*   CONTRACTITEM   =
*   EXTENSION2     =
*   REALESTATE     =
*   ACCOUNTWT      =
  .
COMMIT WORK.

*-----------------------------------------------------------------------
* BAPI Meldungen ausgeben
*-----------------------------------------------------------------------
IF NOT lit_return[] IS INITIAL.
  CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab = lit_return.
ENDIF.

* systemseitig vergebene Belegnummer kommt zurück!
docnum = l_obj_key(10).

Mein Kollege Markus hatte mal einen Fall im Rahmen einer Migration, dass erhaltene (debitorische) Anzahlungen (Sonderhauptbuch "A") inkl. Steuerzeile übernommen werden sollten. Zudem wurden hier beispielhaft Beträge sowohl in Transaktions- als auch Hauswährung übergeben. Folgender Beleg wird exemplarisch mit dem weiter unten aufgeführten Coding Snippet gebucht:

Beispielbeleg

Beispielbeleg

 
 Hier das entsprechende Coding-Snippet:
 

*&---------------------------------------------------------------------*
*& Report YTEST_MALA
*&---------------------------------------------------------------------*
*& erhaltene Anzahlungen (SHB-Kz.) und Betragsübergabe in Haus- und Belegwährung
*&---------------------------------------------------------------------*
REPORT ytest_mala.

* Beispieldaten für Beleginhalte
DATA: bukrs   TYPE bukrs  VALUE '0010',        "Buchungskreis
      kunnr   TYPE kunnr  VALUE '0102000392',  "Debitor Soll
      hkonth  TYPE hkont  VALUE '9920020000',  "Konto Haben
      waers   TYPE waers  VALUE 'EUR',         "Belegwährung
      wrbtr   TYPE wrbtr  VALUE 238,           "Betrag brutto
      sgtxt   TYPE sgtxt  VALUE 'Test',        "Belegpos.text
*     kostl   TYPE kostl  VALUE '0000102719',  "Kostenstelle
      zuonr   TYPE dzuonr VALUE '23456',       "Zuordnung
      xblnr   TYPE xblnr  VALUE 'REFERENZ',    "Referenznummer
      blart   TYPE blart  VALUE 'T0',          "Belegart
      curtp00 TYPE curtp  VALUE '00',          "Währungstyp 00
      curtp10 TYPE curtp  VALUE '10',          "Währungstyp 10
      mwskz   TYPE mwskz  VALUE 'A1',          "Steuerkennzeichen
      docnum  TYPE belnr_d.                    "Belegnummer
 
 
 
* Schnittstellendaten für Verbuchungs-BAPI
DATA:
* Returnparameter des BAPIs
  l_obj_type         TYPE bapiache09-obj_type,  "Objekttyp
* Objektschlüssel erhält vom BAPI die Belegidentifikation:
* NNNNNNNNNNYYYYBBBB  N = Belegnummer, Y = GJahr, B = Buchungskreis
  l_obj_key          TYPE bapiache09-obj_key,   "Objektschlüssel
  l_obj_sys          TYPE bapiache09-obj_sys,   "log. System
 
 
* Belegkopf
  ls_documentheader  TYPE bapiache09,
 
 
* Debitorenposition
  lit_accountrec     TYPE TABLE OF bapiacar09,
  ls_accountrec      TYPE bapiacar09,
 
 
* Steuerzeilen
  lit_accounttax     TYPE TABLE OF bapiactx09,
  ls_accounttax      TYPE bapiactx09,
 
 
* Betragsinformationen
  lit_currencyamount TYPE TABLE OF bapiaccr09,
  ls_currencyamount  TYPE bapiaccr09,
 
 
* Meldungen des BAPI's
  lit_return         TYPE TABLE OF bapiret2,
  lit_return_all     TYPE TABLE OF bapiret2.
 
 
DATA:
  l_itemno           TYPE posnr_acc.           "Postionsnummer (s.u.)
 
 
* Steuerdaten
DATA:
  lit_mwdat TYPE TABLE OF rtax1u15,
  ls_mwdat  TYPE rtax1u15.
 
 
*-----------------------------------------------------------------------
* Initialisierung
*-----------------------------------------------------------------------
CLEAR: lit_accountgl[],
       lit_accounttax[],
       lit_accountrec[],
       lit_currencyamount[],
       lit_return[].
 
 
*-----------------------------------------------------------------------
* Steuerdaten holen
*-----------------------------------------------------------------------
 
 
DATA(lv_kalk) = wrbtr. "* -1.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
  EXPORTING
    i_bukrs = bukrs
    i_mwskz = mwskz
    i_waers = waers
    i_wrbtr = lv_kalk
  TABLES
    t_mwdat = lit_mwdat
  EXCEPTIONS
    OTHERS  = 16.
 
 
IF sy-subrc NE 0.
*   Fehlerbehandlung
ELSE.
  READ TABLE lit_mwdat INTO ls_mwdat INDEX 1.
ENDIF.
 
 
 
 
*-----------------------------------------------------------------------
* Positionsnummer (fängt bei 1 an und wird pro Belegpos. um 1 inkr.)
* Hinweis: Es können auch 10er Schritte verwendet werden, wichtig ist
*          nur eins: Die Einträge der Tabellen l_accountgl und
*          l_currencyamount finden über den jeweiligen Inhalt des Felds
*          itemno_acc 'zueinander', d.h. anders ausgedrückt:
*          Für jede Belegposition muss jeweils ein Eintrag in den
*          genannten Tabellen mit identischer itemno_acc aufgenommen
*          werden.
*-----------------------------------------------------------------------
l_itemno = 1.
 
 
*-----------------------------------------------------------------------
* Belegkopf   IDOC E1BPACHE09
*-----------------------------------------------------------------------
CLEAR ls_documentheader.
ls_documentheader-bus_act    = 'RFBU'.     "Vorgang (fix)
ls_documentheader-username   = sy-uname.   "Belegerfasser
ls_documentheader-comp_code  = bukrs.      "Buchungskreis
ls_documentheader-doc_date   = sy-datum.   "Belegdatum
ls_documentheader-pstng_date = sy-datum.   "Buchungsdatum
ls_documentheader-ref_doc_no = sy-datum && `/` && sy-uzeit.      "Referenznummer
ls_documentheader-doc_type   = blart.      "Belegart
 
 
*-----------------------------------------------------------------------
* 1. Belegposition (Haben - Debitor)   IDOC E1BPACAR09
*-----------------------------------------------------------------------
CLEAR: ls_accountrec, ls_currencyamount.
ls_accountrec-itemno_acc     = l_itemno.   "Positionsidentifier
ls_accountrec-customer       = kunnr.      "Debitor (Soll)
ls_accountrec-tax_code       = mwskz.
ls_accountrec-sp_gl_ind      = 'A'.        " Sonderhauptbuchkennzeichen (Debitor)
ls_accountrec-item_text      = sgtxt.      "Belegtext
ls_accountrec-alloc_nmbr     = zuonr.      "Zuordnung
 
 
* Betragssegment zur Sachkontenposition 1 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountrec-itemno_acc.
ls_currencyamount-curr_type  = curtp00.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = wrbtr * -1.          "Soll = positiv, Haben = negativ
ls_currencyamount-amt_base   = wrbtr * -1.          "Soll = positiv, Haben = negativ
ls_currencyamount-tax_amt    = ls_mwdat-wmwst * -1. "Steuerbetrag muss mitgegeben werden(!!!)
 
 
APPEND: ls_accountrec     TO lit_accountrec,
        ls_currencyamount TO lit_currencyamount.
 
 
* Hier wird beim Währungstyp 10 (Hauswährung) die gleiche Währung und der gleiche Betrag 
* wie beim Typ 00 (Belegwährung) übergeben. Natürlich können hier auch unterschiedliche
* Währungen und Beträge verwendet werden.
ls_currencyamount-curr_type  = curtp10.
APPEND ls_currencyamount TO lit_currencyamount.
 
 
*-----------------------------------------------------------------------
* 2. Belegposition (Soll - Sachkonto)   E1BPACGL09
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc      = l_itemno.
ls_accountgl-gl_account      = hkonth.
*ls_accountgl-costcenter      = kostl.
ls_accountgl-item_text       = sgtxt.
*ls_accountgl-tax_code        = mwskz.
ls_accountgl-alloc_nmbr      = zuonr.
 
 
* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-curr_type  = curtp00.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = wrbtr.         "Soll = positiv, Haben = negativ
ls_currencyamount-amt_base   = wrbtr.         "Soll = positiv, Haben = negativ
 
 
APPEND: ls_accountgl      TO lit_accountgl,
        ls_currencyamount TO lit_currencyamount.
 
 
ls_currencyamount-curr_type  = curtp10.
APPEND ls_currencyamount TO lit_currencyamount.
 
 
 
 
*-----------------------------------------------------------------------
* 2. Belegposition (Haben - Sachkonto Steuer mit MVA) - Nicht Steuer, sondern GL
* IDOC E1BPACGL09
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accountgl, ls_currencyamount.
ls_accountgl-itemno_acc      = l_itemno.
ls_accountgl-gl_account      = '3300000000'.
ls_accountgl-item_text       = sgtxt.
ls_accountgl-acct_key        = 'MVA'.
ls_accountgl-tax_code        = mwskz.
ls_accountgl-alloc_nmbr      = zuonr.
 
 
* Betragssegment zur Sachkontenposition 2 mit identischem Identifier:
ls_currencyamount-itemno_acc = ls_accountgl-itemno_acc.
ls_currencyamount-curr_type  = curtp00.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = ls_mwdat-wmwst.         "Soll = positiv, Haben = negativ
ls_currencyamount-amt_base   = ls_mwdat-wmwst.         "Soll = positiv, Haben = negativ
 
 
APPEND: ls_accountgl      TO lit_accountgl,
        ls_currencyamount TO lit_currencyamount.
 
 
ls_currencyamount-curr_type  = curtp10.
APPEND ls_currencyamount TO lit_currencyamount.
 
 
*-----------------------------------------------------------------------
* Steuerzeile (Haben)   IDOC E1BPACTX09
*-----------------------------------------------------------------------
ADD 1 TO l_itemno.
CLEAR: ls_accounttax, ls_currencyamount.
ls_accounttax-itemno_acc     = l_itemno.
ls_accounttax-gl_account     = '2021100000'.
ls_accounttax-tax_code       = mwskz.
ls_accounttax-tax_rate       = ls_mwdat-msatz.
ls_accounttax-cond_key       = ls_mwdat-kschl.
 
 
ls_currencyamount-itemno_acc = ls_accounttax-itemno_acc.
ls_currencyamount-curr_type  = curtp00.
ls_currencyamount-currency   = waers.
ls_currencyamount-amt_doccur = ls_mwdat-wmwst * -1.
ls_currencyamount-amt_base   = ls_mwdat-kawrt * -1.
 
 
APPEND: ls_accounttax     TO lit_accounttax,
        ls_currencyamount TO lit_currencyamount.
 
 
ls_currencyamount-curr_type  = curtp10.
APPEND ls_currencyamount TO lit_currencyamount.
 
 
 
 
*
BREAK dl-laeller.
 
 
*-----------------------------------------------------------------------
* BAPI-Aufruf
*-----------------------------------------------------------------------
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
    documentheader    = ls_documentheader
  IMPORTING
    obj_type          = l_obj_type
    obj_key           = l_obj_key
    obj_sys           = l_obj_sys
  TABLES
    accountgl         = lit_accountgl
    accountreceivable = lit_accountrec
*   ACCOUNTPAYABLE    =
    accounttax        = lit_accounttax
    currencyamount    = lit_currencyamount
*   CRITERIA          =
*   VALUEFIELD        =
*   EXTENSION1        =
    return            = lit_return
*   PAYMENTCARD       =
*   CONTRACTITEM      =
*   EXTENSION2        =
*   REALESTATE        =
*   ACCOUNTWT         =
  .
COMMIT WORK.
 
 
 
 
*-----------------------------------------------------------------------
* BAPI Meldungen ausgeben
*-----------------------------------------------------------------------
IF NOT lit_return[] IS INITIAL.
  CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
    TABLES
      i_bapiret2_tab = lit_return.
ENDIF.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Weiterlesen

Sachkontenverzeichnis im ALV mit mehrspachigen Texten

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

Der nachfolgende Report erstellt ein Sachkontenverzeichnis im ALV-Grid, wobei ggf. auch Texte in verschiedenen Spachen nebeneinander ausgegeben werden können. Dies erleichtert z.B. das Übersetzen bzw. die Kontrolle der verschiedenen Texte in internationalen SAP-Installationen/Projekten. Zudem ist die ALV-Liste doppelklick-sensitiv, d.h. es kann vor hier direkt in die Sachkontenpflege zentral (FS00) angesprungen werden.

 

Quelltext:

 

 

**********************************************************************
** REPORT  Z_GL_LIST
*--------------------------------------------------------------------*
** AUTHOR:             
** LAST UPDATE:        
** DEVELOPMENT REQUEST:   
**
**********************************************************************
** CONTENT DESCRIPTION
*--------------------------------------------------------------------*
*  List of accounts with texts in different languages
*                   :
*
**********************************************************************
** CHANGE HISTORY
*--------------------------------------------------------------------*
* DATE     | USER        | DESCRIPTION
* -------------------------------------------------------------------*
* <DATE>   | <USERNAME>  | <short description of change>
* <DATE>   | <USERNAME>  | <short description of change>
*    :     |     :       |                 :
*
**********************************************************************

REPORT  z_gl_list.

**********************************************************************
** DECLARATIONS
**********************************************************************

* TYPE DECLARATIONS
*--------------------------------------------------------------------*
TYPES: BEGIN OF gt_acclist,
         ktopl TYPE ska1-ktopl,
         saknr TYPE ska1-saknr,
         bilkt TYPE ska1-bilkt,
         bukrs TYPE skb1-bukrs,
         altkt TYPE skb1-altkt,
         txt20_e TYPE skat-txt20,
         txt50_e TYPE skat-txt50,
         txt20_d TYPE skat-txt20,
         txt50_d TYPE skat-txt50,
         txt20_f TYPE skat-txt20,
         txt50_f TYPE skat-txt50,

 * add textfields for addt'l languages here...
         ktoks TYPE ska1-ktoks,
         xbilk TYPE ska1-xbilk,
         mwskz TYPE skb1-mwskz,
         mitkz TYPE skb1-mitkz,
         xopvw TYPE skb1-xopvw,
         xmwno TYPE skb1-xmwno,
         fstag TYPE skb1-fstag,

*             add addt'l fields here...
       END OF gt_acclist.

* CONSTANTS
*--------------------------------------------------------------------*

* INTERNAL TABLES
*--------------------------------------------------------------------*
DATA: git_acclist TYPE TABLE OF gt_acclist.

* STRUCTURES
*--------------------------------------------------------------------*
DATA: gs_ska1 TYPE ska1,
      gs_skb1 TYPE skb1,
      gs_skat TYPE skat.
DATA: gs_acclist TYPE gt_acclist.

* VARIABLES
*--------------------------------------------------------------------*
TYPE-POOLS: slis.
DATA:   g_repid   LIKE   sy-repid.
DATA:    git_fieldcat   TYPE   slis_t_fieldcat_alv,
  wa_feldkatalog     TYPE   LINE OF slis_t_fieldcat_alv,
  gs_layout    TYPE   slis_layout_alv,
  wa_aktuelle_zeile  LIKE LINE OF git_acclist
  .


* SELECTION CRITERIA (PARAMETERS AND SELECT-OPTIONS)
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.
SELECT-OPTIONS: so_ktopl FOR gs_ska1-ktopl OBLIGATORY MEMORY ID kpl,
                so_saknr FOR gs_ska1-saknr,
                so_bukrs FOR gs_skb1-bukrs MEMORY ID buk.
SELECTION-SCREEN END OF BLOCK b01.


**********************************************************************
** EVENTS
**********************************************************************

* START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.

  SET PARAMETER ID 'BUK' FIELD so_bukrs-low.
  SET PARAMETER ID 'KPL' FIELD so_ktopl-low.

  PERFORM read_glmaster_records.

  IF git_acclist[] IS INITIAL.
*   No list generated
    CALL FUNCTION 'POPUP_NO_LIST'.
  ELSE.
*   ALV-Ouput
    PERFORM display_alv.
  ENDIF.

**********************************************************************
** FORMS
**********************************************************************

*&---------------------------------------------------------------------*
*&      Form  READ_GLMASTER_RECORDS
*&---------------------------------------------------------------------*
*       Selection of GL master records and filling of internal table
*----------------------------------------------------------------------*
FORM read_glmaster_records .

  DATA: ls_skat TYPE skat.

  SELECT * FROM ska1 INTO CORRESPONDING FIELDS OF gs_acclist
         WHERE ktopl IN so_ktopl
           AND saknr IN so_saknr.
    SELECT * FROM skb1 INTO CORRESPONDING FIELDS OF gs_acclist
         WHERE saknr = gs_acclist-saknr
           AND bukrs IN so_bukrs.
      SELECT SINGLE * FROM skat INTO ls_skat
             WHERE ktopl = gs_acclist-ktopl
               AND saknr = gs_acclist-saknr
               AND spras = 'EN'.
      IF sy-subrc = 0.
        gs_acclist-txt20_e = ls_skat-txt20.
        gs_acclist-txt50_e = ls_skat-txt50.
      ELSE.
        gs_acclist-txt20_e = gs_acclist-txt50_e = 'No English text'.
      ENDIF.
      SELECT SINGLE * FROM skat INTO ls_skat
             WHERE ktopl = gs_acclist-ktopl
               AND saknr = gs_acclist-saknr
               AND spras = 'DE'.
      IF sy-subrc = 0.
        gs_acclist-txt20_d = ls_skat-txt20.
        gs_acclist-txt50_d = ls_skat-txt50.
      ELSE.
        gs_acclist-txt20_d = gs_acclist-txt50_d = 'K. deutscher Text'.
      ENDIF.
      SELECT SINGLE * FROM skat INTO ls_skat
             WHERE ktopl = gs_acclist-ktopl
               AND saknr = gs_acclist-saknr
               AND spras = 'FR'.
      IF sy-subrc = 0.
        gs_acclist-txt20_f = ls_skat-txt20.
        gs_acclist-txt50_f = ls_skat-txt50.
      ELSE.
        gs_acclist-txt20_f = gs_acclist-txt50_f = 'No french text'.
      ENDIF.

 *   Repeat for addt'l languages...
      APPEND gs_acclist TO git_acclist.
    ENDSELECT.
  ENDSELECT.

ENDFORM.                    " READ_GLMASTER_RECORDS

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       Give internal table as ALV
*----------------------------------------------------------------------*
FORM display_alv .

* Feldkatalog fuellen.
  PERFORM feldkatalog_fuellen.
* Layout bestimmen.
  PERFORM layout_allg_build USING gs_layout.

  g_repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = g_repid
      i_callback_user_command = 'HANDLE_DOUBLE_CLICK'
*     i_grid_title            = sy-title
      i_save                  = 'U'
      it_fieldcat             = git_fieldcat
      is_layout               = gs_layout
    TABLES
      t_outtab                = git_acclist.
  IF sy-subrc <> 0.
    MESSAGE e600(fr) WITH 'Error in ALV generation'.
  ENDIF.


ENDFORM.                    " DISPLAY_ALV

*---------------------------------------------------------------------
* Unterprogramm fuer Reaktion auf Doppelklick
*---------------------------------------------------------------------
FORM handle_double_click USING i_ucomm
    i_selfield TYPE slis_selfield.

  CASE i_ucomm.
    WHEN '&IC1'. "bei Doppelklick
      READ TABLE git_acclist INTO wa_aktuelle_zeile
        INDEX i_selfield-tabindex.
      PERFORM maintain_glaccount USING wa_aktuelle_zeile-bukrs
                                       wa_aktuelle_zeile-saknr.
  ENDCASE.
ENDFORM.  "REAKTION_AUF_DOPPELKLICK

*---------------------------------------------------------------------
* Unterprogramm fuer Layoutangaben
*---------------------------------------------------------------------
FORM layout_allg_build USING ls_layout TYPE slis_layout_alv.
  ls_layout-zebra  = 'X'.
  ls_layout-colwidth_optimize = 'X'.
ENDFORM.  "layout_allg_build.


*---------------------------------------------------------------------
*  Unterprogramm fuer das Fuellen des Feldkatalogs
*---------------------------------------------------------------------
FORM feldkatalog_fuellen.

  DATA: ls_dfies TYPE dfies.

  CLEAR git_fieldcat.

  DEFINE add_field_2_cat.
    clear wa_feldkatalog.
    wa_feldkatalog-fieldname  = &1.
    wa_feldkatalog-ref_fieldname  = &3.
    wa_feldkatalog-ref_tabname  = &2.
    append wa_feldkatalog to git_fieldcat.
  END-OF-DEFINITION.

  add_field_2_cat:
    'KTOPL' 'SKA1' 'KTOPL',
    'SAKNR' 'SKA1' 'SAKNR',
    'BILKT' 'SKA1' 'BILKT',
    'BUKRS' 'SKB1' 'BUKRS',
    'ALTKT' 'SKB1' 'ALTKT',
    'TXT20_E' 'SKAT' 'TXT20',
    'TXT50_E' 'SKAT' 'TXT50',
    'TXT20_D' 'SKAT' 'TXT20',
    'TXT50_D' 'SKAT' 'TXT50',
    'TXT20_F' 'SKAT' 'TXT20',
    'TXT50_F' 'SKAT' 'TXT50',

 *     add your addt'l text fields here
    'KTOKS' 'SKA1' 'KTOKS',
    'XBILK' 'SKA1' 'XBILK',
    'MWSKZ' 'SKB1' 'MWSKZ',
    'MITKZ' 'SKB1' 'MITKZ',
    'XOPVW' 'SKB1' 'XOPVW',
    'XMWNO' 'SKB1' 'XMWNO',
    'FSTAG' 'SKB1' 'FSTAG'.

* add your addt'l field here...

ENDFORM.  "feldkatalog_fuellen.

*&---------------------------------------------------------------------*
*&      Form  MAINTAIN_GLACCOUNT
*&---------------------------------------------------------------------*
*       Maintain GL Acct (CALL TRANSACTION)
*----------------------------------------------------------------------*
*      -->P_BUKRS  Company Code
*      -->P_SAKNR  G/L AccountNo
*----------------------------------------------------------------------*
FORM maintain_glaccount  USING    p_bukrs TYPE bukrs
                                  p_saknr TYPE saknr.

* NOTE: doesn't work when tree-display is activated

  SET PARAMETER ID 'BUK' FIELD p_bukrs.
  SET PARAMETER ID 'SAK' FIELD p_saknr.
  CALL TRANSACTION 'FS00' AND SKIP FIRST SCREEN.

ENDFORM.                    " MAINTAIN_GLACCOUNT

Weiterlesen

Die Gebote der guten Programmierung

17. Februar 2011 , Geschrieben von sapmandoo Veröffentlicht in #Basis-Entwicklung allg.

Teile Dein Wissen oder 'tue Gutes und rede darüber...'!

Du hast einen bahnbrechenden Funktionsbaustein oder eine tolle Object-Klasse geschrieben, die zu schön ist, um unbeachtet zu versauern? Teile Deinen Schatz, in dem Du Ihn in die ...Reuse-Library einstellst (Transaktion SLIB bzw. SE83). Vergiss dabei die Dokumentation nicht, aber die hast Du ja sowieso schon erstellt, gelle? Du kannst hier aber auch Texte, Internetlinks oder sonst irgendwelche Dateien einstellen, von denen Du glaubst, dass sie auch andere interessieren könnten. Nimm aktiv an einschlägigen Internetforen teil (z.B. abapforum.com), teile Dein Wissen und profitiere vom Expertenwissen anderer.

 

Sei schlau, nutze ALV...!

Sofern es für die Art der Ausgabe Deines Programmes sinnvoll ist, nutze die ALV-Funktionsbausteine (REUSE_ALV...). In der Reuse-Library findet Du den Punkt 'ALV für Faulpelze', hierunter findest Du umfassendes Vorlage- und Anschauungsmaterial. Für Protokolle und Logs kann es sinnvoll sein, die Standard-Anwendungslog-Funktionalitäten zu nutzen (vgl. Demo Reports SBAL_DEMO*). Auch hierzu findest Du entsprechende Reuse-Komponenten.

 

Sei geschwätzig - Reden bzw. Schreiben ist Gold, Schweigen ist Blech...!

Informiere den Anwender über Dein Tun z.B. mit entsprechenden Fortschrittsmeldungen (FuBa SAPGUI_PROGRESS_INDICATOR) und geize nicht mit Statusmeldungen (Meldungstyp S) auch bei Batch-Programmen. Gib aussagekräftige und differenzierte (Fehler-)Meldungen zurück. Dies gilt auch für Ausnahmen bei Klassen oder Funktionsbausteinen ('AN_ERROR_OCCURED' ist so hilfreich wie 'Schutzverletzung an Adresse A4711783BC5'...).

 

Sei edel, gut und insbesondere hilfreich...!

Gehe nicht davon aus, dass ein Anwender (oder Entwickler) mit einer Fehlermeldung a la 'Fehler beim Lesen der Tab. XYZ' oder ähnlichem Zeug etwas anfangen kann. Hänge hinter Deine Fehlermeldungen eine aussagekräftige Dokumentation (Langtext) und vergiss dabei den Part 'Vorgehen...' nicht.

Hinterlege eine Programmdokumentation an Deinen Programmobjekten (F1-Hilfe). Sei hierbei so detailliert und umfänglich wie nötig, d.h. im Einzelfall kann auch ein Verweis auf ein bestehendes, dem Anwenderkreis zugängliches Word-Dokument völlig ausreichend sein. Sorge dafür, dass hinter allen nicht selbsterklärenden Oberflächenobjekten (Felder, Selektionsparameter, ...) eine F1-Hilfe hängt (durch Referenz auf ein [eigenes] Datenelement mit Doku bzw. durch Ausgestaltung des Zeitpunkts AT SELECTION-SCREEN ON HELP-REQUEST).

Nutze die Gestaltungsmöglichkeiten des Selektionsbildes, die ABAP bietet z.B. Subscreens, TabStrips usw. (vgl. SELECTION-SCREEN...).

Nutze die Verweisfunktion beim Gestalten Deiner Hilfetexte, z.B. aufs Glossar oder die Dokumentation von Datenelementen. Eine Auflistung aller hierbei zur Verfügung stehenden Objekte findest Du in der Reuse-Library oder auf tricktresor.de.

 

Sei hart im Nehmen, aber programmiere weich...!

Hoffe das Beste aber erwarte das Schlimmste. Frage den SY-SUBRC ab. Gehe davon aus, dass DB-Operationen auch mal schief gehen können. Informiere den Anwender in angemessener Form (vgl. Gebot 'Sei geschwätzig...').

'Verdrahte' nichts hart in Deinem Coding (IF KUNNR = '4711'.). Erstelle ggf. eigene Customizingtabellen/-objekte, die Du mit der Transaktion S_IMG_EXTENSION in den IMG an geeigneter Stelle modifikationsfrei hinzufügen und dokumentieren kannst. Hierzu findest Du eine ausführliche Anleitung in der Reuse-Library. Superprofessionell sieht auch ein Viewcluster aus (mehrstufiger Customizing-Dialog). Ein ausführliches Tutorial findest Du auf Tricktresor.de

 

Sei weltmännisch...!

Achte darauf, dass Deine Entwicklungen der Globalisierung standhalten, d.h. ggf. übersetzbar sind. Verwende deshalb keine Textliterale (WRITE: / 'Hallo Du da...'), sondern Textsymbole oder andere geeignete Objekte und achte auf Unicode-Fähigkeit.

Wenn Du eigene Tabellen kreierst, arbeite ggf. mit separaten Texttabellen (analog zum SAP-Standard, z.B. T003/T003T).

...

 

Weiterlesen
Werbung

Programmierer-Merkblatt SAP-Konsolidierung (EC-CS)

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

Programmierer-Merkblatt SAP-Konsolidierung (EC-CS).

 

 

 

Häufig benötigte Tabellen:

Name

Beschreibung

ECMCT

Summensätze

ECMCA

Einzelposten

TF100

TF101

Stammdaten Konsolidierungspositionen + Texte

TF115

TF116

Unterpositionen + Texte

TF160

TF161

TF16*

Konsolidierungseinheiten + Texte

Jahres- und versionsabhängige Daten

TF180

TF181 ff.

Konsolidierungskreise+ Texte

TF189

Zuordnung Konsolidierungseinheiten zu Kons.Kreisen

TF200 ff

Versionen

TFIN010

Integrationstabelle FI « EC-CS (Buchungskreis – Gesellschaft FI – Kons.Einheit EC-CS)

GLT3

Konsolidierungsvorbereitungsledger (Fortschreibung aus FI)

 

 

 

 

 

 

 

 

 

 

 

 

 

Nützliche Funktionsbausteine:

Name

Beschreibung

FC_GLOBAL_PARAMETERS_IMPORT

Einlesen der globalen Parameter in eigene Felder

FC_CONGR_DISMANTLE

Konsolidierungskreis in die enthaltenen Konsolidierungseinheiten auflösen (Aufruf siehe Musterprogramm)

FC_GET_ITEM_HRCHY

Positionshierarchie flach auflösen (siehe Musterprogramm)

FC_TOTALS_SELECT

Nachlesen der Summensätze (ECMCT) in eine bel. Interne Tabelle unter Verwendung von bel. Selektionskriterien

FC_AUTHORITY_CHECK

Berechtigungsprüfungen aller relevanten Konsol.Objekte

FC_ITCLG_IMPORT

Einlesen Positionshierarchie (z.B. für ALV Tree Control)

 

 

 

 

 

 

 

Typgruppen (Type-Pools):

Name

Beschreibung

FC01

Strukturen und Tabellentypen für die EC-CS Tabellen

FC02

Typen für Status, Versionen, Abschlußarten

 

 

 

Nachrichtenklassen:

Name

Beschreibung

G0, G00, G01, GK

Nachrichten der SAP-Konsolidierung

 

 

 

 

 

Programmvorlagen

Name

Beschreibung

ZDEMOECCS

Musterprogramm für häufig verwendete EC-CS Tabellen, FuBa’s etc.

 

 
   
   

 

Quelltext ZDEMOECCS

 

*&---------------------------------------------------------------------*
*& Report  ZDEMOECCS                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*& Demoprogramm für häufig benötigte Tabellen und FuBas im EC-CS       *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  zdemoeccs.


*&---------------------------------------------------------------------*
TABLES: ecmct,                         "Summensätze EC-CS
        tf100,                         "Stammdaten Position
        tf101,                         "Positionstexte
        tf181.                         "Texte Kons.Kreise

*&---------------------------------------------------------------------*
TYPE-POOLS: fc01.

*&---------------------------------------------------------------------*
DATA ld_dimen TYPE  fc_dimen.
DATA ld_congr TYPE  fc_congr.
DATA ld_bunit TYPE  fc_bunit.
DATA ld_itclg TYPE  fc_itclg.
DATA ld_rldnr TYPE  fc_rldnr.
DATA ld_rvers TYPE  fc_rvers.
DATA ld_ryear TYPE  fc_ryear.
DATA ld_perid TYPE  fc_perid.

DATA: i_tf160 TYPE fc01_t_tf160.
DATA: i_tf161 TYPE fc01_t_tf161.

DATA: wa_tf160 TYPE fc01_s_tf160.
DATA: wa_tf161 TYPE fc01_s_tf161.

DATA: lt_item_hrchy LIKE fc03itab03 OCCURS 0 WITH HEADER LINE.

DATA: ecmct_saldo LIKE ecmct-kslvt.

*&---------------------------------------------------------------------*
PARAMETERS: pa_congr LIKE tf180-congr, "Konsolidierungskreis
            pa_itclg LIKE tf100-itclg, "Positionskatalog
            pa_sitem LIKE tf100-item,  "Summenposition
            pa_rvers LIKE tf200-rvers, "Version
            pa_ryear TYPE fc_ryear,    "Geschäftsjahr
            pa_perid TYPE fc_perid.    "Periode

*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*

* Selektionsbild mit globalen Parametern vorbelegen - immer cool!

  CALL FUNCTION 'FC_GLOBAL_PARAMETERS_IMPORT'
    IMPORTING
      i_dimen = ld_dimen
      i_itclg = ld_itclg
      i_rldnr = ld_rldnr
      i_rvers = ld_rvers
      i_ryear = ld_ryear
      i_perid = ld_perid.

  pa_itclg = ld_itclg.
  pa_rvers = ld_rvers.
  pa_ryear = ld_ryear.
  pa_perid = ld_perid.


*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*&---------------------------------------------------------------------*

* Prüfen, ob im Parameter "Summenposition" auch wirklich eine
* gültige Summenposition eingegeben wurde...

  IF NOT pa_sitem IS INITIAL.
    SELECT SINGLE * FROM  tf100        "Stammdaten zur Pos. lesen
           WHERE  itclg  = pa_itclg
           AND    item   = pa_sitem.
    IF sy-subrc NE 0.
      MESSAGE e111(gk) WITH pa_sitem.  "Position gibt's nicht
    ELSE.
*     TF100-ITCGY = Positionsart  1 = Wertpos., 2 = Summenpos.
      IF tf100-itcgy NE '2'.           "Keine Summenpos.
        MESSAGE e195(g00) WITH pa_sitem pa_itclg.
      ENDIF.
    ENDIF.

  ENDIF.


* Berechtigungsprüfung - hier können alle möglichen Felder
* abgefragt werden

* Bspw. Positionsplan
  CALL FUNCTION 'FC_AUTHORITY_CHECK'
    EXPORTING
      e_id                    = 'ITCLG'
*     E_DIMEN                 = ''
*     E_CONGR                 = ''
*     E_BUNIT                 = ''
*     E_RVERS                 = ''
*     E_CACTT                 = ''
*     E_CACTI                 = ''
*     E_ACTVT                 = '03'   "Anzeigeberechtigung
      e_itclg                 = pa_itclg
*     E_FIELD                 = ''
*     ET_BUNIT                =
*     ET_RA_BUNIT             =
*   IMPORTING
*     I_RETURNCODE            =
*   EXCEPTIONS
*     EXC_NO_PERMISSION       = 1
*     EXC_WRONG_USAGE         = 2
*     OTHERS                  = 3
            .
  IF sy-subrc <> 0.
*   Keine Berechtigung für ...
    MESSAGE e051(gk) WITH 'Anzeigen' 'Positionsplan' pa_itclg.
  ENDIF.


*&---------------------------------------------------------------------*
START-OF-SELECTION.
*&---------------------------------------------------------------------*

* Konsolidierungskreis in seine Bestandteile (sprich: Kons.Einheiten)
* zerlegen.

  CALL FUNCTION 'FC_CONGR_DISMANTLE'
    EXPORTING
      e_dimen  = ld_dimen
      e_congr  = pa_congr
      e_rvers  = ld_rvers
      e_ryear  = ld_ryear
      e_perid  = ld_perid
      e_tf160  = 'X'
      e_tf161  = 'X'
    IMPORTING
      it_tf160 = i_tf160               "Tabelle mit den Kons.Einheiten
      it_tf161 = i_tf161.              " + Texte gleich dazu !!


* Positionshierarchie erstmal komplett einlesen

  CALL FUNCTION 'FC_GET_ITEM_HRCHY'
    EXPORTING
      e_itclg            = pa_itclg
      e_complete         = 'X'         "X = alles auflösen,
                                       "space = nur bis zur nächsten
                                       "Hierarchiestufe
    TABLES
      t_item_hrchy       = lt_item_hrchy.

* Dann Nur die Positionen übrig lassen, die zur eingegebenen
* Summenposition gehören
  DELETE lt_item_hrchy WHERE sumitem NE pa_sitem.

* Ausgabe Konsolidierungseinheiten

  SELECT SINGLE * FROM  tf181          "Text zum Kons.Kreis holen
         WHERE  langu  = sy-langu      "Hätte man sich auch vom FB
         AND    dimen  = ld_dimen      "FC_CONGR_DISMANTLE
         AND    congr  = pa_congr.     "besorgen lassen können

  WRITE: / 'Zum Konsolidierungskreis',
           pa_congr,
           tf181-txtmi,
           'gehören folgende Einheiten:'.

  LOOP AT i_tf161 INTO wa_tf161.
    WRITE: / wa_tf161-bunit,
             wa_tf161-txtmi.           "Mitteltext
  ENDLOOP.


  SKIP 2.


* Ausgabe Positionen

  SELECT SINGLE * FROM  tf101
         WHERE  langu  = sy-langu
         AND    itclg  = pa_itclg
         AND    item   = pa_sitem.

  WRITE: / 'Zur Summenposition',
           pa_sitem,
           tf101-txtmi,
           'gehören folgende Wertpositionen:'.

  LOOP AT lt_item_hrchy.
    SELECT SINGLE * FROM  tf101
       WHERE  langu  = sy-langu
       AND    itclg  = pa_itclg
       AND    item   = lt_item_hrchy-item.
    WRITE: / lt_item_hrchy-item,
             tf101-txtmi.
  ENDLOOP.


* Nachlesen und Ausgabe Saldo

  NEW-PAGE.
  WRITE: / 'Zu den selektierten Kons.Einheiten und Positionen',
         / 'sind folgende Summensätze vorhanden:'.
  SKIP 3.

* Geht auch mit FuBa FC_TOTALS_SELECT
* Aufrufbeispiel siehe FB-Doku und Report FICLST00
* Hier mal eine händische Selektion...

  SELECT * FROM  ecmct
    FOR ALL ENTRIES IN lt_item_hrchy
             WHERE ritem = lt_item_hrchy-item
               AND rldnr   = ld_rldnr
               AND rrcty   = '0'
               AND rvers   = pa_rvers
               AND ryear   = pa_ryear
               AND rdimen  = ld_dimen
               AND ritclg  = pa_itclg.

*   Nachgucken, ob die Kons.Einheit angefordert wurde...
    READ TABLE i_tf160 WITH KEY bunit = ecmct-rbunit
         TRANSPORTING NO FIELDS.
    CHECK sy-subrc = 0.

*   Addition der Werte in Konzernwährung (KSLxx)
    ADD ecmct-ksl01 FROM 1 TO pa_perid GIVING ecmct_saldo.

    WRITE: / ecmct-rldnr,
             ecmct-rvers,
             ecmct-ryear,
             ecmct-rdimen,
             ecmct-rbunit,
             ecmct-ritclg,
             ecmct-ritem,
             ecmct-plevl,
             ecmct_saldo.


  ENDSELECT.

Weiterlesen

Bilanz- und GuV-Struktur von einem System ins andere kopieren (ohne KTW)

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

Bilanz- und GuV-Struktur von einem System ins andere kopieren (ohne KTW)

 

Quellsystem:

Transaktion FSO2 aufrufen. Die jeweilige Bilanzstruktur auswählen. Dann im Kommandofeld (oben links) folgende Zeichen (011Z) eingeben und mit ENTER bestätigen. Dann wird Dir die Bilanzstruktur als Coding angezeigt. Dann kannst Du über Hilfsmittel à Download das Coding in eine Textdatei sichern.

 

 image002.png

 

 

Zielsystem:

Mit Transaktion OB58 die Bezeichnung der Bilanzstruktur anlegen (Neue Einträge). Dann mit Transaktion FSO2 und 011Z im Kommandofeld die Textdatei per Upload importieren. Dann sollte die Bilanzstruktur vorhanden sein.

 

image004.png

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