システム奮闘記:その81
OpenOfficeのBaseを活用したPDF見積書発行
(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接続が可能になった。
詳細は以下をご覧ください。
これでODBC接続が可能になった。
そして、PHP上で動く無償のPDF生成ソフトのFPDFがある。
これを使うと、Web上でPDFファイルが生成される。
ODBC接続とFPDFを組み合わせて使う事で、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で他のデータベースと連動可能 |
|
AS400上のデータベース(DB2)とODBC接続で連動可能だ。
|
BaseでAS400のデータの処理と表示ができるようになれば
以下の仕組みでPDF出力が可能になる。
BaseとAD400とのODBC連動で作るPDF帳票システム |
|
さて問題は独自外字なのだ。
OpenOfficeで独自外字を扱えないと、折角、AS400と連動できても
表示が文字化けしてしまえば、没ネタになってしまうからだ。
OpenOfficeで独自外字の処理
通常では、OpenOfficeで独自外字を入力すると
文字によっては文字化けを起こす。文字化けしない物もあります。
OpenOffice(Writer)に外字を入力する様子 |
|
独自外字が文字化ける様子 |
|
文字化けして、お花畑や、蝶々になっている。
うーん、能天気な人の頭の中の様子になっている感じ (^^;;
|
これを解消しないとダメなのだ。
どうすれば独自外字の文字化けが解消されるのか。
あるサイトをみたらOpenSymbolのフォントを削除する事が書いていた。
そこで実行してみた。
OpenSymbolの削除 |
|
c:\windows\fontsのフォルダに格納されている
OpenSymbolのフォントを削除するのだ。
|
すると・・・
一部の独自外字の文字化けが解消されたのらー!!
だが、まだ文字化けする外字があった。
しかし、私が取り組んだ時期が非常に良かった。
会津若松市が、OpenOfficeの導入についての話を
ホームページで公開している。
そこで独自外字についての話を読む事にした。
会津若松市「オープンオフィスとODF形式文書を導入しています」のサイト内の
外字が表示されないを読んでみる。
書いている事を、そのまま真似する。
外字フォントをOpenOfficeの設定ファイルなどが格納されている
フォルダーに複製する必要がある。
そこで、OpenOfficeの設定ファイルが格納されている場所で
「truetype」という名前のフォルダーを作成する。
フォルダー作成(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で表示できた様子 |
|
見事、成功!! (^^)
これで独自外字の表示に困る事がなくなった。
社内での普及に向けて1歩前進した。
早速、PDF化してみる。だが・・・
文字化けしてるやん (TT)
PDFに変換すると独自外字が文字化けしている様子 |
|
でも、これも会津若松市のサイトに解消法が書いてあったので
そのまま真似する。
DOSプロンプト画面で外字フォントの複製 |
copy /y c:\windows\fonts\eudc.tte c:\windows\fonts\eudc.ttf
|
EUDCは独自外字のフォントファイルだ。
同じフォルダー内への複製だ。
拡張子が「tte」から「ttf」に変わっているのに注意!
|
すると・・・
見事、成功 (^^)V
PDFへの変換後の独自外字の文字化けが解消された様子 |
|
会津若松市のお陰で独自外字がPDFで表示できた!!
福島県はすごい。会津若松はすごい!
IT先進大学で有名な会津大学がある。
そして会津若松市のOpenOfficeへの取り組み。
会津若松といえば白虎隊。近くの町には野口英世と猪苗代湖。
喜多方ラーメン。芦ノ牧温泉。凄く良い場所なのだ (^^)
東武伊勢崎線・浅草駅からJR会津若松駅まで線路がつながっているので
浅草から会津若松まで、のんびり鉄道の旅も良いかも。
ODBC接続でAS400とBaseの連動
iSeries Access for Windowsを使うと、Windows用の
ODBCドライバがインストールされる。
これを使うと、AS400とWindowsとの間でODBC連動が可能なるのだ。
早速、Baseを起動させる。
すると最初の画面が出てくる。
Baseのデータベースウィザード画面 |
|
「既存のデータベースに接続(X)」の所に印をつけて
ODBCを選択する。
|
次に登録されているODBCの選択画面になる。
登録されているODBCの選択画面 |
|
ここは青く囲んだ「ブラウズ(B)」を選択する。
登録されているODBCの一覧を見るためだ。
|
登録されたODBCの一覧を見る。
登録されたODBCの一覧 |
|
ここでは「AS400」だけが登録されているので、それを選択する。
あくまでも私の環境なのだが (^^;;
そして「OK」を押す。
|
するとユーザー認証の設定画面になる。
ユーザー認証の設定画面 |
|
接続先のAS400のユーザー名の所を記述して
「必須パスワード」の部分に印をつける。
そして「次へ(N)」を押す。
|
すると以下の画面が出てくる。
データベースを保存した後の処理の決定画面 |
|
データベースを保存した後に処理する内容を決める部分だ。
初期状態のままで良いので、そのまま「完了(F)」を押す。
|
現在、設定しているデータベース(Base)の設定内容を保存する
画面が出てくる。
データベース(Base)の設定内容を保存する |
|
ファイル名を指定して保存を行う。
|
保存が終わったら、Baseが開始される。
Baseが開始される |
|
認証部分を拡大 |
|
AS400への接続に必要な認証のための
ユーザー名とパスワードを入力する。
そして、Baseを開いている間、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文の自動生成を行うため、クエリー作成を選ぶ。
クエリー作成 |
|
すると、データ抽出に必要なテーブルの選択を行う。
テーブルの選択 |
|
|
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つ追加された |
|
「デザイン表示でレポート作成(G)」が追加されている。
|
もちろん「デザイン表示でレポート作成(G)」を選択する。
「デザイン表示でレポート作成(G)」を選択 |
|
するとレポート作成のための体裁編集の画面が出てくる。
レポート作成のための体裁編集の画面 |
|
橙色の部分がページヘッダーで、各ページの見出しの作成になる。
そして詳細は、明細出力になる。
|
でも、もっと細かい事ができる。
「レポートヘッダー」の編集だ。下図の緑の部分にあたる。
「レポートヘッダー」の編集が可能 |
|
これらを詳しく書くと以下の通りになる。
ヘッダーの意味する所 |
|
ページヘッダーは、ページの見出しなので社名やページ数などを載せる。
レポートヘッダーは、各明細の見出しなので、行ごとの明細を
見やすくするために線を入れるのが良い。
詳細は、明細部分の表示だ。
|
見積書の体裁を整えていく。
そして、販売関係の部長の所へ持っていって良いかどうか
見てもらう。
Baseの仕様と、うちの会社が考えている体裁との折り合いを
つけながら、何度か修正した。そして
ついに完成したのらー V(^^)V
これが完成した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接続」を読む
目次:システム奮闘記に戻る