Donnerstag, 5. April 2012
19:53 Uhr
19:53 Uhr
SAP Query: Einzelpostenliste KAMV für Umbuchung in Planversion
Ausgangslage:
Bei der Kopie der Istdaten in eine Plankopie werden alle CO Belege mit Vorgang KAMV (Manuelle Kostenverrechnung) nicht mit in die Planversion kopiert. Diese manuellen Kostenverrechnungen (Transaktion KB15N zum Erfassen bzw. KB17N zur Stronierung) müssen entsprechend in der Planversion nacherfasst werden. Über die Transaktion KB16N können entsprechende Belege angezeigt werden. Typische Geschäftsvorfälle sind hier bspw. die interne Leistungsverrechnung wie Porto, Kopierkosten oder auch Servicestunden.
In der Tabelle COEP sind diese Buchungen über den Vorgang KAMV selektierbar, allerdings ist hierbei darauf zu achten, dass die Buchungen sowohl mit positiven als auch negativen Vorzeichen gespeichert sind. Je nachdem müssen die Sender und Empfänger entsprechend belastet bzw. entlastet werden.
Zielvorgabe:
Abhängig vom Wert soll bei positiven Werten (Aufwandsbuchung) die Objektnummer als Empfänger (NEU) und das Partnerobjekt als Sender (ALT) ausgegeben werden. Bei negativen Werten sollen Sender / Empfänger entsprechend vertauscht werden. Der Wert soll in jeden Fall mit positiven Kennzeichen ausgegeben werden. Ferner ist darauf zu achten, dass Kostenarten des Typs 42 (Umlage) durch solche des Typs 41 (Gemeinkostenzuschläge) ersetzt werden sollen. Entsprechend sollte auch die Kostenartenbezeichnung und der Kostenartentyp mit ausgegeben werden.
Entsprechend kann die Tabelle COEP als Grundlage einer SAP Query verwendet werden. Als optionale Bereicherung um die Bezeichnung und die Kostenartentypen können hier auch die Tabellen CSKU und CSKB mit der Tabelle COEP betrachtet werden.
Infoset definieren
Tabellen:
COEP - CO-Objekt: Einzelposten periodenbezogen
CSKB - Kostenarten (Kostenrechnungskreisabhängige Daten)
CSKU - Kostenartentexte
Verknüpfungen:
Folgende Felder werden hierbei miteinander verknüpft.
COEP-KSTAR <-> CSKB-KSTAR
COEP-KSTAR CSKU-KSTAR
Bei der Verknüpfung der Tabelle COEP und CSKB handelt es sich um einen "left outer join". Diese Verknüpfungsart kann durch die rechte Maustaste auf "left outer join" genutzt werden. Diese kann genutzt werden, um auch Belege anzugeben, wenn die Verknüpfung keine übereinstimmende Werte ergibt, bspw. weil keine Bezeichnung in der Kostenart ausgegeben werden.
In der Feldgruppe können die Werte aus den einzelnen Tabellen übernommen werden. Für dieses Beispiel werden in der Feldgruppe 01 alle Felder der Tabelle COEP übernommen. Ergänzend dazu werden als Feldgruppe 2 die Bezeichnung aus der Tabelle CSKU (CSKU-KTEXT) und in der Feldgruppe 3 der Kostenartentyp (CSKB-KATYP) und Datum gültig bis (CSKB-DATBI) übernommen.
Nun kann im weiteren die Query definiert werden.
Die Felder werden hier in der Reihenfolge angeben, wie diese dann auch in der Query ausgegeben werden sollen:
COEP - CO-OBjekt: Einzelposten periodenbezogen
Kostenrechnungskreis (S) COEP-KOKRS
Be-/Entlastungskennzeichen (L,S) COEP-BEKNZ
Geschäftsjahr (L,S) COEP-GJAHR
CSKB - Kostenarten (Kostenrechnungskreisabhängige Daten)
Kostenartentyp (L) CSKB-KATYP
Datum gültig bis (S) CSKB-DATBI
Gültig bis wird genommen, sofern es Änderungen innerhalb der CSKB gab um zu vermeiden, dass hier zwei Werte ausgegeben werden
COEP - CO-OBjekt: Einzelposten periodenbezogen
Vorgang CO (L,S) COEP-VRGNG
Belegnummer (L) COEP-BELNR
Objektnummer (L,S) COEP-OBJNR
Kostenart (L,S) COEP-KSTAR
CSKU - Kostenartentexte
Allgemeine Bezeichnung (L) CSKU-KTEXT
COEP - CO-OBjekt: Einzelposten periodenbezogen
Wert gesamt in Kostenrechnungskreiswährung (L) COEP-WKGBTR
Partnerobjekt (L,S) COEP-PAROB
Soweit wäre diese Query beinahe identisch zur Auslesung der Tabelle COEP bspw. mit SE16.
Um nun aber abhängig vom Wert die Daten aufzubereiten wird hier mit "lokalen Feldern" vergleichbar zur Erweiterung der Query Stammdaten CO Kontrolle Verantwortliche genommen.
Hierzu gehen wir nicht in die Grundliste der Query (wo auch das Layoutdesign gepflegt wird) sondern wechseln innerhalb der Querypflege mit nächstes Bild (F6) auf die Feldauswahl der Query.
Über
BEARBEITEN->KURZBEZEICHNUNG
kann für die einzelnen Felder eine Kurzbezeichnung eingestellt werden.
Nun werden rechts neben den Datenfeldern Eingabefelder für die Kurzbezeichnung angegeben.
Hier erhalten nun folgende Felder eine Kurzbezeichnung:
Innerhalb CO-Objekt: Einzelposten periodenbezogen (Tabelle COEP)
Wert gesamt in Kostenrechnungskreiswährung -> WERT
Objektnummer -> OBJEKT
Partnerobjekt -> PARTNER
Diese Kurzbezeichnung sind notwendig, da wir auf diese dann Bezug nehmen, wenn wir ein eiegens Feld mit einer Formel anlegen.
Dieses geht über
BEARBEITEN->LOKALES FELD->ANLEGEN
Dieses Lokale Feld wird dann in der Feldgruppe angelegt, in der wir uns gerade befinden. Elegant wäre es natürlich, wenn wir im Infoset eine entsprechende leere Feldgruppe definiert hätten, es geht aber auch ohne.
Insgesamt werden hier drei Felder angelegt Z_ALT für dem Semder (Soll) Z_NEU für den Empfänger (Haben) und Z_WERT für den eigentlichen Wert.
Die lokalen Felder haben hierbei dann folgende Eigenschaften:
a) Feld Z_ALT
Das lokale Feld hat folgende Eigenschaften:
Kurzbezeichnung ALT
Feldbezeichnung Z_ALT
Überschrift Z_ALT
Innerhalb der Sachgruppe kann un die Feldgruppe des Infoset gelegt werden. Dieses ist dann der Bereich, wo das lokale Feld angelegt worden ist.
Als Feldeigenschaften könnten wir nun Textfelder, Rechnfelder etc. hinterlegen. Hier geben wir jedoch die gleichen Eigenschaften wie OBJEKT. Da es sich bei Objekt und PARTNER um die Objektnummer (KS* oder OR*) handelt, ist es eigentlich egal auf welches von beiden Bezug genommen wird. Auf diese Weise werden die Eigenschaften des Tabellenfeldes vererbt. Alternativ hätte man auch Textfeld mit 20 Zeichen nehmen können.
Da nun der Sender / Empfänger abhängig vom Wert ermittelt werden soll legen wir eine Berechnungsvorschrift an. Dazu klicken wir auf "KOMPLEXE BERECHNUNG".
Nun können wir drei Bedingungen und eine sonstige Alternative angeben.
Dieses nutzen wir wie folgt:
Bedingung:
WERT > 0
Formel:
PARTNER
Ist der Wert positiv wird das Partnerobjekt als Sender genommen.
Bedingung:
WERT < 0
Formel:
OBJEKT
Ist der Wert negativ wird die Objektnummer als Sender genommen.
Sonst
WERT
Somit wird bei einer 0 der Wert ausgegeben.
b) Feld Z_NEU
Das lokale Feld hat folgende Eigenschaften:
Kurzbezeichnung NEU
Feldbezeichnung Z_NEU
Überschrift Z_NEU
Hier hat das Feld die gleichen Eigenschaften wie das Feld PARTNER.
Als Formeln wird folgende komplexe Berechnung hinterlegt:
Bedingung:
WERT > 0
Formel
OBJEKT
Bedingung
WERT < 0
PARTNER
Sonst
WERT
Im Grunde ist dieses die umgedrehte Bedingung zum Feld Z_NEU.
Damit sind Z_ALT (S) und Z_NEU (H) definiert. Für die Buchungsliste benötigen wir jedoch noch den Wert mit positiven Vorzeichen (in Excel würde hier als Formel ABS(Wert) für den absoluten Wert genommen werden.
c) Feld Z_WERT
Das lokale Feld hat folgende Eigenschaften:
Kurzbezeichnung Z_WERT
Feldbezeichnung Z_WERT
Überschrift Z_WERT
Hier hat das Feld die gleichen Eigenschaften wie das Feld WERT (entspricht CURR / Währung mit 15 Zeichen und 2 Dezimalstellen).
Als Formeln wird folgende komplexe Berechnung hinterlegt:
Bedingung
WERT < 0
Formel
- 1 * WERT
Bedingung
WERT > 0
Formel
1 * WERT
Sonst
WERT
Die so festgelegten lokalen Felder werden nun ebenfalls in der Grundliste mit als Listenfelder übergeben.
Nun kann diese Query als Grundlage für eine Umbuchung verwendet werden. Ähnlich wie bei der Tabellenauswertung wird hier
der Vorgang KAMV das Belastungs/Entlastungskennzeichen S sowie das Kalenderjahr ausgewählt.
Da jedoch eine Vielzahl von Buchungen vorhanden sind sollte diese Query noch bspw. in Access weiterverarbeitet werden.
Im Ergebnis haben wir nun folgende Query erhalten.
Be-/Entlastungskennzeichen (COEP-BEKNZ)
Geschäftsjahr (COEP-GJAHR)
Kostenartentyp (CSKB-KATYP)
Vorgang CO (COEP-VRGNG)
Belegnummer (COEP-BELNR)
Objektnummer (COEP-OBJNR)
Kostenart (COEP-KSTAR)
KOstenart Bezeichnung (CSKU-KTEXT)
Wert/KWähr (COEP-WKGBTR)
Partnerobjekt (COEP-PAROB)
Sowie unsere kundeneigene Felder
Z_ALT
Z_NEU
Z_WERT
In einer Datenbankanwendung (im Beispiel ACCESS) sind nun folgende Abfragen erforderlich.
001 Kostenart Neu
Aus der Grundliste der Query werden folgende Felder in die Abfrage übernommen:
Z_ALT
Kostenart
Wert/TWähr
Z_NEU
Hier sollte für Kostenarten des Typs 42 entsprechende Kostenarten des Typs 41 genommen werden.
Sofern es eine entsprechende Logik innerhalb der Kostenarten gibt (bspw. die Kostenarten Typ 42 beginnen mit 0815 und die korrespondierenden Kostenarten des Typs 41 beginnen mit 4711) kann hier eine passende Wenn Funktion genommen werden.
Beispiel:
Unter der Annahme, dass die Kostenarten achtstellig sind kann, sofern erforderlich die Kostenart wie folgt ermittelt werden.
NeuKA-1: Wenn(Links([Kostenart];4)="4711";"0815" & Rechts([Kostenart];4);0)
Gibt es daneben noch eine Kostenart die direkt ersetzt werden soll bspw. 55555590 durch 55555580 lautet die zweite Bedingen:
NeuKA-2: Wenn([Kostenart]="55555590";55555580;0)
Entsprechend können hier auch weitere "Austauschsfunktionen ermittelt werden.
Als letzter Punkt sollte auf dieser Kostenarten Bezug genommen werden, oder die ursprüngliche Kostenart genommen werden:
Z_Kostenart: Wenn([NeuKA-1]+[NeuKA-2]>0;[NeuKA-1]+[NeuKA-2];[Kostenart])
Zur Verdeutlichung noichmals die Hilfsfelder zur Ermittlung der "neuen" Kostenarten.
002 KoSt oder IA
Sowohl in der Objektnummer als auch Partnerobjekt werden Kostenstellen als KS* und Innenaufträge als OR* ausgewiesen. Entsprechend ist das Feld Z_ALT sowie Z_NEU noch aufzuteilen ob es sich um eine Kostenstelle oder einen Innenauftrag handelt.
Hierbei wird unter Bezugnahme auf die Abfrage "001 Kostenart Neu" dieses wie folgt ermittelt.
Z_ALT aus 001 Kostenart_neu
ALT_Typ: Links([Z_ALT];2)
Sofern es sich um einen Auftrag handelt sind die ersten zwei Zeichen OR bei einer Kostenstelle KS
Unter der Annahme, dass sowohl Kostenstellen als auch Innenaufträge achtstellig sind (oder mit führender Null ausgewiesen werden, kann nun Z_ALT entsprechend auf die Felder Kost Alt (für sendende Kostenstelle) und Auftrag Alt (für sendenden Innenauftrag) ausgewertet werden-
Kost Alt: Wenn([ALT_Typ]="KS";Rechts([Z_ALT];8);"")
Aufrag Alt: Wenn([ALT_Typ]="OR";Rechts([Z_ALT];8);"")
Z_Kostenart aus 001 Kostenart_neu
Betrag: Wert/TWähr aus 001 Kostenart_neu
Genauso wie unter Z_ALT sowohl Kostenstellen als auch Innenaufträge ausgewiesen sein können, wird hier ebenfalls Z_NEU auf die Spalten Kost Neu und Auftrag Neu aufgeteilt.
Z_NEU aus 001 Kostenart_neu
NEU_Typ: Links([Z_NEU];2)
Kost Neu: Wenn([NEU_Typ]="KS";Rechts([Z_NEU];8);"")
Auftrag Neu: Wenn([NEU_Typ]="OR";Rechts([Z_NEU];8);"")
Als weiteres Feld wird noch die Sender-Empfänger-Beziehung ermittelt:
Beziehung: [ALT_Typ] & [NEU_Typ]
Somit wäre Auftrag an Auftrag bspw. OROR oder Kostenstelle an Auftrag KSOR.
003 Betrag in Summe
Für die Umbuchung sind nun alle Werte vorhanden, da aber Buchungen häufiger eine identische Sender-Empfänger Beziehung haben. Im Beispiel wird die Abteilung A wohl nicht nur eine Kopie im Jahr erhalten sondern häufiger Kopien nutzen ist es sinnvoll eine Gruppierung und Summe über die Werte zu erhalten.
Hierzu wird in dieser Abfrage wie folgt die vorherige Abfrage aufbereitet:
Die einzelnen Werte stammen aus der Abfrage "002 Kost oder IA"
Beziehung (Funktion Gruppierung)
Kost Alt (Funktion Gruppierung)
Auftrag Alt (Funktion Gruppierung)
Z_Kostenart (Funktion Gruppierung)
Betrag (Funktion Summe)
Kost Neu (Funktion Gruppierung)
Auftrag Neu (Funktion Gruppierung)
Somit sind dann alle Buchungen zusammengefasst.
Sollen die Buchungen per CATT eingespielt werden, kann es nützlich sein für die jeweilige Beziehung die Abfrrage 003 Betrag in Summe nochmals aufzuteilen.
Hierbei wird ein Suchkriterium über das Feld Beziehung gelegt, so dass hier insgesamt vier Abfragen mit Bezug auf "003 Betrag in Summe" erstellt werden:
010 Auftrag an Auftrag
Beziehung
Kriterien "OROR"
Auftrag Alt
Z_Kostenart
SummevonBetrag
Auftrag Neu
010 Auftrag an Kostenstelle
Beziehung
Kriterien "ORKS"
Auftrag Alt
Z_Kostenart
SummevonBetrag
Kost Neu
010 Kostenstelle an Auftrag
Beziehung
Kriterien "KSOR"
Kost Alt
Z_Kostenart
SummevonBetrag
Auftrag Neu
010 Kostenstelle an Kostenstelle
Beziehung
Kriterien "KSKS"
Kost Alt
Z_Kostenart
SummevonBetrag
Kost Neu
Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionenzu finden. Mein Weiterbildungsangebot zu SAP Themen finden Sie auf unkelbach.expert.
Bei der Kopie der Istdaten in eine Plankopie werden alle CO Belege mit Vorgang KAMV (Manuelle Kostenverrechnung) nicht mit in die Planversion kopiert. Diese manuellen Kostenverrechnungen (Transaktion KB15N zum Erfassen bzw. KB17N zur Stronierung) müssen entsprechend in der Planversion nacherfasst werden. Über die Transaktion KB16N können entsprechende Belege angezeigt werden. Typische Geschäftsvorfälle sind hier bspw. die interne Leistungsverrechnung wie Porto, Kopierkosten oder auch Servicestunden.
In der Tabelle COEP sind diese Buchungen über den Vorgang KAMV selektierbar, allerdings ist hierbei darauf zu achten, dass die Buchungen sowohl mit positiven als auch negativen Vorzeichen gespeichert sind. Je nachdem müssen die Sender und Empfänger entsprechend belastet bzw. entlastet werden.
Zielvorgabe:
Abhängig vom Wert soll bei positiven Werten (Aufwandsbuchung) die Objektnummer als Empfänger (NEU) und das Partnerobjekt als Sender (ALT) ausgegeben werden. Bei negativen Werten sollen Sender / Empfänger entsprechend vertauscht werden. Der Wert soll in jeden Fall mit positiven Kennzeichen ausgegeben werden. Ferner ist darauf zu achten, dass Kostenarten des Typs 42 (Umlage) durch solche des Typs 41 (Gemeinkostenzuschläge) ersetzt werden sollen. Entsprechend sollte auch die Kostenartenbezeichnung und der Kostenartentyp mit ausgegeben werden.
Lösungsansatz: Query über Vorgang KAMV
Ein direktes Auswerten der Tabelle COEP ist relativ mühsam, da hier sowohl auf die Vorzeichen als auch die zu exportierenden Beträge geachtet werden müssen. Zumindest die Aufbereitung nach Sender und Empfänger ist hier im Rahmen einer Query etwas einfacher. Genauso wie bei der Auswertung nach COEP werden als Selektionskriterien das Geschäftsjahr, der Vorgang ("KAMV") als auch das B/Entl.Kennzeichen ("S") verwendet. Dieses hat den Hintergrund, dass jeder Beleg in der COEP sowohl mit Soll als auch mit Haben (also zwei Positionen je Beleg) hinterlegt sind, der Betrag aber nur einmal korrigiert werden soll. Die so gewonnenen Einzelposten können dann entsprechend zusammengefasst werden.Entsprechend kann die Tabelle COEP als Grundlage einer SAP Query verwendet werden. Als optionale Bereicherung um die Bezeichnung und die Kostenartentypen können hier auch die Tabellen CSKU und CSKB mit der Tabelle COEP betrachtet werden.
Infoset definieren
Tabellen:
COEP - CO-Objekt: Einzelposten periodenbezogen
CSKB - Kostenarten (Kostenrechnungskreisabhängige Daten)
CSKU - Kostenartentexte
Verknüpfungen:
Folgende Felder werden hierbei miteinander verknüpft.
COEP-KSTAR <-> CSKB-KSTAR
COEP-KSTAR
Bei der Verknüpfung der Tabelle COEP und CSKB handelt es sich um einen "left outer join". Diese Verknüpfungsart kann durch die rechte Maustaste auf "left outer join" genutzt werden. Diese kann genutzt werden, um auch Belege anzugeben, wenn die Verknüpfung keine übereinstimmende Werte ergibt, bspw. weil keine Bezeichnung in der Kostenart ausgegeben werden.
In der Feldgruppe können die Werte aus den einzelnen Tabellen übernommen werden. Für dieses Beispiel werden in der Feldgruppe 01 alle Felder der Tabelle COEP übernommen. Ergänzend dazu werden als Feldgruppe 2 die Bezeichnung aus der Tabelle CSKU (CSKU-KTEXT) und in der Feldgruppe 3 der Kostenartentyp (CSKB-KATYP) und Datum gültig bis (CSKB-DATBI) übernommen.
Nun kann im weiteren die Query definiert werden.
1.) Query definieren
Innerhalb der Query werden nun auf folgende Felder der einzelnen Tabellen Zugriff genommen. Bzw. in der Grundliste zugewiesen. Hierbei ist L als Listenfeld und S als Selektionsfeld zu verstehen.Die Felder werden hier in der Reihenfolge angeben, wie diese dann auch in der Query ausgegeben werden sollen:
COEP - CO-OBjekt: Einzelposten periodenbezogen
Kostenrechnungskreis (S) COEP-KOKRS
Be-/Entlastungskennzeichen (L,S) COEP-BEKNZ
Geschäftsjahr (L,S) COEP-GJAHR
CSKB - Kostenarten (Kostenrechnungskreisabhängige Daten)
Kostenartentyp (L) CSKB-KATYP
Datum gültig bis (S) CSKB-DATBI
Gültig bis wird genommen, sofern es Änderungen innerhalb der CSKB gab um zu vermeiden, dass hier zwei Werte ausgegeben werden
COEP - CO-OBjekt: Einzelposten periodenbezogen
Vorgang CO (L,S) COEP-VRGNG
Belegnummer (L) COEP-BELNR
Objektnummer (L,S) COEP-OBJNR
Kostenart (L,S) COEP-KSTAR
CSKU - Kostenartentexte
Allgemeine Bezeichnung (L) CSKU-KTEXT
COEP - CO-OBjekt: Einzelposten periodenbezogen
Wert gesamt in Kostenrechnungskreiswährung (L) COEP-WKGBTR
Partnerobjekt (L,S) COEP-PAROB
Soweit wäre diese Query beinahe identisch zur Auslesung der Tabelle COEP bspw. mit SE16.
Um nun aber abhängig vom Wert die Daten aufzubereiten wird hier mit "lokalen Feldern" vergleichbar zur Erweiterung der Query Stammdaten CO Kontrolle Verantwortliche genommen.
2. Kundeneigene Felder in der Query anlegen
Für die Anlage kundeneigener Felder muss als erstes ein Bezug zu den zu verwendenden Feldern innerhalb der Query gegeben sein.Hierzu gehen wir nicht in die Grundliste der Query (wo auch das Layoutdesign gepflegt wird) sondern wechseln innerhalb der Querypflege mit nächstes Bild (F6) auf die Feldauswahl der Query.
Über
BEARBEITEN->KURZBEZEICHNUNG
kann für die einzelnen Felder eine Kurzbezeichnung eingestellt werden.
Nun werden rechts neben den Datenfeldern Eingabefelder für die Kurzbezeichnung angegeben.
Hier erhalten nun folgende Felder eine Kurzbezeichnung:
Innerhalb CO-Objekt: Einzelposten periodenbezogen (Tabelle COEP)
Wert gesamt in Kostenrechnungskreiswährung -> WERT
Objektnummer -> OBJEKT
Partnerobjekt -> PARTNER
Diese Kurzbezeichnung sind notwendig, da wir auf diese dann Bezug nehmen, wenn wir ein eiegens Feld mit einer Formel anlegen.
Dieses geht über
BEARBEITEN->LOKALES FELD->ANLEGEN
Dieses Lokale Feld wird dann in der Feldgruppe angelegt, in der wir uns gerade befinden. Elegant wäre es natürlich, wenn wir im Infoset eine entsprechende leere Feldgruppe definiert hätten, es geht aber auch ohne.
Insgesamt werden hier drei Felder angelegt Z_ALT für dem Semder (Soll) Z_NEU für den Empfänger (Haben) und Z_WERT für den eigentlichen Wert.
Die lokalen Felder haben hierbei dann folgende Eigenschaften:
a) Feld Z_ALT
Das lokale Feld hat folgende Eigenschaften:
Kurzbezeichnung ALT
Feldbezeichnung Z_ALT
Überschrift Z_ALT
Innerhalb der Sachgruppe kann un die Feldgruppe des Infoset gelegt werden. Dieses ist dann der Bereich, wo das lokale Feld angelegt worden ist.
Als Feldeigenschaften könnten wir nun Textfelder, Rechnfelder etc. hinterlegen. Hier geben wir jedoch die gleichen Eigenschaften wie OBJEKT. Da es sich bei Objekt und PARTNER um die Objektnummer (KS* oder OR*) handelt, ist es eigentlich egal auf welches von beiden Bezug genommen wird. Auf diese Weise werden die Eigenschaften des Tabellenfeldes vererbt. Alternativ hätte man auch Textfeld mit 20 Zeichen nehmen können.
Da nun der Sender / Empfänger abhängig vom Wert ermittelt werden soll legen wir eine Berechnungsvorschrift an. Dazu klicken wir auf "KOMPLEXE BERECHNUNG".
Nun können wir drei Bedingungen und eine sonstige Alternative angeben.
Dieses nutzen wir wie folgt:
Bedingung:
WERT > 0
Formel:
PARTNER
Ist der Wert positiv wird das Partnerobjekt als Sender genommen.
Bedingung:
WERT < 0
Formel:
OBJEKT
Ist der Wert negativ wird die Objektnummer als Sender genommen.
Sonst
WERT
Somit wird bei einer 0 der Wert ausgegeben.
b) Feld Z_NEU
Das lokale Feld hat folgende Eigenschaften:
Kurzbezeichnung NEU
Feldbezeichnung Z_NEU
Überschrift Z_NEU
Hier hat das Feld die gleichen Eigenschaften wie das Feld PARTNER.
Als Formeln wird folgende komplexe Berechnung hinterlegt:
Bedingung:
WERT > 0
Formel
OBJEKT
Bedingung
WERT < 0
PARTNER
Sonst
WERT
Im Grunde ist dieses die umgedrehte Bedingung zum Feld Z_NEU.
Damit sind Z_ALT (S) und Z_NEU (H) definiert. Für die Buchungsliste benötigen wir jedoch noch den Wert mit positiven Vorzeichen (in Excel würde hier als Formel ABS(Wert) für den absoluten Wert genommen werden.
c) Feld Z_WERT
Das lokale Feld hat folgende Eigenschaften:
Kurzbezeichnung Z_WERT
Feldbezeichnung Z_WERT
Überschrift Z_WERT
Hier hat das Feld die gleichen Eigenschaften wie das Feld WERT (entspricht CURR / Währung mit 15 Zeichen und 2 Dezimalstellen).
Als Formeln wird folgende komplexe Berechnung hinterlegt:
Bedingung
WERT < 0
Formel
- 1 * WERT
Bedingung
WERT > 0
Formel
1 * WERT
Sonst
WERT
Die so festgelegten lokalen Felder werden nun ebenfalls in der Grundliste mit als Listenfelder übergeben.
Nun kann diese Query als Grundlage für eine Umbuchung verwendet werden. Ähnlich wie bei der Tabellenauswertung wird hier
der Vorgang KAMV das Belastungs/Entlastungskennzeichen S sowie das Kalenderjahr ausgewählt.
Da jedoch eine Vielzahl von Buchungen vorhanden sind sollte diese Query noch bspw. in Access weiterverarbeitet werden.
3. Weiterverarbeitung der Query über KAMV in Access
Besonders wichtig ist hierbei, dass Buchungen die identische Sender und Empfänger haben Gruppiert und Summiert werden. Andernfalls haben wir ggf. wesentlich mehr Buchungssätze, als eigentlich erforderlich wäre.Im Ergebnis haben wir nun folgende Query erhalten.
Be-/Entlastungskennzeichen (COEP-BEKNZ)
Geschäftsjahr (COEP-GJAHR)
Kostenartentyp (CSKB-KATYP)
Vorgang CO (COEP-VRGNG)
Belegnummer (COEP-BELNR)
Objektnummer (COEP-OBJNR)
Kostenart (COEP-KSTAR)
KOstenart Bezeichnung (CSKU-KTEXT)
Wert/KWähr (COEP-WKGBTR)
Partnerobjekt (COEP-PAROB)
Sowie unsere kundeneigene Felder
Z_ALT
Z_NEU
Z_WERT
In einer Datenbankanwendung (im Beispiel ACCESS) sind nun folgende Abfragen erforderlich.
001 Kostenart Neu
Aus der Grundliste der Query werden folgende Felder in die Abfrage übernommen:
Z_ALT
Kostenart
Wert/TWähr
Z_NEU
Hier sollte für Kostenarten des Typs 42 entsprechende Kostenarten des Typs 41 genommen werden.
Sofern es eine entsprechende Logik innerhalb der Kostenarten gibt (bspw. die Kostenarten Typ 42 beginnen mit 0815 und die korrespondierenden Kostenarten des Typs 41 beginnen mit 4711) kann hier eine passende Wenn Funktion genommen werden.
Beispiel:
Unter der Annahme, dass die Kostenarten achtstellig sind kann, sofern erforderlich die Kostenart wie folgt ermittelt werden.
NeuKA-1: Wenn(Links([Kostenart];4)="4711";"0815" & Rechts([Kostenart];4);0)
Gibt es daneben noch eine Kostenart die direkt ersetzt werden soll bspw. 55555590 durch 55555580 lautet die zweite Bedingen:
NeuKA-2: Wenn([Kostenart]="55555590";55555580;0)
Entsprechend können hier auch weitere "Austauschsfunktionen ermittelt werden.
Als letzter Punkt sollte auf dieser Kostenarten Bezug genommen werden, oder die ursprüngliche Kostenart genommen werden:
Z_Kostenart: Wenn([NeuKA-1]+[NeuKA-2]>0;[NeuKA-1]+[NeuKA-2];[Kostenart])
Zur Verdeutlichung noichmals die Hilfsfelder zur Ermittlung der "neuen" Kostenarten.
- NeuKA-1: Wenn(Links([Kostenart];4)="4711";"0815" & Rechts([Kostenart];4);0)
- NeuKA-2: Wenn([Kostenart]="55555590";55555580;0)
- Z_Kostenart: Wenn([NeuKA-1]+[NeuKA-2]>0;[NeuKA-1]+[NeuKA-2];[Kostenart])
002 KoSt oder IA
Sowohl in der Objektnummer als auch Partnerobjekt werden Kostenstellen als KS* und Innenaufträge als OR* ausgewiesen. Entsprechend ist das Feld Z_ALT sowie Z_NEU noch aufzuteilen ob es sich um eine Kostenstelle oder einen Innenauftrag handelt.
Hierbei wird unter Bezugnahme auf die Abfrage "001 Kostenart Neu" dieses wie folgt ermittelt.
Z_ALT aus 001 Kostenart_neu
ALT_Typ: Links([Z_ALT];2)
Sofern es sich um einen Auftrag handelt sind die ersten zwei Zeichen OR bei einer Kostenstelle KS
Unter der Annahme, dass sowohl Kostenstellen als auch Innenaufträge achtstellig sind (oder mit führender Null ausgewiesen werden, kann nun Z_ALT entsprechend auf die Felder Kost Alt (für sendende Kostenstelle) und Auftrag Alt (für sendenden Innenauftrag) ausgewertet werden-
Kost Alt: Wenn([ALT_Typ]="KS";Rechts([Z_ALT];8);"")
Aufrag Alt: Wenn([ALT_Typ]="OR";Rechts([Z_ALT];8);"")
Z_Kostenart aus 001 Kostenart_neu
Betrag: Wert/TWähr aus 001 Kostenart_neu
Genauso wie unter Z_ALT sowohl Kostenstellen als auch Innenaufträge ausgewiesen sein können, wird hier ebenfalls Z_NEU auf die Spalten Kost Neu und Auftrag Neu aufgeteilt.
Z_NEU aus 001 Kostenart_neu
NEU_Typ: Links([Z_NEU];2)
Kost Neu: Wenn([NEU_Typ]="KS";Rechts([Z_NEU];8);"")
Auftrag Neu: Wenn([NEU_Typ]="OR";Rechts([Z_NEU];8);"")
Als weiteres Feld wird noch die Sender-Empfänger-Beziehung ermittelt:
Beziehung: [ALT_Typ] & [NEU_Typ]
Somit wäre Auftrag an Auftrag bspw. OROR oder Kostenstelle an Auftrag KSOR.
003 Betrag in Summe
Für die Umbuchung sind nun alle Werte vorhanden, da aber Buchungen häufiger eine identische Sender-Empfänger Beziehung haben. Im Beispiel wird die Abteilung A wohl nicht nur eine Kopie im Jahr erhalten sondern häufiger Kopien nutzen ist es sinnvoll eine Gruppierung und Summe über die Werte zu erhalten.
Hierzu wird in dieser Abfrage wie folgt die vorherige Abfrage aufbereitet:
Die einzelnen Werte stammen aus der Abfrage "002 Kost oder IA"
Beziehung (Funktion Gruppierung)
Kost Alt (Funktion Gruppierung)
Auftrag Alt (Funktion Gruppierung)
Z_Kostenart (Funktion Gruppierung)
Betrag (Funktion Summe)
Kost Neu (Funktion Gruppierung)
Auftrag Neu (Funktion Gruppierung)
Somit sind dann alle Buchungen zusammengefasst.
Sollen die Buchungen per CATT eingespielt werden, kann es nützlich sein für die jeweilige Beziehung die Abfrrage 003 Betrag in Summe nochmals aufzuteilen.
Hierbei wird ein Suchkriterium über das Feld Beziehung gelegt, so dass hier insgesamt vier Abfragen mit Bezug auf "003 Betrag in Summe" erstellt werden:
010 Auftrag an Auftrag
Beziehung
Kriterien "OROR"
Auftrag Alt
Z_Kostenart
SummevonBetrag
Auftrag Neu
010 Auftrag an Kostenstelle
Beziehung
Kriterien "ORKS"
Auftrag Alt
Z_Kostenart
SummevonBetrag
Kost Neu
010 Kostenstelle an Auftrag
Beziehung
Kriterien "KSOR"
Kost Alt
Z_Kostenart
SummevonBetrag
Auftrag Neu
010 Kostenstelle an Kostenstelle
Beziehung
Kriterien "KSKS"
Kost Alt
Z_Kostenart
SummevonBetrag
Kost Neu
Weiterntwicklung der Grundlage (Query)
Grundsätzlich ist es natürlich überlegenswert die in der Datenbankanwendung erstellte Abfrage "002 KoSt oder IA" auch schon im Infoset durch Zusetzfelder oder aber in der Query zu erledigen. Hierzu müssten die Felder Objektnummer und Partnerobjekt auf Zusatzfelder *_KS und *_IA aufgeteilt werden. Sinnvollerweise würde dieses im Infoset erfolgen. Und ebenfalls, wie in der Datenbanklösung durch die Abfrage der ersten zeichen und Zuordnungen zum jeweiligen Feld. Dieses dürfte durch ein vergleichbares Coding wie im Artikel "Query über COEP, AUFK und FMFINCODE für Einzelposten Istkosten Innnenauftrag mit Stammdaten aus CO und PSM-FM sowie Spalten für Ertrag und Aufwand - Erster Teil Infoset als Datengrundlage" beschrieben möglich sein. Allerdings ist diese Query dann nicht ohne Weiteres innerhalb der Einrichtungen verteilbar, wenn unterschiedliche Längen von Kostenstellen und Innenauftragsnummern genutzt werden. Trotzdem könnte sich hier lokal, an der eigenen Einrichtungen, eine solche Anpassung tatsächlich lohnen da damit ein weiterer Schritt direkt aus SAP und nicht aus Excel oder Access erstellt wird...was ja durchaus auch einen eigenen Charme hat.Hinweis:
Eine kurze Einführung in das Thema SAP Query habe ich im Artikel
"Grundlagen Kurzeinführung und Handbuch SAP Query" beschrieben und hoffe Ihnen hier eine Einführung ins Thema bieten zu können. Weitere Artikel zur Verarbeitung von Daten in MS Access sind unter Access zu finden.
ein Angebot von Espresso Tutorials
unkelbach.link/et.books/
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
Diesen Artikel zitieren:
Unkelbach, Andreas: »SAP Query: Einzelpostenliste KAMV für Umbuchung in Planversion« in Andreas Unkelbach Blog (ISSN: 2701-6242) vom 5.4.2012, Online-Publikation: https://www.andreas-unkelbach.de/blog/?go=show&id=345 (Abgerufen am 23.11.2024)
Ein Kommentar - Permalink - SAP
Artikel datenschutzfreundlich teilen
🌎 Facebook 🌎 Twitter 🌎 LinkedIn