0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPT(担当者2)~ 最初のアウトプット/完成ソース ~

0
Last updated at Posted at 2026-09-23

ChatGPT(担当者2)~ 最初のアウトプット/完成ソース ~

最初のアウトプット

最初の応答(ソース生成せず、前提確認を要求)

最初のアウトプット(ソース生成しなかった)

添付の詳細設計書を確認しました。設計書では、IBM i/RPG IV固定形式を前提に、TOKMSPを全件コピーして
TKMASWを作成・更新し、TKGENDを基準にABC分析する仕様になっています。

ただし、設計書だけではそのままコンパイルできる完成ソースにするために不足している情報があります。
特に、TOKMSPの実際のDDS定義・ライブラリ名・メッセージ送信方法などです。設計書上はTKMASWについて
「TOKMSPの15項目+JUNI/KOSEI/RUIKEI/KEKKA」と定義されています。

そのため、まずは設計書から確定できる範囲で、以下の構成にするのがよいです。

作成するソース
1. ABC分析RPG
   * TKGEND降順、TKBANG昇順で処理
   * ZGOKEIを算出
   * KOSEI、RUIKEIを算出
   * KEKKAをA/B/C判定
   * TKMASWをCHAIN → UPDATE
   * E001~E005のエラー処理

2. TKMASW DDS
   * TOKMSPの15項目
   * JUNI
   * KOSEI
   * RUIKEI
   * KEKKA
   * TKBANGをキー

3. 実行用CL
   * TKMASWの存在確認/初期化
   * TOKMSP→TKMASW全件コピー
   * RPG呼出し

なお、設計書では「TKMASWが存在する場合は内容をクリア、存在しない場合は作成」となっているため、
RPGだけでなくCL側も作る方がIBM iとして自然です。

また、ABC判定については、設計書どおり表示上の丸め値ではなく内部の小数第4位で判定します。

ただ、ここでいきなり「コンパイル保証済み」としてソースを出すのは危険です。
TOKMSPの実DDSが添付資料にないため、実際のフィールド属性・キー定義・ライブラリ構成を仮定することに
なります。

もし実際にIBM iへ持っていってコンパイルするところまで考えているのであれば、TOKMSPのDDSソース
(またはDSPFFD TOKMSPの結果)を添付してください。
それを基に、RPG IV固定形式+DDS+CLの3本を、コピーして使える形でまとめます。

DDS提供後の初期出力:DDS(TKMASR)

     A          R TKMASR
     A            TKBANG         5A
     A            TKNAKN        20A
     A            TKNAKJ        20O
     A            TKADR1        20O
     A            TKADR2        20O
     A            TKTIKU         2A
     A            TKPOST         6A
     A            TKTELE        13A
     A            TKGURI         9P 0
     A            TKNURI         9P 0
     A            TKZURI         9P 0
     A            TKUZAN         9P 0
     A            TKGEND         9P 0
     A            TKNYUK         6P 0
     A            TKSIME         1A

     A            JUNI           5P 0
     A            KOSEI          7P 4
     A            RUIKEI         7P 4
     A            KEKKA          1A

     A          K TKBANG

DDS提供後の初期出力:CL

PGM

             /*=====================================================*/
             /* TKMASWの存在確認                                   */
             /*=====================================================*/

             RTVOBJ     OBJ(TKMASW) OBJTYPE(*FILE) RTNLIB(&LIB)

             MONMSG     MSGID(CPF9801) EXEC(DO)

                /*-----------------------------------------------*/
                /* TKMASWが存在しない場合                        */
                /*-----------------------------------------------*/
                SNDPGMMSG  MSG('TKMASWが存在しません。')

                RETURN

             ENDDO


             /*=====================================================*/
             /* TKMASWを初期化                                    */
             /*=====================================================*/

             CLRPFM     FILE(TKMASW)

             MONMSG     MSGID(CPF0000) EXEC(DO)

                SNDPGMMSG  MSG('TKMASWの初期化に失敗しました。')

                RETURN

             ENDDO


             /*=====================================================*/
             /* TKMASP → TKMASW                                   */
             /*=====================================================*/
             /*                                                       */
             /* 共通項目のみをコピーし、                          */
             /* JUNI / KOSEI / RUIKEI / KEKKAは初期値とする。      */
             /*=====================================================*/

             CPYF       FROMFILE(TKMASP) +
                        TOFILE(TKMASW) +
                        MBROPT(*REPLACE) +
                        FMTOPT(*MAP *DROP)

             MONMSG     MSGID(CPF0000) EXEC(DO)

                SNDPGMMSG  MSG('TKMASPからTKMASWへのコピーに失敗しました。')

                RETURN

             ENDDO


             /*=====================================================*/
             /* TKMASPを信用限度額降順でオープン                   */
             /* 同額の場合はTKBANG昇順                              */
             /*=====================================================*/

             OPNQRYF     FILE((TKMASP)) +
                        KEYFLD((TKGEND *DESCEND) +
                               (TKBANG *ASCEND))


             MONMSG     MSGID(CPF0000) EXEC(DO)

                SNDPGMMSG  MSG('TKMASPのソート処理に失敗しました。')

                RETURN

             ENDDO


             /*=====================================================*/
             /* ABC分析RPG呼出し                                    */
             /*=====================================================*/

             CALL       PGM(TKMABC)

             MONMSG     MSGID(CPF0000) EXEC(DO)

                SNDPGMMSG  MSG('ABC分析プログラムでエラーが発生しました。')

             ENDDO


             /*=====================================================*/
             /* OPNQRYFクローズ                                     */
             /*=====================================================*/

             CLOF       OPNID(TKMASP)


             RETURN

ENDPGM

DDS提供後の初期出力:RPGLE

     H            DFTACTGRP(*NO) ACTGRP(*CALLER)

     F*****************************************************************
     F* 得意先マスタ
     F*****************************************************************
     FTOKMSP    IF   E             DISK

     F*****************************************************************
     F* ABC分析結果ワークファイル
     F*****************************************************************
     FTKMASW    UF   E             DISK

     D*****************************************************************
     D* ワーク変数
     D*****************************************************************
     D ZGOKEI          S             15P 0
     D ZKOSEI          S              7P 4
     D ZRUIKEI         S              7P 4
     D ZJUNI           S              5P 0
     D ZERRCT          S             10P 0
     D ZSTATUS         S             10I 0

     D*****************************************************************
     D* エラー処理用
     D*****************************************************************
     D MSG             S            256A
     D MSGFILE         S             10A
     D MSGSTS          S             10A

     C*****************************************************************
     C* メイン処理
     C*****************************************************************
     C                   EXSR      INIT

     C*---------------------------------------------------------------
     C* TOKMSPが0件か確認
     C*---------------------------------------------------------------
     C                   READ      TOKMSP
     C                   IF        %EOF
     C                   EXSR      ERR001
     C                   GOTO      ENDPRG
     C                   ENDIF

     C*---------------------------------------------------------------
     C* 1件目を読み込んでいるため、先頭へ戻す
     C*---------------------------------------------------------------
     C                   SETLL     *LOVAL    TOKMSP

     C*---------------------------------------------------------------
     C* 信用限度額合計を算出
     C*---------------------------------------------------------------
     C                   Z-ADD     0         ZGOKEI

     C                   READ      TOKMSP
     C                   DOW       NOT %EOF

     C*    信用限度額を合計
     C                   ADD       TKGEND    ZGOKEI

     C                   READ      TOKMSP
     C                   ENDDO

     C*---------------------------------------------------------------
     C* 信用限度額合計が0の場合
     C*---------------------------------------------------------------
     C                   IF        ZGOKEI = 0
     C                   EXSR      ERR004
     C                   GOTO      ENDPRG
     C                   ENDIF

     C*---------------------------------------------------------------
     C* 再度先頭からABC分析
     C*---------------------------------------------------------------
     C                   SETLL     *LOVAL    TOKMSP

     C                   Z-ADD     0         ZJUNI
     C                   Z-ADD     0         ZRUIKEI
     C                   Z-ADD     0         ZERRCT

     C*---------------------------------------------------------------
     C* 全件処理
     C*---------------------------------------------------------------
     C                   READ      TOKMSP
     C                   DOW       NOT %EOF

     C*---------------------------------------------------------------
     C* 順位
     C*---------------------------------------------------------------
     C                   ADD       1         ZJUNI

     C*---------------------------------------------------------------
     C* 構成比
     C* TKGEND / ZGOKEI * 100
     C*---------------------------------------------------------------
     C                   Z-ADD     0         ZKOSEI

     C                   EVAL      ZKOSEI =
     C                             (TKGEND / ZGOKEI) * 100

     C*---------------------------------------------------------------
     C* 累積構成比
     C*---------------------------------------------------------------
     C                   ADD       ZKOSEI   ZRUIKEI

     C*---------------------------------------------------------------
     C* ABC判定
     C*---------------------------------------------------------------
     C                   IF        ZRUIKEI <= 70.0000

     C                   MOVEL     'A'       KEKKA

     C                   ELSEIF    ZRUIKEI <= 90.0000

     C                   MOVEL     'B'       KEKKA

     C                   ELSE

     C                   MOVEL     'C'       KEKKA

     C                   ENDIF

     C*---------------------------------------------------------------
     C* 順位・構成比・累積構成比をセット
     C*---------------------------------------------------------------
     C                   Z-ADD     ZJUNI     JUNI
     C                   Z-ADD     ZKOSEI    KOSEI
     C                   Z-ADD     ZRUIKEI   RUIKEI

     C*---------------------------------------------------------------
     C* TKMASWを得意先番号で検索
     C*---------------------------------------------------------------
     C                   CHAIN     TKBANG    TKMASW

     C                   IF        %FOUND

     C*    分析結果を更新
     C                   UPDATE    TKMASR

     C                   IF        %ERROR
     C                   EXSR      ERR005
     C                   GOTO      ENDPRG
     C                   ENDIF

     C                   ELSE

     C*    CHAIN失敗
     C                   ADD       1         ZERRCT
     C                   EXSR      ERR005
     C                   ENDIF

     C*---------------------------------------------------------------
     C* 次レコード
     C*---------------------------------------------------------------
     C                   READ      TOKMSP
     C                   ENDDO

     C*---------------------------------------------------------------
     C* 正常終了
     C*---------------------------------------------------------------
     C                   EXSR      NORMAL

     C*****************************************************************
     C* 終了
     C*****************************************************************
     C     ENDPRG        TAG

     C                   SETON                                        LR


     C*****************************************************************
     C* 初期処理
     C*****************************************************************
     C     INIT          BEGSR

     C* エラー件数初期化
     C                   Z-ADD     0         ZERRCT

     C                   ENDSR


     C*****************************************************************
     C* E001:データなし
     C*****************************************************************
     C     ERR001        BEGSR

     C                   DSPLY
     C                   'E001:得意先マスタ(TOKMSP)に対象データが存在しません。'

     C                   ENDSR


     C*****************************************************************
     C* E004:信用限度額合計ゼロ
     C*****************************************************************
     C     ERR004        BEGSR

     C                   DSPLY
     C                   'E004:信用限度額合計がゼロのため、構成比を算出できません。'

     C                   ENDSR


     C*****************************************************************
     C* E005:システム異常
     C*****************************************************************
     C     ERR005        BEGSR

     C                   DSPLY
     C                   'E005:TKMASWの更新中にエラーが発生しました。'

     C                   ENDSR


     C*****************************************************************
     C* 正常終了
     C*****************************************************************
     C     NORMAL        BEGSR

     C                   DSPLY
     C                   'ABC分析処理が正常終了しました。'

     C                   ENDSR

完成ソース

DDS(TKMASR:変更なし)

     A          R TKMASR
     A            TKBANG         5A
     A            TKNAKN        20A
     A            TKNAKJ        20O
     A            TKADR1        20O
     A            TKADR2        20O
     A            TKTIKU         2A
     A            TKPOST         6A
     A            TKTELE        13A
     A            TKGURI         9P 0
     A            TKNURI         9P 0
     A            TKZURI         9P 0
     A            TKUZAN         9P 0
     A            TKGEND         9P 0
     A            TKNYUK         6P 0
     A            TKSIME         1A

     A            JUNI           5P 0
     A            KOSEI          7P 4
     A            RUIKEI         7P 4
     A            KEKKA          1A

     A          K TKBANG

RPGLE(完成版:E001~E005実装、ZA/ZB定数化)

     H DFTACTGRP(*NO) ACTGRP(*CALLER)
     FTKMASP    IF   E           K DISK    RENAME(TKMASP:TKMASPI)
     FTKMASW    UF   E           K DISK
     DZGOKEI           S             15P 0
     DZKOSEI           S              7P 4
     DZRUIKEI          S              7P 4
     DZJUNI            S              5P 0
     DZA               S              7P 4 INZ(70.0000)
     DZB               S              7P 4 INZ(90.0000)
     C                   EVAL      ZGOKEI = 0
     C                   EVAL      ZJUNI = 0
     C                   EVAL      ZRUIKEI = 0
     C                   READ(E)   TKMASPI
     C                   IF        %ERROR
     C     'E002'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   READ(E)   TKMASPI
     C                   IF        %ERROR
     C     'E003'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   IF        %EOF(TKMASP)
     C     'E001'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   DOU       %EOF(TKMASP)
     C                   EVAL      ZGOKEI = ZGOKEI + TKGEND
     C                   READ(E)   TKMASPI
     C                   IF        %ERROR
     C     'E003'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   ENDDO
     C                   IF        ZGOKEI = 0
     C     'E004'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   EVAL      ZJUNI = 0
     C                   EVAL      ZRUIKEI = 0
     C                   READ(E)   TKMASPI
     C                   IF        %ERROR
     C     'E002'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   READ(E)   TKMASPI
     C                   IF        %ERROR
     C     'E003'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   DOU       %EOF(TKMASP)
     C                   EVAL      ZJUNI = ZJUNI + 1
     C                   EVAL      ZKOSEI = (TKGEND * 100.0000) / ZGOKEI
     C                   EVAL      ZRUIKEI = ZRUIKEI + ZKOSEI
     C                   IF        ZRUIKEI <= ZA
     C                   EVAL      KEKKA = 'A'
     C                   ELSE
     C                   IF        ZRUIKEI <= ZB
     C                   EVAL      KEKKA = 'B'
     C                   ELSE
     C                   EVAL      KEKKA = 'C'
     C                   ENDIF
     C                   ENDIF
     C     TKBANG        CHAIN(E)  TKMASW
     C                   IF        %ERROR
     C     'E005'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   IF        %FOUND(TKMASW)
     C                   EVAL      JUNI = ZJUNI
     C                   EVAL      KOSEI = ZKOSEI
     C                   EVAL      RUIKEI = ZRUIKEI
     C                   UPDATE(E) TKMASR
     C                   IF        %ERROR
     C     'E005'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   ENDIF
     C                   READ(E)   TKMASPI
     C                   IF        %ERROR
     C     'E003'        DSPLY
     C                   RETURN
     C                   ENDIF
     C                   ENDDO
     C     'ABC END'     DSPLY
     C                   RETURN
     C

CL(完成せず・断念)

CLプログラムは、日本語コメント・メッセージの一部が文字化けする事象が解消できず、複数回のやり取りを重ねても改善傾向が見られなかったため、最終的に完成を断念しました。
やり取りの詳細:https://chatgpt.com/share/6aa7bedb-1060-83e9-8e7c-ef48e616ad49


当記事の著作権はIBMに帰属します。詳細はこちらをご参照ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?