List 6-154 Business.SlipコンポーネントのGetReadyDate_Slipメソッド
1: Public Function GetReadyDate_Slip(ByVal SlipID As Long) As Variant
2: ' 指定された伝票を受け付けることができる最も近い納期を返す
3: ' 【引数】
4: ' SlipID = 調査したい伝票の伝票番号
5: ' 【戻り値】
6: ' その伝票の納期として受け付けることができる日付
7: ' 入庫の予定がなく納期が不明のときにはNullを返す
8: Dim objContext As ObjectContext
9: Dim objDataStock As DataObj.STOCK
10: Dim objDataProduct As DataObj.Product
11: Dim objDataSlipDetail As DataObj.SlipDetail
12: Dim objDataSlip As DataObj.Slip
13: Dim objRec As ADODB.Recordset
14: Dim ReadyDate As Variant, tmpDate As Variant
15: Dim ProductID As Long, Number As Long
16: Dim NowStock As Long
17: Dim SlipStatus As SlipStatus
18:
19: ' オブジェクトコンテキストの取得
20: Set objContext = GetObjectContext()
21:
22: ' エラーハンドラの設定
23: On Error GoTo ErrHandle
24:
25: ' DataObj.Slipコンポーネントを実体化
26: Set objDataSlip = CreateObject("DataObj.Slip")
27:
28: ' 伝票が存在することを確認
29: If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
30: ' 伝票が存在しない
31: Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
"指定された伝票は存在しません"
32: End If
33:
34: ' 伝票の状態を取得
35: SlipStatus = objDataSlip.Get_SlipStatus(SlipID)
36: If (SlipStatus <> Creating) And (SlipStatus <> Rejected) Then
37: ' 伝票が作成中または却下されたという状況ではない
38: Err.Raise BusinessError.ERR_CANTACCESS, App.Title, _
"その伝票はすでに承認依頼されています"
39: End If
40:
41: Set objDataStock = CreateObject("DataObj.Stock")
42: Set objDataProduct = CreateObject("DataObj.Product")
43: Set objDataSlipDetail = CreateObject("DataObj.SlipDetail")
44:
45: ' 指定した伝票に付随する明細を製品でグループ化したものを取得
46: Set objRec = objDataSlipDetail.GetRecords_GroupProduct(SlipID)
47:
48: ReadyDate = Date
49: Do While Not objRec.EOF
50: ProductID = objRec.Fields("PRODUCTID").Value
51: Number = objRec.Fields("NUMBER").Value
52: NowStock = objDataProduct.GetNowStock(ProductID)
53: If NowStock < Number Then
54: ' その時点の在庫では足りない
55: ' いつになれば揃うのかを求める
56: tmpDate = objDataStock.GetReadyDate(ProductID,Number - NowStock)
57: If IsNull(tmpDate) Then
58: ' 永遠に揃うことはない
59: ReadyDate = Null
60: Exit Do
61: End If
62: If ReadyDate < tmpDate Then
63: ReadyDate = tmpDate
64: End If
65: End If
66: objRec.MoveNext
67: Loop
68:
69: ' 戻り値を設定
70: GetReadyDate_Slip = ReadyDate
71:
72: objRec.Close
73: Set objRec = Nothing
74:
75: ' 各種コンポーネントの解放
76: Set objDataSlipDetail = Nothing
77: Set objDataProduct = Nothing
78: Set objDataStock = Nothing
79: Set objDataSlip = Nothing
80:
81: ' トランザクションのコミット
82: objContext.SetComplete
83:
84: ' オブジェクトコンテキストの解放
85: Set objContext = Nothing
86:
87: Exit Function
88:
89: ErrHandle:
90: ' エラーハンドラ
91: objContext.SetAbort
92: Set objDataSlip = Nothing
93: Set objDataStock = Nothing
94: Set objDataProduct = Nothing
95: Set objDataSlipDetail = Nothing
96: Set objRec = Nothing
97:
98: ' エラーの再発行
99: Err.Raise Err.Number, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
100: End Function