SELECT auf interne Tabelle?

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

SELECT auf interne Tabelle?

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Hallo,

ich habe mal wieder ein Problem:

Ich möchte das Format einer MATNR - Spalte, welche sich in der Dictionary Tabelle z13k_mat_kalk befindet mit CONVERSION_EXIT_MATN1_OUTPUT ändern und dann eine normale Select Abfrage darauf starten.

Ursache hierfür ist, das in der oben genannten Dictionary Tabelle die Materiannr. im falschen Format eingetragen wurde, sprich statt 000000008105503056 wurde das externe Format 8-10-503-056 abgelegt.

Gebe ich nun in meiner Select-Options eine Matnr. an (externes Format wird ja verlangt) bekomme ich logischerweise nie ein Ergebnis, da SO eine Umformung der Eingabe unternimmt.

Hat jemand ne Idee, wie einen Workaround bauen könnte? Ich habe eine interne Tabelle gebildet, die CONVERSION_EXIT_MATN1_OUTPUT angewendet und versucht mit einer Select-Abfrage darauf zuzugreifen. Geht leider nicht, da ich ja nur auf Dictionary Objekte per Select zugreifgen kann. Muss ich eine weitere Dictionary Tablle anlegen um das Problem zu lösen?

Ich hoffe, ich konnte mein Problem ausreichend erläutern.

Viele Dank im Voraus

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


Re: SELECT auf interne Tabelle?

Beitrag von black_adept (Top Expert / 4064 / 120 / 932 ) »
Hi spookykid,

nimm eine Select-Option, die nicht auf die Domäne MATNR referenziert, sondern auf eine die gleich lang ist, aber keine Konvertierungsroutine besitzt. Z.B. Domäne/Datenelement BISMT
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT auf interne Tabelle?

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Danke für deine Antwort. Ich habe ein Ergebnis bekommen, jedoch hat das Feld logischerweise keine Suchhilfe mehr. Wenn ich mir das Ergebnis ausgeben lasse, wird aber auf Grund der auf MATNR bestehende Konvertierungsexits das Ergebnis bis zur Unkenntlichkeit verfälscht (siehe Bild).
Gibt es keine Möglichkeit das Datenfeld umzuformatieren und dann richtig ausgeben zu lassen?

Vielen Dank

Re: SELECT auf interne Tabelle?

Beitrag von ewx (Top Expert / 4834 / 308 / 636 ) »
Du kannst im ALV-Feldkatalog den Konvertierungsexit ignorieren:
lvc_s_fcat-NO_CONVEXT = 'X'.

Re: SELECT auf interne Tabelle?

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
ewx hat geschrieben:Du kannst im ALV-Feldkatalog den Konvertierungsexit ignorieren:
lvc_s_fcat-NO_CONVEXT = 'X'.

Bei Verwendung der REUSE_ALV_GRID_DISPLAY Funktion kann ich das nicht angeben, oder?

Re: SELECT auf interne Tabelle?

Beitrag von ewx (Top Expert / 4834 / 308 / 636 ) »
Du darfst dann halt nicht die Struktur/ Tabelle mitgeben, sondern musst dir vorher mit REUSE_ALV_FIELDCATALOG_MERGE den Feldkatalog ermitteln, entsprechend ändern und dann an den REUSE-Baustein übergeben.

Re: SELECT auf interne Tabelle?

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&      Form  anz_grid
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM anz_grid.
DATA: ls_fieldc Type lvc_s_fcat.
ls_fieldc-NO_CONVEXT = 'X'.


CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
* EXPORTING
*   I_PROGRAM_NAME               =
*   I_INTERNAL_TABNAME           =
*   I_STRUCTURE_NAME             =
*   I_CLIENT_NEVER_DISPLAY       = 'X'
*   I_INCLNAME                   =
*   I_BYPASSING_BUFFER           =
*   I_BUFFER_ACTIVE              =
  CHANGING
    ct_fieldcat                  = ls_fieldc
* EXCEPTIONS
*   INCONSISTENT_INTERFACE       = 1
*   PROGRAM_ERROR                = 2
*   OTHERS                       = 3
          .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.








   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
*     I_CALLBACK_PROGRAM                = ' '
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
     I_STRUCTURE_NAME                  = 'z13k_mat_kalk'
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      =
*     I_GRID_SETTINGS                   =
*     IS_LAYOUT                         =
*     IT_FIELDCAT                       =
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT                           =
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = 'X'
*     I_SAVE                            = ' '
*     IS_VARIANT                        =
*     IT_EVENTS                         =
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab                          = it_mat
   EXCEPTIONS
     PROGRAM_ERROR                     = 1
     OTHERS                            = 2
            .
  IF sy-subrc <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.          
Ich habe leider keien Ahnung, wie das funktioniert. Kennt jemand Literatur wo ich solche Standardsachen finde?

Re: SELECT auf interne Tabelle?

Beitrag von ewx (Top Expert / 4834 / 308 / 636 ) »

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&      Form  anz_grid
*&---------------------------------------------------------------------*
FORM anz_grid.
DATA lt_fcat type SLIS_T_FIELDCAT_ALV.
field-symbols <fcat> type slis_fieldcat_alv.


CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
 EXPORTING
   I_STRUCTURE_NAME             = 'z13k_mat_kalk'
  CHANGING
    ct_fieldcat                  = lt_fcat.

  loop at lt_fcat assigning <fcat>.
  case <fcat>-fieldname.
  when 'MATNR'.
   <fcat>-no_convext = 'X'.
endcase.
endloop.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_STRUCTURE_NAME                  = space
     IT_FIELDCAT                       = lt_Fcat
    TABLES
      t_outtab                          = it_mat
   EXCEPTIONS
     PROGRAM_ERROR                     = 1
     OTHERS                            = 2.

ENDFORM.          
Spookykid hat geschrieben: Ich habe leider keien Ahnung, wie das funktioniert. Kennt jemand Literatur wo ich solche Standardsachen finde?
hier... ;)

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Spookykid


Re: SELECT auf interne Tabelle?

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Hi,
vielen Dank für deine Hilfe. Ich bekomme jedoch immer eine Fehlermeldung, dass SLIS_T_FIELDCAT_ALV unbekannt sei, obwohl ich durch Doppelklick mir die Klassendefinition anschauen kann.

Re: SELECT auf interne Tabelle?

Beitrag von ewx (Top Expert / 4834 / 308 / 636 ) »
Der Typ ist nicht im Dictionary sondern in einem Type-Pool deklariert; den musst du noch im Programm bekannt machen:
TYPE-POOLS SLIS.

Re: SELECT auf interne Tabelle?

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Du musst die Typgruppe SLIS in deinem Programm per

Code: Alles auswählen.

TYPE-POOLS: SLIS.


einbinden.

EDIT: Enno war schneller. *grmpf*

Re: SELECT auf interne Tabelle?

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
danke euch beiden. Was ist den der Unterschied zwischen dem Type-Pool und dem Dictionary?

Re: SELECT auf interne Tabelle?

Beitrag von ewx (Top Expert / 4834 / 308 / 636 ) »
Und? Wer zuerst...? ;)
Type-Pools sind im Grunde nur ausgelagerte Typdeklarationen und Konstanten.
So kannst du eine Reihe Typen definieren, ohne dass diese einzeln im Dictionary beschrieben und definiert werden müssen.

Re: SELECT auf interne Tabelle?

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Ihr seid spitze alles funktioniert. Rein interesshalber: Kann ich Userexits auch auf Datenfeldern deaktivieren?

Wenn ich folgenden Code habe und den Userexit für die Materialnummer deaktivieren möchte:

Code: Alles auswählen.

*iterieren der Tabelle
  LOOP AT it_mat INTO wa_mat.
    WRITE:
        / wa_mat-werks UNDER 'Werk',
         wa_mat-datum UNDER 'Datum',
         wa_mat-matnr UNDER 'Materialnummer',
         wa_mat-losgr UNDER 'Losgröße',
         wa_mat-aenderer UNDER 'Erstellt von',
         wa_mat-erledigt UNDER 'Erledigt',
         wa_mat-hinweis UNDER 'Hinweis'.

  ENDLOOP.

Re: SELECT auf interne Tabelle?

Beitrag von ewx (Top Expert / 4834 / 308 / 636 ) »
Das hat aber gedauert, bis ich das verstanden hatte... ;)
Du meinst "Konvertierungsroutinen" und nicht "Userexits"!
<haarspalterei>Und: du deaktivierst ihn ja nicht, sondern du benutzt ihn bloss nicht </haarspalterei>
Ja, kannst du auch: Mit dem WRITE-Zusatz NO EDIT-MASK.
Eine eigene Aufbereitung kannst du mittels EDIT-MASK 'xyz' verwenden (F1-Hilfe).

Vergleichbare Themen

25
Antw.
7298
Views
SELECT in interne Tabelle in Abhängigkeit von..
von fl0w » 25.06.2007 10:51 • Verfasst in ABAP® für Anfänger
2
Antw.
2832
Views
SELECT über interne Tabelle
von codierknecht » 26.10.2006 15:32 • Verfasst in ABAP® für Anfänger
5
Antw.
36107
Views
Select-Anweisung auf eine interne Tabelle ???
von bohne » 21.01.2007 23:46 • Verfasst in ABAP® für Anfänger
3
Antw.
2883
Views
Interne Tabelle dynamisch im Select verwenden
von Dude » 14.11.2006 11:26 • Verfasst in ABAP® Core
0
Antw.
26
Views

Ü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.