中 国 人 民 银 行 云 南 省 分行 国 库 处
朱 云
---- 打 印 业 务 单据、 报
表, 历 来 是 金 融 业 务 类 应 用 软 件 开 发 的 重 点,一 般 可 占 整 个 工 作 量 的 三 分 之 一 左 右。 目 前 国 内 的
不少 软 件 开 发 工 具 在 这 方 面 做 了 大 量 的 工 作, 不 过 基 本上 是 基 于xbase 数 据 库 的 产
品,Client/Server 方 面 的 开 发 工 具几 乎 无 一 例 外 的 是 国 外 的 产 品, 例 如PowerBuilder、Delphi、Visual
Basic 等 等。 但 是 国 外 的 产 品 在 打 印 中 国 式 报 表, 特 别是 金 融 类 单 据、 报 表 功 能 十 分 微 弱。 这 是 国
外、 国 内的 国 情 不 同 所 致; 看 来 这 样 的 问 题 只 有 中 国 人 自 己 来想 办 法 解 决。 本 文 就 自 己 在 使
用PowerBuilder5.0 开 发 金 融 类业 务 软 件 过 程 中 积 累 的 打 印 金 融 单 据、 报 表 一 些 方 法作 些 介 绍, 就
打 印 中 国 式 报 表 的 问 题 做 点 探 索。
1 . 使 用 数 据 窗 口 打 印 的 优 点 及 其局 限
---- 数 据 窗 口 是powerbuilder
优 于 其 他 可 视 化 开 发 工 具 的 最 主 要 的 特 色。 它 可 以 使用 五 种 数 据 源:Quick Select,SQL
Select,Query,External,Stored Proceduce,并 提 供 了 一 系 列 预 定 义 的 表 现 风 格: 自 由 格 式、 统
计图、 网 格、 标 签、 分 组 报 告、 表 格、N-UP、 大 文 本、OLE2.0、交 叉 表。 对 于 每 一 种 风 格,PowerBuilder
都 提 供 了 标 准 的 报表 列( 标 题 列, 细 节 列, 总 计 列, 分 组 标 题 列, 分 组 脚注 列), 显 示 格 式、 排 序、 分 组
和 复 合 显 示 形 式( 如 一个 带 有 相 关 图 表 的 电 子 表 格 用 户 界 面)。
---- 一 般 来 说, 应用 软
件 主 要 分 为 数 据 录 入、 数 据 查 询、 数 据 修 改、 数据 打 印 等 功 能 模 块。 根 据 笔 者 的 开 发 经 验, 数 据 窗
口技 术 对 于 数 据 查 询、 修 改 类 的 窗 口, 有 明 显 的 优 越性。 对 于 数 据 录 入, 一 般 的 应 用 都 要 求 按 凭 证
的 式 样建 立 数 据 的 录 入 窗 口( 或 屏 幕), 使 用PowerBuilder 提 供 的用 户 自 定 义 对 象, 建 立 仿 凭 证 样
子 的 数 据 录 入 窗 口,并 不 是 一 件 困 难 的 事。 对 于 数 据 的 打 印, 如 果 是 仅 仅是 打 印 参 数 表 或 者 普 通 的
统 计 报 表, 数 据 窗 口 也 能 胜任。 但 是 对 于 复 杂 报 表, 尤 其 是 金 融 业 务 单 据、 报表, 虽 然 数 据 窗 口 提 供
了 组 合 风 格, 真 正 操 作 起 来,要 符 合 业 务 要 求, 真 让 任 何 开 发 人 员 望“ 表” 兴 叹 !
---- 以 金 融 行 业 常用
的“ 分 户 帐” 来 说, 余 额 必 需 逐 笔 滚 动, 本 页 的 余额 又 作 为 下 一 页 的 第 一 笔 数 据。 余 额 是 计 算 好 放
在 数据 库 中, 还 是 不 放 在 数 据 库 中, 而 在 需 要 查 询、 打 印时 再 计 算, 对 应 用 软 件 的 功 能 和 复 杂 性 有
很 大 的 影响。 在 数 据 库 设 计 时, 通 常 为 了 保 证 数 据 的 一 致 性、减 少 被 维 护 数 据 的 相 关 性, 数 据 库 的
表 中 只 保 留 了 基本 数 据, 所 有 的 小 计、 类 计、 合 计 项 目, 即 使 占 了 报表 的 一 行, 也 是 边 计 算 边 打 印
的。 这 类 打 印 问 题 数 据窗 口 就 不 能 解 决 了
2 . 与MS-EXECL 组 合 起 来 解 决 打 印 问 题
---- 这
是PowerBuilder 提供 的 一 种 补 救 措 施。 软 件 开 发 人 员 可 以 事 先 在 微 软 的EXECL 中 设 计 好 所 需 的 单
据、 报 表, 然 后 在PowerBuilder 的 应 用 软件 中, 将 单 据、 报 表 所 需 要 的 数 据, 边 计 算、 边 输 出给MS-EXECL,
用 户 在MS-EXECL 的 环 境 中, 检 查 无 误 后 即 可 打印。 由 于MS-EXECL 是 一 个 格 式 化 能 力 很 强 的 软 件,
可 以 解决 大 部 分PowerBuilder 处 理 不 了 的 单 据、 报 表。 但 是 这 样 的解 决 方 案, 必 需 具 备 一 定 的 条
件:
---- ① 应 用 软 件 用户 必
需 深 入 地 掌 握MS-EXECL 软 件。
---- ② 要 在 运
行PowerBuilder 的 同 时 运 行MS-EXECL 软 件, 相 应 地 要 增 加 电 脑 的 内 存。
---- ③ 打 印 的 资 料页 数
不 能 太 多, 必 需 在MS-EXECL 软 件 的 允 许 范 围 之 内。 特别 对 于“ 分 户 帐” 这 样 按 月 份 打 印 的 表, 一 个
营 业 部有 几 万、 几 十 万 条 数 据 是 很 平 常 的 事。 这 种 情 况 可 用以 下 笔 者 探 讨 的 方 法 解 决。
3 . 直 接 打 印 的 方 法
---- 直 接 打 印 的 方法,
就 是 利 用PowerBuilder 的 低 层 打 印 函 数 编 写 自 己 的 打 印程 序, 如 果 读 者 掌 握 了 以 下 几 个 为 数 不
多 的 低 层 打 印函 数 和 技 巧 后, 几 乎 和 使 用XBASE、PRO C 等 语 言 编 写 打 印程 序 没 有 什 么 差 别; 换 句 话
说, 读 者 如 果 正 在 用PowerBuilder 将 以 前 用XBASE、PRO C 等 应 用 软 件“ 升 级” 的 话, 将 打 印 程序 稍
加 修 改 后, 就 可 以 用 在PowerBuilder 中, 从 而 免 去 重 新编 写 打 印 程 序 的 麻 烦。
---- ⑴ PowerBuilder
的 低层 打 印 函 数 介 绍
----
PrintOprn(JobName) 打开 一 个 打 印 作 业, 该 函 数 返 回 作 业 号 的Long 型 值, 如 果发 生 错 误 返 回-1,
命 名JobName 参 数 是 可 选 的, 它 是 出 现 在打 印 队 列 的 名 字。
---- PrintClose (PrintJobNumber)
关 闭 一 个 打 印 作 业。
---- Print (PrintJobNumber,{
Position1,}Text{,Position2}) 把 文 本 行 送 入 打 印 作 业。 其 中Position1 是 以 千 分 之 一 英 寸 为
单 位 指 定 文 本 的 起 始 位 置 与 打印 区 左 边 界 的 距 离。 如 果 该 值 不 大 于 当 前 位 置, 将 从当 前 位 置 开 始
打 印 文 本。Position2 指 定 打 印 文 本 之 后, 打印 光 标 应 移 到 的 位 置。 只 有 在 打 印 光 标 没 有 超 出 该
点时, 它 才 会 移 动; 如 果 省 略Position2, 打 印 光 标 将 移 到 下一 行 的 起 始 位 置。 如 果 文 本 内 包 含 回 车
和 换 行 符, 字符 串 将 打 印 到 多 行 上, 而 定 位 值 将 被 忽 略。
----
PrintDefineFont(PrintJonNo,FontNo, FaceName , Height, Weight,&
FontPictch,FontFamily, Italic,Underline) 定 义 打 印 字 符 串 时 所 用 的 字 体。 其 中,Font No
是 唯 一 标 识 字 体 的 从 1 到 8 的 数。FaceName 是 一 个 包 含 打印 机 所 支 持 字 样( 例
如,Prestige20Cpi) 的 字 符 串。 字 体 的Height 以 以 千 分 之 一 英 寸 为 单 位。Weight 是 字 型 的 笔 划 宽
度(即 字 符 有 多 厚), 粗 体 为700, 正 常 体 为400。FontPictch 和 FontFamily 是 进 一 步 定 义 字 体 样 式
的 枚 举 类 型。FontPictch 可以 是Default! ,Fixed!,Variable。FontFamily 可 以 是AnyFont
!,Decorative !,Modern!,Roman!,Swiss!。Italic 和Underline 是 布 尔 型 值, 分 别 指定 字 体 是 否
为 斜 体 或 加 下 划 线。
----
PrintSetFont(PrintJonNo,FontNo) 设 置 以 前 定 义 的 字 体 号 成 为 打 开作 业 的 当 前 字 体 号。
---- ⑵PowerBuilder
直 接打 印 法 打 印 程 序 的 过 程:
---- ① 打 开 一 个 打印 作
业。
---- ② 定 义 打 印 字符 串
时 所 用 的 字 体。
---- ③ 有 检 索、 计算、 格
式 化 文 本 功 能, 由 循 环、 判 断 等 语 句 组 成 的 打印 体, 可 以 由Xbase、C 等 打 印 程 序 移 植 而 成。
---- ④ 关 闭 一 个 打印 作
业。
---- 应 该 特 别 注意, 定
义 打 印 字 符 串 时 所 用 的 字 体, 必 须 每 种 字 体 用一 条 语 句。 每 一 次 定 义 的 字 体 只 在 本 次 打 印 作 业 中
有效, 换 句 话 说 每 打 开 一 个 打 印 作 业 都 必 须 重 新 定 义 字体。 另 外 如 果 不 关 闭 打 印 作 业, 则 打 印 机 不
能 打 印 任何 结 果, 并 且 也 影 响 下 一 次 打 印 作 业。
---- ⑶ 具 体 的 例 子
---- 以 银 行 常 用 的科 目
日 计 表 为 例, 为 了 简 化, 注 意 表 格 只 是 示 意 图, 不涉 及 到 字 体 的 变 化。 数 据 表 的 数 据 结 构 只 是 其 中
的 主要 部 分, 数 据 假 定 已 经 按 科 目 代 码 排 过 序。 为 了 便 于比 较, 程 序 没 有 进 行 优 化, 尽 量 使 用 同 名
变 量, 这 些变 量 在 两 个 程 序 中 的 作 用 基 本 相 同。
---- 中 国 人 民 银 行XX
分 行 科 目 日 计 表
---- 由 以 上 两 个 程序 可
以 看 出, 除 了 读 取 数 据 库 数 据 的 方 式 不 同, 以 及编 程 用 的 具 体 语 言、 函 数 有 一 定 的 差 别 以 外, 大 部
分差 别 不 大, 转 换 并 不 困 难。 如 果 是 用ORACLE 的PRO C 编 写 的打 印 程 序, 与PowerBuilder 编 写 的 差
别 更 小, 转 换 更 为 容易; 所 以 这 里 没 有 将ORACLE 的PRO C 编 写 的 科 目 日 计 表 打 印程 序 附 在 这 里。
|