05-23-2008 3:21 PM
Hello Friends,
In my selection screen I have input field S_TAB for the table name as select options.
I want to create an internal table Dynamically with the stricture of the table from the selection scree when I loop it.
For eg : the internal table should be ITAB.
Loop at S_TAB.
now S_TAB has the vale MARA.
I want to have ITAB the same structure as MARA with header line, SImilarly so on.
endloop.
If possible please suggest without field symbols as I am not vary familar with it..
Please suggest.
Ster
05-23-2008 3:49 PM
Hi,
As per my experience with internal tables, while creating the dynamic internal table one must use field symbols.
Without field symbols it is not possible to create a dynamic internal table. As during runtime, we will come to know about number of rows or columns, it is always good to use field symbols which are given as a boon to SAP.
For your understanding I can provide you an example program so that you can understand field symbols easily.
REPORT Zdynamic_table
NO STANDARD PAGE HEADING
LINE-SIZE 1023
LINE-COUNT 35(3)
MESSAGE-ID zrtc.
TYPE-POOLS : slis.
************************************************************************
* TABLES
************************************************************************
*{
TABLES: lfm1,
bkpf.
*}
************************************************************************
* GLOBAL TYPES
* naming convention: "T_name"
************************************************************************
*{
TYPES: BEGIN OF t_lfb1,
lifnr TYPE lfb1-lifnr, "Vendor
mindk TYPE lfb1-mindk, "Minority indicator
cerdt TYPE lfb1-cerdt, "Certification date
END OF t_lfb1,
BEGIN OF t_lfa1,
lifnr TYPE lfa1-lifnr, "Vendor
name1 TYPE lfa1-name1, "Vendor name
END OF t_lfa1,
BEGIN OF t_t059t_dis,
mtext(50) TYPE c , "Text
count(10) TYPE c , "count
END OF t_t059t_dis,
BEGIN OF t_t059t,
mindk TYPE t059t-mindk, "Minority Indicators
mtext TYPE t059t-mtext, "Text
mark(1) TYPE c ,
count(10) TYPE c , "count
END OF t_t059t,
BEGIN OF t_bsak,
bukrs TYPE bsak-bukrs , "Company Code
lifnr TYPE bsak-lifnr , "Vendor
umsks TYPE bsak-umsks , "Transaction Type
umskz TYPE bsak-umskz , "Indicator
augdt TYPE bsak-augdt , "Clearing Date
augbl TYPE bsak-augbl , "Document Number
zuonr TYPE bsak-zuonr , "assignment Number
gjahr TYPE bsak-gjahr , "Fiscal Year
belnr TYPE bsak-belnr , "Accounting Document Number
buzei TYPE bsak-buzei , "Number of Line Item
budat TYPE bsak-budat , "Posting Date
blart TYPE bsak-blart , "Document Type
shkzg TYPE bsak-shkzg , "Debit/Credit Indicator
wrbtr TYPE bsak-wrbtr , "Amount
END OF t_bsak,
BEGIN OF t_bsik,
bukrs TYPE bsik-bukrs , "Company Code
lifnr TYPE bsik-lifnr , "Vendor
umsks TYPE bsik-umsks , "Transaction Type
umskz TYPE bsik-umskz , "Indiacator
augdt TYPE bsik-augdt , "Clearing Date
augbl TYPE bsik-augbl , "Document Number
zuonr TYPE bsik-zuonr , "Assignment Number
gjahr TYPE bsik-gjahr , "Fiscal Year
belnr TYPE bsik-belnr , "Accounting Document Number
buzei TYPE bsik-buzei , "Number of Line Item
budat TYPE bsik-budat , "Posting Date
blart TYPE bsik-blart , "Document Type
shkzg TYPE bsik-shkzg , "Debit/Credit Indicator
wrbtr TYPE bsik-wrbtr , "Amount
END OF t_bsik,
BEGIN OF t_det,
fieldname(20) TYPE c,
fieldval(20) TYPE c,
END OF t_det.
*}
************************************************************************
* GLOBAL CONSTANTS
* naming convention: "c_name"
************************************************************************
*{
CONSTANTS : c_doc_typ_re(2) TYPE c VALUE 'RE'
, "Document type
c_doc_typ_kr(2) TYPE c VALUE 'KR'
, "Document type
*begin of defect
c_doc_typ_kz(2) TYPE c VALUE 'KZ'
, "Document type
c_doc_typ_kn(2) TYPE c VALUE 'KN'
, "Document type
*end of defect
c_credit TYPE bsid-shkzg VALUE 'H'
, "Credit indicator
c_f_top_of_page TYPE slis_formname VALUE 'F_TOP_OF_PAGE'
, "top fo page
c_space TYPE c VALUE space
, "space
c_cr(4) TYPE c VALUE '_CR'
,
c_ncr(4) TYPE c VALUE '_NCR'
,
c_vendor(6) TYPE c VALUE 'VENDOR'
,
c_name(6) TYPE c VALUE 'NAME'
,
c_credt(20) TYPE c VALUE
'CERTIFICATION_DATE', "Certfication Date
c_null TYPE sy-datum VALUE '00000000'
,
c_1(1) TYPE c VALUE '1'
,
c_bukrs(4) TYPE c VALUE '200'
,
* Begin of Defect 40862
c_user_command TYPE slis_formname VALUE 'USER_COMMAND'
,
c_25 TYPE char2 VALUE '25'
,
c_35 TYPE char2 VALUE '35'
,
c_55 TYPE char2 VALUE '55'
,
c_s TYPE char1 VALUE 'S'
,
c_usd TYPE char3 VALUE 'USD'
,
c_20 TYPE char2 VALUE '20'
,
c_dash TYPE char1 VALUE '-'
,
c_value TYPE char5 VALUE 'VALUE'
,
c_columntext TYPE char10 VALUE 'COLUMNTEXT'
,
c_30 TYPE char2 VALUE '30'
,
c_ic1 TYPE char4 VALUE '&IC1'
,
c_p TYPE char1 VALUE 'P'
,
c_16 TYPE char2 VALUE '16'
,
* End of Defect 40862
c_x(1) TYPE c VALUE 'X'
.
*}
************************************************************************
* GLOBAL ELEMENTARY VARIABLES
* naming convention: "g_name"
************************************************************************
*{
DATA : g_wrbtr TYPE bsak-wrbtr , " Amount
g_sum TYPE bsak-wrbtr , " Sum of amount
g_sum_ncr(16) TYPE c , " Sum of amount
g_sum_cr(16) TYPE c , " Sum of amount
g_count(10) TYPE c , "Count
g_flag(1) TYPE c . "Flag
*}
************************************************************************
* GLOBAL STRUCTURES
* naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1_s TYPE t_lfb1 , "Structure for user
defined type
i_lfa1_s TYPE t_lfa1 , "Structure for user
defined type
i_fldlayout_s TYPE slis_layout_alv , "Structure for
layout of ALV
i_header_alv_s TYPE slis_listheader , "Structure for
Header
i_t_fieldcat_s TYPE slis_t_fieldcat_alv , "Structure for
fieldcat.
i_fieldcat_s LIKE LINE OF i_t_fieldcat_s, "Structure for
fieldcat.
i_t059t_s TYPE t_t059t , "Structure user
defined type
i_t059t_fnl_s TYPE t_t059t , "Structure user
defined type
i_fcat_s TYPE lvc_s_fcat ,
i_final_s TYPE t_bsak , "Structure user
defined type
i_t059t_dis_s TYPE t_t059t_dis , "Structure user
defined type
i_budat_s TYPE fagl_range_budat ,
i_lvc_t_fcat_s TYPE lvc_s_fcat,
i_lvc_s_layo_s TYPE lvc_s_layo,
i_lvc_t_detm_s TYPE lvc_s_detm,
i_lvc_s_deta_s TYPE lvc_s_deta.
*}
************************************************************************
* GLOBAL INTERNAL TABLES
* naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1 TYPE TABLE OF t_lfb1 , "Internal table for
user defined type
i_lfa1 TYPE TABLE OF t_lfa1 , "Internal table for
user defined type
i_t059t TYPE TABLE OF t_t059t , "Internal table for
user defined type
i_t059t_dis TYPE TABLE OF t_t059t_dis ,
i_t059t_fnl TYPE TABLE OF t_t059t , "Internal table for
user defined type
i_fieldcat TYPE slis_t_fieldcat_alv , "Internal table for
fieldcat.
i_events TYPE slis_t_event , "Internal table for
event
i_header_alv TYPE slis_t_listheader , "Internal table for
header
i_fcat TYPE TABLE OF lvc_s_fcat , "Field cat. of dynamic
table
i_sel_rows TYPE REF TO data , "For creating dynamic
table
i_new_line TYPE REF TO data ,
i_bsak TYPE TABLE OF t_bsak , "Internal table for
user defined type
i_bsik TYPE TABLE OF t_bsik , "Internal table for
user defined type
i_final TYPE TABLE OF t_bsak , "Internal table for
user defined type
i_lvc_t_fcat TYPE TABLE OF lvc_s_fcat,
i_lvc_t_detm TYPE TABLE OF lvc_s_detm,
i_lvc_s_deta TYPE TABLE OF lvc_s_deta.
*}
************************************************************************
* FIELD-SYMBOLS
* naming convention: "<FS_>name"
************************************************************************
*{
FIELD-SYMBOLS : <fs_table> TYPE STANDARD TABLE, "For dynamic table
<fs_line> TYPE ANY , "For row of dynamic
table
<fs_field> TYPE ANY . "For field of
dynamic table
*}
************************************************************************
* PARAMETERS & SELECT-OPTIONS
* aming convention: "p_name" & "s_name"
************************************************************************
*{
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_bukrs TYPE lfb1-bukrs OBLIGATORY DEFAULT c_bukrs."
'200' .
SELECT-OPTIONS : s_lifnr FOR lfm1-lifnr ,
s_budat FOR bkpf-budat.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.
PARAMETERS: p_crt RADIOBUTTON GROUP rad1 ,
p_ncrt RADIOBUTTON GROUP rad1 ,
p_all RADIOBUTTON GROUP rad1 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b2.
*}
************************************************************************
* AT SELECTION-SCREEN ON <Field>
************************************************************************
*{
AT SELECTION-SCREEN ON p_bukrs.
* Validating Company Code
PERFORM f_validate_company_code.
AT SELECTION-SCREEN ON s_lifnr.
* Validating Vendor
PERFORM f_validate_vendor.
*}
************************************************************************
* START-OF-SELECTION
************************************************************************
*{
START-OF-SELECTION.
* Getting data from lfb1
PERFORM f_get_lfb1.
CHECK NOT i_lfb1[] IS INITIAL.
* Getting data from lfa1
PERFORM f_get_lfa1.
* Getting data from bsak
PERFORM f_get_bsak.
* Getting data from bsik
PERFORM f_get_bsik.
*}
************************************************************************
* END-OF-SELECTION
************************************************************************
*{
END-OF-SELECTION.
IF NOT i_final[] IS INITIAL.
* Getting all fields of dynamic table
PERFORM f_get_mandk.
* Creating dyanmic table
PERFORM f_create_dynamic_table.
* Creating Dynamic table and filling data to dynamic table table
PERFORM f_fill_output.
* For displaying output
PERFORM f_display.
ELSE.
MESSAGE s105(zrtc). " WITH 'No data found
for this selection criteria.'(008).
ENDIF.
*}
************************************************************************
* FORMS
* naming convention: "f_name"
************************************************************************
*&---------------------------------------------------------------------*
*& Form validate_company_code
*&---------------------------------------------------------------------*
* Validating company code
*----------------------------------------------------------------------*
FORM f_validate_company_code .
DATA : l_t001 TYPE t001-bukrs.
CLEAR l_t001.
SELECT bukrs
INTO l_t001
FROM t001
UP TO 1 ROWS
WHERE bukrs EQ p_bukrs.
ENDSELECT.
IF sy-subrc NE 0.
MESSAGE e043. " WITH 'Invalid Company Code'(003).
*-- This is to get rid of Extended check.
IF l_t001 IS INITIAL.
CLEAR l_t001.
ENDIF.
ENDIF.
ENDFORM. " validate_company_code
*&---------------------------------------------------------------------*
*& Form validate_vendor
*&---------------------------------------------------------------------*
* Validating Vendor
*----------------------------------------------------------------------*
FORM f_validate_vendor .
DATA : l_lfa1 TYPE lfa1-lifnr.
CLEAR l_lfa1.
IF NOT s_lifnr[] IS INITIAL.
SELECT lifnr
INTO l_lfa1
FROM lfa1
UP TO 1 ROWS
WHERE lifnr IN s_lifnr.
ENDSELECT.
IF sy-subrc NE 0.
MESSAGE e118. "WITH 'Invalid Vendor
Number.'(010).
*-- This is to get rid of Extended check.
IF l_lfa1 IS INITIAL.
CLEAR l_lfa1.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " validate_vendor
*---------------------------------------------------------------------*
* Form f_get_lfb1
*---------------------------------------------------------------------*
* Getting data from table lfb1 into into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfb1 .
REFRESH i_lfb1.
SELECT lifnr
mindk
cerdt
INTO TABLE i_lfb1
FROM lfb1
WHERE lifnr IN s_lifnr
AND bukrs EQ p_bukrs
AND mindk NE c_space.
IF sy-subrc EQ 0.
SORT i_lfb1 BY lifnr.
ENDIF.
ENDFORM. " f_get_lfb1
*&---------------------------------------------------------------------*
*& Form f_get_lfa1
*&---------------------------------------------------------------------*
* Getting vendor name from table lfa1 into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfa1 .
REFRESH i_lfa1.
IF NOT i_lfb1 IS INITIAL.
SELECT lifnr
name1
INTO TABLE i_lfa1
FROM lfa1
FOR ALL ENTRIES IN i_lfb1
WHERE lifnr EQ i_lfb1-lifnr.
IF sy-subrc EQ 0.
SORT i_lfa1 BY lifnr.
ENDIF.
ENDIF.
ENDFORM. " f_get_lfa1
*&---------------------------------------------------------------------*
*& Form f_get_bsak
*&---------------------------------------------------------------------*
* Getting document no from table bsak into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsak .
REFRESH: i_bsak. "Defect 40862
IF NOT i_lfb1 IS INITIAL.
*defect added document types
SELECT bukrs
lifnr
umsks
umskz
augdt
augbl
zuonr
gjahr
belnr
buzei
budat
blart
shkzg
wrbtr
FROM bsak
INTO TABLE i_bsak
FOR ALL ENTRIES IN i_lfb1
WHERE lifnr EQ i_lfb1-lifnr
AND bukrs EQ p_bukrs
AND budat IN s_budat
AND ( blart EQ c_doc_typ_re
OR blart EQ c_doc_typ_kr
OR blart EQ c_doc_typ_kn
OR blart EQ c_doc_typ_kz ).
*end of document types
APPEND LINES OF i_bsak TO i_final.
ENDIF.
ENDFORM. " f_get_bsak
*&---------------------------------------------------------------------*
*& Form f_get_bsik
*&---------------------------------------------------------------------*
* Getting data from table bsik into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsik .
REFRESH: i_bsik. "Defect 40862
IF NOT i_lfb1 IS INITIAL.
*defect added document types
SELECT bukrs
lifnr
umsks
umskz
augdt
augbl
zuonr
gjahr
belnr
buzei
budat
blart
shkzg
wrbtr
FROM bsik
INTO TABLE i_bsik
FOR ALL ENTRIES IN i_lfb1
WHERE lifnr EQ i_lfb1-lifnr
AND bukrs EQ p_bukrs
AND budat IN s_budat
AND ( blart EQ c_doc_typ_re
OR blart EQ c_doc_typ_kr
OR blart EQ c_doc_typ_kn
OR blart EQ c_doc_typ_kz ).
*defect ended document types
APPEND LINES OF i_bsik TO i_final.
ENDIF.
ENDFORM. " f_get_bsik
*&---------------------------------------------------------------------*
*& Form f_fill_output
*&---------------------------------------------------------------------*
* Creating dynamic table , getting data and filling that data to
* dynamic table for display according to the condition
*----------------------------------------------------------------------*
FORM f_fill_output .
DATA : l_cert_dt TYPE c LENGTH 10,
l_lifnr TYPE lfa1-lifnr.
CLEAR: g_wrbtr ,
g_sum .
* Sorting tables by vendor
SORT : i_t059t_fnl BY mindk,
i_final BY lifnr belnr buzei.
* Calculating the amount and filling that data into dynamic table
LOOP AT i_final INTO i_final_s.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = i_final_s-lifnr
IMPORTING
output = l_lifnr.
AT NEW lifnr.
CLEAR : g_sum.
ENDAT.
* Making Amount negative if credit
IF i_final_s-shkzg EQ c_credit.
* g_wrbtr = i_final_s-wrbtr * -1.
g_wrbtr = i_final_s-wrbtr.
ELSE.
* g_wrbtr = i_final_s-wrbtr.
g_wrbtr = i_final_s-wrbtr * -1.
ENDIF.
g_sum = g_sum + g_wrbtr.
AT END OF lifnr.
* Filling data into Dynamic table according to the condition .
CLEAR i_lfb1_s.
READ TABLE i_lfb1 INTO i_lfb1_s WITH KEY lifnr = i_final_s-lifnr
BINARY SEARCH.
IF sy-subrc EQ 0.
CREATE DATA i_new_line LIKE LINE OF <fs_table>.
ASSIGN i_new_line->* TO <fs_line>.
ASSIGN COMPONENT c_vendor OF STRUCTURE <fs_line> TO <fs_field>.
<fs_field> = l_lifnr.
CLEAR i_lfa1_s.
READ TABLE i_lfa1 INTO i_lfa1_s WITH KEY lifnr = i_final_s-lifnr
BINARY SEARCH.
IF sy-subrc EQ 0.
ASSIGN COMPONENT c_name OF STRUCTURE <fs_line> TO <fs_field>.
<fs_field> = i_lfa1_s-name1.
ASSIGN COMPONENT c_credt OF STRUCTURE <fs_line> TO <fs_field>.
WRITE : i_lfb1_s-cerdt TO l_cert_dt DD/MM/YYYY,
i_lfb1_s-cerdt TO i_lfb1_s-cerdt.
IF i_lfb1_s-cerdt EQ c_null.
<fs_field> = c_space.
ELSE.
<fs_field> = l_cert_dt.
ENDIF. " if sy-subrc eq 0(READ TABLE i_lfa1)
* Filling data according to minority indicator
PERFORM f_fill_amt_ind.
ENDIF . " if sy-subrc eq 0 (READ TABLE i_lfb1)
CLEAR: i_final_s ,
i_lfa1_s ,
g_wrbtr ,
i_lfb1_s .
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. " f_fill_output
*&---------------------------------------------------------------------*
*& Form Display
*&---------------------------------------------------------------------*
* For display the ALV Report
*----------------------------------------------------------------------*
FORM f_display .
DATA : lw_repid LIKE sy-repid,
l_slis_exit_by_user TYPE slis_exit_by_user.
lw_repid = sy-repid.
* Creating field cat. for ALV
PERFORM populate_fldcat_alv.
* Creating Layout.
PERFORM populate_layout.
* Creating Event
PERFORM f_get_events.
* Creating Top Of Page
PERFORM f_top_of_page.
* Call Function for ALV GRID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lw_repid
it_fieldcat = i_fieldcat
is_layout = i_fldlayout_s
it_events = i_events
i_callback_user_command = c_user_command "Defect 40862
IMPORTING
es_exit_caused_by_user = l_slis_exit_by_user
TABLES
t_outtab = <fs_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF l_slis_exit_by_user EQ c_x.
LEAVE LIST-PROCESSING .
ENDIF.
UNASSIGN:<fs_field>,<fs_line>.
ENDFORM. " Display
*&---------------------------------------------------------------------*
*& Form populate_fldcat
*&---------------------------------------------------------------------*
* Filling fieldcat for dynamic table
*----------------------------------------------------------------------*
FORM populate_fldcat .
REFRESH i_fcat.
CLEAR: i_t059t_s,
i_fcat_s.
i_fcat_s-key = c_x.
i_fcat_s-fieldname = c_vendor.
i_fcat_s-outputlen = c_25. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s .
i_fcat_s-key = c_x.
i_fcat_s-fieldname = c_name.
i_fcat_s-outputlen = c_25. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s .
i_fcat_s-key = c_x.
i_fcat_s-fieldname = c_credt.
i_fcat_s-outputlen = c_35. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s .
CLEAR i_t059t_fnl_s.
LOOP AT i_t059t_fnl INTO i_t059t_fnl_s.
CLEAR i_fcat_s.
CLEAR i_t059t_s.
i_fcat_s-key = c_x.
i_fcat_s-fieldname = i_t059t_fnl_s-mtext.
i_fcat_s-outputlen = c_55. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s ,
i_t059t_fnl_s,
i_t059t_fnl_s.
ENDLOOP.
ENDFORM. " populate_fldcat
*&---------------------------------------------------------------------*
*& Form populate_layout
*&---------------------------------------------------------------------*
* Filling layout
*----------------------------------------------------------------------*
FORM populate_layout .
i_fldlayout_s-zebra = c_x .
i_fldlayout_s-window_titlebar = 'Purchasing from Minority
Vendors'(014).
i_fldlayout_s-get_selinfos = c_x .
i_fldlayout_s-expand_all = c_space . "Defect 40862
i_fldlayout_s-no_scrolling = c_x.
ENDFORM. " populate_layout
*&---------------------------------------------------------------------*
*& Form f_get_events
*&---------------------------------------------------------------------*
* For Event
*----------------------------------------------------------------------*
FORM f_get_events .
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc EQ 0.
MOVE c_f_top_of_page TO ls_event-form.
MODIFY i_events FROM ls_event INDEX sy-tabix.
ENDIF.
ENDFORM. " f_get_events
*&---------------------------------------------------------------------*
*& Form f_top_of_page
*&---------------------------------------------------------------------*
* For top of page
*----------------------------------------------------------------------*
FORM f_top_of_page .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_header_alv.
PERFORM f_fill_header.
ENDFORM. " f_top_of_page
*&---------------------------------------------------------------------*
*& Form f_fill_header
*&---------------------------------------------------------------------*
* Filling data for Top Of Page
*----------------------------------------------------------------------*
FORM f_fill_header .
DATA : l_date_low TYPE c LENGTH 10,
l_date_high TYPE c LENGTH 20,
l_sum_cr(20) TYPE c,
l_sum_cr_tmp TYPE p DECIMALS 2,
l_sum_ncr_tmp TYPE p DECIMALS 2,
l_sum_ncr(20) TYPE c,
l_total(20) TYPE c.
IF g_flag EQ c_space.
LOOP AT s_budat INTO i_budat_s.
i_header_alv_s-typ = c_s. "Defect 40862
WRITE : i_budat_s-low TO l_date_low MM/DD/YYYY ,
i_budat_s-high TO l_date_high MM/DD/YYYY.
CONCATENATE text-019 l_date_low c_dash l_date_high INTO
i_header_alv_s-info
SEPARATED BY c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
ENDLOOP.
IF p_crt EQ c_x
OR p_all EQ c_x.
i_header_alv_s-typ = c_s. "Defect 40862
MOVE g_sum_cr TO l_sum_cr_tmp.
WRITE l_sum_cr_tmp TO l_sum_cr CURRENCY c_usd.
"Defect 40862
CONCATENATE text-004 c_usd l_sum_cr INTO i_header_alv_s-info
"Defect 40862
SEPARATED BY
c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
ENDIF.
IF p_ncrt EQ c_x
OR p_all EQ c_x.
i_header_alv_s-typ = c_s. "Defect 40862
MOVE g_sum_ncr TO l_sum_ncr_tmp.
WRITE l_sum_ncr_tmp TO l_sum_ncr CURRENCY c_usd.
"Defect 40862
CONCATENATE text-002 c_usd l_sum_ncr INTO i_header_alv_s-info
"Defect 40862
SEPARATED BY
c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
ENDIF.
l_total = g_sum_cr + g_sum_ncr.
i_header_alv_s-typ = c_s. "Defect 40862
MOVE l_total TO l_sum_ncr_tmp.
WRITE l_sum_ncr_tmp TO l_total CURRENCY c_usd.
"Defect 40862
CONCATENATE text-020 c_usd l_total INTO i_header_alv_s-info
"Defect 40862
SEPARATED BY c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
g_flag = c_x.
CLEAR:i_header_alv_s.
ENDIF.
ENDFORM. " f_fill_header
*&---------------------------------------------------------------------*
*& Form f_fill_amt_ind
*&---------------------------------------------------------------------*
* Filling data into dynamic table according to indicator and
* also calculating sum of all amount of certified/non-certified
*----------------------------------------------------------------------*
FORM f_fill_amt_ind .
DATA: w_mindk(40) TYPE c.
MOVE i_lfb1_s-mindk TO w_mindk.
CASE i_lfb1_s-mindk.
WHEN w_mindk.
* For Certified .
IF i_lfb1_s-cerdt NE c_null.
IF p_crt EQ c_x OR p_all EQ c_x.
CLEAR i_t059t_fnl_s.
READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
mark =
c_x.
IF sy-subrc EQ 0.
ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
MOVE g_sum TO <fs_field> .
INSERT <fs_line> INTO TABLE <fs_table>.
* Calculating sum of Certified .
g_sum_cr = g_sum_cr + g_sum .
ENDIF. " IF sy-subrc eq 0(READ TABLE i_t059t_fnl)
ENDIF.
ELSE.
* For Non-Certified.
IF p_ncrt EQ c_x OR p_all EQ c_x.
CLEAR i_t059t_fnl_s.
READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
mark =
c_space.
IF sy-subrc EQ 0.
ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
MOVE g_sum TO <fs_field> .
INSERT <fs_line> INTO TABLE <fs_table>.
* Calculating sum of Non-Certified .
g_sum_ncr = g_sum_ncr + g_sum .
ENDIF . " IF sy-subrc eq 0(READ TABLE
i_t059t_fnl)
ENDIF.
ENDIF.
ENDCASE.
UNASSIGN:<fs_line>.
ENDFORM. " f_fill_amt_ind
*&---------------------------------------------------------------------*
*& Form get_mandk
*&---------------------------------------------------------------------*
* Getting data from table t059t into internal table for getting
* field of dynamic table
*----------------------------------------------------------------------*
FORM f_get_mandk .
REFRESH i_t059t.
SELECT mindk
mtext
FROM t059t
INTO TABLE i_t059t
WHERE spras EQ sy-langu.
IF sy-subrc EQ 0.
* Getting fields of dynamic table
PERFORM f_fill_final_table.
ENDIF.
ENDFORM. " get_mandk
*&---------------------------------------------------------------------*
*& Form f_cerate_dynamic_table
*&---------------------------------------------------------------------*
* Making field cat. and creating dynamic table
*----------------------------------------------------------------------*
FORM f_create_dynamic_table .
* Filling field cat. for dynamic table
PERFORM populate_fldcat.
* For Creating dynamic table
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
i_style_table = c_x
it_fieldcatalog = i_fcat
IMPORTING
ep_table = i_sel_rows
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
ASSIGN i_sel_rows->* TO <fs_table>.
ENDFORM. " f_cerate_dynamic_table
*&---------------------------------------------------------------------*
*& Form f_fill_final_table
*&---------------------------------------------------------------------*
* Getting fields of dynamic table
*----------------------------------------------------------------------*
FORM f_fill_final_table .
DATA: l_text(50) TYPE c.
g_count = c_1.
REFRESH i_t059t_fnl.
LOOP AT i_t059t INTO i_t059t_s.
CONCATENATE i_t059t_s-mtext c_cr INTO l_text.
CONDENSE l_text NO-GAPS.
TRANSLATE l_text TO UPPER CASE.
MOVE: g_count TO i_t059t_fnl_s-count ,
i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
l_text TO i_t059t_fnl_s-mtext,
c_x TO i_t059t_fnl_s-mark.
APPEND i_t059t_fnl_s TO i_t059t_fnl.
CLEAR : i_t059t_fnl_s,
l_text.
CONCATENATE i_t059t_s-mtext ' (Certified)'(011) INTO l_text.
MOVE : g_count TO i_t059t_dis_s-count ,
l_text TO i_t059t_dis_s-mtext.
APPEND i_t059t_dis_s TO i_t059t_dis.
CLEAR : l_text.
g_count = g_count + 1.
CONCATENATE i_t059t_s-mtext c_ncr INTO l_text.
CONDENSE l_text NO-GAPS.
TRANSLATE l_text TO UPPER CASE.
MOVE: g_count TO i_t059t_fnl_s-count ,
i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
l_text TO i_t059t_fnl_s-mtext,
c_space TO i_t059t_fnl_s-mark.
CLEAR l_text.
APPEND i_t059t_fnl_s TO i_t059t_fnl.
CLEAR: i_t059t_fnl_s.
CONCATENATE i_t059t_s-mtext ' (Non-Certified)'(009) INTO l_text.
MOVE : g_count TO i_t059t_dis_s-count ,
l_text TO i_t059t_dis_s-mtext.
APPEND i_t059t_dis_s TO i_t059t_dis.
g_count = g_count + 1.
CLEAR : l_text,
i_t059t_s.
ENDLOOP.
ENDFORM. " f_fill_final_table
*&---------------------------------------------------------------------*
*& Form populate_fldcat_alv
*&---------------------------------------------------------------------*
* Creating field cat.for ALV GRID
*&---------------------------------------------------------------------*
FORM populate_fldcat_alv .
REFRESH i_fieldcat.
CLEAR: i_t059t_s,
i_fieldcat_s.
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = c_vendor.
i_fieldcat_s-seltext_l = text-005.
i_fieldcat_s-outputlen = c_25. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat .
CLEAR: i_fieldcat_s .
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = c_name.
i_fieldcat_s-seltext_l = text-006.
i_fieldcat_s-outputlen = c_25. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat .
CLEAR: i_fieldcat_s .
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = c_credt.
i_fieldcat_s-seltext_l = text-007.
i_fieldcat_s-outputlen = c_35. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat.
CLEAR: i_fieldcat_s .
CLEAR i_t059t_dis_s.
LOOP AT i_t059t_dis INTO i_t059t_dis_s.
READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY count =
i_t059t_dis_s-count.
IF sy-subrc EQ 0.
CLEAR i_fieldcat_s.
CLEAR i_t059t_s.
CONCATENATE i_t059t_fnl_s-mindk i_t059t_dis_s-mtext INTO
i_t059t_dis_s-mtext
SEPARATED BY
c_space.
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = i_t059t_fnl_s-mtext.
i_fieldcat_s-seltext_l = i_t059t_dis_s-mtext.
i_fieldcat_s-do_sum = c_x.
i_fieldcat_s-outputlen = c_16. "Defect 40862
i_fieldcat_s-inttype = c_p. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat.
CLEAR: i_fieldcat_s ,
i_t059t_dis_s.
ENDIF.
ENDLOOP.
ENDFORM. " populate_fldcat_alv
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
*Routine for trapping double click event
*----------------------------------------------------------------------*
* -->UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm "#EC CALLED
selfield TYPE slis_selfield.
CASE ucomm.
WHEN c_ic1. "Defect 40862
READ TABLE <fs_table> ASSIGNING <fs_line> INDEX selfield-tabindex.
IF sy-subrc EQ 0. "Defect 40862
PERFORM f_get_popup.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form f_get_popup
*&---------------------------------------------------------------------*
*Routine to call popup screen
*----------------------------------------------------------------------*
FORM f_get_popup .
REFRESH:i_lvc_t_detm,i_lvc_t_fcat,i_lvc_s_deta.
CLEAR i_lvc_t_fcat_s.
i_lvc_t_fcat_s-fieldname = c_columntext. "Defect 40862
i_lvc_t_fcat_s-key = c_x.
i_lvc_t_fcat_s-outputlen = c_30. "Defect 40862
i_lvc_t_fcat_s-seltext = 'Group Description'(012).
APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.
CLEAR:i_lvc_t_fcat_s .
i_lvc_t_fcat_s-fieldname = c_value. "Defect 40862
i_lvc_t_fcat_s-outputlen = c_20. "Defect 40862
i_lvc_t_fcat_s-seltext = 'contents'(013).
APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.
i_lvc_s_layo_s-no_toolbar = c_x.
PERFORM f_fill_detail.
i_lvc_t_detm_s-detailtab = i_lvc_s_deta[].
APPEND i_lvc_t_detm_s TO i_lvc_t_detm.
CALL FUNCTION 'LVC_ITEM_DETAIL'
EXPORTING
it_fieldcatalog = i_lvc_t_fcat
is_layout = i_lvc_s_layo_s
TABLES
t_outtab = i_lvc_t_detm.
ENDFORM. " f_get_popup
*&---------------------------------------------------------------------*
*& Form f_fill_detail
*&---------------------------------------------------------------------*
*Routine to populate details of the selected records
*----------------------------------------------------------------------*
FORM f_fill_detail .
DATA: l_colname(30) TYPE c,
l_index TYPE i.
l_index = 1.
LOOP AT i_fieldcat INTO i_fieldcat_s.
l_colname = i_fieldcat_s-fieldname.
i_lvc_t_detm_s-blockindex = l_index.
ASSIGN COMPONENT l_colname OF STRUCTURE <fs_line> TO <fs_field>.
IF <fs_field> IS NOT INITIAL.
i_lvc_s_deta_s-columntext = i_fieldcat_s-fieldname.
i_lvc_s_deta_s-value = <fs_field>.
APPEND i_lvc_s_deta_s TO i_lvc_s_deta.
ENDIF.
ENDLOOP.
ENDFORM. " f_fill_detail
****************************************** END ***********************
Code Formatted by: Alvaro Tejada Galindo on May 23, 2008 7:01 PM
05-23-2008 3:37 PM
Hello,
Do this:
PARAMETERS:
dbtab TYPE c LENGTH 10,
rows TYPE i DEFAULT 100.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS:
<tab> TYPE ANY TABLE,
<wa> TYPE ANY,
<field> TYPE ANY.
TRY.
CREATE DATA dref
TYPE STANDARD TABLE OF (dbtab) WITH NON-UNIQUE DEFAULT KEY.
ASSIGN dref->* TO <tab>.
SELECT *
FROM (dbtab) UP TO rows ROWS
INTO TABLE <tab>.
LOOP AT <tab> ASSIGNING <wa>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <field>.
IF sy-subrc = 0.
WRITE / <field>.
ELSE.
EXIT.
ENDIF.
ENDDO.
ULINE.
ENDLOOP.
CATCH cx_sy_create_data_error.
WRITE 'Wrong Database!'.
ENDTRY.
Regards,
05-23-2008 3:49 PM
Hi,
As per my experience with internal tables, while creating the dynamic internal table one must use field symbols.
Without field symbols it is not possible to create a dynamic internal table. As during runtime, we will come to know about number of rows or columns, it is always good to use field symbols which are given as a boon to SAP.
For your understanding I can provide you an example program so that you can understand field symbols easily.
REPORT Zdynamic_table
NO STANDARD PAGE HEADING
LINE-SIZE 1023
LINE-COUNT 35(3)
MESSAGE-ID zrtc.
TYPE-POOLS : slis.
************************************************************************
* TABLES
************************************************************************
*{
TABLES: lfm1,
bkpf.
*}
************************************************************************
* GLOBAL TYPES
* naming convention: "T_name"
************************************************************************
*{
TYPES: BEGIN OF t_lfb1,
lifnr TYPE lfb1-lifnr, "Vendor
mindk TYPE lfb1-mindk, "Minority indicator
cerdt TYPE lfb1-cerdt, "Certification date
END OF t_lfb1,
BEGIN OF t_lfa1,
lifnr TYPE lfa1-lifnr, "Vendor
name1 TYPE lfa1-name1, "Vendor name
END OF t_lfa1,
BEGIN OF t_t059t_dis,
mtext(50) TYPE c , "Text
count(10) TYPE c , "count
END OF t_t059t_dis,
BEGIN OF t_t059t,
mindk TYPE t059t-mindk, "Minority Indicators
mtext TYPE t059t-mtext, "Text
mark(1) TYPE c ,
count(10) TYPE c , "count
END OF t_t059t,
BEGIN OF t_bsak,
bukrs TYPE bsak-bukrs , "Company Code
lifnr TYPE bsak-lifnr , "Vendor
umsks TYPE bsak-umsks , "Transaction Type
umskz TYPE bsak-umskz , "Indicator
augdt TYPE bsak-augdt , "Clearing Date
augbl TYPE bsak-augbl , "Document Number
zuonr TYPE bsak-zuonr , "assignment Number
gjahr TYPE bsak-gjahr , "Fiscal Year
belnr TYPE bsak-belnr , "Accounting Document Number
buzei TYPE bsak-buzei , "Number of Line Item
budat TYPE bsak-budat , "Posting Date
blart TYPE bsak-blart , "Document Type
shkzg TYPE bsak-shkzg , "Debit/Credit Indicator
wrbtr TYPE bsak-wrbtr , "Amount
END OF t_bsak,
BEGIN OF t_bsik,
bukrs TYPE bsik-bukrs , "Company Code
lifnr TYPE bsik-lifnr , "Vendor
umsks TYPE bsik-umsks , "Transaction Type
umskz TYPE bsik-umskz , "Indiacator
augdt TYPE bsik-augdt , "Clearing Date
augbl TYPE bsik-augbl , "Document Number
zuonr TYPE bsik-zuonr , "Assignment Number
gjahr TYPE bsik-gjahr , "Fiscal Year
belnr TYPE bsik-belnr , "Accounting Document Number
buzei TYPE bsik-buzei , "Number of Line Item
budat TYPE bsik-budat , "Posting Date
blart TYPE bsik-blart , "Document Type
shkzg TYPE bsik-shkzg , "Debit/Credit Indicator
wrbtr TYPE bsik-wrbtr , "Amount
END OF t_bsik,
BEGIN OF t_det,
fieldname(20) TYPE c,
fieldval(20) TYPE c,
END OF t_det.
*}
************************************************************************
* GLOBAL CONSTANTS
* naming convention: "c_name"
************************************************************************
*{
CONSTANTS : c_doc_typ_re(2) TYPE c VALUE 'RE'
, "Document type
c_doc_typ_kr(2) TYPE c VALUE 'KR'
, "Document type
*begin of defect
c_doc_typ_kz(2) TYPE c VALUE 'KZ'
, "Document type
c_doc_typ_kn(2) TYPE c VALUE 'KN'
, "Document type
*end of defect
c_credit TYPE bsid-shkzg VALUE 'H'
, "Credit indicator
c_f_top_of_page TYPE slis_formname VALUE 'F_TOP_OF_PAGE'
, "top fo page
c_space TYPE c VALUE space
, "space
c_cr(4) TYPE c VALUE '_CR'
,
c_ncr(4) TYPE c VALUE '_NCR'
,
c_vendor(6) TYPE c VALUE 'VENDOR'
,
c_name(6) TYPE c VALUE 'NAME'
,
c_credt(20) TYPE c VALUE
'CERTIFICATION_DATE', "Certfication Date
c_null TYPE sy-datum VALUE '00000000'
,
c_1(1) TYPE c VALUE '1'
,
c_bukrs(4) TYPE c VALUE '200'
,
* Begin of Defect 40862
c_user_command TYPE slis_formname VALUE 'USER_COMMAND'
,
c_25 TYPE char2 VALUE '25'
,
c_35 TYPE char2 VALUE '35'
,
c_55 TYPE char2 VALUE '55'
,
c_s TYPE char1 VALUE 'S'
,
c_usd TYPE char3 VALUE 'USD'
,
c_20 TYPE char2 VALUE '20'
,
c_dash TYPE char1 VALUE '-'
,
c_value TYPE char5 VALUE 'VALUE'
,
c_columntext TYPE char10 VALUE 'COLUMNTEXT'
,
c_30 TYPE char2 VALUE '30'
,
c_ic1 TYPE char4 VALUE '&IC1'
,
c_p TYPE char1 VALUE 'P'
,
c_16 TYPE char2 VALUE '16'
,
* End of Defect 40862
c_x(1) TYPE c VALUE 'X'
.
*}
************************************************************************
* GLOBAL ELEMENTARY VARIABLES
* naming convention: "g_name"
************************************************************************
*{
DATA : g_wrbtr TYPE bsak-wrbtr , " Amount
g_sum TYPE bsak-wrbtr , " Sum of amount
g_sum_ncr(16) TYPE c , " Sum of amount
g_sum_cr(16) TYPE c , " Sum of amount
g_count(10) TYPE c , "Count
g_flag(1) TYPE c . "Flag
*}
************************************************************************
* GLOBAL STRUCTURES
* naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1_s TYPE t_lfb1 , "Structure for user
defined type
i_lfa1_s TYPE t_lfa1 , "Structure for user
defined type
i_fldlayout_s TYPE slis_layout_alv , "Structure for
layout of ALV
i_header_alv_s TYPE slis_listheader , "Structure for
Header
i_t_fieldcat_s TYPE slis_t_fieldcat_alv , "Structure for
fieldcat.
i_fieldcat_s LIKE LINE OF i_t_fieldcat_s, "Structure for
fieldcat.
i_t059t_s TYPE t_t059t , "Structure user
defined type
i_t059t_fnl_s TYPE t_t059t , "Structure user
defined type
i_fcat_s TYPE lvc_s_fcat ,
i_final_s TYPE t_bsak , "Structure user
defined type
i_t059t_dis_s TYPE t_t059t_dis , "Structure user
defined type
i_budat_s TYPE fagl_range_budat ,
i_lvc_t_fcat_s TYPE lvc_s_fcat,
i_lvc_s_layo_s TYPE lvc_s_layo,
i_lvc_t_detm_s TYPE lvc_s_detm,
i_lvc_s_deta_s TYPE lvc_s_deta.
*}
************************************************************************
* GLOBAL INTERNAL TABLES
* naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1 TYPE TABLE OF t_lfb1 , "Internal table for
user defined type
i_lfa1 TYPE TABLE OF t_lfa1 , "Internal table for
user defined type
i_t059t TYPE TABLE OF t_t059t , "Internal table for
user defined type
i_t059t_dis TYPE TABLE OF t_t059t_dis ,
i_t059t_fnl TYPE TABLE OF t_t059t , "Internal table for
user defined type
i_fieldcat TYPE slis_t_fieldcat_alv , "Internal table for
fieldcat.
i_events TYPE slis_t_event , "Internal table for
event
i_header_alv TYPE slis_t_listheader , "Internal table for
header
i_fcat TYPE TABLE OF lvc_s_fcat , "Field cat. of dynamic
table
i_sel_rows TYPE REF TO data , "For creating dynamic
table
i_new_line TYPE REF TO data ,
i_bsak TYPE TABLE OF t_bsak , "Internal table for
user defined type
i_bsik TYPE TABLE OF t_bsik , "Internal table for
user defined type
i_final TYPE TABLE OF t_bsak , "Internal table for
user defined type
i_lvc_t_fcat TYPE TABLE OF lvc_s_fcat,
i_lvc_t_detm TYPE TABLE OF lvc_s_detm,
i_lvc_s_deta TYPE TABLE OF lvc_s_deta.
*}
************************************************************************
* FIELD-SYMBOLS
* naming convention: "<FS_>name"
************************************************************************
*{
FIELD-SYMBOLS : <fs_table> TYPE STANDARD TABLE, "For dynamic table
<fs_line> TYPE ANY , "For row of dynamic
table
<fs_field> TYPE ANY . "For field of
dynamic table
*}
************************************************************************
* PARAMETERS & SELECT-OPTIONS
* aming convention: "p_name" & "s_name"
************************************************************************
*{
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_bukrs TYPE lfb1-bukrs OBLIGATORY DEFAULT c_bukrs."
'200' .
SELECT-OPTIONS : s_lifnr FOR lfm1-lifnr ,
s_budat FOR bkpf-budat.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.
PARAMETERS: p_crt RADIOBUTTON GROUP rad1 ,
p_ncrt RADIOBUTTON GROUP rad1 ,
p_all RADIOBUTTON GROUP rad1 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b2.
*}
************************************************************************
* AT SELECTION-SCREEN ON <Field>
************************************************************************
*{
AT SELECTION-SCREEN ON p_bukrs.
* Validating Company Code
PERFORM f_validate_company_code.
AT SELECTION-SCREEN ON s_lifnr.
* Validating Vendor
PERFORM f_validate_vendor.
*}
************************************************************************
* START-OF-SELECTION
************************************************************************
*{
START-OF-SELECTION.
* Getting data from lfb1
PERFORM f_get_lfb1.
CHECK NOT i_lfb1[] IS INITIAL.
* Getting data from lfa1
PERFORM f_get_lfa1.
* Getting data from bsak
PERFORM f_get_bsak.
* Getting data from bsik
PERFORM f_get_bsik.
*}
************************************************************************
* END-OF-SELECTION
************************************************************************
*{
END-OF-SELECTION.
IF NOT i_final[] IS INITIAL.
* Getting all fields of dynamic table
PERFORM f_get_mandk.
* Creating dyanmic table
PERFORM f_create_dynamic_table.
* Creating Dynamic table and filling data to dynamic table table
PERFORM f_fill_output.
* For displaying output
PERFORM f_display.
ELSE.
MESSAGE s105(zrtc). " WITH 'No data found
for this selection criteria.'(008).
ENDIF.
*}
************************************************************************
* FORMS
* naming convention: "f_name"
************************************************************************
*&---------------------------------------------------------------------*
*& Form validate_company_code
*&---------------------------------------------------------------------*
* Validating company code
*----------------------------------------------------------------------*
FORM f_validate_company_code .
DATA : l_t001 TYPE t001-bukrs.
CLEAR l_t001.
SELECT bukrs
INTO l_t001
FROM t001
UP TO 1 ROWS
WHERE bukrs EQ p_bukrs.
ENDSELECT.
IF sy-subrc NE 0.
MESSAGE e043. " WITH 'Invalid Company Code'(003).
*-- This is to get rid of Extended check.
IF l_t001 IS INITIAL.
CLEAR l_t001.
ENDIF.
ENDIF.
ENDFORM. " validate_company_code
*&---------------------------------------------------------------------*
*& Form validate_vendor
*&---------------------------------------------------------------------*
* Validating Vendor
*----------------------------------------------------------------------*
FORM f_validate_vendor .
DATA : l_lfa1 TYPE lfa1-lifnr.
CLEAR l_lfa1.
IF NOT s_lifnr[] IS INITIAL.
SELECT lifnr
INTO l_lfa1
FROM lfa1
UP TO 1 ROWS
WHERE lifnr IN s_lifnr.
ENDSELECT.
IF sy-subrc NE 0.
MESSAGE e118. "WITH 'Invalid Vendor
Number.'(010).
*-- This is to get rid of Extended check.
IF l_lfa1 IS INITIAL.
CLEAR l_lfa1.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " validate_vendor
*---------------------------------------------------------------------*
* Form f_get_lfb1
*---------------------------------------------------------------------*
* Getting data from table lfb1 into into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfb1 .
REFRESH i_lfb1.
SELECT lifnr
mindk
cerdt
INTO TABLE i_lfb1
FROM lfb1
WHERE lifnr IN s_lifnr
AND bukrs EQ p_bukrs
AND mindk NE c_space.
IF sy-subrc EQ 0.
SORT i_lfb1 BY lifnr.
ENDIF.
ENDFORM. " f_get_lfb1
*&---------------------------------------------------------------------*
*& Form f_get_lfa1
*&---------------------------------------------------------------------*
* Getting vendor name from table lfa1 into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfa1 .
REFRESH i_lfa1.
IF NOT i_lfb1 IS INITIAL.
SELECT lifnr
name1
INTO TABLE i_lfa1
FROM lfa1
FOR ALL ENTRIES IN i_lfb1
WHERE lifnr EQ i_lfb1-lifnr.
IF sy-subrc EQ 0.
SORT i_lfa1 BY lifnr.
ENDIF.
ENDIF.
ENDFORM. " f_get_lfa1
*&---------------------------------------------------------------------*
*& Form f_get_bsak
*&---------------------------------------------------------------------*
* Getting document no from table bsak into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsak .
REFRESH: i_bsak. "Defect 40862
IF NOT i_lfb1 IS INITIAL.
*defect added document types
SELECT bukrs
lifnr
umsks
umskz
augdt
augbl
zuonr
gjahr
belnr
buzei
budat
blart
shkzg
wrbtr
FROM bsak
INTO TABLE i_bsak
FOR ALL ENTRIES IN i_lfb1
WHERE lifnr EQ i_lfb1-lifnr
AND bukrs EQ p_bukrs
AND budat IN s_budat
AND ( blart EQ c_doc_typ_re
OR blart EQ c_doc_typ_kr
OR blart EQ c_doc_typ_kn
OR blart EQ c_doc_typ_kz ).
*end of document types
APPEND LINES OF i_bsak TO i_final.
ENDIF.
ENDFORM. " f_get_bsak
*&---------------------------------------------------------------------*
*& Form f_get_bsik
*&---------------------------------------------------------------------*
* Getting data from table bsik into internal table
* according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsik .
REFRESH: i_bsik. "Defect 40862
IF NOT i_lfb1 IS INITIAL.
*defect added document types
SELECT bukrs
lifnr
umsks
umskz
augdt
augbl
zuonr
gjahr
belnr
buzei
budat
blart
shkzg
wrbtr
FROM bsik
INTO TABLE i_bsik
FOR ALL ENTRIES IN i_lfb1
WHERE lifnr EQ i_lfb1-lifnr
AND bukrs EQ p_bukrs
AND budat IN s_budat
AND ( blart EQ c_doc_typ_re
OR blart EQ c_doc_typ_kr
OR blart EQ c_doc_typ_kn
OR blart EQ c_doc_typ_kz ).
*defect ended document types
APPEND LINES OF i_bsik TO i_final.
ENDIF.
ENDFORM. " f_get_bsik
*&---------------------------------------------------------------------*
*& Form f_fill_output
*&---------------------------------------------------------------------*
* Creating dynamic table , getting data and filling that data to
* dynamic table for display according to the condition
*----------------------------------------------------------------------*
FORM f_fill_output .
DATA : l_cert_dt TYPE c LENGTH 10,
l_lifnr TYPE lfa1-lifnr.
CLEAR: g_wrbtr ,
g_sum .
* Sorting tables by vendor
SORT : i_t059t_fnl BY mindk,
i_final BY lifnr belnr buzei.
* Calculating the amount and filling that data into dynamic table
LOOP AT i_final INTO i_final_s.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = i_final_s-lifnr
IMPORTING
output = l_lifnr.
AT NEW lifnr.
CLEAR : g_sum.
ENDAT.
* Making Amount negative if credit
IF i_final_s-shkzg EQ c_credit.
* g_wrbtr = i_final_s-wrbtr * -1.
g_wrbtr = i_final_s-wrbtr.
ELSE.
* g_wrbtr = i_final_s-wrbtr.
g_wrbtr = i_final_s-wrbtr * -1.
ENDIF.
g_sum = g_sum + g_wrbtr.
AT END OF lifnr.
* Filling data into Dynamic table according to the condition .
CLEAR i_lfb1_s.
READ TABLE i_lfb1 INTO i_lfb1_s WITH KEY lifnr = i_final_s-lifnr
BINARY SEARCH.
IF sy-subrc EQ 0.
CREATE DATA i_new_line LIKE LINE OF <fs_table>.
ASSIGN i_new_line->* TO <fs_line>.
ASSIGN COMPONENT c_vendor OF STRUCTURE <fs_line> TO <fs_field>.
<fs_field> = l_lifnr.
CLEAR i_lfa1_s.
READ TABLE i_lfa1 INTO i_lfa1_s WITH KEY lifnr = i_final_s-lifnr
BINARY SEARCH.
IF sy-subrc EQ 0.
ASSIGN COMPONENT c_name OF STRUCTURE <fs_line> TO <fs_field>.
<fs_field> = i_lfa1_s-name1.
ASSIGN COMPONENT c_credt OF STRUCTURE <fs_line> TO <fs_field>.
WRITE : i_lfb1_s-cerdt TO l_cert_dt DD/MM/YYYY,
i_lfb1_s-cerdt TO i_lfb1_s-cerdt.
IF i_lfb1_s-cerdt EQ c_null.
<fs_field> = c_space.
ELSE.
<fs_field> = l_cert_dt.
ENDIF. " if sy-subrc eq 0(READ TABLE i_lfa1)
* Filling data according to minority indicator
PERFORM f_fill_amt_ind.
ENDIF . " if sy-subrc eq 0 (READ TABLE i_lfb1)
CLEAR: i_final_s ,
i_lfa1_s ,
g_wrbtr ,
i_lfb1_s .
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. " f_fill_output
*&---------------------------------------------------------------------*
*& Form Display
*&---------------------------------------------------------------------*
* For display the ALV Report
*----------------------------------------------------------------------*
FORM f_display .
DATA : lw_repid LIKE sy-repid,
l_slis_exit_by_user TYPE slis_exit_by_user.
lw_repid = sy-repid.
* Creating field cat. for ALV
PERFORM populate_fldcat_alv.
* Creating Layout.
PERFORM populate_layout.
* Creating Event
PERFORM f_get_events.
* Creating Top Of Page
PERFORM f_top_of_page.
* Call Function for ALV GRID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lw_repid
it_fieldcat = i_fieldcat
is_layout = i_fldlayout_s
it_events = i_events
i_callback_user_command = c_user_command "Defect 40862
IMPORTING
es_exit_caused_by_user = l_slis_exit_by_user
TABLES
t_outtab = <fs_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF l_slis_exit_by_user EQ c_x.
LEAVE LIST-PROCESSING .
ENDIF.
UNASSIGN:<fs_field>,<fs_line>.
ENDFORM. " Display
*&---------------------------------------------------------------------*
*& Form populate_fldcat
*&---------------------------------------------------------------------*
* Filling fieldcat for dynamic table
*----------------------------------------------------------------------*
FORM populate_fldcat .
REFRESH i_fcat.
CLEAR: i_t059t_s,
i_fcat_s.
i_fcat_s-key = c_x.
i_fcat_s-fieldname = c_vendor.
i_fcat_s-outputlen = c_25. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s .
i_fcat_s-key = c_x.
i_fcat_s-fieldname = c_name.
i_fcat_s-outputlen = c_25. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s .
i_fcat_s-key = c_x.
i_fcat_s-fieldname = c_credt.
i_fcat_s-outputlen = c_35. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s .
CLEAR i_t059t_fnl_s.
LOOP AT i_t059t_fnl INTO i_t059t_fnl_s.
CLEAR i_fcat_s.
CLEAR i_t059t_s.
i_fcat_s-key = c_x.
i_fcat_s-fieldname = i_t059t_fnl_s-mtext.
i_fcat_s-outputlen = c_55. "Defect 40862
APPEND i_fcat_s TO i_fcat .
CLEAR: i_fcat_s ,
i_t059t_fnl_s,
i_t059t_fnl_s.
ENDLOOP.
ENDFORM. " populate_fldcat
*&---------------------------------------------------------------------*
*& Form populate_layout
*&---------------------------------------------------------------------*
* Filling layout
*----------------------------------------------------------------------*
FORM populate_layout .
i_fldlayout_s-zebra = c_x .
i_fldlayout_s-window_titlebar = 'Purchasing from Minority
Vendors'(014).
i_fldlayout_s-get_selinfos = c_x .
i_fldlayout_s-expand_all = c_space . "Defect 40862
i_fldlayout_s-no_scrolling = c_x.
ENDFORM. " populate_layout
*&---------------------------------------------------------------------*
*& Form f_get_events
*&---------------------------------------------------------------------*
* For Event
*----------------------------------------------------------------------*
FORM f_get_events .
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc EQ 0.
MOVE c_f_top_of_page TO ls_event-form.
MODIFY i_events FROM ls_event INDEX sy-tabix.
ENDIF.
ENDFORM. " f_get_events
*&---------------------------------------------------------------------*
*& Form f_top_of_page
*&---------------------------------------------------------------------*
* For top of page
*----------------------------------------------------------------------*
FORM f_top_of_page .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_header_alv.
PERFORM f_fill_header.
ENDFORM. " f_top_of_page
*&---------------------------------------------------------------------*
*& Form f_fill_header
*&---------------------------------------------------------------------*
* Filling data for Top Of Page
*----------------------------------------------------------------------*
FORM f_fill_header .
DATA : l_date_low TYPE c LENGTH 10,
l_date_high TYPE c LENGTH 20,
l_sum_cr(20) TYPE c,
l_sum_cr_tmp TYPE p DECIMALS 2,
l_sum_ncr_tmp TYPE p DECIMALS 2,
l_sum_ncr(20) TYPE c,
l_total(20) TYPE c.
IF g_flag EQ c_space.
LOOP AT s_budat INTO i_budat_s.
i_header_alv_s-typ = c_s. "Defect 40862
WRITE : i_budat_s-low TO l_date_low MM/DD/YYYY ,
i_budat_s-high TO l_date_high MM/DD/YYYY.
CONCATENATE text-019 l_date_low c_dash l_date_high INTO
i_header_alv_s-info
SEPARATED BY c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
ENDLOOP.
IF p_crt EQ c_x
OR p_all EQ c_x.
i_header_alv_s-typ = c_s. "Defect 40862
MOVE g_sum_cr TO l_sum_cr_tmp.
WRITE l_sum_cr_tmp TO l_sum_cr CURRENCY c_usd.
"Defect 40862
CONCATENATE text-004 c_usd l_sum_cr INTO i_header_alv_s-info
"Defect 40862
SEPARATED BY
c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
ENDIF.
IF p_ncrt EQ c_x
OR p_all EQ c_x.
i_header_alv_s-typ = c_s. "Defect 40862
MOVE g_sum_ncr TO l_sum_ncr_tmp.
WRITE l_sum_ncr_tmp TO l_sum_ncr CURRENCY c_usd.
"Defect 40862
CONCATENATE text-002 c_usd l_sum_ncr INTO i_header_alv_s-info
"Defect 40862
SEPARATED BY
c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
ENDIF.
l_total = g_sum_cr + g_sum_ncr.
i_header_alv_s-typ = c_s. "Defect 40862
MOVE l_total TO l_sum_ncr_tmp.
WRITE l_sum_ncr_tmp TO l_total CURRENCY c_usd.
"Defect 40862
CONCATENATE text-020 c_usd l_total INTO i_header_alv_s-info
"Defect 40862
SEPARATED BY c_space.
APPEND i_header_alv_s TO i_header_alv.
CLEAR:i_header_alv_s.
g_flag = c_x.
CLEAR:i_header_alv_s.
ENDIF.
ENDFORM. " f_fill_header
*&---------------------------------------------------------------------*
*& Form f_fill_amt_ind
*&---------------------------------------------------------------------*
* Filling data into dynamic table according to indicator and
* also calculating sum of all amount of certified/non-certified
*----------------------------------------------------------------------*
FORM f_fill_amt_ind .
DATA: w_mindk(40) TYPE c.
MOVE i_lfb1_s-mindk TO w_mindk.
CASE i_lfb1_s-mindk.
WHEN w_mindk.
* For Certified .
IF i_lfb1_s-cerdt NE c_null.
IF p_crt EQ c_x OR p_all EQ c_x.
CLEAR i_t059t_fnl_s.
READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
mark =
c_x.
IF sy-subrc EQ 0.
ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
MOVE g_sum TO <fs_field> .
INSERT <fs_line> INTO TABLE <fs_table>.
* Calculating sum of Certified .
g_sum_cr = g_sum_cr + g_sum .
ENDIF. " IF sy-subrc eq 0(READ TABLE i_t059t_fnl)
ENDIF.
ELSE.
* For Non-Certified.
IF p_ncrt EQ c_x OR p_all EQ c_x.
CLEAR i_t059t_fnl_s.
READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
mark =
c_space.
IF sy-subrc EQ 0.
ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
MOVE g_sum TO <fs_field> .
INSERT <fs_line> INTO TABLE <fs_table>.
* Calculating sum of Non-Certified .
g_sum_ncr = g_sum_ncr + g_sum .
ENDIF . " IF sy-subrc eq 0(READ TABLE
i_t059t_fnl)
ENDIF.
ENDIF.
ENDCASE.
UNASSIGN:<fs_line>.
ENDFORM. " f_fill_amt_ind
*&---------------------------------------------------------------------*
*& Form get_mandk
*&---------------------------------------------------------------------*
* Getting data from table t059t into internal table for getting
* field of dynamic table
*----------------------------------------------------------------------*
FORM f_get_mandk .
REFRESH i_t059t.
SELECT mindk
mtext
FROM t059t
INTO TABLE i_t059t
WHERE spras EQ sy-langu.
IF sy-subrc EQ 0.
* Getting fields of dynamic table
PERFORM f_fill_final_table.
ENDIF.
ENDFORM. " get_mandk
*&---------------------------------------------------------------------*
*& Form f_cerate_dynamic_table
*&---------------------------------------------------------------------*
* Making field cat. and creating dynamic table
*----------------------------------------------------------------------*
FORM f_create_dynamic_table .
* Filling field cat. for dynamic table
PERFORM populate_fldcat.
* For Creating dynamic table
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
i_style_table = c_x
it_fieldcatalog = i_fcat
IMPORTING
ep_table = i_sel_rows
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
ASSIGN i_sel_rows->* TO <fs_table>.
ENDFORM. " f_cerate_dynamic_table
*&---------------------------------------------------------------------*
*& Form f_fill_final_table
*&---------------------------------------------------------------------*
* Getting fields of dynamic table
*----------------------------------------------------------------------*
FORM f_fill_final_table .
DATA: l_text(50) TYPE c.
g_count = c_1.
REFRESH i_t059t_fnl.
LOOP AT i_t059t INTO i_t059t_s.
CONCATENATE i_t059t_s-mtext c_cr INTO l_text.
CONDENSE l_text NO-GAPS.
TRANSLATE l_text TO UPPER CASE.
MOVE: g_count TO i_t059t_fnl_s-count ,
i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
l_text TO i_t059t_fnl_s-mtext,
c_x TO i_t059t_fnl_s-mark.
APPEND i_t059t_fnl_s TO i_t059t_fnl.
CLEAR : i_t059t_fnl_s,
l_text.
CONCATENATE i_t059t_s-mtext ' (Certified)'(011) INTO l_text.
MOVE : g_count TO i_t059t_dis_s-count ,
l_text TO i_t059t_dis_s-mtext.
APPEND i_t059t_dis_s TO i_t059t_dis.
CLEAR : l_text.
g_count = g_count + 1.
CONCATENATE i_t059t_s-mtext c_ncr INTO l_text.
CONDENSE l_text NO-GAPS.
TRANSLATE l_text TO UPPER CASE.
MOVE: g_count TO i_t059t_fnl_s-count ,
i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
l_text TO i_t059t_fnl_s-mtext,
c_space TO i_t059t_fnl_s-mark.
CLEAR l_text.
APPEND i_t059t_fnl_s TO i_t059t_fnl.
CLEAR: i_t059t_fnl_s.
CONCATENATE i_t059t_s-mtext ' (Non-Certified)'(009) INTO l_text.
MOVE : g_count TO i_t059t_dis_s-count ,
l_text TO i_t059t_dis_s-mtext.
APPEND i_t059t_dis_s TO i_t059t_dis.
g_count = g_count + 1.
CLEAR : l_text,
i_t059t_s.
ENDLOOP.
ENDFORM. " f_fill_final_table
*&---------------------------------------------------------------------*
*& Form populate_fldcat_alv
*&---------------------------------------------------------------------*
* Creating field cat.for ALV GRID
*&---------------------------------------------------------------------*
FORM populate_fldcat_alv .
REFRESH i_fieldcat.
CLEAR: i_t059t_s,
i_fieldcat_s.
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = c_vendor.
i_fieldcat_s-seltext_l = text-005.
i_fieldcat_s-outputlen = c_25. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat .
CLEAR: i_fieldcat_s .
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = c_name.
i_fieldcat_s-seltext_l = text-006.
i_fieldcat_s-outputlen = c_25. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat .
CLEAR: i_fieldcat_s .
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = c_credt.
i_fieldcat_s-seltext_l = text-007.
i_fieldcat_s-outputlen = c_35. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat.
CLEAR: i_fieldcat_s .
CLEAR i_t059t_dis_s.
LOOP AT i_t059t_dis INTO i_t059t_dis_s.
READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY count =
i_t059t_dis_s-count.
IF sy-subrc EQ 0.
CLEAR i_fieldcat_s.
CLEAR i_t059t_s.
CONCATENATE i_t059t_fnl_s-mindk i_t059t_dis_s-mtext INTO
i_t059t_dis_s-mtext
SEPARATED BY
c_space.
i_fieldcat_s-key = c_x.
i_fieldcat_s-fieldname = i_t059t_fnl_s-mtext.
i_fieldcat_s-seltext_l = i_t059t_dis_s-mtext.
i_fieldcat_s-do_sum = c_x.
i_fieldcat_s-outputlen = c_16. "Defect 40862
i_fieldcat_s-inttype = c_p. "Defect 40862
APPEND i_fieldcat_s TO i_fieldcat.
CLEAR: i_fieldcat_s ,
i_t059t_dis_s.
ENDIF.
ENDLOOP.
ENDFORM. " populate_fldcat_alv
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
*Routine for trapping double click event
*----------------------------------------------------------------------*
* -->UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm "#EC CALLED
selfield TYPE slis_selfield.
CASE ucomm.
WHEN c_ic1. "Defect 40862
READ TABLE <fs_table> ASSIGNING <fs_line> INDEX selfield-tabindex.
IF sy-subrc EQ 0. "Defect 40862
PERFORM f_get_popup.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form f_get_popup
*&---------------------------------------------------------------------*
*Routine to call popup screen
*----------------------------------------------------------------------*
FORM f_get_popup .
REFRESH:i_lvc_t_detm,i_lvc_t_fcat,i_lvc_s_deta.
CLEAR i_lvc_t_fcat_s.
i_lvc_t_fcat_s-fieldname = c_columntext. "Defect 40862
i_lvc_t_fcat_s-key = c_x.
i_lvc_t_fcat_s-outputlen = c_30. "Defect 40862
i_lvc_t_fcat_s-seltext = 'Group Description'(012).
APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.
CLEAR:i_lvc_t_fcat_s .
i_lvc_t_fcat_s-fieldname = c_value. "Defect 40862
i_lvc_t_fcat_s-outputlen = c_20. "Defect 40862
i_lvc_t_fcat_s-seltext = 'contents'(013).
APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.
i_lvc_s_layo_s-no_toolbar = c_x.
PERFORM f_fill_detail.
i_lvc_t_detm_s-detailtab = i_lvc_s_deta[].
APPEND i_lvc_t_detm_s TO i_lvc_t_detm.
CALL FUNCTION 'LVC_ITEM_DETAIL'
EXPORTING
it_fieldcatalog = i_lvc_t_fcat
is_layout = i_lvc_s_layo_s
TABLES
t_outtab = i_lvc_t_detm.
ENDFORM. " f_get_popup
*&---------------------------------------------------------------------*
*& Form f_fill_detail
*&---------------------------------------------------------------------*
*Routine to populate details of the selected records
*----------------------------------------------------------------------*
FORM f_fill_detail .
DATA: l_colname(30) TYPE c,
l_index TYPE i.
l_index = 1.
LOOP AT i_fieldcat INTO i_fieldcat_s.
l_colname = i_fieldcat_s-fieldname.
i_lvc_t_detm_s-blockindex = l_index.
ASSIGN COMPONENT l_colname OF STRUCTURE <fs_line> TO <fs_field>.
IF <fs_field> IS NOT INITIAL.
i_lvc_s_deta_s-columntext = i_fieldcat_s-fieldname.
i_lvc_s_deta_s-value = <fs_field>.
APPEND i_lvc_s_deta_s TO i_lvc_s_deta.
ENDIF.
ENDLOOP.
ENDFORM. " f_fill_detail
****************************************** END ***********************
Code Formatted by: Alvaro Tejada Galindo on May 23, 2008 7:01 PM
05-23-2008 3:51 PM
Hi
Dynamic table means the only and best way is using field-symbols, bcoz it holds any data or structure.
Get the fieldcatalog of the given table using reuse_fieldcatalog_merge fm.
And create the table using method.
Example code.
DATA : i_table TYPE REF TO data,
fs_line TYPE REF TO data.
----
Field symbols
----
FIELD-SYMBOLS:
<i_output> TYPE STANDARD TABLE,
<fs_output>, " Used for Header line
<w_data>. " Used to assignment of
component
IF NOT i_fldcat[] IS INITIAL.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = i_fldcat[]
IMPORTING
ep_table = i_table
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2
.
IF sy-subrc <> 0.
ENDIF. " IF sy-subrc <> 0.
ASSIGN i_table->* TO <i_output>.
CREATE DATA fs_line LIKE LINE OF <i_output>.
ASSIGN fs_line->* TO <fs_output>.
ENDIF. " IF NOT i_fldcat[] IS INITIAL.
This is the way u need to workout for all the tables.
Venkat.