Zum Inhalt springen

Agent Purple

Mitglieder
  • Gesamte Inhalte

    48
  • Benutzer seit

  • Letzter Besuch

Beiträge von Agent Purple

  1. habe ich einen denk fehler oder was falsch verstanden?

    Beides...

    Die Parameter können über deine eigenen Daten vorbelegt und im Programm als Vorschlagwerte verwendet werden.

    Jede programmtechnische Änderung an dem Wert wird lediglich im Speicher vorgehalten (gilt bis zur Abmeldung) und nicht in die eigenen Daten übernommen.

    Wenn du das dort ändern willst, musst du das in der Tabelle USR05 (glaub ich) tun. Wenn schon, dann aber vorsichtig sein; kannst auch schnell die Daten anderer Benutzer zerlegen.

    Grüße

    Agent Purple

  2. Variablen bzw. Strukturen zum Zugriff auf eine Tabelle sind generell schlecht.

    Du machst das beispielsweise wie folgt am Beispiel des FI-Beleges.

    * Local data

    DATA lt_bkpf TYPE FAGL_T_BKPF.

    FIELD-SYMBOLS <bkpf> type bkpf.

    SELECT * FROM BKPF INTO TABLE lt_bkpf

    WHERE ...

    SORT lt_bkpf BY bukrs belnr gjahr.

    READ TABLE lt_bkpf BINARY SEARCH ASSIGNING <bkpf>

    WITH KEY

    bukrs = p_bukrs

    belnr = p_belnr

    gjahr = p_gjahr.

    <bkpf>-bktxt = 'Sonstwas'.

    WRITE / <bkpf>-bukrs.

    WRITE / <bkpf>-belnr.

    WRITE / <bkpf>-gjahr.

    WRITE / <bkpf>-bktxt.

    Hinweis: BINARY SEACH setzt voraus, dass die Tabelle nach den gesuchten Schlüsseln aufsteigend sortiert ist. Auf Performancegesichtspunkten ist das jedoch dringend zu empfehlen (siehe auch Online-Doku dazu).

  3. Variablen bzw. Strukturen zum Zugriff auf eine Tabelle sind generell schlecht.

    Du machst das beispielsweise wie folgt am Beispiel des FI-Beleges.

    * Local data

    DATA lt_bkpf TYPE FAGL_T_BKPF.

    FIELD-SYMBOLS <bkpf> type bkpf.

    SELECT * FROM BKPF INTO TABLE lt_bkpf

    WHERE ...

    SORT lt_bkpf BY bukrs belnr gjahr.

    READ TABLE lt_bkpf BINARY SEARCH ASSIGNING <bkpf>

    WITH KEY

    bukrs = p_bukrs

    belnr = p_belnr

    gjahr = p_gjahr.

    <bkpf>-bktxt = 'Sonstwas'.

    WRITE / <bkpf>-bukrs.

    WRITE / <bkpf>-belnr.

    WRITE / <bkpf>-gjahr.

    WRITE / <bkpf>-bktxt.

    Hinweis: BINARY SEACH setzt voraus, dass die Tabelle nach den gesuchten Schlüsseln aufsteigend sortiert ist. Auf Performancegesichtspunkten ist das jedoch dringend zu empfehlen.

  4. Variablen bzw. Strukturen zum Zugriff auf eine Tabelle sind generell schlecht.

    Du machst das beispielsweise wie folgt am Beispiel des FI-Beleges.

    * Local data

    DATA lt_bkpf TYPE FAGL_T_BKPF.

    FIELD-SYMBOLS <bkpf> type bkpf.

    SELECT * FROM BKPF INTO TABLE lt_bkpf

    WHERE ...

    SORT lt_bkpf BY bukrs belnr gjahr.

    READ TABLE lt_bkpf BINARY SEARCH ASSIGNING <bkpf>

    WITH KEY

    bukrs = p_bukrs

    belnr = p_belnr

    gjahr = p_gjahr.

    WRITE / <bkpf>-bukrs.

    WRITE / <bkpf>-belnr.

    WRITE / <bkpf>-gjahr.

    Hinweis: BINARY SEACH setzt voraus, dass die Tabelle nach den gesuchten Schlüsseln aufsteigend sortiert ist. Auf Performancegesichtspunkten ist das jedoch dringend zu empfehlen.

  5. Um eine Ikone auf einem Dynpro anzuzeigen, legst du ein neues Feld vom Typ ICONNAME an.

    Wenn du feststellst, dass deine Nummer nicht eindeutig ist, rufst du den Fuba ICON_CREATE im PBO des Dynpros auf, andernfalls halt nicht.

    Dem Baustein kannst du einen Text und einen zusätzlichen Text für den Tooltip mitgeben (letzteres macht immer nen guten Eindruck^^).

    Eine Liste aller Icon kannst du dir über den Report RSTXICON anzeigen lassen.

    Greetz

    Agent Purple

  6. Hi,

    das hier sollte dir bei der Konvertierung helfen. Ich bin mal von einer Semikolon-getrennter Datei ausgegangen.

    Den Update-Teil musste noch einfügen.

    Wichtig ist, dass der Parameter S_STRUC ein Tabellentyp von deiner Tabelle ist. Die Info wird intern für die dynamische Objekterzeugung benötigt.

    Sinnvollerweise hinterlegst du noch eine Tabelle aller zulässigen Zieltabellen damit da nicht Unsinn eingegeben werden kann.

    Ansonsten, bei Fragen.... fragen

    Greetz

    Agent Purple

    REPORT <Wie ich immer das Ding heisst>.

    * Selection screen

    PARAMETERS s_file TYPE dxfilename OBLIGATORY.

    PARAMETERS s_struc TYPE dd40l-typename OBLIGATORY.

    * Local types

    TYPES tt_text1000 TYPE TABLE OF text1000.

    * Global data

    DATA g_tabname TYPE ddobjname.

    DATA gt_file_data TYPE tt_text1000.

    DATA gr_data TYPE REF TO data.

    * Selection screen handling

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_file.

    PERFORM f4_filename CHANGING s_file.

    * Start

    START-OF-SELECTION.

    * Upload file

    PERFORM upload USING s_file

    CHANGING gt_file_data.

    * Convert data

    PERFORM convert_data USING gt_file_data s_struc

    CHANGING gr_data g_tabname.

    * Process data

    PERFORM process USING gr_data g_tabname.

    *&---------------------------------------------------------------------*

    *& Form f4_filename

    *&---------------------------------------------------------------------*

    * Get filename

    *----------------------------------------------------------------------*

    FORM f4_filename CHANGING e_filename TYPE dxfilename.

    * Local data

    DATA l_filename TYPE eseftfront.

    * Fet filename

    CALL FUNCTION 'C13Z_FRONTEND_FILENAME_GET'

    IMPORTING

    e_filename = l_filename

    EXCEPTIONS

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

    * Export filename

    e_filename = l_filename.

    ENDFORM. "f4_filename

    *&---------------------------------------------------------------------*

    *& Form upload

    *&---------------------------------------------------------------------*

    * Upload file

    *----------------------------------------------------------------------*

    FORM upload USING i_file TYPE dxfilename

    CHANGING et_data TYPE tt_text1000.

    * Local data

    DATA l_filename TYPE string.

    * Set parameter

    l_filename = i_file.

    * Upload file

    CALL METHOD cl_gui_frontend_services=>gui_upload

    EXPORTING

    filename = l_filename

    CHANGING

    data_tab = et_data

    EXCEPTIONS

    file_open_error = 1

    file_read_error = 2

    no_batch = 3

    gui_refuse_filetransfer = 4

    invalid_type = 5

    no_authority = 6

    unknown_error = 7

    bad_data_format = 8

    header_not_allowed = 9

    separator_not_allowed = 10

    header_too_long = 11

    unknown_dp_error = 12

    access_denied = 13

    dp_out_of_memory = 14

    disk_full = 15

    dp_timeout = 16

    not_supported_by_gui = 17

    error_no_gui = 18

    OTHERS = 19.

    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. "upload

    *&---------------------------------------------------------------------*

    *& Form read_target_structure

    *&---------------------------------------------------------------------*

    * Read DDic information of target structure

    *----------------------------------------------------------------------*

    FORM read_target_structure USING i_structure TYPE ttypename

    CHANGING et_ddfields TYPE ddfields

    e_tabname TYPE ddobjname.

    * Local data

    DATA l_ddtypeget TYPE ddtypeget.

    DATA lt_ddtypes TYPE TABLE OF ddtypes.

    DATA lt_dd40l TYPE TABLE OF dd40l.

    FIELD-SYMBOLS <lt_ddtypes> TYPE ddtypes.

    FIELD-SYMBOLS <lt_dd40l> TYPE dd40l.

    * Set parameters

    l_ddtypeget-tthd = 'X'.

    APPEND INITIAL LINE TO lt_ddtypes ASSIGNING <lt_ddtypes>.

    <lt_ddtypes>-typename = i_structure.

    * Read table type info

    CALL FUNCTION 'DD_TYPEINFO_GET'

    EXPORTING

    getstate = l_ddtypeget

    TABLES

    ddtypes_tab = lt_ddtypes

    dd40l_tab = lt_dd40l.

    * Error handling

    IF lt_dd40l IS INITIAL.

    MESSAGE e007(e2) WITH i_structure.

    ENDIF.

    * Get line type

    READ TABLE lt_dd40l INDEX 1 ASSIGNING <lt_dd40l>.

    e_tabname = <lt_dd40l>-rowtype.

    * Read field info of line type

    CALL FUNCTION 'DDIF_NAMETAB_GET'

    EXPORTING

    tabname = e_tabname

    TABLES

    dfies_tab = et_ddfields

    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.

    ENDFORM. "read_target_structure

    *&---------------------------------------------------------------------*

    *& Form transfer_single_field

    *&---------------------------------------------------------------------*

    * Transfer data of single field

    *----------------------------------------------------------------------*

    FORM transfer_single_field USING i_dfies TYPE dfies

    i_source_field TYPE any

    CHANGING e_target_field TYPE any.

    * Local data

    DATA l_exception TYPE REF TO cx_root.

    * Transfer data

    TRY.

    e_target_field = i_source_field.

    * Special handling for some data types

    CASE i_dfies-datatype.

    * CHAR

    WHEN 'CHAR'.

    * If ALPHA

    IF i_dfies-convexit = 'ALPHA'

    OR i_dfies-lowercase IS INITIAL.

    * Convert

    IF i_dfies-convexit = 'ALPHA'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

    EXPORTING

    input = e_target_field

    IMPORTING

    output = e_target_field.

    ENDIF.

    * Convert to upper case assording to field definition

    IF i_dfies-lowercase IS INITIAL.

    TRANSLATE e_target_field TO UPPER CASE.

    ENDIF.

    ENDIF.

    * NUMC

    WHEN 'NUMC' OR 'DATS' OR 'TIMS'.

    * Init

    IF i_source_field IS INITIAL.

    CLEAR e_target_field.

    ENDIF.

    ENDCASE.

    * Error message if field conversion fails

    CATCH cx_root INTO l_exception.

    sy-lisel = l_exception->if_message~get_longtext( ).

    MESSAGE e001(00) WITH sy-lisel.

    ENDTRY.

    ENDFORM. "transfer_single_field

    *&---------------------------------------------------------------------*

    *& Form convert_data

    *&---------------------------------------------------------------------*

    * Convert file to data table

    *----------------------------------------------------------------------*

    FORM convert_data USING it_file_data TYPE tt_text1000

    i_structure TYPE ttypename

    CHANGING er_data TYPE REF TO data

    e_tabname TYPE tabname.

    * Local data

    DATA lt_fields TYPE tt_text1000.

    DATA lt_target_ddic TYPE ddfields.

    FIELD-SYMBOLS <it_file_data> TYPE text1000.

    FIELD-SYMBOLS <er_data> TYPE table.

    FIELD-SYMBOLS <er_data_line> TYPE ANY.

    FIELD-SYMBOLS <source_field> TYPE ANY.

    FIELD-SYMBOLS <target_field> TYPE ANY.

    FIELD-SYMBOLS <lt_target_ddic> TYPE dfies.

    * Read DDic structure of target

    PERFORM read_target_structure USING i_structure

    CHANGING lt_target_ddic e_tabname.

    * Create data object

    CREATE DATA er_data TYPE (i_structure).

    * Assign

    ASSIGN er_data->* TO <er_data> CASTING TYPE (i_structure).

    * Loop data table

    LOOP AT it_file_data ASSIGNING <it_file_data>.

    * Init

    CLEAR lt_fields.

    * Split structure into internal table

    SPLIT <it_file_data> AT ';' INTO TABLE lt_fields.

    * Append line to data object

    APPEND INITIAL LINE TO <er_data> ASSIGNING <er_data_line>.

    * Loop fields of source file

    LOOP AT lt_fields ASSIGNING <source_field>.

    * Read info of target field

    READ TABLE lt_target_ddic INDEX sy-tabix ASSIGNING <lt_target_ddic>.

    * Add some error handling here!!!

    IF NOT sy-subrc = 0.

    EXIT.

    ENDIF.

    * Assign target

    ASSIGN COMPONENT sy-tabix OF STRUCTURE <er_data_line> TO <target_field>.

    * Transfer data

    PERFORM transfer_single_field USING <lt_target_ddic> <source_field>

    CHANGING <target_field>.

    ENDLOOP.

    ENDLOOP.

    ENDFORM. "convert_data

    *&---------------------------------------------------------------------*

    *& Form process

    *&---------------------------------------------------------------------*

    * Process data

    *----------------------------------------------------------------------*

    FORM process USING ir_data TYPE REF TO data

    i_tabname TYPE ddobjname.

    * Processing depends on the strucure.

    CASE i_tabname.

    WHEN '<Insert structure name here>'.

    * perform whatever...

    ENDCASE.

    ENDFORM. "process

  7. Wir sind zu dem Ergebnis gekommen, dass das scheinbar am erstellen einer Tabelle einer dynamischen Struktur im OO-Umfeld liegt. OO wurde erst vollständig in Release 4.7 implementiert.

    Probier mal bitte testweise den Tabellennamen fest reinzuschreiben. Wenn das klappt, suchst du im OSS mal nach nem Hinweis wie das in 4.6 geht.

    Eventuell kommt man da mit Support Packages schon ein Stück weiter. Hängt aber davon ab, auf welchem Releasestand ihr seid.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...