以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  excel报表直接引用数据  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=142009)

--  作者:swagger
--  发布时间:2019/10/16 13:56:00
--  excel报表直接引用数据
结构如下(订单表和客户表没有关联):

<订单,1>

<"地址:" & [客户1,地址]>

<订单明细,-1>

<订单,1>


之前用的是客户表1,sql load 数据 DataTables("客户1").AppendLoad(filter) ,正常打印。

现在换了客户表2,sql load 数据 DataTables("客户2").AppendLoad(filter) ,<"地址:" & [客户2,地址]>,不正常打印,地址不能显示。 是什么原因呢?


检查了 地址列名一样
[此贴子已经被作者于2019/10/16 13:59:41编辑过]

--  作者:有点蓝
--  发布时间:2019/10/16 13:59:00
--  
<"地址:" & [@客户,地址]>


--  作者:swagger
--  发布时间:2019/10/16 14:29:00
--  
不知道为什么之前用这个格式一直正常打印 <"地址:" & [客户1,地址]>。 刚刚改为<"地址:" & [@客户1,地址]>,可以显示地址。但是又出现了一个新的问题,选择不同的订单时,打印出来还是固定某个客户地址,除非选择不同的客户行,譬如选择订单1(客户a)和订单2(客户b),显示都是客户a的地址。之前是可以选择不同的订单,然后显示对应订单的客户地址。
--  作者:有点蓝
--  发布时间:2019/10/16 14:31:00
--  
打印前使用代码定位一下需要打印的客户,选中这个客户所在的行即可
--  作者:swagger
--  发布时间:2019/10/16 14:40:00
--  
代码怎么写呢,之前就在currentchanged里面写了 ,选择订单可以正常定位客户。现在怎么不行了

If e.Table.Current IsNot Nothing Then
    Dim Filter As String = "客户id = \'" & e.Table.Current("客户id") & "\'"
   If DataTables("客户1").Find(filter) Is Nothing Then
        DataTables("客户1").AppendLoad(filter)
   End If
End If




--  作者:有点蓝
--  发布时间:2019/10/16 14:45:00
--  
定位用这种:http://www.foxtable.com/webhelp/topics/0553.htm


If e.Table.Current IsNot Nothing Then
    Dim Filter As String = "客户id = \'" & e.Table.Current("客户id") & "\'"
   If DataTables("客户1").Find(filter) Is Nothing Then
        DataTables("客户1").AppendLoad(filter)
   End If
Dim r As Integer
    r
 = 
Tables("客户1").FindRow(Filter\'从 第一行开始查找
    If r >= 0 Then \'如果找到的话
        
Tables("客户1").Position = \'定位到找到的行。
    End If
End If

--  作者:swagger
--  发布时间:2019/12/30 13:28:00
--  
多选行excel打印出现固定一个地址问题,<"地址:" & [@客户1,地址]>,选择多行excel打印时,地址还是一个地址,不会变化,这个怎么弄呢


Dim Book As New XLS.Book(ProjectPath & "Attachments\\出库单.xls")
Dim 
fl As String = ProjectPath & "Reports\\出库单.xls"
Book.Build() 
\'生成细节区
Book.Save(fl) 
\'保存工作簿
Dim 
Proc As New Process \'打开工作簿
Proc.File = fl
Proc.Start()



[此贴子已经被作者于2019/12/30 13:27:52编辑过]

--  作者:有点蓝
--  发布时间:2019/12/30 13:47:00
--  
直接引用本来就只能引用一行的。如果每一行数据对应不的地址
方法1.使用报表事件处理:http://www.foxtable.com/webhelp/topics/1955.htm
2、把客户和主表设置关联

--  作者:swagger
--  发布时间:2019/12/30 15:40:00
--  
设置关联还是不行,干脆只能在主表引用客户表的地址信息,虽然这样数据库会重复数据,不过也暂时能解决问题了。

另外,请教蓝老师一个问题,就是excel批量打印,选择多行时,关联明细表没加载怎么打印关联表?譬如订单和订单明细,初始不加载数据,点击订单行,订单明细才加载。
If DataTables("订单明细").Find(filter) Is Nothing Then
        DataTables("订单明细").AppendLoad(filter)
    End If

如果选择多行时,没有点击的订单行,打印出来的订单明细表是空内容的。这个该怎么弄呢?



--  作者:有点蓝
--  发布时间:2019/12/30 15:43:00
--  
1、如果不想重复保存数据可以使用表达式列。

2、直接从后台生成报表:http://www.foxtable.com/webhelp/topics/3233.htm