‎2005 Dec 23 5:13 AM
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
‎2005 Dec 23 5:17 AM
‎2005 Dec 23 9:29 AM
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.
‎2005 Dec 23 9:48 AM
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.
‎2005 Dec 23 9:52 AM
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
‎2007 Apr 03 7:41 AM