전 원격 시급제에서 일하는 자신을 위해, 나는 전자 표로 간단하게 새김 시스템과 유사한 것을 만들었다

배경.

  • 평소 자체 시급제로 고객 개발을 지원(전원격)
  • 운행 시간대는 어느 정도 자유롭다(근무일 낮을 제외하고 야간과 주말 공휴일에도 시간이 있으면 운행한다)
  • 현재 작업 중인지 확인하기 위해 Slack을 통해 상태 공유
  • 시급제라서 일한 시간을 스프레드시트로 기록했다
  • 출근, 이석, 착석, 퇴근할 때 슬랙으로 보고하면 시간 기록과 휴식시간 계산이 번거롭다
  • 만들어진 물건


    打刻システム
    위와 같이 전자 표에 버튼을 누르면 바로 나올 수 있다.자신만 쓸 계획이 있기 때문에 잘 보이지 않는 부분이 많으니 용서해 주세요.
    작업표에 시간을 기록하고 슬랙에 메시지를 알립니다.예를 들어 일을 시작하는 버튼을 누르면 일을 시작하는 시간을 기록한다. 슬랙에는'일을 시작했다'고 쓰여 있다.라고 공지했다.또 낮 휴식 시 이탈→착석 시 착석 버튼을 눌렀을 때 휴식 시간이 더해진다.
    최초의 방안으로 슬랙에서 가동을 시작하다.나는 이 말을 촉발로 삼아 오프라인 의자로 시간을 기록하는 것도 괜찮다고 생각한다.다만 "슬랙 화면만 켜면 자신에게 보낸 멤버와 참여한 게시글에 신경을 쓴다", "운행을 시작한다."일을 시작했다"고 말하고 싶었을 뿐, 이전의 메시지에 이미 읽은 것을 덧붙이고 싶지 않았다"고 말했다.이렇게 치는 것 자체가 귀찮아서 전자 표에 버튼을 눌렀다.

    할 수 있는 일

  • 출근, 이석, 착석, 퇴근 시간에 맞는 버튼을 누르면 전자표에 새기고 슬랙에 통지할 수 있다
  • 타점을 통해 출근 시간, 퇴근 시간, 휴식 시간을 기록할 수 있다
  • 프로세스 활용

  • 작업을 시작할 때 시작 버튼
  • 을 누릅니다.
  • 점심시간 등 이석 시 이석 버튼을 누르고 이석에서 돌아온 후 착석 버튼
  • 을 누른다.
  • 퇴근할 때 퇴근 버튼을 누르기
  • 설치 방법


    참고 정도에 기재하다.변수명 등은 이해하기 어려울 수 있으니 용서해 주세요.

    스프레드시트 설정


    오프라인 작업표를 설정해서 시간대Tokyo를 설정하십시오.(Tokyo가 아니면 적당히 변경하세요.)

    게임 설정


    appsscript.json으로 시간대를 Asia/Tokyo로 바꿔 주세요.(Tokyo가 아니면 적당히 변경하세요.)

    Script 정의

    getRange에서 무엇을 참고하였는지 처리 내용은 본 글에 붙인 이미지와 대조하여 확인하십시오.
    const SLACK_WEBHOOK_URL = YOUR_WEBHOOK_URL
    
    const postSlack = (text) => {
      var options = {
        "method" : "POST",
        "headers": {"Content-type": "application/json"},
        "payload" : '{"text":"' + text + '"}'
      };
      UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
    }
    
    // 時間の差分を[分]単位で返す
    const calcTimesDiffMin = (fromDate, toDate) => {
      const leaveTimeMs = toDate - fromDate
      const leaveTimeMin = Math.floor(leaveTimeMs/1000/60)
      return leaveTimeMin
    }
    
    // 始業
    const start = () => {
      const startDate = new Date()
      const startDateString = Utilities.formatDate(startDate, 'Asia/Tokyo', 'MM/dd')
    
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
      const dateColumnVals = sheet.getRange('H:H').getValues()
      // 始業時間を記録する行番号を取得する
      const nextRowNum = dateColumnVals.filter(String).length + 1
    
      // 日付、始業時間、休憩時間(初期値)を記録する
      sheet.getRange(`H${nextRowNum}`).setValue(startDateString)
      sheet.getRange(`I${nextRowNum}`).setValue(startDate)
      sheet.getRange(`K${nextRowNum}`).setValue("00:00")
    
      postSlack("始業しました。")
    }
    
    // 離席
    const leave = () => {
      const leaveDate = new Date()
      const leaveDateString = Utilities.formatDate(leaveDate, 'Asia/Tokyo', 'MM/dd')
    
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
      const dateColumnVals = sheet.getRange('D:D').getValues()
      // 離席時間を記録する行番号を取得する
      const nextRowNum = dateColumnVals.filter(String).length + 1
    
      // 日付、離席時間を記録する
      sheet.getRange(`D${nextRowNum}`).setValue(leaveDateString)
      sheet.getRange(`E${nextRowNum}`).setValue(leaveDate)
    
      postSlack("離席しました。")
    }
    
    // 着席
    const sit = () => {
      const sitDate = new Date()
    
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
      const sitColumnVals = sheet.getRange('F:F').getValues()
      // 着席時間を記録する行番号を取得する
      const nextRowNum = sitColumnVals.filter(String).length + 1
    
      // 着席時間を記録する
      sheet.getRange(`F${nextRowNum}`).setValue(sitDate)
    
      // 休憩時間を加算する(離席時間と着席時間の差分を休憩時間として加算する)
      const startDateColumnVals = sheet.getRange('H:H').getValues()
      const startDateLastRowNum = startDateColumnVals.filter(String).length
      const restTime = sheet.getRange(`K${startDateLastRowNum}`).getValue()
      const leaveDate = sheet.getRange(`E${nextRowNum}`).getValue()
      const leaveMin = calcTimesDiffMin(leaveDate, sitDate)
      restTime.setMinutes(restTime.getMinutes() + leaveMin)
      sheet.getRange(`K${startDateLastRowNum}`).setValue(restTime)
    
      postSlack("着席しました。")
    }
    
    // 終業
    const end = () => {
      const endDate = new Date()
    
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
      const endColumnVals = sheet.getRange('J:J').getValues()
      // 終業時間を記録する行番号を取得する
      const nextRowNum = endColumnVals.filter(String).length + 1
    
      // 終業時間を記録する
      sheet.getRange(`J${nextRowNum}`).setValue(endDate)
    
      postSlack("終業しました。")
    }
    

    버튼 설정

  • 스프레드시트의 [삽입] 메뉴에서 [드로잉]을 선택하고 그래픽
  • 을 삽입합니다.
  • 삽입된 그래픽에 스크립트 할당start
  • 만든 소감.


    간단하지만 위에서 말한 것처럼 타이프 시스템과 유사한 것을 만들면 낭비된 시간과 스트레스에서 해방될 수 있다.처음에는 카드 리더기로 해보는 것도 재미있을 것 같았지만, 지금은 간단한 방법으로 상황을 관찰하고 싶다.

    최후


    저는 이렇게 이루어졌습니다. 다른 더 좋은 방법과 간단한 방법이 있거나 이런 서비스를 무료로 제공할 수 있습니다. 추천해주시면 꼭 댓글로 알려주세요!

    좋은 웹페이지 즐겨찾기