以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- SQLCompute效率 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=130582) |
-- 作者:cd_tdh -- 发布时间:2019/1/25 20:39:00 -- SQLCompute效率 有谁测试过直接用 SQLCompute 和用SQLCommand 生成临时表后用Compute那个效率高啊? |
-- 作者:有点蓝 -- 发布时间:2019/1/25 21:44:00 -- 直接比较没有意义,看使用场景。具体问题具体分析。 |
-- 作者:cd_tdh -- 发布时间:2019/1/25 21:59:00 -- 比如这段代码,感觉很费时,到没测试过时间到底费时到那一部分代码,这种有没优化方法呢? Dim dr As DataRow = Tables("工程款管理").current.DataRow If dr("审批状态") = "已审批完成" Then MessageBox.Show("已审批完成的项目不能再进行计算!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.Cancel = True Return End If Dim filter As String = "合同编码=\'" & dr("合同编码") & "\'and 计量期数=\'" & dr("计量期数") & "\'" If dr("新老项目") = "新项目" Then \'为空 Dim Filter1 As String= "合同编码=\'" & dr("合同编码") & "\'" With e.Form.Controls("开票日期") If .Value IsNot Nothing Then Dim d As Date = .value Dim d2 As Date = new Date(d.year, d.Month, 15) d2 = d2.AddMonths(1) Filter1 &= " and 寄达日期 <= \'" & d2 & "\'" End If End With Dim sum1 As Double = DataTables("进项票审核").sqlCompute("sum(税额)", filter1 & " and 审核状态=\'已审核\' and 类别=\'专票\'") Dim sum2 As Double = 0 For i As Integer = 1 To dr("计量期数")-1 sum2 += val(dr.DataTable.datarows(i-1)("本期统计增值税")) Next \'dr("本期统计增值税")= sum1-sum2 dr("本期统计增值税") = DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'专票\'") dr("本期统计成本发票") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") + DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'普票\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") dr("本期统计人工工资") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别=\'人工\'") + DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'普票\' and 工料机类别=\'人工\'") Else dr("本期统计增值税") = DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'专票\'") \'不分时段计算 dr("本期统计成本发票") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") + DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'普票\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") dr("本期统计人工工资") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别=\'人工\'") End If \'成本发票及人工工资 If dr("应缴增值税基数") =Nothing Then \'为空 dr("成本基数") = Nothing ElseIf dr("应缴增值税基数") ="合同金额" Then dr("成本基数") = dr("合同金额") Else If dr("应缴增值税基数") ="发票金额" Then dr("成本基数") = dr("发票金额") Else If dr("应缴增值税基数") ="计量金额" Then dr("成本基数") = dr("计量金额") Else If dr("应缴增值税基数") ="申请金额" Then dr("成本基数") = dr("申请金额") End If \'退成本 If dr("是否是退扣款") = True Then \'为空 If dr("本期统计成本发票") > dr("本期需要成本发票") Then dr("本期需要成本发票") = dr ("") Else dr("本期需要成本发票") = dr ("本期统计成本发票") End If Else If dr("应缴增值税基数") = Nothing Then \'为空 dr("本期需要成本发票") = Nothing dr("本期需要人工工资") = Nothing ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="合同金额" Then dr("本期需要成本发票") = dr("合同金额") / 1.1 * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("合同金额") / 1.1 * (dr("人工比例") / 100) ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="发票金额" Then dr("本期需要成本发票") = dr("发票金额") / 1.1 * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("发票金额") / 1.1 * (dr("人工比例") / 100) ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="计量金额" Then dr("本期需要成本发票") = dr("计量金额") / 1.1 * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("计量金额") / 1.1 * (dr("人工比例") / 100) ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="申请金额" Then dr("本期需要成本发票") = dr("申请金额") / 1.1 * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("申请金额") / 1.1 * (dr("人工比例") / 100) ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="合同金额" Then dr("本期需要成本发票") = dr("合同金额") * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("合同金额") * (dr("人工比例") / 100) ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="发票金额" Then dr("本期需要成本发票") = dr("发票金额") * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("发票金额") * (dr("人工比例") / 100) ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="计量金额" Then dr("本期需要成本发票") = dr("计量金额") * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("计量金额") * (dr("人工比例") / 100) ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="申请金额" Then dr("本期需要成本发票") = dr("申请金额") * (dr("材机比例") / 100) dr("本期需要人工工资") = dr("申请金额") * (dr("人工比例") / 100) End If End If \'本期需要增值税计算 If dr.IsNull("应缴增值税基数") OrElse dr.IsNull("增值税征收方式") Then \'为空 dr("本期需要增值税") = Nothing ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" Then dr("本期需要增值税") = dr("合同金额") / 1.1 * 0.07 ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "简易征收" Then dr("本期需要增值税") = dr("合同金额") / 1.03 * 0.03 ElseIf dr("应缴增值税基数") ="发票金额" AndAlso dr("增值税征收方式") = "标准征收" Then dr("本期需要增值税") = dr("发票金额") / 1.1 * 0.07 ElseIf dr("应缴增值税基数") ="发票金额" AndAlso dr("增值税征收方式") = "简易征收" Then dr("本期需要增值税") = dr("发票金额") / 1.03 * 0.03 ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" Then dr("本期需要增值税") = dr("申请金额") / 1.1 * 0.07 ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "简易征收" Then dr("本期需要增值税") = dr("申请金额") / 1.03 * 0.03 End If \'应缴增值税及成本差额计算 If dr.IsNull("应缴增值税基数") OrElse dr.IsNull("增值税征收方式") Then \'为空 dr("应缴增值税") = Nothing ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1 dr("成本差额") = dr("合同金额")*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1 dr("成本差额") = dr("合同金额")/1.1*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = True Then dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1 dr("成本差额") = dr("合同金额") - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = True Then dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1 dr("成本差额") = dr("合同金额")/1.1 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="发票金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("发票金额") / 1.1 * 0.1 dr("成本差额") = dr("发票金额")*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="发票金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("发票金额") / 1.1 * 0.1 dr("成本差额") = dr("发票金额")/1.1*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="发票金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = True Then dr("应缴增值税") = dr("发票金额") / 1.1 * 0.1 dr("成本差额") = dr("发票金额") - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="发票金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = True Then dr("应缴增值税") = dr("发票金额") / 1.1 * 0.1 dr("成本差额") = dr("发票金额")/1.1 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1 dr("成本差额") = dr("申请金额")*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1 dr("成本差额") = dr("申请金额")/1.1*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1 dr("成本差额") = dr("申请金额") - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = True Then dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1 dr("成本差额") = dr("申请金额")/1.1 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1 dr("成本差额") = dr("计量金额")*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = False Then dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1 dr("成本差额") = dr("计量金额")/1.1*0.92 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = True Then dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1 dr("成本差额") = dr("计量金额") - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = True Then dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1 dr("成本差额") = dr("计量金额")/1.1 - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "简易征收" Then dr("应缴增值税") = dr("合同金额") / 1.03 * 0.03 dr("成本差额") = dr("合同金额") - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="发票金额" AndAlso dr("增值税征收方式") = "简易征收" Then dr("应缴增值税") = dr("发票金额") / 1.03 * 0.03 dr("成本差额") = dr("发票金额") - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "简易征收" Then dr("应缴增值税") = dr("申请金额") / 1.03 * 0.03 dr("成本差额") = dr("申请金额") - dr("本期使用成本发票") - dr("本期使用人工工资") ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "简易征收" Then dr("应缴增值税") = dr("计量金额") / 1.03 * 0.03 dr("成本差额") = dr("计量金额") - dr("本期使用成本发票") - dr("本期使用人工工资") End If \'成本差额税 Dim cc As String = e.Form.Controls("成本差额").value \'定义开票日期输入框为d Dim cs As String = e.Form.Controls("成本差额税率").value \'定义开票日期输入框为d If cc = 0 Then dr("成本差额税率") = Nothing dr("成本差额税") = Nothing Else \'dr("成本差额税率") = 25 dr("成本差额税") = dr("成本差额") * dr("成本差额税率") / 100 End If \'企业所得税\\个人所得税\\管理费计算 If dr.IsNull("企业所得税基数") OrElse dr.IsNull("企业所得税率")Then \'为空 dr("企业所得税") = Nothing ElseIf dr("企业所得税基数") ="合同金额" Then dr("企业所得税") = dr("合同金额") * dr("企业所得税率") / 100 ElseIf dr("企业所得税基数") ="发票金额" Then dr("企业所得税") = dr("发票金额") * dr("企业所得税率") / 100 ElseIf dr("企业所得税基数") ="申请金额" Then dr("企业所得税") = dr("申请金额") * dr("企业所得税率") / 100 ElseIf dr("企业所得税基数") ="计量金额" Then dr("企业所得税") = dr("计量金额") * dr("企业所得税率") / 100 End If If dr.IsNull("个人所得税基数") OrElse dr.IsNull("个人所得税率") Then \'为空 dr("个人所得税") = Nothing ElseIf dr("个人所得税基数") ="合同金额" Then dr("个人所得税") = dr("合同金额") * dr("个人所得税率") / 100 ElseIf dr("个人所得税基数") ="发票金额" Then dr("个人所得税") = dr("发票金额") * dr("个人所得税率") / 100 ElseIf dr("个人所得税基数") ="申请金额" Then dr("个人所得税") = dr("申请金额") * dr("个人所得税率") / 100 ElseIf dr("个人所得税基数") ="计量金额" Then dr("个人所得税") = dr("计量金额") * dr("个人所得税率") / 100 End If If dr.IsNull("计费基数") OrElse dr.IsNull("管理费费率")Then \'为空 dr("管理费") = Nothing ElseIf dr("计费基数") ="合同金额" Then dr("管理费") = dr("合同金额") * dr("管理费费率") / 100 ElseIf dr("计费基数") ="发票金额" Then dr("管理费") = dr("发票金额") * dr("管理费费率") / 100 ElseIf dr("计费基数") ="申请金额" Then dr("管理费") = dr("申请金额") * dr("管理费费率") / 100 ElseIf dr("计费基数") ="计量金额" Then dr("管理费") = dr("计量金额") * dr("管理费费率") / 100 End If [此贴子已经被作者于2019/1/25 22:06:54编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/1/25 22:22:00 -- 这种情况,表的数据越多,sqlCompute的效率就越高,反之加载后再Compute的效率就高。给后台表加上必要的索引。 可以自己测试是哪段代码费时: Dim dr As DataRow = Tables("工程款管理").current.DataRow If dr("审批状态") = "已审批完成" Then MessageBox.Show("已审批完成的项目不能再进行计算!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.Cancel = True Return End If Output.Show(Format(Date.Now,"HH:mm:ss.ffff")) Dim filter As String = "合同编码=\'" & dr("合同编码") & "\'and 计量期数=\'" & dr("计量期数") & "\'" Output.Show(dr("新老项目")) If dr("新老项目") = "新项目" Then \'为空 Dim Filter1 As String= "合同编码=\'" & dr("合同编码") & "\'" With e.Form.Controls("开票日期") If .Value IsNot Nothing Then Dim d As Date = .value Dim d2 As Date = new Date(d.year, d.Month, 15) d2 = d2.AddMonths(1) Filter1 &= " and 寄达日期 <= \'" & d2 & "\'" End If End With Output.Show(Format(Date.Now,"HH:mm:ss.ffff")) Dim sum1 As Double = DataTables("进项票审核").sqlCompute("sum(税额)", filter1 & " and 审核状态=\'已审核\' and 类别=\'专票\'") Output.Show(Format(Date.Now,"HH:mm:ss.ffff")) Dim sum2 As Double = 0 For i As Integer = 1 To dr("计量期数")-1 sum2 += val(dr.DataTable.datarows(i-1)("本期统计增值税")) Next Output.Show(Format(Date.Now,"HH:mm:ss.ffff")) \'dr("本期统计增值税")= sum1-sum2 dr("本期统计增值税") = DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'专票\'") dr("本期统计成本发票") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") + DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'普票\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") dr("本期统计人工工资") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别=\'人工\'") + DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'普票\' and 工料机类别=\'人工\'") Else Output.Show(Format(Date.Now,"HH:mm:ss.ffff")) dr("本期统计增值税") = DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'专票\'") \'不分时段计算 dr("本期统计成本发票") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") + DataTables("进项票审核").sqlCompute("sum(税额)", filter & " And 审核状态=\'已审核\' and 类别=\'普票\' and 工料机类别 in (\'材料\',\'机械\',\'管理\')") dr("本期统计人工工资") = DataTables("进项票审核").sqlCompute("sum(税后金额)", filter & " And 审核状态=\'已审核\' and 工料机类别=\'人工\'") End If Output.Show(Format(Date.Now,"HH:mm:ss.ffff")) \'成本发票及人工工资 If dr("应缴增值税基数") =Nothing Then \'为空 dr("成本基数") = Nothing ElseIf dr("应缴增值税基数") ="合同金额" Then dr("成本基数") = dr("合同金额") Else If dr("应缴增值税基数") ="发票金额" Then dr("成本基数") = dr("发票金额") Else If dr("应缴增值税基数") ="计量金额" Then dr("成本基数") = dr("计量金额") Else If dr("应缴增值税基数") ="申请金额" Then dr("成本基数") = dr("申请金额") End If Output.Show(Format(Date.Now,"HH:mm:ss.ffff")) …… |