2012 Aug 29 3:07 PM
Hi,
I want to development an at user command ALV with oops.
I am not able to do it. i searched in google and sdn and scn but not able to find exact scenarios.
my scenario is like this,
I want to generate an Main alv list/grid with 25 fields from multiple tables.
After that when i enter on selecting the rows from main list, if i press enter than it should popup a screen with bapi to change the sales order in which the sales order delivery block should be removed.
This is my requirement, please help
regards
Ravi
2012 Aug 29 3:30 PM
2012 Aug 29 3:30 PM
2012 Aug 29 3:41 PM
why do you need use of bapi call. Tell me what exactly you are
facing issue when you are developing the ALV reprt...?
2012 Aug 29 3:42 PM
2012 Aug 29 3:47 PM
Hi Sudhir, i want to develop alv oops of below report, i am not able to do it with
DATA: ra_prod TYPE RANGE OF sysysid, "sysId Prod. range "EPS Carve out
wa_prod LIKE LINE OF ra_prod. "sysId Prod. w.area "EPS Carve out
DATA: ra_sorg_fribourg TYPE RANGE OF vkorg,"range of values "EPS Carve out
wa_sorg_fribourg LIKE LINE OF ra_sorg_fribourg."w.area"EPS Carve out
TABLES: vbak, "Sales Document: Header Data
vbpa, "Sales Document: Partner
vepvg, "Delivery Due Index
setleaf. "Values in Sets
INCLUDE zbcsel0i. " Select options print include - data
* I_DATA production record estimate= 000000500 as of 2007.12.31
* record size= 488 , total bytes= 244,000
* KB= 238.28 ,MB= 0.23
DATA: BEGIN OF i_data OCCURS 0.
DATA: checkbox TYPE c, "screen checkbox
color(3) TYPE c, "row display colour
key_gross TYPE i, "counter
vbeln TYPE vbeln, "Order
posnr TYPE posnr, "Order item
auart tYPE vbak-auart, " Order type
kunnr TYPE kunag, "Sold to
kunwe TYPE kunwe, "Ship to
matnr TYPE matnr, "Material
pernr TYPE pernr_d, "CSR number
ename TYPE pa0002-nachn, "CSR's last name
kwmeng TYPE kwmeng, "Ordered volume - sales unit
vrkme TYPE vrkme, "Sales unit
netwr TYPE vbap-netwr, "Item price
waerk TYPE vbap-waerk, "Currency
erdat LIKE vbap-erdat, "create date
ernam LIKE vbap-ernam, "created by
cname TYPE pa0002-cname, "create by name
spart TYPE vbap-spart, "Material Division
vkorg TYPE vbak-vkorg, "Sales Org
result(15) TYPE c, "Result
namag LIKE kna1-name1, "customer name
ortag LIKE kna1-ort01, "city
regag LIKE kna1-regio, "province
lanwe LIKE kna1-land1, "Ship_To Country
namwe LIKE kna1-name1, "customer name
ortwe LIKE kna1-ort01, "city
regwe LIKE kna1-regio, "province
abgru TYPE vbap-abgru, "Rejection reason
lifsk type lifsk, " Delivery block (document header)
vtext TYPE bezei40, "Reason for Rejection text
maktx TYPE maktx. "material description
DATA: END OF i_data.
* X_DATA production record estimate= 000000500 as of 2007.12.31
* record size= 488 , total bytes= 244,000
* KB= 238.28 ,MB= 0.23
DATA: BEGIN OF x_data OCCURS 0.
INCLUDE STRUCTURE i_data.
DATA: END OF x_data.
* HEADER_TAB production record estimate= 000000500 as of 2006.03.08
* record size= 24 , total bytes= 12,000
* KB= 11.72 ,MB= 0.01
DATA: BEGIN OF header_tab OCCURS 20,
key_gross TYPE i, " Key
vbeln LIKE vbak-vbeln, " Document number (Order)
posnr LIKE vbap-posnr, " Item
tech TYPE c, " technical field
ampel TYPE c, " Lights
END OF header_tab.
* I_ORDER production record estimate= 000000500 as of 2007.12.31
* record size= 128 , total bytes= 64,000
* KB= 62.50 ,MB= 0.06
DATA: BEGIN OF i_order OCCURS 0,
vbeln TYPE vbak-vbeln, " Sales order
erdat TYPE vbak-erdat, " Date created
kunnr TYPE vbak-kunnr, " Sold-to Customer #
lanag TYPE land1, " Ship-to country
ernam TYPE vbak-ernam, " Created by
knumv TYPE vbak-knumv, " Number of the doc condition
auart TYPE vbak-auart, " Order type
posnr TYPE vbap-posnr, " Order item #
matnr TYPE vbap-matnr, " Material number
spart TYPE vbap-spart, " Material Division
vkorg TYPE vbak-vkorg, " Sales Org
abgru TYPE vbap-abgru, " Rejection reason
lifsk type lifsk, " Delivery block (document header)
kwmeng TYPE vbap-kwmeng, " Ordered volume - sales unit
vrkme TYPE vbap-vrkme, " Sales unit
mprok TYPE vbap-mprok, " Status manual price change
kunwe TYPE vbpa-kunnr, " Ship-to customer # (parvw=WE)
kschl TYPE konv-kschl, " Pricing condition
netwr TYPE vbap-netwr, " Item price
waerk TYPE vbap-waerk, " Currency
END OF i_order.
* XMARAV production record estimate= 000000500 as of 2006.03.08
* record size= 59 , total bytes= 29,500
* KB= 28.81 ,MB= 0.03
DATA: BEGIN OF xmarav OCCURS 0,
matnr LIKE marav-matnr, "Material
spras LIKE marav-spras, "language
maktx LIKE marav-maktx. "Description
DATA: END OF xmarav.
* XVBPA production record estimate= 000001500 as of 2006.03.08
* record size= 36 , total bytes= 54,000
* KB= 52.73 ,MB= 0.05
DATA: BEGIN OF xvbpa OCCURS 0,
vbeln LIKE vbpa-vbeln, " sales & distrbt doc
posnr LIKE vbpa-posnr, " sales document item
parvw LIKE vbpa-parvw, " partner function ID
pernr LIKE vbpa-pernr, " personnel number
kunnr LIKE vbpa-kunnr, " partner - Customer
END OF xvbpa.
* TVBPA production record estimate= 000001500 as of 2006.03.08
* record size= 36 , total bytes= 54,000
* KB= 52.73 ,MB= 0.05
DATA: BEGIN OF tvbpa OCCURS 0.
INCLUDE STRUCTURE xvbpa.
DATA: END OF tvbpa.
* I_KNA1 production record estimate= 000000500 as of 2006.03.08
* record size= 86 , total bytes= 43,000
* KB= 41.99 ,MB= 0.04
DATA: BEGIN OF i_kna1 OCCURS 0, " Customer master table
kunnr TYPE kna1-kunnr, " Customer #
name1 TYPE kna1-name1, " Customer name
ort01 TYPE kna1-ort01, " Customer city
regio TYPE kna1-regio, " Customer state/province
land1 TYPE kna1-land1, " Customer country
END OF i_kna1.
* I_KNVP production record estimate= 000000500 as of 2006.03.08
* record size= 88 , total bytes= 44,000
* KB= 42.97 ,MB= 0.04
DATA: BEGIN OF i_knvp OCCURS 0, " Partner table
pernr TYPE knvp-pernr, " Employee # (Sales Rep / CSR)
ename TYPE pa0001-ename, " CSR name
nachn TYPE pa0002-nachn, " Last name
END OF i_knvp.
DATA: BEGIN OF i_cnam OCCURS 0, " Partner table
ernam TYPE vbap-ernam, " Created by ID
cname TYPE pa0002-cname, " Created By name
END OF i_cnam.
* ITVLST production record estimate= 000000050 as of 2005.11.03
* record size= 42 , total bytes= 2,100
* KB= 2.05 ,MB= 0.00
data: begin of itvlst occurs 0,
lifsp type lifsp, "Delivery Block
vtext type bezei_lifsp. "Description
data: end of itvlst.
DATA: count1 TYPE i. " # of records for table sizes
*$*$ Data declarations for ALV
TYPE-POOLS: slis.
DATA: fieldcat TYPE slis_t_fieldcat_alv, " Field catalog
ls_fieldcat TYPE slis_fieldcat_alv, " Header line - fieldcat
layout TYPE slis_layout_alv, " Customize column format
printout TYPE slis_print_alv, " Print specifications.
events TYPE slis_t_event, " Events to trigr
tabname TYPE dd02l-tabname. " Name of table for ALV
DATA: repid TYPE sy-repid, " Name of report program
alv_variant TYPE disvariant, " Display variant
pf_extab TYPE slis_t_extab, " Function codes to be excluded
extab TYPE slis_extab. " Header line for func code itab
INCLUDE <color>. "Assign Color Descriptions in Lists to Their Number Val
INCLUDE tskhincl. "Task handler interface include
RANGES: rparvw FOR vbpa-parvw, " partner
rauart FOR vbak-auart. " order type
* BDCDATA production record estimate= 000000020 as of 2006.03.08
* record size= 309 , total bytes= 6,180
* KB= 6.04 ,MB= 0.01
DATA: BEGIN OF bdcdata OCCURS 10. " Structure for BDC session data.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdcdata.
* BDCMESSAGE production record estimate= 000000010 as of 2006.03.08
* record size= 625 , total bytes= 6,250
* KB= 6.10 ,MB= 0.01
DATA: BEGIN OF bdcmessages OCCURS 10.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF bdcmessages.
* OUTPUT_TAB production record estimate= 000000500 as of 2006.03.08
* record size= 104 , total bytes= 52,000
* KB= 50.78 ,MB= 0.05
DATA: BEGIN OF output_tab OCCURS 0,
key_gross TYPE i, " key
msg_text(120) TYPE c, " Message text.
END OF output_tab.
DATA: retcode TYPE sysubrc. " Return code
*----------------------------------------------------------------------*
* Selection Screen
*----------------------------------------------------------------------*
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: xerdat FOR vbak-erdat OBLIGATORY, "Order creation date
xvbeln FOR vbak-vbeln, "Order number
xpernr FOR vbpa-pernr. "CSR
SELECTION-SCREEN: SKIP.
SELECT-OPTIONS: xkunag FOR vepvg-kunnr. "Sold-to party
SELECTION-SCREEN: SKIP.
SELECTION-SCREEN BEGIN OF BLOCK list WITH FRAME TITLE text-lst.
PARAMETERS: pa_vari TYPE slis_vari. " Layout Variant
SELECTION-SCREEN END OF BLOCK list.
SELECTION-SCREEN: SKIP.
PARAMETERS: p_mode LIKE rfpdo-allgazmd DEFAULT 'N' "Call trans mode
OBLIGATORY MODIF ID dbg.
*----------------------------------------------------------------------*
INITIALIZATION.
* get range of production systems "EPS Carve out
* PERFORM get_constant TABLES ta_range "Value Ranges "EPS Carve out
* USING c_prod_syst_range "EPS Carve out
* CHANGING hv_value hv_element hv_type."EPS Carve out
* LOOP AT ta_range INTO wa_range. "EPS Carve out
* MOVE-CORRESPONDING wa_range TO wa_prod. "EPS Carve out
* APPEND wa_prod TO ra_prod. "EPS Carve out
* ENDLOOP. "EPS Carve out
* get range of Fribourg Sales Organisations "EPS Carve out
* PERFORM get_constant TABLES ta_range "Value Ranges "EPS Carve out
* USING c_sd_vkorg_fribourg_range "EPS Carve out
* CHANGING hv_value hv_element hv_type."EPS Carve out
REFRESH ra_sorg_fribourg. "EPS Carve out
* LOOP AT ta_range INTO wa_range. "EPS Carve out
* MOVE-CORRESPONDING wa_range TO wa_sorg_fribourg. "EPS Carve out
* APPEND wa_sorg_fribourg TO ra_sorg_fribourg. "EPS Carve out
* ENDLOOP. "EPS Carve out
IF sy-mandt NE '200'.
MESSAGE e531(0u) WITH text-e01.
EXIT.
ENDIF.
REFRESH rparvw.
MOVE: 'EQ' TO rparvw-option,
'I' TO rparvw-sign.
rparvw-low = 'AG'.
APPEND rparvw.
rparvw-low = 'WE'.
APPEND rparvw.
rparvw-low = 'Z2'.
APPEND rparvw.
* DEFAULT TO 30 DAYS
xerdat-low = sy-datum - 30.
xerdat-high = sy-datum.
xerdat-sign = 'I'.
xerdat-option = 'BT'.
APPEND xerdat.
repid = sy-repid.
PERFORM alv_eventtab_build USING:
* Event name Form to execute Event internal table
'TOP_OF_PAGE' 'TOP_OF_PAGE' events[],
'END_OF_LIST' 'END_OF_LIST' events[].
***********************************************************************
* MODIFY THE PARAMETER SCREEN BEFORE IT IS DISPLAYED. *
***********************************************************************
* Only display the 'DEBUG' type options on the parameter screen if the
* program is run in PROD environment
AT SELECTION-SCREEN OUTPUT.
* hard code removal via check against prod. systems range "EPS Carve out
* CHECK sy-sysid = 'C34'. "EPS Carve out
CHECK sy-sysid IN ra_prod. "EPS Carve out
LOOP AT SCREEN.
IF screen-group1 = 'DBG'. " DeBuG Screen group
CLEAR screen-input. " Disallow input3
screen-invisible = '1'. " Do NOT display
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*$*$ AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_vari.
PERFORM alv_variant_f4 CHANGING pa_vari.
AT SELECTION-SCREEN.
IF sy-ucomm = 'ONLI' "Execute
OR sy-batch = 'X'.
PERFORM get_orders.
READ TABLE i_order INDEX 1.
IF sy-subrc EQ 0.
ELSE.
IF sy-batch = 'X'.
WRITE:/ text-e02. "No Orders selected
LEAVE PROGRAM.
ELSE.
MESSAGE e071(cb).
ENDIF.
ENDIF.
ENDIF.
START-OF-SELECTION.
PERFORM combine_data.
* perform pricing update only if run in batch.
IF sy-batch = 'X'.
PERFORM order_approve.
ENDIF.
* Set selected display variant
alv_variant-report = repid.
alv_variant-username = sy-uname.
alv_variant-variant = pa_vari.
tabname = 'I_DATA'. " ASSIGN table name
PERFORM build_list_s USING tabname.
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM top_of_page.
* CALL FUNCTION 'Z_REP_COMMON_HDR'
* EXPORTING
* line_size = sy-linsz
* page_no = sy-pagno
* report_name = sy-cprog
* sy_datum = sy-datum
* sy_uzeit = sy-uzeit
* title_1 = sy-title.
ENDFORM. " TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form END_OF_LIST
*&---------------------------------------------------------------------*
* Run end of page include
*&---------------------------------------------------------------------*
FORM end_of_list.
INCLUDE zbcsel01. "print selection variables
ENDFORM. " END_OF_LIST
*---------------------------------------------------------------------*
* FORM ALV_EVENTTAB_BUILD *
*---------------------------------------------------------------------*
* Pass list of events to be triggered by the ALV function module
*---------------------------------------------------------------------*
FORM alv_eventtab_build USING u_name TYPE slis_alv_event-name
u_form TYPE slis_alv_event-form
alv_lt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event. " structure for event handling
ls_event-name = u_name.
ls_event-form = u_form.
APPEND ls_event TO alv_lt_events.
ENDFORM. " ALV_EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*& Form ALV_FIELDCAT
*&---------------------------------------------------------------------*
* Specify fields for columns in the list
*----------------------------------------------------------------------*
* -->P_FIELDCAT[] text
*----------------------------------------------------------------------*
FORM alv_fieldcat USING fieldcat TYPE slis_t_fieldcat_alv.
REFRESH fieldcat.
* Specify columns for the list display
PERFORM append_fieldcat USING:
* Field Int Tbl RefTab Just Dec Emph Hspot Type Len RTxt
'VBELN' 'I_DATA' ' ' ' ' ' ' ' ' 'X' ' ' ' ' text-051,
'PERNR' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-070,
'ENAME' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-077,
'KUNNR' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-053,
'NAMAG' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-073,
'KUNWE' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-054,
'NAMWE' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-074,
'ORTWE' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-075,
'REGWE' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-076,
'LANWE' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-079,
'MATNR' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-055,
'MAKTX' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-072,
'KWMENG' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-058,
'VRKME' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-059,
'NETWR' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-078,
'WAERK' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-061,
'ERDAT' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-057,
'CNAME' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-067,
'SPART' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-062,
'VKORG' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-080,
'LIFSK' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-081,
'VTEXT' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-081,
'RESULT' 'I_DATA' ' ' ' ' ' ' ' ' ' ' ' ' ' ' text-066.
ENDFORM. " ALV_FIELDCAT
*&---------------------------------------------------------------------*
*& Form ALV_LAYOUT
*&---------------------------------------------------------------------*
* Column layout options
*----------------------------------------------------------------------*
* -->P_LAYOUT Structure with layout settings
*----------------------------------------------------------------------*
FORM alv_layout USING layout TYPE slis_layout_alv.
layout-group_change_edit = 'X'. " Allow user to change subtotl format
layout-cell_merge = 'X'. " Not suppress field replication
layout-max_linesize = sy-linsz.
layout-colwidth_optimize = 'X'.
layout-get_selinfos = 'X'. " Activate Selections icon in list displ
layout-info_fieldname = 'COLOR'. " Field name in itab for color code
layout-key_hotspot = 'X'.
layout-group_buttons = 'X'.
layout-no_vline = ' '.
layout-box_fieldname = 'CHECKBOX'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form APPEND_FIELDCAT
*&---------------------------------------------------------------------*
* Fill internal table FIELDCAT with column info
*----------------------------------------------------------------------*
* <--Fieldname
* <--Tabname
* <--Ref_Tabname
* <--Decimals_out
* <--Emphasize Change colour of key field column
* <--Hotspot
* <--Datatype (see value range for domain DATATYPE)
* <--Outputlen
* <--Reptext_DDic
*----------------------------------------------------------------------*
FORM append_fieldcat USING fieldname TYPE slis_fieldname
tabname TYPE slis_tabname
ref_tabname TYPE slis_tabname
just TYPE c
decimals_out TYPE c
emphasize TYPE c
hotspot TYPE c
datatype TYPE dd03p-datatype
outputlen TYPE c
reptext_ddic TYPE dd03p-reptext.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = fieldname.
ls_fieldcat-tabname = tabname.
ls_fieldcat-ref_tabname = ref_tabname.
ls_fieldcat-just = just.
ls_fieldcat-decimals_out = decimals_out.
ls_fieldcat-emphasize = emphasize.
ls_fieldcat-hotspot = hotspot.
ls_fieldcat-datatype = datatype.
ls_fieldcat-outputlen = outputlen.
ls_fieldcat-reptext_ddic = reptext_ddic.
APPEND ls_fieldcat TO fieldcat.
ENDFORM. " APPEND_FIELDCAT
*&---------------------------------------------------------------------*
*& Form ALV_VARIANT_F4
*&---------------------------------------------------------------------*
* Present the user with a list of display variants for this report
*----------------------------------------------------------------------*
* <--P_PA_VARI Display variant
*----------------------------------------------------------------------*
FORM alv_variant_f4 CHANGING pa_vari.
alv_variant-report = repid.
alv_variant-username = sy-uname.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = alv_variant
i_save = 'A'
IMPORTING
es_variant = alv_variant
EXCEPTIONS
OTHERS = 1.
pa_vari = alv_variant-variant.
ENDFORM. " ALV_VARIANT_F4
*&---------------------------------------------------------------------*
*& Form BUILD_LIST_S
*&---------------------------------------------------------------------*
*& build the simple alv list
*&---------------------------------------------------------------------*
*& p1 --> itab = the table used to build the list
*& p2 --> tabname = the name of the table used to build the list
*&---------------------------------------------------------------------*
FORM build_list_s "TABLES m_itab
USING tabname.
* Set GUI status
PERFORM alv_set_status.
* Set up column headings
PERFORM alv_fieldcat USING fieldcat[].
* Set specific list layout options
PERFORM alv_layout USING layout.
* change settings so statistics and sort options don't print on seperate
* page.
PERFORM print_info USING printout.
* Generate the list
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = repid " report id
i_callback_pf_status_set = 'STANDARD' " gui status name
i_callback_user_command = 'USER_CMD'
* USER_CMD = name of form to trigger user selected buttons in pgm
i_structure_name = tabname
is_layout = layout " format options
is_print = printout
it_fieldcat = fieldcat[] " columns for list
i_save = 'A' " allow variant save
is_variant = alv_variant " displ variant struc
it_events = events[] " event table
TABLES
t_outtab = i_data " data table
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.
ENDFORM. " Build_List_s
*&---------------------------------------------------------------------*
* Set GUI status for list display
* Exclude specific icons
*----------------------------------------------------------------------*
FORM alv_set_status.
REFRESH pf_extab.
PERFORM pf_exclude USING:
'&EB3', " More reports icon
'&ABC', " ABC analysis icon
'&XPA', " Expand icon
'&OMP', " Collapse icon
'&AQW'. " MS Word icon
SET PF-STATUS 'STANDARD' EXCLUDING pf_extab.
ENDFORM. " ALV_SET_STATUS
*&---------------------------------------------------------------------*
*& Form PF_EXCLUDE
*&---------------------------------------------------------------------*
* Function codes to exclude from the GUI status
*----------------------------------------------------------------------*
FORM pf_exclude USING p_fcode TYPE rsmpe-func.
extab-fcode = p_fcode.
APPEND extab TO pf_extab.
ENDFORM. " PF_EXCLUDE
*&---------------------------------------------------------------------*
*& Form USER_CMD
*&---------------------------------------------------------------------*
FORM user_cmd USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: refresh LIKE th_bool. " refresh flag
CASE r_ucomm.
WHEN 'EXEC'.
PERFORM process_select.
WHEN '&IC1'. " When the user clicks on a hotspot
* Display the document that the user clicks on in the basic list
CHECK rs_selfield-tabindex > 0.
* Display Sales Order
CLEAR: i_data.
IF rs_selfield-fieldname = 'VBELN'.
READ TABLE i_data INDEX rs_selfield-tabindex.
SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
WHEN 'REFR'.
refresh = th_true.
ENDCASE.
IF refresh = th_true.
PERFORM get_orders.
PERFORM combine_data.
ENDIF.
rs_selfield-refresh = 'X'.
rs_selfield-col_stable = 'X'.
rs_selfield-row_stable = 'X'.
ENDFORM. " USER_CMD
*&---------------------------------------------------------------------*
*& Form get_orders
*&---------------------------------------------------------------------*
FORM get_orders .
REFRESH i_order.
CLEAR i_order.
PERFORM get_order_types.
PERFORM check_orders.
ENDFORM. " get_orders
*&---------------------------------------------------------------------*
*& Form check_orders
*&---------------------------------------------------------------------*
FORM check_orders .
SELECT a~vbeln a~kunnr a~knumv a~auart a~vkorg a~lifsk
b~posnr b~matnr b~pmatn b~spart b~kwmeng b~erdat b~ernam
b~vrkme b~mprok b~netwr b~waerk b~abgru
FROM vbak AS a
INNER JOIN vbap AS b
ON a~vbeln = b~vbeln
INNER JOIN vbup AS c
ON a~vbeln = c~vbeln
AND b~posnr = c~posnr
APPENDING CORRESPONDING FIELDS OF TABLE i_order
WHERE b~erdat IN xerdat
AND a~vbeln IN xvbeln
AND a~auart IN rauart
* hard code removal via check against Fribourg S.org range "EPS Carve out
* AND a~vkorg = 'STIN' "EPS Carve out
AND a~vkorg IN ra_sorg_fribourg "EPS Carve out
and a~lifsk = 'ZC'
AND c~fksta NE 'C'.
IF sy-subrc = 0.
LOOP AT i_order.
IF xkunag IS NOT INITIAL.
IF i_order-kunnr NOT IN xkunag.
DELETE i_order.
CONTINUE.
ENDIF.
CHECK i_order-kunnr IN xkunag.
ENDIF.
* check for Ship To partner
SELECT kunnr FROM vbpa
UP TO 1 ROWS
INTO i_order-kunwe
WHERE vbeln EQ i_order-vbeln
AND parvw EQ 'WE'. " Ship-to partner
ENDSELECT.
IF sy-subrc = 0.
SELECT SINGLE land1 FROM kna1
INTO i_order-lanag
WHERE kunnr EQ i_order-kunwe.
ENDIF.
MODIFY i_order.
ENDLOOP.
ENDIF.
ENDFORM. " check_orders
*&---------------------------------------------------------------------*
*& Form combine_data
*&---------------------------------------------------------------------*
FORM combine_data .
x_data[] = i_data[].
REFRESH i_data.
CLEAR i_data.
SORT i_order BY kunnr kunwe.
LOOP AT i_order.
CLEAR i_data.
MOVE-CORRESPONDING i_order TO i_data.
SELECT SINGLE pernr FROM vbpa
INTO i_data-pernr
WHERE vbeln = i_order-vbeln
AND posnr = '000000'
AND parvw = 'Z2'
AND pernr IN xpernr.
* start rrf20080307 Change so that if there is no Z2 on stock transfer order
* replace CSR number with order creator
if i_data-pernr EQ space.
select single pernr
into (i_data-pernr) from pa0105
where usrid = i_data-ernam
and usrty = '0001'
and endda = '99991231'.
endif.
* end rrf20080307
PERFORM get_block_text.
APPEND i_data.
ENDLOOP.
PERFORM get_addn_data.
ENDFORM. " combine_data
*---------------------------------------------------------------------*
* FORM CALL_TRANSACTION *
*---------------------------------------------------------------------*
* Perform call transaction and process returned messages *
*---------------------------------------------------------------------*
* --> VALUE(TCODE) - TRANSACTION CODE *
*---------------------------------------------------------------------*
FORM call_transaction USING value(tcode).
DATA: mode. "mode for transaction call
mode = p_mode. "Batch Transaction Mode
CLEAR bdcmessages.
REFRESH bdcmessages.
CALL TRANSACTION tcode
USING bdcdata MODE mode UPDATE 'S'
MESSAGES INTO bdcmessages.
retcode = sy-subrc.
CLEAR output_tab.
DELETE ADJACENT DUPLICATES FROM bdcmessages.
LOOP AT bdcmessages.
IF bdcmessages-msgtyp = 'E'.
retcode = 4. "Error actually occurred
ENDIF.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = bdcmessages-msgid " Message ID
msgnr = bdcmessages-msgnr " Message number
msgv1 = bdcmessages-msgv1 " Message variable 1
msgv2 = bdcmessages-msgv2 " Message variable 2
msgv3 = bdcmessages-msgv3 " Message variable 3
msgv4 = bdcmessages-msgv4 " Message variable 4
IMPORTING
message_text_output = output_tab-msg_text.
output_tab-key_gross = header_tab-key_gross.
APPEND output_tab.
ENDLOOP.
ENDFORM. " CALL_TRANSACTION
*&---------------------------------------------------------------------*
*& Form order_approve
*&---------------------------------------------------------------------*
FORM order_approve.
x_data[] = i_data[].
LOOP AT x_data WHERE color NE space.
PERFORM process_order.
ENDLOOP.
ENDFORM. " order_approve
*----------------------------------------------------------------------*
* FORM TRANSFER_DYNPRO *
*----------------------------------------------------------------------*
* This form fills the BDC table. *
*----------------------------------------------------------------------*
* --> PROGRAM - Program name *
* --> DYNPRO - Screen number *
* --> DYNBEGIN - New screen indicator *
* --> FNAM - Field name *
* --> FVAL - Field value *
*----------------------------------------------------------------------*
FORM transfer_dynpro USING program
dynpro
dynbegin
fnam
fval.
* Move the data to the BDC header line.
MOVE: program TO bdcdata-program, " Program name.
dynpro TO bdcdata-dynpro, " Screen number.
dynbegin TO bdcdata-dynbegin, " New screen indicator.
fnam TO bdcdata-fnam, " Field name.
fval TO bdcdata-fval. " Field value.
APPEND bdcdata. " Add record to the BDC table.
CLEAR bdcdata. " Clear the BDC header line.
ENDFORM. "transfer_dynpro
*&---------------------------------------------------------------------*
*& Form PROCESS_SELECT
*&---------------------------------------------------------------------*
* Loop through the displayed list and process the selected records
*----------------------------------------------------------------------*
FORM process_select.
x_data[] = i_data[].
CLEAR: header_tab, output_tab.
REFRESH: header_tab, output_tab.
SORT x_data BY vbeln posnr.
DELETE ADJACENT DUPLICATES FROM x_data COMPARING vbeln posnr.
LOOP AT i_data WHERE checkbox = 'X'.
header_tab-key_gross = header_tab-key_gross + 1.
header_tab-vbeln = i_data-vbeln.
header_tab-posnr = i_data-posnr.
APPEND header_tab.
x_data = i_data.
PERFORM process_order.
* if the order involves multiple items and the user has
* selected all items, only one processing is required.
LOOP AT i_data WHERE checkbox = 'X'
AND vbeln = i_data-vbeln " Order #
AND posnr = i_data-posnr.
CLEAR i_data-checkbox.
MODIFY i_data.
ENDLOOP.
ENDLOOP.
PERFORM show_log.
ENDFORM. " PROCESS_SELECT
*&---------------------------------------------------------------------*
*& Form process_order
*&---------------------------------------------------------------------*
FORM process_order .
CLEAR bdcdata.
REFRESH bdcdata.
PERFORM transfer_dynpro USING:
'SAPMV45A' '0102' 'X' 'VBAK-VBELN' x_data-vbeln, "Order
' ' ' ' ' ' 'BDC_OKCODE' '/00', "Enter
'SAPMV45A' '4001' 'X' 'BDC_OKCODE' '=KDE2', "Goto->Header->Shipping
'SAPMV45A' '4002' 'X' 'BDC_OKCODE' '=SICH', "Save
' ' ' ' ' ' 'VBAK-LIFSK' ' '. "Delivery block
CLEAR retcode.
PERFORM call_transaction USING 'VA02'.
** Set the appropriate colors.
* COLOR is a 4 char field where
* 1st char is C (color property)
* 2nd char is color code from 0 - 7
* 0 = background color
* 1 = blue
* 2 = grey
* 3 = yellow
* 4 = blue/grey
* 5 = green
* 6 = red
* 7 = orange
* 3rd char is intensified (0=off, 1=on)
* 4th char is inverse display (0=off, 1=on)
LOOP AT i_data WHERE vbeln = x_data-vbeln
AND posnr = x_data-posnr.
CASE retcode.
WHEN 0.
MOVE text-038 TO i_data-result.
i_data-color = 'C5'.
WHEN OTHERS.
MOVE text-039 TO i_data-result.
i_data-color = 'C6'.
ENDCASE.
MODIFY i_data.
ENDLOOP.
ENDFORM. " process_order
*&---------------------------------------------------------------------*
*& Form SHOW_LOG
*& (Copied from FI_BYPASS_COMPARE - FORM PRINT_LOG)
*&---------------------------------------------------------------------*
* Pop up screen to display activity log.
*----------------------------------------------------------------------*
FORM show_log.
TYPE-POOLS slis .
* feldbeschreibung production record estimate= 000000020
* as of 2001.12.06
* record size= 696 , total bytes= 13,920
* KB= 13.59 ,MB= 0.01
DATA: feldbeschreibung TYPE slis_fieldcat_alv OCCURS 20 "field catalog
WITH HEADER LINE.
DATA: fremd_tabelle TYPE slis_keyinfo_alv. "key info
DATA: layout TYPE slis_layout_alv. "layout
CLEAR feldbeschreibung.
feldbeschreibung-fieldname = 'VBELN'.
feldbeschreibung-ref_tabname = 'VBAP'.
feldbeschreibung-tabname = 'HEADER_TAB'.
APPEND feldbeschreibung.
CLEAR feldbeschreibung.
feldbeschreibung-fieldname = 'POSNR'.
feldbeschreibung-ref_tabname = 'VBAP'.
feldbeschreibung-tabname = 'HEADER_TAB'.
APPEND feldbeschreibung.
CLEAR feldbeschreibung.
feldbeschreibung-fieldname = 'MSG_TEXT'. "Message text.
feldbeschreibung-outputlen = 120.
feldbeschreibung-datatype = 'CHAR'.
feldbeschreibung-tabname = 'OUTPUT_TAB'.
APPEND feldbeschreibung.
* Foreign table
fremd_tabelle-header01 = 'KEY_GROSS'.
fremd_tabelle-item01 = 'KEY_GROSS'.
* Determine Layout
layout-expand_fieldname = 'TECH'.
layout-expand_all = 'X'. " Expand all
layout-zebra = 'X'.
CONCATENATE sy-title text-012 INTO layout-window_titlebar.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = repid
is_layout = layout
it_fieldcat = feldbeschreibung[]
i_tabname_header = 'HEADER_TAB'
i_tabname_item = 'OUTPUT_TAB'
is_keyinfo = fremd_tabelle
i_screen_start_column = 5
i_screen_start_line = 5
i_screen_end_column = 132
i_screen_end_line = 30
TABLES
t_outtab_header = header_tab[]
t_outtab_item = output_tab[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. " SHOW_LOG
*&---------------------------------------------------------------------*
*& Form get_addn_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_addn_data .
* find material description
x_data[] = i_data[].
SORT x_data BY matnr.
DELETE ADJACENT DUPLICATES FROM x_data COMPARING matnr.
REFRESH xmarav.
DESCRIBE TABLE x_data LINES count1.
IF count1 NE 0.
SELECT matnr spras maktx
FROM marav
INTO CORRESPONDING FIELDS OF TABLE xmarav "index 0
FOR ALL ENTRIES IN x_data
WHERE spras = sy-langu
AND matnr = x_data-matnr.
* make sure at least one description ahs been found for each material
SELECT matnr spras maktx
FROM marav
APPENDING CORRESPONDING FIELDS OF TABLE xmarav "index 0
FOR ALL ENTRIES IN x_data
WHERE spras = 'EN'
AND matnr = x_data-matnr.
SORT xmarav BY matnr.
ENDIF.
* Find Sold-To, Ship-To and CSR partners
x_data[] = i_data[].
SORT x_data BY vbeln.
DELETE ADJACENT DUPLICATES FROM x_data COMPARING vbeln.
REFRESH xvbpa.
DESCRIBE TABLE x_data LINES count1.
IF count1 NE 0.
SELECT vbeln posnr parvw pernr kunnr
FROM vbpa "Sales Document: Partner
APPENDING CORRESPONDING FIELDS OF TABLE xvbpa
FOR ALL ENTRIES IN x_data
WHERE vbeln = x_data-vbeln "Sales document
AND parvw IN rparvw. "Partner func ID
IF sy-subrc = 0.
PERFORM get_csr_info.
REFRESH i_kna1.
PERFORM get_agwe_info USING 'AG'.
PERFORM get_agwe_info USING 'WE'.
SORT xvbpa BY vbeln posnr parvw.
SORT i_kna1 BY kunnr.
SORT xmarav BY spras matnr.
ENDIF.
ENDIF.
* Find Created By names.
PERFORM get_created_by.
x_data[] = i_data[].
sort i_data by vbeln.
delete adjacent duplicates from i_data comparing vbeln.
LOOP AT i_data.
* Total net value and ordered quantity.
clear: i_data-netwr, i_data-kwmeng.
loop at x_data where vbeln = i_data-vbeln.
i_data-netwr = i_data-netwr + x_data-netwr.
i_data-kwmeng = i_data-kwmeng + x_data-kwmeng.
endloop.
* Load material description
READ TABLE xmarav WITH KEY spras = sy-langu
matnr = i_data-matnr BINARY SEARCH.
IF sy-subrc = 0.
WRITE xmarav-maktx TO i_data-maktx.
ELSE.
READ TABLE xmarav WITH KEY spras = 'EN'
matnr = i_data-matnr BINARY SEARCH.
IF sy-subrc = 0.
WRITE xmarav-maktx TO i_data-maktx.
ENDIF.
ENDIF.
* load CSR name
READ TABLE i_knvp WITH KEY pernr = i_data-pernr.
IF sy-subrc = 0.
i_data-ename = i_knvp-ename.
* start rrf20080307 Change so that if there is no Z2 on stock transfer order
* replace CSR name with order creator userid
else.
i_data-ename = i_data-ernam.
ENDIF.
* end rrf20080307
* load Sold To Name
READ TABLE i_kna1 WITH KEY kunnr = i_data-kunnr.
IF sy-subrc = 0.
i_data-namag = i_kna1-name1.
i_data-ortag = i_kna1-ort01.
i_data-regag = i_kna1-regio.
ENDIF.
* load Ship-To name, city, state
READ TABLE i_kna1 WITH KEY kunnr = i_data-kunwe.
IF sy-subrc = 0.
i_data-namwe = i_kna1-name1.
i_data-ortwe = i_kna1-ort01.
i_data-regwe = i_kna1-regio.
i_data-lanwe = i_kna1-land1.
ENDIF.
* Load Created By name
READ TABLE i_cnam WITH KEY ernam = i_data-ernam.
IF sy-subrc = 0.
i_data-cname = i_cnam-cname.
ENDIF.
MODIFY i_data.
ENDLOOP.
ENDFORM. " get_addn_data
*&---------------------------------------------------------------------*
*& Form get_Csr_info
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_csr_info .
tvbpa[] = xvbpa[].
REFRESH i_knvp.
DELETE tvbpa WHERE parvw NE 'Z2'.
SORT tvbpa BY pernr.
DELETE ADJACENT DUPLICATES FROM tvbpa COMPARING pernr.
LOOP AT tvbpa.
SELECT pernr ename endda
UP TO 1 ROWS
INTO CORRESPONDING FIELDS OF i_knvp "index 0
FROM pa0001
WHERE pernr EQ tvbpa-pernr
ORDER BY endda DESCENDING.
APPEND i_knvp.
ENDSELECT.
ENDLOOP.
ENDFORM. " get_Csr_info
*&---------------------------------------------------------------------*
*& Form get_agwe_info
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_agwe_info USING p_parvw.
tvbpa[] = xvbpa[].
DELETE tvbpa WHERE parvw NE p_parvw.
SORT tvbpa BY kunnr.
DELETE ADJACENT DUPLICATES FROM tvbpa COMPARING kunnr.
DESCRIBE TABLE tvbpa LINES count1.
IF count1 NE 0.
SELECT kunnr name1 ort01 regio land1 FROM kna1
APPENDING CORRESPONDING FIELDS OF TABLE i_kna1
FOR ALL ENTRIES IN tvbpa
WHERE kunnr EQ tvbpa-kunnr.
ENDIF.
ENDFORM. " get_agwe_info
*&---------------------------------------------------------------------*
*& Form PRINT_INFO
*&---------------------------------------------------------------------*
* This form sets the indicators so that the sort and statistics page *
* don't print. *
*----------------------------------------------------------------------*
* -->PRINTOUT Layout
*----------------------------------------------------------------------*
FORM print_info USING printout TYPE slis_print_alv.
printout-no_print_listinfos = 'X'.
printout-no_coverpage = 'X'.
printout-no_print_selinfos = 'X'.
ENDFORM. " PRINT_INFO
*&---------------------------------------------------------------------*
*& Form get_created_by
*&---------------------------------------------------------------------*
FORM get_created_by .
CLEAR i_cnam.
REFRESH i_cnam.
x_data[] = i_data[].
SORT x_data BY ernam.
DELETE ADJACENT DUPLICATES FROM x_data COMPARING ernam.
DATA : l_add TYPE addr3_val, " structure for address data
l_usr03 TYPE usr03. " structure for other user data
LOOP AT x_data.
* get the NOVA user's address first.
CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
EXPORTING
user_name = x_data-ernam
IMPORTING
user_address = l_add
user_usr03 = l_usr03
EXCEPTIONS
user_address_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
i_cnam-ernam = x_data-ernam.
CONCATENATE l_usr03-name1 l_usr03-name2 INTO i_cnam-cname
SEPARATED BY space.
APPEND i_cnam.
ENDIF.
ENDLOOP.
SORT i_cnam BY ernam.
ENDFORM. " get_created_by
*&---------------------------------------------------------------------*
*& Form get_order_types
*&---------------------------------------------------------------------*
FORM get_order_types .
REFRESH rauart.
CLEAR rauart.
SELECT valfrom FROM setleaf
INTO CORRESPONDING FIELDS OF setleaf
WHERE setclass = '0000'
AND setname = 'ZSD_ORDER_APPROVAL'.
MOVE: 'EQ' TO rauart-option,
'I' TO rauart-sign.
rauart-low = setleaf-valfrom.
APPEND rauart.
ENDSELECT.
IF sy-subrc NE 0.
MOVE: 'EQ' TO rauart-option,
'I' TO rauart-sign.
rauart-low = 'ZIOR'.
APPEND rauart.
ENDIF.
ENDFORM. " get_order_types
*&---------------------------------------------------------------------*
*& Form get_block_text
*&---------------------------------------------------------------------*
form get_block_text .
*Get Order Reason for Delivery Block text
read table itvlst with key lifsp = i_data-lifsk
binary search.
if sy-subrc = 0.
i_data-vtext = itvlst-vtext.
else.
select single vtext from tvlst
into i_data-vtext
where spras = sy-langu
and lifsp = i_data-lifsk.
itvlst-vtext = i_data-vtext.
itvlst-lifsp = i_data-lifsk.
append itvlst.
sort itvlst by lifsp.
endif.
endform. " get_block_text
INCLUDE zca_constants_form. "sysId constants forms "EPS Carve out
2012 Aug 29 4:06 PM
2012 Aug 30 9:59 PM
Ravi, there are some standard demo programs and they give an insight into many features of ALV.
Please look into BCALV_GRID_01- this has an example of ALV on a container.