以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]库存对比  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=124637)

--  作者:q2520
--  发布时间:2018/9/11 10:11:00
--  [求助]库存对比
If e.DataCol.Name = "炸药_数量" Then
    Dim dr1 As DataRow = Tables("审批.备案").Current.DataRow
    Dim Sum As Double = Tables("审批.备案").Compute("Sum(炸药_数量)")
    Dim dr2 As DataRow
    dr2 = DataTables("审批").Find("[单号]  = \'" & dr1("单号") & "\'")
    If dr2 IsNot Nothing Then
        If e.NewValue > dr2("炸药_数量") Then
            msgbox("使用备案数量不能多于审批数量")
            e.Cancel = True
        Else
            If sum >= dr2("炸药_数量") Then
                msgbox("使用备案数量不能多于审批数量")
                e.Cancel = True
            End If
        End If
    End If
End If

老师给帮忙看看这个代码  哪里错了     如果数量分2条数据输入就不对 (如果审批单的数量是10     在关联表里比方说第一条数据数量  8  第二条数量只要不超过10就可以输入   但是我要的效果是 关联表里的总数 不能超过审批单里的数量)   

--  作者:有点甜
--  发布时间:2018/9/11 10:33:00
--  
If e.DataCol.Name = "炸药_数量" Then
    Dim Sum As Double = DataTables("备案").Compute("Sum(炸药_数量)","[单号]  = \'" & dr1("单号") & "\'")
    Dim dr2 As DataRow
    dr2 = DataTables("审批").Find("[单号]  = \'" & dr1("单号") & "\'")
    If dr2 IsNot Nothing Then
        If e.NewValue+sum-e.oldvalue > dr2("炸药_数量") Then
            msgbox("使用备案数量不能多于审批数量")
            e.Cancel = True
        End If
    End If
End If

--  作者:q2520
--  发布时间:2018/9/11 10:48:00
--  
加上了

[此贴子已经被作者于2018/9/11 10:49:20编辑过]

--  作者:有点甜
--  发布时间:2018/9/11 10:49:00
--  
If e.DataCol.Name = "炸药_数量" Then
    Dim dr1 = e.datarow
    Dim Sum As Double = DataTables("备案").Compute("Sum(炸药_数量)","[单号]  = \'" & dr1("单号") & "\'")
    Dim dr2 As DataRow
    dr2 = DataTables("审批").Find("[单号]  = \'" & dr1("单号") & "\'")
    If dr2 IsNot Nothing Then
        If e.NewValue+sum-e.oldvalue > dr2("炸药_数量") Then
            msgbox("使用备案数量不能多于审批数量")
            e.Cancel = True
        End If
    End If
End If

--  作者:q2520
--  发布时间:2018/9/11 11:29:00
--  
甜老师  还一个问题  麻烦给写个代码
不同爆破单位  每月的审批量不一样    审批单里  同一个爆破单位   炸药 和 爆破器材的数量  不能超过每月定的值   

图片点击可在新窗口打开查看此主题相关图片如下:sp.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2018/9/11 11:32:00
--  

1、每月定的值,在什么地方?如何获取?

 

2、读取到每月的值,然后统计总的值,比较大小即可。

 

日期筛选条件,看看 http://www.foxtable.com/webhelp/scr/2720.htm

 


--  作者:q2520
--  发布时间:2018/9/11 15:25:00
--  
If e.DataCol.Name = "炸药_数量" Then
    Dim dr1 = e.DataRow
    Dim Sum As Double = DataTables("审批").Compute("Sum(炸药_数量)","[爆破单位]  = \'" & dr1("爆破单位") & "\'")
    Dim dr2 As DataRow
    dr2 = DataTables("爆破单位").Find("[爆破单位]  = \'" & dr1("爆破单位") & "\'")
    If dr2 IsNot Nothing Then
        If e.NewValue+sum-e.oldvalue > dr2("炸药定量") Then
            msgbox("审批数量不能多于定量")
            e.Cancel = True
        End If
    End If
End If

就你这个代码改下就行了   现在就缺一个  月的判断    甜老师给帮忙写上  比方说炸药每月定量100公斤   这个月累计到100 就不能再批了   但是下个月又重新从100开始计算了   

--  作者:有点甜
--  发布时间:2018/9/11 15:28:00
--  

If e.DataCol.Name = "炸药_数量" Then
    Dim dr1 = e.DataRow
    Dim Sum As Double = DataTables("审批").Compute("Sum(炸药_数量)","[爆破单位]  = \'" & dr1("爆破单位") & "\'")
    Dim dr2 As DataRow
    dr2 = DataTables("爆破单位").Find("[爆破单位]  = \'" & dr1("爆破单位") & "\'")
    If dr2 IsNot Nothing Then
        If e.NewValue+sum-e.oldvalue > 100 Then
            msgbox("不能多于每月定量")

            e.cancel = true
        Else
            If e.NewValue+sum-e.oldvalue > dr2("炸药定量") Then
                msgbox("审批数量不能多于定量")
                e.Cancel = True
            End If
        End If
    End If
End If


--  作者:q2520
--  发布时间:2018/9/11 15:45:00
--  
你理解错了   100只是我打的一个比方  这个数量   是不一定的
这个代码可以统计  同一个爆破单位的总数量    但是还缺少  每月的判断     这个月如果累计到了规定数量不能再审批了    但是下个月的时候  又可以继续审批  只是不能超过定量

--  作者:有点甜
--  发布时间:2018/9/11 15:55:00
--  

比如

 

Dim d As Date = dr1("日期")

d = New Date(d.year, d.month, 1)

Dim Sum As Double = DataTables("审批").Compute("Sum(炸药_数量)","[爆破单位]  = \'" & dr1("爆破单位") & "\' and 日期 >= #" & d & "# and 日期 < #" & d.addmonths(1) & "#")