Fehler bei F4-Hilfe

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

Fehler bei F4-Hilfe

Beitrag von Stefan144 (ForumUser / 2 / 1 / 0 ) » 17. Sep 2019 16:17

Hallo Leute,

ich bin relativ neu unterwegs bei ABAP und habe Anfangsschwierigkeiten bei einer Aufgabe. Ich möchte über das Selektionsbildschirm für das Eingabefeld so_tab die F4-Hilfe angezeigt bekommen, die jedoch beim Anklicken nicht erscheint. Kann mir bitte Jemand sagen was ich hier falsch mache. Ausserdem kommt der Fehler zum Schluss Offset zu groß.

Vielen Dank im Vorraus :)

Report Z_STEFAN_VERTRAGSSCHLUESSEL


TABLES zdbm_vertraege.
Data gt_contracts type table of zdbm_contracts.
Data: gv_new type DFIES-FIELDNAME. "der typ von retfield
DATA: it_return TYPE TABLE OF ddshretval.
DATA: go_sel TYPE zdbm_contract_id_set.
DATA: gt_itab TYPE TABLE OF zdbm_vertraege.
Data: lrt_true type range of xfeld,
lrs_true like line of lrt_true.


PARAMETERS: p_para AS CHECKBOX.
SELECT-OPTIONS: so_tab FOR go_sel.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_tab-low.

INITIALIZATION.

START-OF-SELECTION.

WRITE: p_para.
lrs_true-sign = 'I'.
lrs_true-option = 'EQ'.

if p_para = 'X'.

lrs_true-low = 'X'.
append lrs_true to lrt_true.

Else.
lrs_true-low = 'Y'.
append lrs_true to lrt_true.
endif.

SELECT * FROM zdbm_vertraege INTO TABLE gt_itab WHERE zz0086 IN so_tab AND zz0063 IN lrt_true.

Move zdbm_vertraege-ZZ0086 to gv_new.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'gv_new' "'ZDBM_CONTRACTS-CONTRACT_ID'

VALUE_ORG = 'S'

TABLES
VALUE_TAB = gt_itab

RETURN_TAB = it_return
* DYNPFLD_MAPPING =
* EXCEPTIONS
* PARAMETER_ERROR = 1
* NO_VALUES_FOUND = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.


Re: Fehler bei F4-Hilfe

Beitrag von SaskuAc (Specialist / 286 / 29 / 36 ) » 18. Sep 2019 07:40

Prüfe doch bitte mal den Typ "zdbm_contract_id_set".

du beziehst dich hier auf "go_sel", welcher eben diesen Typ hat.

Um eine select-option mit werte-hilfe ( F4 ) zu nutzen, braucht der dahinterliegende Typ entweder Festwerte ( der in der domäne des types ist ) oder eine Suchhilfe. ( welche über die SE11 angelegt werden kann - Tab "Zusatzeigenschaften" )

Heißt also, schaue mal ob der Typ zdbm_contract_id_set eine Suchhilfe hinterlegt hat. Wenn nein, dann schau dir mal die Domäne an und dort dann unter "Wertebereich".

EDIT 2: Sehe gerade erst, dass du im Coding das Event "SELECTION-SCREEN ON VALUE REQUEST FOR" abfängst. Das könnte auch der Grund sein. in meinem kleinen testprogramm ( s. unten ) hat diese Zeile dazu geführt, dass automatisch die suchhilfe deaktiviert wurde

Grüße

EDIT: Nimm bitte nächstes Mal ( im Forum ) beim Coding den Coding-Tag her. Dann ists leichter den Quelltext zu lesen. Danke :)


EDIT 2 Quelltext:

Code: Alles auswählen.

REPORT z_test.

tables sflight.

data test type S_CARR_ID.

select-OPTIONS: s_test for test no INTERVALS.

*at SELECTION-SCREEN ON VALUE-REQUEST FOR s_test-low.

START-OF-SELECTION.

  BREAK-POINT.


wenn ich die "on value-request" zeile auskommentiere, kommt die Suchhilfe, wenn ich sie drinnen lasse nicht.

Folgende Benutzer bedankten sich beim Autor SaskuAc für den Beitrag:
Stefan144 (20. Sep 2019 10:32)


Re: Fehler bei F4-Hilfe

Beitrag von msfox (ForumUser / 64 / 7 / 6 ) » 18. Sep 2019 08:27

SaskuAc hat geschrieben:
18. Sep 2019 07:40
Das könnte auch der Grund sein. in meinem kleinen testprogramm ( s. unten ) hat diese Zeile dazu geführt, dass automatisch die suchhilfe deaktiviert wurde
Ja aber doch nur, weil in at SELECTION-SCREEN ON VALUE-REQUEST FOR nix steht.
Statt die Suchhilfe über die Domäne anzubinden, kann man auch über at SELECTION-SCREEN ON VALUE-REQUEST FOR gehen. Muss dann aber die Wertebeschaffung manuell machen bzw. kann dort eine Suchhilfe aufrufen.
Weiterhin sein zu prüfen, ob sich das at SELECTION-SCREEN ON VALUE-REQUEST FOR auf das -low der SELECT-OPTION bezieht oder auf den ganzen Parameter. Immerhin will man hight ja die gleiche Treffermenge haben.

Re: Fehler bei F4-Hilfe

Beitrag von SaskuAc (Specialist / 286 / 29 / 36 ) » 18. Sep 2019 08:37

msfox hat geschrieben:
18. Sep 2019 08:27
SaskuAc hat geschrieben:
18. Sep 2019 07:40
Das könnte auch der Grund sein. in meinem kleinen testprogramm ( s. unten ) hat diese Zeile dazu geführt, dass automatisch die suchhilfe deaktiviert wurde
Ja aber doch nur, weil in at SELECTION-SCREEN ON VALUE-REQUEST FOR nix steht.
Statt die Suchhilfe über die Domäne anzubinden, kann man auch über at SELECTION-SCREEN ON VALUE-REQUEST FOR gehen. Muss dann aber die Wertebeschaffung manuell machen bzw. kann dort eine Suchhilfe aufrufen.
Das stimmt. Wenn jetzt aber im Datenelement / Domäne eine Suchhilfe / feste Werte angegeben wären, dann wäre die Zeile mM. sinnlos ( selbst wenn man den Block füllen würde. - außer natürlich man will eine andere Suchhilfe, was ich aber in diesem fall nicht glaube )

Bin mir nicht sicher ob ich diesen Block so richtig verstehe:
Weiterhin sein zu prüfen, ob sich das at SELECTION-SCREEN ON VALUE-REQUEST FOR auf das -low der SELECT-OPTION bezieht oder auf den ganzen Parameter. Immerhin will man hight ja die gleiche Treffermenge haben.
Also wenn du meinst, dass dieses Event nur für den -low Part der SO zieht, dann ja. ( kann man mit meinem test-coding ja schnell prüfen ^^ ). Im -High bereich kommt die Suchhilfe, im low nicht. ABAP hat hier allerdings das problem, dass man -low oder -high angeben muss. heißt für mich, wenn man sowohl high & low braucht, beides in eine Form / Methode / FuBa auslagern und dann jeweils im Block aufrufen oder, wenn man nur -low braucht, den zusatz "no intervalls" ( s. mein test-coding ) anzugeben.


Um aber die Frage richtig zu beantworten, da Stefan144 nichts in diesen Block geschrieben hat, würde es mich nicht wundern, wenn er eine Suchhilfe des Datenelements / der Domäne erwarten würde und nicht eigens implementieren wollte. Heißt unterm Strich, die Zeile mit dem Value-Request entfernen und los gehts.

Re: Fehler bei F4-Hilfe

Beitrag von DeathAndPain (Top Expert / 1135 / 128 / 242 ) » 18. Sep 2019 12:41

Um eine select-option mit werte-hilfe ( F4 ) zu nutzen, braucht der dahinterliegende Typ entweder Festwerte ( der in der domäne des types ist ) oder eine Suchhilfe.
Oder - und das dürfte in der Praxis sogar der häufigste Fall sein - eine in der Domäne oder als Fremdschlüsseltabelle des Tabellenfeldes festgelegte Wertetabelle, ggf. mit ergänzender Texttabelle.
EDIT 2: Sehe gerade erst, dass du im Coding das Event "SELECTION-SCREEN ON VALUE REQUEST FOR" abfängst. Das könnte auch der Grund sein.
Ja sicherlich ist es das. Mit SELECTION-SCREEN ON VALUE REQUEST FOR erklärt man, dass man die Default-Werthilfe für das betreffende Feld in diesem Fall außer Kraft setzen und durch eine manuell angegebene ersetzen möchte. Und wenn dann da nix kommt, dann ist da halt nix.
Also wenn du meinst, dass dieses Event nur für den -low Part der SO zieht, dann ja. ( kann man mit meinem test-coding ja schnell prüfen ^^ ). Im -High bereich kommt die Suchhilfe, im low nicht. ABAP hat hier allerdings das problem, dass man -low oder -high angeben muss. heißt für mich, wenn man sowohl high & low braucht, beides in eine Form / Methode / FuBa auslagern und dann jeweils im Block aufrufen
Da kann man ja dieselbe Routine nehmen und zweimal aufrufen, da sehe ich jetzt nicht so das Problem.
Um aber die Frage richtig zu beantworten, da Stefan144 nichts in diesen Block geschrieben hat, würde es mich nicht wundern, wenn er eine Suchhilfe des Datenelements / der Domäne erwarten würde und nicht eigens implementieren wollte
Das Problem bei Stefans Code ist noch ein ganz anderes. Es gibt einen Grund, weshalb man bei SELECT-OPTIONS anders als bei PARAMETERS hinter "FOR" ein Datenfeld (anstatt eines Datentypen) angeben muss (auch wenn ich das in ABAP nicht sonderlich schön gelöst finde). SELECT-OPTIONS beziehen sich nämlich auf die Werthilfe dieses Datenfeldes, und die hängen meistens an einer Fremdschlüsseltabelle. Dazu muss das Datenfeld aber über eine Tabelle definiert sein, denn nur Tabellenfelder können einen Fremdschlüssel haben, Domänen nicht.

Bedeutet im Klartext: Er müsste sein Feld test anders definieren. Anstelle von data test type S_CARR_ID müsste er schreiben: data test type SFLIGHT-CARRID (oder wahlweise bzw. bei älteren Releases data test like SFLIGHT-CARRID). Dann bezieht sich das Feld test auf die Datenbanktablle SFLIGHT statt nur auf das Datenelement und erbt damit auch die für die Suchhilfe verwendete Fremschlüsselprüfung. Über sein select-OPTIONS: s_test for test holt er sich das dann in sein Selektionsfeld rein. (Und natürlich muss das SELECTION-SCREEN ON VALUE REQUEST FOR weg.)

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
SaskuAc (18. Sep 2019 13:08)


Re: Fehler bei F4-Hilfe

Beitrag von SaskuAc (Specialist / 286 / 29 / 36 ) » 19. Sep 2019 07:52

DeathAndPain hat geschrieben:
18. Sep 2019 12:41
Also wenn du meinst, dass dieses Event nur für den -low Part der SO zieht, dann ja. ( kann man mit meinem test-coding ja schnell prüfen ^^ ). Im -High bereich kommt die Suchhilfe, im low nicht. ABAP hat hier allerdings das problem, dass man -low oder -high angeben muss. heißt für mich, wenn man sowohl high & low braucht, beides in eine Form / Methode / FuBa auslagern und dann jeweils im Block aufrufen
Da kann man ja dieselbe Routine nehmen und zweimal aufrufen, da sehe ich jetzt nicht so das Problem.
Da haben wir beides das gleiche gemeint. ^^
DeathAndPain hat geschrieben:
18. Sep 2019 12:41
Um eine select-option mit werte-hilfe ( F4 ) zu nutzen, braucht der dahinterliegende Typ entweder Festwerte ( der in der domäne des types ist ) oder eine Suchhilfe.
Oder - und das dürfte in der Praxis sogar der häufigste Fall sein - eine in der Domäne oder als Fremdschlüsseltabelle des Tabellenfeldes festgelegte Wertetabelle, ggf. mit ergänzender Texttabelle.

Um aber die Frage richtig zu beantworten, da Stefan144 nichts in diesen Block geschrieben hat, würde es mich nicht wundern, wenn er eine Suchhilfe des Datenelements / der Domäne erwarten würde und nicht eigens implementieren wollte
Das Problem bei Stefans Code ist noch ein ganz anderes. Es gibt einen Grund, weshalb man bei SELECT-OPTIONS anders als bei PARAMETERS hinter "FOR" ein Datenfeld (anstatt eines Datentypen) angeben muss (auch wenn ich das in ABAP nicht sonderlich schön gelöst finde). SELECT-OPTIONS beziehen sich nämlich auf die Werthilfe dieses Datenfeldes, und die hängen meistens an einer Fremdschlüsseltabelle. Dazu muss das Datenfeld aber über eine Tabelle definiert sein, denn nur Tabellenfelder können einen Fremdschlüssel haben, Domänen nicht.

Bedeutet im Klartext: Er müsste sein Feld test anders definieren. Anstelle von data test type S_CARR_ID müsste er schreiben: data test type SFLIGHT-CARRID (oder wahlweise bzw. bei älteren Releases data test like SFLIGHT-CARRID). Dann bezieht sich das Feld test auf die Datenbanktablle SFLIGHT statt nur auf das Datenelement und erbt damit auch die für die Suchhilfe verwendete Fremschlüsselprüfung. Über sein select-OPTIONS: s_test for test holt er sich das dann in sein Selektionsfeld rein. (Und natürlich muss das SELECTION-SCREEN ON VALUE REQUEST FOR weg.)
Da merkt man mal wieder was Erfahrung ausmacht. Entwickle jetzt seit 4 Jahren ABAP und hätte das so nicht gewusst ^^ ( liegt aber eventuell auch daran, dass ich mich nie so stark mit den Select-Options auseinander gesetzt habe ... ) Jetzt verstehe ich auch wieso in so manchen Reports das so angegeben wurde. also die Schreibweise DATA test type sflight-carrid.

Re: Fehler bei F4-Hilfe

Beitrag von DeathAndPain (Top Expert / 1135 / 128 / 242 ) » 19. Sep 2019 11:50

Jetzt verstehe ich auch wieso in so manchen Reports das so angegeben wurde. also die Schreibweise DATA test type sflight-carrid.
Ich finde die Schreibweise auch so günstiger, denn so sieht man, auf welches Datenbanktabellenfeld die Definition eines internen Feldes abzielt. Wenn es nicht offensichtlich ist, muss man sich sonst erst das Datenelement anschauen und im Extremfall einen Verwendungsnachweis machen, um zu sehen, wo das denn so überall gebraucht wird.

Und wenn sich aus irgendeinem Grund mal die Definition der Tabelle ändern und jenes Tabellenfeld anders definiert sein sollte, dann passen sich auf die Weise die darauf referierenden ABAP-Datenfelder automatisch an, so dass man bei seinem SELECT in jene Felder nicht in eine Typinkompatibilität hineinlaufen kann. Auch wenn sowas zugegebenermaßen selten vorkommt.

Re: Fehler bei F4-Hilfe

Beitrag von Stefan144 (ForumUser / 2 / 1 / 0 ) » 20. Sep 2019 10:33

SaskuAc hat geschrieben:
18. Sep 2019 07:40
Prüfe doch bitte mal den Typ "zdbm_contract_id_set".

du beziehst dich hier auf "go_sel", welcher eben diesen Typ hat.

Um eine select-option mit werte-hilfe ( F4 ) zu nutzen, braucht der dahinterliegende Typ entweder Festwerte ( der in der domäne des types ist ) oder eine Suchhilfe. ( welche über die SE11 angelegt werden kann - Tab "Zusatzeigenschaften" )

Heißt also, schaue mal ob der Typ zdbm_contract_id_set eine Suchhilfe hinterlegt hat. Wenn nein, dann schau dir mal die Domäne an und dort dann unter "Wertebereich".

EDIT 2: Sehe gerade erst, dass du im Coding das Event "SELECTION-SCREEN ON VALUE REQUEST FOR" abfängst. Das könnte auch der Grund sein. in meinem kleinen testprogramm ( s. unten ) hat diese Zeile dazu geführt, dass automatisch die suchhilfe deaktiviert wurde

Grüße

EDIT: Nimm bitte nächstes Mal ( im Forum ) beim Coding den Coding-Tag her. Dann ists leichter den Quelltext zu lesen. Danke :)


EDIT 2 Quelltext:

Code: Alles auswählen.

REPORT z_test.

tables sflight.

data test type S_CARR_ID.

select-OPTIONS: s_test for test no INTERVALS.

*at SELECTION-SCREEN ON VALUE-REQUEST FOR s_test-low.

START-OF-SELECTION.

  BREAK-POINT.


wenn ich die "on value-request" zeile auskommentiere, kommt die Suchhilfe, wenn ich sie drinnen lasse nicht.

Hi danke es hat geklappt. :)

Seite 1 von 1

Aktuelle Forenbeiträge

Web Service Restful API
vor 11 Stunden von Tron 2 / 32
Entwurfsmuster in ABAP / OO
vor 2 Tagen von Maximus 16 / 2132
VA01, Kundenauftragserfassung Preisdatum
vor 2 Tagen von SAP_ENTWICKLER 1 / 53
Rabax Fehlermeldung
vor 2 Tagen von zzcpak 2 / 84
Aufgabe Programm/- Tabellenerstellung
vor 2 Tagen von SaskuAc 3 / 84

Unbeantwortete Forenbeiträge

VA01, Kundenauftragserfassung Preisdatum
vor 2 Tagen von SAP_ENTWICKLER 1 / 53
HANA Audit Trail
vor einer Woche von JohnLocklay 1 / 97
Halber Tag Urlaub
vor einer Woche von SO4SAP 1 / 61
Funktionsbausteine BAPI_INCOMINGINVOICE*****
vor einer Woche von Rabea1103 1 / 70
S4/HANA in der Cloud / 14 Tage Trial
vor 3 Wochen von Tron 1 / 101