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

error in ALV grid

Former Member
0 Likes
1,690

Hi ALV masters,

Plz help me ..

I have an ALV grid report where i have the data in my final table t_final.

now i'm trying to populate the fieldcat using FM reuse_alv_fieldcatalog_merge but its not at all getting populated.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

I_PROGRAM_NAME = l_repid

I_INTERNAL_TABNAME = 'T_Final'

I_INCLNAME = l_repid

CHANGING

CT_FIELDCAT = T_FIELDCAT[]

EXCEPTIONS

INCONSISTENT_INTERFACE = 1

PROGRAM_ERROR = 2

OTHERS = 3.

Please help me and if possibl try to send som sample code also.

Thanks in advance..

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,655

Check it its working fine for me or send your whole code

report ztest_34331_merge.

type-pools : slis.

tables : qals.

data : begin of t_out occurs 0,

matnr like qals-matnr, "MATERIAL

werk like qals-werk, "PLANT

art like qals-art, "Inspaction Lot Type

objnr like qals-objnr, "Object Number

end of t_out.

data : i_fieldcat type slis_t_fieldcat_alv with header line,

i_layout type slis_layout_alv,

gs_layout type lvc_s_layo,

g_repid type sy-repid,

ls_fieldcat type slis_fieldcat_alv.

select-options:s_prflos for qals-prueflos.

initialization.

g_repid = sy-repid.

i_layout-zebra = 'X'.

i_layout-colwidth_optimize = 'X'.

start-of-selection.

perform fetch_data.

end-of-selection.

perform fill_fieldcat.

perform display_alv.

&----


*& Form FETCH_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form fetch_data .

select matnr werk art objnr

from qals

into table t_out

where prueflos in s_prflos.

endform. " FETCH_DATA

&----


*& Form FILL_FIELDCAT

&----


  • text

----


form fill_fieldcat .

refresh i_fieldcat[].

call function 'REUSE_ALV_FIELDCATALOG_MERGE'

exporting

i_program_name = g_repid

i_internal_tabname = 'T_OUT'

i_inclname = g_repid

changing

ct_fieldcat = i_fieldcat[]

exceptions

inconsistent_interface = 1

program_error = 2

others = 3.

endform. " FILL_FIELDCAT

&----


*& Form display_alv

&----


  • text

----


form display_alv .

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

i_callback_program = g_repid

is_layout = i_layout

it_fieldcat = i_fieldcat[]

tables

t_outtab = t_out

exceptions

program_error = 1

others = 2.

endform. " display_alv

Hi ALV masters,

Plz help me ..

I have an ALV grid report where i have the data in my final table t_final.

now i'm trying to populate the fieldcat using FM reuse_alv_fieldcatalog_merge but its not at all getting populated.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

I_PROGRAM_NAME = l_repid

I_INTERNAL_TABNAME = 'T_Final'

I_INCLNAME = l_repid

CHANGING

CT_FIELDCAT = T_FIELDCAT[]

EXCEPTIONS

INCONSISTENT_INTERFACE = 1

PROGRAM_ERROR = 2

OTHERS = 3.

Please help me and if possibl try to send som sample code also.

Thanks in advance..

14 REPLIES 14
Read only

Former Member
0 Likes
1,655

Follow this

*For Function module ALV (report)

 DATA: it_fieldcat  TYPE slis_t_fieldcat_alv,
        wa_fieldcat   LIKE LINE OF it_fieldcat.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'T_FINAL'  (caps)
    CHANGING
      ct_fieldcat            = t_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

Refer this

http://www.sapdevelopment.co.uk/reporting/alv/alv_variousfcat.htm

this will solve ur problem, reward points if this solves.

Problem solved or not, reward and close the thread. else please revert back with queries.

Read only

Former Member
0 Likes
1,656

Check it its working fine for me or send your whole code

report ztest_34331_merge.

type-pools : slis.

tables : qals.

data : begin of t_out occurs 0,

matnr like qals-matnr, "MATERIAL

werk like qals-werk, "PLANT

art like qals-art, "Inspaction Lot Type

objnr like qals-objnr, "Object Number

end of t_out.

data : i_fieldcat type slis_t_fieldcat_alv with header line,

i_layout type slis_layout_alv,

gs_layout type lvc_s_layo,

g_repid type sy-repid,

ls_fieldcat type slis_fieldcat_alv.

select-options:s_prflos for qals-prueflos.

initialization.

g_repid = sy-repid.

i_layout-zebra = 'X'.

i_layout-colwidth_optimize = 'X'.

start-of-selection.

perform fetch_data.

end-of-selection.

perform fill_fieldcat.

perform display_alv.

&----


*& Form FETCH_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form fetch_data .

select matnr werk art objnr

from qals

into table t_out

where prueflos in s_prflos.

endform. " FETCH_DATA

&----


*& Form FILL_FIELDCAT

&----


  • text

----


form fill_fieldcat .

refresh i_fieldcat[].

call function 'REUSE_ALV_FIELDCATALOG_MERGE'

exporting

i_program_name = g_repid

i_internal_tabname = 'T_OUT'

i_inclname = g_repid

changing

ct_fieldcat = i_fieldcat[]

exceptions

inconsistent_interface = 1

program_error = 2

others = 3.

endform. " FILL_FIELDCAT

&----


*& Form display_alv

&----


  • text

----


form display_alv .

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

i_callback_program = g_repid

is_layout = i_layout

it_fieldcat = i_fieldcat[]

tables

t_outtab = t_out

exceptions

program_error = 1

others = 2.

endform. " display_alv

Read only

0 Likes
1,655

Hi Mukesh,

this is my code.

plz tell where i'm going rong..

&----


*& Report ZMMR_CHANGES *

*& *

&----


  • Title : Material Master: Display Changes *

  • Description : This ABAP report will collectively list all material *

  • master changes to the fields specified in the selection*

  • criteria. *

  • Request No : SRDK922644 *

  • Author : Praveen Reddy *

  • Created on : 14-FEB-2007 *

  • *

----


REPORT ZMMR_CHANGES

NO STANDARD PAGE HEADING

message-id ZSPR.

TYPE-POOLS : SLIS.

TABLES : CDHDR , " Change document header

CDPOS , " Change document item

MARAV , " View Table for Logical DB MGM

MARC , " Plant Data for Material

MVKE . " Sales Data for Material

SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001.

SELECTION-SCREEN BEGIN OF BLOCK GENERAL WITH FRAME TITLE TEXT-002.

SELECT-OPTIONS :

S_OBJCLS FOR CDHDR-OBJECTCLAS ,

S_MATNR FOR CDHDR-OBJECTID ,

S_WERKS FOR MARC-WERKS ,

S_VKORG FOR MVKE-VKORG ,

S_VTWEG FOR MVKE-VTWEG ,

S_TABNAM FOR CDPOS-TABNAME ,

S_FNAME FOR CDPOS-FNAME ,

S_CHGIND FOR CDPOS-CHNGIND ,

S_DATE FOR CDHDR-UDATE ,

S_USER FOR CDHDR-USERNAME .

SELECTION-SCREEN END OF BLOCK GENERAL.

SELECTION-SCREEN END OF BLOCK A.

*Data : G_WERKS LIKE MARC-WERKS ,

  • G_VKORG LIKE MVKE-VKORG ,

  • G_VTWEG LIKE MVKE-VTWEG ,

  • G_DESC LIKE MARAV-MAKTX .

TYPES : BEGIN OF TY_FOR_DISP ,

OBJCLASS LIKE CDHDR-OBJECTCLAS ,

OBJID LIKE CDHDR-OBJECTID ,

WERKS LIKE MARC-WERKS ,

VKORG LIKE MVKE-VKORG ,

VTWEG LIKE MVKE-VTWEG ,

DESC LIKE MARAV-MAKTX ,

TABNAME LIKE CDPOS-TABNAME ,

FNAME LIKE CDPOS-FNAME ,

CHNGIND LIKE CDPOS-CHNGIND ,

UDATE LIKE CDHDR-UDATE ,

USERNAME LIKE CDHDR-USERNAME ,

VALUE_OLD LIKE CDPOS-VALUE_OLD ,

VALUE_NEW LIKE CDPOS-VALUE_NEW ,

END OF TY_FOR_DISP .

TYPES : BEGIN OF TY_CDHDR,

OBJCLASS LIKE CDHDR-OBJECTCLAS ,

OBJID LIKE CDHDR-OBJECTID ,

  • CHNGIND LIKE CDPOS-CHNGIND ,

CHANGENR LIKE CDHDR-CHANGENR ,

UDATE LIKE CDHDR-UDATE ,

USERNAME LIKE CDHDR-USERNAME ,

  • VALUE_OLD LIKE CDPOS-VALUE_OLD ,

  • VALUE_NEW LIKE CDPOS-VALUE_NEW ,

END OF TY_CDHDR .

TYPES : BEGIN OF TY_CDPOS,

TABNAME LIKE CDPOS-TABNAME ,

FNAME LIKE CDPOS-FNAME ,

CHANGENR LIKE CDHDR-CHANGENR ,

CHNGIND LIKE CDPOS-CHNGIND ,

TABKEY LIKE CDPOS-TABKEY ,

FIELDTEXT LIKE DFIES-FIELDTEXT,

  • UDATE LIKE CDPOS-UDATE ,

  • USERNAME LIKE CDPOS-USERNAME ,

VALUE_OLD LIKE CDPOS-VALUE_OLD ,

VALUE_NEW LIKE CDPOS-VALUE_NEW ,

END OF TY_CDPOS .

DATA : T_FOR_DISP TYPE STANDARD TABLE OF TY_FOR_DISP

WITH HEADER LINE ,

T_CDHDR TYPE STANDARD TABLE OF TY_CDHDR

WITH HEADER LINE ,

T_CDPOS TYPE STANDARD TABLE OF TY_CDPOS

WITH HEADER LINE .

DATA : G_LANGU LIKE SY-LANGU,

G_TABIX LIKE SY-TABIX,

G_DATE LIKE SY-DATUM.

DATA : G_WERKS LIKE MARC-WERKS ,

G_VKORG LIKE MVKE-VKORG ,

G_VTWEG LIKE MVKE-VTWEG ,

G_DESC LIKE MARAV-MAKTX .

*------ALV Grid Field Catalog Fields

DATA: T_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,

T_FIELDCAT_H LIKE T_FIELDCAT WITH HEADER LINE.

*------End

CONSTANTS : C_MATERIAL(10) VALUE 'MATERIAL' ,

C_OBJCLASS(10) VALUE 'OBJCLASS' ,

C_OBJECTID(8) VALUE 'OBJID' ,

C_WERKS(5) VALUE 'WERKS' ,

C_VKORG(5) VALUE 'VKORG' ,

C_VTWEG(5) VALUE 'VTWEG' ,

C_DESC(4) VALUE 'DESC' ,

C_TABNAME(7) VALUE 'TABNAME' ,

C_FNAME(5) VALUE 'FNAME' ,

C_CHNGIND(7) VALUE 'CHNGIND' ,

C_UDATE(5) VALUE 'UDATE' ,

C_USERNAME(8) VALUE 'USERNAME' ,

C_VALUE_OLD(9) VALUE 'VALUE_OLD' ,

C_VALUE_NEW(9) VALUE 'VALUE_NEW' .

*CONSTANTS: C_TABNAM_FOR_ALV_FM TYPE SLIS_TABNAME VALUE 'T_FOR_DISP'.

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

                        • INITIALIZATION *****************

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

INITIALIZATION.

CLEAR: T_CDHDR,

T_CDPOS,

T_FIELDCAT,

T_FIELDCAT_H,

T_FOR_DISP.

REFRESH:T_CDHDR,

T_CDPOS.

CLEAR : CDHDR, " Change document header

CDPOS. " Change document items

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

****START-OF-SELECTION.

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

START-OF-SELECTION.

*-FETCHING DETAILS of Changes done

PERFORM SUB_GET_DETAILS.

  • Get the field description.

  • PERFORM SUB_CALL_DDIF_FIELDINFO_GET.

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

****END-OF-SELECTION.

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

END-OF-SELECTION.

*--DISPLAYING DATA IN ALV

PERFORM SUB_DISPLAY_ALV.

&----


*& Form SUB_GET_DETAILS

&----


  • This subrouting is used to get Final output which will shown in

  • ALV Grid From Table CDPOS.

----


FORM SUB_GET_DETAILS.

SELECT OBJECTCLAS

OBJECTID

CHANGENR

UDATE

USERNAME

INTO TABLE T_CDHDR

FROM CDHDR

WHERE OBJECTCLAS IN S_OBJCLS

AND OBJECTID IN S_MATNR

  • AND TABNAME IN S_TABNAM

  • AND FNAME IN S_FNAME

  • AND CHNGIND IN S_CHGIND

  • AND UDATE IN S_DATE

AND UDATE IN S_DATE

AND USERNAME IN S_USER .

IF SY-SUBRC <> 0.

WRITE:/ TEXT-003.

ENDIF.

LOOP AT T_CDHDR.

CLEAR T_FOR_DISP.

IF T_CDHDR-OBJCLASS = C_MATERIAL.

SELECT SINGLE MAKTX

INTO G_DESC

FROM MARAV

WHERE MATNR = T_CDHDR-OBJID+0(18)

AND SPRAS = SY-LANGU.

ENDIF.

T_FOR_DISP-DESC = G_DESC.

CLEAR G_DESC.

  • CLEAR T_FOR_DISP.

T_FOR_DISP-OBJCLASS = T_CDHDR-OBJCLASS .

T_FOR_DISP-OBJID = T_CDHDR-OBJID .

T_FOR_DISP-UDATE = T_CDHDR-UDATE .

T_FOR_DISP-USERNAME = T_CDHDR-USERNAME .

*ENDIF.

  • APPEND T_FOR_DISP.

  • ENDLOOP.

*ENDIF.

SELECT

TABNAME

FNAME

CHANGENR

CHNGIND

TABKEY

  • UDATE

  • USERNAME

VALUE_OLD

VALUE_NEW

FROM CDPOS

INTO TABLE T_CDPOS

FOR ALL ENTRIES IN T_CDHDR

  • CDHDRCHANGENR = CDPOSCHANGENR

WHERE

CHANGENR EQ T_CDHDR-CHANGENR

AND TABNAME IN S_TABNAM

AND FNAME IN S_FNAME

AND CHNGIND IN S_CHGIND .

  • AND UDATE IN S_DATE.

  • AND OBJECTID IN S_DATE

  • AND USERNAME IN S_USER .

IF SY-SUBRC <> 0.

WRITE:/ TEXT-003.

ENDIF.

*CLEAR T_FOR_DISP.

READ TABLE T_CDPOS

WITH KEY CHANGENR = T_CDHDR-CHANGENR.

CLEAR : G_WERKS,

G_VKORG,

G_VTWEG.

  • G_DESC .

IF T_CDPOS-TABNAME = 'MARC'.

G_WERKS = T_CDPOS-TABKEY+21(4).

ENDIF.

CHECK G_WERKS IN S_WERKS.

IF SY-SUBRC = 0.

T_FOR_DISP-WERKS = G_WERKS.

ENDIF.

IF T_CDPOS-TABNAME = 'MVKE'.

G_VKORG = T_CDPOS-TABKEY+21(4).

ENDIF.

CHECK G_VKORG IN S_VKORG.

T_FOR_DISP-VKORG = G_VKORG.

G_VTWEG = T_CDPOS-TABKEY+25(2).

CHECK G_VTWEG IN S_VTWEG.

T_FOR_DISP-VTWEG = G_VTWEG.

T_FOR_DISP-TABNAME = T_CDPOS-TABNAME.

T_FOR_DISP-FNAME = T_CDPOS-FNAME.

T_FOR_DISP-CHNGIND = T_CDPOS-CHNGIND.

T_FOR_DISP-VALUE_OLD = T_CDPOS-VALUE_OLD.

T_FOR_DISP-VALUE_NEW = T_CDPOS-VALUE_NEW.

APPEND T_FOR_DISP.

  • ENDLOOP.

ENDLOOP.

CLEAR T_FOR_DISP.

ENDFORM. " SUB_GET_DETAILS

&----


*& Form SUB_DISPLAY_ALV

&----


  • This Subroutine is used to display data to ALV Grid from internal *

  • tables T_CDHDR & T_CDPOS. which is filled in subroutine *

  • SUB_GET_DETAILS *

----


FORM SUB_DISPLAY_ALV .

BREAK-POINT.

DATA: l_layout type slis_layout_alv,

l_title type lvc_title,

l_repid like sy-repid.

l_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

I_PROGRAM_NAME = l_repid

I_INTERNAL_TABNAME = 'TY_FOR_DISP'

I_INCLNAME = l_repid

CHANGING

CT_FIELDCAT = T_FIELDCAT[]

EXCEPTIONS

INCONSISTENT_INTERFACE = 1

PROGRAM_ERROR = 2

OTHERS = 3.

IF SY-SUBRC <> 0.

WRITE:/ 'ERROR IN CALLING ALV FM'.

ENDIF.

*----Change Field Heading We move All field data from T_FIELDCAT To

*----another Internal table with header line namely T_FIELDCAT_H

*CLEAR T_FIELDCAT_H[].

  • REFRESH T_FIELDCAT_H[].

BREAK-POINT.

MOVE T_FIELDCAT[] TO T_FIELDCAT_H[].

  • CLEAR G_TABIX.

LOOP AT T_FIELDCAT_H.

  • G_TABIX = SY-TABIX.

CASE T_FIELDCAT_H-FIELDNAME.

WHEN C_OBJCLASS.

T_FIELDCAT_H-SELTEXT_L = TEXT-004.

T_FIELDCAT_H-SELTEXT_M = TEXT-004.

T_FIELDCAT_H-SELTEXT_S = TEXT-004.

  • T_FIELDCAT_H-OUTPUTLEN = 15.

WHEN C_OBJECTID.

T_FIELDCAT_H-SELTEXT_L = TEXT-005.

T_FIELDCAT_H-SELTEXT_M = TEXT-005.

T_FIELDCAT_H-SELTEXT_S = TEXT-005.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_DESC.

T_FIELDCAT_H-SELTEXT_L = TEXT-006.

T_FIELDCAT_H-SELTEXT_M = TEXT-006.

T_FIELDCAT_H-SELTEXT_S = TEXT-006.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_WERKS.

T_FIELDCAT_H-SELTEXT_L = TEXT-007.

T_FIELDCAT_H-SELTEXT_M = TEXT-007.

T_FIELDCAT_H-SELTEXT_S = TEXT-007.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_VKORG.

T_FIELDCAT_H-SELTEXT_L = TEXT-008.

T_FIELDCAT_H-SELTEXT_M = TEXT-008.

T_FIELDCAT_H-SELTEXT_S = TEXT-008.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_VTWEG.

T_FIELDCAT_H-SELTEXT_L = TEXT-009.

T_FIELDCAT_H-SELTEXT_M = TEXT-009.

T_FIELDCAT_H-SELTEXT_S = TEXT-009.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_TABNAME.

T_FIELDCAT_H-SELTEXT_L = TEXT-010.

T_FIELDCAT_H-SELTEXT_M = TEXT-010.

T_FIELDCAT_H-SELTEXT_S = TEXT-010.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_FNAME.

T_FIELDCAT_H-SELTEXT_L = TEXT-011.

T_FIELDCAT_H-SELTEXT_M = TEXT-011.

T_FIELDCAT_H-SELTEXT_S = TEXT-011.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_CHNGIND.

T_FIELDCAT_H-SELTEXT_L = TEXT-012.

T_FIELDCAT_H-SELTEXT_M = TEXT-012.

T_FIELDCAT_H-SELTEXT_S = TEXT-012.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_UDATE.

T_FIELDCAT_H-SELTEXT_L = TEXT-013.

T_FIELDCAT_H-SELTEXT_M = TEXT-013.

T_FIELDCAT_H-SELTEXT_S = TEXT-013.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_USERNAME.

T_FIELDCAT_H-SELTEXT_L = TEXT-014.

T_FIELDCAT_H-SELTEXT_M = TEXT-014.

T_FIELDCAT_H-SELTEXT_S = TEXT-014.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_VALUE_OLD.

T_FIELDCAT_H-SELTEXT_L = TEXT-015.

T_FIELDCAT_H-SELTEXT_M = TEXT-015.

T_FIELDCAT_H-SELTEXT_S = TEXT-015.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN C_VALUE_NEW.

T_FIELDCAT_H-SELTEXT_L = TEXT-016.

T_FIELDCAT_H-SELTEXT_M = TEXT-016.

T_FIELDCAT_H-SELTEXT_S = TEXT-016.

  • T_FIELDCAT_H-OUTPUTLEN = 20.

WHEN OTHERS.

CONTINUE.

ENDCASE.

MODIFY T_FIELDCAT_H.

  • CLEAR T_FIELDCAT_H.

ENDLOOP.

*BREAK-POINT.

MOVE T_FIELDCAT_H[] TO T_FIELDCAT[].

*----End

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

exporting

i_callback_program = l_repid

  • i_callback_pf_status_set = 'SET_STATUS'

  • i_callback_user_command = 'USER_COMMAND'

  • i_callback_top_of_page = 'TOP_OF_PAGE'

  • i_grid_title = l_title

  • is_layout = l_layout

it_fieldcat = t_fieldcat

  • i_save = 'A'

tables

t_outtab = T_FOR_DISP[]

exceptions

program_error = 1

others = 2.

  • IF SY-SUBRC <> 0.

  • WRITE:/ TEXT-017.

  • ENDIF.

ENDFORM. " SUB_DISPLAY_ALV

&----


*& Form TOP_OF_PAGE

&----


  • This subrouting is used to show heading to ALV Grid. This

  • subrouting is called from subrouting 'SUB_DISPLAY_ALV', Function

  • 'REUSE_ALV_GRID_DISPLAY' & export param 'i_callback_top_of_page'

----


*Form TOP_OF_PAGE.

*

  • DATA : L_HEADER TYPE SLIS_T_LISTHEADER,

  • L_HEADER_H TYPE SLIS_LISTHEADER.

*

    • DATA : L_FROMDAT(10) TYPE C,

    • L_TODATE(10) TYPE C.

*

*CONSTANTS : C_DOT(1) TYPE C VALUE '.',

  • C_L_HEADER_H_TYP(1) VALUE 'H'. "---ALV Grid Header Type

*

  • CLEAR : L_HEADER.

*

**--To Manage Date Format

    • CONCATENATE S_DATE-LOW+6(2)

    • C_DOT

    • S_DATE-LOW+4(2)

    • C_DOT

    • S_DATE-LOW+0(4)

    • INTO L_FROMDAT.

**

    • CONCATENATE S_DATE-HIGH+6(2)

    • C_DOT

    • S_DATE-HIGH+4(2)

    • C_DOT

    • S_DATE-HIGH+0(4)

    • INTO L_TODATE.

**---End

*

*

    • IF L_TODATE <> '00.00.0000'.

    • CONCATENATE 'Purchase Org:'(014)

    • S_VKORG-LOW

    • 'PO changes from'(015)

    • L_FROMDAT

    • 'To'(013)

    • L_TODATE

    • INTO L_HEADER_H-INFO SEPARATED BY SPACE.

**

    • ELSE.

**

  • G_DATE = SY-DATUM.

  • CONCATENATE 'CHANGES: '

  • G_DATE

  • INTO L_HEADER_H-INFO SEPARATED BY SPACE.

    • ENDIF.

*

    • Main report header

  • L_HEADER_H-TYP = C_L_HEADER_H_TYP.

  • APPEND L_HEADER_H TO L_HEADER.

*

  • CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

  • EXPORTING

  • IT_LIST_COMMENTARY = L_HEADER

  • I_LOGO = ''.

*

*ENDFORM. "TOP_OF_PAGE

Plz look into this and suggest me ..thanks a lot.

Read only

0 Likes
1,655

Hello,

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = l_repid

<b>I_INTERNAL_TABNAME = 'T_FOR_DISP'</b>

I_INCLNAME = l_repid
CHANGING
CT_FIELDCAT = T_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.

Let me knwo waht problem u r facing, already I have mentioned to change as above.

Read only

0 Likes
1,655

Hi,

right now i'm using the same logic.

If u didn't see the code i hav attached plz look into that and advice ..what i hav missed..

Thanx a lot..

Read only

0 Likes
1,655

Instead of types, try changing ur code to occurs 0.

DATA : BEGIN OF T_FOR_DISP OCCURS 0,

OBJCLASS LIKE CDHDR-OBJECTCLAS ,

OBJID LIKE CDHDR-OBJECTID ,

WERKS LIKE MARC-WERKS ,

VKORG LIKE MVKE-VKORG ,

VTWEG LIKE MVKE-VTWEG ,

DESC LIKE MARAV-MAKTX ,

TABNAME LIKE CDPOS-TABNAME ,

FNAME LIKE CDPOS-FNAME ,

CHNGIND LIKE CDPOS-CHNGIND ,

UDATE LIKE CDHDR-UDATE ,

USERNAME LIKE CDHDR-USERNAME ,

VALUE_OLD LIKE CDPOS-VALUE_OLD ,

VALUE_NEW LIKE CDPOS-VALUE_NEW ,

END OF T_FOR_DISP .

Pass T_FOR_DISP to MERGE fm.

Read only

0 Likes
1,655

Hi,

i copied and executed ur code in my system and its giving me the exact output.

No Change needed its working fine. Give some fields in the selection screen.

Select some entries for S_matnr, s_objclass, S_chngid, s_date, S_user from CDHDR.

Then run this prog it will give u the output.

I have pasted the same code

  TYPE-POOLS : slis.

  TABLES : cdhdr , " Change document header
  cdpos , " Change document item
  marav , " View Table for Logical DB MGM
  marc , " Plant Data for Material
  mvke . " Sales Data for Material

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

  SELECTION-SCREEN BEGIN OF BLOCK general WITH FRAME TITLE text-002.

  SELECT-OPTIONS :

  s_objcls FOR cdhdr-objectclas ,
  s_matnr FOR cdhdr-objectid ,
  s_werks FOR marc-werks ,
  s_vkorg FOR mvke-vkorg ,
  s_vtweg FOR mvke-vtweg ,
  s_tabnam FOR cdpos-tabname ,
  s_fname FOR cdpos-fname ,
  s_chgind FOR cdpos-chngind ,
  s_date FOR cdhdr-udate ,
  s_user FOR cdhdr-username .

  SELECTION-SCREEN END OF BLOCK general.

  SELECTION-SCREEN END OF BLOCK a.

*Data : G_WERKS LIKE MARC-WERKS ,
* G_VKORG LIKE MVKE-VKORG ,
* G_VTWEG LIKE MVKE-VTWEG ,
* G_DESC LIKE MARAV-MAKTX .

 TYPES : BEGIN OF ty_for_disp ,
  objclass LIKE cdhdr-objectclas ,
  objid LIKE cdhdr-objectid ,
  werks LIKE marc-werks ,
  vkorg LIKE mvke-vkorg ,
  vtweg LIKE mvke-vtweg ,
  desc LIKE marav-maktx ,
  tabname LIKE cdpos-tabname ,
  fname LIKE cdpos-fname ,
  chngind LIKE cdpos-chngind ,
  udate LIKE cdhdr-udate ,
  username LIKE cdhdr-username ,
  value_old LIKE cdpos-value_old ,
  value_new LIKE cdpos-value_new ,
  END OF ty_for_disp .

  TYPES : BEGIN OF ty_cdhdr,
  objclass LIKE cdhdr-objectclas ,
  objid LIKE cdhdr-objectid ,
* CHNGIND LIKE CDPOS-CHNGIND ,
  changenr LIKE cdhdr-changenr ,
  udate LIKE cdhdr-udate ,
  username LIKE cdhdr-username ,
* VALUE_OLD LIKE CDPOS-VALUE_OLD ,
* VALUE_NEW LIKE CDPOS-VALUE_NEW ,
  END OF ty_cdhdr .

  TYPES : BEGIN OF ty_cdpos,
  tabname LIKE cdpos-tabname ,
  fname LIKE cdpos-fname ,
  changenr LIKE cdhdr-changenr ,
  chngind LIKE cdpos-chngind ,
  tabkey LIKE cdpos-tabkey ,
  fieldtext LIKE dfies-fieldtext,
* UDATE LIKE CDPOS-UDATE ,
* USERNAME LIKE CDPOS-USERNAME ,
  value_old LIKE cdpos-value_old ,
  value_new LIKE cdpos-value_new ,
  END OF ty_cdpos .

*  DATA : t_for_disp TYPE STANDARD TABLE OF ty_for_disp  WITH HEADER
*LINE ,
  DATA : t_for_disp TYPE STANDARD TABLE OF ty_for_disp WITH HEADER
LINE ,
  t_cdhdr TYPE STANDARD TABLE OF ty_cdhdr
  WITH HEADER LINE ,
  t_cdpos TYPE STANDARD TABLE OF ty_cdpos
  WITH HEADER LINE .

  DATA : g_langu LIKE sy-langu,
  g_tabix LIKE sy-tabix,
  g_date LIKE sy-datum.

  DATA : g_werks LIKE marc-werks ,
  g_vkorg LIKE mvke-vkorg ,
  g_vtweg LIKE mvke-vtweg ,
  g_desc LIKE marav-maktx .

*------ALV Grid Field Catalog Fields

  DATA: t_fieldcat TYPE slis_t_fieldcat_alv,
  t_fieldcat_h LIKE t_fieldcat WITH HEADER LINE.
*t_fieldcat_h TYPE slis_t_fieldcat_alv.

*------End

  CONSTANTS : c_material(10) VALUE 'MATERIAL' ,
  c_objclass(10) VALUE 'OBJCLASS' ,
  c_objectid(8) VALUE 'OBJID' ,
  c_werks(5) VALUE 'WERKS' ,
  c_vkorg(5) VALUE 'VKORG' ,
  c_vtweg(5) VALUE 'VTWEG' ,
  c_desc(4) VALUE 'DESC' ,
  c_tabname(7) VALUE 'TABNAME' ,
  c_fname(5) VALUE 'FNAME' ,
  c_chngind(7) VALUE 'CHNGIND' ,
  c_udate(5) VALUE 'UDATE' ,
  c_username(8) VALUE 'USERNAME' ,
  c_value_old(9) VALUE 'VALUE_OLD' ,
  c_value_new(9) VALUE 'VALUE_NEW' .

*CONSTANTS: C_TABNAM_FOR_ALV_FM TYPE SLIS_TABNAME VALUE 'T_FOR_DISP'.

*************************************************
************ INITIALIZATION *****************
*************************************************

INITIALIZATION.

  CLEAR: t_cdhdr,
  t_cdpos,
  t_fieldcat,
  t_fieldcat_h,
  t_for_disp.

  REFRESH:t_cdhdr,
  t_cdpos.

  CLEAR : cdhdr, " Change document header
  cdpos. " Change document items

******************************************************
****START-OF-SELECTION.
******************************************************
START-OF-SELECTION.

*-FETCHING DETAILS of Changes done
  PERFORM sub_get_details.

* Get the field description.
* PERFORM SUB_CALL_DDIF_FIELDINFO_GET.

*********************************************************
****END-OF-SELECTION.
*********************************************************
END-OF-SELECTION.

*--DISPLAYING DATA IN ALV
  PERFORM sub_display_alv.

*&---------------------------------------------------------------------*
*& Form SUB_GET_DETAILS
*&---------------------------------------------------------------------*
* This subrouting is used to get Final output which will shown in
* ALV Grid From Table CDPOS.
*----------------------------------------------------------------------*

FORM sub_get_details.

  SELECT objectclas
  objectid
  changenr
  udate
  username

  INTO TABLE t_cdhdr
  FROM cdhdr

  WHERE objectclas IN s_objcls
  AND objectid IN s_matnr
* AND TABNAME IN S_TABNAM
* AND FNAME IN S_FNAME
* AND CHNGIND IN S_CHGIND
* AND UDATE IN S_DATE
  AND udate IN s_date
  AND username IN s_user .

  IF sy-subrc <> 0.
    WRITE:/ text-003.
  ENDIF.

  LOOP AT t_cdhdr.

    CLEAR t_for_disp.

    IF t_cdhdr-objclass = c_material.
      SELECT SINGLE maktx
      INTO g_desc
      FROM marav
      WHERE matnr = t_cdhdr-objid+0(18)
      AND spras = sy-langu.
    ENDIF.

    t_for_disp-desc = g_desc.

    CLEAR g_desc.

* CLEAR T_FOR_DISP.

    t_for_disp-objclass = t_cdhdr-objclass .
    t_for_disp-objid = t_cdhdr-objid .
    t_for_disp-udate = t_cdhdr-udate .
    t_for_disp-username = t_cdhdr-username .

*ENDIF.

* APPEND T_FOR_DISP.

* ENDLOOP.
*ENDIF.

    SELECT
    tabname
    fname
    changenr
    chngind
    tabkey
* UDATE
* USERNAME
    value_old
    value_new

    FROM cdpos
    INTO TABLE t_cdpos
    FOR ALL ENTRIES IN t_cdhdr
* CDHDR~CHANGENR = CDPOS~CHANGENR

    WHERE
    changenr EQ t_cdhdr-changenr
    AND tabname IN s_tabnam
    AND fname IN s_fname
    AND chngind IN s_chgind .
* AND UDATE IN S_DATE.
* AND OBJECTID IN S_DATE
* AND USERNAME IN S_USER .

    IF sy-subrc <> 0.
      WRITE:/ text-003.
    ENDIF.

*CLEAR T_FOR_DISP.

    READ TABLE t_cdpos
    WITH KEY changenr = t_cdhdr-changenr.

    CLEAR : g_werks,
    g_vkorg,
    g_vtweg.
* G_DESC .

    IF t_cdpos-tabname = 'MARC'.
      g_werks = t_cdpos-tabkey+21(4).
    ENDIF.
    CHECK g_werks IN s_werks.

    IF sy-subrc = 0.
      t_for_disp-werks = g_werks.
    ENDIF.

    IF t_cdpos-tabname = 'MVKE'.

      g_vkorg = t_cdpos-tabkey+21(4).
    ENDIF.
    CHECK g_vkorg IN s_vkorg.
    t_for_disp-vkorg = g_vkorg.

    g_vtweg = t_cdpos-tabkey+25(2).

    CHECK g_vtweg IN s_vtweg.
    t_for_disp-vtweg = g_vtweg.

    t_for_disp-tabname = t_cdpos-tabname.
    t_for_disp-fname = t_cdpos-fname.
    t_for_disp-chngind = t_cdpos-chngind.
    t_for_disp-value_old = t_cdpos-value_old.
    t_for_disp-value_new = t_cdpos-value_new.


    APPEND t_for_disp.

* ENDLOOP.

  ENDLOOP.

  CLEAR t_for_disp.
ENDFORM. " SUB_GET_DETAILS

*&---------------------------------------------------------------------*
*& Form SUB_DISPLAY_ALV
*&---------------------------------------------------------------------*
* This Subroutine is used to display data to ALV Grid from internal *
* tables T_CDHDR & T_CDPOS. which is filled in subroutine *
* SUB_GET_DETAILS *
*----------------------------------------------------------------------*
FORM sub_display_alv .

  BREAK-POINT.

  DATA: l_layout TYPE slis_layout_alv,
  l_title TYPE lvc_title,
  l_repid LIKE sy-repid.

  l_repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
            i_program_name         = l_repid
            i_internal_tabname     = 'TY_FOR_DISP'
            i_inclname             = l_repid
       CHANGING
            ct_fieldcat            = t_fieldcat[]
       EXCEPTIONS
            inconsistent_interface = 1
            program_error          = 2
            OTHERS                 = 3.

  IF sy-subrc <> 0.
    WRITE:/ 'ERROR IN CALLING ALV FM'.
  ENDIF.

*----Change Field Heading We move All field data from T_FIELDCAT To
*----another Internal table with header line namely T_FIELDCAT_H

  BREAK-POINT.

  MOVE t_fieldcat[] TO t_fieldcat_h[].

  LOOP AT t_fieldcat_h.

    CASE t_fieldcat_h-fieldname.

      WHEN c_objclass.
        t_fieldcat_h-seltext_l = text-004.
        t_fieldcat_h-seltext_m = text-004.
        t_fieldcat_h-seltext_s = text-004.
* T_FIELDCAT_H-OUTPUTLEN = 15.

      WHEN c_objectid.
        t_fieldcat_h-seltext_l = text-005.
        t_fieldcat_h-seltext_m = text-005.
        t_fieldcat_h-seltext_s = text-005.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_desc.
        t_fieldcat_h-seltext_l = text-006.
        t_fieldcat_h-seltext_m = text-006.
        t_fieldcat_h-seltext_s = text-006.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_werks.
        t_fieldcat_h-seltext_l = text-007.
        t_fieldcat_h-seltext_m = text-007.
        t_fieldcat_h-seltext_s = text-007.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_vkorg.
        t_fieldcat_h-seltext_l = text-008.
        t_fieldcat_h-seltext_m = text-008.
        t_fieldcat_h-seltext_s = text-008.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_vtweg.
        t_fieldcat_h-seltext_l = text-009.
        t_fieldcat_h-seltext_m = text-009.
        t_fieldcat_h-seltext_s = text-009.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_tabname.
        t_fieldcat_h-seltext_l = text-010.
        t_fieldcat_h-seltext_m = text-010.
        t_fieldcat_h-seltext_s = text-010.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_fname.
        t_fieldcat_h-seltext_l = text-011.
        t_fieldcat_h-seltext_m = text-011.
        t_fieldcat_h-seltext_s = text-011.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_chngind.
        t_fieldcat_h-seltext_l = text-012.
        t_fieldcat_h-seltext_m = text-012.
        t_fieldcat_h-seltext_s = text-012.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_udate.
        t_fieldcat_h-seltext_l = text-013.
        t_fieldcat_h-seltext_m = text-013.
        t_fieldcat_h-seltext_s = text-013.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_username.
        t_fieldcat_h-seltext_l = text-014.
        t_fieldcat_h-seltext_m = text-014.
        t_fieldcat_h-seltext_s = text-014.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_value_old.
        t_fieldcat_h-seltext_l = text-015.
        t_fieldcat_h-seltext_m = text-015.
        t_fieldcat_h-seltext_s = text-015.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN c_value_new.
        t_fieldcat_h-seltext_l = text-016.
        t_fieldcat_h-seltext_m = text-016.
        t_fieldcat_h-seltext_s = text-016.
* T_FIELDCAT_H-OUTPUTLEN = 20.

      WHEN OTHERS.

        CONTINUE.

    ENDCASE.

    MODIFY t_fieldcat_h.
* CLEAR T_FIELDCAT_H.
  ENDLOOP.
*BREAK-POINT.

  MOVE t_fieldcat_h[] TO t_fieldcat[].

*----End

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
  i_callback_program = l_repid
* i_callback_pf_status_set = 'SET_STATUS'
* i_callback_user_command = 'USER_COMMAND'
* i_callback_top_of_page = 'TOP_OF_PAGE'
* i_grid_title = l_title
* is_layout = l_layout
  it_fieldcat = t_fieldcat
* i_save = 'A'
  TABLES
  t_outtab = t_for_disp[]
  EXCEPTIONS
  program_error = 1
  OTHERS = 2.

* IF SY-SUBRC <> 0.
* WRITE:/ TEXT-017.
* ENDIF.

ENDFORM. " SUB_DISPLAY_ALV

As per my first reply u have corrected the tab name in CAPS thats all.

Hello reward suitable points, u have marked the thraed as solved on ur own.

Message was edited by:

Judith Jessie Selvi

Read only

Former Member
0 Likes
1,655

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

I_PROGRAM_NAME = l_repid

I_INTERNAL_TABNAME = 'T_FINAL'

I_INCLNAME = l_repid

CHANGING

<b>CT_FIELDCAT = T_FIELDCAT</b>

EXCEPTIONS

INCONSISTENT_INTERFACE = 1

PROGRAM_ERROR = 2

OTHERS = 3.

Read only

0 Likes
1,655

Hi Srikant,

Can you tell me how to create search help for fields.Please send me sample code for creating search help.

Read only

0 Likes
1,655

hello mohit dis is the code or search help on a field.

DATA : LT_RETURN TYPE DDSHRETVAL OCCURS 0 WITH HEADER LINE.

DATA : LS_F4 TYPE LVC_S_MODI,

WA_RETURN TYPE DDSHRETVAL.

DATA : LT_FIELD_TAB TYPE DFIES OCCURS 0 WITH HEADER LINE,

LT_MAPPING TYPE DSELC OCCURS 0 WITH HEADER LINE.

  • this itab will get populated n displayed when u press F4 on the field

TYPES : BEGIN OF itab,

(itab fields...)

END OF TT_IR_F4.

DATA : LT_F4 TYPE itab OCCURS 0,

LS_F4 TYPE itab.

SELECT *

INTO LS_F4

FROM tablename

ENDSELECT.

*

CLEAR : LT_FIELD_TAB.

REFRESH : LT_FIELD_TAB.

*

LT_FIELD_TAB-TABNAME = 'tablename'.

LT_FIELD_TAB-FIELDNAME = 'fieldname'.

LT_FIELD_TAB-OFFSET = offset.

LT_FIELD_TAB-INTLEN = initlen.

LT_FIELD_TAB-OUTPUTLEN = outputlen.

LT_FIELD_TAB-INTTYPE = 'C'.

LT_FIELD_TAB-SCRTEXT_M = 'text'.

APPEND LT_FIELD_TAB.

CLEAR : LT_FIELD_TAB.

(repeat this for number coulmns in the itab)

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

retfield = 'fieldname'

DYNPPROG = SY-REPID

DYNPNR = SY-DYNNR

VALUE_ORG = 'S'

tables

value_tab = LT_F4[]

FIELD_TAB = LT_FIELD_TAB[]

RETURN_TAB = LT_RETURN[]

EXCEPTIONS

PARAMETER_ERROR = 1

NO_VALUES_FOUND = 2

OTHERS = 3

.

IF sy-subrc <> 0.

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

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

ENDIF.

READ TABLE LT_RETURN INTO WA_RETURN INDEX 1.

IF SY-SUBRC = 0.

fieldname = WA_RETURN-FIELDVAL.

ENDIF.

here the fieldname is the name of the field on which u want to have the search help.

plz reward if u find it helpful

Message was edited by:

ashwinee mali

Message was edited by:

ashwinee mali

Read only

Former Member
0 Likes
1,655

Hi,

You have to give T_FINAL in caps..

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

I_PROGRAM_NAME = l_repid

I_INTERNAL_TABNAME = <b>'T_FINAL'</b>

Check this example

TYPE-POOLS: slis.

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.

DATA: BEGIN OF wa_ekko,

ebeln like ekko-ebeln,

ekorg like ekko-ekorg,

ekgrp like ekko-ekgrp,

END OF wa_ekko.

DATA: v_repid TYPE syrepid.

v_repid = sy-repid.

DATA it_ekko LIKE STANDARD TABLE OF wa_ekko WITH HEADER LINE.

SELECT * UP TO 100 ROWS

FROM ekko

INTO CORRESPONDING FIELDS OF TABLE it_ekko.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = v_repid

i_internal_tabname = 'WA_EKKO'

i_inclname = v_repid

CHANGING

ct_fieldcat = gt_fieldcat.

  • have hotspot for a PO.

DATA: s_fieldcat LIKE LINE OF gt_fieldcat.

s_fieldcat-hotspot = 'X'.

MODIFY gt_fieldcat FROM s_fieldcat TRANSPORTING hotspot

WHERE fieldname = 'EBELN'.

  • Pass the program.

v_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

i_callback_program = v_repid

it_fieldcat = gt_fieldcat

TABLES

t_outtab = it_ekko.

Thanks,

Naren

Read only

0 Likes
1,655

Hi Narendran,

It's gr8 to see ur contribution in sdn.

Can you plz solve a question:--

I have to generate a tcode.Which is basically instruction to buyer for purchaging some goods.

In which user have to some purchage some piece of material for a certain price.

Example: Instruction number,x(name of material) , 20(quantity), 900(total rupees buyer carry)

Now buyer have to purchage this product with in 900 Ruppes.This is basically instruction to buyer and this rate shd be varify first with this tcode.

Key field require are:

Instruction Number(shd not be duplicate)

Plant(mandatory)

Material code(mandatory)

Quantity(mandatory)

Max Rate(mandatory)

Min Rate(non mandatory)

Remarks

Vendor

Here validation requires

1. min rate > max rate

2. Instruction number shd not be duplicate.

Can you tell me how would i map this scenerio and whch table i shd use to find appropriate field.

Plz do it hurry.

Read only

Former Member
0 Likes
1,655

Pass T_Final in caps.

Read only

Former Member
0 Likes
1,655

Hi,

Give the table name 'T_Final' in Capital letters, 'T_FINAL'. This will solve your problem.

Regards,

Paul.