Selectfrage

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Selectfrage

Beitrag von Flo ( / / 0 / 3 ) »
Mahlzeit an alle,

folgende Anforderung stellt mich vor Probleme:

In den Select-Options müssen die Felder:

Perio:
Gjahr:
gefüllt werden.

Mit diesen Angaben will ich in der COBRB selektieren.

Dort finde ich z.B. folgendes vor:

|MANDT OBJNR BUREG LFDNR GABJA GABPE GBISJ GBISP...|
|001 1234 000 001 leer 000 leer 000 ...|
|001 1235 000 002 2003 003 2004 003 ...|
|..........
|..........



Wo meine Probleme nun liegen, es soll immer der Eintrag gefunden werden, der zum Zeitpunkt der Select-Options Perio und GJahr der gültige war. Die entscheidenen Felder sind
GABJA = Gültig ab Jahr
GABPE = Gültig ab Periode
GBISJ = Gültig bis Jahr
GBISP = Gültig bis Periode

Beispiel 1

Select-Options:
Perio: 008
Gjahr: 2003
==> Dann LFDNR = 002 ist die richtige Regel


Beispiel 2

Select-Options:
Perio: 004
Gjahr: 2004

==> Dann LFDNR = 001 ist die richtige Regel.


Wie kann ich das per Select filtern und die jeweils richtige Regel/Eintrag finden? Wer hat eine Idee, ich bin planlos ;-)

Grüsse Flo

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


Wieso Lfdnr 1?

Beitrag von Gast X ( / / 0 / 3 ) »
Vielleicht dumme Frage, aber wieso sollte im zweiten Fall die laufende Nummer 1 die richtige sein?
Gibt schliesslich kein von-/ bis-Datum welches zum Vergleich dienen könnte. Oder sehe ich da was nicht?
Gruss, Frank

Infos

Beitrag von Flo ( / / 0 / 3 ) »
Hallo Frank,

berechtigte Frage:

in dem Fall muss dann die 1 gewählt werden (auch wenn sie keine Gültigkeit, wie Du richtig erkannt hast, hat), weil sie dann gültig sein muss, die 2 ist nur von 02 2003 bis 03 2004 gültig.
Die 1 ist dann eine default Einstellung.

Kannst Du oder irgendjemand mir bitte helfen?

Grüsse Flo

Beitrag von Gast X ( / / 0 / 3 ) »
Hallo Flo
Ziehmlich ins Unreine und auch nicht weiter per Syntax-Check geprüft:
1. Die Intervalle können alle möglichen Grössen haben, d.h. von 02-2003 bis 03-2003 und 12-2001 bis 01-2009 sind gleichermassen möglich?!
2. Sind die Felder GABJA, GBISJ, GABPE und GBISP im Eintrag mit laufender Nummer 001 initial?
3. Es ist immer ein Satz wie die laufende Nummer 1 vorhanden (sonst noch Fehlerabfrage einbauen).

Falls ja, würde ich die Logik wohl ungefähr so versuchen:

Code: Alles auswählen.

DATA: GEFUNDEN(1) TYPE C.

GEFUNDEN = 'N'.
*--- Teil 1: gibt es ein passendes Intervall? -----------------
SELECT * FROM COBRB WHERE GABJA LE GJAHR
                      AND GBISJ GE GJAHR.
  IF GABJA EQ GBISJ.  " also GJAHR = GABJA = GBISJ
     IF GABPE LE PERIO AND GBISJ GE PERIO.
       GEFUNDEN = 'J'.
       EXIT.
     ENDIF.
  ELSE.		       " also GABJA < GBISJ
    IF GABJA EQ GJAHR. " also GJAHR < GBISJ
      IF GABPE LE PERIO.
        GEFUNDEN = 'J'.
        EXIT.
      ENDIF.
    ELSE.	            " also GABJA < GJAHR 
      IF GBISJ EQ GJAHR:    " dann Bis-Periode prüfen
        IF GBISP GE PERIO.
          GEFUNDEN = 'J'.
          EXIT.
        ENDIF.
      ELSE.                " sonst Bis-Periode egal
        GEFUNDEN = 'J'.
        EXIT.
      ENDIF.
    ENDIF.
  ENDIF.
ENDSELECT.

*--- Teil 2: kein passendes Intervall, also "Dummy2-Eintrag holen ----

IF GEFUNDEN = 'N'.
  SELECT SINGLE * FROM CORB WHERE GABJA IS INITIAL 
                              AND GBISJ IS INITIAL
                              AND GABPE IS INITIAL
                              AND GBISJ IS INITIAL.
ENDIF.
Sieht etwas wüst aus, hat wer was kürzeres und eleganteres (und mit besserer Laufzeit)?
Gruss,
Frank

Infos

Beitrag von Flo ( / / 0 / 3 ) »
Hallo Frank,

vielen Dank für das Coding, habe es schon eingebaut und bisher funktioniert es gut.

Die Antworten auf Deine Fragen:

1. Richtig, die Gültigkeitsintervalle können alle möglichen Grössen haben.
Wie in Deinen Beispielen richtig genannt!
in den Select-options wird aber nur jeweils eine Periode + ein Jahr benötigt. Hier sind die Intervalle egal.


2. es wird nur keine Gültigkeitsregel eingegeben!
Meine Lösung für den Default:

IF Gefunden = 'N'.
Select * from cobrb where GABJA EQ '0' and GBISJ EQ '0'.
ENDIF.
Das sollte dann reichen

Jede Periode mit Jahr kann es nur in einer Regel geben!! Eindeutigkeit ist gegeben!!

3. Eigentlich müsste immer eine Regel da sein, werde aber eine Fehlermeldung einbauen!


Grüsse Flo

Seite 1 von 1

Über diesen Beitrag

Anonymous
Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

LSMW-Problem
vor 16 Stunden von mazu gelöst 5 / 776
ATC Finding in Smartforms
vor 4 Tagen von sap_enthusiast 2 / 753

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.

Aktuelle Forenbeiträge

LSMW-Problem
vor 16 Stunden von mazu gelöst 5 / 776
ATC Finding in Smartforms
vor 4 Tagen von sap_enthusiast 2 / 753

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
letzen Monat von Manfred K. 1 / 78808
Benutzerdefinierte Felder PSP
January 2026 von Rabea1103 1 / 131917