以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  多行分别赋值的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=170484)

--  作者:cd_tdh
--  发布时间:2021/7/28 10:04:00
--  多行分别赋值的问题

老师,有有个报表打印按钮,报表中涉及到从审核意见表中找到对应的订单(用Id来识别)的复核日期,投标保证金表中有Id,与审核意见表中的Id是对应关系,复核日期就是对应审核意见表中最后一次审核的日期,当选择多行时,复核日期这儿应该怎么写呢?

Dim rs As List(of Row) = Tables("打投标保证金").GetCheckedRows
If rs.Count > 0 Then  \'如果存在符合条件的行

    Dim tm As String  =  ProjectPath &  "Attachments\\投标保证金支付凭证.docx" \'指定模板文件
    Dim fl1 As String =  ProjectPath &  "Reports\\投标保证金支付凭证.docx" \'指定目标文件
    Dim fl2 As String =  ProjectPath &  "Reports\\投标保证金支付凭证.pdf" \'指定目标PDF文件
    Dim wrt As New WordReport(Tables("打投标保证金"),tm,fl1) \'定义一个WordReport
    Dim dr As DataRow = DataTables("用户管理").SQLFind("[职务] = \'财务部制单\'")
    If dr IsNot Nothing Then
        wrt.Replace("[制单人]",dr("姓名"))  \'用代码替换制单人
    End If
    Dim dr1 As DataRow = DataTables("用户管理").SQLFind("[职务] = \'财务部经理\'")
    If dr1 IsNot Nothing Then
        wrt.Replace("[复核人]",dr1("姓名"))  \'用代码替换复核人
    End If

    Dim dr2 As DataRow = DataTables("审核意见表").SQLFind("[表名称] = \'" & "打投标保证金" & "\'","审核日期 DESC")
    If dr2 IsNot Nothing Then
        wrt.Replace("[复核日期]",dr2("审核日期"))  \'用代码替换复核日期
    End If

    For Each  r As Row In rs \'逐行生成报表
        wrt.BuildOne(r)
        r.Checked =False
    Next
    wrt.SaveToPDF(fl2) \'保存为PDF文件
    wrt.Quit() \'退出
    Dim Proc As New Process \'打开PDF文件
    Proc.File = fl2
    Proc.Start()

[此贴子已经被作者于2021/7/28 10:06:45编辑过]

--  作者:有点蓝
--  发布时间:2021/7/28 10:08:00
--  

模板发上来看看


--  作者:cd_tdh
--  发布时间:2021/7/28 10:20:00
--  

比如我勾选的第一条审核日期是2021.07.16,勾选的第二条审核日期是2021.07.20,截图如下,审核意见窗口是绑定到审核意见表的,两个表都有Id列对应

 


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

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


word报表中有个审核日期,需要每张报表对应的审核日期是通过审核意见表来找的

[此贴子已经被作者于2021/7/28 10:21:52编辑过]

--  作者:有点蓝
--  发布时间:2021/7/28 10:23:00
--  

Dim dr1 As DataRow = DataTables("用户管理").SQLFind("[职务] = \'财务部经理\'")
    If dr1 IsNot Nothing Then
        wrt.Replace("[复核人]",dr1("姓名"))  \'用代码替换复核人
    End If


    For Each  r As Row In rs \'逐行生成报表

    Dim dr2 As DataRow = DataTables("审核意见表").SQLFind("[表名称] = \'" & "打投标保证金" & "\'","审核日期 DESC")
    If dr2 IsNot Nothing Then
        wrt.Replace
One("[复核日期]",dr2("审核日期"))  \'用代码替换复核日期

    End If
        wrt.BuildOne(r)
        r.Checked =False
    Next
    wrt.SaveToPDF(fl2) \'保存为PDF文件
    wrt.Quit() \'退出
    Dim Proc As New Process \'打开PDF文件
    Proc.File = fl2
    Proc.Start()


--  作者:cd_tdh
--  发布时间:2021/7/28 11:17:00
--  

老师,这样不行呢,替换复核日期对了,但是格式化没成功呢?

    For Each  r As Row In rs \'逐行生成报表
        Dim dr2 As DataRow = DataTables("审核意见表").SQLFind("[表名称] = \'" & "打投标保证金" & "\' And [Id] = \'" & r("Id") & "\'","审核日期 DESC")  ’找到每条对应的ID
        If dr2 IsNot Nothing Then
        wrt.ReplaceOne("[复核日期]",dr2("审核日期"))  
        End If
        wrt.BuildOne(r)
        r.Checked =False
    Next

 第一条日期:

 


图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看
第二条日期:

 


图片点击可在新窗口打开查看此主题相关图片如下:4.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2021/7/28 11:32:32编辑过]

--  作者:有点蓝
--  发布时间:2021/7/28 11:32:00
--  
去掉下面替换的代码,多余

Dim dr2 As DataRow = DataTables("审核意见表").SQLFind("[表名称] = \'" & "打投标保证金" & "\' And [Id] = \'" & r("Id") & "\'","审核日期 DESC")  ’找到每条对应的ID
        If dr2 IsNot Nothing Then
        wrt.ReplaceOne("[复核日期]",dr2("审核日期"))  
        End If

--  作者:cd_tdh
--  发布时间:2021/7/28 11:37:00
--  

后没没有替换代码了,替换是执行了,就是格式化没对,其他的word代码的格式化也是这样写的可以

Dim rs As List(of Row) = Tables("打投标保证金").GetCheckedRows
If rs.Count > 0 Then  \'如果存在符合条件的行
    Dim tm As String  =  ProjectPath &  "Attachments\\投标保证金支付凭证.docx" \'指定模板文件
    Dim fl1 As String =  ProjectPath &  "Reports\\投标保证金支付凭证.docx" \'指定目标文件
    Dim fl2 As String =  ProjectPath &  "Reports\\投标保证金支付凭证.pdf" \'指定目标PDF文件
    Dim wrt As New WordReport(Tables("打投标保证金"),tm,fl1) \'定义一个WordReport
    Dim dr As DataRow = DataTables("用户管理").SQLFind("[职务] = \'财务部制单\'")
    If dr IsNot Nothing Then
        wrt.Replace("[制单人]",dr("姓名")) 
    End If
    Dim dr1 As DataRow = DataTables("用户管理").SQLFind("[职务] = \'财务部经理\'")
    If dr1 IsNot Nothing Then
        wrt.Replace("[复核人]",dr1("姓名")) 
    End If
    For Each  r As Row In rs \'逐行生成报表
        Dim dr2 As DataRow = DataTables("审核意见表").SQLFind("[表名称] = \'" & "打投标保证金" & "\' And [Id] = \'" & r("Id") & "\'","审核日期 DESC")
        If dr2 IsNot Nothing Then
            wrt.ReplaceOne("[复核日期]",dr2("审核日期"))  
        End If
        wrt.BuildOne(r)
        r.Checked =False
    Next
    wrt.SaveToPDF(fl2) \'保存为PDF文件
    wrt.Quit() \'退出
    Dim Proc As New Process \'打开PDF文件
    Proc.File = fl2
    Proc.Start()


--  作者:有点蓝
--  发布时间:2021/7/28 11:42:00
--  
如果要写代码替换。不要在模板里格式
图片点击可在新窗口打开查看
改为
[复核日期]


然后代码:
wrt.ReplaceOne("[复核日期]",format(dr2("审核日期"),"yyyy-MM-dd"))