- 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(72) type 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(10) type 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(72) type c,
l_count(2) type c,
l_index(2) type 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
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(72) type 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(10) type 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(72) type c,
l_count(2) type c,
l_index(2) type 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 |