带有过滤器

时间:2017-01-19 12:21:42

标签: crystal-reports

Crystal Reports中有可能使用动态参数 - 参数的选项列表未在报告中修复和输入,而是从某个数据库表中获取。例如,这里描述:

https://www.youtube.com/watch?v=kuHs89yyuEc

我的问题是以这种方式创建的参数允许从表中选择所有值。

我想根据报告中的数据过滤它。

例如:我的报告代表发票。它按发票ID过滤为单个发票。参数允许选择发票的交货地点。但我不想在桌子上的所有交货地点进行选择。相反,我希望参数只显示发票中客户的交货地点。

我们说customer_id是报表中的公式字段,交付地点是

这样的表格
id    customer_id    street   city ...

是否可以按照我描述的方式过滤动态参数?

编辑: 也许一个简单的例子有帮助 我创建了一个包含两个表的测试数据库(我使用的是Sql Server):

CREATE DATABASE TEST 
USE TEST

CREATE TABLE [dbo].[DELIVERY_PLACE](
    [ID_DELIVERY] [int] NULL,
    [ID_CUSTOMER] [int] NULL,
    [ADDRESS] [varchar](50) NULL
) ON [PRIMARY]

INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (1, 1, N'Address A1')
INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (2, 1, N'Address A2')
INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (3, 2, N'Address B1')
INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (4, 2, N'Address B2')

CREATE TABLE [dbo].[CUSTOMER](
    [ID_CUSTOMER] [int] NULL,
    [NAME] [varchar](20) NULL
) ON [PRIMARY]

INSERT [dbo].[CUSTOMER] ([ID_CUSTOMER], [NAME]) VALUES (1, N'Customer A')
INSERT [dbo].[CUSTOMER] ([ID_CUSTOMER], [NAME]) VALUES (2, N'Customer B')

我使用这个数据库做了一个报告。你可以在这里得到它: https://www.sendspace.com/file/907wq9

报告过滤到CUSTOMER_ID = 1

DELIVERY_PLACE表通过外键将报告链接到CUSTOMER表:CUSTOMER_ID

我有一个从DELIVERY_TABLE获取地址的动态参数

但是它显示了所有地址,而我希望它只显示过滤到当前客户的地址

enter image description here

1 个答案:

答案 0 :(得分:0)

我应该将此作为评论发布,但我没有积分等。

根据我的理解,您需要连接CustomerID上的表。这将自动将客户链接到其地址。其次,您不需要参数来选择正确的客户地址,您应该将数据库字段地址放在DELIVERY_PLACE中。我没有你的数据库,所以如果两个表已经链接,我就缺乏知识。请右键单击databasefileds节点并显示sql查询..然后发布以便更好地理解。 您还可以将RecordSelection公式更改为{CUSTOMER.ID_CUSTOMER} = 1并{DELIVERY_PLACE.ID_CUSTOMER} = 1

这将根据表中的条目为每个客户显示两个地址。如果要在运行时从地址表中选择单个地址。你需要把它放在记录选择公式中说..      {DELIVERY_PLACE.ID_DELIVERY} = {?DeliveryPlace} 此外,最好将ID_DELIVERY提供给参数而不是完整地址。