[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    91

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Nov 2005
    Beiträge
    32
    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Nov 2005
    Beiträge
    32
    Tut mir leid. Ich meinte eine Programmlösung.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Sep 2005
    Beiträge
    85
    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...

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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);
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Sep 2005
    Beiträge
    85
    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.

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. SQL: Aus mehreren Feldern ein Datum erkennen
    By I0N in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-11-06, 12:44
  2. SQL DATUM
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 20-11-06, 18:37
  3. Datum in Query
    By heini in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-09-06, 10:10
  4. Datum überlebt ODBC Transfer auf Excel nicht
    By jjagi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 07-07-06, 08:29
  5. Datum sicher in *EUR wandeln
    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
  •