FileMaker로 커스텀 함수를 만들어 보았습니다.

후배의 hirata에 지적을 받았으므로 코드 부분을 다시 작성했습니다 (12/10 14:04)

커스텀 함수를 만들어 보았습니다.



피티나에서는, 노구치에 의한 FileMaker의 연수가 월 2회로 개최되고 있습니다만,
FileMaker 초보자 나도 참여하고 있습니다.

이번, 제목으로 「출퇴근을 관리하는 시스템」을 FileMaker로 만들어 보게 되었습니다.

그 가운데, 노동시간을 계산하는데 뒤로 쓰러뜨리고 전도를 하는 시간 계산이 필요하게 되었기 때문에, 커스텀 함수를 사용해 보았습니다.


함수 개요



예를 들어
  • 09:01 ~ 09:30 에 출근하면, 09:30 로서 취급한다. (출근은 후퇴)
  • 19:00 ~ 19:29 로 퇴근하면, 19:00 으로 취급한다. (퇴근은 앞당겨)

  • 같은 처리입니다.

    이미지 다이어그램 : 후퇴 시간_시(_time; _unit; _i)





    코드 : 후퇴 시간_시(_time; _unit; _i)


    Let ([
      m = Minute ( _time );
      h = Hour ( _time );
      threshold = _i * _unit
      ];
    
      Case ( 
        threshold ≥ 60; h+1;
        Case (
          m = 0; h;
          m ≤ threshold ; h;
          後倒し時刻_時 ( _time; _unit; _i+1 )
        )
      )
    
    )
    

    코드:후도해 시간_시(_time; _unit; _i) 개수했습니다! !



    후배의 hirata로부터 「n시를 잡는 것만이라면, Loop할 필요 없어」라고 지적을 받았습니다.
    확실히! ! 그래서 다음 코드로 다시 작성했습니다.
    Let ([
      m = Minute ( _time );
      h = Hour ( _time );
      threshold = 60 - _unit
      ];
    
      Case ( 
        m  > threshold ; h+1;
        h
      )
    )
    

    역치 = 60 - unit 이군요. 부끄러워.

    함수 해설



    인수 해설


    後倒し時刻_時 ( 19:01:00; 15; 0 )
    
  • _time : 시간 부분은 타임 스탬프 유형의 필드를 지정하는 이미지입니다.
  • _unit : 피티나에서는 15분 단위 계산의 사람, 30분 단위 계산의 사람이 있으므로 단위를 지정할 수 있도록 했습니다.
  • _i : 조금 까다롭지만 초기값 0을 투입합니다. . . 게 흠.

  • 처리 해설



    우선, 최초의 Let 함수로,
  • 인수로받은 시간의 분수 부분을 얻는다
  • 인수로 받은 시각의 시각 부분을 취득
  • 임계 값 (분)으로 단위 분 * 루프 횟수 (i)를 설정합니다

  • 그런 다음 Case 문에서,
  • 역치(분)가 60분을 넘고 있으면, 체크 대상 시각(시) + 1을 결과로서 반환.
  • 체크 대상 시각(분)이, 정확히 0분이면, 체크 대상 시각(시)을 결과로서 반환.
  • 체크 대상 시각(분)이, 임계치(분) 미만이면, 체크 대상 시각(시)을 결과로서 반환.
  • 어느 쪽이든 판단되지 않으면, _i 를 인크리먼트 해, 다시 한번 판정해 주세요.

  • 라는 느낌이 듭니다.

    마지막으로



    왜 재귀 처리를 했는가



    사실 FileMaker 함수에서는 루프 처리를 할 수 없습니다. For 또는 While이 없습니다.
    그래서 함수 내에서 루프 처리를 하고 싶은 경우, 아무래도 재귀 처리로 해결할 수밖에 없는 것입니다.

    또는



    (함수가 아닌) 스크립트를 만드는 방법이 있습니다.
    그러나 처리 결과를 얻고 싶다면,
  • 스크립트 실행
  • Get (스크립트 결과)

  • 그리고, 2단계로 할 필요가 있습니다.

    또한 스크립트 작업 공간 (FM13에서는 "스크립트 관리")에 당연히 나오므로,
    목록을 신경쓰는 분은 폴더 나누기를 하거나 Lib적인 파일에 작성하도록 하면 좋다고 생각합니다.

    도움이되면 다행입니다.

    좋은 웹페이지 즐겨찾기