본문 바로가기

ABAP 물타기/Report

Tip : Dynamic Internal Table (동적 인터널테이블, Use fieldcatalog)

  • Create Date   : 2010-06-21
  • Change Date : 2010-06-21

잡담 -ㅂ-;

옥수수가 먹고 싶다.
강원도에서 방금따서 찐 검정 찰옥수수~
나도 주말농장을 갖고 싶다 ㅜ ㅜ 어디 밭떼기 몇평 주실분 없수?


Overview

기간별로 Customer의 Open Data를 보는 Report 이다.
Dynamic Table이 필요한 항목은 General Ledger Account (HKONT) 이다.
Customer 별 Account  별 Open Value 가 되겠다.

Source

거두 절미 하고 아래 소스를 첨부 했다.
alv는 Function을 사용했다.

  REPORT  ZEDU014.

tables : bsid.

types : begin of type1,
          kunnr type bsid-kunnr,
          hkont type bsid-hkont,
          dmbtr type bsid-dmbtr,
        end of type1.

types : begin of type2,
          text(72type c,
        end of type2.

types : begin of type3,
          hkont type bsid-hkont,
        end of type3.

* base data
data : gt_01 type table of type1 with header line.
* create itab.
data : gt_02 type table of type2 with header line.
* account group
data : gt_03 type table of type3 with header line.


*dynamic table
DATA: gt_field  TYPE lvc_t_fcat.
DATA: gt_table TYPE REF TO data,
      gt_line  TYPE REF TO data.
FIELD-SYMBOLS: <table> TYPE STANDARD TABLE,
               <wa>,
               <field>.

* display alv function
*----------------------------------------------------------------------*
* ALV Variable
*----------------------------------------------------------------------*
type-pools: slis.
data : ls_fieldcat type slis_fieldcat_alv.

data: g_repid             like sy-repid,
      gs_print            type slis_print_alv,
      gt_list_top_of_page type slis_t_listheader,
      gt_events           type slis_t_event,
      gt_sort             type slis_t_sortinfo_alv,
      gs_layout           type slis_layout_alv,
      gt_fieldcat       type slis_t_fieldcat_alv,
      fieldcat_in         type slis_fieldcat_alv,
      col_pos             type i,
      g_variant           type disvariant,
      g_save              value 'A',
      g_lights_fieldname  type slis_fieldname value 'LIGHTS',
      g_user_command type slis_formname value 'USER_COMMAND'.


*----------------------------------------------------------------------*
* MACRO
*----------------------------------------------------------------------*
define append_fieldcat.
  clear ls_fieldcat.
  ls_fieldcat-tabname = 'GT_RESULT'.
  ls_fieldcat-fieldname = &1.
  ls_fieldcat-seltext_l = &2.
  ls_fieldcat-just = &3.
  ls_fieldcat-key = &4.
  ls_fieldcat-outputlen = &5.
  append ls_fieldcat to gt_fieldcat.
end-of-definition.

define append_result.
  clear gt_result.
  gt_result-type = &1.
  gt_result-area = &2.
  gt_result-matnr = &3.
  gt_result-message = &4.
  append gt_result.
end-of-definition.

define append_mtart.
  clear gt_mtart.
  gt_mtart-type = &1.
  gt_mtart-mtart = &2.
  append gt_mtart.
end-of-definition.




*&---------------------------------------------------------------------*

select-options : p_budat for bsid-budat OBLIGATORY.

*&---------------------------------------------------------------------*
START-OF-SELECTION.

  perform get_data.
  perform create_table.
  perform set_table.
  perform display_alv.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  select kunnr hkont sum( dmbtr ) as dmbtr
  into CORRESPONDING FIELDS OF TABLE gt_01
  from bsid
  where budat between '20100401' and '20100630'
  group by kunnr hkont
  .

  select hkont
  into CORRESPONDING FIELDS OF TABLE gt_03
  from bsid
  where budat between '20100401' and '20100630'
  group by hkont
  .
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_TABLE .

  data : ls_field type lvc_s_fcat,
         l_field(10type c,
         l_count(2)  type c.

  CLEAR ls_fieldcat.

  ls_field-fieldname = 'KUNNR'.
  ls_field-datatype  = 'CHAR'.
  ls_field-inttype   = 'C'.
  ls_field-intlen    = 10.
  APPEND ls_field TO gt_field.

  LOOP AT gt_03.
    CLEAR ls_field.
    ls_field-fieldname = gt_03-hkont.
    ls_field-datatype  = 'CHAR'.
    ls_field-inttype   = 'C'.
    ls_field-intlen    = 10.
    APPEND ls_field TO gt_field.
  ENDLOOP.


  CALL METHOD cl_alv_table_create=>create_dynamic_table
      EXPORTING
        it_fieldcatalog = gt_field[]
      IMPORTING
        ep_table        = gt_table.

  ASSIGN gt_table->* TO <table>.
  CREATE DATA gt_line LIKE LINE OF <table>.
  ASSIGN gt_line->* TO <wa>.

ENDFORM.                    " CREATE_TABLE
*&---------------------------------------------------------------------*
*&      Form  SET_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_TABLE .

  field-symbols : <f>.
  data : l_field(72type c,
         l_count(2type c,
         l_index(2type c.

  sort gt_01 by kunnr hkont.

  loop at gt_01.

* set defuat value (because : alv error)
    at new kunnr.
      loop at gt_03.
        concatenate `<wa>-` gt_03-hkont into l_field.
        assign (l_field) to <f>.
        <f> = 0.
      endloop.
    endat.

* data set
    concatenate `<wa>-` gt_01-hkont into l_field.
    assign (l_field) to <f>.
    <f> = gt_01-dmbtr.

    on change of gt_01-kunnr.
      l_field = `<wa>-kunnr`.
      assign (l_field) to <f>.
      <f> = gt_01-kunnr.
      append <wa> to <table>.
    endon.
  endloop.
ENDFORM.                    " SET_TABLE


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV .
  if <table> is not initial.
    perform setting_layout.
    perform setting_catalog.
    perform create_alv.
  endif.
ENDFORM.                    " DISPLAY_ALV
*&---------------------------------------------------------------------*
*&      Form  SETTING_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SETTING_LAYOUT .

ENDFORM.                    " SETTING_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  SETTING_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SETTING_CATALOG .
  append_fieldcat : 'KUNNR'  'Customer'  'C'  ' '  '10'.

  sort gt_03 by hkont.

* field description 은 미리 gt_03 table에 추가해서 사용바람.
  loop at gt_03.
    append_fieldcat : gt_03-hkont gt_03-hkont 'C' ' ' '10'.
  endloop.
ENDFORM.                    " SETTING_CATALOG
*&---------------------------------------------------------------------*
*&      Form  CREATE_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_ALV .
  call function 'REUSE_ALV_GRID_DISPLAY'
       exporting
*        I_INTERFACE_CHECK               = 'ALV_BACKGROUD'
         i_callback_program              = g_repid
         i_callback_pf_status_set        = ''
         i_callback_user_command         = ''
*        I_STRUCTURE_NAME                =
         is_layout                       = gs_layout
         it_fieldcat                     = gt_fieldcat[]
*        IT_EXCLUDING                    =
*        IT_SPECIAL_GROUPS               =
         it_sort                         = gt_sort
*        IT_FILTER                       =
*        IS_SEL_HIDE                     =
*        I_DEFAULT                       = 'X'
         i_save                          = g_save
         is_variant                      = g_variant
*         IT_EVENTS                       = gt_events[]
*        IT_EVENT_EXIT                   =
*        IS_PRINT                        =
*        IS_REPREP_ID                    =
*        I_SCREEN_START_COLUMN           = 0
*        I_SCREEN_START_LINE             = 0
*        I_SCREEN_END_COLUMN             = 0
*        I_SCREEN_END_LINE               = 0
*     IMPORTING
*        E_EXIT_CAUSED_BY_CALLER         =
*        ES_EXIT_CAUSED_BY_USER          =
      tables
         t_outtab                        = <table>
       exceptions
         program_error                   = 1
         others                          = 2.
ENDFORM.                    " CREATE_ALV



Result




'ABAP 물타기 > Report' 카테고리의 다른 글

Search Help  (0) 2010.07.11
Select CHECKBOX  (0) 2010.07.04
Custom Possible Entry  (0) 2010.07.04
BDC : QUAN Field 처리  (0) 2010.07.04
Tip : Dynamic Internal Table (동적 인터널테이블, Use 'INSERT REPORT')  (0) 2010.06.19