现在运行没报错了,就是没有期初结转的都能准确计算余额,有期初结转的,也就是日期为空的期末余额计算不准确.如用红线标注的银行存款
此主题相关图片如下:结果图.png
DataColChanged事件代码如下:
Select Case e.DataCol.Name
Case "科目代码","借方金额","贷方金额","借方数量","贷方数量"
If dr.IsNull("科目代码")=False Then
Dim mr As DataRow
Dim mrs As List(of DataRow)
mr = e.DataTable.Find("[日期] <= #" & dr("日期") & "# And [科目代码] = '" & dr("科目代码") & "'And [纳税识别号]='" & sbh & "'", "日期, 凭证ID")
If mr("_Identify") = dr("_Identify") Then
Dim tr As DataRow = DataTables("会计科目表").Find("科目代码='" & dr("科目代码") & "'And 纳税识别号 = '" & sbh & "'")
If tr IsNot Nothing Then
If tr("余额方向")="借" Then
If dr.IsNull("凭证ID")=False Then
dr("期初_余额")=Nothing
dr("期初_数量")=Nothing
dr("余额_金额") = dr("期初_余额") + dr("借方金额") - dr("贷方金额")
dr("余额_数量") = dr("期初_数量") + dr("借方数量") - dr("贷方数量")
If dr("余额_金额")=Nothing Then
dr("余额_借或贷")="平"
Else
dr("余额_借或贷")="借"
End If
mr = dr
Else
Return
End If
End If
If tr("余额方向")="贷" Then
If dr.IsNull("凭证ID")=False Then
dr("期初_余额")=Nothing
dr("期初_数量")=Nothing
dr("余额_金额") = dr("期初_余额") + dr("贷方金额") - dr("借方金额")
dr("余额_数量") = dr("期初_数量") + dr("借方数量") - dr("贷方数量")
If dr("余额_金额")=Nothing Then
dr("余额_借或贷")="平"
Else
dr("余额_借或贷")="贷"
End If
mr = dr
Else
Return
End If
End If
End If
End If
mrs = e.DataTable.Select("[日期] >= #" & mr("日期") & "# And [科目代码] = '" & mr("科目代码") & "'And [纳税识别号]='" & sbh & "'", "[日期], 凭证ID")
For i As Integer = 1 To mrs.Count - 1
Dim tr As DataRow = DataTables("会计科目表").Find("科目代码='" & mr("科目代码") & "'And 纳税识别号 = '" & sbh & "'")
If tr IsNot Nothing Then
If tr("余额方向")="借" Then
If mrs(i).IsNull("凭证ID")=False Then
mrs(i)("期初_余额")=mrs(i-1)("余额_金额")
mrs(i)("期初_数量")=mrs(i-1)("余额_数量")
mrs(i)("期初_借或贷")="借"
mrs(i)("余额_金额") =mrs(i)("期初_余额") + mrs(i)("借方金额") - mrs(i)("贷方金额")
mrs(i)("余额_数量") =mrs(i)("期初_数量") + mrs(i)("借方数量") - mrs(i)("贷方数量")
If mrs(i)("余额_金额")=Nothing Then
mrs(i)("余额_借或贷")="平"
Else
mrs(i)("余额_借或贷")="借"
End If
Else
Return
End If
End If
If tr("余额方向")="贷" Then
If mrs(i).IsNull("凭证ID")=False Then
mrs(i)("期初_余额")=mrs(i-1)("余额_金额")
mrs(i)("期初_数量")=mrs(i-1)("余额_数量")
mrs(i)("期初_借或贷")="贷"
mrs(i)("余额_金额") =mrs(i)("期初_余额") + mrs(i)("贷方金额") - mrs(i)("借方金额")
mrs(i)("余额_数量") =mrs(i)("期初_数量") + mrs(i)("借方数量") - mrs(i)("贷方数量")
If mrs(i)("余额_金额")=Nothing Then
mrs(i)("余额_借或贷")="平"
Else
mrs(i)("余额_借或贷")="贷"
End If
Else
Return
End If
End If
Else
Return
End If
Next
If e.DataCol.Name = "科目代码" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
mr = e.DataTable.Find("[日期] <= #" & dr("日期") & "# And [科目代码] = '" & e.OldValue & "'And [纳税识别号]='" & sbh & "'", "日期, 凭证ID")
If mr Is Nothing Then
mr = e.DataTable.Find("[科目代码] = '" & e.OldValue & "'And [纳税识别号]='" & sbh & "'", "[日期], 凭证ID")
If mr IsNot Nothing Then
Dim tr As DataRow = DataTables("会计科目表").Find("科目代码='" & mr("科目代码") & "'And 纳税识别号 = '" & sbh & "'")
If tr IsNot Nothing Then
If tr("余额方向")="借" Then
If mr.IsNull("凭证ID")=False Then
mr("余额_金额") =mr("期初_余额") + mr("借方金额") - mr("贷方金额")
mr("余额_数量") =mr("期初_数量") + mr("借方数量") - mr("贷方数量")
If mr("余额_金额")=Nothing Then
mr("余额_借或贷")="平"
Else
mr("余额_借或贷")="借"
End If
Else
Return
End If
End If
If tr("余额方向")="贷" Then
If mr.IsNull("凭证ID")=False Then
mr("余额_金额") =mr("期初_余额")+ mr("贷方金额") - mr("借方金额")
mr("余额_数量") =mr("期初_数量") + mr("借方数量") - mr("贷方数量")
If mr("余额_金额")=Nothing Then
mr("余额_借或贷")="平"
Else
mr("余额_借或贷")="贷"
End If
Else
Return
End If
End If
Else
Return
End If
End If
End If
End If
If mr IsNot Nothing Then
mrs = e.DataTable.Select("[日期] >= #" & mr("日期") & "# And [科目代码] = '" & mr("科目代码") & "'And [纳税识别号]='" & sbh & "'", "日期, 凭证ID")
For i As Integer = 1 To mrs.Count - 1
Dim tr As DataRow = DataTables("会计科目表").Find("科目代码='" & mr("科目代码") & "'And 纳税识别号 = '" & sbh & "'")
If tr IsNot Nothing Then
If tr("余额方向")="借" Then
If mrs(i).IsNull("凭证ID")=False Then
mrs(i)("期初_余额")=mrs(i-1)("余额_金额")
mrs(i)("期初_数量")=mrs(i-1)("余额_数量")
mrs(i)("期初_借或贷")="借"
mrs(i)("余额_金额") =mrs(i)("期初_余额") + mrs(i)("借方金额") - mrs(i)("贷方金额")
mrs(i)("余额_数量") =mrs(i)("期初_数量") + mrs(i)("借方数量") - mrs(i)("贷方数量")
If mrs(i)("余额_金额")=Nothing Then
mrs(i)("余额_借或贷")="平"
Else
mrs(i)("余额_借或贷")="借"
End If
Else
Return
End If
End If
If tr("余额方向")="贷" Then
If mrs(i).IsNull("凭证ID")=False Then
mrs(i)("期初_余额")=mrs(i-1)("余额_金额")
mrs(i)("期初_数量")=mrs(i-1)("余额_数量")
mrs(i)("期初_借或贷")="贷"
mrs(i)("余额_金额") =mrs(i)("期初_余额") + mrs(i)("贷方金额") - mrs(i)("借方金额")
mrs(i)("余额_数量") =mrs(i)("期初_数量") + mrs(i)("借方数量") - mrs(i)("贷方数量")
If mrs(i)("余额_金额")=Nothing Then
mrs(i)("余额_借或贷")="平"
Else
mrs(i)("余额_借或贷")="贷"
End If
Else
Return
End If
End If
Else
Return
End If
Next
End If
End If
End Select
[此贴子已经被作者于2018/4/25 20:41:56编辑过]