■メニュー
1.売上入力の作成(9回目)
===================================================================
こんにちは、ティウェアの高橋です。
売上入力の作成の9回目です。
では、はじめましょう。
------------------------------------------------------------------
No.119のメルマガを見ながら確認してください。
1.◎ポイント解説 2 について
伝票番号のNullチェックを行います。
伝票番号のテキスト欄が、Nullまたは空白であれば、新規登録をしていると
判断してコントロールマスタの売上伝票番号を+1カウントアップ
して伝票番号へ送っています。
それが、[伝票番号] = コントロールマスタ_伝票番号()となります。
Nullまたは空白でなければ、伝票番号が入っているとみなします。
Format$(Forms(cFormName_M) ![伝票番号], "00000000")で伝票番号に
送ります。
では、コントロールマスタ_伝票番号()を解説します。
FunctionでAs Longを指定します。
Function コントロールマスタ_伝票番号() As Long
cn.Errors.Clear
On Error GoTo コントロールマスタ_伝票番号_err
cn.BeginTrans
Set rs1 = New ADODB.Recordset
rs1.Open "コントロールマスタ", cn, adOpenDynamic, adLockOptimistic
If rs1.BOF Then
MsgBox "コントロールマスタが登録されていません。処理を終了して下さい。" _
, vbCritical, "警告"
Exit Function
Else
rs1.Fields(1) = rs1.Fields(1) + 1
LngNo = rs1.Fields(1)
rs1.Update
End If
cn.CommitTrans
rs1.Close
Set rs1 = Nothing
コントロールマスタ_伝票番号 = LngNo
Exit Function
コントロールマスタ_伝票番号_err:
cn.RollbackTrans
MsgBox "伝票作成が出来ません。少し待ってからやり直してください。" _
, vbExclamation, "注意"
End Function
コントロールマスタ_伝票番号()はLong型ですから[伝票番号]に送ります。
rs1.Fields(1)は売上伝票番号となります。
rs1.Fieldsは、ゼロ(0)から始まります。
コントロールコードがrs1.Fields(0)となります。
rs1.Fields(1)を+1してUpdateして完了です。
--------------------------------------------------------------------
2.◎ポイント解説 3 について
伝票ヘッダー読み込みをします。
Forms(cFormName_M)![伝票区分]には、1(売上伝票)が入ります。
直接、1と入れていても構いません。
Forms(cFormName_M)![伝票番号]は、新規伝票であれば先程カウントアップ
した番号が入っています。
変更または削除なら、その売上伝票番号が入っています。
--------------------------------------------------------------------
3.◎ポイント解説 4 について
sp_伝票ヘッダー_getのストアドは、下記の通りです。
ALTER Procedure [sp_伝票ヘッダー_get]
(
@伝票区分 smallint,
@伝票番号 int
)
As
select * from 伝票ヘッダー
where (伝票区分 = @伝票区分) and (伝票番号 = @伝票番号)
return
これは、メンテナンスで何度も同じパターンを説明しましたので省略します。
--------------------------------------------------------------------
3.◎ポイント解説 5 について
ここの処理は、新規登録の処理となります。
伝票ヘッダー(親データ)を読んだがデータがない、新規登録となります。
syorimodeがゼロ(0)場合、新規登録です。
売上伝票を連続して入力する場合、日付の近い伝票を何枚も入力します。
そうすると登録ボタンを押したあとに日付を初期化(クリア)するのは
入力スピードを落す原因となります。
そこで、新規登録のときに限り、前回入力された日付を覚えておき
それを日付のテキストに送る処理を施します。
それが、tDate = Dateとなりそれぞれの項目に送っています。
Forms(cFormName_M)![伝票年] = Year(tDate)
Forms(cFormName_M)![伝票月] = Month(tDate)
Forms(cFormName_M)![伝票日] = Day(tDate)
そして伝票明細を画面に送ります。
明細_表から画面への処理は、下記のとおりです。
Function 明細_表から画面へ(gyosu As Integer) As Boolean
For gyo = Int(1) To Int(5)
Forms(cFormName_M).Controls("伝票明細行_" & CStr(gyo)) = h_行(gyosu)
If IsNull(h_商品コード(gyosu)) Or _
Trim(h_商品コード(gyosu)) & "" = "" Or _
h_商品コード(gyosu) = 0 Then
Forms(cFormName_M).Controls("商品コード_" & CStr(gyo)) = ""
Else
Forms(cFormName_M).Controls("商品コード_" & CStr(gyo)) = _
Format$(h_商品コード(gyosu), "00000000")
End If
Forms(cFormName_M).Controls("商品名_" & CStr(gyo)) = h_商品名(gyosu)
Forms(cFormName_M).Controls("規格_" & CStr(gyo)) = h_規格(gyosu)
Forms(cFormName_M).Controls("区分名_" & CStr(gyo)) = h_区分名(gyosu)
Forms(cFormName_M).Controls("数量_" & CStr(gyo)) = h_数量(gyosu)
Forms(cFormName_M).Controls("売上単価_" & CStr(gyo)) = h_売上単価(gyosu)
Forms(cFormName_M).Controls("仕入単価_" & CStr(gyo)) = h_仕入単価(gyosu)
Forms(cFormName_M).Controls("金額_" & CStr(gyo)) = h_金額(gyosu)
Forms(cFormName_M).Controls("消費税名_" & CStr(gyo)) = h_消費税名(gyosu)
gyosu = Int(gyosu) + Int(1)
Next
End Function
オペレータが、入力しやすいように考えながら作りこみをして下さい。
直接、オペレータに聞きながら、ここはどのようにカーソルが動けばよいのかを
確かめながら作るのが一番よい方法です。
そうすれば、使い勝手のよいシステムが出来ます。
最終的に使うのは、オペレータの方々です。
それを忘れないようにシステムを作っていきましょう!
次回も売上入力です。
みなさん、よいお年をお迎えください。
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|