Dynamischer Typ

Getting started ... Alles für einen gelungenen Start.
22 Beiträge • Vorherige Seite 2 von 2 (current)
22 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von Mrs. Hilflos (Specialist / 225 / 0 / 0 ) »
Hallo Steff,
danke im voraus.

Ich werde mich mal schlau machen was ein subroutine-pool ist.
Habe damit noch keinerlei Erfahrungen gemacht.

Gruß
Mrs. Hilflos

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


Beitrag von Steff (Site Admin / 386 / 0 / 1 ) »
Hallo,

hab mal schnell was probiert. Müsste auch ohne Generierung von subroutine-pools gehen. Hab mal ein kleines Testprogramm geschrieben:

Code: Alles auswählen.

data: lt_dfies type DFIES occurs 0 with header line,
      ls_dfies type dfies,
      lt_bkpf type bkpf occurs 0 with header line,
      ls_fieldcatalog type LVC_S_FCAT,
      lt_fieldcatalog type lvc_t_fcat.

data: test type ref to data,
      my_table type ref to data.

field-symbols: <fs> type any,
               <ls_bkpf> type any,
               <mytab> type table.

create data test type ('BKPF').
assign test->* to <fs>.



  CALL FUNCTION 'DDIF_NAMETAB_GET'
       EXPORTING
            tabname     = 'BKPF'
       TABLES
            dfies_tab   = lt_dfies
     EXCEPTIONS
          NOT_FOUND   = 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.


  LOOP AT lt_dfies INTO ls_dfies.
    MOVE-CORRESPONDING ls_dfies TO ls_fieldcatalog.
    APPEND ls_fieldcatalog TO lt_fieldcatalog.
  ENDLOOP.

* Tabelle mit Feldkatalog erstellen
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = lt_fieldcatalog
     IMPORTING
       ep_table        = my_table
      .

assign my_table->* to <mytab>.

select * from bkpf up to 100 rows into table lt_bkpf.

loop at lt_bkpf assigning <ls_bkpf>.

CALL FUNCTION 'Z_FIELD_MAPPER'
  EXPORTING
    IS_SOURCESTRUCTURE       = <ls_bkpf>
  IMPORTING
    ES_TARGETSTRUCTURE       = <fs>
  TABLES
    IT_FIELDLIST             = lt_dfies
          .

 append <fs> to <mytab>.
endloop.

break-point.
mit den FUBA: Z_FIELD_MAPPER:

Code: Alles auswählen.

FUNCTION Z_FIELD_MAPPER.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(IS_SOURCESTRUCTURE) TYPE  ANY
*"  EXPORTING
*"     REFERENCE(ES_TARGETSTRUCTURE) TYPE  ANY
*"  TABLES
*"      IT_FIELDLIST STRUCTURE  DFIES
*"----------------------------------------------------------------------

  DATA: ls_fieldlist TYPE dfies,
        lv_lines TYPE i.

  FIELD-SYMBOLS: <lf_sourcefield> TYPE ANY,
                 <lf_targetfield> TYPE ANY.

  CLEAR: lv_lines, ls_fieldlist.
  DESCRIBE TABLE it_fieldlist LINES lv_lines.
  IF lv_lines IS INITIAL.
    EXIT.
  ENDIF.

  LOOP AT it_fieldlist INTO ls_fieldlist.
    ASSIGN COMPONENT ls_fieldlist-fieldname OF STRUCTURE
is_sourcestructure TO <lf_sourcefield>.
    IF sy-subrc EQ 0.
      ASSIGN COMPONENT ls_fieldlist-fieldname OF STRUCTURE
    es_targetstructure TO <lf_targetfield>.
      IF sy-subrc EQ 0.
        <lf_targetfield> = <lf_sourcefield>.
      ENDIF.
    ENDIF.
    UNASSIGN: <lf_sourcefield>, <lf_targetfield>.
    CLEAR ls_fieldlist.
  ENDLOOP.

ENDFUNCTION.
Hat in meinen Tests funktioniert. Probier's einfach mal aus.

Gruß,
Steff

Beitrag von Mrs. Hilflos (Specialist / 225 / 0 / 0 ) »
Hallo Steff,

vielen vielen Dank, es funktioniert!

Ich habe jetzt nur noch das Problem, dass ich darin gepackte Zahlen habe.
Diese möchte ich vor der Übergabe an die Ausgabedatei umwandeln, dass sie lesbar sind.

Kann ich das auch über die Feldsymbole lösen?

Gruß
Mrs. Hilflos

Beitrag von Steff (Site Admin / 386 / 0 / 1 ) »
Hallo,

das geht auch, aber dann musst Du ggf. den Mapping-Baustein entsprechend anpassen.
Evtl. klappt auch eine automatische Konvertierung, wenn Du in der Zielstruktur den P-Feldern einen char-typ gibst. Einfach ein bisschen rumexperimentieren ;-)

Gruß,
Steff

Beitrag von Mrs. Hilflos (Specialist / 225 / 0 / 0 ) »
Hallo Steff,

Code: Alles auswählen.

  loop at it_fieldlist into ls_fieldlist.
***************************eingefügt**************
    IF ls_fieldlist-inttype EQ 'P'.
      ls_fieldlist-inttype = 'C'.
      ls_fieldlist-datatype = 'CHAR'.
      ls_fieldlist-decimals = 0.
      MODIFY it_fieldlist FROM ls_fieldlist.
    ENDIF.
***************************eingefügt**************
    assign component ls_fieldlist-fieldname
    of structure is_sourcestructure to <lf_sourcefield>.
    if sy-subrc eq 0.
      assign component ls_fieldlist-fieldname
      of structure es_targetstructure to <lf_targetfield>.
      if sy-subrc eq 0.
        <lf_targetfield> = <lf_sourcefield>.
      endif.
    endif.
    unassign: <lf_sourcefield>, <lf_targetfield>.
    clear ls_fieldlist.
  endloop.
Mein eingefügtes Coding ändert zwar die itab allerdings hat das keine Auswirkungen auf die Zielstruktur. :oops:
Wie kann ich denn die Zielstruktur es_targetstructure ändern?
Da sie vom Typ ANY ist, kann ich auch nicht die einzelnen Felder ansprechen.

Mit folgendem komme ich auch nicht wirklich weiter:

Code: Alles auswählen.

      ASSIGN COMPONENT ls_fieldlist-fieldname
      OF STRUCTURE es_targetstructure TO <lf_targetfield>
        TYPE 'C'.
Dann habe ich zwar ein Characterfeld, die Ausgabelänge kann ich aber so nicht anpassen.

Gruß
Mrs. Hilflos

Beitrag von Mrs. Hilflos (Specialist / 225 / 0 / 0 ) »
Hallo zusammen,

habs hinbekommen.
Für alle die es interessiert:

Im Hauptprogramm schon den Feldkatalog mit den entsprechenden Characterfeldern aufbauen:

Code: Alles auswählen.

  LOOP AT ct_dfies INTO ls_dfies.
  
    IF ls_dfies-inttype EQ 'P'.
      ls_dfies-inttype = 'C'.
      ls_dfies-datatype = 'CHAR'.
      ls_dfies-decimals = 0.
      MODIFY ct_dfies FROM ls_dfies.
    ENDIF.

* Feldkatalog von p_struct
    MOVE-CORRESPONDING ls_dfies TO ls_fieldcatalog.
    APPEND ls_fieldcatalog TO lt_fieldcatalog.
  ENDLOOP.

* Tabelle mit Feldkatalog von p_struct erstellen
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog  = lt_fieldcatalog
     IMPORTING
       ep_table        = my_table
      .

* Zuweisung des Datenobjekts an das Feldsymbol (Dereferenzierung).
  ASSIGN my_table->* TO <lt_table>.
Danach das Datenobjekt erzeugen

Code: Alles auswählen.

  CREATE DATA dref LIKE LINE OF <lt_table>.
  ASSIGN dref->* TO <fs>. 
Danach den FuBa aufrufen.

Puh endlich geschafft.
Dank an alle für die Hilfe, v.a. an Steff, der sehr viel Geduld bewiesen hat.

Gruß
Mrs. Hilflos

Beitrag von Steff (Site Admin / 386 / 0 / 1 ) »
Hallo,

jederzeit gerne :-). Freut mich, das alles geklappt hat.

Gruß,
Steff

Vergleichbare Themen

13
Antw.
10779
Views
Dynamischer Selection Screen mit dynamischer Suchhilfe
von Johnny11 » 26.03.2014 08:19 • Verfasst in ABAP® Core
5
Antw.
7391
Views
Dynamischer Methodenaufruf mit dynamischer Tabelle
von Tommy Nightmare » 08.09.2017 13:23 • Verfasst in ABAP Objects®
2
Antw.
4304
Views
Dynamischer Methodenaufruf mit dynamischer Tabelle
von mark.thk » 12.12.2018 10:34 • Verfasst in ABAP Objects®
8
Antw.
16592
Views
dynamischer Selektionsscreen
von eddi89 » 05.11.2009 15:13 • Verfasst in ABAP® für Anfänger
1
Antw.
2649
Views
dynamischer Operator
von bliP! » 22.05.2006 14:24 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

Aktuelle Forenbeiträge

LSMW-Problem
vor 3 Stunden von mazu gelöst 5 / 666
ATC Finding in Smartforms
vor 4 Tagen von sap_enthusiast 2 / 631

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 3 Stunden von mazu gelöst 5 / 666
ATC Finding in Smartforms
vor 4 Tagen von sap_enthusiast 2 / 631

Unbeantwortete Forenbeiträge

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