Foxtable(狐表)用户栏目专家坐堂 → [求助]计算年功工资的代码不对


  共有2379人关注过本帖树形打印复制链接

主题:[求助]计算年功工资的代码不对

帅哥哟,离线,有人找我吗?
hanzhang98
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
[求助]计算年功工资的代码不对  发帖心情 Post By:2019/4/3 21:12:00 [显示全部帖子]

老师好。下面的代码想根据当前表(“工资表”)的“连续工龄”数值,在“年功表”的“累计工龄”查找相符的行,并将“年功表”的"计发标准"列的值写入“工资表”的“年功金额”列,请老师帮助改正代码。谢谢。

Select Case e.DataCol.name
    Case "连续工龄"
        If e.DataRow.IsNull("连续工龄") Then
            e.DataRow("年功金额") = Nothing
        Else
            Dim bm As String = e.DataRow("连续工龄") 
            Dim dr As DataRow = DataTables("年功表").Find("累计工龄 = '" & bm & "'")
            If dr IsNot Nothing Then
                e.DataRow("年功金额") = dr("计发标准") 
            End If
        End If
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/3 21:58:00 [显示全部帖子]

谢谢老师指导。
再请教老师,现“工资表”的“连续工龄”列的值是从“员工表”复制而来,在“员工表”需要保留一位小数,而“工资表”是需要整数,将“工资表”的“连续工龄”取整的代码如何写。请老师帮助。谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/3 22:34:00 [显示全部帖子]

老师好。麻烦老师再给看看,下面红色部分的代码不对,原意是[如果“责任工资”列不为空,则清除(或不写入)“年功金额”,否则写入],但现在是“责任工资”不为空也写入“年功金额”了。请老师帮助。谢谢


If e.DataRow.IsNull("责任工资") Then        '责任工资是否为空("Is"是/"IsNull"不是)                
      e.DataRow("年功金额") = Nothing         '不为空,则清除(或不写入)年功金额
Else
      e.DataRow("年功金额") = dr("计发标准")  '为空,写入
End If                 
            
[此贴子已经被作者于2019/4/4 7:31:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/4 7:30:00 [显示全部帖子]

老师好。麻烦老师再给看看,下面红色部分的代码不对,原意是[如果“责任工资”列不为空,则清除(或不写入)“年功金额”,否则写入],但现在是“责任工资”不为空也写入“年功金额”了。请老师帮助。谢谢

Select Case e.DataCol.name
    Case "连续工龄"          '                
        If e.DataRow.IsNull("连续工龄") Then        '连续工龄是否为空
            e.DataRow("年功金额") = Nothing         '如果为空,则清除年功金额
        Else
            Dim bm As String = e.DataRow("连续工龄")  '声明变量为"连续工龄"
            Output.Show(Round2(bm, 0))                '将"连续工龄" 数值四舍五入为整数
            Dim dr As DataRow = DataTables("年功工资标准").Find("累计工龄 <= " & bm & "", "累计工龄 desc")
            If dr IsNot Nothing Then
                If e.DataRow.IsNull("责任工资") Then        '责任工资是否为空("Is"是/"IsNull"不是)                
                    e.DataRow("年功金额") = Nothing         '不为空,则清除(或不写入)年功金额
                Else
                    e.DataRow("年功金额") = dr("计发标准")  '为空,写入
                End If                 
            End If
        End If
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/4 8:02:00 [显示全部帖子]

谢谢指导。但还是不行,按您的指导,现在又全不写入了(不管“责任工资”是不是空,均不写入)。还请老师费心修正。
[此贴子已经被作者于2019/4/4 8:07:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/4 8:07:00 [显示全部帖子]

如果把这句“If e.DataRow.IsNull("责任工资") = False Then”改为“If e.DataRow.IsNull("责任工资") = True Then”,又全写入了(不管“责任工资”是不是空,均写入)。还请老师费心修正。
[此贴子已经被作者于2019/4/4 8:08:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/4 9:09:00 [显示全部帖子]

老师们好!老师们帮助指导的代码没有问题。但问题是“问题原因是找出来了,但实在是处理不了”。现上传实例请老师们帮助。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目1.rar

问题原因是:如果在实例的“薪资计算表”的“责任工资”列,用手工输入数值,代码就运行正常、也计算正确。但只要是将实例的“薪资计算表”的“考核奖金”列的已有数值复制粘贴到“责任工资”列,代码就运行不正常、也计算不正确了。
   
      “薪资计算表”的“责任工资”列的数值是从“员工表”用代码复制而来的,为什么是“复制”来的数值,代码就不能计算了呢?是不是“复制来的数值”的问题呀?

      “员工表”的“责任工资”列是[单精度小数]、“薪资计算表”的“责任工资”列是[双精度小数]。是不是与这个有关呀?

      实在再找不出其它原因了。还请老师们、大侠们费心帮助指导。谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/4 9:19:00 [显示全部帖子]

我又试了试,与数值格式好像没有关系。难道是从“员工表”复制而来的“数值”不是数值,或者是代码不认为它是数值,因此以“空值”来对待?请老师们帮助。谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/4 9:35:00 [显示全部帖子]

老师好!用您12楼给的代码也还是不行,就是复制过来的“数值”的问题,我又用现上传的实例2试了试,在实例2中又增加了一个“列一”,这个"列一”的数值是单精度小数手工输入。将"列一"手工输入的数值复制到“责任工资”列,代码运行计算正确,如果再将“考核奖金”列(从"员工表"复制来)的数值复制到“责任工资”列,代码就又不能计算了。是不是代码不认为它是数值,因此以"空值"对待。还请老师费心。谢谢。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目2.rar


[此贴子已经被作者于2019/4/4 9:36:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hanzhang98
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:493 积分:3637 威望:0 精华:0 注册:2018/6/8 21:14:00
  发帖心情 Post By:2019/4/4 10:12:00 [显示全部帖子]

老师好!我用下面代码测试了下,就是只要是复制过来的,全显示为“0”
Dim dd As String = e.DataRow("责任工资")  
msgbox(dd)"

 回到顶部
总数 13 1 2 下一页