PDA

View Full Version : AS400 Wert auslesen und in txt/ xls schreiben



AlexK*
07-01-16, 09:33
Guten Morgen,

ich nutze iSeries Access für Windows - Version 5.9
und arbeite im Green Screen Modus.


Ich möchte verschiedene Kostenstellen automatisch aufrufen und den Wert zwischen 05/038 und 05/057 auslesen und entweder in eine Text- oder Exceldatei schreiben.

Ein Beispiel:

362
(orange: Werte eingeben// rot: auszulesender Wert)


bei Cursorposition: 04/019
soll EM eingetragen werden

bei Cursorposition: 05/019
soll 80 eingetragen werden

bei Cursorposition: 05/022
soll ENAL eingetragen werden

--> aktualisieren
zwischen 05/038 und 05/057 steht der Wert 1997,75 diesen möchte ich jetzt auslesen und in Excel schreiben. Danach soll die nächste Kostenstelle ausgelesen werden.

Mit der Makroaufzeichnungsfunktion komme ich nicht weiter.
Habe auch im Internet gesucht und da ich lediglich ein wenig VBA beherrsche, komme ich nicht weiter...

Kann mir hiermit bitte jemand weiterhelfen?

Vielen Dank.

Schöne Grüße
Alex

ILEMax
07-01-16, 10:04
Ich vermute du kannst das Pgm nicht ändern und suchst nach einer Möglichkeit, das 'von Außen' zu machen?

Bei welchem Auslöser?
Taste drücken? oder 'voll automatisch'

Für "Taste drücken" gäbe es eine Lösung über die TN5250J Emulationserweiterung vom Meinikat
(The-Tool-Company.de)
Die haben da was um den BS aus zu lesen und eine Aktion zu machen.
Ob das mit iSeries Access für Windows - Version 5.9 geht weis ich nicht

Vollautomatisch sehe ich keine Möglichkeit, ggf. kann Meinikat aber da was programmieren, die sind m.E. ganz gut!

Der ILEMax

Fuerchau
07-01-16, 10:13
Wenn du weißt, in welcher Datei diese Informationen liegen ist das doch viel einfacher, im Excel per "Externe Daten->MS Query" die Datei auszulesen.
Dieser Heckmeck mit 5250 ist da doch viel zu aufwendig.

Ansonsten gab es hier im Forum schon mal einen Betrag per VBA und Session-API's auf die Daten zuzugreifen. Empfehlenswert ist das nicht da zu fehleranfällig.

AlexK*
07-01-16, 13:15
Hallo,

danke für eure Antworten.
Da ich keine Admin-Rechte besitze, fällt die TN5250 flach.

Leider weiß ich nicht in welcher Datei diese Informationen liegen.

Mit einem iSeries Makro ist das nicht möglich?
Das ich mit Sendkeys das gewünschte Fenster aufrufe und dann den benötigten Bereich kopiere und in eine Textdatei schreibe?


vg
Alex

Fuerchau
07-01-16, 13:24
Für solche Aktionen setzt man sich mit der hauseigenen IT auseinander.
Die sollte in der Lage sein, dir die Daten irgendwie zur Verfügung zu stellen oder den Standort für ein MS-Query benennen können.

Was du alternativ machen kannst (das 5250-Makro ist ja VB-Script), vom aktuellen Screen die Funktion Screenshot aufzurufen (kann man per Makroaufzeichnung mal ausführen).
Der Screenshot wird in 2 Formaten in die Zwischenablage gelegt, 1x Bitmap, 1x Nur Text.
Per VBS kann man auf das Clipboard zugreifen und sich dann den Text aus der entsprechenden Zeile per "mid"-Funktion rausholen.

Wie gesagt: schön ist das nicht.

AlexK*
07-01-16, 14:29
Habe ich probiert. Dort will keiner weiterhelfen...

Hab jetzt mit deiner vorgeschlagenen Alternative weitergemacht. Klappt leider nicht so.
Sobald ich die Screenshots gespeichert hätte wärs kein Problem den Rest mit VBA zu machen.
Am Ende der aufgenommene Code. Wie schätzt du die Lage ein?

Bevor "em80enal" gesendet wird, müsste das Makro an die Kursorpositione 04,019 wechseln.

dazu bin ich auf das gestoßen, funktioniert leider nicht...
Private Declare Sub SetCursorPos Lib "User32" (ByVal X As Long, ByVal Y As Long)
SetCursorPos 4, 19


Die iSeries Funktion Screenshot finde ich nicht. Habe im Menü jede Möglichkeit durchsucht.
Du meinst ja nicht den Print-Key oder?


[PCOMM SCRIPT HEADER]
LANGUAGE=VBSCRIPT
DESCRIPTION=
[PCOMM SCRIPT SOURCE]
OPTION EXPLICIT
autECLSession.SetConnectionByName(ThisSessionName)
REM This line calls the macro subroutine
subSub1_
sub subSub1_()
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "em80enal"
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "[enter]"
end Sub


vg
Alex

Fuerchau
07-01-16, 15:04
Da du ja mit den API's schon umgehst, musst du die Doku dazu mal beschaffen.
Dort findest du entsprechende Methoden für die Sitzungssteuerung.

SetCursorPos() ist eine Windows-Funktion und setzt den Mauszeiger auf die Pixel-Koordinaten.

Entschuldige bitte:
Bist du ein Azubi der hier Beschäftigungstherapie betreibt?
Die IT-Abteilung sollte gewisse Wünsche der Fachabteilungen respektieren.
In den meisten Betrieben gibt's da bestimmt entsprechende Formulare und Wege.
Datenbankabfragen, also Queries, sollten für die IT kein Problem darstellen.

hel400
07-01-16, 16:16
...
Leider weiß ich nicht in welcher Datei diese Informationen liegen.
...


Hallo Alex,

evtl. könntest Du mal Folgendes probieren:
Den besagten Bildschirm aufrufen, dann "Shift + Escape"-Taste gleichzeitig drücken, nun sollte unten eine (blaue) Eingabezeile erscheinen.
In diese eine "3" eingeben und Enter.
Im nun angezeigten Menü den Punkt "14 - Offene Dateien anzeigen" auswählen.

Wenn hier nicht allzuviele offene Dateien vorhanden sind, solltest Du damit die betreffende Datei herausfinden können (Dateiname + Bibliothek).
Einfach mal ausprobieren.