WEB一覧表: 仕入先照会(WSIRINQ)

最終更新: 2025-12-07

 
 
項目数の多い仕入先マスターを一覧表で印照会する摘要業務を
作成することができます。

                                          
                                                                          
  選択項目を入力して,実行キーを押してください。                          
                                                                          
 PYTHON プログラム  . . . . . . .   WSIRINQ        拡張子 .py             
    ディレクトリー  . . . . . . .     *PYTHON                   
                                       ...                                
  ファイル  . . . . . . . . . . .   SIREMT         名前                   
    ライブラリー  . . . . . . . .     QTRFIL       名前 , *LIBL, *CURLIB  
  HTML ディレクトリー  . . . . . .   '/PYTHON.400/PROJECT'  
                                                           
  生成オプション  . . . . . . . .   *NONE         *NONE, *ADD, *REPLACE   
                                                                                         

 
 

[解説]

項目数の多いデータ・ベースも「一覧表形式」で照会することができます。
サンプル・ライブラリー(QTRFIL)の仕入先マスター(SIREMT)を使って
一覧表形式のWEB適用業務を作ることができます。

[パラメータの説明]

PYTHON プログラム. . . . . . . . . . . . . .作成するPythonプログラムの名前とそのソースを
ディレクトリー              保管するディレクトリー名を指定します。
*PYTHON = /PYTHON/PROJECT/(PYTHON名)
としてPYTHON名のディレクトリーも自動生成されます。
十分精通するまではこの指定のままで生成してください。

ファイル. . . . . . . . . . . . . . . . . . このPythonが扱う主たるデタ・ベースの名前と
 ライブラリー ライブラリー名を指定してください。

HTML ディレクトリー . . . . . . . . . . . . このPythonが使用するHTMLテンプレートを保管する
                      ディレクトリーの名前を指定します。

生成オプション. . . . . . . . . . . . . . . *NONE以外の:ADD(=初期作成)または *REPLACE(=置換え)を
指定してください。*SADDを指定したときは既存の同じ名前の
Pythonが存在しているか検査され存在していれば
エラーとなります。
初めてこのPythonの名前で作成するときは*ADDを
                      指定してください。

[基本情報の定義]

                        基本情報の定義                                     
                                                                           
                                                                           
                                                                           
 ジョブ・タイトル                        仕入先照会                  
 画面様式                               3          1= 単票印刷  2= 最大表示
                                                   3= 一覧表    4= 伝票型式
                                                                           
 数値の編集                             Y          Y=YES,  N=NO            
                                                                           
 画面サイズ                                                
  桁                                   132        80, 132 
  行                                   27         24, 27                        
                                                                           

[解説]

ジョブ・タイトル. . . . . . . . : この適用業務のタイトルを入力してください。
                 このタイトルは適用業務画面の見出しとして使われます。

画面様式. . . . . . . . . . . . : 摘要業務のタイプを指定します。
1=単票形式 : 1レコード1画面1フィールド/行のDFUのような
基本型式の画面入力の適用業務を作成します。

2=最大表示 : 単票形式ですが1画面にフィールドをできるだけ
多く表示する画面型式の適用業務を作成します。

3=一覧表形式: SFLレコードによる一覧表形式の適用業務画面を
作成します。

4=伝票型式: 日本独自の伝票入力型の適用業務を作成します。

数値の編集. . . . . . . . . . . :数値を編集するかどうかを指定します。

画面サイズ. . . . . . . . . . . :作成する印刷装置ファイル(PRTF)のサイズを指定します。
                WEBの場合はこの値は無視してください。

                         レコード様式の処理                               
                                                                          
ファイル      SIREMT                           ライブラリー        QTRFIL 
                                                                          
オプションを入力して、実行キーを押してください                            
  1= 指定                                                                 
                                                                          
                                                                          
OPT   様式        定義   記述                                           
1   DSPHEAD        N      初期画面レコード 
1   LISTDEF        N      リスト項目定義                                         
1   ENDOPT         N      終了画面
                                                                         

解説

画面芳樹を生成するための画面レコード様式の候補がすべて
表示されますのでそれぞれの画面様式に対するフィールドの定義を
行う必要があります。
選択欄(OPT)には初期値として1が既に表示されていますので
このままで実行キーを押すと最初のレコード:DSPHEADが選択されます。
このままで実行キーを押してください。

                          フィールドの選択および順序付け              
                                                                      
 ファイル      SIREMT                    ライブラリー         QTRFIL  
 レコード様式  SIREMTR        テキスト   初期画面レコード             
                                                                      
 フィールドとその順序を選択するか,すべてを選択する F21 キーを押して  
 実行キーを押してください。                                           
                                                                      
 順序    フィールド    属性      長さ      タイプ      記述           
    10   SRCODE        キー       10       文字        仕入先コード     
                                                                      

[解説]

選択したDSPHEADレコードに表示するフィールドの選択が要求されます。
この初期画面DSPHEADでは指定したデータ・ベース:QTRFIL/SIREMTの
アクセス・パスすなわちキー・フィールドが表示されて
順序選択の欄には初期値として10が既に表示されています。
このままで実行キーを押してください。

                          レコード様式の処理                              
                                                                          
 ファイル      SIREMT                           ライブラリー        QTRFIL
                                                                          
 オプションを入力して、実行キーを押してください                           
   1= 指定                                                                
                                                                          
                                                                          
OPT   様式        定義   記述                                          
    DSPHEAD        Y      初期画面レコード 
 1   LISTDEF        N      リスト項目定義  
 1   ENDOPT         N      終了画面                            
                                                                          

[解説]

表示は元のレコード選択の画面に戻りますが
今、処理したDSPHEADレコードの選択OPT=1は消えて
次の明細画面: DSPDTA に OPT=1 が残っていますので
続けてこのままで実行キーを押すと 明細画面: DSPDTAが
選択されます。

                         フィールドの選択および順序付け             
                                                                    
ファイル      SIREMT                    ライブラリー         QTRFIL 
レコード様式  SIREMTR        テキスト   明細画面レコード            
                                                                    
フィールドとその順序を選択するか,すべてを選択する F21 キーを押して 
実行キーを押してください。                                          
                                                                    
順序    フィールド    属性      長さ      タイプ      記述          
    0   SRCODE        キー       4        文字        コード                
    0   SRNMK                    32       文字        カナ名                
    0   SRNMJ                    32       漢字 OPEN   仕入先名 1            
    0   SRNMJ2                   32       漢字 OPEN   仕入先名 2            
    0   SRNM                     12       漢字 OPEN   略名                  
    0   SRSHOT                   5        文字        略号                  
    0   SRTEL                    15       文字        TEL                
    0   SRFAX                    15       文字        FAX                
    0   SFAX                     2        文字        FAX短縮            
    0   SRFORD                   1        文字        FAX注文            
                                                                     続く ..
                                              
F3= 終了   F15= 他のデータ・ベースの結合      F12= 取消し                    
F21= すべての選択                                                                                                                                

[解説]

明細画面DSPDTAの選択候補としてデータ・ベース: QTRFIL/SIREMTのすべての
フィールドが表示されます。
「F21= すべての選択」キーを押してすべてのフィールドを詮索してください。

                          フィールドの選択および順序付け               
                                                                       
 ファイル      SIREMT                    ライブラリー         QTRFIL   
 レコード様式  SIREMTR        テキスト   明細画面レコード              
                                                                       
 フィールドとその順序を選択するか,すべてを選択する F21 キーを押して   
 実行キーを押してください。                                            
                                                                       
 順序    フィールド    属性      長さ      タイプ      記述            
   10   SRCODE        キー       4        文字        コード                
   20   SRNMK                    32       文字        カナ名                
   30   SRNMJ                    32       漢字 OPEN   仕入先名 1            
   40   SRNMJ2                   32       漢字 OPEN   仕入先名 2            
   50   SRNM                     12       漢字 OPEN   略名                  
   60   SRSHOT                   5        文字        略号                  
   70   SRTEL                    15       文字        TEL                
   80   SRFAX                    15       文字        FAX                
   90   SFAX                     2        文字        FAX短縮            
  100   SRFORD                   1        文字        FAX注文            
                                                                     続く ..
                                                                      
F3= 終了   F15= 他のデータ・ベースの結合      F12= 取消し                    
F21= すべての選択                                                            

[解説]

仕入先マスターには結合ファイルは必要ありませんので
このままで実行キーを押します。

                          レコード様式の処理                              
                                                                          
 ファイル      SIREMT                           ライブラリー        QTRFIL
                                                                          
 オプションを入力して、実行キーを押してください                           
   1= 指定                                                                
                                                                          
                                                                          
OPT   様式        定義   記述                                          
    DSPHEAD        Y      初期画面レコード 
     LISTDEF        N      リスト項目定義  
 1   ENDOPT         N      終了画面                            
                                                                          

[解説]

最後に終了画面を定義するために実行キーを押します。

                         終了画面                                
                                                                 
選択項目を入力して、実行キーを押してください                     
                                                                 
終了画面を作成しますか ?               Y            Y=YES,  N=NO 
                                                                 

[解説]

終了画面は必要なのでこのままで実行キーを押します。

                        PYTHON プログラム定義の終了                          
                                                                             
選択項目を入力して、実行キーを押してください                                 
                                                                             
  プログラムの保管                 Y                Y=YES,  N=NO             
  プログラムの実行                 N                Y=YES,  N=NO             
    選択項目 Y=YES の場合                                                    
      実行のタイプ                 1               1= 変更 ,  2= 表示        
 DDS ソースの保管                  Y                Y=YES,  N=NO             
 PYTHON ソースの保管               Y                Y=YES,  N=NO             
  プログラムの保管 Y=YES の場合                                              
   PYTHON プログラム               WSIRINQ.PY       名前 *.PY               
      ディレクトリー                 /PYTHON.400/PROJECT/PSIRINQ/PSIRINQ.PY
                                                                             
    権限                           *LIBCRTAUT                                
  テキスト                          仕入先照会                         
                                                                             
  HTML ソースの保管 Y=YES の場合                     名前, *LIBCRTAUT 
   HTML ディレクトリー             /PYTHON.400/PROJECT                 

[解説]

最後にソースを生成する画面が表示されます。

プログラムの保管. . . . . . . . . . . .: Y=Pythonプログラムの保管を指示します。

プログラムの実行. . . . . . . . . . . .: 保管直後に実行するかどうかを指示します。
                     まだ慣れないうちは N としてください。

HTML ソースの保管 . . . . . . . . . . .: HTMLテンプレートを保管するディレクトリーの名前です。

 PYTHON プログラム. . . . . . . . . . : 保管するPYTHONプログラムの名前を指示します。
拡張子.PYが必要です。

ディレクトリー. . . . . . . . . . . .: PYTHONを保管するIFSディリクトリーの名前を指示します。
/PYTHON.400/PROJECT/(PYTHOPN名)/(PYTHON名.PY)
の形式名にしてください。
PYTHONのプロジェクト(/PYTHON.400/PROJECT)の配下に
PYTHON名と同じ名前のプロジェトクが作成されて
その配下にPYTHONプログラム(PYTHON名.PY)が
                     保管されます。
                     プロジェクトの配下にはHTMテンプレートも保管される
場合があります。

実行キーを押すと表示装置ファイル(DSPF)のDDSソースの作成に続いて
印刷装置ファイル(DSPF)も作成され(CRTPRTF)PYTHONプログラムも指定した場所に
保管されます。
PYTHONはコンパイルは必要ありません。

「PSIREMT.PY を保管しました 」

のような完了メッセージが表示されればWizard生成は成功です。
実行は「13. PYTHON データの印刷(PRTPTN)」
によって実行することができます。

[印刷指定コマンドの追加]

印刷適用業務の作成では実行時の印刷範囲の
指定するコマンドとCLプログラムも自動生成されます。
これによって印刷の範囲を実行時に動的に
指定することができるようになります。

[生成されたPYTHONソースは?]

どのようなPYTHONソースが生成されたのか気になるところですが
ライブラリー: PYTHON.400 がライブラリー・リストに存在していれば
コマンド入力画面で

EDTPTN (PYTHON名)

だけでPYTHONソースの内容を見ることができます。

PYTHONを実行する印刷装置ファイル(PRTF)のDDSソースは

STRSEU QTRSRC/QPRTSRC.(PYTHON名)

でオープンすることができます。

DSPPTN WSIRINQ

で実行してみると

のようにプロンプト画面 が表示されるので
このままで実行すると次のように
明細画面が表示されます。
 
 

[解説]

次に EDIPTN WSIRINQ で Pythonソースを次のように表示することが
できます。

#! /usr/bin/env python3.4                                                    
import sys                                                                   
import os                                                                    
import re                                                                    
import ibm_db2                                                               
import bottle2                                                               
import urllib.parse                                                          
                                                                             
dspmod = sys.argv[1]                                                         
                                                                             
SFLPAG = 10                     #  一度の通信でクライアントに返すレコード数  
                                                                             
add_count = 0                                                                
chg_count = 0                                                                
dlt_count = 0                                                                
                                                                             
#*************************************************************#              
@bottle2.route('/init', method=["GET", "POST"])                 
def init():                                                     
#*************************************************************# 
    # 初期画面の HTML を表示する。                              
                                                                
    #  パラメータを受け取る                                     
    params = bottle2.request.params.decode()                    
                                                                
    # パラメータがあれば初期画面の HTML にセットする。          
    values = [{                                                 
       'SHCODE': params.get('SHCODE', ''),                      
    }]                                                          
                                                                
    #  ブラウザに DSPHEAD.HTM を出力する。                      
    return bottle2.template('DSPHEAD.HTM', {                    
      'dspmod': dspmod,                                         
      'values': values,                                         
      'msg': params.get('MSG', ''),                              
     })                                                          
                                                                 
#*************************************************************#  
@bottle2.route('/input', method=["GET", "POST"])  # 入力切替     
def input():                                                     
#*************************************************************#  
    #  ブラウザからの入力値を受け取る。                          
    params = bottle2.request.query.decode()                      
                                                                 
    # 白紙の明細画面の HTML を表示する                           
    return bottle2.template('DSPTOP.HTM', {                      
      'dspmod': 'INPPTN',                                        
      'values': [{}],                                            
     })                                                          
                                                                 
#*************************************************************#  
# 明細画面                                       # データ検索     
@bottle2.route('/query', method=["GET"])                          
def query():                                                      
#*************************************************************#   
    #  ブラウザからの入力値を受け取る。                           
    params = bottle2.request.query.decode()                       
                                                                  
    #  明細画面の HTM を表示する。                                
    values = [{                                                   
       'SHCODE': params.get('SHCODE', ''),                        
    }]                                                            
                                                                  
    return bottle2.template('DSPTOP.HTM', {                       
        'dspmod': dspmod,                                         
        'values': values,                                         
    })                                                            
 #*************************************************************#  
# 挿入画面用の空っぽのレコードをブラウザに返す。                 
@bottle2.route('/template', method=["GET", "POST"])              
def template():                                                  
#*************************************************************#  
    return bottle2.template('LISTDEF.HTM', {                     
        'dspmod': 'WRTPTN',                                      
        'value': {},                                             
    })                                                           
                                                                 
#*************************************************************#  
# レコードのデータをブラウザに返す。                             
@bottle2.route('/record', method=["GET", "POST"])                
def record():                                                    
#*************************************************************#  
    # DB2 に接続する。                                           
    with ibm_db2.connected() as conn:                            
        #  ブラウザからの入力値を受け取る。       
       params = bottle2.request.params.decode()  
                                                 
       # SQL を組み立てる。                      
       sql = '''                                 
       SELECT T01.SHCODE                         
             ,T01.SHNAME                         
             ,T01.SHTANK                         
             ,T01.SHSCOD                         
             ,T02.HNSNAM                         
              FROM QTRFIL/SHOHIN T01             
              LEFT JOIN QTRFIL/HINSHU T02        
              ON T01.SHSCOD = T02.HNSCOD         
              WHERE T01.SHCODE >= ?              
              ORDER BY  T01.SHCODE               
              OFFSET ? ROWS                      
              FETCH NEXT ? ROWS ONLY             
        '''                                                                           
      stmt = ibm_db2.prepare(conn, sql);                                            
      ibm_db2.bind_param(stmt, 1, params['SHCODE'])   # SHCODE を SQL にセットする。
      ibm_db2.bind_param(stmt, 2, params['_RRN'])     # RRN を SQL にセットする。   
      ibm_db2.bind_param(stmt, 3, SFLPAG)             # SFLPAG を SQL にセットする。
                                                                                    
      # SQL を実行する。                                                            
      ibm_db2.execute(stmt)                                                         
                                                                                    
      #  結果のレコードを取得する。                                                 
      values = []                                                                   
      row = ibm_db2.fetch_assoc(stmt)                                               
      while row != False:                                                           
          row['SHTANK'].edit('1')                                                   
          values.append(row)                                                        
          row = ibm_db2.fetch_assoc(stmt)                                           
     :
          #  結果をテンプレートに埋め込む。                   
       text = ""                                           
       for value in values:                                
           text += bottle2.template('LISTDEF.HTM', {       
               'dspmod': dspmod,                           
               'value': value,                             
           })                                              
                                                           
       #  明細画面の HTM を表示する。                      
       bottle2.response.content_type = 'text/plain';       
       return text                                                                                     
                                                                

[解説]

最初に

import sys                                                               
from as400 import *

によって
Python.400フレーム・ワークが提供する「AS400エンジン」を
インクルードします。
WEB適用業務の場合のデータ・ベース・アクセスは
SQL命令によってDB2/400データ・ベースをアクセスして
結果のレコードをFetch命令によって取り出します。

SQL文の作成は

sql = '''                                 
       SELECT T01.SHCODE                         
             ,T01.SHNAME                         
             ,T01.SHTANK                         
             ,T01.SHSCOD                         
             ,T02.HNSNAM                         
              FROM QTRFIL/SHOHIN T01             
              LEFT JOIN QTRFIL/HINSHU T02        
              ON T01.SHSCOD = T02.HNSCOD         
              WHERE T01.SHCODE >= ?              
              ORDER BY  T01.SHCODE               
              OFFSET ? ROWS  

で宣言されています。
SQL文でアクセスしていますのでIBM iのRPG命令を知らない方でも
容易にSQLによるデータ・ベース・アクセスとして
Pythonプログラムを理解することができます。

またPythonはbottleフレーム・ワークというHTTPサーバーを
持っていますので事前にApcheなどのHTTPサーバーを起動させて
準備しておく必要もありません。

# HTTP サーバーを起動する。                                    
bottle2.run(host='', port=8080, quiet=True)

によってbottle2というフレーム・ワークによって
初期画面HTMLが表示されます。
bottle2 とは Pythonで用意されているbottleフレーム・ワークを
Python.400フレーム・ワークで拡張しはたもので
ブラウザが自動的に起動されるように機能を拡張したものです。

その他のこのPYTHONプログラムの詳細はこちらを参照してください。