Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

Födelsedagar i kalender

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1

Jag har funderat och funderat men inte kommit på någon lösning.. Jag vill (ifrån ett anställningsregister och personnr där) visa födelsedagar i kalendervyn, men hur jag än försöker får jag inte till det.
Visst får jag in dem i kalendern på rätt dag, och med rätt år och så, problemet är när jag går till ett annat år i kalendern så visas födelsedagen för det år det är nu (vilket i sig inte är så konstigt eftersom jag har knutit det till en variabel med dagens datum) Men jag skulle vilja ha det så att födelsedagsåret ökar när man byter år framåt och minskar när man går år bakåt i tiden, någon som har en endaste liten idé.. jag har provat det mesta tror jag och det borde gå på något vis men just nu är det idé torka a´la Sahara!:">

Mvh Jenny:)

Utifrån din beskrivning så har jag tyvärr ingen aning om vad du pratar om.

Vilken kalendervy? Har du byggt en kalender i FileMaker eller använder du iCal? Använder du manus för att hoppa fram och tillbaka mellan olika layouter? Hur ser manuset ut? Hur ser databasen ut? Är det relationer mellan dagar och kalendern?

Om jag bara gissar på hur du har byggt så har du en tabell som visar din kalender, i en annan tabell så har du dina händelser, dessa har datum på formen 2008-05-20.

Du har sedan en relation mellan datum i kalender-tabellen och datum i händelser.

Du undrar nu hur du kan få en årligt förekommande händelse (födelsedag) att synas ovsett vilket år du har?

Fiffigare relationer är ena svaret och betydligt flera poster (en per år) är det andra svaret.

Men innan jag berättar mera får du göra det.

Hej Tazzen!

Jag ska försöka beskriva så gott jag kan..

Jag har byggt en tabell som fungerar som Kalender, i den kalendern så kommer jag att relatera uppgifter som sammanfaller med den dagen, t.ex vilka arbeten som ska utföras och vilka dagböcker som är skrivna och väderuppgifter. Som en del av den vyn så vill jag i en portal visa vilka anställda som fyller år aktuell dag. Jag har gjort detta i FM6 tidigare och det har gått bra, förutom en sak...

För att kunna visa rätt årtal som den anställde fyller så har jag fått använde mig av en variabel som utgår från aktuellt datum och där plockat ut aktuellt årtal och satt in det i fälformeln för (Antal år fyllda). Problemt kommer när jag går ett år framåt eller bakåt i kalendern, då ser det ut som om den anställda 3år senare är lika gammal som idag, och det vore kanske roligt iofs, men det var inte riktigt meningen...

Uppgifterna om anställd och födeldata tas från anställningsregistret och personnr där..
Jag skriver här hur dte ser ut:

***Anställningsregister*** ***Kalender***

Födelsemånad_ = _Månad (ur aktuellt datum)
Födelsedag_ = _Dag (ur aktuellt datum)

Sen subtraherar jag födelseår från aktuellt årtal (ur dagens datum)
Det skulle gå att sätta det som en manusfunktion att när jag navigerar mellan dagar eller år i kalendern så ändras en variabel som tar ur aktuellt årtal, men jag tycker man borde kunna gör det på något enklare sätt, mera automagiskt alltså..

Hoppas jag har skrivit lite klarare nu i alla fall, jag var nog himla trött igår..

Mvh Jenny

Jag förstår ungefär, du har ett fält "Antal år fyllda" som innehåller hur många år den anställde fyller och när du bläddrar +2 eller -2 år i kalendern ser det ut som att de fyller 39 år efter år efter år? Jag håller med dig om att det egentligen är alldeles utmärkt om det vore så.

Jag antar att du har ett fält någonstans "Kalenderår" som talar om vilket år du är på, som innehåller tex 2008 när du är i årets kalender, 2009 när du är på nästa år osv?

Du behöver bara skapa ett fält till i så fall och lägga till resultatet av det till ditt Antal år fyllda-fält.

Skapa tex fältet Kalenderår_differens med denna beräkning (spara inte beräkningsresultatet) =

Kalenderår - Year ( Get ( AktuelltDatum ) )

När du i kalendern är på 2010, så blir det 2010-2008 = +2 alltså. Är man i kalendern på 2006, så blir det 2006-2008 = -2

Alltså kan du helt enkelt ta och ändra i din formel för Antal år fyllda =

(Väldans cool beräkning här för att beräkna hur många år man fyller) + Kalenderår_differens

Fyller man 40 i år (2008) och du är på 2010, så skall det bli 42. + 2
Fyller man 40 i år (2008) och du är på 2008, så skall det bli 40. + 0
Fyller man 40 i år (2008) och du är på 2006, så skall det bli 38. - 2

Kan det vara något?

Att lagra födelseår i en variabel kan vara en bra ide, men inte jämt.

Alterantivet är att ha tex ett StartUpscript som först kollar när det kördes sist (jag tänker på nätverkslösningar här med flera användare), om det inte har körts idag, så hoppar det över till tabellen personal och beräknar hur gamla alla är just precis idag. Sedan lagras det någonstans i en separat tabell (den för systeminställningar och sådant) att det manuset harkörts idag.

Det betyder att den första som loggar in i systemet får vänta några sekunder på att alla födelsedagar uppdateras, nästa som loggar in slipper det för det är redan gjort idag.

Fördelen är att med denna metod så kan man uppdatera värden som är en smula dynamiska (de ändras dagligen, eller kanske några ggr per dag) och då använda dem i relationer. Man kan ju inte använda beräknade värden på högra sidan i en relation, men den här metoden går förbi det problemet.

Hej igen!

1.Jag skapade ett beräkningsfält i kalendertabellen som ser ut så här:
Middle ( D Datum ; 1 ; 4 ) - Middle ( Get ( AktuelltDatum ) ; 1 ; 4 )
för att få ut datumskillnaden

2.Sen satte jag in den i den befintliga formeln så här:
Middle ( Get ( AktuelltDatum ) ; 1 ; 4 ) + Vb År plus minus för gratul

3.Själva beräkningen för ålder ligger i tabellen för anställda, där ser det ut så här:
KAL Kalender::Vb År för gratul - B pnr Födelseår

Så länge jag låter 2:an här bara vara Middle ( Get ( AktuelltDatum ) så räknar den rätt
utifrån innevarande år, men när jag lägger till resten så beräknar den år ur datum från
första posten i kalendern som är från 1990-01-01, och det kan ju vara ännu trevligare
på sätt och vis Men det var ju inte så jag vill ha det..:p

Du plussar ihop text med siffror tror jag? Det brukar inte fungera så bra. Skippa middlefunktionen på aktuellt datum och använd Year istället. Var noga med dina datatyper, middle-funktionen returnerar text och använder du - (minus) på en text så konverteras den helt tokigt till något annat, även om den faktiskt innehåller siffor.

Lägg ut fälten i fråga i layouten tillfälligt så att du ser vad de faktiskt innehåller, du kan ta bort dem när det funkar.

Sedan är det i regel så att om Filemaker returnerar den första posten den hittar via en relation och det är fel post, så är det förmodligen fel på relationen som inte är tillräckligt specifik. Överlåter man åt FileMaker att "välja" post själv så väljer den alltid fel.

Jag förstår också att du har full koll på vad alla dina fält heter och vad relationerna heter och vad de innehåller, men jag som inte sett det har ju svårt att se om det skulle vara något fel i punkt 3 tex, så det ser bra ut tycker jag.

Denna funktion beräknar hur gammal en person är just idag, om man matat in ett personnummer i ett fält på formen YYYYMMDD-XXXX och ett annat fält konverterar det till ett riktigt datum på formen: YYYY-MM-DD, det senare fältet heter i beräkningen nedan Personnummer_Födelsedatum_C:

GetAsText(
Year(Get(AktuelltDatum)) - Year(Personnummer_Födelsedatum_C) - Case(GetAsNumber(Get(AktuelltDatum))< GetAsNumber(Date(Month(Personnummer_Födelsedatum_C); Day(Personnummer_Födelsedatum_C); Year(Get(AktuelltDatum)))); 1; 0)
)

& " år, " &

GetAsText(
Mod(Month(Get(AktuelltDatum)) - Month(Personnummer_Födelsedatum_C) + 12 - 
Case(Day(Get(AktuelltDatum)) < Day(Personnummer_Födelsedatum_C); 1; 0); 12)
)

& " mån, " &

GetAsText(
Day(Get(AktuelltDatum)) - Day(Personnummer_Födelsedatum_C) + 
Case(Day(Get(AktuelltDatum)) >= Day(Personnummer_Födelsedatum_C); 0; Day(Get(AktuelltDatum)- Day(Get(AktuelltDatum))) < Day(Personnummer_Födelsedatum_C); Day(Personnummer_Födelsedatum_C); Day(Get(AktuelltDatum)- Day(Get(AktuelltDatum))))
)

& " dagar"

Resultatet ser ut så här: "41 år, 4 mån, 23 dagar"

Senast redigerat 2008-05-21 01:27
  • Medlem
  • Sundsvall
  • 2008-05-20 20:32

Du verkar kunna det där du Taz Intressant

Tack!

1
Bevaka tråden