Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ALV DYNAMIC COLUMN ?.PLS ..SEE THE CODE., HELP ME WITH CODE.

Former Member
0 Likes
826

THE FOLLOWING CODE GETS THE OUTPUT OF TAX FIELDS ,IF AN OF THE FIELD DOESNT HAVE DATA DIDNT COME IN OUTPUT, BUT I WANT THIS REPORT TO DONE USING DYAMIC TABALE & FIELD STRING..AS IN SDN WEBLOGS WHICH IS AS FOLLOWS I WANT TO DO IN THIS WAY ..ANYBODY THERE CAN HELP ME WITH CODE.

1. Create your field catalog either manually or automatically using the function module, LVC_FIELDCATALOG_MERGE. Add more rows to the field catalog table (T_FIELDCAT) at run time.

2. Use the field catalog to create a table dynamically using the method below.

DATA: T_OUTPUT TYPE REF TO DATA

FIELD-SYMBOLS: <T_OUTPUT> TYPE TABLE

Call Method CL_ALV_TABLE_CREATE->CREATE_DYNAMIC_TABLE

Exporting

IT_FIELDCATALOG = T_FIELDCAT

Importing

EP_TABLE = T_OUTPUT

ASSIGN T_OUTPUT->* TO <T_OUTPUT>.

**********************************************

TABLES: ekko, "PURCHASE DOCUMENT HEADER

ekpo, "PURCHASE DOCUMENT ITEM

eket, "SCHEDULE AGREEMENT SCHEDULE LINE

lfa1, "VENDOR MASTER (GENERAL SELECTION)

makt, "MATERIAL DESCRIPTIONS.

t685t, "Conditions: Types: Texts

taxcom. "Communications Work Area for Tax Calculation

  • ------------------------------------------------------------------------

  • INTERNAL TABLES

  • ------------------------------------------------------------------------

DATA: BEGIN OF i_vat OCCURS 0,

bukrs LIKE ekko-bukrs, "COMPANY CODE

waers LIKE ekko-waers, "CURRENCY KEY

bedat LIKE ekko-bedat, "PURCHASING DOCUMENT DATE

ebeln LIKE ekpo-ebeln, "PURCHASE ORDER DOCUMENT NO

ebelp LIKE ekpo-ebelp, "ITEM NUMBER OF PURCHASING DOCUMENT," LINE ITEM

werks LIKE ekpo-werks, "PLANT

lifnr LIKE ekko-lifnr, "VENDOR

name1 LIKE lfa1-name1, "VENDOR NAME

matnr LIKE ekpo-matnr, "MATERIAL

mtart LIKE ekpo-mtart, "MATERIAL TYPE

matkl LIKE ekpo-matkl, "MATERIAL GROUP

maktx LIKE makt-maktx, "MATERIAL DESCRIPTON

menge LIKE ekpo-menge, "ORDER QUANTITY

meins LIKE ekpo-meins, "UNIT OF MEASURE

mwskz LIKE ekpo-mwskz, "TAX ON SALES PURCHASE CODE

netpr LIKE ekpo-netpr, "UNIT RATE

netwr LIKE ekpo-netwr, "NETORDER VALUE IN PO CURRENCY

eindt LIKE eket-eindt, "DELIVERY DATE

baval1 LIKE komv-kwert, "BASE VALUE

baval2 LIKE komv-kwert, "EXCISE

baval3 LIKE komv-kwert, "ECESS

baval4 LIKE komv-kwert, "CONTROL SALES TAX

baval5 LIKE komv-kwert, "LOCAL SALES TAX

baval6 LIKE komv-kwert, "VALUE ADDED TAX

baval7 LIKE komv-kwert, "BASE VALUE

baval8 LIKE komv-kwert, "EXCISE

baval9 LIKE komv-kwert, "ECESS

baval10 LIKE komv-kwert, "CONTROL SALES TAX

END OF i_vat.

  • DATA: i_komv LIKE komv OCCURS 0 WITH HEADER LINE.

*----


  • INTERNAL TABLE FOR TEXTCODE AND CONDITION TYPE

*----


DATA: BEGIN OF i_tcode OCCURS 0,

ebeln LIKE ekko-ebeln, "PURCHASING DOCUMENT NO

ebelp LIKE ekpo-ebelp, "ITEM NUMBER OF PURCHASING DOCUMENT

kschl LIKE t685t-kschl, "CONDITION TYPE

kwert LIKE komv-kwert, "CONDITION VALUE

END OF i_tcode.

*----


  • INTERNAL TABLE FOR UNIQUE TEXTCODE AND THEIR SHORT DESCRIPTION (TEXT)

*----


DATA: BEGIN OF i_tcode1 OCCURS 0,

kschl LIKE komv-kschl,

vtext LIKE t685t-vtext,

text(10) TYPE c,

END OF i_tcode1.

DATA: count1(2),

mystring TYPE string,

fld_name(10),

text1(10).

DATA: alv_fieldname(30) VALUE 'BAVAL'.

FIELD-SYMBOLS: <fs_value> TYPE ANY.

DATA: i_itaxcom LIKE taxcom OCCURS 0 WITH HEADER LINE.

DATA: i_otaxcom LIKE komv OCCURS 0 WITH HEADER LINE.

  • **********************OBJECTS FOR ALV ************************

DATA: ok_code LIKE sy-ucomm, "FOR USER OKCODE

g_container TYPE scrfname VALUE 'CONTAINER', "VARIABLE NAME DECLARED FOR CONATINER

grid1 TYPE REF TO cl_gui_alv_grid, "TYPE FOR GRID

g_custom_container TYPE REF TO cl_gui_custom_container. "OBJECT FOR CONATINER

  • *********************STRUCTURES FOR ALV***********************

DATA: gs_layout TYPE lvc_s_layo, "FOR LAYOUT

gt_sort TYPE lvc_t_sort, "TO SORT FOR

gt_fieldcatalog TYPE lvc_t_fcat. "FOR FIELD CATALOG

  • ****************************************************************

  • INITIALIZATION

  • ****************************************************************

INITIALIZATION.

REFRESH i_vat, I_TCODE,I_TCODE1.

  • --------------------------------------------------------------------------------

  • SELECTION SCREEEN

  • --------------------------------------------------------------------------------

SELECTION-SCREEN: BEGIN OF BLOCK p_vat WITH FRAME TITLE text-001.

SELECT-OPTIONS : s_werks FOR ekpo-werks,

s_bsart FOR ekko-bsart,

s_ebeln FOR ekko-ebeln,

s_ekgrp FOR ekko-ekgrp,

s_bedat FOR ekko-bedat,

s_eindt FOR eket-eindt,

s_mtart FOR ekpo-mtart,

s_matkl FOR ekpo-matkl,

s_matnr FOR ekpo-matnr,

s_lifnr FOR ekko-lifnr.

SELECTION-SCREEN :END OF BLOCK p_vat.

  • --------------------------------------------------------------------------------------

  • GET RQUIRED DATA INTO INTERNAL TABLE

  • --------------------------------------------------------------------------------------

START-OF-SELECTION.

SELECT ekpo~ebeln

ekpo~ebelp

ekpo~werks

ekpo~matnr

ekpo~matkl

ekpo~meins

ekpo~mwskz

ekpo~netwr

ekpo~mtart

ekko~bukrs

ekko~waers

ekko~bedat

ekko~lifnr

ekpo~menge

ekpo~netpr

lfa1~name1

makt~maktx

INTO CORRESPONDING FIELDS OF TABLE i_vat

FROM ekko

INNER JOIN ekpo ON

ekko~ebeln = ekpo~ebeln

INNER JOIN makt ON

ekpo~matnr = makt~matnr

AND makt~spras = sy-langu

INNER JOIN lfa1 ON

ekko~lifnr = lfa1~lifnr

INNER JOIN eket ON

ekpo~ebeln = eket~ebeln

AND ekpo~ebelp = eket~ebelp

WHERE ekpo~werks IN s_werks

AND ekko~ebeln IN s_ebeln

AND ekko~bsart IN s_bsart

AND ekko~ekgrp IN s_ekgrp

AND ekko~lifnr IN s_lifnr

AND ekko~bedat IN s_bedat

AND ekpo~matnr IN s_matnr

AND ekpo~mtart IN s_mtart

AND ekpo~matkl IN s_matkl

AND eket~eindt IN s_eindt.

*

IF sy-dbcnt = 0.

MESSAGE 'NO RESULT TO SHOW' TYPE 'I'.

EXIT.

ENDIF. "SY-DBCNT = 0

  • ------------------------------------------------------------------

  • --------------------------------------------------------------------

  • defining input data which has to be passed to function module

LOOP AT i_vat.

IF i_vat-mwskz IS NOT INITIAL.

  • 'CALCULATE_TAX_ITEM'

i_itaxcom-bukrs = i_vat-bukrs.

i_itaxcom-waers = i_vat-waers.

i_itaxcom-kposn = i_vat-ebelp.

i_itaxcom-mwskz = i_vat-mwskz.

i_itaxcom-wrbtr = i_vat-netwr.

i_itaxcom-matnr = i_vat-matnr.

i_itaxcom-mglme = i_vat-menge.

i_itaxcom-werks = i_vat-werks.

i_itaxcom-bldat = i_vat-bedat.

i_itaxcom-budat = i_vat-bedat.

i_itaxcom-lifnr = i_vat-lifnr.

  • i_itaxcom-shkzg = 'H'.

i_itaxcom-xmwst = 'X'.

i_itaxcom-matkl = i_vat-matkl.

i_itaxcom-meins = i_vat-meins.

i_itaxcom-mtart = i_vat-mtart.

  • i_itaxcom-land1 = 'IN'.

  • i_itaxcom-ebeln = zxekko-ebeln.

  • i_itaxcom-ebelp = <fs>-ebelp.

  • *end of correction 20.10.2004

REFRESH i_otaxcom.

CALL FUNCTION 'CALCULATE_TAX_ITEM'

EXPORTING

  • ANZAHLUNG = ' '

  • DIALOG = ' '

  • DISPLAY_ONLY = ' '

  • INKLUSIVE = ' '

  • I_ANWTYP = ' '

  • I_DMBTR = '0'

  • I_MWSTS = '0'

i_taxcom = i_itaxcom

  • PRUEFEN = ' '

  • RESET = ' '

  • IMPORTING

  • E_NAVFW =

  • E_TAXCOM = otab

  • E_XSTVR =

  • NAV_ANTEIL =

TABLES

t_xkomv = i_otaxcom

EXCEPTIONS

mwskz_not_defined = 1

mwskz_not_found = 2

mwskz_not_valid = 3

steuerbetrag_falsch = 4

country_not_found = 5

OTHERS = 6

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

**

LOOP AT i_otaxcom WHERE kposn = i_vat-ebelp.

READ TABLE i_tcode WITH KEY ebeln = i_vat-ebeln

ebelp = i_vat-ebelp

kschl = i_otaxcom-kschl.

IF sy-subrc <> 0.

IF i_otaxcom-kwert <> 0.

i_tcode-kschl = i_otaxcom-kschl.

i_tcode-ebeln = i_vat-ebeln. "MESSAGE -


USE COLLECT STATEMENT

i_tcode-ebelp = i_vat-ebelp.

i_tcode-kschl = i_otaxcom-kschl.

i_tcode-kwert = i_otaxcom-kwert.

APPEND i_tcode.

ENDIF.

ENDIF.

ENDLOOP.

ENDIF.

ENDLOOP.

LOOP AT i_vat.

count1 = 1.

LOOP AT i_tcode WHERE ebeln = i_vat-ebeln AND ebelp = i_vat-ebelp.

alv_fieldname+5 = count1.

ASSIGN COMPONENT alv_fieldname OF STRUCTURE i_vat

TO <fs_value>.

IF sy-subrc EQ 0.

<fs_value> = i_tcode-kwert.

ENDIF.

count1 = count1 + 1.

MODIFY i_vat.

ENDLOOP.

ENDLOOP.

SELECT DISTINCT kschl

vtext

INTO CORRESPONDING FIELDS OF TABLE i_tcode1

FROM t685t

FOR ALL ENTRIES IN i_tcode

WHERE kschl = i_tcode-kschl AND

kappl = 'TX' AND

spras = sy-langu.

count1 = 1..

LOOP AT i_tcode1.

READ TABLE i_tcode WITH KEY kschl = i_tcode1-kschl .

IF sy-subrc = 0.

CONCATENATE 'BAVAL' count1 INTO fld_name.

i_tcode1-text = fld_name.

MODIFY i_tcode1.

count1 = count1 + 1.

ENDIF.

ENDLOOP.

FREE: I_VAT, I_TCODE,I_TCODE1.

PERFORM sort_build USING gt_sort[].

PERFORM layout_init USING gs_layout.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'EBELN' 'C' 'Documnet No'.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'EBELP' 'C' 'Line Item'.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'WERKS' 'C' 'Plant'.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'LIFNR' 'C' 'Vendor'.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NAME1' 'C' 'Vendor Name '.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'MATNR' 'C' 'Material'.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'MAKTX' 'C' 'Material Description'.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'MENGE' 'QUAN' 'Order Quantity '.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NETPR' 'CURR' 'Price Rate'.

LOOP AT i_tcode1.

PERFORM fieldcatalog_init USING gt_fieldcatalog[] i_tcode1-text 'QUAN' i_tcode1-vtext.

ENDLOOP.

CALL SCREEN 100.

  • &---------------------------------------------------------------------*

  • & Module PBO_0100 OUTPUT

  • &---------------------------------------------------------------------*

  • text

  • ----------------------------------------------------------------------*

MODULE pbo_0100 OUTPUT.

SET PF-STATUS 'ALV'.

  • SET TITLEBAR '001'.

IF g_custom_container IS INITIAL.

CREATE OBJECT g_custom_container

EXPORTING container_name = g_container.

CREATE OBJECT grid1

EXPORTING i_parent = g_custom_container.

CALL METHOD grid1->set_table_for_first_display

EXPORTING

is_layout = gs_layout

CHANGING

it_outtab = i_vat[]

it_fieldcatalog = gt_fieldcatalog

it_sort = gt_sort.

ENDIF.

ENDMODULE. " PBO_0100 OUTPUT

  • &---------------------------------------------------------------------*

  • & Module PAI_0100 INPUT

  • &---------------------------------------------------------------------*

  • text

  • ----------------------------------------------------------------------*

MODULE pai_0100 INPUT.

CALL METHOD cl_gui_cfw=>dispatch.

CASE sy-ucomm.

WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.

LEAVE TO SCREEN 0.

ENDCASE.

ENDMODULE. " PAI_0100 INPUT

  • &--------------------------------------------------------------------*

  • & Form fieldcatalog_init

  • &--------------------------------------------------------------------*

  • text

  • ---------------------------------------------------------------------*

  • -->LT_FIELDCATtext

  • -->VALUE(FIELDtextE)

  • -->VALUE(FIELDtextE)

  • -->VALUE(FIELDtextT)

  • ---------------------------------------------------------------------*

FORM fieldcatalog_init USING lt_fieldcatalog TYPE lvc_t_fcat

value(field_name) value(field_type) value(field_text).

DATA: ls_fieldcatalog TYPE lvc_s_fcat.

CLEAR ls_fieldcatalog.

ls_fieldcatalog-fieldname = field_name.

ls_fieldcatalog-datatype = field_type.

ls_fieldcatalog-reptext = field_text.

ls_fieldcatalog-coltext = field_text.

ls_fieldcatalog-seltext = field_text.

ls_fieldcatalog-tooltip = field_text.

  • IF is_fieldcatalog-fieldname = 'LIFNR'.

  • is_fieldcatalog-no_zero = 'X'.

  • ENDIF.

IF ls_fieldcatalog-fieldname = 'LIFNR' OR ls_fieldcatalog-fieldname = 'MATNR'.

ls_fieldcatalog-no_zero = 'X'.

ENDIF.

APPEND ls_fieldcatalog TO lt_fieldcatalog.

ENDFORM. "fieldcatalog_init

5 REPLIES 5
Read only

Former Member
0 Likes
782

Farukh,

What is the problem you are facing?

Regards,

Ravi

Read only

0 Likes
782

i got the output ,but my pl says this should with dynamic table .i think its something like this,

1. Create your field catalog either manually or automatically using the function module, LVC_FIELDCATALOG_MERGE. Add more rows to the field catalog table (T_FIELDCAT) at run time.

2. Use the field catalog to create a table dynamically using the method below.

DATA: T_OUTPUT TYPE REF TO DATA

FIELD-SYMBOLS: <T_OUTPUT> TYPE TABLE

Call Method CL_ALV_TABLE_CREATE->CREATE_DYNAMIC_TABLE

Exporting

IT_FIELDCATALOG = T_FIELDCAT

Importing

EP_TABLE = T_OUTPUT

ASSIGN T_OUTPUT->* TO <T_OUTPUT>.

i have to display some fields dynamic , that fields are of taxes ,lst cst vat and etc .so for a purchase order number if there is lst then only lst field should be diplay ( there is no hardcodeing) as 'lst'.if it has lst and cst then two should be displayed in output .... dynamically.

Read only

0 Likes
782

Hi Farukh,

To do this first populate the fieldcatalog as you are

doing now.

After that check conditions and based on that you

populate the dynamic , that fields are of taxes ,lst

cst vat and etc .. like below.

In my case I wil get field names from the itab.


  DATA: d_ref TYPE REF TO data ,
d_ref2 TYPE REF TO data ,
d_ref3 type ref to data,
i_alv_cat TYPE TABLE OF lvc_s_fcat ,
ls_alv_cat LIKE LINE OF i_alv_cat .

  LOOP AT i_rfc .
    ls_alv_cat-fieldname = i_rfc-SYST.
    ls_alv_cat-inttype    = 'CHAR'.
    ls_alv_cat-coltext    = i_rfc-SYST.
*   ls_fieldcat-decimals_o   = '2'.
    ls_alv_cat-outputlen = 15.
    ls_alv_cat-ICON      = 'X'.
    ls_alv_cat-TOOLTIP = 'Ikone_langgggggggggg'.
    ls_alv_cat-SELTEXT = 'Ikone_mittellll'.

    APPEND ls_alv_cat TO i_alv_cat.

*  ls_alv_cat-fieldname = i_rfc-SYST.
*  ls_alv_cat-ref_table = 'YHPRFCD'.
*  ls_alv_cat-ref_field = 'SYST'.
*  APPEND ls_alv_cat TO i_alv_cat.
ENDLOOP.
  

Then call the below method:


FIELD-SYMBOLS : <F_FS> TYPE table,
<F_FS1> TYPE TABLE,
<F_FS2> TYPE ANY,
<F_FS3> TYPE TABLE,
<f_fS4> type any.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING it_fieldcatalog = i_alv_cat
IMPORTING ep_table = d_ref .
ASSIGN d_ref->* TO <F_FS>.

Tehn populate the dynamic table see my sample code:


perform fill_table.
*&---------------------------------------------------------------------*
*&      Form  fill_table
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fill_table.
  data: l_row type sy-index.
  field-symbols: <ls_table>.
  field-symbols: <l_field>.

  assign local copy of initial line of <f_fs> to <ls_table>.

*  assign <f_fs> to <ls_table>.
*  sort i_final.
  clear v_lines.
loop at i_final.
*  at new pname.
*    read table i_final index sy-tabix.
    v_lines = v_lines + 1.
*  endat.

   at new pname.
     read table i_final index sy-tabix.
    assign component  v_lines of structure
        <ls_table> to <l_field>.
          concatenate i_final-pname 'Q' 'Pname' 'Q' into <l_field>.
        v_lines = v_lines + 1.

   endat.

*         assign i_final-pname to <l_field>.
*  endat.
   assign component  v_lines of structure
        <ls_table> to <l_field>.
*    assign i_final-flag to <l_field>.
   if i_final-flag = 'E'.
     CONCATENATE '@08Q' 'Equal' '@' INTO <l_field>.
*     CONCATENATE ICON_GREEN_LIGHT 'Equal' '@' INTO <l_field>.
*     <l_field> = ICON_GREEN_LIGHT.
   elseif i_final-flag = 'N'.
     CONCATENATE '@0AQ' 'Not Found' '@' INTO <l_field>.
*     <l_field> = ICON_GREEN_LIGHT.
.  elseif i_final-flag = 'X'.
*     CONCATENATE ICON_YELLOW_LIGHT 'Not Equal' '@' INTO <l_field>.
      CONCATENATE '@09Q' 'Not Equal' '@' INTO <l_field>.
*     <l_field> = i_final-flag.
   endif.

  at end of pname.
    append <ls_table> to <f_fs>.
    clear v_lines.
  endat.
endloop.
*enddo.

ENDFORM.                    " fill_table

Then in the call screen PBO do teh below


  set pf-status 'MAIN100'.
  if g_custom_container is initial.
    create object g_custom_container
           exporting container_name = g_container.
    create object grid1
           exporting i_parent = g_custom_container.
    perform build_catalog.

    call method grid1->set_table_for_first_display
         changing it_fieldcatalog = i_alv_cat
                  it_outtab        = <f_fs>.
  endif.

Hope this will help you. Let m eknow still if you are facing any problem.

Thanks&Regards,

Siri.

Read only

0 Likes
782

Farukh,

If you are trying to add more fields to the table once it is created, you cannot do the same.

Before creating the table, you add all the possible fields to the field catalog and create a table using that with the code you have written.

Regards,

Ravi

Read only

Former Member
0 Likes
782

solved