BK REPORT Z_TRFI0003


*&---------------------------------------------------------------------*
*& REPORT  Z_TRFI0003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_TRFI0003.
TYPE-POOLS:SLIS.
TABLES:FAGLFLEXT,LFC1,LFC3,KNC1,KNC3,BSIK,BSAK,BSID,BSAD,BSEG,SKA1,SETHIER_CO,LFA1,KNA1,TKA02.

TYPES:
* LFC1
  BEGIN OF S_LFC1,
    LIFNR TYPE LFC1-LIFNR,
       UMSAV TYPE LFC1-UMSAV,
       UM01S TYPE UMXXS,
       UM02S TYPE UMXXS,
       UM03S TYPE UMXXS,
       UM04S TYPE UMXXS,
       UM05S TYPE UMXXS,
  UM06S TYPE UMXXS,
  UM07S TYPE UMXXS,
  UM08S TYPE UMXXS,
  UM09S TYPE UMXXS,
  UM10S TYPE UMXXS,
  UM11S TYPE UMXXS,
  UM12S TYPE UMXXS,
  UM13S TYPE UMXXS,
  UM14S TYPE UMXXS,
  UM15S TYPE UMXXS,
  UM16S TYPE UMXXS,
  UM01H TYPE UMXXH,
       UM02H TYPE UMXXH,
       UM03H TYPE UMXXH,
       UM04H TYPE UMXXH,
       UM05H TYPE UMXXH,
  UM06H TYPE UMXXH,
  UM07H TYPE UMXXH,
  UM08H TYPE UMXXH,
  UM09H TYPE UMXXH,
  UM10H TYPE UMXXH,
  UM11H TYPE UMXXH,
  UM12H TYPE UMXXH,
  UM13H TYPE UMXXH,
  UM14H TYPE UMXXH,
  UM15H TYPE UMXXH,
  UM16H TYPE UMXXH,
    END OF S_LFC1,
    IT_LFC1 TYPE STANDARD TABLE OF S_LFC1 ,

*LFC3
BEGIN OF S_LFC3,
  LIFNR TYPE  LFC3-LIFNR,
  SHBKZ TYPE LFC3-SHBKZ,
  SALDV TYPE LFC3-SALDV,
  END OF S_LFC3,
  IT_LFC3 TYPE STANDARD TABLE OF S_LFC3,

*LFB1
 BEGIN OF S_LFB1,
   LIFNR TYPE LIFNR,
   BUKRS TYPE BUKRS,
   AKONT TYPE AKONT,
 END OF S_LFB1,
 IT_LFB1 TYPE STANDARD TABLE OF S_LFB1,


*T074
 BEGIN OF S_T074,
   SKONT TYPE SKONT,
   UMSKZ TYPE UMSKZ,
   HKONT TYPE HKONT,
   END OF S_T074,
   IT_T074 TYPE STANDARD TABLE OF S_T074,

BEGIN OF S_T001,
  KTOPL TYPE T001-KTOPL,
  BUTXT TYPE T001-BUTXT,
END OF S_T001,
IT_T001 TYPE STANDARD TABLE OF S_T001,



* BSIK
BEGIN OF S_BSIK,
  HKONT TYPE  HKONT,
       LIFNR TYPE LIFNR,
  SHKZG TYPE SHKZG,
  GJAHR TYPE GJAHR,
  MONAT TYPE MONAT,
  DMBTR TYPE DMBTR,
  WAERS TYPE WAERS,
 END OF S_BSIK,
 IT_BSIK TYPE STANDARD TABLE OF S_BSIK,

*BSAK
BEGIN OF S_BSAK,
 HKONT TYPE  HKONT,
 LIFNR TYPE LIFNR,
  SHKZG TYPE SHKZG,
  GJAHR TYPE GJAHR,
  MONAT TYPE MONAT,
  DMBTR TYPE DMBTR,
  WAERS TYPE WAERS,
END OF S_BSAK,
IT_BSAK TYPE STANDARD TABLE OF S_BSAK,

* DATAOUT2
BEGIN OF S_DATAOUT2,
  AKONT TYPE LFB1-AKONT"統制鑑定
  LIFNR TYPE LFC1-LIFNR"仕入先
  UMSAV TYPE LFC1-UMSAV,"前期残高
  UMS  TYPE UMXXS,"J方
  UMH TYPE UMXXS,"貸方
  UML TYPE UMXXS,"当期残高
  WAERS         TYPE BSIK-WAERS,       "通貨コード
  END OF S_DATAOUT2,
IT_DATAOUT2 TYPE STANDARD TABLE OF S_DATAOUT2,

* DATAOUT21
BEGIN OF S_DATAOUT21,
  AKONT TYPE LFB1-AKONT"統制鑑定
  LIFNR TYPE LFC1-LIFNR"仕入先
  UMSAV TYPE LFC1-UMSAV,"前期残高
  UMS  TYPE UMXXS,"J方
  UMH TYPE UMXXS,"貸方
  UML TYPE UMXXS,"当期残高
  END OF S_DATAOUT21,
IT_DATAOUT21 TYPE STANDARD TABLE OF S_DATAOUT21,

  BEGIN OF S_SHBKZ,
    SIGN(1),
    OPTION(2),
    LOW TYPE LFC3-SHBKZ,
      END OF S_SHBKZ,
 IT_SHBKZ TYPE RANGE OF LFC3-SHBKZ,
      "STANDARD TABLE OF S_SHBKZ.

  BEGIN OF S_UMSAV,
   SIGN(1),
   OPTION(2),
   UMSAV TYPE LFC1-UMSAV,
   END OF S_UMSAV,
   IT_UMSAV TYPE RANGE OF LFC1-UMSAV,


"会計期間レンジ
  BEGIN OF T_STR_RPMAX,
    SIGN(1)       TYPE C,
    OPTION(2)     TYPE C,
    LOW           TYPE FAGLFLEXT-RPMAX,"会計期間
    HIGH          TYPE FAGLFLEXT-RPMAX,
  END OF T_STR_RPMAX,
  IT_RPMAX      TYPE STANDARD TABLE OF T_STR_RPMAX.


TYPES:SLIS_T_FIELDCAT_ALV TYPE SLIS_FIELDCAT_ALV OCCURS 1.

DATAG_REPID LIKE SY-REPID,
      LINE TYPE I,
        CS_BNAME        TYPE STRING
                  VALUE '会社コード',     "会社コードテキスト
                  IT_RPMAX        TYPE IT_RPMAX,        "会計期間レンジテーブル
RPMAX           TYPE FAGLFLEXT-RPMAX,   "会計期間
  PERIV           TYPE T001-PERIV,        "会計年度バリアント
    DATELOW         TYPE SY-DATUM,          "開始会計期間の最終日
     DATEHIGH        TYPE SY-DATUM,          "終了会計期間の最終日
      EXIT_FLG        TYPE ,
      KTOPL           TYPE T001-KTOPL,
      BUTXT           TYPE T001-BUTXT,        "会社名前       "勘定コード表
      WAERS           TYPE T001-WAERS.        "通貨コード

  DATAI_TKA02 LIKE TABLE OF TKA02 WITH HEADER LINE,
        W_TKA02 LIKE I_TKA02.


* DATA: I_K_GROUP_REMOTE_READ LIKE K_GROUP_REMOTE_READ.
*      W_K_GROUP_REMOTE_READ LIKE I_K_GROUP_REMOTE_READ.
DATA I_FAGLFLEXT LIKE TABLE OF FAGLFLEXT,
        W_FAGLFLEXT LIKE I_FAGLFLEXT.
*仕入先DATA 定義
DATAW_LFC1 TYPE S_LFC1 ,
      I_LFC1 TYPE IT_LFC1,

I_LFC3 TYPE IT_LFC3 ,
W_LFC3 TYPE S_LFC3,

W_LFB1 TYPE S_LFB1,
I_LFB1 TYPE IT_LFB1,

I_T074 TYPE IT_T074,
W_T074 TYPE S_T074,

I_BSIK TYPE IT_BSIK,
W_BSIK TYPE S_BSIK,

I_BSAK TYPE IT_BSAK,
W_BSAK TYPE S_BSAK,

I_T001 TYPE IT_T001,
W_T001 TYPE S_T001,

I_DATAOUT2 TYPE IT_DATAOUT2,
W_DATAOUT2 TYPE S_DATAOUT2,

I_DATAOUT21 TYPE IT_DATAOUT21,
W_DATAOUT21 TYPE S_DATAOUT21,

I_SHBKZ TYPE IT_SHBKZ,
W_SHBKZ TYPE S_SHBKZ,

   I_UMSAV TYPE IT_UMSAV,
   W_UMSAV TYPE S_UMSAV.
DATA:UMS  TYPE UMXXS,"J方
  UMH TYPE UMXXS,"貸方
  UML TYPE UMXXS."当期残高
DATAW_FIELD TYPE SLIS_FIELDCAT_ALV,
     I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

CONSTANTS CNS_PF_STATUS TYPE SLIS_FORMNAME VALUE 'ALV_PF_STATUS' ."ALV自定义按钮
CONSTANTS CNS_USER_COMMAND TYPE SLIS_FORMNAME VALUE'ALV_USER_COMMAND'."ALV自定义按钮响应事件
DATAV_EXCEL TYPE  OBJ_RECORD ,
      V_BOOK TYPE  OBJ_RECORD  ,
      V_CELL TYPE  OBJ_RECORD ,
      V_FONT TYPE  OBJ_RECORD ,
      V_RANGE TYPE  OBJ_RECORD ,
      V_COLUMN TYPE  OBJ_RECORD .



DATAI_KNC1 LIKE TABLE OF KNC1 WITH HEADER LINE,
I_KNC3 LIKE TABLE OF KNC3 WITH HEADER LINE,
I_KNB1 LIKE TABLE OF KNB1 WITH HEADER LINE,
"I_T074 LIKE TABLE OF T074 ,
I_BSAD LIKE TABLE OF BSAD,
I_BSID LIKE TABLE OF BSID,
I_SKA1 LIKE TABLE OF SKA1.

DATAI_BKPF TYPE STANDARD TABLE OF BKPF,
      I_BSEG TYPE STANDARD TABLE OF BSEG,
      "I_BSIK TYPE STANDARD TABLE OF BSIK,
      "I_BSAK TYPE STANDARD TABLE OF BSAK,
      "I_BSID TYPE STANDARD TABLE OF BSID,
      "I_BSAD TYPE STANDARD TABLE OF BSAD,
      I_SKAT TYPE STANDARD TABLE OF SKAT,
      I_SETHEADERT TYPE STANDARD TABLE OF SETHEADERT.



*选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
 "会社コード  "事業領域
PARAMETERS:
  P_BUKRS TYPE T001-BUKRS OBLIGATORY MEMORY ID BUK,
  P_RBUSA TYPE FAGLFLEXT-RBUSA MODIF ID RBU .

SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B4 WITH FRAME TITLE TEXT-004.
"会計年度
PARAMETERS P_RYEAR TYPE FAGLFLEXT-RYEAR OBLIGATORY MEMORY ID GJR.
SELECT-OPTIONS
  "会計期間
    S_RPAMAX FOR FAGLFLEXT-RPMAX NO-EXTENSION OBLIGATORY.
"決算仕訳除外
PARAMETERSCB_CHAN1 AS CHECKBOX .

SELECTION-SCREEN END OF BLOCK B4.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
  "勘定科目
  SELECT-OPTIONSS_SAKNR FOR SKA1-SAKAN.

  "仕訳除外特定勘定
SELECT-OPTIONSS_HKONT FOR SKA1-SAKNR MODIF ID HKO.
*SELECT-OPTIONS P_RBUSA FOR FAGLFLEXT-RBUSA.

SELECTION-SCREEN BEGIN OF LINE.
"利益センターグループ
PARAMETERSRB_SELE1  RADIOBUTTON GROUP RAD1 DEFAULT 'X' USER-COMMAND SINGLECLICK  .

SELECTION-SCREEN COMMENT 5(20TEXT-005.
SELECTION-SCREEN POSITION 25.
SELECT-OPTIONS RB_NOTE1 FOR  SETHIER_CO-GROUPNAME DEFAULT 'X' MODIF ID RB1.
SELECTION-SCREEN END OF LINE.


"仕入先コード
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSRB_SELE2  RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 5(20TEXT-006.
SELECTION-SCREEN POSITION 25.
SELECT-OPTIONS RB_NOTE2 FOR LFA1-LIFNR MODIF ID RB2.
SELECTION-SCREEN END OF LINE.
"得意先コード
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSRB_SELE3  RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 5(20TEXT-007.
SELECTION-SCREEN POSITION 25.
SELECT-OPTIONS RB_NOTE3 FOR KNA1-KUNNR MODIF ID RB3.
SELECTION-SCREEN END OF LINE.


"反対仕訳除外

PARAMETERS  CB_CHAN2 AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.

PARAMETERSRB_MON1  RADIOBUTTON GROUP RAD2 DEFAULT 'X',
            RB_MON2  RADIOBUTTON GROUP RAD2,
            RB_MON3  RADIOBUTTON GROUP RAD2.

SELECTION-SCREEN END OF BLOCK B3.





  INITIALIZATION .
  G_REPID SY-REPID.


*&---------------------------------------------------------------------*
*&  前処理
*&---------------------------------------------------------------------*
* 事業領域の状態変化

AT SELECTION-SCREEN OUTPUT.

  CASE 'X ' .
  WHEN RB_SELE1.
  CLEAR RB_NOTE2[].
  CLEAR RB_NOTE3[].

    LOOP AT SCREEN.
      IF SCREEN-GROUP1 'RB2' OR SCREEN-GROUP1 'RB3'.
        SCREEN-INPUT '0'.
      MODIFY SCREEN.
  ENDIF.
    ENDLOOP.
  WHEN RB_SELE2.
P_RBUSA SPACE.
  CLEAR RB_NOTE1[].
  CLEAR RB_NOTE3[].
  CLEAR S_HKONT[].
 LOOP AT SCREEN.
      IF SCREEN-GROUP1 'RB1' OR SCREEN-GROUP1 'RB3' OR SCREEN-GROUP1 'RBU' OR SCREEN-GROUP1 'HKO'.
        SCREEN-INPUT '0'.
      MODIFY SCREEN.
  ENDIF.
    ENDLOOP.
  WHEN RB_SELE3.
P_RBUSA SPACE.
  CLEAR RB_NOTE1[].
  CLEAR RB_NOTE2[].
  CLEAR S_HKONT[].
 LOOP AT SCREEN.
      IF SCREEN-GROUP1 'RB1' OR SCREEN-GROUP1 'RB2' OR SCREEN-GROUP1 'RBU' OR SCREEN-GROUP1 'HKO'.
        SCREEN-INPUT '0'.
      MODIFY SCREEN.
  ENDIF.
    ENDLOOP.
ENDCASE.




AT SELECTION-SCREEN.
* 会社コードチェック
  PERFORM CHECK_BUKRS
      USING
        P_BUKRS
      CHANGING
        WAERS
        KTOPL
        BUTXT
        RPMAX.

* この会社コードは存在しません
  IF EXIT_FLG 1.
    EXIT_FLG 0.
    MESSAGE E888(ABAPDOCUWITH 'この会社コードは存在しません'.
    "MESSAGE S001 WITH CS_BNAME.
    RETURN.
  ENDIF.



* 会計期間チェック
  PERFORM CHECK_YEARMON
    USING
      P_BUKRS
      P_RYEAR
      S_RPAMAX[]
    CHANGING
      IT_RPMAX.


START-OF-SELECTION.

* 会社コードチェック
  PERFORM CHECK_BUKRS
      USING
        P_BUKRS
      CHANGING
        WAERS
        KTOPL
        BUTXT
        RPMAX.

* この会社コードは存在しません
  IF EXIT_FLG 1.
    EXIT_FLG 0.
    MESSAGE E888(ABAPDOCUWITH 'この会社コードは存在しません'.
    "MESSAGE S610 WITH CS_BNAME.
    LEAVE LIST-PROCESSING.
  ENDIF.


IF RB_SELE1 'X'.
  PERFORM GETDATA1.
ELSEIF RB_SELE2 'X'.
  PERFORM SETFIELDCAT.

  PERFORM GETDATA2.
  DATA LIN TYPE I.
  DESCRIBE TABLE I_DATAOUT2 LINES LIN.
    IF  LIN 0.
  MESSAGE E888(ABAPDOCUWITH 'データは存在しません'.

      ELSE.
  PERFORM DISPLAYBYALV USING I_DATAOUT2 I_FIELDCAT.
      ENDIF.
ELSEIF RB_SELE3 'X'.
  PERFORM GETADATA3.
ENDIF.

FORM ALV_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_004' EXCLUDING RT_EXTAB.

ENDFORM.



*&---------------------------------------------------------------------*
*&    FORM  CHECK_BUKRS
*&---------------------------------------------------------------------*
*     会社コードチェック
*----------------------------------------------------------------------*
*  -->LI_BUKRS        会社コード
*  <--LO_WAERS        通貨コード
*  <--LO_KTOPL        勘定コード表
*  <--LO_BUTXT        会社名前
*  <--LO_ANZAP        会計期間
*----------------------------------------------------------------------*
FORM CHECK_BUKRS
  USING
    LI_BUKRS          TYPE  T001-BUKRS
  CHANGING
    LO_WAERS          TYPE  T001-WAERS
    LO_KTOPL          TYPE  T001-KTOPL
    LO_BUTXT          TYPE  T001-BUTXT
    LO_ANZAP          TYPE  FAGLFLEXT-RPMAX.

* 会社コードチェック
  SELECT SINGLE KTOPL WAERS
    INTO  (LO_KTOPL,LO_WAERS)
    FROM  T001
    WHERE BUKRS     LI_BUKRS.

* DBに指定会社コードがない場合
  IF SY-SUBRC <> 0.
    EXIT_FLG 1."この会社コードは存在しません
    RETURN.
  ENDIF.

* 会計期間数、会社名前取得
 " CALL FUNCTION 'Z_TR00005'
  "  EXPORTING
   "   BUKRS = LI_BUKRS
    "IMPORTING
     " ANZAP = LO_ANZAP
      "BUTXT = LO_BUTXT.

ENDFORM.                    " CHECK_BUKRS

*&---------------------------------------------------------------------*
*&    FORM  CHECK_YEARMON
*&---------------------------------------------------------------------*
*     ①会計年度と会計期間チェック
*     ②決算月レンジテーブル取得
*----------------------------------------------------------------------*
*  -->LI_BUKRS        会社コード
*  -->LI_RYEAR        会計年度
*  -->LI_IT_RPMAX     会計期間
*  <--LO_IT_RPMAX     決算月レンジ
*----------------------------------------------------------------------*
FORM CHECK_YEARMON
  USING
    LI_BUKRS          TYPE T001-BUKRS
    LI_RYEAR          TYPE FAGLFLEXT-RYEAR
    LI_IT_RPMAX       TYPE IT_RPMAX
  CHANGING
    LO_IT_RPMAX       TYPE IT_RPMAX.

  DATA:
    W_LGJA            TYPE BKPF-GJAHR,    "入力期間の最大値
    W_BKPF            TYPE BKPF-MONAT,    "システム会計期間
    W_GJAHR           TYPE BKPF-GJAHR,    "システム会計年度
    W_STR_RPMAX       TYPE T_STR_RPMAX,   "最大会計期間取得用
    W_STR_RANG        TYPE T_STR_RPMAX.   "会計期間用

  READ TABLE LI_IT_RPMAX
       INTO W_STR_RANG  INDEX 1.

* 入力会計期間最大値取得
  W_LGJA W_STR_RANG-LOW.
  IF W_STR_RANG-HIGH IS NOT INITIAL.
    IF W_STR_RANG-HIGH <= RPMAX.
      W_LGJA W_STR_RANG-HIGH.
    ELSE.
      W_LGJA RPMAX.
    ENDIF.
  ENDIF.

* システム会計年度、会計期間取得
  CALL FUNCTION 'GET_CURRENT_YEAR'
    EXPORTING
      BUKRS LI_BUKRS
      DATE  SY-DATUM
    IMPORTING
      CURRM W_BKPF
      CURRY W_GJAHR.

* 会計年度チェック
  IF LI_RYEAR W_GJAHR.      "入力年度=システム年度
    "システム期間<>12 && 入力最大期間>システム期間
    IF W_BKPF <> 12 AND W_LGJA > W_BKPF.
      MESSAGE E888(ABAPDOCUWITH '当月期間内で入力してください'.
      "MESSAGE E105.     "当月期間内で入力してください
      LEAVE LIST-PROCESSING.
    ENDIF.
  ELSEIF LI_RYEAR > W_GJAHR.  "入力会計年度 > システム会計年度
          MESSAGE E888(ABAPDOCUWITH '来年度以降の会計年度は入力できませ'.       "来年度以降の会計年度は入力できません
    LEAVE LIST-PROCESSING.
  ENDIF.

* 決算月のチェック
  "決算仕訳除外を選択したら
  IF CB_CHAN1 'X'.
    IF W_STR_RANG-LOW < 13.

      CASE W_LGJA.
        WHEN 01 OR 02 OR 04 OR 05 OR 07 OR 08 OR 10 OR 11.
         MESSAGE E888(ABAPDOCUWITH '決算月ではありません'.
          "MESSAGE E305.
        WHEN 03.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'EQ'.
          W_STR_RPMAX-LOW       03.
        WHEN 06.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'EQ'.
          W_STR_RPMAX-LOW       06.
        WHEN 09.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'EQ'.
          W_STR_RPMAX-LOW       09.
        WHEN 12.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'EQ'.
          W_STR_RPMAX-LOW       12.
        WHEN 13.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'EQ'.
          W_STR_RPMAX-LOW       13.
        WHEN 14.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'BT'.
          W_STR_RPMAX-LOW       13.
          W_STR_RPMAX-HIGH      14.
        WHEN 15.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'BT'.
          W_STR_RPMAX-LOW       13.
          W_STR_RPMAX-HIGH      15.
        WHEN 16.
          W_STR_RPMAX-SIGN      'I'.
          W_STR_RPMAX-OPTION    'BT'.
          W_STR_RPMAX-LOW       13.
          W_STR_RPMAX-HIGH      16.
      ENDCASE.
    ELSE.
      IF W_STR_RANG-HIGH IS INITIAL.
        W_STR_RPMAX-SIGN     'I'.
        W_STR_RPMAX-OPTION   'EQ'.
        W_STR_RPMAX-LOW      W_STR_RANG-LOW.
      ELSE.
        W_STR_RPMAX-SIGN     'I'.
        W_STR_RPMAX-OPTION   'BT'.
        W_STR_RPMAX-LOW      W_STR_RANG-LOW.
        W_STR_RPMAX-HIGH     W_LGJA.
      ENDIF.
    ENDIF.
    CLEAR LO_IT_RPMAX.
    APPEND W_STR_RPMAX TO LO_IT_RPMAX.
  ENDIF.

  "会計年度バリアント
  SELECT  SINGLE PERIV
    INTO  PERIV
    FROM  T001
    WHERE BUKRS LI_BUKRS.

  "会計期間の日付下限
  IF LI_RYEAR W_GJAHR
     AND S_RPAMAX-LOW W_BKPF.

    CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'
      EXPORTING
        I_GJAHR        LI_RYEAR
        I_PERIV        PERIV
        I_POPER        S_RPAMAX-LOW
      IMPORTING
        E_DATE         DATELOW
      EXCEPTIONS
        INPUT_FALSE    1
        T009_NOTFOUND  2
        T009B_NOTFOUND 3
        OTHERS         4.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    DATEHIGH SY-DATUM.
  ELSE.
    CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'
      EXPORTING
        I_GJAHR        LI_RYEAR
        I_PERIV        PERIV
        I_POPER        S_RPAMAX-LOW
      IMPORTING
        E_DATE         DATELOW
      EXCEPTIONS
        INPUT_FALSE    1
        T009_NOTFOUND  2
        T009B_NOTFOUND 3
        OTHERS         4.



    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET'
      EXPORTING
        I_GJAHR        LI_RYEAR
        I_PERIV        PERIV
        I_POPER        S_RPAMAX-LOW
      IMPORTING
        E_DATE         DATEHIGH
      EXCEPTIONS
        INPUT_FALSE    1
        T009_NOTFOUND  2
        T009B_NOTFOUND 3
        OTHERS         4.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF.

  "会計期間の日付上限
  IF S_RPAMAX-HIGH IS NOT INITIAL.

    IF LI_RYEAR     W_GJAHR
      AND S_RPAMAX-HIGH W_BKPF.

      DATEHIGH SY-DATUM.
    ELSE.
      CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET'
        EXPORTING
          I_GJAHR        LI_RYEAR
          I_PERIV        PERIV
          I_POPER        S_RPAMAX-HIGH
        IMPORTING
          E_DATE         DATEHIGH
        EXCEPTIONS
          INPUT_FALSE    1
          T009_NOTFOUND  2
          T009B_NOTFOUND 3
          OTHERS         4.

      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.

    ENDIF.
  ENDIF.

ENDFORM.                    " CHECK_YEARMON


*&---------------------------------------------------------------------*
*&      FORM  GETDATA2
*&---------------------------------------------------------------------*
*       TEXT
*---------------* 仕入先データ取得-------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GETDATA2 .


* 通常の統制鑑定残高の取得

SELECT LIFNR
       UMSAV
       UM01S
       UM02S
       UM03S
       UM04S
       UM05S
  UM06S
  UM07S
  UM08S
  UM09S
  UM10S
  UM11S
  UM12S
  UM13S
  UM14S
  UM15S
  UM16S
  UM01H
       UM02H
       UM03H
       UM04H
       UM05H
  UM06H
  UM07H
  UM08H
  UM09H
  UM10H
  UM11H
  UM12H
  UM13H
  UM14H
  UM15H
  UM16H
INTO TABLE I_LFC1
FROM LFC1
WHERE LIFNR IN RB_NOTE2
AND   BUKRS P_BUKRS
AND GJAHR P_RYEAR.

  LOOP AT I_LFC1 INTO W_LFC1.
   W_UMSAV-SIGN ='I'.
   W_UMSAV-OPTION 'EQ'.
   W_UMSAV-UMSAV W_LFC1-UMSAV.
   APPEND  W_UMSAV TO I_UMSAV.
   ENDLOOP.
   SORT I_UMSAV.
   DELETE ADJACENT DUPLICATES FROM I_UMSAV.




*特仕訳とき引き金額

SELECT LIFNR
  SHBKZ
  SALDV
INTO TABLE I_LFC3
FROM LFC3
WHERE
   LIFNR IN RB_NOTE2
AND BUKRS P_BUKRS
AND GJAHR P_RYEAR.

LOOP AT I_LFC3 INTO W_LFC3.
  W_SHBKZ-SIGN 'I'.
  W_SHBKZ-OPTION 'EQ'.
  W_SHBKZ-LOW W_LFC3-SHBKZ.
  APPEND W_SHBKZ TO I_SHBKZ.
  ENDLOOP.
  SORT I_SHBKZ.
  DELETE ADJACENT DUPLICATES FROM I_SHBKZ.


*統制鑑定取得

SELECT LIFNR
  BUKRS
  AKONT

INTO TABLE I_LFB1
FROM LFB1
WHERE LIFNR IN  RB_NOTE2
AND BUKRS P_BUKRS.

* 鑑定コード取得

SELECT SKONT
       UMSKZ
       HKONT
INTO TABLE I_T074
FROM T074
WHERE KTOPL W_T001-KTOPL
AND KOART 'K'
AND UMSKZ IN I_SHBKZ
AND HKONT IN I_UMSAV.


* BSIKデータ取得

SELECT HKONT
       LIFNR
  SHKZG
  GJAHR
  MONAT
  DMBTR
  WAERS
INTO TABLE I_BSIK
FROM BSIK
WHERE BUKRS P_BUKRS
AND GJAHR P_RYEAR
AND MONAT <= S_RPAMAX
AND UMSKZ <> SPACE
AND HKONT IN S_SAKNR
AND LIFNR IN RB_NOTE2.

* BSAKデータ取得

SELECT HKONT
       LIFNR
  SHKZG
  GJAHR
  MONAT
  DMBTR
  WAERS
INTO TABLE I_BSAK
FROM BSAK
WHERE BUKRS P_BUKRS
AND GJAHR P_RYEAR
AND MONAT <= S_RPAMAX
AND UMSKZ <> SPACE
       AND HKONT IN S_SAKNR
AND LIFNR IN RB_NOTE2.

SELECT SAKNR
       XBILK
  INTO TABLE I_SKA1
  FROM SKA1
  WHERE KTOPL W_T001-KTOPL
  AND SAKNR S_SAKNR.


LOOP AT I_LFC1 INTO W_LFC1.
  READ TABLE I_LFB1 WITH KEY LIFNR W_LFC1-LIFNR INTO W_LFB1.
  IF S_RPAMAX-LOW 2.
  UMS W_LFC1-UM01S.
  UMH W_LFC1-UM01H.

  ELSEIF  S_RPAMAX-LOW 3.
  UMS W_LFC1-UM01S + W_LFC1-UM02S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H.

 ELSEIF S_RPAMAX-LOW 4.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H.

 ELSEIF S_RPAMAX-LOW 5.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H.

  ELSEIF S_RPAMAX-LOW 6.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H.

  ELSEIF S_RPAMAX-LOW 7.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H .

    ELSEIF S_RPAMAX-LOW 8.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H + W_LFC1-UM07H.

    ELSEIF S_RPAMAX-LOW 9.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H + W_LFC1-UM07H + W_LFC1-UM08H.

    ELSEIF S_RPAMAX-LOW 10.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S + W_LFC1-UM09S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H + W_LFC1-UM07H + W_LFC1-UM08H + W_LFC1-UM09H.

    ELSEIF S_RPAMAX-LOW 11.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S + W_LFC1-UM09S + W_LFC1-UM10S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H + W_LFC1-UM07H + W_LFC1-UM08H + W_LFC1-UM09H + W_LFC1-UM10H.

    ELSEIF S_RPAMAX-LOW 12.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S + W_LFC1-UM09S + W_LFC1-UM10S + W_LFC1-UM11S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H  + W_LFC1-UM07H + W_LFC1-UM08H + W_LFC1-UM09H + W_LFC1-UM10H + W_LFC1-UM11H.

  ELSEIF S_RPAMAX-LOW 13.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S + W_LFC1-UM09S + W_LFC1-UM10S + W_LFC1-UM11S + W_LFC1-UM12S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H  + W_LFC1-UM07H + W_LFC1-UM08H + W_LFC1-UM09H + W_LFC1-UM10H + W_LFC1-UM11H + W_LFC1-UM12H.

  ELSEIF S_RPAMAX-LOW 14.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S + W_LFC1-UM09S + W_LFC1-UM10S + W_LFC1-UM11S + W_LFC1-UM12S + W_LFC1-UM13S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H  + W_LFC1-UM07H + W_LFC1-UM08H + W_LFC1-UM09H + W_LFC1-UM10H + W_LFC1-UM11H + W_LFC1-UM12H + W_LFC1-UM13H.

  ELSEIF S_RPAMAX-LOW 15.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S + W_LFC1-UM09S + W_LFC1-UM10S + W_LFC1-UM11S + W_LFC1-UM12S + W_LFC1-UM13S  + W_LFC1-UM14S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H  + W_LFC1-UM07H + W_LFC1-UM08H + W_LFC1-UM09H + W_LFC1-UM10H + W_LFC1-UM11H + W_LFC1-UM12H  + W_LFC1-UM13H  + W_LFC1-UM14H.

  ELSEIF S_RPAMAX-LOW 16.
  UMS W_LFC1-UM01S + W_LFC1-UM02S + W_LFC1-UM03S + W_LFC1-UM04S + W_LFC1-UM05S + W_LFC1-UM06S + W_LFC1-UM07S + W_LFC1-UM08S + W_LFC1-UM09S + W_LFC1-UM10S + W_LFC1-UM11S + W_LFC1-UM12S + W_LFC1-UM13S + W_LFC1-UM14S + W_LFC1-UM15S.
  UMH W_LFC1-UM01H + W_LFC1-UM02H + W_LFC1-UM03H + W_LFC1-UM04H + W_LFC1-UM05H + W_LFC1-UM06H  + W_LFC1-UM07H + W_LFC1-UM08H + W_LFC1-UM09H + W_LFC1-UM10H + W_LFC1-UM11H + W_LFC1-UM12H  + W_LFC1-UM13H + W_LFC1-UM14H + W_LFC1-UM15H.


  ENDIF.

W_DATAOUT2-AKONT W_LFB1-AKONT.
W_DATAOUT2-LIFNR W_LFC1-LIFNR.
W_DATAOUT2-UMSAV W_LFC1-UMSAV.
W_DATAOUT2-UMS UMS.
W_DATAOUT2-UMH UMH.
W_DATAOUT2-UML W_LFC1-UMSAV + UMS UMH.

APPEND W_DATAOUT2 TO I_DATAOUT2.

ENDLOOP.

LOOP AT I_LFC3 INTO W_LFC3.
READ TABLE I_LFB1 INTO W_LFB1 WITH KEY LIFNR W_LFC3-LIFNR .
W_DATAOUT21-AKONT W_LFB1-AKONT.
W_DATAOUT21-LIFNR W_LFC3-LIFNR.
W_DATAOUT21-UMSAV W_LFC3-SALDV.
W_DATAOUT21-UMS 0.
W_DATAOUT21-UMH 0.
W_DATAOUT21-UML W_LFC3-SALDV.

APPEND W_DATAOUT21 TO I_DATAOUT21.
ENDLOOP.

LOOP AT I_DATAOUT21 INTO W_DATAOUT21.
READ TABLE I_T074 INTO W_T074 WITH KEY HKONT W_DATAOUT21-AKONT.
W_DATAOUT2-AKONT W_T074-HKONT.
W_DATAOUT2-LIFNR W_DATAOUT21-LIFNR.
W_DATAOUT2-UMSAV W_DATAOUT21-UMSAV .
W_DATAOUT2-UMS 0.
W_DATAOUT2-UMH 0.
W_DATAOUT2-UML W_LFC3-SALDV.
APPEND W_DATAOUT2 TO I_DATAOUT2.
ENDLOOP.


LOOP AT I_BSIK INTO W_BSIK.

IF W_BSIK-SHKZG 'S'.
UMS W_BSIK-DMBTR.
ELSEIF
UMH W_BSIK-DMBTR.
ENDIF.

W_DATAOUT2-AKONT W_BSIK-HKONT.
W_DATAOUT2-LIFNR W_BSIK-LIFNR.
W_DATAOUT2-UMSAV W_BSIK-DMBTR .
W_DATAOUT2-UMS UMS.
W_DATAOUT2-UMS UMH.
W_DATAOUT2-UMS UMS + UMH.
APPEND W_DATAOUT2 TO I_DATAOUT2.
ENDLOOP.


  LOOP AT I_BSAK INTO W_BSAK.

IF W_BSAK-SHKZG 'S'.
UMS W_BSAK-DMBTR.
ELSEIF
UMH W_BSAK-DMBTR.
ENDIF.

W_DATAOUT2-AKONT W_BSAK-HKONT.
W_DATAOUT2-LIFNR W_BSAK-LIFNR.
W_DATAOUT2-UMSAV W_BSAK-DMBTR .
W_DATAOUT2-UMS UMS.
W_DATAOUT2-UMS UMH.
W_DATAOUT2-UMS UMS + UMH.
APPEND W_DATAOUT2 TO I_DATAOUT2.
ENDLOOP.
SORT I_DATAOUT2.
DELETE ADJACENT DUPLICATES FROM I_DATAOUT2.

ENDFORM.                    " GETDATA2




*&---------------------------------------------------------------------*
*&      FORM  GETADATA3
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GETADATA3 .








*得意データ取得


*通常の統制鑑定残高の取得
SELECT KUNNR
  UMSAV
*?  UM01S~UM16S
*?  UM01H~UM16H
INTO TABLE I_KNC1
FROM KNC1

  WHERE
*?  KUNNR IN RB_ROTE3 AND
 BUKRS P_BUKRS
AND GJAHR P_RYEAR.



*特仕訳取引き金額の取得

SELECT KUNNR
  SHBKZ
  SALDV
INTO TABLE  I_KNC3
FROM KNC3
WHERE
  "? KUNNR IN RB_ROTE3 AND
  BUKRS P_BUKRS
AND GJAHR P_RYEAR.



*統制鑑定取得

SELECT AKONT
INTO TABLE I_KNB1
FROM KNB1
WHERE
 "?  KUNNR IN RB_ROTE3 AND
  BUKRS P_BUKRS.

*鑑定コード取得

SELECT SKONT
INTO TABLE I_T074
FROM T074
WHERE KTOPL W_T001-KTOPL
AND KOART 'K'
AND UMSKZ I_KNC3-SHBKZ
AND HKONT I_KNC1-UMSAV.

*BSIDデータ取得

SELECT HKONT
  KUNNR AS 取引先コード
  SHKZG
  GJAHR
  MONAT
  DMBTR
  WAERS

INTO TABLE I_BSID
FROM BSID
WHERE BUKRS P_BUKRS
AND GJAHR P_RYEAR
AND MONAT <= S_RPAMAX
AND UMSKZ <> SPACE
AND HKONT IN S_SAKNR
AND KUNNR IN RB_NOTE3.

*BSADデータ取得


SELECT HKONT
  KUNNR AS 取引先コード
  SHKZG
  GJAHR
  MONAT
  DMBTR
  WAERS
INTO TABLE I_BSAD
FROM BSAD
WHERE BUKRS P_BUKRS
AND GJAHR P_RYEAR
AND MONAT <= S_RPAMAX
AND UMSKZ <> SPACE
AND HKONT IN S_SAKNR
AND KUNNR IN RB_NOTE3.


ENDFORM.                    " GETADATA3
*&---------------------------------------------------------------------*
*&      FORM  GETDATA1
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GETDATA1 .

* 会計期間数を取り得
*SELECT ANZAP
* INTO TABLE I_
* FROM Z_TR00005
*  WHERE BUKRS = P_BUKRS.







*管理領域の取り得

SELECT KOKRS
  INTO TABLE I_TKA02
  FROM TKA02
  WHERE BUKRS P_BUKRS.
*  AND BSBER = SPACE.

* 利益センタの取り得

* SELECT ET_SETVAL
*  INTO TABLE I_K_GROUP_REMOTE_READ
*   FROM K_GROUP_REMOTE_READ
*    WHERE SETCLASS = '0106'
*   AND CO_AREA = 2-1-2
*    AND CHAT_ACCTS = 1-1
*   AND GROUPNAME IN RB_NOTE1
*    AND LANGUAGE = SY-LANGU.

*利益センターグループデータ取得

    SELECT RACCT DRCRK HSLVT  RTCUR "全期間
    INTO TABLE  I_FAGLFLEXT
    FROM FAGLFLEXT
    WHERE RYEAR P_RYEAR
*     AND  RPMAX = 2-1-1
*    AND RLANR = 0L
    AND RRCTY 0
*   AND BUKRS = P_BUKRS
    AND RBUSA LIKE P_RBUSA
    AND RACCT IN S_SAKNR
    AND PRCTR I_TKA02-KOKRS.


    "4特別データ取り得
"決算ヘッドデータ取得
SELECT BELNR
  STBLG
  XREVERSAL
INTO TABLE I_BKPF
FROM BKPF
WHERE
 " MONAT = (3,6,9,12,...)AND
  BLART 'YA'
AND GJAHR P_RYEAR
AND BUKRS P_BUKRS.

"反対ヘッドデータ取り得
SELECT BELNR
  STBLG
  XREVERSAL
INTO TABLE I_BKPF
FROM BKPF
WHERE MONAT IN S_RPAMAX
"AND XREVER = 1 AND 2
AND GJAHR =  P_RYEAR
AND BUKRS P_BUKRS.

"特別仕訳金額取り得
"利益センターグループの特別仕訳
SELECT BELNR
  HKONT
  PRCTR
  SHKZG
  DMBTR
  BUZEI
INTO TABLE I_BSEG
FROM BSEG
WHERE
  " BELNR = BKPF "会計伝票番号 AND
  GJAHR P_RYEAR
AND BUKRS P_BUKRS
AND GSBER LIKE P_RBUSA
AND PRCTR I_TKA02-KOKRS.
"AND RACCT IN S_SAKNR.

"仕入れ先データ(未決算)
SELECT BELNR
  HKONT
  LIFNR
  SHKZG
  DMBTR
INTO TABLE I_BSIK
FROM BSIK
WHERE
  "BELNR = BKPF会計伝票番号 AND
  GJAHR P_RYEAR
AND LIFNR RB_NOTE2
AND BUKRS P_BUKRS
AND HKONT IN S_SAKNR.

"仕入れ先データ(決算済み)
SELECT BELNR
  HKONT
  LIFNR
  SHKZG
  DMBTR
INTO TABLE I_BSAK
FROM BSAK
WHERE
  "  BELNR = BKPF会計伝票番号 AND
  GJAHR P_RYEAR
AND LIFNR RB_NOTE2
AND BUKRS P_BUKRS
AND HKONT IN S_SAKNR.

" 得意先データ(未決算)

SELECT BELNR
  HKONT
  KUNNR
  SHKZG
  DMBTR
INTO TABLE I_BSID
FROM BSID
WHERE
 "  BELNR = BKPF会計伝票番号 AND

   GJAHR P_RYEAR
AND KUNNR  RB_NOTE3
AND BUKRS P_BUKRS
AND HKONT IN S_SAKNR.

"得意データ(決算済み)
SELECT BELNR
  HKONT
  KUNNR
  SHKZG
  DMBTR
INTO TABLE I_BSAD
FROM BSAD
WHERE
  " BELNR = BKPF会計伝票番号 AND
 GJAHR P_RYEAR
AND KUNNR  RB_NOTE3
AND BUKRS P_BUKRS
AND HKONT IN S_SAKNR.

"5データ処理
"5-1特別仕訳データ除く



"5-2鑑定コードテキストを取り得する
*SELELCT 鑑定コードテキスト
*INTO TABLE I_SKAT
*FROM SKAT
*WHERE SPRAS = SY-LANGU
*AND KTOPL = I_SKA1-SAKNR
*AND SAKNR =

"利益センタグループテキストを取り得する
SELECT DESCRIPT
INTO TABLE I_SETHEADERT
FROM SETHEADERT
WHERE SETCLASS '0106'
AND SUBCLASS I_TKA02-KOKRS.
*AND SETNAME IN
*AND LANGU = SY-LANGU.

"仕入先テキストを取り得する
ENDFORM.                    " GETDATA1
*&---------------------------------------------------------------------*
*&      FORM  DISPLAYBYALV
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_I_DATAOUT2  TEXT
*      -->P_I_FIELDCAT  TEXT
*----------------------------------------------------------------------*
FORM DISPLAYBYALV  USING  I_DATAOUT2 TYPE  IT_DATAOUT2
                          I_FIELDCAT TYPE  SLIS_T_FIELDCAT_ALV.
DATAGS_LAYOUT TYPE SLIS_LAYOUT_ALV.
GS_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
GS_LAYOUT-ZEBRA 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM G_REPID
    I_CALLBACK_PF_STATUS_SET CNS_PF_STATUS "设置ALV的自定义按钮 GUI
I_CALLBACK_USER_COMMAND CNS_USER_COMMAND  "设置ALV自定义按钮响应事件
    IT_FIELDCAT I_FIELDCAT
    IS_LAYOUT GS_LAYOUT
  TABLES
    T_OUTTAB  I_DATAOUT2
  EXCEPTIONS
    PROGRAM_ERROR 1
    OTHERS 2.
ENDFORM.                    " DISPLAYBYALV




*&---------------------------------------------------------------------*
*&      FORM  SETFIELDCAT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM SETFIELDCAT .


CLEAR W_FIELD.

DEFINE ADDFIELDCAT.

W_FIELD-COL_POS &1.
W_FIELD-FIELDNAME &2.
W_FIELD-SELTEXT_L &3.
W_FIELD-JUST &4.

APPEND W_FIELD TO I_FIELDCAT.

END-OF-DEFINITION.

ADDFIELDCAT 'AKONT' '統制鑑定' 'L'.
ADDFIELDCAT ' LIFNR' '仕入先' 'L'.
ADDFIELDCAT 'UMSAV' '前期残高' 'L'.
ADDFIELDCAT 'UMS' 'J方' 'L'.
ADDFIELDCAT 'UMH' '貸方' 'L'.
ADDFIELDCAT 'UML' '当期残高' 'L'.

ENDFORM.                    " SETFIELDCAT
*&---------------------------------------------------------------------*
*&      FORM  EXPORT_FORM
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*

FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN'EXPORT'.
PERFORM EXPORT_FORM."调用导出程序
WHEN OTHERS.
ENDCASE.
ENDFORM.

FORM EXPORT_FORM .

PERFORM DEF_EXCEL.
PERFORM sho_excel.

ENDFORM.                    " EXPORT_FORM




*&---------------------------------------------------------------------*
*&      FORM  DEF_EXCEL
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM DEF_EXCEL .

"(以下的代码是必须写的,比较固定,用的时候直接写就行)
  DEFINE FILL_CELL.
    CALL METHOD OF V_EXCEL  'CELLS' V_CELL "单元格位置
       EXPORTING
         #1 &1
         #2 &2.
    SET PROPERTY OF V_CELL 'VALUE' &3.
    CALL METHOD OF V_CELL 'FONT'  V_FONT.
    SET PROPERTY OF V_FONT 'BOLD' &4.
    SET PROPERTY OF V_FONT 'SIZE' &5.
  END-OF-DEFINITION.

  CREATE OBJECT V_EXCEL 'EXCEL.APPLICATION'.
  CALL METHOD OF
      V_EXCEL
      'WORKBOOKS' V_BOOK.
  CALL METHOD OF
      V_BOOK
      'ADD'.
*给第一行填充要写的东西,一下的第一个‘1’表示第一行,第二个‘1’表示第一列。
  FILL_CELL 1  1  '残高集計表' 20.
  SET PROPERTY OF V_CELL 'HORIZONTALALIGNMENT' -4108"(这句是居中)
  SET PROPERTY OF V_FONT 'UNDERLINE' 2"(下划线)

"以下代码主要作用是定义第二行各列和第三行各列、第四行各列:
  FILL_CELL 1   ''   10.
  FILL_CELL 2   ''   10.
  FILL_CELL 3   '统计时间'   10.
  FILL_CELL 4   ''   10.
  FILL_CELL 5   ''   10.
  FILL_CELL 6   ''   10.
  FILL_CELL 7   ''   10.

  FILL_CELL 1   ''   10.
  FILL_CELL 2   ''   10.
  FILL_CELL 3   ''   10.
  FILL_CELL 4   ''   10.
  FILL_CELL 5   '编号'   10.
  FILL_CELL 6   ''   10.
  FILL_CELL 7   ''   10.

*
  FILL_CELL 1   '統制鑑定'          10.
  SET PROPERTY OF V_CELL 'HORIZONTALALIGNMENT' -4108.
  FILL_CELL 2   '仕入先'          10.
  SET PROPERTY OF V_CELL 'HORIZONTALALIGNMENT' -4108.
  FILL_CELL 3   '前期残高'      10.
  SET PROPERTY OF V_CELL 'HORIZONTALALIGNMENT' -4108.
  FILL_CELL 4   '借方'      10.
  SET PROPERTY OF V_CELL 'HORIZONTALALIGNMENT' -4108.
  FILL_CELL 5   '貸し方'      10.
  SET PROPERTY OF V_CELL 'HORIZONTALALIGNMENT' -4108.
  FILL_CELL 6   '当期算高'      10.


*************先把第一行的所有列都合并****************************
  CALL METHOD OF
      V_EXCEL
      'RANGE' V_RANGE
    EXPORTING
      #1      'A1'"(这里的意思是从A1到N1这个范围合并)
      #2      'F1'.
  CALL METHOD OF
      V_RANGE
      'SELECT'.
  SET PROPERTY OF V_RANGE 'MERGECELLS' 1.
**************************一行一列合并
  CALL METHOD OF
      V_EXCEL
      'COLUMNS' V_COLUMN
    EXPORTING
      #1        'E'."列编号
  SET PROPERTY OF V_COLUMN 'COLUMNWIDTH' 10.
  SET PROPERTY OF V_COLUMN 'NUMBERFORMAT' '@'.


ENDFORM.                    " DEF_EXCEL

*&---------------------------------------------------------------------*
*&      Form  SHO_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_DATAOUT2  text
*----------------------------------------------------------------------*

form sho_excel .
  field-symbols :  <aa> type any ,
                  <bb> type any.
  datalv_txt(50type c.

  datarow_i type i,    " 定义行和列
        col_i type i,
         V_border TYPE  OBJ_RECORD.

*** 从内表循环数据,按顺序填到单元表中

dataw_dataout2 type it_dataout2 WITH HEADER LINE,
      ex_itab type  it_dataout2 WITH HEADER LINE.
loop at i_dataout2 into w_dataout2 .
  move w_dataout2-AKONT to ex_itab-AKONT.
  move w_dataout2-LIFNR to ex_itab-LIFNR.
  move w_dataout2-UMSAV to ex_itab-UMSAV.
  move w_dataout2-UMS to ex_itab-UMS.
  move w_dataout2-UMH to ex_itab-UMH.
  move w_dataout2-UML to ex_itab-UML.
  "move w_dataout2-WAERS to ex_itab-WAERS.
append ex_itab.
ENDLOOP.


  loop at ex_itab assigning  <aa>."(表示是分配一个工作区>)
    row_i sy-tabix + 4."(意思是从第五行开始添加循环传进去的数据)
    do times."(循环13列,切记,不是行,是列)
      col_i sy-index .
      assign component sy-index of structure <aa> to <bb>.
     lv_txt <bb>.
      fill_cell row_i col_i lv_txt 12.
   " enddo.
  "  ENDLOOP.

"》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

"这段代码的意思大致就是保持格式的意思吧~~~~我也不是特别理解,但是对它的重要性深有体会啊啊啊啊啊!!!!!!!
   call method of
            v_excel
            'COLUMNS' v_column
          exporting
            #1        12."(12指的是12列,意思就是第12列的数据按char型导出,长短什么的都不发生变化,若是想要输出的字段是资金型的,那这段代码就必不可少了,O(∩_∩)O~)
        set property of v_column 'ColumnWidth' 10.
        set property of v_column 'NumberFormat' '@'.
"》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
    ENDDO.
  endloop.



  datapost  type string,
         col  type value 'F',"(‘N’表示excel上最后一列的号)
         row  type string.
 " row_i = row_i ."(减去二的意思是:最后两行不用划线)
  move row_i   to row.
  concatenate 'F' row into post.

  call method of
      v_excel
      'Range' v_range
    exporting
      #1      'A4'"A4表示从A4开始画表格线
      #2      post.

call method of
      v_range
      'BORDERS' v_border.

  set property of v_border 'LineStyle' '1'.
  set property of v_border 'WEIGHT' '2 '.
  set property of v_border 'ColorIndex' '1'.
  free object v_border.
  free object v_cell.


  call method of
      v_excel
      'Columns' v_column.
  call method of
      v_column
      'Autofit'.







*** 设置excel为可见
  set property of  v_excel 'Visible' 1.

endform.                    "sho_excel

posted @ 2014-05-24 00:16  qdxjmei  阅读(207)  评论(0编辑  收藏  举报