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

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 Validierung 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

 

FORM GET_EXIT_TITLES

Block einfügen

 exits-name = 'U100'.
exits-param = c_exit_param_class.
exits-title = ''. "<---insert appropriate text here
append exits.

Block einfügen

 form u100 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.

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

 

 

 

Diesen Post teilen

Repost 0
Um über die neuesten Artikel informiert zu werden, abonnieren:

Kommentiere diesen Post