DFU, Query, SQL

78. AFPデータをQUERYで作成してPDF化するには

サンプルのAFPデータを作成してPDF化するには
必要な指定があるのでその方法を紹介する。
_

よく紹介サイトで

 CHGSYSVAL QIGCCDEFNT で変更すると書いているサイトがあるが

このような作業は全く必要ない
システム値: QIGCCDEFNT は導入時の値: *NONE で何の問題もない。
ここでの解説はAFPが導入されていないIBM iであってもかまわない。

(1) OVRPRTF で印刷ファイルを一時変更する

 OVRPRTF FILE(QPQUPRFIL) DEVTYPE(*AFPDS) CDEFNT(QFNT61/X0N16V) IGCDTA(*YES) 
  IGCCDEFNT(QFNT61/X0M32F) SECURE(*YES) OVRSCOPE(*JOB)   

–> DEVTYPE(*AFPDS) で *SCSから *AFPDS に変更するだけでなく
コード・フォント(CDEFNT)と IGCCDEFNTを明示的に指定するので
システム値: QIGCCDEFNTを変更する必要は全くない。
さらに IGCDTA(*YES) が必要であることを見逃す場合が多いので
注意して欲しい。
   ただし不思議なことに CDEFNT(QFNT61/X0N16V) や IGCCDEFNT(QFNT61/X0M32F) の
   フォントは存在していなくても良い。([注意] X0=Xゼロ)
   つまりライブラリー QFNT61 すらも存在していなくても良い。
指定さえしていれば IGCDTA(*YES) によって日本語も正しく変換されたPDFが生成される。

_

(2) QUERYでスプールを作成する

 RUNQRY QRY(*NONE) QRYFILE((QTRFIL/SHOHIN)) OUTTYPE(*PRINTER)     

–>ここではサンプルとしてライブラリーQTRFILの商品マスター(SHOHIN)を
印刷出力している。

(3) 一時変更を解除

  DLTOVR FILE(QPQUPRFIL) LVL(*JOB)

(4) IFS のストリーム・ファイルにコビー

 CPYSPLF FILE(QPQUPRFIL) TOFILE(*TOSTMF) SPLNBR(*LAST) TOSTMF('/TEST/@SHOHIN.PDF') 
     WSCST(*PDF) STMFOPT(*REPLACE)                                   

 –>IFS: /TEST/@SHOHIN.PDF に TOFILE(*TOSTMF) でストリーム・ファイル出力として
WSCST(*PDF) で PDFに変換している。

[解説]

この方法は AFPを導入契約していないユーザーでもAFPデータを上記の方法で
作成することができる。
同時にAFPを導入契約していないユーザーでも CPYSPLFによってPDFに変換することができる。
要は IGCDTA(*YES)とコード・フォント(CDEFNT)と IGCCDEFNTを指定していればよいだけである。
_