一,结账
在说周结账单和日结账单之前,得先做好结账的工作。在汇总里面,有个结账,其实这个结账的代码很简单,只是两个Update,值要把结账状态的标记改变一下就可以。这个结账好像平常都会有个老师负责收取充值的现金,也负责退卡的现金,在结他的账的时候,他要把手里的钱都上交。
周结账单和日结账单是对所有金额的汇总,包括学生的消费金额,而由于在上机时的消费金额是在下机时自动扣除的,所以,不涉及到现金的问题。但是,虽然这个金额不反应在结账里面,但是却反应在周结账单和日决诶账单里面。
'先判断所有内容是否都为0,如果都为0,那么,禁止结账 If (Trim(txtReturnCardNum.Caption) = "0" And Trim(txtRechargeRmb.Caption) = "0" And Trim(txtReturnRmb.Caption) = "0" And Trim(txtAllRmb.Caption) = "0") Then MsgBox "操作员 " + " " + Trim$(cmbUserId.Text) + " 账目已全部结完!", vbOKOnly + vbInformation, "提示" Exit Sub Else '如果有信息 '将“未结账”的标记改为“已结账”的标记 SQL = "update TeaReturnCard set 结账状态='已结账' where 退卡教师='" & Trim(cmbUserId.Text) & "'" Set Rst = ExecuteSQL(SQL, strMsg) SQL = "update TeaRechargeInfo set 结账状态='已结账' where 充值教师='" & Trim(cmbUserId.Text) & "'" Set Rst = ExecuteSQL(SQL, strMsg) MsgBox "结账成功!", vbOKOnly + vbInformation, "提示" End If
二,日结账单
在计算日结账单时,我采取的方法是:在昨日账单的基础上结账。
'在窗体加载时,写日结账单表 '在写日结账单表之前,先判断今天是否已经写过日结账单表了 '如果写过日结账单表了,那么,就删除今天写过的那条,重写今天的日结账记录 '如果,没有,就不重写记录 '日结账单中的计算 '昨日充值卡中余额=读取昨天的日结账单的金额总和 '充值金额=今天充值表中所有的钱 '消费金额=今天学生上机表中,所有的消费金额相加 '退还金额=今天教师退卡表里面,已经(结过账)的退卡总金额 '金额总和=昨日卡中金额+充值金额-消费金额-退还金额 '日期时间是今天的日期时间 '判断今天是否已经结果账了 SQL = "select * from dayaccount where 日期='" & Format(GetSqlTime, "yyyy-mm-dd") & "'" '从日结账单表里选择今天的结账记录 Set Rst = ExecuteSQL(SQL, strMsg) If Not (Rst.BOF And Rst.EOF) Then '今天已经结过账了,即,这不是今天第一次结账 '先删除今天结过的账单 SQL = "delete from dayaccount where 日期='" & Format(GetSqlTime, "yyyy-mm-dd") & "'" Call ExecuteSQL(SQL, strMsg) '然后根据昨天的结账记录重新结账 '此处因为今天已经结果账了,也可以不上去今天的结账记录,在今天的记录上重新计算,然后用update更新一下就行 End If '计算昨日充值卡中的余额 '昨日充值卡中的余额=日结账单表中金额总和 SQL = "select sum(金额总和) from dayaccount where 日期='" & Format(GetSqlTime - 1, "yyyy-mm-dd") & "'" Set Rst = ExecuteSQL(SQL, strMsg) If IsNull(Rst.Fields(0)) = True Then YesDayRMB = 0 Else YesDayRMB = Trim(Rst.Fields(0)) End If '计算充值金额(充值金额是教师充值信息表里面,教师今天充值的金额,并且这些金额都已经结果账了,如果今天充值了某些金额,但是没有结账,则在计算日结账单时,不计入) SQL = "select sum(充值金额) from tearechargeinfo where 日期='" & Format(GetSqlTime, "yyyy-mm-dd") & "' and 结账状态='已结账'" Set Rst = ExecuteSQL(SQL, strMsg) If IsNull(Rst.Fields(0)) = True Then RechargeRmb = 0 Else RechargeRmb = Trim(Rst.Fields(0)) '充值金额赋值 End If '计算消费金额 SQL = "select sum(消费金额) from stushangji where 上机日期='" & Format(GetSqlTime, "yyyy-mm-dd") & "'" Set Rst = ExecuteSQL(SQL, strMsg) If Rst.EOF And Rst.BOF Then CostRMB = 0 Else CostRMB = Trim(Rst.Fields(0)) End If '计算退还金额 SQL = "select sum(退卡金额) from teareturncard where 退卡日期='" & Format(GetSqlTime, "yyyy-mm-dd") & "' and 结账状态='已结账'" Set Rst = ExecuteSQL(SQL, strMsg) If IsNull(Rst.Fields(0)) = True Then RetRMB = 0 Else RetRMB = Trim(Rst.Fields(0)) End If '计算金额总和=昨日卡中金额+充值金额-消费金额-退还金额 AllRMB = YesDayRMB + RechargeRmb - CostRMB - RetRMB '插入日结账单表 SQL = "insert into DayAccount values('" & YesDayRMB & "','" & RechargeRmb & "','" & CostRMB & "','" & RetRMB & "','" & AllRMB & "','" & Format(GetSqlTime, "yyyy-mm-dd") & "','" & Format(GetSqlTime, "hh-mm-ss") & "')" Call ExecuteSQL(SQL, strMsg)
三,周结账单
周结账单是对从BeginTime到EndTime的金额的汇总,每次在需要周结账单时才插入,一旦不需要,就删除掉。可以说,周结账单是对这段是间的日结账单的汇总。
'每次都先删除周结账单里的数据,然后重新写入 SQL = "delete from weekaccount " Call ExecuteSQL(SQL, strMsg) '将日结账单里的内容汇总后,填入周结账单,周结账单只是一个临时的表,一旦本窗体写在,周结账单里的内容也随之被Delete '上期充值卡余额=在begintime之前的充值卡的余额 '本期充值金额=从dayAccount中,得到的这段时间的充值金额 '本期消费金额=从dayAccount中,得出的这段时间的消费金额 '本期退款金额=从dayAccount中,得出的这时间的退款金额 '本期充值卡余额=上期充值卡余额+本期充值金额-本期消费金额-本期退款金额 '日期=今天 '计算上期充值卡余额 SQL = "select max(金额总和) from dayaccount where 日期 < '" & Format(CDate(DTpcBegin.Value), "yyyy-mm-dd") & "'" Set Rst = ExecuteSQL(SQL, strMsg) Debug.Print SQL If IsNull(Rst.Fields(0)) = True Then BalanceRmb = 0 Else BalanceRmb = Trim(Rst.Fields(0)) '上期充值卡余额 End If '显示在文本框中 txtBalance.Text = Format(BalanceRmb, "Fixed") '计算本期充值金额 SQL = "select sum(充值金额) from dayaccount where 日期 between '" & Format(CDate(DTpcBegin.Value), "yyyy-mm-dd") & "' and '" & Format(CDate(DTPcEnd.Value), "yyyy-mm-dd") & "'" Set Rst = ExecuteSQL(SQL, strMsg) Debug.Print SQL If IsNull(Rst.Fields(0)) = True Then BenQiRechargeRmb = 0 Else BenQiRechargeRmb = Trim(Rst.Fields(0)) End If '计算本期消费金额 SQL = "select sum(消费金额) from dayaccount where 日期 between '" & Format(CDate(DTpcBegin.Value), "yyyy-mm-dd") & "' and '" & Format(CDate(DTPcEnd.Value), "yyyy-mm-dd") & "'" Set Rst = ExecuteSQL(SQL, strMsg) Debug.Print SQL If IsNull(Rst.Fields(0)) = True Then BenQiCostRmb = 0 Else BenQiCostRmb = Trim(Rst.Fields(0)) End If '计算本期退款金额 SQL = "select sum(退还金额) from dayaccount where 日期 between '" & Format(CDate(DTpcBegin.Value), "yyyy-mm-dd") & "' and '" & Format(CDate(DTPcEnd.Value), "yyyy-mm-dd") & "'" Set Rst = ExecuteSQL(SQL, strMsg) Debug.Print SQL If IsNull(Rst.Fields(0)) = True Then ReturnRmb = 0 Else ReturnRmb = Trim(Rst.Fields(0)) End If '计算本期充值卡余额 'BenQiCardRmb = BalanceRmb + BenQiRechargeRmb - BenQiCostRmb - ReturnRmb(在所有数据完整时没问题,但是数据如果不完整,就不行了,所以采取别的办法) SQL = "select max(金额总和) from dayaccount where 日期 <= '" & Format(CDate(DTPcEnd.Value), "yyyy-mm-dd") & "'" Set Rst = ExecuteSQL(SQL, strMsg) If IsNull(Rst.Fields(0)) = True Then BenQiCardRmb = 0 Else BenQiCardRmb = Trim(Rst.Fields(0)) End If '计算日期 DateToday = Format(GetSqlTime, "yyyy-mm-dd") '插入到周结账单里面 SQL = "insert into weekaccount values('" & BalanceRmb & "','" & BenQiRechargeRmb & "','" & BenQiCostRmb & "','" & ReturnRmb & "','" & BenQiCardRmb & "','" & DateToday & "')" Call ExecuteSQL(SQL, strMsg) Call showReport '显示查询到的报表 Viewer.Refresh '刷新
时间: 2024-10-16 09:33:39