日结账单和周结账单

19 篇文章 0 订阅
15 篇文章 0 订阅

  一,结账

      在说周结账单和日结账单之前,得先做好结账的工作。在汇总里面,有个结账,其实这个结账的代码很简单,只是两个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 '刷新
    



 

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水田如雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值