万卷书>>电脑书籍>>程序设计>>pb程序设计>>PowerBuilder使用技巧集

WANJUANSHU.COM

彻底解决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 编 写 的 科 目 日 计 表 打 印程 序 附 在 这 里。

 

上一页 WanJuanShu.COM 下一页
WANJUANSHU.COM 万卷书