Home Forum Nuclos Konfiguration Sonstiges Alter aus Geburtsdatum errechnen

Ansicht von 7 Beiträgen - 1 bis 7 (von insgesamt 7)
  • Autor
    Beiträge
  • #8053
    Franz Holzer
    Teilnehmer

    Hallo Forum,

    Arbeite mich gerade mit Nuclos ein und bin soweit absolut begeistert.

    Bisher hab ich anhand von den Nuclets, Videos, Wiki und Forum so ziemlich alles gefunden was Fragen aufgeworfen hat.

    Jedoch würde ich gerne wissen ob es möglich ist (eventuell sogar einfacher als ich mir denke) ein Alter aus einem Datum (Geburtsdatum) zu errechnen und anzuzeigen ?

    Bin leider nicht fündig geworden.

    #8054
    Frank Pavlic
    Teilnehmer

    Hallo,
    das Alter zu berechnen ist ja letztendlich eine Differenz zweier Datumswerte, Geburtsdatum, das Zweite ist das aktuelle bzw. heutige Datum.

    Zum Anzeigen des Ergebnisses kannst Du z.B. ein berechnetes Feld anlegen. Mit Groovy müsste es auch gehen.

    Gruß
    Frank

    #8056
    Franz Holzer
    Teilnehmer

    Hallo Frank,

    Danke für die rasche Antwort.
    Ganz verstehen tu ich es noch nicht.
    Im endeffekt finde ich nur die Groovy Regeln (Berechnungsausdruck)

    deine beschriebene alternative mit einem „berechnetem feld“ kann ich nicht nachvollziehen.

    Wärst du so nett und hilfst mir etwas auf die sprünge, mit einem Beispiel ?

    lg

    #8059
    Ramin Goettlich
    Teilnehmer
    #8082
    Thomas Hempel
    Teilnehmer

    Hallo fholzer,

    an dem Problem war ich zufällig gerade dran, hier meine Lösung mit Nuclos 4.3.1 und SQL-Server:

    Folgende Funktion habe ich als Datenbankobjekt angelegt:

    -- =============================================
    -- Author:
    -- Create date:
    -- Description:
    -- =============================================

    CREATE FUNCTION nuclos.O181_CA_ALTER (@INTID AS Int)

    RETURNS varchar(3)
    AS
    BEGIN
    DECLARE @Alter as varchar(3);
    DECLARE @birthday AS DATE;

    SET @birthday = (
    SELECT T.DATGEBURTSDATUM
    FROM nuclos.O181_MITARBEITER AS T
    WHERE T.INTID = @INTID);

    SET @Alter = DATEDIFF (YEAR, @birthday,GETDATE()) -
    CASE
    WHEN 100 * MONTH(GETDATE()) + DAY(GETDATE())
    < 100 * MONTH(@birthday) + DAY(@birthday) THEN 1
    ELSE 0
    END;

    RETURN (@Alter);

    END;

    Dazu unter Konfiguration/Datenbank ein Datenbankobjekt vom Typ function anlegen, zweitens unter /Datenbankquelltext obigen Quelltext anlegen und dem Objekt zuweisen.

    Im BO muss es ein Feld Geburtsdatum vom Typ Datum geben, oder es muss das SELECT-Statement in der Funktion entsprechend angepasst werden, damit ein Geburtsdatum geliefert wird. Das SELECT-STatement muss an den Namen des BO-Objektes angepasst werden.

    Im Businessobjekt-Wizard muss im Attribut Alter im Feld Berechnungsvorschrift die Funktion eingestellt werden. Als Parameter wird von nuclos automatisch die INTID des Datensatzes mitgeliefert.

    Gruß
    Thomas

    #8084
    Matthias Haake
    Teilnehmer

    Hallo,

    die gezeigte Lösung mit dem berechneten Attribut funktioniert problemlos.

    Trotzdem würde ich das Alter in einigen wenigen Situationen als normales Attribut anlegen. Der Aufwand ist natürlich etwas höher: Beim Speichern musst Du das Alter berechnen, wenn sich der Wert des Geburtsdatums geändert hat. Außerdem brauchst Du eine Job-Rule, die 1x täglich alle in Frage kommenden Alterswerte neu berechnet.

    Vorteil: Du kannst auch in sehr großen Datenmengen nach dem Alter suchen und sortieren, ohne Dir Sorgen um die Performance zu machen. Berechnete Attribute erzeugen Unterabfragen im SQL-Code. Daher ist die Sortierung solcher Spalten in Nuclos auch standardmäßig deaktiviert.

    Wenn das in Deinem Szenario nicht relevant ist, dann ist das berechnete Attribut das Mittel der Wahl.

    Viele Grüße,
    Matthias

    #8085
    Thomas Hempel
    Teilnehmer

    Hallo Matthias,

    danke für den Hinweis. Deine Jobrule wäre natürlich interessant zu sehen, gerade für den Anfänger 🙂

    Danke
    Thomas

Ansicht von 7 Beiträgen - 1 bis 7 (von insgesamt 7)