You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Current »

現在のソリューションには、開始日 (Start Date) の列の書式が設定されないという問題があります。  開始日は、符号付きの数値で 6 桁の長さのフィールドになっています。このステップでは、開始日の列を日付タイプのフィールドに変換して、作業リストに含めます。その後、Excel の開始日列の書式も日付セルとして設定することができます。

  1. ファイルから STARTDTER を読み込んで変換し、作業リストには日付の作業フィールドを含めます。読み込むフィールドの GROUP_BY を挿入して、SELECT コマンドでこれを使用するようファンクションを変更します。コードは以下のようになります。

    GROUP_BY NAME(#EMP_GRP) FIELDS(#empno #givename #surname #startdter #phonehme #salary)
    .....
    SELECT FIELDS(#EMP_GRP) FROM_FILE(pslmst1) WITH_KEY(#deptment #section) NBR_KEYS(*compute)

  2. 作業リストで、フィールド STARTDTER を STD_DATEX で置き換えます。

  3. SELECT ループ内で、以下の操作を行うロジックを追加します。

    STARTDTER が日付 (YYMMDD形式) かどうかを確認する。
            日付 (YYMMDD形式) の場合、STARTDTER をフィールド STD_DATEX に変換する。
            日付(YYMMDD形式) ではない場合、STD_DATEX を *SQLNULL に設定する。

    コードは以下のようになります。

    CLR_LIST NAMED(#employs)
    SELECT FIELDS(#EMP_GRP) FROM_FILE(pslmst1) WITH_KEY(#deptment #section) NBR_KEYS(*compute)
    IF (#STARTDTER.IsDate( YYMMDD ))
    #Std_Datex := #STARTDTER.AsDate( YYMMDD )
    ELSE
    #Std_Datex := *SQLNULL
    ENDIF
    ADD_ENTRY TO_LIST(#employs)
    ENDSELECT
  4. EMPLOYS の DEF_LIST コマンドを変更し、フィールド LISTCOUNT を使ったカウンターを入れます。コードは以下のようになります。

    Def_List Name(#employs) Fields(#empno #givename #surname #STD_DATEX #PHONEHME #salary) Counter(#listcount) Type(*working) Entrys(*max)

  5. 開始日列の書式を日付として設定する ADD コマンドを追加します。コードは以下のようになります。

    *開始日列をフォーマットする
    #std_num := #listcount + 3
    #jsmxcmd := 'ADD OBJECT(*CELLSTYLE) COLUMN(5) RANGE(5,' + #std_num.asstring + ') TYPE(*DATE) FORMAT(*FORMAT2)'
    Use Builtin(jsmx_command) With_Args(#jsmxhdle1 #jsmxcmd) To_Get(#jsmsts #jsmmsg)
    Execute Subroutine(CHECK_STS) With_Parms(#JSMXHDLE1)
     
    ここでも、ADD コマンドが ExcelService の WRITE コマンドの前にあることを確認してください。

  6. Excel でドキュメントを開くと、給与列の幅を調整する必要があることが分かります。これは、複数の給与のサイズがあるためです (1,234,456.50など)。この幅を設定するには、SET コマンドで OBJECT(*COLUMNWIDTH) を使用してください。コードは以下のようになります。

    *列幅の設定 - 給与
    #jsmxcmd := 'SET OBJECT(*COLUMNWIDTH) RANGE(7) WIDTH(3260)'
    USE BUILTIN(jsmx_command) WITH_ARGS(#jsmxhdle1 #jsmxcmd) TO_GET(#jsmsts #jsmmsg)
    EXECUTE SUBROUTINE(CHECK_STS) With_Parms(#JSMXHDLE1)

  7. ファンクション iiiFN13 を再コンパイルして再度テストします。ドキュメントは以下のようになります。
  • No labels