Access帳票フォームの明細で複数コンボボックスの連動絞込み

開発環境:win8.1 + access2016

Accessの帳票フォームの明細にコンボボックスを複数設置したけど

・商品区分コンボ
・商品コンボ

と明細にあって商品区分に絞り込んで商品コンボに表示させる方法です。
連動絞り込みするのに苦労したので備忘録として残したいと思います。

商品区分コンボ

1.帳票フォームを作成します。

2. 商品区分コンボのプロパティ

▼値集合ソース

SELECT m_item_div.item_div, m_item_div.item_div_name FROM m_item_div WHERE (((m_item_div.del_flag)=No)); 

▼入力規則
[item_div] Is Not Null

▼エラーメッセージ
商品区分を選択してください。

商品コンボ

1. 商品コンボのプロパティ

▼値集合ソース
複雑なのでクエリーを使用しました。

SELECT
  Q_取引先別商品データ.item_id
  , Q_取引先別商品データ.item_name
  , Q_取引先別商品データ.unit_pri
  , Q_取引先別商品データ.unit_name
  , Q_取引先別商品データ.unit_qty
  , Q_取引先別商品データ.unit_name2 
FROM
  Q_取引先別商品データ 
WHERE
  ( 
    ( 
      (Q_取引先別商品データ.item_div) = [Forms] ! [F_D伝票入力] ! [sub明細].[Form] ! [cbo商品区分]
    )
  );

▼書式 列幅

▼商品コンボ更新後イベント

'***************************
' 商品 入力後
'***************************
Private Sub cbo商品_AfterUpdate()
Dim objRs As Recordset
Dim strSql As String

On Error GoTo Error

    Me.txt商品名.Value = Me.cbo商品.Column(1)
    Me.txt単価.Value = Me.cbo商品.Column(2)
    Me.txt単価単位名.Value = Me.cbo商品.Column(3)
    Me.txt単位数.Value = Me.cbo商品.Column(4)
    Me.txt数量単位.Value = Me.cbo商品.Column(5)
    
    Me.txt数量.Value = Me.txt単位数.Value
    
    ' 金額計算
    Call subCalcPri
    
    Me.txt単位ID.Value = funGetUnitId(Me.cbo商品.Value)
    
Exit Sub
Error:
    MsgBox "エラーが発生しました。エラー内容:" & ERR.Description & Chr$(10), vbCritical, C_MSG_TITLE
End Sub

subCalcPriでは、単位当たりの単価を取得するような計算処理を入れています。
単位が100g 単価が100円の時
150gと入力すると150円と計算します。
funGetUnitIdは、商品IDより単位IDを取得することをしています。

まとめ

・条件文に商品区分を入れます。
・商品コンボの連結列は1=商品ID
 画面に商品IDを表示していますが、本来はIDは不要で名称セットしたかったのですが
 どうしても表示を名称にすると絞り込みが上手くいかないため、商品IDを表示するようにしました。
・ここでは、選択した商品コンボに紐づく単価、単位を取得して横にセットしています。

赤背景は表示項目、黄色背景が入力項目です。
良くスーパー等に行ったとき、100g98円の肉を620g購入というのがあるけど
その時の金額計算をイメージすると良いと思います。
この連動が難しくて本当に苦労しました。
帳票フォームの全ての行の商品区分が一律同じのになったりと苦労しました。

コメント

タイトルとURLをコピーしました