システム奮闘記:その81

OpenOfficeのBaseを活用したPDF見積書発行



Tweet
(2009年9月12日に掲載)
はじめに

 うちの会社、基幹業務システムにAS400を使っている。
 今回は、AS400とWindowsXPパソコンの間をODBC接続を行って
OpenOfficeのBaseを使ったPDFでの見積書発行の話をしていきます。

 OpenOfficeのバージョンは3.1を前提に書いています。

PDF見積書の需要が出てきた

 うちの会社、基幹業務にAS400を使っている。  見積書もAS400で入力し、AS400専用のプリンタから出力している。  出力した見積書をFAXや郵送して、お客さんの所へ届けている。  だが、インターネットの発達で  メールで見積書が欲しい  エクセルで見積りが欲しい  というお客さんが出てきた。  AS400で入力した見積書のデータをエクセルやPDFに 加工できなかったため、スキャナーで取り込んでメールで送ったり、 営業マンが独自でエクセルで作成したりするようになった。

営業マンがエクセルで見積書を作成する際の問題点

 営業マンが独自で見積書を作成すると以下の問題が起こる。
営業マンがエクセルで見積書を作成する際の問題点
(1)
データの管理

AS400上で作成すれば、一括管理ができるので、いつでも取り出せる。
しかし、各人がエクセルで作成すると、見積書のデータが
各人のパソコンに保管されるため、データの管理ができなくなる。
(2)
作成者以外、保管場所がわからなくなる

AS400の場合、一括管理しているため、誰でも必要時に出力できる。
そのため作成者が不在中に、お客さんから再発行を依頼されても対応可能だが
エクセルで作成した場合は、作成者しか保管場所を知らない場合があるため
お客さんから再発行の依頼が来ても対応できない問題がある。
(3)
営業マンの手間がかかる

AS400に見積書作成ができるのに、わざわざエクセルで作成となれば
余分に手間がかかる。そして自分で管理しないといけなくなる。
どこに保管したのか、忘れてしまっては大変だ。
(4)
改竄の危険性がある

エクセルの場合、相手先での書き換えが可能になるため、性悪説で考えると
中身の改竄の恐れもある。

 以上、エクセルで作成する場合の問題点なのだ。

 だが自前ではAS400との連動ができなかった。
 そして、AS400と連動させて帳票を作成させるソフトを購入したくても
稟議を上げる度に・・・

 高い! 却下!

 だった。
 なので、何もできなかった日々が続いた。


AS400とODBC接続が可能になる

 2006年、AS400の老朽化のため、新しいAS400に買い替えになった。  そしてAS400とLinux、AS400とWindowsがODBC接続が可能になった。  詳細は以下をご覧ください。
AS400とLinuxの連動の話と、システム奮闘記
その51 AS400とLinuxとの連動に挑戦

この時はODBC接続が物理的にできない状態だったため
失敗に終わってしまったが、収穫は大きかった。
その56 AS400とLinuxをODBCで接続(iSeries Access for Linux)

ODBC接続を利用したAS400とLinuxの連動の成功の話。

 これでODBC接続が可能になった。

 そして、PHP上で動く無償のPDF生成ソフトのFPDFがある。
 これを使うと、Web上でPDFファイルが生成される。

 ODBC接続とFPDFを組み合わせて使う事で、PDF帳票システムが構築できる。
 以下のようなシステムを構築した。

AS400とLinuxの連動によるPDF帳票出力システム
AS400とLinuxの連動を利用したPDF帳票システム
AS400とLinuxとのODBC接続での連動と、無償のPDF生成ソフトFPDFを
組み合わせて、PDF帳票システムが完成した。

詳しくは「システム奮闘記:その55」(FPDFでPDF帳票システム構築)
をご覧ください。

 これで一見、全てが解決したかに見えた。
 でも、大きな問題が立ちはだかっていた。それは・・・

 独自外字の存在なのらー (--;;

 これが頭の痛い問題なのだ。
 なぜなら、このシステムだと独自外字をPDF化した場合

 文字化けするのらー (TT)

 というわけで、作成できる帳票類が制限されてしまう。

独自外字の問題

 独自外字という物は麻薬みたいな物だ。  パソコン上で用意されていない文字を使ったり、業務で使う独自の記号を 使いたい場合は、独自文字という形で作成する事ができる。  しかし、他のコンピューターでは読めない、処理できないの問題があり 閉じた環境でしか使えない。  便利な半面、多用すると互換性がとれなくなる。  実は・・・  うちの会社は独自外字だらけ (TT)  だった。
外字エディタを開くと、独自外字だらけの実態
うちの会社で使っている独自外字の一部の表
あくまでも社内で使っている独自外字の一部です。
かなり多用している上、独自外字がないと成り立たない状態です。

 独自外字を多用する理由。
 それは、私が入社する遥か以前からの根深い問題があった。

独自外字を多用したわけ
私が入社する遥か以前の話。AS400を導入した時、
ディスク容量の制限などの関係で、1フィールドの文字数を抑えていた。
そのため、全角1文字の所に、2文字、3文字分の情報を載せるため
外字を使わざる得なかった。
当時はAS400と他のシステムが連動するとは夢にも思っていなかったため
便利な外字を麻薬のように使っていたのだ。
 

 頭の痛い問題だが、下手にAS400のデータベースのフィールドの
文字数を変更すると、入力画面などへの影響が出るため
安易な変更ができない。

 身動きがとれない状態なのだ。

PDFLib、TCPDFに挑戦するが・・・

 PDFファイル生成のソフトとして有償のPDFLibと 無償のTCPDFがある。  両方とも、ひと工夫すると独自外字の表示が可能になる。  だが・・・  LinuxとAS400間のODBCドライバーに問題があった!  PDFLib、TCPDFで独自外字を表示させる時、 文字コードはUTF-8にする必要がある。  だが、私が使っている環境でODBCドライバの設定で UTF-8の文字コードでLinux側に落し込むと、 一部、文字列が欠損したりする。
CentOS5.3とAS400とのODBC接続で
文字コードをUTF-8における欠損の様子
[suga@server]$ isql AS400 ID PASSWORD
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> SELECT * FROM (マスターファイル)
+-------+-------+---------------+----------------+---------+---------+-----------+-----------+
| ******| ******| ******        | ******         | ******  | ******  | ******    | ******    |
+-------+-------+---------------+----------------+---------+---------+-----------+-----------+

(途中、省略)

| XXXX  | YY    | 菅  雄  | スガ ユ | 0       | 0       | 0         | 0         |

(途中、省略)

+-------+-------+---------------+----------------+---------+---------+-----------+-----------+
SQLRowCount returns -1
AAA rows fetched
SQL>
青い部分に注目。
私の名前が「菅 雄一」なのに「菅 雄」で切れている (^^;;

 上記のような問題が出るのだ。
 CentOS5.X系だけでなく、OpenSuSE10.X系でも、OpenSuSE11でも出る。

 AS400とLinuxとの間のODBCドライバで、文字変換を行う際には
Linux側のiconvが使われているらしい(確証は得ていません)が
iconvのバージョンの違いが原因とも思えにくい。


 今までのPDF帳票は、SJISにしているため問題なかったが
UTF-8だと問題が出てくる。

 前に進まぬ・・・ (--;;

 そのため断念せざる得なかった。


OpenOfficeのBaseに注目

 PDF帳票やPDF見積書ができない状態が続く。  そんな中、OpenOfficeに目がいくようになった。  OpenOfficeの特徴の1つにPDF生成がある。  ワード、エクセルなら有償のソフトを別途で購入する必要があるが OpenOfficeは無償で付属している。  しかし、ワード、エクセルとの表示の互換性や 使い勝手の違いなどで、OpenOfficeの導入には抵抗があり、 思うように進んでいない。  企業での導入事例として、アシストや住友電工が大々的に 事例紹介されているだけに  私も目立ちたいのらー!!  という感じで、悶々とした物があった。  そんな中、ふと思った。  OpenOfficeのBaseを使えば、ええかも!  「善は急げ」なので、早速、取り掛かる事にした。  BaseにはODBCで他のデータベースとの連動が可能にする機能がある。
BaseはODBCで他のデータベースと連動可能
BaseはODBCで他のデータベースと連動可能
AS400上のデータベース(DB2)とODBC接続で連動可能だ。

 BaseでAS400のデータの処理と表示ができるようになれば
以下の仕組みでPDF出力が可能になる。

BaseとAD400とのODBC連動で作るPDF帳票システム
BaseとAD400とのODBC連動で作るPDF帳票システム

 さて問題は独自外字なのだ。
 OpenOfficeで独自外字を扱えないと、折角、AS400と連動できても
表示が文字化けしてしまえば、没ネタになってしまうからだ。

OpenOfficeで独自外字の処理

 通常では、OpenOfficeで独自外字を入力すると 文字によっては文字化けを起こす。文字化けしない物もあります。
OpenOffice(Writer)に外字を入力する様子
Writerに独自外字を入力する様子
独自外字が文字化ける様子
Writerで独自外字が文字化けしている様子
文字化けして、お花畑や、蝶々になっている。
うーん、能天気な人の頭の中の様子になっている感じ (^^;;

 これを解消しないとダメなのだ。
 どうすれば独自外字の文字化けが解消されるのか。

 あるサイトをみたらOpenSymbolのフォントを削除する事が書いていた。
 そこで実行してみた。

OpenSymbolの削除
OpenSymbolの削除
c:\windows\fontsのフォルダに格納されている
OpenSymbolのフォントを削除するのだ。

 すると・・・

 一部の独自外字の文字化けが解消されたのらー!!
 だが、まだ文字化けする外字があった。


 しかし、私が取り組んだ時期が非常に良かった。
 会津若松市が、OpenOfficeの導入についての話を
ホームページで公開している。

 そこで独自外字についての話を読む事にした。
 会津若松市「オープンオフィスとODF形式文書を導入しています」のサイト内の
外字が表示されないを読んでみる。

 書いている事を、そのまま真似する。


 外字フォントをOpenOfficeの設定ファイルなどが格納されている
フォルダーに複製する必要がある。
 そこで、OpenOfficeの設定ファイルが格納されている場所で
「truetype」という名前のフォルダーを作成する。

フォルダー作成(WindowsXP)
WindowsXPでフォルダー作成
C:\Program Files\OpenOffice.org 3\share\fontsのフォルダに
「truetype」という名前のフォルダーを作成する。
「truetype」のフォルダー作成(WindowsXP)
フォルダー作成後

 そして作成したフォルダーに外字フォントを複製する。

DOSプロンプト画面で外字フォントの複製
copy /y c:\windows\fonts\eudc.tte "C:\Program Files\OpenOffice.org 3\share\fonts\truetype\eudc.ttf"
EUDCは独自外字のフォントファイルだ。
これをOpenOfficeのフォルダーに複製している。
拡張子が「tte」から「ttf」に変わっているのに注意!

独自外字がWriterで表示できた様子
独自外字がWriterで表示できた様子

 見事、成功!! (^^)

 これで独自外字の表示に困る事がなくなった。
 社内での普及に向けて1歩前進した。

 早速、PDF化してみる。だが・・・

 文字化けしてるやん (TT)

PDFに変換すると独自外字が文字化けしている様子
PDFに変換すると独自外字が文字化けしている様子


 でも、これも会津若松市のサイトに解消法が書いてあったので
そのまま真似する。

DOSプロンプト画面で外字フォントの複製
copy /y c:\windows\fonts\eudc.tte  c:\windows\fonts\eudc.ttf
EUDCは独自外字のフォントファイルだ。
同じフォルダー内への複製だ。
拡張子が「tte」から「ttf」に変わっているのに注意!

 すると・・・

 見事、成功 (^^)V

PDFへの変換後の独自外字の文字化けが解消された様子
PDFへの変換後の独自外字の文字化けが解消された様子

 会津若松市のお陰で独自外字がPDFで表示できた!!
 福島県はすごい。会津若松はすごい!
 IT先進大学で有名な会津大学がある。
 そして会津若松市のOpenOfficeへの取り組み。

 会津若松といえば白虎隊。近くの町には野口英世と猪苗代湖。
 喜多方ラーメン。芦ノ牧温泉。凄く良い場所なのだ (^^)

 東武伊勢崎線・浅草駅からJR会津若松駅まで線路がつながっているので
浅草から会津若松まで、のんびり鉄道の旅も良いかも。

ODBC接続でAS400とBaseの連動

 iSeries Access for Windowsを使うと、Windows用の ODBCドライバがインストールされる。  これを使うと、AS400とWindowsとの間でODBC連動が可能なるのだ。  早速、Baseを起動させる。  すると最初の画面が出てくる。
Baseのデータベースウィザード画面
Baseのデータベースウィザード画面
「既存のデータベースに接続(X)」の所に印をつけて
ODBCを選択する。

 次に登録されているODBCの選択画面になる。

登録されているODBCの選択画面
登録されているODBCの選択画面
ここは青く囲んだ「ブラウズ(B)」を選択する。
登録されているODBCの一覧を見るためだ。

 登録されたODBCの一覧を見る。

登録されたODBCの一覧
登録されたODBCの一覧
ここでは「AS400」だけが登録されているので、それを選択する。
あくまでも私の環境なのだが (^^;;
そして「OK」を押す。

 するとユーザー認証の設定画面になる。

ユーザー認証の設定画面
ユーザー認証の設定画面
接続先のAS400のユーザー名の所を記述して
「必須パスワード」の部分に印をつける。
そして「次へ(N)」を押す。

 すると以下の画面が出てくる。

データベースを保存した後の処理の決定画面
データベースを保存した後の処理の決定画面
データベースを保存した後に処理する内容を決める部分だ。
初期状態のままで良いので、そのまま「完了(F)」を押す。

 現在、設定しているデータベース(Base)の設定内容を保存する
画面が出てくる。

データベース(Base)の設定内容を保存する
データベース(Base)の設定内容を保存する
ファイル名を指定して保存を行う。

 保存が終わったら、Baseが開始される。

Baseが開始される
Baseが開始される
認証部分を拡大
ODBC接続のための認証画面
AS400への接続に必要な認証のための
ユーザー名とパスワードを入力する。
そして、Baseを開いている間、AS400への接続の度に
認証画面が出てくると、うっとおしいので
「セッション終了時までパスワードを記憶」に印をつけておく。

 AS400に接続を行うと、AS400のデータベースが表示される。

AS400のデータベースが表示される
AS400のデータベースが表示される
AS400のデータベースが表示される。
このデータベースを活用して、見積書などのデータを抽出し
加工・発行を行うのだ。

 これでODBCを活用したAS400とBaseとの連動ができるようになった。
 次に見積書の出力形式の作成だ。


OpenOfficeのBaseでPDF見積書の作成

 OpenOfficeでの独自外字の使用の問題が行えるようになり AS400とのODBC接続ができるようになった。  これで条件が整った。  あとは、Baseの設定でSQLの記述と見積書の体裁を整えれば良いのだ。  でも、Baseの使い方がわからへん (--;;  そこで以下の本を申請して購入。  「OpenOffice.org3」(鎌滝雅久、あわしろ いくや、松宮哲、松井幹彦・著 株式会社グッデイ:中本崇志、榎 真治・監修:翔泳社)  そして読みはじめる事にした。  該当のデータベースのテーブル(AS400だとマスターファイル)を選択した後は 出力するデータを作成するために、SQL文を記述する必要がある。  SQLを記述しなくてもGUI環境で、ある程度のテーブルの関連づけや 条件設定を行い、SQL文を自動生成する事も可能だ。  そこでSQL文の自動生成を行うため、クエリー作成を選ぶ。
クエリー作成
Baseのクエリー作成

 すると、データ抽出に必要なテーブルの選択を行う。

テーブルの選択
Base上のテーブルの選択画面
Base上のテーブルの選択画面の拡大
AS400のテーブル(物理ファイルと論理ファイル)が出てくる

 そしてデータの出力にテーブルやクエリーを選択する形なる。
 接続先は、AS400なのでテーブルは物理ファイルと論理ファイルになる。

選択したテーブルやクエリーが出てくる
選択したテーブルやクエリーの表示
選択した物理ファイル、もしくは論理ファイルが表示される。

 次にテーブル同士の関連づけを行う。
 SQL文でいう「WHERE」以降の部分で、一致させたいフィールド同士を
結びつける作業だ。

フィールド同士を結びつける
フィールド同士の連結

 そして拾い上げるフィールドを選択する。

拾い上げるフィールドの選択画面
拾い上げるフィールドの選択画面
ここでは3フィールドを拾い上げてみた。
実際には、見積書のデータなので、もっと多くのフィールドを
拾い上げているのだが、詳しい事は内緒 (^^)

 必要なフィールドを拾い上げて、条件も設定完了すれば
作成したクエリーの保管を行う。

作成したクエリーの保管
作成したクエリーの保管
クエリー名の設定
クエリー名の設定
クエリー名の設定(拡大図)
クエリー名の設定の拡大図
ここではクエリー名を初期値の「クエリー1」にした。

 すると、作成したクエリーが保管された状態になる。

作成したクエリーが保管された状態
作成したクエリーが保管された

 もちろん、SQLの自動生成の方法では不十分なので、
SQL文を手動で書き換えていく必要があるが、ここでは割愛します。

 詳細に書きなさいと言われる方に主張します。

 Baseの専門サイトじゃないもーん (^^)

 と逃げる事にします。


レポートの作成

 いよいよ見積書の作成に取り掛かる。  レポートウィザード機能を使って、明細出力を行うのだ。  早速、レポートウィザード機能を使ってみる事にした。
レポートウィザード機能を使ってみる
レポートウィザード機能の使用

 すると、出力させたい項目(フィールド)の選択画面になる。

出力させたい項目(フィールド)の選択画面
出力させたい項目(フィールド)の選択画面

 それが終わると次に、フィールドに対しての項目名をつける画面になる。

フィールドに対しての項目名をつける画面
フィールドに対しての項目名をつける画面

 ここから、色々、選択画面が出てくるのだが割愛します。

 最後に、出力画面にたどり着く。

出力画面
出力画面
接続しているデータベースから、加工したデータを取り出し
それを表示させた画面なのだ。

 見積書の作成を行いたいのだが、自由に体裁を整える事が困難で、
自由度が低いのが問題だ。

 とても見積書作成に向いてへん (TT)

 と思った。

 でも、ここまで来たのだから、簡単に諦めるわけにはいかない。
 ふとOpenOfficeの本を見ると、レポート作成のために
非常に便利なプラグインがある事が書いていた。

 これはいけるかも!

 と思った。
 「善は急げ」なので、早速、試してみる事にした。

プラグイン(Sun Report Builder)のインストール

 OpenOffice3.1の場合、Baseを初期設定の状態では、レポート作成が 上手にできない問題がある。  そこで「Sun Report Builder」というプラグインを インストールする必要がある。  プラグインをダウンロードする。  http://extensions.services.openoffice.org/project/reportdesign/
ダウンロードしたプラグイン
ダウンロードしたプラグイン
このプラグインのファイルをクリックすると
インストールが開始される。

 クリックすると次の画面になる。

インストール開始の有無の確認画面
インストール開始の有無の確認画面
ここではインストールを開始するため「OK」を押す。

 するとライセンス関係の画面が出てくる。

ライセンス関係の画面
ライセンス関係の画面
この文面を全て見る。といってもスクロールさせるだけで良い。
下までスクロールしたら「OK」のボタンが浮き出てくるので
「OK」(了解)すれば良い

 するとインストールが開始される。

インストール進行中
インストール進行中の画面

 インストールが終了すると次の画面が出てくる。

インストール完了後の画面
インストール完了後の画面
プラグインのインストールが完了すると
プラグインの追加・更新・削除の画面が出てくる。
今回はインストールが目的であり、それが完了したので
「閉じる」を選ぶ。

 これで準備が整った。


PDF見積書の体裁の作成

 プラグインを入れたので、いよいよ見積書の体裁の作成だ。  プラグインを入れた事で、レポート作成の方法が1つ追加された。
レポート作成の方法が1つ追加された
レポート作成の方法が1つ追加された
「デザイン表示でレポート作成(G)」が追加されている。

 もちろん「デザイン表示でレポート作成(G)」を選択する。

「デザイン表示でレポート作成(G)」を選択
「デザイン表示でレポート作成(G)」を選択

 するとレポート作成のための体裁編集の画面が出てくる。

レポート作成のための体裁編集の画面
レポート作成のための体裁編集の画面
橙色の部分がページヘッダーで、各ページの見出しの作成になる。
そして詳細は、明細出力になる。

 でも、もっと細かい事ができる。
 「レポートヘッダー」の編集だ。下図の緑の部分にあたる。

「レポートヘッダー」の編集が可能
「レポートヘッダー」の編集が追加される

 これらを詳しく書くと以下の通りになる。

ヘッダーの意味する所
ページヘッダー、レポートヘッダーの解説
ページヘッダーは、ページの見出しなので社名やページ数などを載せる。

レポートヘッダーは、各明細の見出しなので、行ごとの明細を
見やすくするために線を入れるのが良い。

詳細は、明細部分の表示だ。

 見積書の体裁を整えていく。
 そして、販売関係の部長の所へ持っていって良いかどうか
見てもらう。

 Baseの仕様と、うちの会社が考えている体裁との折り合いを
つけながら、何度か修正した。そして

 ついに完成したのらー V(^^)V

 これが完成したPDF見積書だ。

完成したPDF見積書
PDF見積書
黒塗りの所は公開できませんので、どんな風な物かは
ご想像にお任せします (^^) 赤く囲んだ部分が独自外字を使っている部分だ。 「DX」や「155」や「11月」など2バイト文字として使っている。 あと金額の部分で3桁ごとに「,」(カンマ)を入れたので 見積書らしくしているのだ (^^)

 早速、営業所に連絡メールを流した。
 すると、PDF見積書の依頼をしてくる営業所があった。

 今までは発行した見積書をスキャナーで取り込んで
画像データやPDFで送ったり、Excel(エクセル)で作成していた物が
簡単に出力できるので、便利になった。


 でも、まだ問題が残っている。
 それは・・・

 私のパソコン以外では生成できないのらー!! (^^;;

 OpenOffice自体、私を含めて数人の社員しか使っていない上、
Baseの操作部分の説明が必要な事から、他の社員には導入していない。

 そのため私が不在の時には発行できない問題点が残っているが
いずれBaseが改良されて、MS-Accessのようにボタン1つで
簡単に出力できるようになれば、社内でも広がると思う。


まとめ  以前からAS400で作成した見積書をメールで送信できないかという 依頼があったものの、技術的な面や、費用面の問題があり 全く実現しない状態が続いていました。  2006年にAS400の買い替えとSQL開発キットのお陰で AS400とWindows、AS400とLinuxがODBC接続が可能になり OpenOfficeの発展による独自外字の表示問題の解消や レポート作成の自由度を上げるプラグインの登場により 実現化する事ができました。  「果報は寝て待て」ではないですが、100万円越えるような ソフトしかない場合は、無理に導入するよりも 辛抱強く待って、時期が来たら、無償や低価格のソフトの組み合わせで 大幅経費削減ができると思います。  少しでも、今回の話が、OpenOfficeの導入事例として お役に立てれば幸いです (^^)

次章:「LinuxとCUPSでプリンターサーバー構築」を読む
前章:「ヤマハYMS1-VPNで社外から社内へVPN接続」を読む
目次:システム奮闘記に戻る

Tweet