09-24-2015 1:54 PM
Dear scn members,
I am stucking to create alv report for dynamic column.
I tried below way, but its not working.can anyone help me on this.
CLEAR LS_FIELDCAT.
if it_FINAL-W_4015 eq '0.00'.
LS_FIELDCAT-ROW_POS = '1'.
LS_FIELDCAT-COL_POS = '9'.
LS_FIELDCAT-FIELDNAME = 'W_4016'.
LS_FIELDCAT-KEY = ''.
LS_FIELDCAT-OUTPUTLEN = '15'.
LS_FIELDCAT-DO_SUM = 'X'.
LS_FIELDCAT-SELTEXT_L = 'HRA'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT .
else.
LS_FIELDCAT-ROW_POS = '1'.
LS_FIELDCAT-COL_POS = '9'.
LS_FIELDCAT-FIELDNAME = 'W_4027'.
LS_FIELDCAT-KEY = ''.
LS_FIELDCAT-OUTPUTLEN = '15'.
LS_FIELDCAT-DO_SUM = 'X'.
LS_FIELDCAT-SELTEXT_L = 'HRA'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT .
endif.
CLEAR LS_FIELDCAT.
Note:
I am using static internal table but field only dynamic which means one field is null then i am picking another field from same internal table.
with regards,
siva.
09-24-2015 5:50 PM
Hi Siva,
Yes it works.
What the error message? can you please share the same.
Thanks
Nishant
09-25-2015 7:22 AM
Hi nishant,
i tried below code. ITs not shownig any error.But while display output that alternate field is not coming . can u explain to me?
below is my alv code.
PERFORM CREATE_FIELDCAT1.
DATA: SORT1 TYPE SLIS_SORTINFO_ALV,
IT_SORT1 TYPE SLIS_T_SORTINFO_ALV.
L_LAYOUT-TOTALS_TEXT = 'TOTAL'.
*l_layout-SUBTOTALS_TEXT = 'SUBTOTAL'.
PERFORM F029_EVENTTAB_BUILD USING IT_EVENTS[].
PERFORM F029_COMMENT_BUILD USING IT_TOP_OF_PAGE[].
WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BACKGROUND_ID = 'ALV_BACKGROUND'
I_CALLBACK_PROGRAM = SY-REPID
* i_callback_program = sy-cprog
I_GRID_TITLE = 'Pay Register Report'
IS_LAYOUT = L_LAYOUT
IT_FIELDCAT = GT_FIELDCAT[]
IT_EVENTS = IT_EVENTS
IT_SORT = IT_SORT1
I_SAVE = 'X'
I_DEFAULT = 'X'
IS_VARIANT = WK_VARIANT
TABLES
T_OUTTAB = IT_FINAL
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.
FORM ALV USING VALUE(P_0994) VALUE(P_0995) VALUE(P_0996)
VALUE(P_0997)
VALUE(P_0998) VALUE(P_0999).
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = P_0994.
WA_FIELDCAT-FIELDNAME = P_0995.
WA_FIELDCAT-TABNAME = P_0996.
WA_FIELDCAT-REPTEXT_DDIC = P_0997.
WA_FIELDCAT-OUTPUTLEN = P_0998.
WA_FIELDCAT-DO_SUM = P_0999.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
ENDFORM. "ALV
* To Set the Title for the ALV Grid Display
FORM TEST.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = IT_TOP_OF_PAGE[]
I_LOGO = 'BRITANNIA_LOGO'.
ENDFORM. "**** TOP_OF_PAGE ****
* Form F029_EVENTTAB_BUILD
FORM F029_EVENTTAB_BUILD USING IT_EVENTS TYPE SLIS_T_EVENT.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = IT_EVENTS.
READ TABLE IT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE SLIS_EV_TOP_OF_PAGE TO LS_EVENT-NAME.
MOVE 'TEST' TO LS_EVENT-FORM.
APPEND LS_EVENT TO IT_EVENTS.
ENDIF.
ENDFORM. "**** F029_EVENTTAB_BUILD ****
*To Display the Title for the ALV Grid Display
FORM F029_COMMENT_BUILD USING IT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
DATA : I_T549T TYPE STANDARD TABLE OF T549T ,
WA_T549T TYPE T549T .
DATA : L_I_HEADER TYPE SLIS_T_LISTHEADER,
L_WA_HEADER TYPE SLIS_LISTHEADER.
DATA : VAR(45) TYPE C.
DATA : D_DATE(40) TYPE N.
DATA : A_DATE(18) TYPE N,
B_DATE(18) TYPE N.
DATA : BUKRS TYPE BUKRS.
DATA : LV_BUKRS(70) TYPE C.
DATA : BUKRS_TEXT TYPE BUTXT.
SELECT SINGLE BUKRS
FROM PA0001
INTO BUKRS
WHERE BUKRS = PNPBUKRS-LOW.
*_ Company Name
CALL FUNCTION 'HRWPC_RFC_BUKRS_TEXT_GET'
EXPORTING
BUKRS = BUKRS
IMPORTING
BUKRS_TEXT = BUKRS_TEXT.
CLEAR LV_BUKRS.
LV_BUKRS = BUKRS.
SELECT *
INTO CORRESPONDING FIELDS OF WA_T549T
FROM T549T
WHERE SPRSL = 'EN' AND
ABKRS IN PNPABKRS.
ENDSELECT.
SELECT SINGLE BTEXT
FROM T001P
INTO WA_FINAL-BTEXT
WHERE BTRTL = WA_FINAL-BTRTL.
*Display Text of each Payrol Area
CONCATENATE 'Payroll Area : ' WA_T549T-ATEXT INTO
L_WA_HEADER-INFO SEPARATED BY SPACE.
VAR = L_WA_HEADER-INFO.
WRITE PN-BEGDA TO A_DATE MM/DD/YYYY.
WRITE PN-ENDDA TO B_DATE MM/DD/YYYY.
CONCATENATE 'PERIOD:' A_DATE 'TO' B_DATE INTO D_DATE
SEPARATED BY ' '.
***convert inverted-date D_date into date e_date.
DATA: LS_LINE TYPE SLIS_LISTHEADER.
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO = BUKRS_TEXT.
APPEND LS_LINE TO IT_TOP_OF_PAGE.
* LS_LINE-TYP = 'H'.
* LS_LINE-INFO = 'Chennai'.
* APPEND LS_LINE TO IT_TOP_OF_PAGE.
LS_LINE-TYP = 'S'.
LS_LINE-INFO = D_DATE.
APPEND LS_LINE TO IT_TOP_OF_PAGE.
* LS_LINE-TYP = 'H'.
* LS_LINE-INFO = WA_FINAL-BTEXT.
* APPEND LS_LINE TO IT_TOP_OF_PAGE.
ENDFORM. "F029_COMMENT_BUILD
FORM CREATE_FIELDCAT1 .
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-ROW_POS = '1'.
LS_FIELDCAT-COL_POS = '1'.
LS_FIELDCAT-FIELDNAME = 'PERNR'.
LS_FIELDCAT-KEY = ''.
LS_FIELDCAT-OUTPUTLEN = '12'.
* ls_fieldcat-do_sum = 'X'.
LS_FIELDCAT-SELTEXT_L = 'Employee No'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT .
LS_FIELDCAT-ROW_POS = '1'.
LS_FIELDCAT-COL_POS = '2'.
LS_FIELDCAT-FIELDNAME = 'NAME'.
LS_FIELDCAT-KEY = ''.
LS_FIELDCAT-OUTPUTLEN = '30'.
* ls_fieldcat-do_sum = 'X'.
LS_FIELDCAT-SELTEXT_L = 'Employee Name'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT .
CLEAR LS_FIELDCAT.
if it_FINAL-W_4015 eq '0.00'.
LS_FIELDCAT-ROW_POS = '1'.
LS_FIELDCAT-COL_POS = '9'.
LS_FIELDCAT-FIELDNAME = 'W_4016'.
LS_FIELDCAT-KEY = ''.
LS_FIELDCAT-OUTPUTLEN = '15'.
LS_FIELDCAT-DO_SUM = 'X'.
LS_FIELDCAT-SELTEXT_L = 'HRA'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT .
else.
LS_FIELDCAT-ROW_POS = '1'.
LS_FIELDCAT-COL_POS = '9'.
LS_FIELDCAT-FIELDNAME = 'W_4027'.
LS_FIELDCAT-KEY = ''.
LS_FIELDCAT-OUTPUTLEN = '15'.
LS_FIELDCAT-DO_SUM = 'X'.
LS_FIELDCAT-SELTEXT_L = 'HRA'.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT .
endif.
CLEAR LS_FIELDCAT.
endform.
09-25-2015 7:28 AM
Dear Siva ,
have you checked the fieldcatalog table in debugging mode.???
Is the field catalog table is populating correct manner?
Please check it.
Instead of using this you can use the statement is not initial.
if it_FINAL-W_4015 eq '0.00'.
Thanks and Regards,
Nishant
09-25-2015 8:29 AM
Hi Siva,
just check it, you may get your desired result.
add below code to your layout
wa_layout-stylefname = 'FIELD_STYLE' .
and then use (chage your code as shown below)
PERFORM set_specific_field_attributes.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
instead of CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
in FORM set_specific_field_attributes.
you have to write use logic for displaying different columns based on conditions.
Regards
Sanjeev kumar
09-25-2015 8:48 AM
Hi,
PERFORM build_fieldcat TABLES lt_fldcat lt_spras.
FORM build_table TABLES pt_spras TYPE tt_spras CHANGING pt_table TYPE REF TO data.
TABLES pt_spras TYPE tt_spras CHANGING pt_table TYPE REF TO data.
lt_fldcat TYPE TABLE OF lvc_s_fcat,
lw_spras LIKE LINE OF pt_spras.
lw_fldcat-datatype = 'CHAR'.
lw_fldcat-intlen = gc_type_length.
lw_fldcat-intlen = gc_type_length.
lw_fldcat-fieldname = gc_col_keyword.
lw_fldcat-datatype = 'CHAR'.
lw_fldcat-intlen = gc_keyword_length.
APPEND lw_fldcat TO lt_fldcat.
lw_fldcat-fieldname = gc_col_kben.
lw_fldcat-datatype = 'CHAR'.
lw_fldcat-intlen = gc_kben_length.
APPEND lw_fldcat TO lt_fldcat.
LOOP AT pt_spras INTO lw_spras.
CONCATENATE lw_spras-spras gc_col_desc INTO lw_fldcat-fieldname SEPARATED BY gc_col_separ.
lw_fldcat-datatype = 'CHAR'.
lw_fldcat-intlen = gc_desc_length.
APPEND lw_fldcat TO lt_fldcat.
ENDLOOP.
* Dynamische interne Tabelle aus dem Feldkatalog erstellen.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fldcat
IMPORTING
ep_table = pt_table
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
its looks like
here input this language
And Output will be
Thanks,
Mahipalsinh