WEB最大表示 : 仕入先マスター登録(WSIREMT)

最終更新: 2025-12-07

なるべくたくさんの項目を表示するWEB最大表示の適用業務を作成します。

                        WEB PYTHON の作成  (CRTWEBAPP)                  
                                                                          
  選択項目を入力して,実行キーを押してください。                          
                                                                          
 PYTHON プログラム  . . . . . . .   SIREMT        拡張子 .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を
                      指定してください。

[基本情報の定義]

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

[解説]

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

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

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

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

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

監査報告書 . . . . . . . . . . : 監査報告書とはDFUのように入出力の結果のモニター・リストで
更新の結果をQUERYによって印刷出力します。

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

画面サイズ. . . . . . . . . . . :作成する表示装置ファイル(DSPF)のサイズを指定します。
現在、使用中の画面サイズが初期値として表示されます。
WEB作成ですのでこの値を無視してください。

                         レコード様式の処理                               
                                                                          
ファイル      SIREMT                           ライブラリー        QTRFIL 
                                                                          
オプションを入力して、実行キーを押してください                            
  1= 指定                                                                 
                                                                          
                                                                          
OPT   様式        定義   記述                                           
1   DSPHEAD        N      初期画面レコード                                
1   DSPDTA         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   DSPDTA         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/SHOHINのすべての
フィールドが表示されます。
「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= すべての選択                                                            

[解説]

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

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

[解説]

表示はレコード様式の選択に戻り終了画面(ENDOPT)の選択だけが
残っていますのでこのままで実行キーを押してください。

                         終了画面                                
                                                                 
選択項目を入力して、実行キーを押してください                     
                                                                 
終了画面を作成しますか ?               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 プログラム               WSIREMT.PY       名前 *.PY               
      ディレクトリー                 /PYTHON.400/PROJECT/@SIREMT/@SIREMT.PY
                                                                             
    権限                           *LIBCRTAUT                                
  テキスト                          仕入先マスター登録                         
                                                                             
  HTML ソースの保管 Y=YES の場合                     名前, *LIBCRTAUT
    HTML ディレクトリー             /PYTHON.400/PROJECT                                      

[解説]

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

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

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

DDS ソースの保管 . . . . . . . . . . . : 表示装置ファイル(DSPF)のDDSソースの保管を指示します。
Yを指示してください。

PYTHON ソースの保管. . . . . . . . . . : PYTHONプログラム・ソースの保管を Yで応答してください。

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

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

HTML ソースの保管 . . . . . . . . . . .: HTMLテンプレートを保管するディレクトリーの名前です。
                     必ずPYTHONディレクトリーと同じ場所を指定してください。

実行キーを押すとHTMLソースの作成に続いて
PYTHONプログラムも指定した場所に保管されます。
PYTHONはコンパイルは必要ありません。

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

のような完了メッセージが表示されればWizard生成は成功です。
実行は「11. PYTHON データの表示(DSPPTN)」や
「12. PYTHON データの変更(CHGPTN)」によって実行することができます。

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

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

EDTPTN (PYTHON名)

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

PYTHONを実行するHTMLソース(HTM)は

EDTPTN PYTHON(PYTHON名) OPTION(HTM)

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

DSPPTN WSIREMT

で実行してみると

のように初期画面: DSPHEAD が表示されるので
仕入先コード: 1000 を入力して実行すると次のように
明細画面が表示されます。

[解説]

仕入先マスターには項目数が多いので最大表示はされています。
表示がHTMLなので上下左右にも制限なくデータを表示することができます。

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

import sys                                                      
import os                                                       
import re                                                       
import ibm_db2                                                  
import bottle2                                                  
import urllib.parse                                             
                                                                
dspmod = sys.argv[1]                                            
                                                                
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 = [{                                       
       'SRCODE': params.get('SRCODE', ''),            
    }]                                                
                                                      
    #  ブラウザに 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('DSPDTA.HTM', {                      
      'dspmod': 'INPPTN',                                        
      'values': [{}],                                            
     })                                                          
#*************************************************************#  
@bottle2.route('/query', method=["GET"])         # データ検索    
def query():                                                     
#*************************************************************#  
    # DB2 に接続する。                                           
    with ibm_db2.connected() as conn:           
        #  ブラウザからの入力値を受け取る。     
        params = bottle2.request.query.decode() 
                                                
        # SQL を組み立てる。                    
        sql = '''                               
        SELECT T01.SRCODE                       
              ,T01.SRNMK                        
              ,T01.SRNMJ                        
              ,T01.SRNMJ2                       
              ,T01.SRNM                         
              ,T01.SRSHOT                       
              ,T01.SRTEL                        
              ,T01.SRFAX                        
              ,T01.SFAX                         
              ,T01.SRFORD                       
              ,T01.SRYOSI 
                :                      
                FROM QTRFIL/SIREMT T01  
               WHERE T01.SRCODE = ?    
               ORDER BY  T01.SRCODE    
          FETCH FIRST 1 ROW ONLY                      :
       '''                                                                             
       stmt = ibm_db2.prepare(conn, sql);                                              
       ibm_db2.bind_param(stmt, 1, params['SRCODE'])   # HEDKEY  を SQL にセットする。 
                                                                                       
       # SQL を実行する。                                                              
       ibm_db2.execute(stmt)                                                           
                                                                                       
       #  結果のレコードを取得する。                                                   
       values = []                                                                     
       row = ibm_db2.fetch_assoc(stmt)                                                 
       while row != False:                                                             
           values.append(row)                                                          
           row = ibm_db2.fetch_assoc(stmt)                                             
                                                                                       
       #   レコードが存在しない場合                                                    
       if len(values) == 0:                                                            
           if dspmod == 'DSPPTN':                                                      
           if dspmod == 'DSPPTN':                                     
               # DSPPTN  の場合は初期画面に戻ってメッセージを表示する 
               values = [{                                            
                 'SRCODE': params.get('SRCODE', ''),                  
               }]                                                     
               return bottle2.template('DSPHEAD.HTM', {               
                   'dspmod': dspmod,                                  
                   'values': values,                                  
                   'msg': '  レコードが見つかりません  ',             
               })                                                     
           else:                                                      
             # CHGPTN  の場合は入力画面を表示する。                   
              values = [{                                             
                'SRCODE': params.get('SRCODE', ''),                   
              }]                                                      
              return bottle2.template('DSPDTA.HTM', {                 
                 'dspmod': 'INPPTN',                                  
                 'values': values,                                    
               :

[解説]

WEB適用業務の場合のデータ・ベース・アクセスは
SQL命令によってDB2/400データ・ベースをアクセスして
結果のレコードをFetch命令によって取り出します。

SQL文の作成は

       # SQL を組み立てる。                    
        sql = '''                               
        SELECT T01.SRCODE                       
              ,T01.SRNMK                        
              ,T01.SRNMJ                        
              ,T01.SRNMJ2                       
              ,T01.SRNM                         
              ,T01.SRSHOT                       
              ,T01.SRTEL                        
              ,T01.SRFAX                        
              ,T01.SFAX                         
              ,T01.SRFORD                       
              ,T01.SRYOSI 
                :                      
                FROM QTRFIL/SIREMT T01  
               WHERE T01.SRCODE = ?    
               ORDER BY  T01.SRCODE 

で宣言されています。
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プログラムの詳細はこちらを参照してください。