Home › Forum › Nuclos Konfiguration › Sonstiges › Alter aus Geburtsdatum errechnen
- Dieses Thema hat 6 Antworten und 5 Teilnehmer, und wurde zuletzt aktualisiert vor 8 Jahren, 10 Monaten von
Thomas Hempel.
-
AutorBeiträge
-
30 Dezember 2014 um 14:52 Uhr #8053
Franz Holzer
TeilnehmerHallo 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.
30 Dezember 2014 um 19:35 Uhr #8054Frank Pavlic
TeilnehmerHallo,
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ß
Frank30 Dezember 2014 um 21:57 Uhr #8056Franz Holzer
TeilnehmerHallo 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
1 Januar 2015 um 23:45 Uhr #8059Ramin Goettlich
TeilnehmerVielleicht hilft das weiter:
http://wiki.nuclos.de/display/Konfiguration/Datenobjekte+BerechneteAttribute
7 Januar 2015 um 18:07 Uhr #8082Thomas Hempel
TeilnehmerHallo 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ß
ThomasAttachments:8 Januar 2015 um 18:02 Uhr #8084Matthias Haake
TeilnehmerHallo,
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,
Matthias9 Januar 2015 um 16:24 Uhr #8085Thomas Hempel
TeilnehmerHallo Matthias,
danke für den Hinweis. Deine Jobrule wäre natürlich interessant zu sehen, gerade für den Anfänger 🙂
Danke
Thomas -
AutorBeiträge