Agent Purple
-
Gesamte Inhalte
48 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von Agent Purple
-
-
Moin,
hab vor ewigen Zeiten mal ne halbwegs vernünftige Oberfläsche dafür gebaut.
Spart ne Menge Tipperei etc.
Bei Bedarf stell ich das gern zur Verfügung.
Grüße
-
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
-
Moin V., ^^
das scheint ein Bug in der Installation zu sein. Ist mir auch schon passiert. Registry aufräumen scheint auch net zu helfen.
Ich habs dann einfach auf ner anderen Partition installiert und schon lief's durch.
Grüße
Agent Purple
-
Mach's per SUBMIT
-
Die Datenbank macht einen Full Table Scan, wenn er nur über dne Primärindex läuft.
Leg dir doch einfach den passenen Index für dein Statement an.
Greetz
-
Die Navigation des Cursors auf dem Selektionbild erfolgt nur auf dem Frontend.
Dein Coding wird nur prozessiert, wenn PAI ausgelöst wird, z.B. durch drücken von Enter, F8 oder sonstwas.
-
Dein Custom Control auf dem Dynpro hat auch den richtigen Namen?
Wenn nicht kriegst du nämlich mal ganau nichts angezeigt.
Mit welchem Release werkelst du da?
-
Kann das sein, dass du den Parameter I_STRUCTURE_NAME kurze Zeit später nachträglich eingefügt hast?
Wenn ja, kann das am Puffer des ALV liegen, der "saudämlich" ist.
Bei Änderungen der Anzeigestruktur am besten einfach mal den Report BCALV_BUFFER_DELETE oder BALVBUFDEL aufrufen.
Danach sollte das klappen.
-
Methode SET_TOOLBAR_MODE benutzen
-
Schau dir mal den Report DD_ADD_FORM_BUTTON an.
Ich find das zwar krank, aber kann man sicherlich so machen.
Ich würd da eher nen normales Dynpro mit nem Button anlegen.
-
OMG ihr armen,
wer bringt euch denn noch Table Controls bei. Das ist Technik von vorgestern...
-
Seltsame Aufgabe^^
Tabelle nicht ändern dürfen schließt ja eigentlich Suchhilfe anbinden und Fremdschlüssel definieren mit ein.
Wenn es sich um eine existierende Sammelsuchhilfe handelt, kannst du dort einen Append definieren und weitere einzelne Suchhilfen hinzufügen.
-
Mir ist noch nicht ganz klar was du eigentlich bauen willst.
Es sieht aber erstmal so aus als wäre dein Datenmodell nicht optimal. Mit entsprechenden Fremdschlüsseln könntest du möglicherweise erreichen, was du willst.
-
Hm, die Ändern-Funktion ist wohl etwas verbuggt ^^
-
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).
-
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.
-
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.
-
Aha,
wie hast'n das versucht?
INSERT/UPDATE kann man eigentlich kaum falsch machen...
-
Das sollte klappen, wenn du ein Feld vom Typ STRING definiert und das auf dem Dynpro platzierst. Da kannste dann alles reinschieben und anzeigen lassen.
-
Dafür benutzt zu am besten die Klasse CL_GUI_ALV_GRID.
Der ALV ist bezüglich der Zeilen- und Spaltenmarkierung parametrisierbar.
Über den Verwendungsnachweis findest du auch Beispielreports.
Greetz
Agent Purple
-
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
-
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
-
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.
-
Na gut,
am Release kann es liegen. Wir haben hier auf allen Systemen 4.7 / 620.
Deshalb kann ich das leider auch nicht ausprobieren. Ich guck aber mal, ob ich jemanden finde, der das weiss. Hab ja genug Leute hier.
ABAP: Führende Nullen löschen
in Delphi/RPG+CL/Sonstige
Geschrieben
Fuba CONVERSION_EXIT_ALPHA_OUTPUT