Tijd anders invoeren: Deel 1/3

Over berekeningen operatoren/functies, relaties, lay-outs gedeelten/rapport, scripts beheren/maken en beveiliging bestand/tabellen.
Gebruikersavatar
René Ros
Site Admin
Berichten: 65
Lid geworden op: 26 feb 2017 20:46

Tijd anders invoeren: Deel 1/3

Bericht door René Ros »

Het intypen van een tijd kan in FileMaker maar op één trage manier. Deze truc geeft een berekening waarmee ook een tijd als 1,5 én als 130 ingevoerd kan worden.

Standaard vereist FileMaker de invoer van tijd met dubbele punten als scheidingsteken tussen uren, minuten en seconden. Snel invoeren van tijden is dan slecht mogelijk en vooral als er veel tijden ingevoerd moeten worden is dat vervelend.

Als u de tijd op een andere wijze wilt invoeren dan kan onderstaande berekening geplaatst worden bij de veldopties, tabblad Automatisch Invoeren, optie Berekende Waarde. Denk er aan dat de bijbehorende optie 'Bestaande waarde van veld niet vervangen' uit staat. Door het gebruik van de functie Self hoeft de berekening niet aangepast te worden.

De berekening negeert seconden en accepteert de invoer als uren en minuten. Een invoer van 1,5 wordt omgezet naar 1:30, 2,25 wordt 2:15 enzovoort.
Bij een invoer zonder dubbele punt en komma neemt de berekening de rechter twee cijfers als minuten en de andere als uren. De minuten mogen groter zijn dan 59 waarbij de uren verhoogd worden en ook mag de invoer korter zijn dan drie tekens. Een paar voorbeelden van invoer en het resultaat:
1 -> 0:01
12 -> 0:12
90 -> 1:30
112 -> 1:12
2112 -> 21:12
12112 -> 121:12

Dit voorbeeld gaat uit van een veld van veldtype Tijd, voor het veldtype Tijdstempel werkt het nog niet. Uiteraard kan een Eigen Functie (FileMaker Pro Advanced vereist) gemaakt worden om de berekening op één centrale plaats te hebben.
De berekening kan ook op een veld toegepast worden met scriptactivering en ook kan het aangepast worden voor het veldtype Tijdstempel, daarover meer in twee volgende tips.

Code: Selecteer alles

Let ( [
  veldinhoud = Self ] ; 

  Case (
    // invoer bevat geen dubbele punt en wel een komma van decimale waarde
    Position ( veldinhoud ; ":" ; 1 ; 1 ) = 0 and Position ( veldinhoud ; "," ; 1 ; 1 ) > 0 ;
      GetAsTime ( Truncate ( GetAsNumber ( veldinhoud ) * 3600 ; 0 ) ) ;

    // invoer bevat geen dubbele punt van tijd waarde
    Position ( veldinhoud ; ":" ; 1 ; 1 ) = 0 ;
      GetAsTime ( Replace ( "000" & veldinhoud ; Length ( veldinhoud ) + 3 - 1 ; 0 ; ":" ) ) ;

    veldinhoud
  )
)
Met vriendelijke groet,
René Ros

FMTraining
Hét FileMaker trainingsinstituut van Nederland.
Plaats reactie