勤怠入力システムを作成してみた(1)

Office365PowerApps&Flow

Office365(Powerapps & Flow)で勤怠入力システムを作成してみた(1)

勤怠入力課題

勤怠管理において、以下の課題を解決する

エクセルで勤怠管理をしており、正確に入力されているか不安

外出先から入力できないため、まとめて入力することになっている

リアルタイムに勤怠状況が把握できない

休暇申請を紙運用しているため出先から申請できない

システム要件

システム構成要件

ポータル(Office365の機能)を利用し、簡単にできること

機器構成

PC、スマートフォンで勤怠入力ができること

休暇申請

スマートフォンから休暇申請が入力でき、承認者による承認操作がメールでできること

休暇申請が承認されたら、関係者に休暇の通知が行われること

勤怠状況確認

自分が入力した当月と前月の勤怠状況が一覧で確認できること

システム構成・概要

作成するシステムの構成

         

※入力媒体を、スマホ又はPCからとし、情報はsharepointのカスタムリストに格納する

作成するSharepointカスタムリスト

以下に、作成するカスタムリストの構成を記述します。

リスト名:勤怠(メンバーの出勤日時と退勤日時を格納)

このリストには、メンバごとの出勤時間、退勤時間を保存します。勤務時間は(退勤時間-出勤時間)を集計値として保存します。休憩時間は加味しない単純な計算になっています。

列名(英字) 説明 必須 形式
1 勤怠入力
(Title)
リストのタイトルとして「勤怠入力」の固定文言を格納 1行テキスト 必須 6文字/既定値「勤怠入力」
2 出勤時間
(TMC_WorkIn)
出勤の日時を格納 日付と時刻 必須 日付と時刻/標準
3 退勤時間
(TMC_WorkOut)
退勤の日時を格納 日付と時刻 日付と時刻/標準
4 時間
(TMC_WorkTime)
休憩時間を含む勤務時間を格納 集計値 1行テキスト
=TEXT(退勤日時-出勤日時,”h:mm”)
5 当月
(TMC_Month)
出勤日の月6桁(yyyymm)で格納 集計値 1行テキスト
=YEAR(出勤日時)*100+MONTH(出勤日時)
6 次月
(TMC_NMonth)
出勤日の次月6桁(yyyymm)で格納 集計値 1行テキスト
=YEAR(DATE(YEAR(出勤日時),MONTH(出勤日時)+1,1))*100+MONTH(DATE(YEAR(出勤日時),MONTH(出勤日時)+1,1))
リスト名:休暇申請(休暇申請情報を格納)

このリストには、メンバが申請した休暇申請情報を保存します。登録後、承認フローを実施するため、その承認結果も書き込めるようにしています。

列名(英字) 説明 必須 形式
1 休暇申請
(Title)
リストのタイトルとして「休暇申請」の固定文言を格納 1行テキスト 必須 6文字/既定値「休暇申請」
2 承認ルート
(HOL_ARoot)
承認ルートを格納 参照 必須 「承認ルート」表の承認ルート名を参照
3 休暇区分
(HOL_Kubun)
選択肢から休暇区分を選択 選択肢
ドロップダウン
必須 選択肢(有給休暇/慶弔休暇/代休/その他)
4 期間(自)
(HOL_StartDate)
休暇の開始日時を格納 日付と時刻 必須 標準
5 期間(至)
(HOL_EndDate)
休暇の終了日時を格納 日付と時刻 必須 標準
6 休暇事由
(HOL_Comment)
休暇事由を入力 1行テキスト 32文字
7 承認結果
(HOL_AppRes)
承認結果をFlowから自動入力 1行テキスト 6文字/(承認/却下)
ワークフローで承認結果が自動で書き込まれる
8 承認結果内容
(HOL_AppComm)
承認者がFlowで入力したコメントが自動入力 1行テキスト 64文字
ワークフローで承認者が入力したコメントが自動で書き込まれる
リスト名:承認ルート(休暇申請の承認ルートを管理する)

このリストには、休暇申請の承認フローを実行するための承認者情報を保存します。このリストはアプリは作成せず、sharepointの機能でメンテナンス(登録・修正・削除)します。承認フローは、メンバが申請を行ったときに部門長が承認すればOKとする単一承認フローを想定しています、誰に承認を依頼するのかはメンバが承認ルートを選択することで、決定させています。ユーザーがどの部門に所属しているのかで承認者を決める方法もあるが、今回は、ユーザーが承認ルートを選ぶ方式としています。

列名(英字) 説明 必須 形式
1 承認ルート
(Title)
リストのタイトルとして「承認ルート」の固定文言を格納 1行テキスト 必須 6文字/既定値「承認ルート」
2 承認ルート名
(ART_Name)
承認ルート名を格納 1行テキスト 必須 16文字
3 グループ長
(ART_GroupUser)
グループリーダーのユーザIDを格納 ユーザー ユーザーのみ/複数選択不可
4 部門長
(ART_DepUser)
部門長のユーザーIDを格納 ユーザー ユーザーのみ/複数選択不可
5 管理部門
(ART_ManUser)
管理部門担当者のユーザーIDを格納 ユーザー ユーザーのみ/複数選択不可

 

Sharepointでカスタムリストを作成する場合のコツ
SharePointでカスタムリストを作成するときの列名ですが、列名に漢字を使用すると内部列名は漢字をコード化した判別が難しい名称が割り当てられます、従って、最初に作成するときには、一旦英字での登録を行い、登録した後に日本語名に変えることを行っています。従って、上記の各リストの列名には、英字と日本語名を記載しています。

 PowerAppsのアプリ

勤怠入力アプリの画面遷移

勤怠管理メニューが初期表示画面となり、メニューから各機能画面に遷移する構成としています。

 

 勤怠入力メニュー画面

 「勤怠管理メニュー」画面

 

 

各コントロールの設定

名称 コントロール 説明 詳細設定
LBL_MENU ラベル 画面タイトル Size=24
Align =Align.Center
ICON_End アイコン アプリの終了 OnSelect=Exit(false)
BTN_Start ボタン 出社日時の入力画面へ
BTN_End ボタン 退社日時の入力画面へ
BTN_Month ボタン 今月の勤怠一覧の照会画面へ
BTN_NMonth ボタン 前月の勤怠一覧の照会画面へ
BTN_Holiday ボタン 休暇申請の入力画面へ

※各パーツ(画面遷移用ボタン)の詳細設定は、各画面ができてから設定する、ここでは、各パーツの配置のみを行う

出勤日時の入力画面

「出勤入力」画面

出勤時間に、現在の日時が表示され、修正が必要な場合は修正し、「登録」ボタンで出勤情報が登録されます。

出勤日時の入力用コントロールを配置すると、以下の画面となる

 

各コントロールの設定

名称 コントロール 説明 詳細設定
LBL_InTimeTTL ラベル 画面タイトル Size=24
Align =Align.Center
ICON_InTimeEnd アイコン 出勤入力の終了 OnSelect=Back()
BTN_InTimeEntry ボタン 出社日時の登録 SubmitForm(FRM_InTime);
Back();
FRM_InTime フォーム データソースにSharepointの「勤怠」リストを設定 縦で1列表示レイアウト
Titile_DataCard1 データカード 「勤怠」リストの「勤怠入力」項目 表示専用設定DisplayMode=DisplayMode.View
TMC_WorkIn_DataCard1 データカード 「勤怠」リストの「出勤時間」項目 登録する出勤日時は、入力した出勤日時とするため、下記設定により各入力値を設定
Update=DateValue1.SelectedDate + Time(Value(HourValue1.Selected.Value), Value(MinuteValue1.Selected.Value), 0)
DateValue1 日付の選択 出勤日の日付入力 DefaultDate=Today()
Format=”yyyy/mm/dd”
HourValue1 ドロップダウン 出勤時間の時間入力
「00」~「24」までの選択
既定値は、メニュー画面で「出勤」クリック時の現在時刻
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″,
“08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″,”17″,
“18”,”19″,”20″,”21″,”22″,”23″,”24″]Default=
Text(Hour(G_NowDate),”[$-ja-JP]00″)
MinuteValue1 ドロップダウン 出勤時間の分入力
「00」~「59」までの選択
既定値は、メニュー画面で「出勤」クリック時の現在時刻
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″,
“08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″,
“17”,”18″,”19″,”20″,”21″,”22″,”23″,”24″,”25″,
“26”,”27″,”28″,”29″,”30″,”31″,”32″,”33″,”34″,
“35”,”36″,”37″,”38″,”39″,”40″,”41″,”42″,”43″,
“44”,”45″,”46″,”47″,”48″,”49″,”50″,”51″,”52″,
“53”,”54″,”55″,”56″,”57″,”58″,”59″]
Default= Text(Minute(G_NowDate),”[$-ja-JP]00″)

メニュー画面の「出勤」ボタンクリック時の設定
変数G_NowDateに現在日時を設定、(set)
出勤入力画面のフォーム、出勤日時をリセット(ResetForm
出勤入力画面のフォームを追加モードに設定(NewForm)
出勤入力画面へ遷移(Navigate)

名称 コントロール 説明 詳細設定
BTN_Start ボタン 出勤入力へ OnSelect=
Set(G_NowDate,Now());
ResetForm(FRM_InTime);
NewForm(FRM_InTime);
Navigate(SCR_InTime,ScreenTransition.None)

※「勤怠」リストのフォーム設定
出勤入力で「勤怠」リストに登録するのは、勤怠入力、出勤日時のみであるため、他の項目のチェックを外す

 

※フォームのデータカードの設定
上記の詳細設定での定義は、デフォルトでは修正できない設定になっているため以下の操作で修正する

例)Title_DataCard1DisplayModeViewに設定

 

※注意
出勤入力画面が表示されているときに「F5」(実行)キーで実行すると、フォームのモードの状態により、画面が乱れる恐れがあります。実行する場合は、必ずメニュー画面から実行するようにしましょう。

退社日時の入力画面

 「退勤入力」画面

「勤怠」リストより、退勤時間が設定されていないデータが表示されます、退勤時間に、現在の日時が表示され、修正が必要な場合は修正し、「登録」ボタンで退勤情報が登録されます。

退勤日時の入力用コントロールを配置すると、以下の画面となる

 

各コントロールの設定

名称 コントロール 説明 詳細設定
LBL_OutTimeTTL ラベル 画面タイトル Size=24
Align =Align.Center
ICON_OutTimeEnd アイコン 退勤入力の終了 OnSelect=Back()
BTN_OutTimeEntry ボタン 退社日時の登録 SubmitForm(FRM_InTime);
Back();
FRM_OutTime フォーム データソースにSharepointの「勤怠」リストを設定 縦で1列表示レイアウト
Titile_DataCard2 データカード 「勤怠」リストの「勤怠入力」項目 表示専用設定DisplayMode=DisplayMode.View
TMC_WorkIn_DataCard2 データカード 「勤怠」リストの「出勤時間」項目 表示専用:DisplayMode=DisplayMode.View
DataValue2.FontWeight=Bold
HourValue2.FontWeight=Bold
MinuteValue2.FontWeight=Bold
TMC_WorkOut_DataCard1 データカード 「勤怠」リストの「退勤時間」項目 登録する退勤日時は、入力した退勤日時とするため、下記設定により各入力値を設定
Update=DateValue3.SelectedDate + Time(Value(HourValue3.Selected.Value), Value(MinuteValue3.Selected.Value), 0)
DateValue3 日付の選択 退勤日の日付入力 DefaultDate=Today()
Format=”yyyy/mm/dd”
HourValue3 ドロップダウン 退勤時間の時間入力
「00」~「24」までの選択
既定値は、メニュー画面で「退勤」クリック時の現在時刻
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″,
“08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″,”17″,
“18”,”19″,”20″,”21″,”22″,”23″,”24″]Default=
Text(Hour(G_NowDate),”[$-ja-JP]00″)
MinuteValue3 ドロップダウン 退勤時間の分入力
「00」~「59」までの選択
既定値は、メニュー画面で「退勤」クリック時の現在時刻
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″,
“08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″,
“17”,”18″,”19″,”20″,”21″,”22″,”23″,”24″,”25″,
“26”,”27″,”28″,”29″,”30″,”31″,”32″,”33″,”34″,
“35”,”36″,”37″,”38″,”39″,”40″,”41″,”42″,”43″,
“44”,”45″,”46″,”47″,”48″,”49″,”50″,”51″,”52″,
“53”,”54″,”55″,”56″,”57″,”58″,”59″]
Default= Text(Minute(G_NowDate),”[$-ja-JP]00″)

1 退勤時間を入力するデータの条件は、「勤怠」リストの登録者がログインユーザーと同一のデータで退勤時間の項目が空白のデータとする。その設定は、フォーム(FRM_OutTime)のitemプロパティに以下の設定を行います
LookUp(勤怠,TMC_OutTime=Blank() And Author.Email=User().Email)

メニュー画面の「退勤」ボタンクリック時の設定
変数G_NowDateに現在日時を設定、(set)
出勤入力画面のフォームを編集モードに設定(EditForm)
出勤入力画面へ遷移(Navigate)

名称 コントロール 説明 詳細設定
BTN_End ボタン 退勤入力へ OnSelect=
Set(G_NowDate,Now());
EditForm(FRM_OutTime);
Navigate(SCR_OutTime,ScreenTransition.None);

※「勤怠」リストのフォーム設定
退勤入力で「勤怠」リストに登録するのは、勤怠入力、出勤日時、出勤日時のみであるため、他の項目のチェックを外す