今天的主角,VFP新报表设计器 TQ报表设计器

2023-08-21 18:09:22 浏览数 (2)

TQ报表设计器,也就是我说的 VFP OOP 报表设计器。

加菲猫注:作者xinjie

一 开发这个工具的诱因:

2018年,我在某软件公司任职时,负责搭建一个新的开发框架。在原有的系统中,所有的报表打印都是使用 80 引擎,鉴于 90 引擎的优异特性,以及考虑到今后可能的报表需求,我在其中引入了 90 引擎。但是,结果是我又屏蔽掉了 90 引擎的使用。

WHY?

我在设计过程中,发现两个致命的问题无法彻底解决:

1 无法在运行时屏蔽掉 VFP 报表设计器的某些菜单项

当我们的应用程序在执行时,可以使用 MODIFY REPORT 命令来打开一个未编译进 EXE 的报表,或者创建一个新的报表。如果我们的应用程序内部提供这样一个机制,那么,就可以在生产环境创建或者修改指定的报表。

但是,请注意,这是在生产环境!

有两种人员是潜在的该功能的使用者:软件维护人员和经授权的系统使用者。由于他们都不是职业程序员,所以,在操作过程中,难免会使用所需的菜单项,从系统运行安全角度考虑,我们有必要禁止他们使用一些固有的菜单项,但是,经过我一个个的比对,VFP 并没有提供全部的可用系统菜单名串。(可以使用 SYS(2013) 获得 VFP 所提供的所有系统菜单名串)

这样就变成了,如果你在生产环境提供创建或者修改报表的功能,那么,就相当于给应用软件内置了一颗不定时的炸弹,而且永远无法彻底“拆除”!

2 在不考虑安全的前提下,运行时的报表设计器,工具栏可能花屏

当我们的软件打开报表设计器时,最好的 UI 布局是同时将控件工具栏和布局工具栏同时打开,以便于操作者更方便的创建或者修改报表。恰恰是这个最佳的 UI 布局,导致了工具栏的花屏现象。解决方案丑陋的就像在一个蛋糕里裹进去一团屎一样的恶心,你需要用代码转换工具栏的焦点并再转换回去。而这并不向描述一样可以简单的实现。

一个 UI 可以丑陋,但绝对不可花屏!

二 契机

在我想明白为什么会有上述两种情况时,天降鸿运,Doug Hennig 开源了 OOPReports 项目(VFPX 项目组成部分之一)。虽然之前我也获得过某个版本的源代码,但是鉴于版权的问题,我迟迟无法正式的使用它。这是一个VFP的!面向对象的!报表的!引擎!

它可以直接读取 FRX 文件,并创建一系列的报表对象,而且可以将报表对象的属性完全正确的写入到 FRX 文件。

所有问题迎刃而解,我只需做一个 UI 来设计报表。

三 现状

鉴于个人无法言说的原因,这个项目从 2019 年夏天启动后,就在一年后陷入沉寂状态。再次启动是在 2023 年的五月底。经过将近三个月的研发,它已经初步成型。这个过程,回想起来,是一场噩梦。

由于 OOPReports 的设计初衷并不是要作为一个报表设计器的报表引擎,所以,为了实现可视化的报表设计器,需要对其中很多地方进行修改;由于 VFP 报表自身的复杂性,这些修改也许无法完全覆盖在需求层面的各种报表要求。这些都需要在实践中进行测试并逐步完善。

回到报表设计器本身,由于是完全的面向对象,所以不可能像 VFP 固有报表设计器一样及时的将所更改的信息回写到 FRX 文件中。这样,就造成了牵一发而动全身的局面,但是由于报表本身的特性,我无力进行 100% 的完整测试,所以,在使用过程中,出现的 BUG 只能见一个杀一个。因此,我对所有参与这个项目众筹的人员,额外提供一年的免费服务期以尽可能保证最终交付的实用效果。

四 TQ报表设计器的特性:

1. 一个相对现代的设计UI

2. 当同一报表需要在不同品牌的打印机,或者在不同的纸型,或者需要更改纸张方向时,不再是一件耗时的毫无意义的体力劳动,设计器本身会根据具体“属性”的变化,自动调整原有的报表布局并与原始状态尽可能的保持一致,将报表控件的位置调整降低到最低限度。

3 在单纯的设计报表时,设计器借鉴了 Office 的缩放概念,并在缩放后的状态下进行报表设计,这样,在设计很小的报表或者很大的报表时,可以将“纸张”在屏幕的可视设计区域中予以完整呈现。

4 此外,还借鉴了 Excel 中的一些概念,使之在创建中国式报表时,很容易的添加“表格”,并且在“表格”调整“行高”时,自动将“单元格”内的标签或者文本框居中对齐;在手动调整某带区的“列间距”时,自动调整其他不同带区内同一位置的“表格列”。

5 因为是一个独立的应用,所以,有限度的“所见即所得”照进现实。设计者可以在设计状态下,直观的观察到所设置“属性”的最终打印效果。

6 调整了页注脚带区和总结带区在设计器中的物理位置,使得在设计状态下,尽可能的与最终的预览和打印结果相吻合。

7 可以使用 OLE DB 连接来获取远程数据库中的数据。这样,报表设计器也就为在其他语言的使用带来真正的可能。目前提供的示例代码除 VFP 外,另有 VB6、VC 、VB.NET 和 C# 的示例调用代码,真实可用。

8 至少在理论层面,设计器是可以使用 Unicode 编码的数据作为报表的数据源。如果在测试过程中没有发现问题,那么,这个解决方案在不考虑原有系统改造难度的前提下,是可以应用到所有 VFP 所开发的应用系统,也补齐了 VFP 的最后一块短板。

五 未来计划实现的功能

1 可以很容易的在设计报表时添加注入二维码、条形码、图表这样的“控件”;

2 报表可以使用 JSON/XML 格式的数据源;

3 报表自身的安全保护机制(和 90 引擎的保持一致);

4 真正的所见即所得。

六 价格和下载地址:

下载地址:

https://github.com/vfp9/VFP-OOP-Report-Designer

https://hub.nuaa.cf/vfp9/VFP-OOP-Report-Designer

https://hub.njuu.cf/vfp9/VFP-OOP-Report-Designer

0 人点赞