09-08-2007 8:30 AM
Hi Experts,
I am using macros in ALV like :
define m_fieldcat.
add 1 to w_fcat-col_pos.
w_fcat-fieldname = &1.
w_fcat-seltext_m = &2.
w_fcat-outputlen = &3.
w_fcat-decimals_out = &4.
w_fcat-do_sum(1) = &5.
w_fcat-ref_tabname = &6.
Data : w_fcat type slis_fieldcat_alv,
lt_fieldcat type slis_t_fieldcat_alv.
FORM f_cat .
m_fieldcat 'SRNO' 'Serial No' '9' '' '' 'IT_OUT'.
m_fieldcat 'VBELN' 'Order No' '10' '' '' 'IT_OUT'.
m_fieldcat 'POSNR' 'Item' '4' '' '' 'IT_OUT'.
m_fieldcat 'ERDAT' 'Order Date' '10' '' '' 'IT_OUT'.
m_fieldcat 'MATNR' 'Material No' '18' '' '' 'IT_OUT'.
m_fieldcat 'ARKTX' 'Material Description' '40' '' '' 'IT_OUT'.
m_fieldcat 'ORD_QTY' 'Order Qty' '10' '0' 'X' 'IT_OUT'.
m_fieldcat 'PEND_QTY' 'Pending Qty' '11' '0' 'X' 'IT_OUT'.
m_fieldcat 'NETWR' 'Net Value' '10' '' 'X' 'IT_OUT'.
m_fieldcat 'KUNNR' 'Customer' '10' '' '' 'IT_OUT'.
m_fieldcat 'NAME1' 'Cust Name' '30' '' '' 'IT_OUT'.
But the date format is comming like 20060214, i want 14.02.2006 and Sum of Order Qty is not showing. Pl. guide me.
Yusuf
Message was edited by:
YUSUF BHORI
09-08-2007 12:29 PM
Yusuf,
In the internal table which contains the data of the report, when you are appending entries into the table :
for date do this
WRITE wa_data-erdat to wa_ouput-erdat USING EDIT MASK 'MM/DD/YYYY'.
This should solve the problem. There seems to nothing wrong with macro here.
09-08-2007 12:36 PM
Hi Srihari,
Thanks,
I tried but not solved in ALV report, it will work with write statement. And slao what about SUM ? Total is not showing with macro.
Yusuf
Message was edited by:
YUSUF BHORI
09-08-2007 12:44 PM
What is the data type you have used for the two fields for which you want totals,
They should be integers or decimals.
Also, please make sure that you have not set the flag for 'NO_TOTALLINE' in the layout settings.
If you want to enable summing for NUMC fields, you must set the flag 'NUMC_TOTAL' in the layout settings.
Thanks,
Srihari
09-08-2007 8:00 PM
Hi Yusuf,
it is not recommended to create a field catalog manually.
You may try these two format to create an ALV field catalog automatically for any internal table. If you need texts other than defined in data dictionary you can use the third form as a template:
*&---------------------------------------------------------------------*
*& Form SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
FORM sapgui_progress_indicator
USING
p_text TYPE c
p_share TYPE sytfill
p_total TYPE sytfill.
STATICS:
lv_time LIKE sy-uzeit,
lv_txt TYPE text80.
DATA:
lv_seconds_since_lastcall TYPE sytfill,
lv_share TYPE p,
lv_pct TYPE sytfill,
lv_txt1 TYPE tline-tdline,
lv_txt2 TYPE tline-tdline.
GET TIME.
lv_seconds_since_lastcall = sy-uzeit - lv_time.
CHECK lv_seconds_since_lastcall >= 1 OR lv_txt <> p_text.
lv_txt = p_text.
lv_time = sy-uzeit.
IF p_total > 0.
lv_share = p_share.
lv_share = p_share.
lv_pct = lv_share * 100 / p_total.
WRITE p_share TO lv_txt1 LEFT-JUSTIFIED.
WRITE p_total TO lv_txt2 LEFT-JUSTIFIED.
CONCATENATE
p_text lv_txt1 '/' lv_txt2 INTO lv_txt1 SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_pct
text = lv_txt1.
ELSE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
* percentage = lv_pct
text = p_text.
ENDIF. " p_total > 0.
ENDFORM. " SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
*& Form ALV_FIELDCAT_FOR_ITAB
*&---------------------------------------------------------------------*
* Feldkatalog from (arbitrary) internal Table (c) Clemens Li
* * build field catalog from type description
*----------------------------------------------------------------------*
FORM alv_fieldcat_for_itab "#EC *
TABLES pt_outtab TYPE table "#EC *
CHANGING pt_alv_fieldcat TYPE slis_t_fieldcat_alv."#EC *
DATA:
lv_desc TYPE sydes_desc,
ls_alv_fieldcat TYPE slis_fieldcat_alv,
lv_longfield TYPE text80."CRM<=R/3 fname.
FIELD-SYMBOLS:
<typeinfo> TYPE sydes_typeinfo,
<nameinfo> TYPE sydes_nameinfo.
DESCRIBE FIELD pt_outtab INTO lv_desc. "#EC *
LOOP AT lv_desc-types
ASSIGNING <typeinfo>
WHERE NOT idx_name IS INITIAL
AND table_kind IS INITIAL "no entries for deep table like color
AND back = 1. "top-level-entries only.
READ TABLE lv_desc-names INDEX <typeinfo>-idx_name
ASSIGNING <nameinfo>.
CHECK <nameinfo>-name <> 'INCLUDE'.
ls_alv_fieldcat-fieldname = <nameinfo>-name.
WHILE NOT <nameinfo>-continue IS INITIAL.
ADD 1 TO <typeinfo>-idx_name.
READ TABLE lv_desc-names INDEX <typeinfo>-idx_name
ASSIGNING <nameinfo>.
CONCATENATE
ls_alv_fieldcat-fieldname
<nameinfo>-name
INTO ls_alv_fieldcat-fieldname.
ENDWHILE." not <nameinfo>-continue IS INITIAL.
READ TABLE lv_desc-names INDEX <typeinfo>-idx_help_id
ASSIGNING <nameinfo>.
IF sy-subrc = 0.
* Caution: Help-ID may be Tablename-Fieldname and thus longer
* than 30 Chars; ls_alv_fieldcat-rollname is 30 Chars only
ls_alv_fieldcat-rollname = <nameinfo>-name.
lv_longfield = <nameinfo>-name.
WHILE NOT <nameinfo>-continue IS INITIAL.
ADD 1 TO <typeinfo>-idx_help_id.
READ TABLE lv_desc-names INDEX <typeinfo>-idx_help_id
ASSIGNING <nameinfo>.
CONCATENATE
lv_longfield
<nameinfo>-name
INTO lv_longfield.
ENDWHILE." not lv_desc-continue is initial.
* help id may be data element or <table>-<field>
IF lv_longfield CA '-'.
* get data type for table field
PERFORM get_rollname_4_tabfield
USING lv_longfield CHANGING ls_alv_fieldcat.
ENDIF." lv_longfield ca '-'.
ELSE.
* No Help-ID: Use Fieldname as text
ls_alv_fieldcat-seltext_s =
ls_alv_fieldcat-seltext_m =
ls_alv_fieldcat-seltext_l =
ls_alv_fieldcat-reptext_ddic =
<nameinfo>-name.
ENDIF." sy-subrc = 0.
* Starting 4.7: get edit mask
IF NOT <typeinfo>-idx_edit_mask IS INITIAL.
READ TABLE lv_desc-names INDEX <typeinfo>-idx_edit_mask
ASSIGNING <nameinfo>.
ls_alv_fieldcat-edit_mask = <nameinfo>-name.
IF NOT <nameinfo>-continue IS INITIAL.
ADD 1 TO <typeinfo>-idx_edit_mask.
READ TABLE lv_desc-names INDEX <typeinfo>-idx_edit_mask
ASSIGNING <nameinfo>.
CONCATENATE
ls_alv_fieldcat-edit_mask
<nameinfo>-name
INTO ls_alv_fieldcat-edit_mask.
ENDIF." not <nameinfo>-continue IS INITIAL.
ENDIF." not <typeinfo>-IDX_EDIT_MASK is initial.
* assign length, output length and decimals
ls_alv_fieldcat-intlen = <typeinfo>-length.
ls_alv_fieldcat-outputlen = <typeinfo>-output_length.
ls_alv_fieldcat-decimals_out = <typeinfo>-decimals.
ls_alv_fieldcat-inttype = <typeinfo>-type.
APPEND ls_alv_fieldcat TO pt_alv_fieldcat.
CLEAR: "prevent anything 2 B taken for subsequent fields
ls_alv_fieldcat.
ENDLOOP." at lv_desc-types where not IDX_NAME is in initial.
ENDFORM. " ALV_FIELDCAT_FOR_ITAB
*&---------------------------------------------------------------------
*& Form get_rollname_4_tabfield
*&---------------------------------------------------------------------
* Get Data type for Table field
*----------------------------------------------------------------------
FORM get_rollname_4_tabfield
USING p_fname TYPE text80 ""CRM<=R/3 fname
CHANGING p_alv_fieldcat TYPE slis_fieldcat_alv.
FIELD-SYMBOLS:
<dfies> TYPE dfies.
DATA:
lv_tabname TYPE tabname,
lt_dfies TYPE TABLE OF dfies,
lv_fieldname TYPE fieldname.
SPLIT p_fname AT '-'
INTO lv_tabname lv_fieldname.
CLEAR p_alv_fieldcat-rollname.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = lv_tabname
fieldname = lv_fieldname
* LANGU = SY-LANGU
* LFIELDNAME = ' '
* ALL_TYPES = ' '
* IMPORTING
* X030L_WA =
* DDOBJTYPE =
* DFIES_WA =
* LINES_DESCR =
TABLES
dfies_tab = lt_dfies
* FIXED_VALUES =
EXCEPTIONS
not_found = 1
internal_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.
ELSE.
READ TABLE lt_dfies ASSIGNING <dfies> INDEX 1.
p_alv_fieldcat-rollname = <dfies>-rollname.
* Und wenn keinerlei Twexte gepflegt sind?
IF <dfies>-reptext IS INITIAL AND
<dfies>-scrtext_s IS INITIAL AND
<dfies>-scrtext_m IS INITIAL AND
<dfies>-scrtext_l IS INITIAL.
* No Text: Use Fieldname as text
p_alv_fieldcat-seltext_s =
p_alv_fieldcat-seltext_m =
p_alv_fieldcat-seltext_l =
p_alv_fieldcat-reptext_ddic =
p_alv_fieldcat-fieldname.
ENDIF." <dfies>-reptext IS INITIAL AND
ENDIF.
ENDFORM. " get_rollname_4_tabfield
*&---------------------------------------------------------------------*
*& Form alv_fieldcat_enhance
*&---------------------------------------------------------------------*
* Individual Enrichment of field catalog
*----------------------------------------------------------------------*
FORM alv_fieldcat_enhance
CHANGING pt_alv_fieldcat TYPE slis_t_fieldcat_alv.
FIELD-SYMBOLS:
<alv_fieldcat> TYPE slis_fieldcat_alv.
LOOP AT pt_alv_fieldcat ASSIGNING <alv_fieldcat>.
CASE <alv_fieldcat>-fieldname.
WHEN 'EBELN'.
<alv_fieldcat>-hotspot = c_true.
* WHEN 'LIGHTS'.
* <alv_fieldcat>-icon = c_true.
* <alv_fieldcat>-seltext_s = 'Status'(009).
* <alv_fieldcat>-seltext_m =
* <alv_fieldcat>-seltext_l =
* <alv_fieldcat>-reptext_ddic = 'Status of Processing'(010).
WHEN 'MANDT' OR 'SEL' or 'T_PROT' or 'BSTYP' or 'PROTOCOL'.
<alv_fieldcat>-tech = c_true.
ENDCASE." <alv_fieldcat>-fieldname.
ENDLOOP." at pt_alv_fieldcat assigning <fieldcat_alv>.
ENDFORM. " alv_fieldcat_enhance
Regards,
Clemens