Python(パイソン)で印刷出力に成功しました。
Python.400 フレーム・ワークを開発中の
弊社ではPythonで DB2/400データ・ベースを
レコード・レベルで直接読んで印刷することに
成功しました。
_
実行は
商品マスター一覧表 (PSHOHIN2)
選択項目を入力して,実行キーを押してください。
商品コード . . . . . . . . . . から
. . . . . . . . . . . . . . . 9999999999 まで
出力 . . . . . . . . . . . . . *PRINT *PRINT, *PDF, *
のようにしてコマンドで範囲指定して
SpoolライターVer5.0が導入されていれば 印刷結果のスプールを
PDFとして出力することができます。
_
_
■ 印刷出力のPythonソース
from as400 import *
Open("QTROBJ/PSHOHIN", "PRINTER") # 商品マスター一覧表
Open("QTRFIL/SHOHINL1", "FILE") # 品種コード順商品マスターLF
Open("QTRFIL/HINSHU", "FILE") # 品種マスターファイル
PRTHEAD.SYSNAM = "Sxxxxxxx"
PRTHEAD.LINEA = "-" * 80
PRTHEAD.LINEB = "-" * 80
SHOHINR.SHSCOD = LOVAL
SHOHINR.SHCODE = LOVAL
(SHOHINR.SHSCOD + SHOHINR.SHCODE).SetLL(SHOHINL1)
GOKEI = 0
while True:
if SHOHINL1.Read() == EOF:
break
SHOHINL1.SHSCOD.Chain(HINSHU)
SHOHINL1.SHSCOD.SetLL(SHOHINL1)
SHOKEI = 0
PRTHEAD.Write()
while True:
if SHOHINL1.SHSCOD.ReadEQL(SHOHINL1) == EOF:
break
DETAIL.SHCODE = SHOHINL1.SHCODE
DETAIL.SHNAME = SHOHINL1.SHNAME
DETAIL.SHTANK = SHOHINL1.SHTANK
DETAIL.SHSCOD = SHOHINL1.SHSCOD
DETAIL.HNSNAM = HINSHUR.HNSNAM
DETAIL.Write()
SHOKEI += SHOHINL1.SHTANK
SUMMRY.SHOKEI = SHOKEI
SUMMRY.Write()
GOKEI += SHOKEI
SHOHINL1.SHSCOD.SetGT(SHOHINL1)
ENDPRT.GOKEI = GOKEI
ENDPRT.Write()
_
[解説]
Python.400ではキー・リストを使わずに
(SHOHINR.SHSCOD + SHOHINR.SHCODE).SetLL(SHOHINL1)
のようにしてセットするキーを直観そのままの記述で書くことが
できます。
従来のRPGではキー・リストとCHAIN命令やSETLLなども
別々に記述していたので両方を見比べなければ
ならなかったのです。
これはひとつの演算項目にまとめたいという
IBM側のRPGの文法上の都合でプログラムとしては
見やすいものにはなりませんでした。
Python.400では (キー・リストで記述することもできますが)
このようにキー・フィールドを直接、列記することができます。
また
SHOHINL1.SHSCOD.Chain(HINSHU)
のように、オブジェクト指向としてフィールドだけで記述するのではなく
レコード: SHOHINL1 のフィールド SHSCOD でというように
オブジェクトのプロパティ(=属するフィールド)として
表記することによって読み手にとっても非常にわかりやすくなります。
操作にしても
SHOHINL1.Read() のようにオブジェクト : SHOHINL1の動作として示すことをメソッドと呼びます。
オブジェクト指向の記述は無意味にソースを短なものにするのではなく
オブジェクトと関連づけて表記することによって記述の内容が
第三者にもわかりやすいものとしています。
これがPython.400のオブジェクト指向としての言語の進化です。
DETAIL.SHCODE = SHOHINL1.SHCODE :
にしてもSHOHINL1レコードのSHCODEを印刷明細レコード: DETAILのSHCODEに値を代入するという操作がよくわかります。
while True:
if SHOHINL1.SHSCOD.ReadEQL(SHOHINL1) == EOF:
break
:
以下の構文もインデントによって条件節がどれであるかを
カッコ記号なしでよくわかります。
このようにPythonソースは短い文節でも読み手にとって
直観的に理解できるような構文として作られています。
ILE-RPGもフリー・フォーマットで進化はしていますが
フィールド名だけの記述ではオブジェクト指向に比べると
残念ながら遅れている感じは否めません。
このあたりが若いプログラマーがRPGよりPythonを使いたがるのではないでしょうか?
_
※(株)オフィスクアトロでは
実際にお客さまがWeb会議上でご自分の会社のIBM iを
操作してPythonを実際に開発してみるという技術ショート・セミナーを計画しています。
今、多くのお客さまより「Pythonには興味がある。ぜひPythonを使ってみたい。」という電話やメールのお問い合わせが増えています。
話を聞くより実際にあなたもぜひPythonを体験してみてください。
