サポート情報

印刷もPythonで出力しました

掲載日:2025/07/28

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を体験してみてください。

― 新しい技術はいつもオフィスクアトロから ―