Suchhilfe dynamisch anbinden


Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Moderatoren: Jan, Steff

Suchhilfe dynamisch anbinden

Beitragvon Kowalski » 17.07.2012, 15:11

Hallo,
auf einem Selektionsbildschirm habe ich 2 Parameterfelder p_rolle und p_partner.
p_rolle ist eine Listbox mit 2 Werten, Kunden und Lieferanten.
Abhängig von der Auswahl soll an p_partner eine entsprechende Suchhilfe gebunden werden.
Die beiden Suchhilfen sind im Dictonary angelegt.

Wie realisiert man sowas?

Danke und Gruß
André
Kowalski
ForumUser
 
Beiträge: 6
Registriert: 14.01.2009, 12:18
Dank erhalten: 0 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Suchhilfe dynamisch anbinden

Beitragvon Unit605 » 17.07.2012, 15:41

Ich wuerde drei Paramter anlegen:

P_Rolle, P_Kunde mit Suchehilfe fuer Kunde, P_Liefer mit Suchhilfe fuer Lieferant.

Je nach dem was in P_Rolle ausgewaehlt wurde wuerde ich P_Kunde einblenden und P_Lieferant ausblenden, oder umgekehrt.
Unit605
Expert
 
Beiträge: 577
Registriert: 05.02.2009, 21:29
Wohnort: San Diego, CA, USA
Dank erhalten: 48 mal
Ich bin: Entwickler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon ralf.wenzel » 17.07.2012, 16:50

Das geht mit einer Handvoll Codingzeilen bei AT-SELECTION-SCREEN ON VALUE-REQUEST FOR .....
Bild
Ralf Wenzel • SAP, Datenschutz, Cloud Computing
Inh. Heuristika Unternehmensberatung, Hamburg
Publikationen
ralf.wenzel
Top Expert
 
Beiträge: 1734
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 32 mal
Ich bin: Freiberufler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon Unit605 » 17.07.2012, 19:13

ralf.wenzel hat geschrieben:Das geht mit einer Handvoll Codingzeilen bei AT-SELECTION-SCREEN ON VALUE-REQUEST FOR .....


Hast Du mal ein Beispiel?
Unit605
Expert
 
Beiträge: 577
Registriert: 05.02.2009, 21:29
Wohnort: San Diego, CA, USA
Dank erhalten: 48 mal
Ich bin: Entwickler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon ralf.wenzel » 17.07.2012, 19:27

IF P_ROLLE = wasauchimmerkundeist
Suchhilfe für Kunde anzeigen
ELSE.
Suchhilfe für Lieferant anzeigen
ENDIF.

Für die Anzeige einer Suchhilfe gibt es einen FB der SAP. Da ich schon Feierabend habe....
Bild
Ralf Wenzel • SAP, Datenschutz, Cloud Computing
Inh. Heuristika Unternehmensberatung, Hamburg
Publikationen
ralf.wenzel
Top Expert
 
Beiträge: 1734
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 32 mal
Ich bin: Freiberufler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon a-dead-trousers » 18.07.2012, 06:51

ADT delivers:

F4IF_GET_SHLP_DESCR zum Auslesen einer bestehenden Suchhilfe.
F4IF_START_VALUE_REQUEST zum Anzeigen.

Man kann auch zur Laufzeit selbst eine Suchhilfe erstellen bzw. eine vorhandene an die eigenen Bedürfnisse anpassen und dann Aufrufen lassen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.05
Basis: 7.02
a-dead-trousers
Top Expert
 
Beiträge: 1844
Registriert: 07.02.2011, 13:40
Dank erhalten: 369 mal
Ich bin: Entwickler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon Kowalski » 18.07.2012, 12:19

Hallo zusammen,

ich gehe jetzt mal davon aus, das die Aufgabenstellung soweit klar ist.

Egal welchen genannten Lösungsansatz ich versuche zu benutzen, am Ende scheitere ich immer an gewissen Umständen.

Der Lösungsansatz von Unit605 - wie bekomme ich es denn hin, das beim welchseln der Rolle, der Selektionsbildschirm aktuallisiert wird.
Ich habe kein AT SELECTION SCREEN Ereignis gefunden, welches das bewerkstelligt.

Bei dem Lösungsansatz mit dem VALUE-REQUEST FOR zerhaut es mir die Einträge in der Listbox :(

Gruß
André
Kowalski
ForumUser
 
Beiträge: 6
Registriert: 14.01.2009, 12:18
Dank erhalten: 0 mal

Re: Suchhilfe dynamisch anbinden

Beitragvon Dele » 18.07.2012, 14:06

Hallo André,

1. Lösungsansatz: P_ROLLE mit Listbox
Dann im Ereignis AT-SELECTION-SCREEN ON VALUE-REQUEST FOR P_PARTNER:
- mit Funktionsbaustein DYNP_VALUES_READ den ausgewählten Wert von P_ROLLE auslesen
- entsprechende Suchhilfe für P_Partner selbst programmieren oder mit F4IF_INT_TABLE_VALUE_REQUEST' anbieten

2. Lösungsansatz: P_ROLLE durch eine Radio-Button-Group mit zwei Feldern für Lieferant und Kunde ersetzen
- jedes Feld mit einem Dummy User-Command besetzen, damit immer PAI durchlaufen wird
- entsprechende Suchhilfe für P_Partner gemäß den zwei Feldern realisieren

Gruß dele
Dele
Specialist
 
Beiträge: 152
Registriert: 06.05.2005, 11:07
Dank erhalten: 10 mal

Re: Suchhilfe dynamisch anbinden

Beitragvon Unit605 » 18.07.2012, 14:16

Kowalski hat geschrieben:Der Lösungsansatz von Unit605 - wie bekomme ich es denn hin, das beim welchseln der Rolle, der Selektionsbildschirm aktuallisiert wird.
Ich habe kein AT SELECTION SCREEN Ereignis gefunden, welches das bewerkstelligt.
André


AT SELECTION-SCREEN OUTPUT.

Program wird aufgerufen mit Vorbelegung Kunde, Parameter Kunde ist sichtbar, Parameter Lieferrant ist nicht sichtbar.
Wird auf Lieferrant in der Listbox geandert, setze Parameter Kunde auf nicht sichtbar und Parameter Lieferrant auf sichtbar.

Zeig mal Dein bisheriges Coding vom Screen mit der Listbox.
Unit605
Expert
 
Beiträge: 577
Registriert: 05.02.2009, 21:29
Wohnort: San Diego, CA, USA
Dank erhalten: 48 mal
Ich bin: Entwickler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon JHM » 18.07.2012, 15:11

Kowalski hat geschrieben:Bei dem Lösungsansatz mit dem VALUE-REQUEST FOR zerhaut es mir die Einträge in der Listbox :(


in etwa so:

Code: Alles auswählen
REPORT  ztest_sel.
* Für Listbox
TYPE-POOLS vrm.
DATA: gw_value TYPE vrm_value,
      gt_values TYPE vrm_values.

TYPES: BEGIN OF t_key,
          fieldname TYPE fieldname,
          position  TYPE tabfdpos,
        END   OF t_key.

**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_list TYPE c AS LISTBOX
                          VISIBLE LENGTH 20
                          DEFAULT 'K'
                          USER-COMMAND push. "damit die Auswahl immer bei PHR zur verfügung steht
PARAMETERS: p_dktor TYPE kunnr.
SELECTION-SCREEN END OF BLOCK b1.
**********************************************************************

INITIALIZATION.
* Listbox mit Tabellen füllen
  gw_value-key  = 'K'.
  gw_value-text = 'Kunde'.
  APPEND gw_value TO gt_values.

  gw_value-key  = 'L'.
  gw_value-text = 'Lieferant'.
  APPEND gw_value TO gt_values.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'P_LIST'
      values          = gt_values
    EXCEPTIONS
      id_illegal_name = 1
      OTHERS          = 2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dktor.
  DATA ls_shlp TYPE shlp_descr.
  DATA lt_return_values TYPE TABLE OF ddshretval.
  DATA ls_interface TYPE ddshiface.
  FIELD-SYMBOLS <ls_return_values> TYPE ddshretval.
* Je nach eingebenen Wert
  CASE p_list.
    WHEN 'K'.
*     Die Beschreibung der Suchhilfe Kunde besorgen
      CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
        EXPORTING
          shlpname = 'C_KUNNR'
        IMPORTING
          shlp     = ls_shlp.

*     Rückgabefeld markieren.
      ls_interface-valtabname = 'X'.
      ls_interface-valfield   = 'X'.
      MODIFY ls_shlp-interface FROM ls_interface
                            TRANSPORTING valtabname valfield
                            WHERE shlpfield = 'KUNNR'.

    WHEN 'L'.
*     Die Beschreibung der Suchhilfe Lieferant besorgen
      CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
        EXPORTING
          shlpname = 'KRED_C'
        IMPORTING
          shlp     = ls_shlp.

*     Rückgabefeld markieren.
      ls_interface-valtabname = 'X'.
      ls_interface-valfield   = 'X'.
      MODIFY ls_shlp-interface FROM ls_interface
                            TRANSPORTING valtabname valfield
                            WHERE shlpfield = 'LIFNR'.
    WHEN OTHERS.
  ENDCASE.

* Den F4-Ablauf starten
  CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
    EXPORTING
      shlp          = ls_shlp
    TABLES
      return_values = lt_return_values.

  READ TABLE lt_return_values ASSIGNING <ls_return_values> INDEX 1.

  p_dktor = <ls_return_values>-fieldval.
 
Gruß Hendrik
JHM
Expert
 
Beiträge: 873
Registriert: 15.02.2006, 12:39
Wohnort: Aachen
Dank erhalten: 98 mal

Re: Suchhilfe dynamisch anbinden

Beitragvon Unit605 » 18.07.2012, 16:27

Ich dachte mehr an so eine Loesung (den Teil fuer die Listbox habe ich mir von JHM ausgeliehen):

Code: Alles auswählen
REPORT  ztest_sel.
*    * Für Listbox
TYPE-POOLS vrm.
DATA: gw_value TYPE vrm_value,
      gt_values TYPE vrm_values.

TYPES: BEGIN OF t_key,
          fieldname TYPE fieldname,
          position  TYPE tabfdpos,
        END   OF t_key.

*    **********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_list TYPE c AS LISTBOX
                          VISIBLE LENGTH 20
                          DEFAULT 'D'
                          USER-COMMAND push. "damit die Auswahl immer bei PHR zur verfügung steht
PARAMETERS: p_debi TYPE kna1-kunnr MATCHCODE OBJECT debi MODIF ID D.
PARAMETERS: p_kred TYPE lfa1-lifnr MATCHCODE OBJECT kred_c MODIF ID K.
SELECTION-SCREEN END OF BLOCK b1.
*    **********************************************************************

INITIALIZATION.
*    * Listbox mit Tabellen füllen
  gw_value-key  = 'D'.
  gw_value-text = 'Debitor'.
  APPEND gw_value TO gt_values.

  gw_value-key  = 'K'.
  gw_value-text = 'Kreditor'.
  APPEND gw_value TO gt_values.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'P_LIST'
      values          = gt_values
    EXCEPTIONS
      id_illegal_name = 1
      OTHERS          = 2.

AT SELECTION-SCREEN OUTPUT.
  loop at screen.
    if screen-group1 = p_list.
      screen-invisible = 0.
    else.
      if screen-group1 ne p_list and screen-group1 is not initial.
        screen-invisible = 1.
      endif.
    endif.
    modify screen.
  endloop.
Unit605
Expert
 
Beiträge: 577
Registriert: 05.02.2009, 21:29
Wohnort: San Diego, CA, USA
Dank erhalten: 48 mal
Ich bin: Entwickler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon Kowalski » 19.07.2012, 10:32

Hallo zusammen,

vielen Dank für eure Hilfe.
Der Code von JHM hat mir weitergeholfen - genau so wollte ich es haben. Danke.

Mit der Lösung von Unit605 hätte ich auch leben können. Natürlich ist diese nicht so elegant
wie die von JHM, aber den Zwecke hätte sie auch erfüllt. Was mich dabei jedoch noch stört,
ist das die Laufzeitkomprimierung beim ausblenden nicht greift. Die Lücke die entsteht ist
unschön - bekämme man das auch noch irgendwie in den Griff?

Gruß
André
Kowalski
ForumUser
 
Beiträge: 6
Registriert: 14.01.2009, 12:18
Dank erhalten: 0 mal

Re: Suchhilfe dynamisch anbinden

Beitragvon black_adept » 19.07.2012, 11:43

Hallo André,

in Unit605s Coding noch folgende Zeile einfügen, dann klappt's auch mit der Laufzeitkomprimierung:

Code: Alles auswählen
      IF screen-group1 NE p_list AND screen-group1 IS NOT INITIAL.
        screen-invisible = 1.
        screen-input = 0." Das hier fehlte noch
      ENDIF.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
Unit605
black_adept
Top Expert
 
Beiträge: 2024
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 206 mal
Ich bin: Freiberufler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon black_adept » 19.07.2012, 11:57

Und gleich wieder etwas gelernt. Ich hatte mich eben schon gewundert, warum das Fehlen von "Screen-input = 0" nicht dazu geführt hatte, dass das Feld als Passwortfeld angezeigt wird.
Das scheint damit zusammen zu hängen, dass ein Matchcode-object mitgegeben wurde.

Code: Alles auswählen
REPORT.

PARAMETERS: p_kred  TYPE lfa1-lifnr MATCHCODE OBJECT kred_c.
PARAMETERS: p_kred2 TYPE lfa1-lifnr.


AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    screen-invisible = 1.
    MODIFY SCREEN.
  ENDLOOP.


Kann mich nicht erinnern in irgendeiner Doku gesehen zu haben, dass "MATCHCODE OBJECT nnn" dazu führt, dass ein Passwortfeld ( Screen-input = 1, Screen-invisible = 1 ) nicht angezeigt wird. *sigh*
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2024
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 206 mal
Ich bin: Freiberufler/in

Re: Suchhilfe dynamisch anbinden

Beitragvon shapoc » 11.10.2012, 15:28

Hallo,

sorry dass ich das Topic nochmal hochhole, aber ich habe exakt das besagte Problem und komme mit der vorgeschlagenen Lösung nicht ganz zum Ziel.

Ich möchte die von JHM vorgeschlagene Lösung umsetzen, aber beim Event 'AT SELECTION-SCREEN ON VALUE-REQUEST FOR werks.' kann ich keine Unterscheidung machen, ob in einem anderen Parameter (matnr) etwas eingetragen wurde.

Hier mal mein bisheriger Quellcode:
Code: Alles auswählen
SELECTION-SCREEN BEGIN OF BLOCK stl WITH FRAME TITLE text-001.
PARAMETERS: matnr TYPE mara-matnr OBLIGATORY.
PARAMETERS: werks TYPE marc-werks OBLIGATORY.
PARAMETERS: stlan TYPE mast-stlan.
PARAMETERS: stlal TYPE mast-stlal.
SELECTION-SCREEN END OF BLOCK stl.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR werks.

  DATA ls_shlp TYPE shlp_descr.
  DATA lt_return_values TYPE TABLE OF ddshretval.
  DATA ls_interface TYPE ddshiface.
  FIELD-SYMBOLS <ls_return_values> TYPE ddshretval.

  CLEAR ls_shlp.

  CASE matnr.

    WHEN ''.
      CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
        EXPORTING
          shlpname = 'H_WERKS_MATNR'"'H_T001W_C'
          shlptype = 'SH'
        IMPORTING
          shlp     = ls_shlp.


    WHEN OTHERS.
                                                            "S_MAT1
      CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
        EXPORTING
          shlpname = 'H_WERKS_MATNR'
          shlptype = 'SH'
        IMPORTING
          shlp     = ls_shlp.

  ENDCASE.

* Rückgabefeld markieren.
  ls_interface-valtabname = 'X'.
  ls_interface-valfield   = 'X'.
  MODIFY ls_shlp-interface FROM ls_interface
                        TRANSPORTING valtabname valfield
                        WHERE shlpfield = 'WERKS'.

  CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
    EXPORTING
      shlp          = ls_shlp
    TABLES
      return_values = lt_return_values.

  READ TABLE lt_return_values ASSIGNING <ls_return_values> INDEX 1.
 


Es wird immer die erste Suchhilfe angezeigt, unabhängig davon was im Parameterfeld 'matnr' eingegeben wurde oder ob es leer ist.
Ich habe es auch mit einer IF-Abfrage probiert, ohne Erfolg :-(

Kann mir jemand einen Tipp geben, was ich übersehen habe?
shapoc
ForumUser
 
Beiträge: 42
Registriert: 22.02.2006, 09:04
Dank erhalten: 0 mal

Nächste

Zurück zu ABAP® Core

  Aktuelle Beiträge   
Join Bedingung
vor einer Stunde von christof 3 Antw.
SY-UCOMM für Barcodescanner-Steuerung
vor 18 Stunden von a-dead-trousers 1 Antw.
Sap Query - left outer join Frage
vor 18 Stunden von a-dead-trousers 1 Antw.
FI-CA - Nach Deaktivierung des Ratenplans Mahnstufe der Urps
vor 23 Stunden von ColinMacLaren 0 Antw.
Daten fehlen nach Umzug in anderes Rechenzentrum
Gestern von RantanplanFX 0 Antw.

  Ähnliche Beiträge beta
Selbstprogrammierte Suchhile an Select-Options Feld anbinden
15.03.2006, 14:03 von ereglam 3 Antw.
Suchhilfe
08.03.2004, 10:28 von Paint 4 Antw.
Suchhilfe
06.04.2006, 12:05 von bibo 2 Antw.
ALV Suchhilfe
07.08.2007, 14:35 von john.duke 3 Antw.
Suchhilfe
03.07.2006, 15:21 von moin 3 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!