パソコン、スマホ関係での格闘記

めいあんのIT格闘記

Access

簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

はじめに

必要に迫られて簡易的な在庫管理システムを作りました。

在庫管理システムを作るにあたり、それはもう膨大な数のWebサイトを参考にしました。そのまま使えるAccessの在庫管理システムがあればいいのに、そのまま使えるものは一つもありませんでした。そこで在庫管理だけ必要な人向けの簡易なAccessデータベースを作りましたので、それを公開します。ごく簡単なデータベースです。

各々の環境に合わせて作り変えていただければ、と思います。特にデザインには自信がありません。各自のデザインセンスに合わせて作り変えてください。

Accessを単なるテーブルだけのデータベースとして使ったことはあっても、クエリやVBAを使ってシステムを組むのはこれが初めての経験でした。在庫管理システムは前職で使用していたSAPを念頭にして作りました。しかしAccessだけではSAPのようにはいきませんね。(注:SAPは在庫管理だけでなく、受注から組み立て・売上処理まで含んだシステムです)

この在庫管理システムはマクロを一切使用しておりません。VBAを基本としております。

最後にサンプルのデータベースをダウンロードできるようにしておきました。ここに記載のものをハナから入力するよりかは、ダウンロードしたAccessデータベースファイルを加工して使っていただいた方が便利かと思います。

ココに注意

Ver.1.5ではフォームを開いた際のエラーがないことは確認しましたが、実際のデータを入れて不具合がないかどうかまでは未確認です。動作確認後に修正されるかもしれません。

2020/06/09:改修中

アクセス数も増えてきて、もっとちゃんとしたものにしないと、と思い、改修しております。なかなかうまくいかないところもあり、難儀しております。動作確認もしたうえで公開したいので1ヶ月くらい掛かるでしょうか?体調もあまり優れていませんので、のんびりやります。

no image
VBAでのデバッグ

VBA(VB for Application)でのデバッグ方法がわからなくて苦労されている方はいらっしゃいますか? 下記の方法をご存じない方はやってみてください。デバッグの効率が上がります。 VBエデ ...

続きを見る

一部記事の内容表示がうまくできなくなっています。いつから発生しているのかわかりません。復旧までお時間をください。

データベースの改訂履歴

改訂履歴を参照される方はこちらをクリックしてください(最新版はVer.1.6、2020/06/09)
バージョン 改訂内容
2019/9/1 0.1 とりあえず
2019/9/2 0.2 フォーム「F_入出庫履歴」で日付検索を追加
2019/9/6 0.3 フォーム「F_入出庫履歴」と「F_在庫検索」と「F_安全在庫」にサブフォームを使うように変更した
2019/9/8 0.4 保管場所移動(「F_在庫転送」)と「F_単位変換」機能を追加
2019/9/29 0.5 フォーム開くと閉じるをマクロからVBAに変更。ExcelへのエクスポートをマクロからVBAに変更。フォーム「F_入出庫履歴」のサブフォームで品目型式をダブルクリックすると在庫検索を開くを追加
2019/10/17 0.6 クエリ「Q_部品」、フォーム「F_部品検索」を追加。フォーム「F_入出庫処理」から呼び出せるようにした。
2019/10/19 0.7 「部品マスタ」・「仕入先マスタ」・「社員マスタ」を分割フォームからサブフォームに変更。マクロを全廃。
2019/10/27 0.8 クエリの検索条件式をVBA記述に変更。他細かな修正。
2019/11/08 0.81 テーブル「検索履歴」を追加、「F_入出庫履歴」・「F_在庫検索」・「F_部品検索」・「F_安全在庫」のフォームにて「txt_部品型式」をテキストボックスからコンボボックスにして検索履歴表示を可能に。
2019/11/09 0.82 0.6で追加した「F_部品検索」を「F_単位変換」と「F_在庫転送」でも使用可能にした。
2019/11/17 0.9 入出庫処理の取り消しを追加。(入出庫履歴の入出庫項目ダブルクリックにて)
2019/11/19 0.91 入出庫処理の取消機能のバグ修正。
2019/11/20 0.92 入出庫処理の取消機能の為にテーブル「メイン」にフィールド「削除日付」を追加
2020/05/06 1.00 ログイン画面の追加とそれに伴う各処理の修正。デザインがダサいの色付けをやめた。
2020/05/06 1.1 デザイン修正と軽微なバグ修正。
2020/05/07 1.2 パスワード更新のフォームをインポート忘れていて修正。
2020/05/08 1.3 「アクセス履歴」フォームにExcelへのエクスポートを追加。
2020/05/09 1.4 「品目マスタ」「社員マスタ」「仕入先マスタ」にExcelからの一括インポートを追加。
2020/05/31 1.5 「指図番号」「サイド番号」のテーブルを追加。テーブル「メイン」を「T_入出庫処理」に変更し、全てのテーブル名を「T_」から始まるように変更したため、全面的に修正。
2020/06/09 1.6 「部品」を「品目」に変更。「txt_部品型式」を「cmb_品目型式」に変更。部品という名称だと範囲が狭くなるため。
2020/06/12 1.61 一部「部品」が残っていたのを修正。ログイン関連を修正。
(未定) (2.0) 権限をより細かく。マスタを1つのフォームにタブコントロール上に配置。他。

「入出庫処理の取消」機能を追加してみましたが、「在庫転送」や「単位変換」の取消のことを考慮していません。この場合は在庫転送前後・単位変換前後、両方の処理を削除しないといけないですね。必要に応じて作り変えてみてください。

テーブルやクエリを改造(項目を追加)した際の修正について

クエリから改造しようとして、一旦テーブルを削除・・・などとすると、後々とても面倒なことになります(経験上)。

各所に記述されているSQL文を修正した方が早いですので、その場合についてまとめました。必要に応じて参照ください。

 

あわせて読みたい
デザイン-表示-SQLビュー
クエリが参照するテーブルを変更した場合(Access)

はじめに Accessで在庫管理システムを作成中です⇩ 皆さん、それぞれの会社の仕組みに合わせてカスタマイズしたいと思います。テーブルの名前を変更したり、フィールドを追加しても、クエリに反映されません ...

続きを見る

フォームのプロパティ(共通)

プロパティ 変更後の設定
ポップアップ はい
レコードセレクタ いいえ
移動ボタン いいえ
境界線スタイル なし(一部はサイズ調整可)

試行錯誤のうえで到達しているため、書き漏らしたことがまだまだあるかと思います。

テーブルの作成

テーブルの数が多いために、一覧をタブにしましたが、タブでも見づらいでしょうか?ご勘弁ください。

T_品目T_保管場所T_社員T_入出庫T_仕入先T_単位T_検索履歴T_ログイン履歴T_合否T_指図番号T_サイド番号
ID オートナンバー型
品目コード 数値型
品目型式 テキスト型
メーカー テキスト型
安全在庫 数値型
最小ロット 数値型
標準ロット 数値型
標準納期 数値型
仕入先コード 数値型
保管場所コード 数値型
Webサイト ハイパーリンク型
削除 Yes/No型
ID オートナンバー型
保管場所コード 数値型
保管場所 テキスト型
ID オートナンバー型
社員コード 数値型
社員 テキスト型
所属 テキスト型
権限 テキスト型
パスワード テキスト型
平文 テキスト型
削除  Yes/No型

平文はパスワードそのものです(パスワードの項目にはSHA256で計算されたハッシュ値が入ります)。
動作確認用ですので、実際に運用の際には削除ください。

ID オートナンバー型
入出庫コード 数値型
入出庫 テキスト型
ID オートナンバー型
仕入先コード 数値型
仕入先会社名 テキスト型
郵便番号 数値型
住所 テキスト型
電話番号 数値型
FAX番号 数値型
営業担当者 テキスト型
携帯電話番号 数値型
Eメールアドレス テキスト型
削除 Yes/No型
ID オートナンバー型
入出庫コード 数値型
入出庫 テキスト型
[/su_tab
簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)
ID オートナンバー型
日付 日付/時刻型
社員コード 数値型
品目コード 数値型
入出庫コード 数値型
数量 数値型
単位コード 数値型
削除 Yes/No型
削除日付 日付/時刻型
ID オートナンバー型
検索履歴 テキスト型
ID オートナンバー型
社員コード 数値型
日時 日付/時刻型
成功or失敗 Yes/No型
IPアドレス テキスト型
ID オートナンバー型
成功or失敗 Yes/No型
ログイン  テキスト型
ID オートナンバー型
指図番号 テキスト型
予算 数値型
工数 数値型

「指図番号」の名称は自由に書き換えてください。前職では下記の「サイド番号」とセットでした。

ID オートナンバー型
サイド番号 数値型
名前 テキスト型

前職では000…工数、420…通信費、460…出張費など指図番号以下に使用目的のサイド番号がありました。必要に応じて使うなり削除するなりしてください。

[/su_tab
no image
バーコード印刷(サンプル付き)

管理している品目にバーコードを付けてバーコードリーダで読み取らせたい場合もあるかと思います。 バーコードのフォントをインストールしますと、簡単に実現できます。 今回はCode39というバーコードを例に ...

ID オートナンバー型
バージョン 数値型
更新内容 テキスト型

ログイン画面

ログイン画面については別途記事を作成しております。

 

あわせて読みたい
簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)
アクセス履歴付き ログイン画面を作る(Access)(サンプル付き)

はじめに 在庫管理システムを作るにあたって、複数社員で使用するにはログイン画面が必要であると思いつつ、今まで盛り込んできませんでした。 ログイン画面のみをテストで作りました。目指すはただ1点、 ・パス ...

続きを見る

在庫管理システムの方にエクスポートした後、以下のVBAコードを修正します。

ログイン画面のVBA

ログイン履歴のVBA

メインフォーム

F_メイン

【作成】からフォームの中の【空白のフォーム】を選んで、コマンドボタンを貼っていきます。1つコマンドボタンを作ったらコピペで増やしていくと、同じサイズのボタンになります。ヘッダーとフッターも使用しました。

フォーム作成

フォーム作成

メインメニューの下半分、管理者メニューとし、管理者でログインした以外はグレーアウトするようにしてあります。

メインフォーム

メインフォーム

コマンドボタンを配置します。

ここでは「cmd_入出庫処理」「cmd_入出庫履歴」

「cmd_在庫転送」「cmd_単位変換」

「cmd_在庫検索」「cmd_安全在庫」

「cmd_品目マスタ」「cmd_社員マスタ」「cmd_社員マスタ」

「cmd_ログイン履歴」「cmd_閉じる」

としております。

メインフォームのVBA

フォームのデザインを開き、【デザイン】タブの【コードの表示】から、VBAの画面に遷移します。

VBエディタを開く

メインフォームのVBAは下記の通りです。

コマンドボタンのプロパティのイベントが空のままです。イベントを割り当てなければなりませんので、【プロパティシート】の【イベント】タブの【…】をクリックします。

プロパティシート-イベント

プロパティシート-イベント

【コードビルダー】を選んで【OK】をクリックします。上述のVBAのコードに飛びます。コマンドボタン1つ1つにこの作業が必要です。

コードビルダー

ビルダーの選択




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

入出庫処理

F_入出庫処理

Access素人には苦労したフォームです。空白のフォームから下記のようにコントロールを配置していきます。

入出庫処理フォーム

入出庫処理フォーム

日付:テキストボックス(名前:txt_日付、プロパティで書式を「日付 (S)」に変更する)
品目:コンボボックス(名前:cmb_品目)、直下にラベル配置(名前:lbl_品目)
数量:テキストボックス(名前:txt_数量)
入出庫:コンボボックス(名前:cmb_入出庫)、右横にラベル配置(名前:lbl_入出庫)
単位:コンボボックス(名前:cmb_単位)、右横にラベル配置(名前:lbl_単位)
保管場所:コンボボックス(名前:cmb_保管場所)、右横にラベル(lbl_保管場所)
社員:コンボボックス(名前:cmb_社員)、右横にラベル配置(名前:lbl_社員)

 

品目検索ボタン:コマンドボタン(名前:cmd_品目検索)
OKボタン:コマンドボタン(名前:cmd_OK)
Cancelボタン:コマンドボタン(名前:cmd_Cancel)
終了ボタン:コマンドボタン(名前:cmd_終了)

コンボボックスについてはもう少し記載しておきます。【プロパティシート】の【データ】タブの中の【値集合ソース】を下記のようにします。
cmb_品目:SELECT T_品目.品目コード,T_品目.品目型式 FROM T_品目 ORDER BY T_品目.品目型式;
cmb_入出庫:SELECT T_入出庫.入出庫コード,T_入出庫.入出庫 FROM T_入出庫;
cmb_単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_保管場所:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;
cmb_社員:SELECT 社員.社員コード,社員.社員 FROM 社員;

コンボボックスは【プロパティシート】にて【列数】を「2」にします。そうすることによって、コンボボックスのプルダウンにて「コード」と「名前」が同時に表示できるようになります。選択される時は「コード」の方にしてあります。各列の幅が長かったり、短かったりすると思います。サンプルでは「列幅」に「1.5cm;5cm」を入力してあります。この数値を調整してください。コンボボックスの直下にラベルを配置したのは、コードだけでは不十分ですので、コードに対応する名前をラベルに表示させて、間違いを防止するようにします。

コンボボックス-列数2

入出庫処理フォームのVBA

フォームのデザインを開き、【デザイン】タブの【コードの表示】から、VBAの画面に遷移します。

VBエディタを開く

 

フォーム「F_入出庫処理」のVBAは下記の通りです。項目に空欄があると警告を出すようにしています。

「cmd_Cancel」ボタンを押すと、全てのコントロールを初期化してデータベースは更新しません。

データベースを更新したときにはAccessは何もアクションがないため、コントロールを初期化してメッセージボックスでデータベースを更新したことを報せます。

入出庫データは「T_入出庫処理」テーブルに格納されていきます。

入庫及び出庫取り消しのときにはプラスに、出庫及び入庫取り消しのときにはマイナスになるようにします。しかし、いかんせん、入出庫処理をせずに品目や商品を持っていったり入れたりする人がいるものです。棚卸しして差異が生じたときには「棚卸調整」にて増えたらプラスに減っていたらマイナスの数量を入力するようにします。

上記コードにて「600」が入庫、「601」は入庫取り消し。「610」は出庫、「611」は出庫取り消しとしております。これはサンプルデータベースの数値ですので、変更時には上記コードも修正ください。

独り言

数字を直接記載するのは良くないですね。テーブルを参照して入庫や出庫を識別するようにした方が良いですね。

F_品目検索

会社では在庫品目の種類が思いの外多く、また類似の品目名が多々存在するために、品目検索のフォームを作りました。

当初はフォーム「F_入出庫処理」からのみ呼び出していましたが、「F_在庫転送」や「F_単位変換」からも呼び出せるようにしました。

Q_品目

検索のためにテーブル「T_品目」だけを置いたクエリ「Q_品目」を作ります。

Q_品目

抽出条件はVBAで記載しますので、ここでは書きません。

SQLビュー

上記SQLをクエリにコピーするには【作成】タブから【クエリデザイン】を選びます。【テーブルの選択】は閉じて、現れたウィンドウのタブの部分で右クリックし、【SQLビュー】を選びます。【SQLビュー】の状態でコードをペーストし、タブから【デザインビュー】を選べば元に戻ります。

SQLビューの開き方

F_品目検索のフォーム

空白のフォームから下記のようにコントロールを配置していきます。

品目検索フォーム

品目型式:コンボボックス(名前:cmb_品目型式)
クエリ「Q_品目」を呼び出します。クエリの条件にテキストボックスの品目名の一部を使いますので、テキストボックスの下にそのような表記をラベルで作っておくと親切だと思われます。【プロパティシート】の【値集合ソース】は

 

検索:コマンドボタン(名前:cmd_検索)
終了:コマンドボタン(名前:cmd_終了)

サブフォームコントロールは名前を「Q_品目のサブフォーム」としておきます。

F_品目検索のVBA

Q_品目のサブフォームのVBA

「品目コード」の部分でも「品目型式」の部分でもダブルクリックするとフォーム「F_入出庫処理」に値が入るようにしていますので、同じ記述が並んでおります。

モジュール

このフォームを使いまわしをするために、標準モジュールに下記の1行を入れます。どのフォームから呼び出したかを記憶し、SELECT CASE文で帰るフォームの処理を振り分けします。




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

検索履歴機能

インターネットブラウザの検索テキストボックスのようにAccessのテキストボックスでも検索履歴を表示させたいと思い、検索履歴機能を追加してみました。

エッセンスは別記事にまとめてあります。

あわせて読みたい
no image
検索履歴つきテキストボックスをコンボボックスで実現(Access)

はじめに インターネットブラウザの検索テキストボックスのようにAccessのテキストボックスでも検索履歴を表示させたいと思い、この方法をやってみました。 本記事とは若干コントロール名などが違いますが、 ...

続きを見る

入出庫履歴

Q_メイン

【作成】-【クエリデザイン】から「メイン」「品目」「入出庫」「社員」「単位」を選びます。

Q_メイン

「メイン」と他の共通するコードを連結します。例えば「品目コード」を結びます。この時、結合線をダブルクリックしてプロパティを開き、

結合プロパティ

2の「’メイン’の全レコードと’品目’の同じ結合フィールドのレコードだけを含める」とします。他の結合線も同様です。

それから下記のようにします。

Q_メイン2

※必要に応じて表示させる項目を追加・削除してください。

このクエリから「Q_入出庫履歴」と「Q_集計」に転用します。「Q_入出庫履歴」と「Q_集計」はQ_メインを使わずに独自に作っても全然構いません。

SQLビュー

下記の記述を【SQLビュー】からコピペすると早いです。

Q_入出庫履歴

Q_入出庫履歴には「Q_メイン」を利用します。

入出庫履歴クエリ

【追記(2019/10/27)】最新版ではここのクエリの抽出条件は空です。代わりにVBAにて記述しております。ただ、時々妙な表示をすることがありまして、まだ改変の余地がありそうです。

 

VBAを使わずにクエリにて抽出条件を記載する場合です。画像ですと抽出条件が見づらいため、表にします。

フィールド 日付 品目型式 [Forms]![F_入出庫履歴]![txt_開始日付] [Forms]![F_入出庫履歴]![txt_終了日付]
テーブル Q_メイン Q_メイン
並べ替え
表示
抽出条件 >[Forms]![F_入出庫履歴]![txt_開始日付] And <[Forms]![F_入出庫履歴]![txt_終了日付] Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*"
または <[Forms]![F_入出庫履歴]![txt_終了日付] Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" Is Null
>[Forms]![F_入出庫履歴]![txt_開始日付] Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" Is Null
Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" Is Null Is Null

SQLビュー

F_入出庫履歴

入出庫履歴を表示するフォームです。全て見えると規模によっては邪魔になりますので、「品目型式」、「履歴の開始日付」、「履歴の終了日付」で検索できるようにしています。

入出庫履歴フォーム

品目型式:コンボボックス(名前:cmb_品目型式)
開始日付:テキストボックス(名前:txt_開始日付)
終了日付:テキストボックス(名前:txt_終了日付)

サブフォームの配置は下記を参照ください。

サブフォームの配置の仕方

【デザイン】タブのコントロールのサブフォームをクリックします。このとき、【コントロールウィザードの使用】をONしておきます。

サブフォームの配置の仕方1

下の図のまま【次へ】をクリックします。

サブフォームの配置の仕方2

【テーブル/クエリ】から「Q_入出庫履歴」を選び、全ての項目を【選択したフィールド】へ移します。

サブフォームの配置の仕方5

【完了】でも良いですが、【次へ】をクリックすればサブフォームの名前を付ける画面になります。

サブフォームの配置の仕方6

サブフォームサイズや、フィールドの幅は各自適宜変えてください。

名前は「Q_入出庫履歴のサブフォーム」のままとしました。気に入らない方は変えてください。

入出庫処理取り消し

当初、取り消し処理のコードを用意していましたが、「削除」フィールドを利用することにしました。

フォーム「入出庫履歴」のフィールド「入出庫」の項目をダブルクリックしますと、入出庫処理取り消しの確認のメッセージボックスが表示されます。そこで「はい(Yes)」を選択すると、該当する入出庫処理のフィールド「削除」にチェックが入ります。このチェックが入った処理は「在庫検索」処理にも反映されません。

入出庫履歴フォームのVBA

「検索ボタン」のプロパティからイベントプロシージャを選択して、下記のようにVBAコードを記載します。

入出庫履歴サブフォームのVBA

フィールド「品目型式」をダブルクリックした時に、「在庫検索」フォームを開き、テキストボックスにダブルクリックした箇所の「品目型式」を渡す記述です。




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

在庫検索

Q_集計

「Q_メイン」クエリを利用して下記のように作ります。

Q_集計1

計算がありますので、【デザイン】タブを開いて「Σ集計」をクリックしておきます。

Q_集計2

Σ集計をクリックすると、今度は「集計」という行が現れます。下記のように「数量」を計算(合計)できるようにします。

Q_集計4

「数量の合計:数量」となっているフィールドはプロパティを開いて【表題】を「在庫数」にしておくと、フォームが表示された時に「在庫数」と表示されます。

「品目型式」の抽出条件はVBAで記載します。

※必要に応じて表示させる項目を追加・削除してください。

SQLビュー

空白のフォームから下記のようにコントロールを配置していきます。

在庫検索

品目型式:コンボボックス(名前:cmb_品目型式)
検索:コマンドボタン(名前:cmd_検索)
終了:コマンドボタン(名前:cmd_終了)

サブフォームコントロールは名前を「Q_集計のサブフォーム」としておきます。

在庫検索フォームのVBA

「検索ボタン」のプロパティからイベントプロシージャを選択して、下記のようにVBAコードを記載します。




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

安全在庫

Q_安全在庫

Q_安全在庫2

「Q_集計」と似ていますが、数量の合計の抽出条件を下記のようにします。

品目型式の抽出条件はVBAにて記載します。「数量の合計:数量」をVBAに記載する方法がわかりませんでした。このクエリに残っております。

※必要に応じて表示させる項目を追加・削除してください。

SQLビュー

F_安全在庫

空白のフォームから下記のようにコントロールを配置していきます。

安全在庫フォーム

品目型式:コンボボックス(名前:cmb_品目型式)
検索:コマンドボタン(名前:cmd_検索)
終了:コマンドボタン(名前:cmd_終了)

サブフォームは「クエリQ_安全在庫」を選び「Q_安全在庫のサブフォーム」としました。

安全在庫フォームのVBA

安全在庫フォームのVBAです。

安全在庫設定に引っかかる品目が生じたら、発注担当者などにEメールを飛ばせるようにしたいと考えていました。AccessではEメールは飛ばせないであろうという先入観から調べてもいませんでしたが、実際にはやろうと思えばできるようです。AccessデータベースによるEメール送信のサンプルを作ってみました。そのうちにこの在庫管理システムにも実装したいと思います。サンプルは下記を参照ください。

めいあんのIT格闘記
AccessデータベースからEメールを送る(サンプル付き)

在庫管理システムを作っていて「【安全在庫】に引っかかる品目が現れたら管理者にEメールを飛ばしたい」と思っていました。 「さすがにAccessからはEメールは送れないだろう」と調べもしておりませんでした ...

続きを見る




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

在庫転送

F_在庫転送

空白のフォームから下記のようにコントロールを配置していきます。

在庫転送フォーム

コントロールは「F_入出庫処理」とほぼ同様です。

日付:テキストボックス(名前:txt_日付、プロパティで書式を「日付 (S)」に変更する)
品目:コンボボックス(名前:cmb_品目)、直下にラベル配置(名前:lbl_品目)
数量:テキストボックス(名前:txt_数量)
単位:コンボボックス(名前:cmb_単位)、直下にラベル配置(名前:lbl_単位)
転送元:コンボボックス(名前:cmb_転送元)、直下にラベル配置(名前:lbl_転送元)
転送先:コンボボックス(名前:cmb_転送先)、直下にラベル配置(名前:lbl_転送先)
社員:コンボボックス(名前:cmb_社員)、直下にラベル配置(名前:lbl_社員)

品目検索ボタン:コマンドボタン(名前:cmd_品目検索)
OKボタン:コマンドボタン(名前:cmd_OK)
Cancelボタン:コマンドボタン(名前:cmd_Cancel)
終了ボタン:コマンドボタン(名前:cmd_終了)

コンボボックスのプロパティシートのデータタブの中の値集合ソースを下記のようにします。
cmb_品目:SELECT T_品目.品目コード,T_品目.品目型式 FROM T_品目 ORDER BY T_品目.品目型式;
cmb_単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_転送元:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;
cmb_転送先:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;
cmb_社員:SELECT 社員.社員コード,社員.社員 FROM 社員;

在庫転送フォームのVBA

在庫転送フォームのVBAです。




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

単位変換

F_単位変換

空白のフォームから下記のようにコントロールを配置していきます。

単位変換フォーム

日付:テキストボックス(名前:txt_日付、プロパティで書式を「日付 (S)」に変更する)
品目:コンボボックス(名前:cmb_品目)、直下にラベル配置(名前:lbl_品目)
変換前数量:テキストボックス(名前:txt_変換前数量)
変換後数量:テキストボックス(名前:txt_変換後数量)
変換前単位:コンボボックス(名前:cmb_変換前単位)、直下にラベル配置(名前:lbl_変換前単位)
変換後単位:コンボボックス(名前:cmb_変換後単位)、直下にラベル配置(名前:lbl_変換後単位)
保管場所:コンボボックス(名前:cmb_保管場所)、直下にラベル(lbl_保管場所)
社員:コンボボックス(名前:cmb_社員)、直下にラベル配置(名前:lbl_社員)

品目検索ボタン:コマンドボタン(名前:cmd_品目検索)
OKボタン:コマンドボタン(名前:cmd_OK)
Cancelボタン:コマンドボタン(名前:cmd_Cancel)
終了ボタン:コマンドボタン(名前:cmd_終了)

コンボボックスのプロパティシートのデータタブの中の値集合ソースを下記のようにします。
cmb_品目:SELECT T_品目.品目コード,T_品目.品目型式 FROM T_品目 ORDER BY T_品目.品目型式;
cmb_入出庫:SELECT T_入出庫.入出庫コード,T_入出庫.入出庫 FROM T_入出庫;
cmb_変換前単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_変換後単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_保管場所:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;
cmb_社員:SELECT 社員.社員コード,社員.社員 FROM 社員;

単位変換フォームのVBA




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

マスタ

品目マスタ

品目の基本情報(マスタ)を編集したいときがきます。そのためのフォームを作ります。

上半分にテキストボックスを、下半分にサブフォーム(テーブル品目を選択)を配置していきます。

フォームの【レコードソース】にテーブルを割り当てるのではなく、テキストボックスをサブフォームのテキストボックスに合わせていきます。

品目マスタフォーム

サブフォームの項目の分だけ上半分にテキストボックスとチェックボックスを配置します。

テキストボックスとサブフォームのテキストボックスの関連付け

上半分のテキストボックスの【プロパティ】の【データ】にて、【コントロールソース】の右端の【…】をクリックします。

サブフォームでのテキストボックスのプロパティ-コントロールソース

下記のように、サブフォーム-フィールド-<値>とし、<値>のところでダブルクリックします。

テキストボックスには

という具合に値が入り、サブフォームのテキストボックスと連動します。

サブフォームでのテキストボックスのプロパティ

最後にフォームに「終了ボタン:コマンドボタン(名前:cmd_終了)」を追加しておきます。

品目マスタのVBA

社員マスタ

社員マスタのVBA

サブフォームで「T_社員」を選択する以外は「品目マスタ」同様です。

仕入先マスタ

仕入先マスタのVBA

サブフォームで「T_仕入先」を選択する以外は「品目マスタ」同様です。




簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

その他

バーコード

各種コードをバーコードで表示させる方法を簡単に記しておきました。(Excelによる帳票サンプル付き)

no image
バーコード印刷(サンプル付き)

管理している品目にバーコードを付けてバーコードリーダで読み取らせたい場合もあるかと思います。 バーコードのフォントをインストールしますと、簡単に実現できます。 今回はCode39というバーコードを例に ...

続きを見る

完成したら

完成すると、フォームの表示だけにしたくなります。その際のAccessの設定は下記リンクに記載がありますので参照ください。ここでダウンロードするデータベースは編集できるように下記リンクのような処理は施しておりません。

・フォームオープン時のVBA記述
・Accessのオプション設定

バックアップ

私は経験したことがありませんが、データベースはたまに破損するようです。

こまめにバックアップを取って万が一に備えましょう。

データベースの分割

ここの記事を参考にされている方は小規模な組織での運用で品目点数や入出庫回数も少ないかもしれません。

しかし、時間を追うごとに蓄積されるデータが多くなり、重くなるかもしれません。そんな時はデータベースをテーブルとフォームなどに分割するといいかもしれません。方法は【データベースツール】タブから【Accessデータベース】を選びます。これでファイルが2つに分割されます。テーブルのファイルをファイルサーバ上に置いておき、フォーム等のファイルを利用者のローカルPCにコピーして使います。

ココに注意

テーブルのファイルの保存先を移動させるとアクセスできなくなります。

データベースの分割

デザインについて

旧式のAccessの形式(*.mdb)にて作成しております。従ってコマンドボタンがフラットになっています。

【ファイル】タブから【名前を付けて保存】にて*.accdb形式にて保存すれば、3Dのコマンドボタンをデザインすることができます。他にもデザイン的にかっこよくできるかと思います。

ダウンロード

拡張子.mdb形式にしましたので、Access2002~Access2019で開けると思います。データベースを開くとログイン画面がポップアップ表示されます。そのウィンドウで右クリックし、「閉じる」をクリックしてください。また「コンテンツの有効化」をクリックします。これで編集して使えるようになります。

コンテンツの有効化

Ver.1.61(2020年6月12日版)

ダウンロードはこちら

 

Ver.1.5(2020年5月31日版)

一部データが入っていますが、テスト用のデータは概ね削除してあります。データインポート用のExcelファイル同梱です。

ダウンロードはこちら

Ver.1.3(2020年5月8日版)

データなし版のAccessデータベース

ファイルはこちら(在庫管理システム(データなし).zip)

簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

仮データのうち、テーブル「メイン」「品目」「保管場所」「社員」「検索履歴」を空にしたものです。(「仕入先」は元々空です)
テーブル「単位」「入出庫」「バージョン履歴」も削除したい(作り変えたい)方はご自身で行ってください。

参考⇩

あわせて読みたい
no image
テーブルのオートナンバーをクリアする(Access)

注意 実行の前にデータベースのバックアップをお忘れなく テーブルの内容をまとめて削除するだけなら、Visual BASICエディタのイミディエイトウィンドウにて [crayon-5f2a3fc97c6 ...

続きを見る

仮データを含む版のAccessデータベース

ファイルはこちら(在庫管理システム(仮データ付).zip)

簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)

コードの付け方

会社では社員番号が「0」から始まる8桁の数値なので、それをそのまま用います。サンプルのデータベースでは「1」から始まる5桁の数値にしました。所属の項目がありますが、ない方が良い場合もあるでしょう。人事異動の度に書き換えていたら大変です。

品目コード(あるいは商品コード)は「20」~「29」で始まるコードで割り振ります。これはインストアマーキングと呼ばれるスーパーマーケットなどでの野菜などのパッケージ化されていない商品にコードを割り振るルールだそうです。組織や管理する品目の規模にも依りますが6桁前後あればこと足りるのではないでしょうか。

単位コードはサンプルのデータベースには「5」で始まる3桁の番号にしました。サンプルのデータベースではインボイスの単位を参照しました。

入出庫コードはサンプルのデータベースには「6」で始まる3桁の番号にしました。

保管場所コードはサンプルのデータベースには「7」で始まる3桁の番号にしました。

最後に

在庫管理システムのパッケージを購入するほどの規模ではない会社・組織にて、しかし在庫管理はしなくてはならない方向けです。市販のパッケージと比較して不足する機能は多々あります。

処理の削除機能と削除されたデータが在庫に計上されないような処理を入れました。どうでしょうか?入出庫コードの取消を使うようにした方がいいでしょうか?

改善・追加したい機能

可能な限りの改善改良は行ってみますので、お気軽にコメントに要望等をご記入ください。また、もっと容易な方法があるよ、というアドバイスもいただければ幸いです。Ver.2.0として下記のいくつかを取り入れます。

  • 指図番号とサイド番号のマスタを忘れていました
  • ローカルPCの画面解像度が異なるとフォームの見え方が変わります。それをなんとかしたい
  • 新規ユーザーの場合は管理者が仮パスワードを登録して本人に通知し、最初のログイン時に本パスワードに変更する方法に変えようかと思います
  • 棚卸し用データのエクスポートと集計結果をインポート
  • 閲覧・編集権限をより細かく設定したい
  • ログ(履歴)関連を増やしたい
  • 購買発注や営業・管理部門の経験がないため、そのあたりを勉強して追加できれば(しないかも)いいですね

ログイン画面のみのサンプルを作成しました。⇩

あわせて読みたい
簡易的にAccessデータベースで在庫管理システムを作成(サンプル付)
アクセス履歴付き ログイン画面を作る(Access)(サンプル付き)

はじめに 在庫管理システムを作るにあたって、複数社員で使用するにはログイン画面が必要であると思いつつ、今まで盛り込んできませんでした。 ログイン画面のみをテストで作りました。目指すはただ1点、 ・パス ...

続きを見る

-Access
-, , , , , , , , , , , , , , ,

© 2020 めいあんのIT格闘記

© 2020 めいあんのIT格闘記