Validierung beim Ausgleich je Segment

SAP R/3 Finanzwesen: Hauptbuchhaltung; Kreditorenbuchhaltung; Debitorenbuchhaltung; Bankbuchhaltung; Anlagenbuchhaltung; ...
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Validierung beim Ausgleich je Segment

Beitrag von juttaklein (ForumUser / 3 / 0 / 0 ) »
Hallo zusammen,

ich brauche eine Validierung für Sachkontenbuchung (FB50). Wenn bei der Sachkontenbuchung der Saldo von Segment 1 und der Saldo von Segment 99 nicht gleich 0 sind, kommt eine Warnungsmeldung.

Profitcenter = Segment
Wenn Profitcenter dummy ist, ist Segment 99.

Segmente sind 1 oder 99.

z.B. Saldo von Segment 99 ist 50 und Saldo von Segment 1 ist -50. Beide Salden je Segment sind nicht gleich 0. Jetzt kommt eine Warnungsmeldung.

Aber es gibt 3 Möglichkeit, z.B. wenn Profitcenter leer ist.

1)Nur bei einem Posten Profitcenter 1 eingetragen:

Bei der Buchung werden bei anderen nicht eingetragenen Posten Segment auch als 1 automatisch eintragen.



2) Nur bei einem Posten Profitcenter 99 eingetragen:

Bei der Buchung werden bei anderen nicht eingetragenen Posten Segment auch als 99 automatisch eintragen.


3) bei einem Posten Profitcenter 1 und einem anderen Posten Profitcenter 99 eingetragen:

Die Segmente der anderen nicht eingetragenen Posten werden als 99 eingetragen.




Ich habe ein entsprechendes Unterprogramm für die Validierung.


form u910 using bool_data type gb002_015 changing b_result.

b_result = b_true.

data ges_seg_1_soll type bseg-segment.
data ges_seg_1_haben type bseg-segment.
data ges_seg_99_soll type bseg-segment.
data ges_seg_99_haben type bseg-segment.
data tabix like sy-tabix value 0.
data bschl_m type bseg-bschl.

data bseg_t type table of bseg.

bseg_t = bool_data-bseg.


sort bseg_t by bschl ascending.


loop at bseg_t into bseg.

if tabix eq 0.
bschl_m = bseg-bschl.
endif.


if bschl_m ne bseg-bschl.

if bseg-segment eq '0000000001'.
ges_seg_1_haben = ges_seg_1_haben + bseg-wrbtr.

elseif bseg-segment eq '0000000099' or bseg-segment is initial.
ges_seg_99_haben = ges_seg_99_haben + bseg-wrbtr.
endif.

else.
if bseg-segment eq '0000000001'.
ges_seg_1_soll = ges_seg_1_soll + bseg-wrbtr.

elseif bseg-segment eq '0000000099' or bseg-segment is initial.
ges_seg_99_soll = ges_seg_99_soll + bseg-wrbtr.
endif.
endif.

tabix = tabix + 1.

endloop.

if ges_seg_1_haben ne ges_seg_1_soll or ges_seg_99_haben ne ges_seg_99_soll .
b_result = b_false.
endif.

endform.



Aber das Programm funktioniert bei Fall 1) falsch. Das Programm wird in nicht eingetragenen Profitcenter als 99 automatisch eintragen.

Hat Jemand Ideen, wie das Programm nach meiner Anforderung ändert werden kann?
Vielen vielen Dank!!!

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Validierung beim Ausgleich je Segment

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Also ehrlich gesagt versteh ich nicht so ganz, was du genau willst.

Was meinst du immer mit "eintragen"? In einer Validierung kannst du nix ändern bzw. eintragen, dafür gibt es Substitutionen.

Re: Validierung beim Ausgleich je Segment

Beitrag von juttaklein (ForumUser / 3 / 0 / 0 ) »
Hallo,

danke für die Antwort. "Eintragen" meine ich in FB50, bei Sachkontenbuchung. Mit der Validierung möchte ich bei FB50 prüfen, ob das Saldo von Segment 1 und Saldo von Segment 99 beide 0 sind. Wenn nicht, gibt es die Warnungsmeldung.

Re: Validierung beim Ausgleich je Segment

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Sorry, ich versteh immer noch nicht dein Problem:
Aber es gibt 3 Möglichkeit, z.B. wenn Profitcenter leer ist.

1)Nur bei einem Posten Profitcenter 1 eingetragen:

Bei der Buchung werden bei anderen nicht eingetragenen Posten Segment auch als 1 automatisch eintragen.

2) Nur bei einem Posten Profitcenter 99 eingetragen:

Bei der Buchung werden bei anderen nicht eingetragenen Posten Segment auch als 99 automatisch eintragen.

3) bei einem Posten Profitcenter 1 und einem anderen Posten Profitcenter 99 eingetragen:

Die Segmente der anderen nicht eingetragenen Posten werden als 99 eingetragen.
Du sagst, mit "eintragen" meinst du in FB50...dann ist Dir doch beim Prüfen diese Logik völlig egal, oder? Willst du nun eine solche Logik in der Validierung verbauen oder nicht?
Wenn ja, was machst du, wenn du mehr als 2 Buchungszeilen hast?

Re: Validierung beim Ausgleich je Segment

Beitrag von juttaklein (ForumUser / 3 / 0 / 0 ) »
Ich schreibe noch mal mit bilder, vielleicht ist es ein bisschen lesbar.
Hallo zusammen,

ich brauche eine Validierung. Wenn bei der Sachkontenbuchung der Saldo von Segment 1 und der Saldo von Segment 99 nicht gleich 0 sind, kommt eine Warnungsmeldung.

Profitcenter = Segment
Wenn Profitcenter dummy ist, ist Segment 99.

z.B.

Bild
Segmente sind 1, 99 und 99.
z.B. Saldo von Segment 99 ist 50 und Saldo von Segment 1 ist -50. Beide Salden sind nicht gleich 0. Wenn speichern(Buchung), Jetzt kommt eine Warnungsmeldung in der Buchungsseite ganz unten.

Bild

Aber es gibt noch andere Möglichkeit, z.B. wenn Profitcenter leer ist.

1) Nur bei einem Posten Profitcenter 1 eingetragen:

Bild
Bei der Buchung werden die anderen zwei Posten die Profitcenter (Segment) auch als 1 automatisch eintragen.

Bild

2) Nur bei einem Posten Profitcenter 99 eingetragen:

Bild
Bei der Buchung werden die anderen zwei Posten die Profitcenter (Segment) auch als 99 automatisch eintragen.

Bild

3) bei einem Posten Profitcenter 1 und einem anderen Posten Profitcenter 99 eingetragen:

Bild
Die Segmente der anderen nicht eingetragenen Posten werden als 99 eingetragen.

Bild



Ich habe ein entsprechendes Unterprogramm für die Validierung.
form u910 using bool_data type gb002_015 changing b_result.

b_result = b_true.

data ges_seg_1_soll type bseg-segment.
data ges_seg_1_haben type bseg-segment.
data ges_seg_99_soll type bseg-segment.
data ges_seg_99_haben type bseg-segment.
data tabix like sy-tabix value 0.
data bschl_m type bseg-bschl.

data bseg_t type table of bseg.

bseg_t = bool_data-bseg.


sort bseg_t by bschl ascending.


loop at bseg_t into bseg.

if tabix eq 0.
bschl_m = bseg-bschl.
endif.


if bschl_m ne bseg-bschl.

if bseg-segment eq '0000000001'.
ges_seg_1_haben = ges_seg_1_haben + bseg-wrbtr.

elseif bseg-segment eq '0000000099' or bseg-segment is initial.
ges_seg_99_haben = ges_seg_99_haben + bseg-wrbtr.
endif.

else.
if bseg-segment eq '0000000001'.
ges_seg_1_soll = ges_seg_1_soll + bseg-wrbtr.

elseif bseg-segment eq '0000000099' or bseg-segment is initial.
ges_seg_99_soll = ges_seg_99_soll + bseg-wrbtr.
endif.
endif.

tabix = tabix + 1.

endloop.

if ges_seg_1_haben ne ges_seg_1_soll or ges_seg_99_haben ne ges_seg_99_soll .
b_result = b_false.
endif.

endform.

Aber das Programm funktioniert bei Fall 1) falsch. Bei FB50 wird das Segment in nicht eingetragenen Profitcenter als 99 automatisch eintragen.

Hat Jemand Ideen, wie das Programm nach meiner Anforderung ändert werden kann?
Vielen vielen Dank!!!

Re: Validierung beim Ausgleich je Segment

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Auch wenn ich die Bilder nicht sehen kann (rotes X) und ich deine Ausdrucksweise immer noch nicht verstehe (du kannst beim Buchen nix "eintragen", du kannst maximal in der Validierung davon ausgehen, dass leere Segmente zum Saldo von 1 oder 99 hinzugerechnet werden), versuche ich mal folgendes zu orakeln:

Code: Alles auswählen.

data: lf_segment 1 type flag,
         lf_segment99 type flag.
field-symbols: <ls_bseg> type bseg.

bseg_t = bool_data-bseg.

sort bseg_t by bschl ascending.

* herausfinden, ob wir nur segment 1 oder 99 oder beides haben
Loop at bseg_t assigning <ls_bseg>.
    case <ls_bseg>-segment.
      when '0000000001'.
        lf_segment1 = 'X'.
      when '00000000099'.
        lf_segment99 = 'X'
    endcase.
Endloop.

Jetzt erst kannst du entscheiden, wie du die leeren Segmente behandelst, z.B. so:

Code: Alles auswählen.

loop at bseg_t into bseg.

if tabix eq 0.
   bschl_m = bseg-bschl.
endif.


if bschl_m ne bseg-bschl.

if lf_segment1 EQ 'X' and lf_segment99 NE 'X'.
* wenn nur Segment 1 existiert, sollen alle leeren Segmente auch als 1 betrachtet werden
  if bseg-segment eq '0000000001' or bseg-segment is initial.
  ges_seg_1_haben = ges_seg_1_haben + bseg-wrbtr.

  elseif bseg-segment eq '0000000099' .
  ges_seg_99_haben = ges_seg_99_haben + bseg-wrbtr.
  endif.

if lf_segment1 NE 'X' and lf_segment99 EQ 'X'.
* wenn nur Segment 99 existiert, sollen alle leeren Segmente auch als 99 betrachtet werden
  if bseg-segment eq '0000000001'.
  ges_seg_1_haben = ges_seg_1_haben + bseg-wrbtr.

  elseif bseg-segment eq '0000000099' or bseg-segment is initial.
  ges_seg_99_haben = ges_seg_99_haben + bseg-wrbtr.
endif.

if lf_segment1 EQ 'X' and lf_segment99 EQ 'X'.
* wenn beide Segmente existiert, sollen alle leeren Segmente auch als 99 betrachtet werden
  if bseg-segment eq '0000000001'.
  ges_seg_1_haben = ges_seg_1_haben + bseg-wrbtr.

  elseif bseg-segment eq '0000000099' or bseg-segment is initial.
  ges_seg_99_haben = ges_seg_99_haben + bseg-wrbtr.
endif.

endif.

else.
--> hier gleiches wie oben, nur für SOLL
Das ist aber jetzt ganz grob, zur Veranschaulichung. Ich würde grundlegend auch nicht so mit den Buchungsschlüsseln hantieren...recht umständlich wie mir scheint.
Was ist mit dem Fall, dass gar kein Segment gefüllt ist?

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1135
Views
Ausgleich von Stornorechnungen
von UserBC » 17.07.2009 20:45 • Verfasst in Sales and Distribution
2
Antw.
2703
Views
BAPI zum Buchen mit Ausgleich
von Iffets_K » 23.01.2008 11:31 • Verfasst in ABAP® Core
1
Antw.
1786
Views
Regeln für automatischen Ausgleich
von Buetzy » 06.08.2008 11:10 • Verfasst in Financials
0
Antw.
2007
Views
POSTING_INTERFACE_CLEARING Ausgleich Belege
von Julia611 » 19.09.2013 17:08 • Verfasst in Financials
1
Antw.
1596
Views
Belegwährung bei Ausgleich offener Posten
von Gast » 25.01.2005 20:08 • Verfasst in Financials

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.