VFP - 来自表单的控制报告

时间:2011-01-19 08:08:28

标签: crystal-reports visual-foxpro

iam使用VFP 9.0 ...我发了一张发票报告,我想知道的是如何通过更改表单中的组合框来更改报告的内容。或者能够在报告中使用select和where子句...任何帮助将不胜感激:)

为澄清而编辑(根据评论而非直接添加问题)

+-----------------+       +-------------------------+
|  Contract Form  |       |   Invoice Form          |
|                 |       |                         |
|                 |       | radioCustomer           |
| btnInvoiceForm -------> |    comboCustomersList   |
+-----------------+       | radioContract           |
                          |    comboContractsList   |
                          |                         |
                          | btnPreviewReport        |
                          +-------------------------+

如果我点击预览发票按钮,则显示合约表中客户ID(FK)=的所有记录到从组合框中选取的ID。

如果我从单选按钮中选择合同,合同组合框将起作用,显示合同ID列表,运行报告然后会显示合同表中的记录,其中合同ID =从中挑选的ID组合框......

1 个答案:

答案 0 :(得分:0)

我编辑了这条消息,希望能够更好地理解你的表格布局,并分别启用/禁用相应的单选按钮组合框控件。我认为无论显示各自的内容,你都需要绘制两个不同的报告,然后根据单选按钮设置调用每个报告...例如在“btnPreviewReport”对象中点击事件...我已经粗暴 - 在样品上......

if not empty( Thisform.radioControl.radioCustomer.Value )
   */ Customer radio button was selected
   xCustomerID = comboCustomersList.Value

   */ Run your Query
   select ... from YourTable where ... into cursor C_SampleCustomerData

   */ Run the report
   report form YourCustomerReport preview

else 
   */ Contract radio button was selected

   */ Customer radio button was selected
   xContractID = comboContractsList.Value

   */ Run your Query
   select ... from YourTable where ... into cursor C_SampleContractData

   */ Run the report
   report form YourContractReport preview
endif 

同样,我从你的描述中尝试了最好的表格。

编辑 - 第二条评论澄清......

VFP报告的好处是它们不需要在数据环境中任何硬DBF()。但是,最好将数据字段设置为您希望具有的Alias.Field引用。因此,如果您查询客户报告的数据应始终具有相同的预期别名结果...

ex:
// pre-close in case the alias we want was already left open previously
use in select( "C_CustomerResults" )
select c1.*;
   from YourCustomerTable c1;
   where c1.ID = SomeChosenID;
   into cursor C_CustomerResults readwrite 

Then, in your report, have all your fields to something like

C_CustomerResults.FirstName
C_CustomerResults.LastName
C_CustomerResults.OtherField

此示例使用了一个长别名,但仅用于说明处理。

我会为你的“合同”结果别名做类似的事情。只要该别名正在使用中,报告将针对当前正在使用的表运行。报告中没有任何花哨,没有其他准备,没有数据环境设置......

通过预先查询报告中的数据样本,可以帮助您“粗略化”报告的布局。然后,完成表单以运行查询并显示报告,您就完成了。

编辑 - 修订评论后续行动

是...对于您的客户发票有多行,同样的事情......但是您的报告有一个标题区域,用于您只想在页面顶部显示一次的内容,以及您想要的详细信息区域显示发票“每个订单项”的内容,以及显示任何总计的报表页脚。根据复杂程度,您可以在报告中添加其他“数据组”,但现在就从此开始。听起来你需要在展开它之前先让你的脚湿透。

如果VFP是您的开发平台,则另一个在VFP上专门拥有专家的网站位于www.UniversalThread.com。他们也支持其他论坛,但在VFP中,他们每天会得到100多个问题......