Zum Inhalt springen

Agent Purple

Mitglieder
  • Gesamte Inhalte

    48
  • Benutzer seit

  • Letzter Besuch

Beiträge von Agent Purple

  1. Hi,

    hier ist das Programm zum Herunterladen von DB-Tabellen.

    Die Daten werden in einer CSV-Datei auf dem Applikations-Server gespeichert.

    Der FB 'Z_ZRPARAMETER_READ' holt nur ein Temporäres Verzeichnis aus einer Kundeneigenen Tabelle, muss also irgendwie ersetzt werden. Denke aber, dass dich das an dieser Stelle gar nicht so interessiert.

    Message 183(zr) ist eine Fehlermeldung, falls die Datei nicht erzeugt werden konnte.

    Message 081(zs) ist ein Dummy, den ich vergewaltigt habe. Ist ja auch nur ein Schmutzprogramm gewesen :-)

    Wenn noch fragen sind, weisste ja wie du mich erreichen kannst.

    REPORT z_tabledownload .

    * Lokale Daten

    DATA: l_tabname LIKE dd02l-tabname,

    lt_data TYPE REF TO data,

    l_data TYPE string,

    l_field TYPE string,

    l_out TYPE string,

    l_zrparameter TYPE zrparameter,

    l_filename TYPE string,

    lt_tablefields TYPE TABLE OF dbfield,

    l_count TYPE sydbcnt,

    l_sydbcnt TYPE sy-dbcnt.

    FIELD-SYMBOLS: <lt_data> TYPE table,

    <l_data> TYPE ANY,

    <l_field> TYPE ANY,

    <l_tablefield> TYPE dbfield.

    * Selektionsbild

    PARAMETERS: p_tab LIKE dd02l-tabname OBLIGATORY,

    p_size TYPE i OBLIGATORY DEFAULT '10000'.

    * Programmstart

    START-OF-SELECTION.

    * Tabelle prüfen

    SELECT SINGLE tabname

    FROM dd02l

    INTO l_tabname

    WHERE tabname = p_tab.

    * Tabelle nicht vorhanden

    IF NOT sy-subrc = 0.

    MESSAGE s402(mo) DISPLAY LIKE 'E' WITH p_tab.

    RETURN.

    ENDIF.

    * Feldbezeichnungen lesen

    CALL FUNCTION 'DB_GET_TABLE_FIELDS'

    EXPORTING

    tabname = l_tabname

    TABLES

    dbfields = lt_tablefields.

    * Pfad des Work-Verzeichnisses lesen

    CALL FUNCTION 'Z_ZRPARAMETER_READ'

    EXPORTING

    i_id = 'TEMP_PFAD'

    IMPORTING

    e_zrparameter = l_zrparameter

    EXCEPTIONS

    no_input_data = 1

    data_not_found = 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.

    * Dateiname aufbauen

    CONCATENATE l_zrparameter-wert sy-sysid '-' l_tabname '-' sy-datum '-' sy-uzeit '.txt' INTO l_filename.

    * Instanzierung der lokalen Daten

    CREATE DATA: lt_data TYPE STANDARD TABLE OF (l_tabname).

    ASSIGN lt_data->* TO <lt_data>.

    * Ausgabedatei öffnen

    OPEN DATASET l_filename FOR OUTPUT IN TEXT MODE.

    IF NOT sy-subrc = 0.

    MESSAGE s183(zr) DISPLAY LIKE 'E'.

    RETURN.

    ENDIF.

    * Überschrift der Feldnamen schreiben

    LOOP AT lt_tablefields ASSIGNING <l_tablefield>.

    CONCATENATE l_out <l_tablefield>-name ';' INTO l_out.

    ENDLOOP.

    * Überschrift schreibem

    TRANSFER l_out TO l_filename.

    * Anzahl der Datensätze ermitteln

    SELECT COUNT(*) FROM (l_tabname) INTO l_sydbcnt.

    * Datensätze paketweise lesen

    SELECT * FROM (l_tabname)

    INTO TABLE <lt_data>

    PACKAGE SIZE p_size

    ORDER BY PRIMARY KEY.

    * Gelesene Sätze zählen

    l_count = l_count + p_size.

    * Statusbar aktualisieren

    PERFORM show_status USING l_count l_sydbcnt.

    * Datensätze für Ausgabe aufbereiten

    LOOP AT <lt_data> ASSIGNING <l_data>.

    CLEAR l_out.

    DO.

    ASSIGN COMPONENT sy-index OF STRUCTURE <l_data> TO <l_field>.

    IF sy-subrc = 0.

    l_field = <l_field>.

    CONCATENATE l_out l_field ';' INTO l_out.

    ELSE.

    EXIT.

    ENDIF.

    ENDDO.

    * Datensatz in Datei schreiben

    TRANSFER l_out TO l_filename.

    ENDLOOP.

    ENDSELECT.

    * Ausgabedatei schließen

    CLOSE DATASET l_filename.

    IF NOT sy-subrc = 0.

    MESSAGE s183(zr) DISPLAY LIKE 'E'.

    RETURN.

    ENDIF.

    * Das war's

    MESSAGE s081(zs) WITH 'Tabelle' l_tabname 'wurde gespeichert in Datei' l_filename.

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

    *& Form show_status

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

    FORM show_status USING p_count TYPE sydbcnt

    p_sydbcnt TYPE sydbcnt.

    * Lokale Daten

    DATA: l_count TYPE string,

    l_sydbcnt TYPE string,

    l_progress1 TYPE string,

    l_progress_percentage(2) TYPE n,

    l_progress_text TYPE string.

    l_count = p_count.

    l_sydbcnt = p_sydbcnt.

    * Prozentsatz der Verarbeitung berechnen

    l_progress1 = trunc( l_count / l_sydbcnt * 100 ).

    l_progress_percentage = l_progress1.

    CONCATENATE l_count 'von' l_sydbcnt 'Sätzen gelesen (' l_progress_percentage '%)'

    INTO l_progress_text SEPARATED BY space.

    * Progress auf den GUI anzeigen

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

    EXPORTING

    percentage = l_progress_percentage

    text = l_progress_text.

    ENDFORM. " show_status

  2. Hi,

    du brauchst in deiner Struktur, mit der du das TV aufbaust ein CHAR1-Feld (z.B. nennst du es "MARK").

    Im Screen-Painter kannst du dann angeben, ob du einfach oder mehrfach Marikierung haben möchtest. Den Feldnamen deiner Sturktur musst du dann dort eintragen.

    Im PAI holst du dann die Markierungskennzeichen des TV in die IT.

    Im PBO loopst du dann über die IT . Wenn das X für MARK sitzt, setzt du die benötigten Felder des TV auf Input = 1.

    Kann dir auch mal ein Coding-Beispiel schicken, wenn dir das noch net weiter geholfen hat.

    Gruß

    P.S.: Bin übrigens auch wieder per ICQ erreichbar.

  3. Hi,

    vielleicht interessieren dich ein paar Programme zu dem Thema, die ich mal geschrieben habe.

    Das erste ist eine recht groß gewordene Gui für das Net Send

    Download WinNetSend

    Folgendes Programm funktioniert vom Prinzip her ähnlich, nur mit nem eigenen Protokoll, da sie uns in der Firma den Nachrichtendienst abgedreht haben.

    Hat noch zusätzlich ne Online-Anzeige ala ICQ, ist aber auch noch in der Testphase.

    Download LAN Messenger

    Viel Spaß damit :)

  4. Hi,

    konnte mich gestern leider net an der Diskussion beteiligen. War aber sehr interessant zu lesen :D

    Das mit der Suchhilfe klappt mit alle Feldern einer Struktur oder Tabelle und mit allen Datenelementen. Sie ans Datenelement zu hängen macht natürlich mehr Sinn, weil sie dann überall genutzt werden kann, wo sich das DE befindet.

    Musst halt nur aufpassen bei der Deklaration von Select-Options und Parameters.

    Im übrigen gibt: Variablen immer mit TYPE deklarieren, wegen AO (Abap Objects). Dann fällt einem die Umstellung net so schwer.

    Wenn du noch Fragen hast, kannst dich gern auch per

    Mail: agent.purple@gmx.de oder

    ICQ: 91958511 melden.

    Gruß

  5. Axo,

    du gehst in die SE11 und verknüpfst die Suchhilfe entweder mit einem Datenelement oder nem Feld einer Tabelle oder Struktur. Gibt da nen extra Reiter in der SE11.

    Und dann haste auf dem Dynpro, wenn du auf dem Feld mit dem Cursor stehst, den F4-Button.

  6. Hi,

    Suchhilfen kann du auch über die SE11 den Feldern zu.

    Idealerweise hängt man die Suchhilfen aber an eine Domäne oder ein Datenelement, damit sie überall wo das Element benutzt wird, verfügbar ist.

    Sonst musst du das in alle Strukturen und Tabellen hängen.

    Eine Suchhilfe kannst du verschieden anlegen. Wenn du eigenes Coding brauchst, bastelst du dir nen FB, der dir bestimmte Daten zurückliefert. Ansonsten halt über Prüftabellen etc.

    Sinn machen die Teile sowieso fast nur bei eigenen Tabellen /Strukturen.

  7. Hi!

    Das einfachste ist, wenn du dir entspechende Klassen anlegst, in der die ganzen Sprachschlüsel hinterlegt sind.

    Je nachdem was der benutzer auswählt, instanziert du dann die entsprechende Klasse. Ist nebenbei auch noch "hübscher" als INIs.

  8. Hi,

    hat sich dein obiges Problem eigentlich schon gelöst?

    Wenn ja -> OK,

    wenn nein -> du brauchst eigentlich nur eine Range-Tabelle mit ner richtigen Domäne dahinter, d.h. inkl. Typkonvertierung (NUMC). Dann füllt er dir das immer mit Nullen auf.

    Und mal so allgemein:

    ABAP ist doch richtig genial, z.B. bei der Verarbeitung von Arrays bzw. internen Tabellen. Da können sich diverse andere Sprachen aber locker noch was von abgucken.

    Ich programmiere seit nunmehr fast zwei Jahren im SAP und bin äußerst happy damit. Da ist man wenigstens nicht nur stumpf Kodierer, sondern brauchst auch viel betriebswirtschaftlichen Hintergrund, damit man auch ohne Krücke (viele, viele Helferlein) was auf die Beine krigt.

  9. Tach!

    @Julia: Mach dir mal keine Sorgen. ABAP ist weder leichter noch schwerer als irgendeine andere Sprache.

    Das, was den meisten Leuten zu schaffen macht, ist das betriebswirtschaftliche Umfeld. Schließlich will man nicht nur ganz stupf Kodierer sein, sondern hat meisten einen etwas anderen Anspruch.

    Zum anderen hat man ja noch die Möglichkeit, aus den (keine ahnung wie vielen) Funktionsbausteinen und Methoden auszuwählen, d.h. so viel muss man dann schon gar net mehr coden.

    Aber das kommt dann im Laufe der Zeit.

    Wenn es das grüne Buch ist, das du da hast, kann ich nur sagen, dass mir das damals super geholfen hat.

    Ne Schulung kann ich zu Beginn nicht empfehlen (jedenfalls nicht die anbsoluten Grundlagenschulungen), weil man da wirklich nur Laufen lernt, d.h. was ist eigentlich eine Variable etc. Wenn du jemanden hast, der dir beim Einstieg hilft, ist das meiner Meinung nach viel mehr Wert.

    Das soll's nun aber erstmal gewesen sein.

    Wenn du (oder sonstwer) noch Fragen hat, einfach mal melden...

    Gruß

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