IBMi

印刷装置PRT01が見つからない。

ジョブログを見ていると、こんなメッセージに出くわすことが良くある。

メッセージ. . :   印刷装置PRT01が見つからない。                      
原因−−印刷装置が見つかりません。回復手順−−印刷装置を作成(CRTDEVPRT
 マンド)するか,あるいは印刷装置名が正しくない場合には,印刷装置名を変更
 てからコマンドをやり直してください。 

上記のメッセージへの対策を V7R3 環境で試してみました。

何でこのメッセージが出るの

5250 画面からプログラム実行している場合

例えば、下記の条件が重なっている

  • サインオンしたユーザープロファイルの省略時の印刷装置が *WRKSTN
  • サインオン中に使っている表示装置の記述の中でPRTDEV(*SYSVAL) OUTQ(*DEV) が指定されている。表示装置、とは WRKDEVD の画面で、タイプが 5555 と表示されるやつ
  • システム値 QPRTDEVPRT01 が指定されている。

PRT01 に出力されてしまうまでの流れの例

  1. サインオンしたユーザープロファイルの中で *WRKSTN が指定されているので装置記述 (DEVD) を見に行く。
  2. 装置記述の中で OUTQ(*DEV) が指定されているので PRTDEV を見に行く。
  3. PRTDEV(*SYSVAL) が指定されているので QPRTDEV を見に行く。という流れになる。

対策

  • WRKUSRPRF で省略時の印刷装置を変更するか、WRKDEVDOUTQ か、PRTDEV を変更すれば、PRT01 以外に変更できます。
  • システム全体のデフォルト値を変更する権限のある人なら、QPRTDEV そのものを変更してしまうという必殺技もあり。
  • 表示装置がたくさん存在する場合は、WRKDEVD で変更するのは大変。WRKDEVD での変更は、5250 画面で操作する表示装置が DSP01 だけ、とかごく少数しかない場合向き。
  • もちろんのことですが、PRT01 を用意するという対策もあります。物理的なプリンタを用意するにはお金がかかるので仮想装置 *VRT として作ってしまうのが楽です。下記はその2つの例です。
    • CRTDEVPRT DEVD(PRT01) DEVCLS(*VRT) TYPE(5553) MODEL(B01) IGCFEAT(2424J2)
    • CRTDEVPRT DEVD(PRT01) DEVCLS(*VRT) TYPE(5583) MODEL(200) IGCFEAT(2424J2)

バッチプログラムとして実行している場合

さらにジョブ記述 (JOBD) が関わります。

  • ジョブ記述の中でも、表示装置の記述と同じく PRTDEVOUTQ が指定できます。
    • 装置記述では使用できなかった、*WRKSTN*USRPRF がジョブ記述では使えます。
  • ジョブ記述のなかで USER という項目もあって、特定のユーザープロファイル名を書くことも、*RQD としてジョブをリクエストしたユーザーとすることもできます。

PRT01 に出力されてしまうまでの流れの例。

5250画面の場合に比べ、流れが一段階長くなる感じです。

  1. ジョブ記述に USER(とあるユーザー) PRTDEV(*USRPRF) が指定されているので「とあるユーザー」のユーザープロファイルを見に行く。
  2. ユーザープロファイルの中で *WRKSTN が指定されているので装置記述 (DEVD) を見に行く。
  3. 装置記述の中で OUTQ(*DEV) が指定されているので PRTDEV を見に行く。
  4. PRTDEV(*SYSVAL) が指定されているので QPRTDEV を見に行く。という流れになる。

対策

  • ジョブ記述で OUTQ を変える。
  • ジョブ記述で OUTQ(*DEV) にするなら PRTDEV を変える。
  • 上記のほか、5250画面の場合も参照してください。