電子書籍の厳選無料作品が豊富!

いつもお世話になっています。わかりにくい内容かと思いますがよろしくお願いします。
(1)入庫した情報を設備から適時まとまった形でcsvファイルをACCESSのテーブルにするため取り込んでいます。
日付,箱番号,製品名
20110303,A001,PPP
20110303,A001,PPP
20110303,A001,QQQ
20110303,A001,GGG
20110303,A002,PPP
20110304,A001,PPP のようなcsvです
条件として箱は1日1回しか使わない事いません。箱の中に色々な製品が入っていると思ってください。

(2)出庫するときは、箱番号と出庫日しか情報がない場合

出庫した実績をテーブルに反映させ
日付,箱番号,製品名,出荷日
20110303,A001,PPP,20110304

の様な感じにしてデータベースとしたいのですが、日付も箱番号も重複するためうまく考えられません

わかりにくい質問とは思いますがよろしくお願いします。 

A 回答 (6件)

> 条件として箱は1日1回しか使わない事いません。



日本語になってませんが、「箱は1日1回しか使わない」つまり
「日付(入庫日)と箱番号の組み合わせでは重複することはない」
ということでいいですか。

Accessで用意するテーブルは、

T_入庫
入庫ID オートナンバー型 主キー
日付
箱番号
製品名

T_出庫
日付   主キー
箱番号  主キー
出庫日

T_入庫には、csvからデータを取り込みます。

その後、下記の追加クエリを実行して、T_出荷に 重複のない 入庫日、箱番号 データを追加します。

INSERT INTO T_出庫 ( 日付, 箱番号 )
SELECT DISTINCT 日付, 箱番号 FROM T_入庫;

既に T_出庫 にデータがある場合、追加できないデータがあるとのメッセージが出ますが、OKを押して実行します。VBAで自動実行する場合は、CurrentDB.Execute で実行するとメッセージを出さずに実行できます。

> (2)出庫するときは、箱番号と出庫日しか情報がない場合

出庫時の入力用フォームは帳票フォームとして、レコードソースを
SELECT 日付, 箱番号, 出庫日 FROM T_出庫 WHERE 出庫日 Is Null;
とします。
これでまだ出庫されていない箱の一覧が表示されます。
追加の許可、削除の許可は いいえ にしておきます。

フォームヘッダーに非連結のテキストボックスを2つ配置します。
名前は、txt箱番号、txt出庫日、cmd入力, txt出庫日の既定値は、
=Format(Date(),"yyyymmdd")
としておきます。

txt箱番号の更新後処理で、

With Me.Recordset
.FindFirst "箱番号='" & Me.txt箱番号 & "'"
If .NoMatch Then
MsgBox "該当する箱番号は有りません。"
Else
.Edit
!出庫日 = Me.txt出庫日
.Update
End If
End With

txt箱番号 に箱番号を入力してEnterキーで該当する箱番号レコードに出庫日が入力されます。


> 出庫した実績をテーブルに反映させ
> 日付,箱番号,製品名,出荷日
> 20110303,A001,PPP,20110304

この結果が欲しい場合は、下記のクエリで得られます。

SELECT T_入庫.*, T_出庫.出庫日
FROM T_入庫 LEFT JOIN T_出庫
ON T_入庫.日付 = T_出庫.日付 AND T_入庫.箱番号 = T_出庫.箱番号


これは一例です。例えば、フォームのRecordsetを使って更新してますが、更新クエリで更新してもいいし、帳票フォームにしてますが、非連結メインフォームとサブフォームの組み合わせにしてもいいです。お好みで使いやすいように工夫してください。

この回答への補足

hatena1989さん ありがとうございます。
日本語間違いですみません。
>> 条件として箱は1日1回しか使わない事いません。

>日本語になってませんが、「箱は1日1回しか使わない」つまり
>「日付(入庫日)と箱番号の組み合わせでは重複することはない」
>ということでいいですか。

では、なく 例で書いて見ましたように
箱は1日1回ですが、取り出したCSVには同一日付と箱が重複して出てきますので
一意ではありません。

すみませんがよろしくお願いします。

補足日時:2011/03/05 10:47
    • good
    • 0
この回答へのお礼

hatena1989さん
ありがとうございます。
とても助かりました。 

また、今後ともよろしくお願いいたします。

お礼日時:2011/03/07 03:58

> あと、可能でしたら出庫入力のフォームを書き換え出来ないように出来れば


> ありがたいのですが・

各テキストボックスの「編集ロック」を「はい」にすればどうでしょうか。
    • good
    • 0

下記のような業務の流れだと解釈しましたが、あってますか。



箱とは、バーコードのついたコンテナ、パレットのようなもので、入庫したときは、
この箱に複数の商品が積み込まれている。

出庫時は、箱単位でトラックなどに移し替えられて、出荷される。

空いた箱は、入庫側に戻されて、再び、そこに入庫された新たな商品が積み込まれる。
そのデータが、CSVで送られてくる。


この解釈のもとの回答ですので、もし違っている部分があったら、ご指摘ください。

この回答への補足

hatena1989さん  ありがとうございます。
おっしゃる通りです。希望通りに答えにたどり着くことが、やっと出来ました。
フォームで躓いて、初めに作成したフォームでは、なぜか入力が反映されず
再度同じやり方で行ってみると入力が受け付けられてデータ反映されました。

あと、可能でしたら出庫入力のフォームを書き換え出来ないように出来れば
ありがたいのですが・・スナップにすると入力が出来ないので
サブフォームにして対応すれば、よいのでしょうか?
よろしくお願いします。

補足日時:2011/03/05 16:38
    • good
    • 0

> 箱は1日1回ですが、取り出したCSVには同一日付と箱が重複して出てきますので


> 一意ではありません。

箱を一日に複数回利用することはないのですね。

ならば、CSV(T_入庫)では重複しますが、出庫側からみた場合(T_出庫)、日付と箱番号の組み合わせで箱を一意に特定できますね。

ですので、ANo.1 のテーブル設計で問題ないと思いますが、どの辺りで躓いてますでしょうか。

提示されている情報からのみ判断したテーブル設計を提案してますが、実運用ではいろいな例外処理(返品とか積み替えとか・・・)が入るのでこのような単純なものでは対応しきれない場合もあるでしょうが、基本としてはこんな感じになるはずです。
    • good
    • 0

>日付も箱番号も重複するためうまく考えられません


同じ箱が一日に何ども出たり入ったりする と云うことですかね。
良く見受けるパターンとして
1 商品テーブル(在庫?)
2 出荷先テーブル(取引先?)
3 出荷記録テーブル
を準備してリレーションを使って在庫管理する方法があります。
この場合 出荷の数量は 必ず 1 である
戻し(返品)の記録もデータに入れる
この2つのアドバイスで以下かでしょうか?
入出荷記録テーブル
入出荷日  入出荷時刻 箱番号 出荷数
20110304 12:30:00  A001   1
20110304 14:50:00  A001   ー1
・・・・

記録をデータ化してみては如何でしょうか?
箱が出入りするたびにデータが入る運用が不可欠ですのでバーコードリーダーなど
準備すると良いと思います。
その際に 出荷の際は 出荷数量が 1 戻しの場合は -1と入る様なフォームの
画面を準備します。

出荷可能な箱番号と出荷済みの箱番号を取り出す必要があると思いますが
出荷済みの箱番号は 出荷数の合計が 必ず 1 
入荷済み 或いは 戻し後の箱番号は 出荷数の合計が 必ず 0
になりますので
ピボットテーブルを使うと一度に集計が出来るはずです。

CSVデータを取り込み後、箱番号で不一致クエリを実行させて入荷のデータにあって
入出荷記録のテーブルにない箱番号を抽出して追加クエリで
入出荷記録のテーブルにデータが追加されるマクロを準備しておくと
一度のボタン操作で作業がすむでしょう。
その他
出荷先テーブル 入出荷区分テーブル など準備して
それぞれをリレーションでつなぎ合わせたクエリで表示すると

入出荷日  入出荷時刻 入出荷先 箱番号 製品名 出荷数 区分
20110304 10:30:00       A001  PPP 0   新規
20110304 12:30:00  Aさん  A001  PPP 1   出荷
20110304 14:50:00  Bさん  A001  PPP ー1   返品
・・・

となる様にすればもっと便利になると思います。
テーブル、クエリの準備は経験や実際の実務に対する知識が必要ですので十分に検討して
実験を繰り返して最終決定を行うと良いです。
    • good
    • 0

”箱”をメインテーブルとして


箱ID(自動)
箱コード番号
箱の”入荷日”と”出荷日”・・・? 箱単位で 出荷するのですか?
 箱の中身の”製品名”での 対応は・・・?

>日付も箱番号も重複するためうまく考えられません
 入荷日 と 出荷日は 別のフィールドを持つべきです。
・・・・・ Exell 的な 表を 思い浮かべてられると 躓きます。
 
追加で・・・ 製品テーブルはもちろん造らないとなりません。
製品こちらの 管理は?  等々でテーブルを考えないと・・・・

この回答への補足

007MUKADEさん
ありがとうございます。

箱単位で出荷します。

>入荷日 と 出荷日は 別のフィールドを持つべきです。
別フィールドということは別のテーブルってことでしょうか?

製品テーブルのことは、特に考えていません。

入荷日のデータは設備からやってくる 
  その中には一意のデータが存在しない
出荷は 箱 単位で出している
箱には多数の製品が混入されている

どうぞよろしくお願いします。

補足日時:2011/03/05 10:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!