List 6-174 Business.BillコンポーネントのMakeBillsメソッド
1: Public Sub MakeBills(ByVal billdate As Date)
2: ' 指定された日付よりも小さい日付の伝票を集計し,請求書を作成する
3: ' 【引数】
4: ' billdate = 集計したい伝票の締め日
5: ' 【戻り値】
6: ' なし
7: Dim objContext As ObjectContext
8: Dim objDataCustomer As DataObj.Customer
9: Dim objDataBill As DataObj.Bill
10: Dim objDataSlip As DataObj.Slip
11: Dim objCustomerRec As ADODB.Recordset
12: Dim objSlipRec As ADODB.Recordset
13: Dim startBillDay As Long, endBillDay As Long
14: Dim nextMonth As Date
15: Dim bdate As Date
16: Dim SUBTOTAL As Currency, TAX As Currency, TOTAL As Currency
17: Dim BillID As Long
18: Dim startDate As Date, endDate As Date
19:
20: ' オブジェクトコンテキストの取得
21: Set objContext = GetObjectContext()
22:
23: ' エラーハンドラの設定
24: On Error GoTo ErrHandle
25:
26: ' 引数billdateの時刻部分を捨てる
27: billdate = DateValue(billdate)
28:
29: ' 請求期間を算出
30: startDate = DateAdd("m", -1, billdate)
31: startDate = DateAdd("d", 1, startDate)
32: endDate = billdate
33:
34: ' 請求書の締め日を算出
35: startBillDay = Day(billdate)
36: ' 該当月の最終日を算出
37: ' 翌月の日を算出
38: nextMonth = DateAdd("m", 1, billdate)
39: ' 翌月の月の頭から1日引いた日が該当月の最終日である
40: endBillDay = Day(DateAdd("d", -1, _
DateSerial(Year(nextMonth), Month(nextMonth), 1)))
41:
42: If endBillDay = startBillDay Then
43: ' 該当月の最終日である
44: ' この場合には,startBillDayから締め日が31日に設定されている顧客までを
45: ' 集計の対象とする
46: endBillDay = 31
47: Else
48: ' 該当月の最終日ではない
49: ' この場合には,startBillDayに締め日が設定されている顧客だけを
50: ' 集計の対象とする
51: endBillDay = startBillDay
52: End If
53:
54: ' DataObj.Customerコンポーネントを実体化
55: Set objDataCustomer = CreateObject("DataObj.Customer")
56: ' DataObj.Slipコンポーネントを実体化
57: Set objDataSlip = CreateObject("DataObj.Slip")
58: ' DataObj.Billコンポーネントを実体化
59: Set objDataBill = CreateObject("DataObj.Bill")
60:
61: ' startBillDayからendBillDayまでくり返す。
62: ' これにより,たとえば,閏年ではない2月28日が指定された場合には,
63: ' 上記までの処理において,startBillDay変数に28が,endBillDay変数に31が設定されるため,
64: ' 締め日が28日,29日,30日,31日に設定されている顧客に対して集計することになる
65: For bdate = startBillDay To endBillDay
66: ' 指定された締め日の顧客を抜き出す
67: Set objCustomerRec = objDataCustomer.GetCustomersByBillDay(bdate)
68: ' それぞれの顧客に対し,伝票の集計処理をする
69: While Not objCustomerRec.EOF
70: ' objCustomerRec.Fields("CUSTOMERID").Valueの値が取引先に
71: ' なっていてかつ経理処理ずみの伝票の一覧を取得する
72: Set objSlipRec = objDataSlip.GetRecords(Null, Null, Null, Null, True, _
FILTER_SLIP_ACCOUNTED, False, _
objCustomerRec.Fields("ID").Value)
73: ' 取得した伝票に対して請求書を作成する処理をする
74: SUBTOTAL = 0
75: TAX = 0
76: TOTAL = 0
77: While Not objSlipRec.EOF
78: If Not objSlipRec.Fields("ONEBILLFLAG").Value Then
79: ' 1枚単位の請求書を作るように指定されていないものである
80: ' 請求額に伝票に記載されている額を加える
81: SUBTOTAL = SUBTOTAL + objSlipRec.Fields("SUBTOTAL").Value
82: TAX = TAX + objSlipRec.Fields("TAX").Value
83: TOTAL = TOTAL + objSlipRec.Fields("TOTAL").Value
84: End If
85:
86: ' 次のレコードに移動する
87: objSlipRec.MoveNext
88: Wend
89:
90: ' 請求書を作成する
91: BillID = objDataBill.AddRecord(objCustomerRec.Fields("ID").Value, _
startDate, endDate, _
SUBTOTAL, TAX, TOTAL)
92: ' 取得した伝票を請求書作成ずみにし,また,請求書と結び付ける
93: objSlipRec.MoveFirst
94: While Not objSlipRec.EOF
95: If Not objSlipRec.Fields("ONEBILLFLAG").Value Then
96: ' 1枚単位の請求書を作るように指定されていないものである
97: ' 請求書作成ずみにする
98: objDataSlip.Set_MADEBILLFLAG objSlipRec.Fields("ID").Value, True
99: objDataSlip.Set_ACCOUNTINGFLAG objSlipRec.Fields("ID").Value, False, Null
100:
101: ' 請求書と結び付ける
102: objDataSlip.SetBillID objSlipRec.Fields("ID").Value, BillID
103: End If
104:
105: ' 次のレコードに移動する
106: objSlipRec.MoveNext
107: Wend
108:
109: ' 以上で1つの顧客に対応する処理は完了
110:
111: ' 取得した伝票のレコードセットを解放
112: objSlipRec.Close
113: Set objSlipRec = Nothing
114:
115: ' 次の顧客の処理に進む
116: objCustomerRec.MoveNext
117: Wend
118: ' 以上で,指定された請求日の処理は完了
119:
120: ' 取得した顧客のレコードセットを解放
121: objCustomerRec.Close
122: Set objCustomerRec = Nothing
123: Next
124:
125: ' 各種コンポーネントの解放
126: Set objDataBill = Nothing
127: Set objDataSlip = Nothing
128: Set objDataCustomer = Nothing
129:
130: ' トランザクションのコミット
131: objContext.SetComplete
132:
133: ' オブジェクトコンテキストの解放
134: Set objContext = Nothing
135:
136: Exit Sub
137:
138: ErrHandle:
139: ' エラーハンドラ
140: objContext.SetAbort
141: Set objDataCustomer = Nothing
142: Set objDataSlip = Nothing
143: Set objDataBill = Nothing
144: Set objCustomerRec = Nothing
145: Set objSlipRec = Nothing
146:
147: ' エラーの再発行
148: Err.Raise Err.Number, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
149: End Sub