hatena の Microsoft Access 掲示板



[7250] 非連結のCBを利用してレコードを選択後の情報取得と計算について Name:Kiara MAIL Date:2017/08/01(火) 15:13 [ 返信 ]
初めての投稿になります。ACCESSに関しては初心者でありますので、至らない部分が多々見受けられるかも知れませんが、何卒、お力添え頂ければ幸いです。

【利用環境】
OS : Windows10
DB : ACCESS 2016

現在、受注と出荷を管理する仕組みをACCESSでシステム化しようと試行錯誤しております。

そんな中、出荷処理部分のユーザの要望として、
出荷の対象を選択する際に在庫数から注文数を引いて「0」ないしは「0に近くなるまで」担当者が目で見ながら決定して行きたいということと、場合によって、注文頂いている数量を減らして帳尻を合わせて出荷対象とし、残った数量は、注残として残したいという大きく2つの要望が御座いました。

レコード選択を考える際にhatena様のサイトにあった「非連結のチェックボックスでレコードを選択する」という投稿を発見し、参考にさせて頂きながら作っているのですが、ユーザの要望に答えるべく、チェックボックスにチェックが入ったら、そのレコードの数量を選択数量に入れ込む。数量に変更がなければ注残は0。もし選択数量を変更されたら、その数量を出荷対象とする。残り数量は注残にセットとしたいです。
この処理をしている間は、フッター側のチェック合計と在庫対比という部分を動的に連動させたいのですが、そもそもこの様な仕組みは作ることがACCESSで出来るものでしょうか?

小職の知識では、帳票フォームの詳細でレコード毎にコントロールできるのか否かが理解出来ていない為、判断がついてません。

参考に画面イメージを添付させて頂きます。

以上、お手数をお掛け致しますが、何かアドバイス頂けたら幸いです。
宜しくお願い致します。


[7251] RE:非連結のCBを利用してレコードを選択後の情報取得と計算につ Name:hatena Date:2017/08/01(火) 17:32
現状どのようなテーブルがあるのか。
テーブル名、フィールド名、主キーフィールド などの情報が必要ですね。
少なくとも、
商品マスター
受注数を管理するテーブル
出荷数を管理するテーブル
在庫を管理するテーブル
というようなテーブルが必要になってくるはずです。
他にも、店舗マスター、問屋マスターもあった方がいいですね。


また、図では、チェックボックスで選択すると数量がそのまま選択数量になってますが、かならず全数なんですか。だとしたら、注残は常に0ですよね。
そうではないなら、選択数量はユーザーが任意の数量を入力できるようにするのでしょうか。だとしたらチェックボックスの意味はどうなるのでしょう。
その辺の意味も具体的に説明ください。

[7254] RE:非連結のCBを利用してレコードを選択後の情報取得と計算につ Name:Kiara MAIL Date:2017/08/02(水) 10:19
hatena様、早速のアクションありがとう御座いました。

確かに情報が足りなすぎて判断できないですよね。申し訳御座いません。小職も不慣れなこともあり何をどう聞いて良いのかもわからないままご連絡をしてしまったので、改めて情報を整理して行きたいと思います。

まず、今回の開発の発端として、社内の受注と出荷業務を拝見させて頂いた際に、各商品の管理を商品分のEXCELに分けて幾つかのディレクトリに格納して運用されてました。

ディレクトリ構造もEXCELの中も物によって構成がバラバラであり、情報を登録する際も都度ディレクトリの中にある対象のEXCELを見つけて登録して行く形で、効率も悪く、登録のミスも発生しやすい状況でした。

この状況を打開する為に、まずは安価で展開できるDBとしてACCESSを活用して効率化を図れないかというのが始まりです。

受注と出荷を管理する仕組みとしてシステム化するにあたり、ご指摘の御座いましたTBLの構成を考え以下の5つのTBを基盤にして開発を進めております。

・受注管理TBL・・・受注情報 レコードの管理コードとJANコードを主なキーとして受注数・出荷のワークフロー用のFLG等を管理
・商品管理TBL・・・商品情報 JANコードをキーとして、商品名・タイプ・品番・カラー等を管理しております。
・在庫管理TBL・・・在庫情報 JANコードをキーとして、各商品の在庫数を管理しております。
・問屋マスタTBL・・・問屋情報 問屋IDを作って問屋様を管理
・小売店マスタTBL ・・・小売店情報 小売店IDを作って小売店様を管理

といった形で構成されております。

ひととおり機能の要件を纏めて受注情報を登録する部分は完成し、出荷についてもいくつかの観点でこなせる仕組みは作ったのですが、実際に利用して貰ったところ、今回ご相談させて頂いた部分が浮上して来たというところです。


要件定義が甘かったところは否めないのですが、出荷作業の現在の実体として、受注情報が登録されたEXCELシートに数量合計と在庫数が式でセットされており、そのシートをコピーして、入荷されて在庫に登録された商品を見て溜まっている受注のどこまで出せるか?
列・行を削って行き、数量も手で調整しながら出荷リストを作成しておりました。手で数量を変更したものについては、後に原本と見比べて未だ出せてない分を注残としてデータは残すという流れです。

この部分を踏襲した機能にして欲しいという事で現在の機能を作成しております。

昨日のご質問で、帳票フォームの詳細部分は細かいコントロールが出来ないと認識している旨、ご連絡しておりましたが、進めて行くないかで各部品のコントロールソースを活用すれば対応できることはわかりました。

ただ、やはり数量を変更させる部分のコントロールだけ、どうしたものかと頭を悩ませている次第です。

hatena様のご指摘にありましたとおり、図の画面のもう少し踏み込んだ仕様の詳細として、考えている内容をご説明すると、、、

ヘッダー部分に出ているのは、JANコードを元に引っ張ってきた商品の情報となり、その商品に対しての受注データが詳細の欄に並んで行きます。現行の出荷の対応で説明したとおり、レコードを選択して在庫数と見比べて出せる出せないを判断しております。その為、チェックボックスはそのレコードを選択したという意味となり通常の注残は0で問題ありません。注残の項目を作った意図としては、出すレコードは決まったが残りは注文として残しておくというところです。そう行った意味で、チェックボックスにチェックをいれたところで選択数量の欄に数量をセットし、その数量が変更されたら、元の数量と比較して残った分を新規で再登録しようかと思ってました。

この画面上で何かしらの表現が出来れば、良いのですが、今のところ良いアイディアが出てません。

こう言った場合、何か良い方法やアドバイスは御座いますでしょうか?


【補足】
現在のユーザ達は、今までのEXCELが一番良い方法だと感じているところが今でも強く、出来るだけ運用を変えたく無さそうというところがありEXCELに負けない操作性をACCESSで作ってあげないと納得してくれなそうなんです。ショット・ショットで考えたらEXCELの方が長けている部分は多くあることも進めて来てわかりましたが、ともかくACCESSで負けたくないといったところです。お力をお貸し下さい。宜しくお願い致します。

[7258] RE:非連結のCBを利用してレコードを選択後の情報取得と計算 Name:hatena Date:2017/08/02(水) 17:37
> 注残の項目を作った意図としては、出すレコードは決まったが残りは注文として残しておくというところです。そう行った意味で、チェックボックスにチェックをいれたところで選択数量の欄に数量をセットし、その数量が変更されたら、元の数量と比較して残った分を新規で再登録しようかと思ってました。

自分なり解釈してみました。

基本は選択したものは全数出荷だが、、場合によって、あるいは後から、ユーザーが数量を変更する場合がある。その場合は、差を「注残」として表示したい。

ということなら、ユーザーが入力することもあるので、テーブルに「数量」とは別に「選択数量」というフィールドは必須ですね。でないと、その値を残しておくことができません。

その場合は、下記のような設計が考えられます。

選択チェックボックスのプロパティを下記にせっていします。
コントロールソース =Nz([選択数量])>0
タブストップ いいえ


選択数量テキストボックスのコントロールソースは
選択数量

注残テキストボックスのコントロールソースは
=[数量]-[選択数量]

選択チェックボックスの上に重ねてコマンドボタンを配置して、「透明」を「はい」にします。
コマンドボタンのクリック時イベントは下記のVBAを設定します。

If 選択数量 > 0 Then
  Me.選択数量 = 0
Else
  Me.選択数量 = Me.数量
End If


フォームフッターの「チェック合計」テキストボックスのコントロールソースは、
=Sum([選択数量])
とします。

ここまでできたら、後は、なんとかなりますよね。

[7259] RE:非連結のCBを利用してレコードを選択後の情報取得と計算 Name:Kiara MAIL Date:2017/08/02(水) 19:20
hatena様、
お忙しい中、ご確認頂き誠に感謝致します。
また、小職の纏まりのない嘆きの中から内容を汲み取って頂き、本当にありがとう御座います。

hatena様のご反応から判断して、ともかく何かしらの手法はあると判断し少し安心してます。

ただ、ご指示のとおり設定してみようと試みたのですが、ちょっとうまく行きませんでした。スミマセン。


現在の状況と仕組みの補足として


■選択チェックボックスのプロパティ(chk1)
=InStr([txtChkList] & ",","," & [管理NO] & ",")>0

のまま利用してます。管理IDを取得して、エントリー時に、その管理IDに対して出荷FLGをたてるのに活用したいと思ってました。
ちなみに =Nz([選択数量])>0 にしたところ「レ」チェックが表示されませんでした。

現在、設定されているその他の設定は、、、

■選択数量テキストボックスのコントロールソース
=IIf([chk1]=True,[数量],0)

ここは、選択数量が選べませんでした。そもそものデータソースがヘッダー部分で表示している部分をキーとしたクエリーになっていて、クエリーをそのまま表示しているのは[管理No][受付日][店名][店舗名][問屋][数量]までです。[選択数量][注残]は後付けです。

■注残のテキストボックスのコントロールソース
=IIf([chk1]=True,[選択数量]-[数量],0)

■合計のテキストボックスのコントロールソース
=Sum([数量])

■在庫数のテキストボックスのコントロールソース
[在庫数]  
これもクエリでJANコードをキーに在庫マスタから引っ張った数量です。

■チェック合計のテキストボックスは非連結にしてあり下記のロジックに組み込みました。

---------------------------------------------------------------------
Private Sub cmdChk_Click()
If IsNull(Me.管理No) Then Exit Sub
If Me.chk1 Then
'チェックなしの処理
Me.txtChkList = Replace(Me.txtChkList & ",", "," & Me.管理No & ",", ",")
Me.txtChkList = Left(Me.txtChkList, Len(txtChkList) - 1)
Me.選択合計 = Me.選択合計 - Me.数量.Value
Else
'チェックありの処理
Me.txtChkList = Me.txtChkList & "," & Me.管理No
Me.選択合計 = Me.選択合計 + Me.選択数量.Value
End If
End Sub
---------------------------------------------------------------------
Private Sub cmdSelectAll_Click() 'すべて選択ボタン
Dim stFilter As String
With Me.RecordsetClone
If Not .BOF Then .MoveFirst
Do Until .EOF
stFilter = stFilter & "," & !管理No
chk_total = chk_total + !数量
.MoveNext
Loop
End With
Me.txtChkList = stFilter
Me.選択合計 = chk_total
chk_total = 0
End Sub
---------------------------------------------------------------------
Private Sub cmdSelectClear_Click() '選択解除ボタン
Me.txtChkList = ""
Me.選択合計 = 0
End Sub
---------------------------------------------------------------------
■在庫数のテキストボックスのコントロールソース
=[在庫数]-[選択合計]

としてます。ここまで数量変更以外のところは思い通りに動きました。

hatena様にご認識していただいたとおり、ユーザが数量を変更することを想定しております。変更する箇所は、数量の項目。
いろいろ触っていてわかったのですが、数量を変更するとそのまま実レコードの数量も変わるので、そこは生かして、、、

-------------------------------------------------------------------
Private Sub 数量_Click()

'編集前の数量を取得
b_suryo = Me.数量
'編集された際にレコードを判別する為の管理Noを取得
henko_kanri_no = Me.管理No

End Sub
-------------------------------------------------------------------
Private Sub 数量_AfterUpdate()

'編集前の数量とフォーカスが無くなった際の数量を引いてアフター用の変数に格納 数量変更がなければ0 変更があれば数字が変わる。
a_suryo = b_suryo - Me.数量

End Sub
-------------------------------------------------------------------
※b_suryo(before数量),a_suryo(after数量),henko_kanri_no は外部変数で作ってみました。


このa_suryoを活用しようかと試みておりました。このまま出来るのか落とし穴があるかわかってません(仕掛中)

やはり開発に関して初めてなこともあり、先の先まで見えていないので、どのやり方が良いのかという不安が先に来てしまい甘えてしまって
いる次第です。

hatena様のご指示のとおり進めたいのですが、認識として、クエリーの情報や各項目の設定状況まではお伝え出来ていなかったので、この状況を踏まえて、改めてアドバイスがあればご教示頂けたら幸いです。

以上、多くの方のフォローをされていてお忙しい中、大変恐縮ですが、宜しくお願い致します。

P.S. 我流で一人で戦っている為、ご質問させて頂いて、理解し答えを導き出そうとして下さるだけでも、本当に心強く思ってます。今後ともお力添え頂けたら幸いです。

[7260] RE:非連結のCBを利用してレコードを選択後の情報取得と計算 Name:hatena Date:2017/08/03(木) 00:37
ざっと読んだ感じですが、やろうとしていることの整理ができていないように思います。

本質的に異なることをごっちゃにしている感じです。

取りあえず下記の2点

「非連結のチェックボックスでレコードを選択する」を元にチェックボックスを作成していますが、これはあくまで一時的な選択状態を表現するものですので、今回の要件には合わないと思います。

選択数量をユーザーが変更することがあるとのことなので、元のテーブルに「選択数量」のフィールドは必須です。

> このa_suryoを活用しようかと試みておりました。このまま出来るのか落とし穴があるかわかってません(仕掛中)

変数に格納して、どうのこうのするものではないと思います。

テーブルにどのように格納するかから考えるべきです。

例えば、在庫管理の場合、
商品マスターに在庫数を格納しておいて、出庫数をマイナス、入庫数をプラスというように、移動があるたびに更新するという方法はデータベースとしては間違いです。

入出庫履歴テーブルを作成して、入庫、出庫が発生するたびに、日付、入出庫数、商品コードを格納していきます。

現時点での在庫は、機種在庫と入庫数、出庫数の集計から計算するようにします。

とりあえずテーブルに格納する。それから、それをどのように活用するかを考える、という方針でいくとシンプルになります。

[7261] RE:非連結のCBを利用してレコードを選択後の情報取得と計算 Name:Kiara MAIL Date:2017/08/03(木) 09:13
hatena様、
お世話になります。ご回答ありがとう御座いました。

やはり根本の部分に問題がありそうですね。ありがとう御座います。

修正するにあたり色々、整理する必要がありそうなので、取り急ぎお礼までにご連絡をさせて頂きました。

また、改めてご連絡をさせて頂きます。

宜しくお願い致します。

[7267] 【解決】非連結のCBを利用してレコードを選択後の情報取得と計算 Name:Kiara MAIL Date:2017/08/04(金) 18:36
hatena様、

お世話になります。
ご教示頂いた内容で改めて整理して問題なく要件をこなすことが出来ました。

ここまでの作り方は、変数を利用して、変更がある度にUPDATEするような流れでした。今回、DBでの開発の基本を教わり勉強になりました。

以後に、繋げて行きたいと思います。

本当にありがとう御座いました!!


  



無料レンタル掲示板・日記・ブログ Progoo