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

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

ただいまの
回答率

90.84%

  • Access

    378questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 453

前提・実現したいこと

会社の作業実績管理を行う簡易なシステムを作りたく、
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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

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

サブフォーム

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/01 21:00

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

    キャンセル

  • 2018/01/01 22:04

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

    キャンセル

  • 2018/01/04 12:14

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

    キャンセル

  • 2018/01/04 12:35

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

    キャンセル

  • 2018/01/10 19: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の処理は机上の確認となり申し訳ございませんが事前確認とさせていただきます。

    キャンセル

  • 2018/01/10 20:24

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

    キャンセル

  • 2018/01/12 20:11

    そうですね、全体像を伝えようという思いもありましたが見返すと1から10まで聞いてるように見えますね、失礼いたしました。
    ですが慣れない技術に悪戦苦闘しており、お時間あればもう少し知恵を拝借したく。

    そこのTempVarsの部分なんですが、理解したつもりでしたが実装の段で困っておりまして追加でご質問させていただきました。
    TempVarsを使うことでhasy mapのように値を格納し取り出せるのだとは理解しましたが、それを取り出す場所?はどこで行うのかという状態です。

    質問
    「フォームを開いたときに呼ばれる処理が「Form_Open」のように見えますが、認識齟齬ないでしょうか?今回やりたい事に似たサンプルなどあればご紹介いただければと存じます」

    キャンセル

  • 2018/01/13 18:16

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

    キャンセル

  • 2018/01/14 16:15

    http://fast-uploader.com/file/7071469534857/
    SSを取るのに使ったサンプルを加工したものです。よかったらどうぞ。

    キャンセル

  • 2018/01/24 19:08

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

    キャンセル

+1

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

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

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


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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/30 09:50

    ご回答ありがとうございます
    休暇に入ったのですぐにaccess触れる環境でないですが、WEBで調べてTempVarsの使い方はなんとなくわかりました。
    ログイン機能の具体的な実装方法も提示いただきありがとうございます。Tempから担当者のIDは自動入力するイメージですね。
    時間もやはり数値で入力させて集計時のSQLでうまくやるほうがいいですね。

    先ず日別入力の機能について目途がつきましたらログイン機能も充実させたいと思います。
    引き続き皆様のアドバイスお待ちしております、よろしくお願いいたします。

    キャンセル

+1

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/30 23:56

    回答ありがとうございます。
    ざっと検索したら色々ひっかかりましたがフォームのフィルターについては明日以降になるでしょうが
    これより確認します。

    作業時間については、目安程度の集計でそのまま人事システムに連携とかではないので
    取り回しやすさとかの優先です。たぶん数値入力のほうが簡易なのでそれで実現しようと思います。

    キャンセル

  • 2018/01/10 19:10

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

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    RDBのテーブルの分類について

    お世話になります。 RDBでは、マスタ・トラン・ワークという分類の仕方が一般的かと思いますが、 この中の「トランザクション」という分類については、 これまで業務上であまり接してこ

  • 解決済

    帳票形式サブフォームのレコード数の増加のタイミングについて

    はじめまして。 お世話になります。 帳票形式サブフォームのレコード数の増加のタイミングについてご教授ください。 環境 現在Acceess 2016を使用しています。Access

  • 解決済

    ACCESSの開発環境について

    前提・実現したいこと 今度の案件でACCESSを利用したツールを作成することになりました。 ACCESSの開発において、ソース管理やテストなどはどのようにやるのでしょうか?

  • 解決済

    SQLで日付を持ったデータの集計を行いたい

    SQL(SQL Server)で日付を持ったデータの集計をしています。 開始日時と終了日時を持ったデータに対し、1ヶ月分、23時59分59秒に、 開始されていて終了されていない

  • 解決済

    アクセスで作ったツールに簡易機能を追加したいが上手くいかない

    アクセスで作られたツールがあり、その中にある入力用のフォームにボタンを追加したいのですが、  上手くいかずに困っています。  ☆やりたいことは以下になります。  追加

  • 解決済

    AccessからDBへの認証情報の保存について

    前提・実現したいこと 現在、AccessでDBのメンテナンスを行うツールを作成しており、 権限周りの設定で、質問があります。 以下の様に利用するのを理想としています。 ・専

  • 受付中

    Access2016のテーブルとフォーム

    前提・実現したいこと Access2016でテーブルとフォームについての質問です。 (例) テーブルにて100レコードあると仮定 同様にフォームも100レコードです。 テーブルにて

  • 受付中

    Access2010 を利用して、企業情報データベースの作成

    前提・実現したいこと Access2010を使って、企業情報のデータベースの作成を行いたいと思っております。 そのデータベースは過去に登録していた情報もログとして残るようにしたいと

同じタグがついた質問を見る

  • Access

    378questions

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