List 6-126 Business.SlipコンポーネントのAddSlipDetailメソッド
1: Public Function AddSlipDetail(ByVal SlipID As Variant, _
ByVal ProductID As Variant, _
ByVal NUMBER As Variant, _
ByVal UNITPRICE As Variant, _
ByVal PRICE As Variant, _
ByVal MEMO As Variant) As Long
2: ' 指定した伝票に明細を加える
3: ' 【引数】
4: ' SlipID = 明細を加えたい伝票の伝票番号
5: ' ProductID = 明細の対象となる製品の製品番号
6: ' NUMBER = 数量
7: ' UNITPRICE = 製品単価
8: ' PRICE = 製品価格
9: ' MEMO = 摘要
10: ' 【戻り値】
11: ' 追加した明細を示すレコードID(IDフィールドに設定された値)
12: Dim objContext As ObjectContext
13: Dim objDataSlip As DataObj.Slip, objDataSlipDetail As DataObj.SlipDetail
14: Dim objDataProduct As DataObj.Product
15: Dim old_CUSTOMERID As Variant, old_SUBTOTAL As Variant, old_TAX As Variant
16: Dim old_TOTAL As Variant, old_MADEDATE As Variant, old_MADEUSER As Variant
17: Dim old_LASTUSER As Variant, old_LASTDATE As Variant
18: Dim SUBTOTAL As Currency, TAX As Currency, TOTAL As Currency
19: Dim p_PRODUCTNAME As Variant, p_YOMIGANA As Variant, p_PRICE As Variant
20: Dim p_STOCK As Variant, p_MEMO As Variant
21: Dim p_BACKORDER As Variant, p_MADEUSER As Variant, p_MADEDATE As Variant
22: Dim p_LASTUSER As Variant, p_LASTDATE As Variant
23:
24: ' オブジェクトコンテキストの確認
25: Set objContext = GetObjectContext()
26:
27: ' エラーハンドラの設定
28: On Error GoTo ErrHandle
29:
30: ' 製品の存在を確認
31: ' DataObj.Productコンポーネントの実体化
32: Set objDataProduct = CreateObject("DataObj.Product")
33: If objDataProduct.IsDeleted(ProductID) <> ID_Exists Then
34: ' 製品がない
35: Err.Raise Errorcode.Err_PRODUCTID, App.Title, _
"指定された製品は存在しません"
36: End If
37:
38: ' 価格がNULLであった場合には製品情報テーブルから取得した値を使うことにする
39: If IsNull(UNITPRICE) And IsNull(PRICE) Then
40: ' 製品情報を取得
41: objDataProduct.GetRecord ProductID, p_PRODUCTNAME, p_YOMIGANA, p_PRICE, _
p_STOCK, p_MEMO, p_BACKORDER, p_MADEUSER, p_MADEDATE, _
p_LASTUSER, p_LASTDATE
42: UNITPRICE = p_PRICE
43: PRICE = UNITPRICE * NUMBER
44: End If
45:
46: ' DataObj.Slipコンポーネントの実体化
47: Set objDataSlip = CreateObject("DataObj.Slip")
48:
49: ' 削除されていないことを確認
50: If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
51: Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
"指定された伝票番号を持つ伝票が見つかりません"
52: End If
53:
54: ' 伝票の現在の状態が承認待ち以上であれば編集は不可
55: If objDataSlip.Get_SlipStatus(SlipID) >= RequestingConsent Then
56: Err.Raise ERR_CANTUPDATE, App.Title, _
"承認待ち以上まで進んでいるため変更できません"
57: End If
58:
59: ' 伝票の現在の状態を確認
60: objDataSlip.GetRecord_Slip SlipID, old_CUSTOMERID, _
old_SUBTOTAL, old_TAX, old_TOTAL, _
old_MADEDATE, old_MADEUSER, _
old_LASTDATE, old_LASTUSER
61:
62: ' 変更する権限があるかどうかをチェック
63: If Not objContext.IsSecurityEnabled() Then
64: ' セキュリティ設定が無効
65: Err.Raise ERR_NOSECURE, App.Title, "セキュリティ機構が無効です"
66: End If
67:
68: ' 作成者と呼び出し者が一致するか
69: If objContext.Security.GetOriginalCallerName() <> old_MADEUSER Then
70: ' 一致しない
71: ' SalesManagerロール,SalesAdminロール,AllAdminロールに属するのであれば,
72: ' 一致しなくてもよいものとする
73: If Not (objContext.IsCallerInRole("SalesManager") Or _
objContext.IsCallerInRole("SalesAdmin") Or _
objContext.IsCallerInRole("AllAdmin")) Then
74: ' SalesManagerロール,SalesAdminロール,AllAdminロールに属さない
75: Err.Raise ERR_NOSECURE, App.Title, _
"他人が作成した伝票を更新することはできません"
76: End If
77: End If
78:
79: ' 明細を追加する
80: ' DataObj.SlipDetailコンポーネントの実体化
81: Set objDataSlipDetail = CreateObject("DataObj.SlipDetail")
82: ' 明細の追加
83: AddSlipDetail = objDataSlipDetail.AddRecord( _
ProductID, NUMBER, UNITPRICE, PRICE, MEMO, SlipID)
84: ' 伝票の合計の再計算
85: SUBTOTAL = objDataSlipDetail.GetSubTotal(SlipID)
86: TAX = SUBTOTAL * 0.05
87: TOTAL = SUBTOTAL + TAX
88: objDataSlip.SetTotal SlipID, SUBTOTAL, TAX, TOTAL
89:
90: ' コンポーネントの解放
91: Set objDataSlipDetail = Nothing
92: Set objDataSlip = Nothing
93: Set objDataProduct = Nothing
94:
95: ' トランザクションをコミット
96: objContext.SetComplete
97:
98: ' オブジェクトコンテキストの解放
99: Set objContext = Nothing
100:
101: Exit Function
102:
103: ErrHandle:
104: ' エラーハンドラ
105: objContext.SetAbort
106: Set objContext = Nothing
107: Set objDataProduct = Nothing
108: Set objDataSlip = Nothing
109: Set objDataSlipDetail = Nothing
110:
111: ' エラーの再発行
112: Err.Raise Err.NUMBER, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
113: End Function