• ベストアンサー

度々RPGについて

いったい一つのプログラムを組むのに何日かかって何度皆様にご迷惑をおかけしているのやら・・・。 内容は受注明細ファイルから1レコード読み、前のレコードと商品コードが一致しなかった場合、受注明細ファイルの商品コードをキーにし、商品マスタを検索。 該当レコードがあった場合商品マスタの商品名称(シフトコード含まないで)20桁を16桁に編集し、シフトコードの編集もしてから出力ファイルの商品名称にいれる。 もし商品マスタに該当レコードが無ければ、出力ファイルの商品名称に’未登録’を表示・・・ というものです。16桁編集はSUBプログラムとして補足資料に以下のものが書かれていました。 C P#010 PLIST C PARM P#LEN 2 桁数 C PARM P#DATA 80 文字列 C PARM P#OPT 1 オプション 以上パラメーターの定義 C MOVEL'16' P#LEN C MOVEL*BLANK P#DATA C MOVEL****** P#DATA C MOVEL*BLANK P#OPT C CALL 'SUB0010R' 以上パラメーターにデータをセットして、サブプログラムの実行(CALL) CALL終了後、P#DATAに16桁に編集された文字列が返ってくる。 *オプションは、サブプログラム側で何かしらのエラーが発生した場合、’1’を返してくる。 以上です。 この場合どのようなプログラムになるのでしょうか? お助けください;;

質問者が選んだベストアンサー

  • ベストアンサー
  • morisyu42
  • ベストアンサー率40% (4/10)
回答No.3

こんにちわ。 お書きになられているコーディングそのままでだいたい、使えると思われます。 さきほどの御質問と組み合わせると思ってらっしゃるものが出来るかと思います。 但し、サブプロでエラーの時(オプションが1以外の時)どうするかは確認されたほうがいいかと思います。 コードはわざと書きませんので、がんばってやってみてください。

その他の回答 (2)

  • miria
  • ベストアンサー率33% (17/51)
回答No.2

お尋ねになりたいのは メインのコーディングですか それとも呼び出される「SUB0010R」のコーディングでしょうか? ご覧になっているのはどのような資料ですか。 社内の経験者や出入のSEさんは側にいらっしゃいませんか? AS/400関連のメーカー情報誌には沢山サンプルがあるはずですので職場にあるものを見落としているのかもしれませんよ。

hisajiro
質問者

補足

メインです。 会社のサンプルですか・・・・ 見れないんです;; ユーザーがないのと、新しいマシーンへデータ移行中で使えないんです;;

  • taranko
  • ベストアンサー率21% (516/2403)
回答No.1

一つ疑問点があるのですが、商品マスタに登録されている品名は IBMの漢字コードで登録されているのですよね。 それならサブプログラムまで使う必要が無いと思うのですが、 見た感じこのサブプログラムは通信などで他の漢字コードとして 入ってきた文字をIBM漢字コードに変換させる為の プログラムの様に見えます。 IBMの漢字コードで入力している文字を20桁から16桁に するのであれば、ただ単に適当な文字を1文字架空のフィールドに 入力してI仕様書でDSで区切って、1桁目と4桁目を取り出し (シフトインとシフトアウト)20桁から16桁にしたときに シフトインは入っているのでシフトアウトをいれてやるだけ で大丈夫なはずです。 補足お願いします。

hisajiro
質問者

補足

仕様書にはその辺は全く記載されていません。 ファイルの設計書等もない状態です。 一応補足のプログラムを使えとだけは書いてありますが、 その他の注釈は全く皆無の状態です。 初心者にはお手上げです;;

関連するQ&A

  • RPGについて

    基礎的なことなのですが、CHAINの書き方がわかりません。 今やっているのは、受注明細ファイルを出力するもので、 受注明細ファイルの商品コードをキーにして商品マスタを検索。 該当レコードがあれば、マスタの商品名称を出力ファイルの商品名称へ送るプログラムです。 CHAINを使って検索するのはわかるのですが、それをどう書けばいいかがわかりません。 またまた図々しいですが、できればサンプルのソースコードがあるとありがたいです。 よろしくおねがいします;;

  • RPGについて

    やりたいことなのですがまず一つは、前レコードの受注CD、得意先CD11桁と新しいレコードの受注CD、得意先CD11桁が違った場合何か処理を起こすようにしたいのですが・・・ この場合新しいレコードの11桁も前のレコードの11桁のようにi仕様書で設定しなければいけないのでしょうか? 前レコード11桁は以下のような形で行いました。 例)受注コード(6桁数字) 得意先コード(5桁数字) (I仕様書) DS        1  110 OLDCD  ←(1)        1   60 O@JHCD ←(2)受注コード        7  110 O@TOCD ←(3)得意先コード ------------------------------- (C仕様書) Z-ADD受注コード  O@JHCD Z-ADD得意先コード O@TOCD もう一つはCHAIN命令で検索した場合、該当レコードがあった場合サブルーチン¥CALLへいき、該当レコードがなかった場合サブルーチン¥CALL2を行いたい場合どのように組めばいいのか教えてください。

  • IBM AS/400 RPG

    プログラミング歴1週間、RPG歴1週間の初心者です。 RPGについての本やサイトが少なく、サンプルコードも数えるほどしかわからない私にどうか救いの手を・・・。 今困っているのは初歩的なものなのですが、E仕様書のテーブル定義の仕方とC仕様書で検索キーを宣言してマスタファイルから検索をかける方法がわかりません。 たとえば受注明細ファイル(トランザクションファイル)を出力するのに商品コードしか記載されてないとします。 そこで商品マスタの商品コードをキーにして、検索をかけ、該当レコードが会った場合はその商品名称を出力し、なければブランクにする・・・という感じです。 文章がおかしいので理解しずらいとは思いますが、わかる方はサンプルコードをお願いします;;

  • ACCESSのデータシート形式のフォームでのDLookupについて

    お世話になります。 以下の様なコードでフォーム上の「bikou」という項目に商品マスタテーブル内の該当する商品コードの「商品名称」を代入しようと思います。 Private Sub 商品コードNo_BeforeUpdate(Cancel As Integer) Me!bikou = DLookup("商品名称", "商品マスタ", "商品コード='" & Me!商品コードNo & "'") End Sub これは単票形式のフォームではうまくいくのですが、データーシート形式ですと商品コードを入力する度にフォーム上に表示されている「bikou」がすべて塗り換わってしまいます。結果として最後に入力して商品コードの商品名称が、表示中のすべてのレコードの「bikou」に代入されてしまいます。そこで、「現在編集中のレコードの項目「bikou」のみに値を代入する(商品名称を代入する)」という指定を 行うプログラムの書き方はあるのでしょうか。 よろしくお願い致します。

  • RPGの配列について

    0040.00 E NMK 20 1 0200.00 C MOVELP1NMK NMK 0201.00 C* 0202.00 C 1 DO 20 Y 20 0203.00 C NMK,Y IFEQ *BLANK 0204.00 C MOVEL*HIVAL NMK,Y 0205.00 C ENDIF 0206.00 C ENDDO 0207.00 C* 0208.00 C SETOF 92 0209.00 C P1NMK SETLLEDTML01 0210.00 C* 0211.00 C *IN92 DOWEQ*OFF 0212.00 C READ EDTML01 92 0213.00 C TMNMK IFGT NMK 0214.00 C SETON 92 ・・・・・ こんな感じでやっているんですが213行目のところでコンパイル落ちちゃいます・・・ エラーでは 指定された演算命令に対して演算項目2の配列名が正しくない とでます ちなみにTMNMKはカナ名称属性Aで20桁です。 演算項目2に配列名を入れることは無理なのでしょうか?

  • EXCELデータの棚卸し

    EXCELデータに ひとつのシートにマスターデータ(6000件程度) 複数(15枚)のシートにトランザクションデータ(60000件程度)があります。 このトランザクションデータの中にマスターのコードがあるのですが、トランザクションの中にヒットしなかった、マスターデータないのコード(行)のレコードを削除候補データとしてピックアップしたいのです。 例えば (担当マスターシート)6000レコード(1シート) 担当コード 名称 属性 (トランザクションデータ)15シート×60000レコード 使用日付 商品 担当コード あり、トランザクションデータに使われていない、担当マスターシート上の担当コードをピックアップし、棚卸対象リストを 作成したいのです。 EXCELの関数を使って行うべきでしょうか? 今後も行う事が考えられるので、ACCESSを用いるべきでしょうか? ぜひ、皆様が考える最善の対応方法をご教示頂けるとありがたいです。 宜しくお願い致します。

  • RPG 配列宣言について

    いつもお世話になっております。 IBM AS/400の駆け出しプログラマーです。 今、配列を使ったシステムを組んでいるのですが、 たとえばAというDBの項目に同じものがいくつかあるとします。 課所コード1(KSCD1)、課所コード2(KSCD2)、・・・・ といったような項目です。 そのAのファイルを読み、課所コードを配列に入れたいのですが、 配列KSCというものに KSC,1にはKSCD1 KSC,2にはKSCD2といった感じです。 演算仕様書でMOVEL  KSCD1  KSC,1 と個々にやっていく方法以外にレコードを読んだときに自動的に配列に入れるような方法があったら教えていただきたいと思います。 何せ個々に入れていくとそれだけで80行使ってしまうので・・・・ 知っている方がいらっしゃいましたらどうかお助けください。 お願い致します。

  • SQL Group Order 連結

    はじめまして OracleSqlですが、商品マスター、料金マスターの2つがあります。 商品マスター  商品コード,名称  AAAA,AAAAA  BBBB,BBBBB 料金マスター  商品コード,開始日,金額  AAAA,2009/4/1,1000 AAAA,2009/7/1,2000  BBBB,2009/4/5,3000 BBBB,2009/7/5,4000 SQLで AAAA,AAAAA,2009/7/1,2000 BBBB,BBBBB,2009/7/5,4000 と求めたいのです。 各商品毎のコード+名称+料金マスターの最大開始日のレコード where2つの組あわせ+料金マスターの商品コードでのGroupBy+ 日付Order+最初の1件という条件になるのですが、どうもSQLエラーばかりで。 識者の方、宜しくお願いいたします。

  • SQLについて

    以下のSQLを実行すると。 SQL実行中に以下のエラーが発生しました。 エラーコード:907 [Oracle][ODBC][Ora]ORA-00907: 右カッコがありません。 というエラーが表示されます。 どこがおかしいでしょうか? SELECT Q1.Pコード, Q1.Qコード, T1.E名称 A名称, T2.E名称 B名称, T3.E名称 C名称, T4.E名称 D名称, FROM ( ( ( ( SELECT Pコード, Qコード, Aコード, Bコード, Cコード, Dコード, FROM 報告書 WHERE Pコード = '0001' AND Qコード = '0001' AND ) Q1 INNER JOIN Eマスタ T1 ON Q1.Aコード = T1.Eコード ) INNER JOIN Eマスタ T2 ON Q1.Bコード = T2.Eコード ) INNER JOIN Eマスタ T3 ON Q1.Cコード = T3.Eコード ) INNER JOIN Eマスタ T4 ON Q1.Dコード = T4.Eコード ORDER BY Pコード, Qコード;

  • 複数のテーブルからのデータ取得と連結

    いつもお世話になっております。 JavaでDBからデータを取得するプログラムを作成中です。 単純なものは問題無いのですが、 複数のテーブルからデータを取得し、そのデータを連結させるプログラムを作りたいのですがわからず困っています。 テーブル1 コードA(Key)       名称A テーブル2 コードB(Key)       名称B テーブル3 コードA(Key)       コードB(Key)       コードC(Key)       名称C となっており、取得したデータを 名称A+名称B+名称C と表示したいのですが、どのような処理を行えばよいのでしょうか? ちなみに複数のレコードを操作するプログラムも作ったことが無いレベルです。 どなたかご教授お願いします。

    • ベストアンサー
    • Java