-
Datum wechselt um Mitternacht nicht
Hallo zusammen,
habe folgendes Problem im RPG. Ein User meldet sich vor 24 Uhr am System an und erfasst Daten. Diese werden u.a. mit Datum (UDATE) gespeichert. Wenn der User bis nach Mitternacht arbeitet und sich nicht zwischendurch abmeldet, wird der vorherige Tag fortgeschrieben. Welche einfache Möglichkeit habe ich hier? Greift UDATE das Jobdatum ab?
Uwe Bolte
Tel.: 0171-1958266
-
Das ist korrekt.
UDATE war schon immer das Jobdatum !
In RPG gibts die Anweisung TIME. Die liefert die aktuelle Zeit incl. Datum.
Allerdings ist hier Vorsicht zu walten.
Das Datum wird immer im Jobformat geliefert.
Besser ist da die RPGLE-Builtinfunktion %date(). Die liefert das aktuelle Datum.
-
Hallo,
der OPCODE Time liefert nicht nur das aktuelle Datum und die aktuelle Uhrzeit im numerischen Format sonder kann auch in ein echtes Zeit- oder Datums-Feld oder eine Zeitmarke ausgeben.
Allerdings wird der OpCode Time im RPG free Format nicht unterstützt. Um die aktuelle Zeit, das aktuelle Datum oder die aktuelle Zeitmarke zu ermitteln können die folgenden Built-In-Funktionen ohne Angabe eines Parameters verwendet werden:
%Date(), %Time(), %TimeStamp()
Wichtig ist auch, das aktuelle Datum und die aktuelle Zeit sollten immer, wenn sie benötigt werden ermittelt werden und nicht nur einmalig zu Programmbeginn.
Vorsicht ist auch bei der Initialisierung eines Datumsfeldes, einer Zeit oder Zeitmarke mit dem Sonderwert *SYS.
Dieser Wert wird nur bei Programm-Aufruf initialisiert. Wurde das Programm mit Return beendet und erneut aufgerufen, werden die Felder, die in den globalen D-Bestimmungen definiert wurden nicht erneut initialisiert.
Anders sieht es in Prozeduren aus. Da bei jedem Prozeduraufruf ein neues Variablen-Set zur Verfügung gestellt wird, werden die Felder, die in den lokalen D-Bestimmungen definiert wurden bei jedem Aufruf initialisiert. Wurden die Variablen in einer Prozedur als STATIC definiert erfolgt eine Initialisierung ebenfalls nur einmalig beim ersten Aufruf innerhalb der Aktivierungsgruppe.
Birgitta
-
Hallo,
ich habe wohl ein ähnliches Problem. In einem kleinen ILE-RPG Programm welches mehrfach per SBMJOB aufgerufen wird ermittle ich mit TIME die aktuelle Zeit. Abhängig von dieser Zeit sollen andere Programme gestartet werden. Die Stunden und Minuten werden in numerische Felder abgestellt, nicht in Zeitfelder. Das Programm wird mit *INLR beendet.
Die Anwendung läuft auf 7 oder 8 AS/400 mit unterschiedlichen Releaseständen - Probleme gibt es nur bei zweien wenn das Programm nachts im Tagesabschluss gestartet wird.
Was empfiehlt sich nun als wirklich narrensichere Methode wenn man nicht immer "von Hand" starten will?
Gerd
-
Wie wärs mit WRKJOBSCDE ?
Hier kannst du genau bestimmen, wann was unter welchem User läuft und was passiert, wenn die Maschine mal nicht rechtzeitig bereit war (*NOSBM, *SBMRLS).
-
Tut mir leid. Ich meinte eine Programmlösung.
-
Welche Probleme hast du denn ?
TIME liefert auf jeden Fall die aktuelle Systemzeit.
Du kannst ebenso die BuiltIn %Time() verwenden und einem DEC-Feld zuweisen.
Dies ist ggf. besser, da TIME immer Datum und Zeit liefert und GANZ WICHTIG: Das Datum im Jobformat !!!
Steht also das Jobformat auf *DMY (Deutsch) wird TTMMJJJJHHMMSS geliefert.
Steht das Jobformat aber auf *MDY wird MMTTJJJJHHMMSS geliefert.
Bei *JUL wird sogar YYYYDDDHHMMSS bereitgestellt.
Du kannst dich also bei TIME nicht auf das Datum verlassen ohne das Jobformat zu kennen.
Hier sind die Funktionen %date(), %time() und %timestamp() vorzuziehen.
-
Hallo,
ich habe ein ähnliches Problem, wie oben beschrieben und dachte ich könnte jetzt mein Feld UDATE mit %DATE mit dem aktuellen Datum füllen, aber das will nicht so, wie ich mir das vorgestellt habe.
meine Anweisung sieht so aus:
C eval UDATE = %DATE()
Auf diese Idde bin ich gekommen, da ich in der Online Hilfe auf folgenden Satz gestoßen bin:
If the first parameter is a timestamp, *DATE, or UDATE, do not specify the second parameter. The system knows the format of the input in these cases.
Beim Umwandeln kommt dann diese Meldung:
Die Operation ändert das Feld, aber das Feld kann nicht geändert werden.
Bin bischen Ratlos...
-
Ist UDATE denn vom Typ D, also Date ?
%date() liefert ein Feld vom Typ DATUM!
Wenn du das numerisch haben willst, geht das z.B. so:
UDATE = %DEC(%CHAR(%DATE():*ISO0):8:0);
-
Ist die Definition von UDATE nicht fest vorgegeben?
Ich benutze es recht oft und bei mir ist es
6,0 lang.
Ich will ja nur das Feld UDATE (6,0)(TTMMJJ) auf den aktuellen Stand bringen und nichts an meinen O-Bestimmungen ändern müssen.
-
Hallo,
UDATE ist eins der wenigen reservierten Worte/Felder in RPG, die eine bestimmte Funktion haben, aber nicht manuell geändert werden dürfen.
Du wirst wohl Deine O-Bestimmungen ändern müssen.
Birgitta
Similar Threads
-
By I0N in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 21-11-06, 12:44
-
By steven_r in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 20-11-06, 18:37
-
By heini in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 30-09-06, 10:10
-
By jjagi in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 07-07-06, 08:29
-
By JonnyRico in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 27-04-06, 12:45
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks