|
实用技巧
彻 底 解 决PB 打 印 金 融 业 务 单 据 方 法
中 国 人 民 银 行 云 南 省 分 行 国 库 处
朱 云
----
打 印 业 务 单 据、 报 表, 历 来 是 金 融 业 务 类 应 用 软 件 开 发 的 重 点, 一 般 可 占 整 个 工 作 量 的 三 分 之 一 左 右。 目 前 国 内 的 不 少 软 件 开 发 工 具 在 这 方 面 做 了 大 量 的 工 作, 不 过 基 本 上 是 基 于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 编 写 的 科 目 日 计 表 打 印 程 序 附 在 这 里。
|