%FIELDSを使用した複合キーのソート

**V7R5 ,V7R3+PTF 以上**  で `%FIELDS` 関数を使用した **複合キー** のソートが可能になっています。
オープン系と連携したり、ちょっと複雑な事をやっていると、何かと便利なデータ構造の配列化ですが、ソートが単一キーだった事が解消されています。

## 使用例

以下は、使用例です。固定フォームRPGでも使用可能です。
```rpgle:QII0220R.rpgle
H DATEDIT(*YMD)
H*- ***************************************************************
H*- * Ｆ仕様書                                                   **
H*- ***************************************************************
F*- ---<< ファイル定義    >>-----*
FITEM      IF   E           K DISK
D*- ---<< 定数／変数定義    >>-----*
D MAX             C                   9999
D*
D R1              DS                  LIKEREC(ITEMR :*ALL )
D*
D REC             DS                  LIKEDS(R1        )
D                                     DIM(*AUTO : MAX      )
D*
D MSG             S             40A
C*- ***************************************************************
C*- *  ＫＬＩＳＴ                                                **
C*- ***************************************************************
C*- ***************************************************************
C*- *  メインロジック                                            **
C*- ***************************************************************
C*
C*-----------------------
C*-  レコードキャッシュ
C*-----------------------
C                   DO        *HIVAL
C                   READ      ITEMR         R1
C*
C                   IF        %EOF
C                   LEAVE
C                   ENDIF
C*
C                   EVAL      REC(*NEXT)  = R1
C*
C*-    許容最大に達した
C                   IF        %ELEM(REC) >= MAX
C                   LEAVE
C                   ENDIF
C*                                                                  
C                   ENDDO
C*
C*-    ソート前
C                   EVAL      R1          = REC(1)
C                   EVAL      MSG         = ' ソート前（　　） '
C                                         + %EDITC(R1.CODE :'X')
C                                         + ' '
C                                         + R1.KANA
C     MSG           DSPLY
C*
C*-    単一キー・ソート（仕入先コード、カナ）
C****                   SORTA     REC(*).VENDC
C*--------------------------------------------------------------------
C*-    マルチキー・ソート（仕入先コード、カナ）
C                   SORTA(A)  REC           %FIELDS(VENDC : KANA )
C*
C                   EVAL      R1          = REC(1)
C                   EVAL      MSG         = ' ソート後（昇順） '
C                                         + %EDITC(R1.CODE :'X')
C                                         + ' '                        
C                                         + R1.KANA
C     MSG           DSPLY
C*--------------------------------------------------------------------
C*-    降順
C                   SORTA(D)  REC           %FIELDS(VENDC : KANA )
C*
C                   EVAL      R1          = REC(1)
C                   EVAL      MSG         = ' ソート後（降順） '
C                                         + %EDITC(R1.CODE :'X')
C                                         + ' '
C                                         + R1.KANA
C     MSG           DSPLY
C*
C                   SETON                                        LR
C                   RETURN
```

## 実行元データ（QUERY400でソート）

![2022-12-10_161227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/01a0b349-efd7-3b34-55e1-b38e4d082658.png)![2022-12-10_161400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/218111c7-7b21-b33c-89db-a74d26208a40.png)
![2022-12-10_161504.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/409a23a6-a6a1-c234-f584-dda4a7df77f8.png)

## 実行結果
![2022-12-10_162340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/8eac8c5b-1641-37b1-caf9-92c33b5192a8.png)

**RPG** も日々進化！