質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

3回答

1057閲覧

Access2013での担当者別/日別の作業実績入力画面作成

cwsZrKglsyV5hqz

総合スコア7

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2017/12/29 21:41

###前提・実現したいこと
会社の作業実績管理を行う簡易なシステムを作りたく、
Access2013なら簡易に作れそうだと言うことで調査検討しています。

・10人程度の担当者/日別の作業実績をつけたい
・入力は原則、担当者本人が行い、全員が共通のファイルサーバを参照可能
・作業実績は1日あたり3~6程度のレコードを登録する見込み
・あわよくばパスワード認証も出来ればいいけど、なくてもOK
【例】
X社の山田太郎さんが一日の業務終了時に作業実績をつけたい。
営業の客先への連絡業務が3時間、営業の報告資料整理が3時間45分、経理の帳票付けが2時間30分 など
最終的には、人別/会社別/業務分類別の実績を集計できるようにしたい

###発生している問題・エラーメッセージ
入力フォームの違いもよくわかってないが、「データシート」で下記作業実績ファクトを
フォーム化することで、とりあえずの入力画面は作成できたが、すべてのレコードが
表示される状態で使い物にならない

・ログイン、もしくは最初に選択した人の実績だけ表示、入力としたい
・日別でのページ送りで実績を参照したい。つまり1帳票は担当者/作業日別 で3~6レコード程度登録
・「作業時間」の入力は型は何にするべきか、上記機能実現のために注意点はあるか

###該当のソースコード
ER図(一部簡易化)

【ユーザマスタ】 001 山田太郎(X社)
PK 社員番号(CHAR) / 名前(CHAR) / 会社(CHAR) / パスワード(CHAR)
【大分類マスタ】 営業 / 経理
PK 大分類コード(AutoNumber) / 大分類名称(CHAR)
【小分類マスタ】 プロジェクト / 定常業務
PK 小分類コード(AutoNumber) / 小分類名称(CHAR) / FK 大分類コード
【作業実績ファクト】
PKFK 社員番号 / 作業日(DATE) / PKFK 大分類 / PKFK 小分類 / 作業詳細(TEXT) / 作業時間(DATE?) / 登録日(DATE)

※管理する担当者の協力会社は3種類のみであり、所属会社マスタまでは作らないつもり

###試したこと
発生している問題に記載

###補足情報(言語/FW/ツール等のバージョンなど)
Access2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

作業実績ファクトへの検索はフィルターが正攻法ですが、サブフォーム化すれば
[リンク親フィールド][リンク子フィールド]を使ってサクッとそれっぽい機能を付けることもできます。

サブフォーム

こうすると上で入力した「cbx作業者」の社員番号と「txt作業日」の日付で自動的にフィルターがかかります。
あとはログインユーザーの社員番号を格納したTempVarsとDate()を既定値にしておけば開いた瞬間から
・ログインした人の実績だけ表示、入力
にすることができますよ。

投稿2017/12/30 18:22

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cwsZrKglsyV5hqz

2018/01/01 12:00

おおお、遅くなりましたがイメージ付きで回答ありがとうございます 日付、担当者を設定する親画面と3~6レコード登録する子画面の2フォームのイメージですね? フィルターの実現方法は理想的ですが、これは1レコードずつ登録をするイメージということでしょうか?
sousuke

2018/01/01 13:04

質問で返して申し訳ありませんが「1レコードずつ登録をする」というのはどういうことでしょうか? データシートや帳票フォームで入力するにしても単票フォームで入力するにしてもどの場合でも 入力する場合は「1レコードずつ」しか入力できません。 リンク親、子フィールドの設定はレコードソースにフィルターが自動でかかるだけで 新規行の登録や更新、削除はすべてそのままです。上で「作業実績ファクトをフォーム化して 入力できるようにしたが全件が表示されていた」とありましたがそのフォームにフィルターを かけた結果「全件」が「フィルターに一致したデータ」になるだけです。
cwsZrKglsyV5hqz

2018/01/04 03:14

用事があり返信遅くなりました 1レコードずつというのは1画面で1レコードではなく、1画面で複数レコード登録できるような仕組みかなと思いましたが、データシートにフィルターをかける形であれば想定通りですね 上のフォームのイメージだと1画面で1レコードで登録するように見えたため、1日5件程度の登録で8時間の工数を満たしているかなどを入力しながら確認できるのかな?と思った次第です。
sousuke

2018/01/04 03:35

その質問をされるということはほぼAccessのフォームは作っていないということですね。 データシートビューでも単票ビューでも1レコードのデザインしかできません。 データシートビューで表示した場合コントロール毎のvisibleや配置場所、フォントなどいくつかのプロパティは無視されますが、書式や定型入力、編集可などはそのまま適用されます。
cwsZrKglsyV5hqz

2018/01/10 10:08

回答ありがとうございます。また遅くなり申し訳ございません。 本業務の合間に対応となるため細く長くお付き合いいただければ幸いです。 正月休みのボケた頭をたたいてこれまで皆様にいただいたアドバイスを元に実装を進めました。 ------------------- 【フォーム構成】 1.ログイン画面 2.実績入力(親) 3.実績入力(子) 【フォーム詳細】 1.ログイン画面 「2017/12/30 08:18」の投稿をもとに実現 「社員番号(コンボ)」「パスワード(テキスト入力)」を準備し、 「実績入力画面へ」のボタン押下時のイベントでパスワード認証を行い、 NGならアラート、OKなら以下2処理を実施 --- TempVars("社員番号").Value = Me.社員番号.Value DoCmd.OpenForm "実績入力親フォーム", , , , , , Me.ログインID.Value --- 2.実績入力(親) 「社員番号:社員名」 「入力日付」 「実績入力(子)フォーム」 という並びでフォームを作りました。 3.実績入力(子) 「2018/01/04 12:35」の回答では「1レコードのデザインしか~」とありますが 「その他のフォーム」⇒[複数のアイテム] を選択することで、複数レコードを まとめて編集できるフォームがあったようです。 説明不足で認識齟齬あれば申し訳ございませんがこれで作成できるフォームイメージを 元にご確認させていただきます。 「社員番号/実績日/大分類/小分類/作業詳細/作業時間(分)/登録日」 【課題】 1.ログイン画面 おそらく問題なし。※ID受け渡しに問題なければ 2.実績入力(親) 1で入力した社員番号を受取りセットしたいのですが受け取り方がわかりません。 また、入力日付はシステム時間を取得しデフォルト設定をしたいと考えます。 これら処理を「Form_Open」内で実装するよな記事は見つかりますが、この「Form_Open」はどこに記載すべきでしょうか。 別の実装方法としてPublic変数に保管する方法も見つかりましたが、複数人同時利用時に排他処理する必要あるのでは?と考えております。できれば引数で実現したいです。 オブジェクトは以下を想定しております。おかしな考えとなっていないでしょうか 「社員番号:ラベル(ログイン者以外の入力はあり得ないため)」 「入力日付:普通のテキストボックスとし、当日日付をセットしておくが、場合により前日入力などする」 3.実績入力(子) 2の値の受け取り処理が確認取れ次第ですが、親フォームで設定された「社員番号」「入力日付」を元にフィルタしたいと考えております。 「2017/12/31 03:22」回答がその実現方法と思いますが、「こうするとフィルタ~」のくだりは 「リンク親/子フィールド」の設定のことでよろしいでしょうか? また、横の長さが冗長となるので、子フォームでは「社員番号/実績日」は非表示にしたいと考えます。 問題ないとは思いますが懸念あればご指摘願います。 1⇒2の処理がうまくいっていないため2⇒3の処理は机上の確認となり申し訳ございませんが事前確認とさせていただきます。
sousuke

2018/01/10 11:24

色々書いていただいてあれなんですが、ここの使い方としてはわからないところ1点をフォーカスして質問するべきで、アプリのコードを1から10までお伝えする場所ではないと思います。私も知っている範囲では答えたいと思いますが、現在は内容が広すぎてまるで私が作っているようです。 一つだけ答えるとしたら値の受け渡しですが上の投稿でTempVarsを理解されたとおっしゃっていたのでそれでいいはずです。
cwsZrKglsyV5hqz

2018/01/12 11:11

そうですね、全体像を伝えようという思いもありましたが見返すと1から10まで聞いてるように見えますね、失礼いたしました。 ですが慣れない技術に悪戦苦闘しており、お時間あればもう少し知恵を拝借したく。 そこのTempVarsの部分なんですが、理解したつもりでしたが実装の段で困っておりまして追加でご質問させていただきました。 TempVarsを使うことでhasy mapのように値を格納し取り出せるのだとは理解しましたが、それを取り出す場所?はどこで行うのかという状態です。 質問 「フォームを開いたときに呼ばれる処理が「Form_Open」のように見えますが、認識齟齬ないでしょうか?今回やりたい事に似たサンプルなどあればご紹介いただければと存じます」
sousuke

2018/01/13 09:16

「それを取り出す場所は?」と言われれば「取り出したい場所です」としか言いようがないです。「フォームを開いたときに呼ばれる処理が「Form_Open」かどうか」に関しては基本中の基本ですので調べるか参考書などみて勉強するのが先かと思います。ここは教習所では無いはずです。
cwsZrKglsyV5hqz

2018/01/24 10:08

本業の合間での開発となり遅くなりましたがサンプル提供ありがとうございます おかげさまで想定通りの動作をするものが作成することができました。 親リンク、子リンクの設定のところとかは自力では設定できなかったと思います。 ほとんどそのまま作ってもらった形になりましたがこれにて解決となりますのでベストアンサーとさせていただきます。
guest

0

・ログイン、もしくは最初に選択した人の実績だけ表示、入力としたい

作業実績ファクトのフォームのフィルターに社員番号を指定して下さい。
指定するものとしては、フォーム上のコントロール等が指定できます。
このあたりはネット上に沢山サンプルがあります。

・日別でのページ送りで実績を参照したい。つまり1帳票は担当者/作業日別 で3~6レコード程度登録

データシートではなく帳票フォームにしてボタンを作成し、そのボタンでフィルターの条件を変更する。

・「作業時間」の入力は型は何にするべきか、上記機能実現のために注意点はあるか

24時間を超えた入力があるなら、数値型や文字型。そうでないなら、日付/時刻型が良いかと思います。
開始と終了を入力させて計算値を表示が可能ならそれが一番だと思いますが、休憩時間とか勤怠管理の要素が多くあるようなら、入力時間で止む無しですかね。

投稿2017/12/30 06:23

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cwsZrKglsyV5hqz

2017/12/30 14:56

回答ありがとうございます。 ざっと検索したら色々ひっかかりましたがフォームのフィルターについては明日以降になるでしょうが これより確認します。 作業時間については、目安程度の集計でそのまま人事システムに連携とかではないので 取り回しやすさとかの優先です。たぶん数値入力のほうが簡易なのでそれで実現しようと思います。
cwsZrKglsyV5hqz

2018/01/10 10:10

> 作業実績ファクトのフォームのフィルターに社員番号を指定して下さい。 ネット上に情報は色々あるものの、自分のやりたいものに合致するものは見つかりませんでした。 現状についてはsousukeさんのほうに詳しく記載しましたが、もしフィルターの実現方法についてサンプルのURLや知恵などあれば拝借したいです。
guest

0

ログインは入力されたユーザーのパスワードがユーザーマスタのパスワードと合っているかどうか
みればいいというのはなんとなくお分かりになるかと思います。実装方法がわからないということですか?

自分はよくコンボボックスで簡易的に済ましています。値集合ソースで

SQL

1select 社員番号,名前,会社,パスワード 2from ユーザマスタ 3order by 社員番号

のような形で設定し、列数[4]、列幅[1,1,1,0]、リスト幅[3]、で設定すれば、
パスワードが表示上見えなくなりますがColumn(3)でアクセスできるのでそれを入力値と
比較できます。ログインユーザーの社員番号は頻繁に使うのであればTempVarsに格納するのがおすすめです。

VBA

1 If (Me.cbxユーザーコンボ.Column(3)=Me.txt入力パスワード.Value) then 2 MsgBox "ログイン成功" 3 TempVars("ログインユーザー").Value = Me.cbxユーザーコンボ.Value 4 Else 5 MsgBox "ログイン失敗" 6 End If

作業時間の型は日付でも数値でもいいと思います。数値は時間と分でフィールドを分ける必要がありますが
分数に「80」分などを入力することが単純に可能です。日付型の場合「1:20」と入力するしかないです。

投稿2017/12/29 23:18

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cwsZrKglsyV5hqz

2017/12/30 00:50

ご回答ありがとうございます 休暇に入ったのですぐにaccess触れる環境でないですが、WEBで調べてTempVarsの使い方はなんとなくわかりました。 ログイン機能の具体的な実装方法も提示いただきありがとうございます。Tempから担当者のIDは自動入力するイメージですね。 時間もやはり数値で入力させて集計時のSQLでうまくやるほうがいいですね。 先ず日別入力の機能について目途がつきましたらログイン機能も充実させたいと思います。 引き続き皆様のアドバイスお待ちしております、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問