Grinwell Geplaatst: 20 september 2013 Delen Geplaatst: 20 september 2013 Hoi Allemaal, Volgende situatie: Ik heb een portaal per week met werk diensten erin, deze hebben een begin en eind tijd. Nu is het verplicht om in deze week minimaal 32 uur aaneengesloten rust te hebben. Als deze niet bereikt is, dan moet er een waarschuwing komen, maar voor nu ben ik alleen geïnteresseerd in het hoogste aantal aaneengesloten rusturen in deze week. De database bevat de volgende regels: Dienst Datum Type Start Eind 1 16-9 Avond 18:00 22:00 2 17-9 Avond 18:00 22:00 3 18-9 Avond 18:00 22:00 4 19-9 Avond 18:00 22:00 5 20-9 Avond 18:00 22:00 6 21-9 Avond 18:00 22:00 7 22-9 Vrij Hierbij moet rekening worden gehouden de week start op 16-9 00:00 en eindigt op 22-9 24:00. Het portaal, calculatie of script zou het volgende moten berekenen: Voor 1 18 uur rust Voor 2 of Na 1 20 uur rust Voor 3 of Na 2 20 uur rust Voor 4 of Na 3 20 uur rust Voor 5 of Na 4 20 uur rust Voor 6 of Na 5 20 uur rust Na 6 26 uur rust Maximum aantal is hier 26 uur, waar ik dus in geïnteresseerd ben. Heeft er iemand een idee hoe ik zou kunnen aanpakken? Met vriendelijke groet, Bob VrijeUren.fp7 Quote Link naar reactie
0 menno Geplaatst: 20 september 2013 Delen Geplaatst: 20 september 2013 Er zijn verschillende mogelijkheden, maar dit is er eentje: Uitgangspunt in dit voorbeeld is dat je alleen wilt weten of de 32 uur rust is bereikt en zo nee hoeveel uur rust is er bereikt. Kan allemaal anders natuurlijk, maar ik heb hier even die keuze gemaakt. De 2 relaties die zij gelegd hebben strikt genomen 5 extra velden nodig (de zesde is voor de persoon, want je kan meerdere personen hebben). Je hebt een beginTijdstempel en een eindTijdstempel én je hebt een limiet (van 32 uur) waarbinnen je wilt weten of er is gewerkt en met die gegevens bereken je de scope: De minimale tijd waarbinnen de vorige eindtijd en de huidige begintijd valt én de maximale tijd waarbinnen de volgende begintijd en de huidige eindtijd valt. Dan worden er twee tableoccurrences toegevoegd waar de nieuwe velden worden gebruikt voor de relaties en daarmee kunnen de vrije uren sinds de vorige entry en de vrije uren totaan de volgende entry worden berekend. Buiten de scope van 32 uur is de conclusie simpelweg meer dan 32 uur. in dit voorbeeldje is dat leeg. VrijeUren.fp7 Quote Link naar reactie
0 Infomatics Geplaatst: 20 september 2013 Delen Geplaatst: 20 september 2013 Hoi Bob, Hierbij nog een optie; bij deze optie maakt het niet uit in welke volgorde je de regels invoert, in de eerste regel wordt de afstand tot het begin van de week bepaald, in de volgende regels wordt de afstand tot de vorige regel bepaald, en het maximale aantal uren is de maximale uren van de regels, of de afstand van het einde van de week tot aan de laatste regel. zie bijgaand voorbeeld, prettig weekend, Ruben VrijeUren.fp7 Quote Link naar reactie
0 Grinwell Geplaatst: 23 september 2013 Auteur Delen Geplaatst: 23 september 2013 (aangepast) Er zijn verschillende mogelijkheden, maar dit is er eentje:Uitgangspunt in dit voorbeeld is dat je alleen wilt weten of de 32 uur rust is bereikt en zo nee hoeveel uur rust is er bereikt. Kan allemaal anders natuurlijk, maar ik heb hier even die keuze gemaakt. De 2 relaties die zij gelegd hebben strikt genomen 5 extra velden nodig (de zesde is voor de persoon, want je kan meerdere personen hebben). Je hebt een beginTijdstempel en een eindTijdstempel én je hebt een limiet (van 32 uur) waarbinnen je wilt weten of er is gewerkt en met die gegevens bereken je de scope: De minimale tijd waarbinnen de vorige eindtijd en de huidige begintijd valt én de maximale tijd waarbinnen de volgende begintijd en de huidige eindtijd valt. Dan worden er twee tableoccurrences toegevoegd waar de nieuwe velden worden gebruikt voor de relaties en daarmee kunnen de vrije uren sinds de vorige entry en de vrije uren totaan de volgende entry worden berekend. Buiten de scope van 32 uur is de conclusie simpelweg meer dan 32 uur. in dit voorbeeldje is dat leeg. Deze berekend inderdaad of 32 uur bereikt is tussen de regels in. Helaas is deze oplossing niet mogelijk, doordat als er af word afgeweken van 32 uur het totaal over twee weken op 72 uit moet komen. Het is dus noodzakelijk dat ik het aantal uur weet. Heel erg voor je reactie. 23 september 2013 aangepast door Gast Quote Link naar reactie
0 Grinwell Geplaatst: 23 september 2013 Auteur Delen Geplaatst: 23 september 2013 Hoi Bob, Hierbij nog een optie; bij deze optie maakt het niet uit in welke volgorde je de regels invoert, in de eerste regel wordt de afstand tot het begin van de week bepaald, in de volgende regels wordt de afstand tot de vorige regel bepaald, en het maximale aantal uren is de maximale uren van de regels, of de afstand van het einde van de week tot aan de laatste regel. zie bijgaand voorbeeld, prettig weekend, Ruben Hoi Ruben, Bedankt voor je reactie. Ik heb inderdaad een te goed weekend gehad Deze benadering heb ik inderdaad over het hoofd gezien. Heel erg bedank, hiermee kan ik zeker mee verder, Groet, Bob. Quote Link naar reactie
0 Grinwell Geplaatst: 1 oktober 2013 Auteur Delen Geplaatst: 1 oktober 2013 Solved it Zoals gewoonlijk had ik weer eens geen zin om moeilijk te gaan doen met relaties en andere rotzooi. Onderstaand werkt en doet precies wat ik wil. Ben nog wel op zoek om het portaal zelf mee te geven, maar dit zal waarschijnlijk wel weer te veel gevraagd zijn van File Maker. Thnx all greetz. // Net schilletje om aan te roepen. // Creator: Grinwell // FunctionName: CalculateRust CalculateRustRecursive ( "" ; "" ) // De functie zelf Let([ // Creator: Grinwell // FunctionName: CalculateRustRecursive // Parameter 1 = StartRecordNumber, call function with empty string // Parameter 2 = PreviousEndDate, de einddatum van de vorige dienst of start van de week // param record_number = If ( StartRecordNumber > 1 ; StartRecordNumber ; 1) ; // record gegevens record_betreft = GetNthRecord( Regelsviaplanning_Portal1::Betreft_regels ; record_number ) ; record_datum = GetNthRecord( Regelsviaplanning_Portal1::Datum_regels ; record_number ) ; record_start_time = GetNthRecord( Regelsviaplanning_Portal1::Begintijd_regels ; record_number ) ; record_end_time = GetNthRecord( Regelsviaplanning_Portal1::Eindtijd_regels ; record_number ) ; record_start_timestamp = Timestamp ( record_datum ; record_start_time ) ; record_end_timestamp = CreateTimestampEindTijd ( record_datum ; record_start_time ; record_end_time ) ; // Bereken minimum en maximum van de week first_record_datum = GetNthRecord( Regelsviaplanning_Portal1::Datum_regels ; 1) ; maandag_date = first_record_datum -(If(DayOfWeek ( first_record_datum )=1;7;DayOfWeek ( first_record_datum )-1)-1) ; zondag_date = maandag_date +6 ; maandag_min_timestamp = Timestamp ( maandag_date ; Time ( 0 ; 0 ; 0 ) ) ; zondag_max_timestamp = Timestamp ( zondag_date ; Time ( 24 ; 0 ; 0 ) ) ; // beslissingen has_record = not ( record_betreft = "?" and record_end_timestamp = "?" ) ; has_time = not (record_start_timestamp = "?" or record_start_timestamp = "" ) ; // bereken aantal uren previous_date = If ( record_number = 1 ; maandag_min_timestamp ; PreviousEndDate ) ; hours_rest = If ( has_record and has_time ; record_start_timestamp - previous_date ; zondag_max_timestamp - previous_date ) ; hours_rest = hours_rest / 3600 ; // recursive gedeelte previous_date = If ( has_record and has_time ; record_end_timestamp ; PreviousEndDate ) ; next_hours_rest = If ( has_record ; CalculateRustRecursive ( record_number + 1 ; previous_date ) ; 0 ) ; // geef het grootste getal terug hours_rest = If ( hours_rest > next_hours_rest ; hours_rest ; next_hours_rest ) ]; hours_rest ) Quote Link naar reactie
0 Felix Geplaatst: 1 oktober 2013 Delen Geplaatst: 1 oktober 2013 (aangepast) . 4 oktober 2015 aangepast door Gast Quote Link naar reactie
0 Grinwell Geplaatst: 2 oktober 2013 Auteur Delen Geplaatst: 2 oktober 2013 Zoals gewoonlijk had ik weer eens geen zin om moeilijk te gaan doen met relaties en andere rotzooi. Ben nog wel op zoek om het portaal zelf mee te geven, maar dit zal waarschijnlijk wel weer te veel gevraagd zijn van File Maker. Tsja, beste Grinwell, wat moet ik nu eigenlijk met zulke opmerkingen? Is het niet zo dat de inspanning die je wilt doen, de creativiteit en volharding die je hebt, zullen bepalen wat je wel en niet met FM kunt doen? Het was ook maar een opmerking die niks betekend, vond het alleen weer apart dat ik toch weer terug kwam op een recursieve oplossing. Hier heb ik er namelijk nog een aantal van inzitten. Maar je hebt helemaal gelijk Felix, volharding en creativiteit heb je zeer zeker nodig. Quote Link naar reactie
0 Grinwell Geplaatst: 2 oktober 2013 Auteur Delen Geplaatst: 2 oktober 2013 GetNthRecord heb ik maar van de tafel geschoven en de functie vertaald naar een script. Screenshot Script Quote Link naar reactie
Vraag
Grinwell
Hoi Allemaal,
Volgende situatie:
Ik heb een portaal per week met werk diensten erin, deze hebben een begin en eind tijd.
Nu is het verplicht om in deze week minimaal 32 uur aaneengesloten rust te hebben.
Als deze niet bereikt is, dan moet er een waarschuwing komen,
maar voor nu ben ik alleen geïnteresseerd in het hoogste aantal aaneengesloten rusturen in deze week.
De database bevat de volgende regels:
Dienst Datum Type Start Eind
1 16-9 Avond 18:00 22:00
2 17-9 Avond 18:00 22:00
3 18-9 Avond 18:00 22:00
4 19-9 Avond 18:00 22:00
5 20-9 Avond 18:00 22:00
6 21-9 Avond 18:00 22:00
7 22-9 Vrij
Hierbij moet rekening worden gehouden de week start op 16-9 00:00 en eindigt op 22-9 24:00.
Het portaal, calculatie of script zou het volgende moten berekenen:
Voor 1 18 uur rust
Voor 2 of Na 1 20 uur rust
Voor 3 of Na 2 20 uur rust
Voor 4 of Na 3 20 uur rust
Voor 5 of Na 4 20 uur rust
Voor 6 of Na 5 20 uur rust
Na 6 26 uur rust
Maximum aantal is hier 26 uur, waar ik dus in geïnteresseerd ben.
Heeft er iemand een idee hoe ik zou kunnen aanpakken?
Met vriendelijke groet,
Bob
VrijeUren.fp7
Link naar reactie
8 antwoorden op deze vraag
Aanbevolen berichten
Doe mee aan dit gesprek
Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.