09-09-2014 3:51 PM
Hi guys
I have a problem with adding row select option to my ALV.
Here's my code:
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ZDEF_INTRASTAT'
CHANGING
CT_FIELDCAT = lt_fcat[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
DATA: g_variant TYPE disvariant,
g_layo TYPE slis_layout_alv.
g_layo-info_fieldname = 'COLOR'.
g_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'SUB_PF_STATUS'
is_layout = g_layo
it_fieldcat = lt_fcat
i_save = 'A'
is_variant = g_variant
TABLES
t_outtab = gt_dane
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
FORM sub_pf_status USING rt_extab TYPE slis_t_extab..
SET PF-STATUS 'ZSTANDARD'.
ENDFORM.
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
IF r_ucomm EQ 'CTR'.
call TRANSACTION 'SM30'. "calling transaction sm30 with by button called CTR
ENDIF.
ENDFORM.
and my table look like this:
If I add: "g_layo-box_fieldname = 'SELECT'." it looks like I would like it to be (select squares, marked red):
But if I press any button I some big error (I copied text to dump.txt file).
Can anyone help me with this error?
Best regards,
Bartlomiej
09-09-2014 9:11 PM
So maybe I'll ask another question. What is the easiest way to get those select squares (like on second image)?
If I click on any cell in table from first image the whole row is highlighted, does it mean that it is also selected? I am asking, because I want to call transaction with my button and pass some values (or I will read a little about batch input).
Regards.
09-09-2014 4:01 PM
09-09-2014 6:07 PM
No, it doesn't, that's whole code:
report zdef_intrastat.
tables:
veiav, makt.
type-pools: slis.
include:
zdef_intrastat_data,
zdef_intrastat_selscr,
zdef_intrastat_events.
Everything connected to ALV (like previous code I posted) is in "zdef_intrastat_events"
09-09-2014 6:15 PM
Hi
You've add this code line:
g_layo-box_fieldname = 'SELECT'.
That means the internal table (GT_DANE) used to show the data by ALV has to have a field called SELECT, this field will be used to save the selection.
I suppose the dump occur because your table hasn't that field
If you want to use it, you need to insert that field in your internal table.(GT_DANE)
So you need to decide how to add that field in GT_DANE, because I suppose it's defined as dictionary table (ZDEF_INTRASTAT), and I don't believe it's a good solution to change it.
Probably you can define a dictionary structure includes ZDEF_INTRASTAT and here you can add SELECT field
Of course if ZDEF_INTRASTAT is a structure you can try to change it
Max
09-09-2014 9:11 PM
So maybe I'll ask another question. What is the easiest way to get those select squares (like on second image)?
If I click on any cell in table from first image the whole row is highlighted, does it mean that it is also selected? I am asking, because I want to call transaction with my button and pass some values (or I will read a little about batch input).
Regards.
09-09-2014 9:26 PM
REPORT zu_mm_mat_trf_post NO STANDARD PAGE HEADING
LINE-SIZE 256
LINE-COUNT 60
MESSAGE-ID zm.
************************************************************************
* Table Declaration *
************************************************************************
************************************************************************
* Constants Declaration *
************************************************************************
CONSTANTS : c_yes TYPE c VALUE '1' ,
c_no TYPE c VALUE '0' .
************************************************************************
* Data Types Declaraction *
************************************************************************
TYPE-POOLS: slis.
TYPES: BEGIN OF type_marc,
matnr LIKE marc-matnr,
qty LIKE mseg-erfmg,
END OF type_marc,
BEGIN OF ty_final,
check TYPE c,
matnr TYPE marc-matnr,
maktx TYPE makt-maktx,
werks TYPE vbap-werks,
* menge TYPE mseg-erfmg,
menge(10),
meins TYPE mara-meins,
menge1 TYPE mseg-menge,
bal TYPE mseg-menge,
field_style TYPE lvc_t_styl, "FOR DISABLE
END OF ty_final,
BEGIN OF ty_mard,
matnr TYPE mard-matnr,
werks TYPE mard-werks,
lgort TYPE mard-lgort,
labst TYPE mard-labst,
END OF ty_mard,
BEGIN OF ty_ctu_params ,
dismode TYPE ctu_params-dismode,
updmode TYPE ctu_params-updmode,
cattmode TYPE ctu_params-cattmode,
defsize TYPE ctu_params-defsize,
racommit TYPE ctu_params-racommit,
nobinpt TYPE ctu_params-nobinpt,
nobiend TYPE ctu_params-nobiend,
END OF ty_ctu_params.
DATA : it_final TYPE TABLE OF ty_final,
it_mard TYPE TABLE OF ty_mard,
it_final1 TYPE TABLE OF ty_final.
DATA : wa_final TYPE ty_final,
wa_final1 TYPE ty_final,
wa_mard TYPE ty_mard.
DATA: BEGIN OF stb OCCURS 1000.
INCLUDE STRUCTURE stpox.
DATA: END OF stb.
DATA: BEGIN OF topmat.
INCLUDE STRUCTURE cstmat.
DATA: END OF topmat.
DATA : dstst_flg LIKE csdata-xfeld.
DATA: BEGIN OF matcat OCCURS 50.
INCLUDE STRUCTURE cscmat.
DATA: END OF matcat.
DATA : stlal LIKE stko-stlal,
stlan LIKE stzu-stlan,
date LIKE stko-datuv.
DATA : t_ctu_params TYPE TABLE OF ty_ctu_params.
DATA : wa_ctu_params TYPE ctu_params .
DATA : l_file TYPE ibipparms-path,
text1(100),
ans.
************************************************************************
* Internal Tables Declaration *
************************************************************************
* Batch input data of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,
* Messages of call transaction
msgtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
msgline(100).
DATA : it_marc TYPE TABLE OF type_marc,
t_marc TYPE type_marc ,
wa_marc TYPE type_marc ,
v_index(3) TYPE n,
v_index1(2) TYPE n,
v_fname LIKE bdcdata-fnam.
DATA : it_file LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA file_path LIKE rlgrap-filename.
************************************************************************
*---------------------- ALV Declaration ----------------------------*
************************************************************************
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: it_fieldcat TYPE lvc_t_fcat, "slis_t_fieldcat_alv WITH HEADER LINE,
wa_fieldcat TYPE lvc_s_fcat,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE lvc_s_layo, "slis_layout_alv,
gd_repid LIKE sy-repid,
events TYPE slis_t_event,
wa_events TYPE slis_alv_event,
v_rname TYPE sy-repid VALUE sy-repid.
************************************************************************
* Selection Screen Declaration *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : werks TYPE marc-werks OBLIGATORY DEFAULT '956' ,
lgort TYPE mard-lgort OBLIGATORY,
rgort TYPE mard-lgort OBLIGATORY DEFAULT 'RIP',
refer TYPE mkpf-bktxt OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS : p_opt1 TYPE c RADIOBUTTON GROUP radi USER-COMMAND op1,
p_opt2 TYPE c RADIOBUTTON GROUP radi DEFAULT 'X' .
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS : matnr TYPE mara-matnr OBLIGATORY MODIF ID op1,
menge TYPE mseg-erfmg OBLIGATORY MODIF ID op1.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_file LIKE rlgrap-filename MODIF ID op2.
SELECTION-SCREEN END OF BLOCK b4.
AT SELECTION-SCREEN OUTPUT .
LOOP AT SCREEN .
IF screen-group1 = 'OP1' .
* CLEAR : p_objky ,p_posex .
IF p_opt1 = 'X' .
screen-invisible = c_no .
screen-active = c_yes .
ELSE.
screen-invisible = c_yes .
screen-active = c_no .
ENDIF.
MODIFY SCREEN .
ENDIF.
IF screen-group1 = 'OP2' .
IF p_opt2 = 'X' .
* REFRESH : p_objky1.
screen-invisible = c_no .
screen-active = c_yes .
ELSE.
screen-invisible = c_yes .
screen-active = c_no .
ENDIF.
MODIFY SCREEN .
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM f4help USING p_file.
************************************************************************
* Start of Selection Declaration *
************************************************************************
START-OF-SELECTION.
PERFORM f_get_data.
PERFORM fill_events_tab.
PERFORM display_data.
************************************************************************
*&---------------------------------------------------------------------*
*& Form f_get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_get_data .
IF p_opt2 = 'X' .
*EXCEL TO INTERNAL TABLE
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = l_file
i_begin_col = '1'
i_begin_row = '2'
i_end_col = '2'
i_end_row = '9999'
TABLES
intern = it_file
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 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.
LOOP AT it_file.
CASE it_file-col.
WHEN '0001'.
MOVE it_file-value TO wa_marc-matnr.
WHEN '0002'.
MOVE it_file-value TO wa_marc-qty.
ENDCASE.
AT END OF row.
APPEND wa_marc TO it_marc .
CLEAR wa_marc.
ENDAT.
ENDLOOP.
LOOP AT it_marc INTO wa_marc.
stlan = 3.
stlal = 1.
date = sy-datum .
*FM TO EXPLODE BOM TILL LAST LEVEL.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = 'PP01'
datuv = date
mehrs = 'X'
mtnrv = wa_marc-matnr
stlal = stlal
stlan = stlan
werks = werks
IMPORTING
topmat = topmat
dstst = dstst_flg
TABLES
stb = stb
matcat = matcat
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
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 stb.
wa_final1-matnr = stb-idnrk . "MATERIAL
wa_final1-meins = stb-meins . "QTY
wa_final1-maktx = stb-ojtxp . "DESC
wa_final1-werks = stb-werks . " PLANT
wa_final1-menge = stb-menge . "QTY
APPEND wa_final1 TO it_final1.
ENDLOOP.
*FOR QTY IN STORAGE LOC.
SELECT matnr
werks
lgort
labst
FROM mard
INTO TABLE it_mard
FOR ALL ENTRIES IN it_final1
WHERE matnr = it_final1-matnr AND
werks = it_final1-werks AND
lgort = lgort.
LOOP AT it_final1 INTO wa_final1.
READ TABLE it_mard INTO wa_mard WITH KEY matnr = wa_final1-matnr
werks = wa_final1-werks
lgort = lgort.
IF sy-subrc = 0.
wa_final1-menge1 = wa_mard-labst.
ENDIF.
* req qty = req qty / base qty * qty of the bom.
wa_final1-menge = ( wa_marc-qty / topmat-bmeng ) * wa_final1-menge.
wa_final1-bal = wa_final1-menge1 - wa_final1-menge .
MODIFY it_final1 FROM wa_final1 .
CLEAR : wa_final1 .
ENDLOOP.
APPEND LINES OF it_final1 TO it_final.
CLEAR : wa_final1.
REFRESH it_final1 .
ENDLOOP.
ENDIF.
IF p_opt1 = 'X'.
stlan = 3.
stlal = 1.
date = sy-datum .
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = 'PP01'
datuv = date
mehrs = 'X'
mtnrv = matnr
stlal = stlal
stlan = stlan
werks = werks
IMPORTING
topmat = topmat
dstst = dstst_flg
TABLES
stb = stb
matcat = matcat
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
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 stb.
wa_final-matnr = stb-idnrk .
wa_final-meins = stb-meins .
wa_final-maktx = stb-ojtxp .
wa_final-werks = stb-werks .
wa_final-menge = stb-menge .
APPEND wa_final TO it_final.
ENDLOOP.
SELECT matnr
werks
lgort
labst
FROM mard
INTO TABLE it_mard
FOR ALL ENTRIES IN it_final
WHERE matnr = it_final-matnr AND
werks = it_final-werks AND
lgort = lgort.
LOOP AT it_final INTO wa_final.
READ TABLE it_mard INTO wa_mard WITH KEY matnr = wa_final-matnr
werks = wa_final-werks
lgort = lgort.
IF sy-subrc = 0.
wa_final-menge1 = wa_mard-labst.
ENDIF.
* req qty = req qty / base qty * qty of the bom.
wa_final-menge = ( menge / topmat-bmeng ) * wa_final-menge.
wa_final-bal = wa_final-menge1 - wa_final-menge .
MODIFY it_final FROM wa_final.
CLEAR : wa_final .
ENDLOOP.
ENDIF.
ENDFORM. "f_get_data
*&--------------------------------------------------------------------*
*& Form fill_events_tab
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* FOR HANDELING PFSTATUS AND COMMANDS
FORM fill_events_tab.
CLEAR wa_events.
wa_events-name = 'USER_COMMAND'.
wa_events-form = 'VALIDATE_COMMAND'.
APPEND wa_events TO events.
CLEAR wa_events.
wa_events-name = 'PF_STATUS_SET'.
wa_events-form = 'ATTACH_STATUS'.
APPEND wa_events TO events.
ENDFORM. "fill_events_tab
*&--------------------------------------------------------------------*
*& Form ATTACH_STATUS
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM attach_status USING ex_tab TYPE slis_t_extab.
SET PF-STATUS 'ZMM_MAT_TRF_POSTSTAT' EXCLUDING ex_tab .
ENDFORM. "ATTACH_STATUS
*&--------------------------------------------------------------------*
*& Form VALIDATE_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM validate_command USING ucomm LIKE sy-ucomm
sel_det TYPE slis_selfield.
CASE ucomm .
WHEN '&UPLOAD'.
DATA: ref1 TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref1.
CALL METHOD ref1->check_changed_data.
****to refresh alv display*************
wa_ctu_params-defsize = 'X'.
wa_ctu_params-dismode = 'N'.
wa_ctu_params-updmode = 'X'.
REFRESH bdcdata.
PERFORM populate.
CALL TRANSACTION 'MB1B' USING bdcdata OPTIONS FROM wa_ctu_params MESSAGES INTO
msgtab .
LOOP AT msgtab.
CALL FUNCTION 'MASS_MESSAGE_GET'
EXPORTING
* SPRSL = SY-LANGU
arbgb = msgtab-msgid
msgnr = msgtab-msgnr
msgv1 = msgtab-msgv1
msgv2 = msgtab-msgv2
msgv3 = msgtab-msgv3
msgv4 = msgtab-msgv4
IMPORTING
msgtext = text1.
* EXCEPTIONS
* MESSAGE_NOT_FOUND = 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.
CALL FUNCTION 'POPUP_FOR_INTERACTION'
EXPORTING
headline = 'DOCUMENT INFORMATION'
text1 = text1
* TEXT2 = ' '
* TEXT3 = ' '
* TEXT4 = ' '
* TEXT5 = ' '
* TEXT6 = ' '
* TICON = 'I'
button_1 = 'OK'
button_2 = 'Leave Program'
* BUTTON_3 = ' '
IMPORTING
button_pressed = ans
.
IF ans = 1.
*LEAVE PROGRAM.
*perform display_data.
DELETE it_final WHERE check EQ 'X'.
sel_det-refresh = 'X'.
sel_det-col_stable = 'X' .
sel_det-row_stable = 'X' .
ENDIF.
IF ans = 2.
LEAVE PROGRAM.
ENDIF.
ENDLOOP.
PERFORM message-custom.
REFRESH msgtab.
CLEAR msgtab.
WHEN '&SELECT'.
LOOP AT it_final INTO wa_final WHERE bal GE 0.
wa_final-check = 'X'.
MODIFY it_final FROM wa_final.
sel_det-refresh = 'X'.
sel_det-col_stable = 'X' .
sel_det-row_stable = 'X' .
ENDLOOP.
WHEN '&DSELECT'.
LOOP AT it_final INTO wa_final WHERE bal GE 0.
wa_final-check = ' '.
MODIFY it_final FROM wa_final.
sel_det-refresh = 'X'.
sel_det-col_stable = 'X' .
sel_det-row_stable = 'X' .
ENDLOOP.
WHEN OTHERS .
ENDCASE.
ENDFORM. "VALIDATE_COMMAND
*&--------------------------------------------------------------------*
*& Form display_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM display_data .
PERFORM set_specific_field_attributes.
PERFORM build_layout.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CHECK'.
wa_fieldcat-scrtext_m = 'Checkbox'.
wa_fieldcat-checkbox = 'X'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-col_pos = 1.
wa_fieldcat-outputlen = '15'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-scrtext_m = 'Material'.
wa_fieldcat-outputlen = '10'.
wa_fieldcat-col_pos = 2.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-scrtext_m = 'DESCRIPTION'.
wa_fieldcat-outputlen = '15'.
wa_fieldcat-col_pos = 3.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MENGE'.
* wa_fieldcat-edit = 'X'.
wa_fieldcat-scrtext_m = 'REQ. QTY'.
wa_fieldcat-outputlen = '15'.
wa_fieldcat-col_pos = 4.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MEINS'.
wa_fieldcat-scrtext_m = 'UNIT'.
wa_fieldcat-outputlen = '15'.
wa_fieldcat-col_pos = 5.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MENGE1'.
wa_fieldcat-scrtext_m = 'Stock on StL'.
wa_fieldcat-outputlen = '15'.
wa_fieldcat-col_pos = 6.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BAL'.
wa_fieldcat-scrtext_m = 'BALANCE'.
wa_fieldcat-outputlen = '15'.
wa_fieldcat-col_pos = 7.
APPEND wa_fieldcat TO it_fieldcat.
* CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
* i_callback_program = v_rname
** i_grid_title = 'report name'
** is_layout = layout
* it_fieldcat = it_fieldcat
* it_events = events
* TABLES
* t_outtab = it_final
* EXCEPTIONS
* program_error = 1
* OTHERS = 2.
*
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = v_rname
* i_callback_user_command = 'USER_COMMAND'
is_layout_lvc = gd_layout
it_fieldcat_lvc = it_fieldcat
it_events = events
i_save = 'X'
TABLES
t_outtab = it_final
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. "display_data
*&--------------------------------------------------------------------*
*& Form populate
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM populate.
PERFORM bdc_dynpro USING 'SAPMM07M' '0400'.
PERFORM bdc_field USING 'BDC_CURSOR'
'XFULL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'MKPF-BKTXT'
refer.
PERFORM bdc_field USING 'RM07M-BWARTWA'
'313'.
PERFORM bdc_field USING 'RM07M-WERKS'
werks.
PERFORM bdc_field USING 'RM07M-LGORT'
lgort.
PERFORM bdc_field USING 'XFULL'
' '.
PERFORM bdc_field USING 'RM07M-WVERS2'
'X'.
PERFORM bdc_dynpro USING 'SAPMM07M' '0421'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSEG-ERFME(01)'.
PERFORM bdc_field USING 'MSEGK-UMLGO'
rgort.
* DELETE it_final WHERE check NE 'X'.
LOOP AT it_final INTO wa_final WHERE check ='X'.
v_index = v_index + 1.
IF v_index = '008'.
PERFORM bdc_field USING 'BDC_SUBSCR'
'SAPMM07M'.
PERFORM bdc_field USING 'BDC_SUBSCR'
'SAPLKACB'.
PERFORM bdc_dynpro USING 'SAPMM07M'
'0421'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=NLE'.
PERFORM bdc_field USING 'BDC_SUBSCR'
'SAPMM07M'.
PERFORM bdc_field USING 'BDC_SUBSCR'
'SAPLKACB'.
PERFORM bdc_dynpro USING 'SAPMM07M'
'0421'.
CLEAR v_index.
v_index = v_index + 1.
ENDIF.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
CONCATENATE 'MSEG-MATNR(' v_index ')' INTO v_fname.
PERFORM bdc_field USING v_fname
wa_final-matnr.
CLEAR v_fname.
CONCATENATE 'MSEG-ERFMG(' v_index ')' INTO v_fname.
PERFORM bdc_field USING v_fname
wa_final-menge.
CLEAR v_fname.
CONCATENATE 'MSEG-ERFME(' v_index ')' INTO v_fname.
PERFORM bdc_field USING v_fname
wa_final-meins.
CLEAR v_fname.
ENDLOOP.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPMM07M'
'0421'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSEG-ERFME(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
CLEAR :v_index .
ENDFORM. "populate
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD
*&--------------------------------------------------------------------*
*& Form message-custom
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM message-custom.
ENDFORM . "message-custom
*&--------------------------------------------------------------------*
*& Form f4help
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->T_FILE text
*---------------------------------------------------------------------*
FORM f4help USING t_file.
*GO GET FILE NAME
CALL FUNCTION 'F4_FILENAME'
* EXPORTING
* PROGRAM_NAME = SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
* FIELD_NAME = ' '
IMPORTING
file_name = l_file.
t_file = l_file.
ENDFORM. "f4help
*&--------------------------------------------------------------------*
*& Form set_specific_field_attributes
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM set_specific_field_attributes .
DATA ls_stylerow TYPE lvc_s_styl .
DATA lt_styletab TYPE lvc_t_styl .
LOOP AT it_final INTO wa_final.
IF wa_final-bal LE 0.
ls_stylerow-fieldname = 'CHECK' .
ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
"set field to disabled
APPEND ls_stylerow TO wa_final-field_style.
MODIFY it_final FROM wa_final.
ENDIF.
ENDLOOP.
ENDFORM. "set_specific_field_attributes
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.
* Set layout field for field attributes(i.e. input/output)
gd_layout-stylefname = 'FIELD_STYLE'.
gd_layout-zebra = ' '.
ENDFORM. " BUILD_LAYOU
this code may help you . here i am using check box and then using call txn method for selected records .
09-10-2014 9:18 AM
Hi
You should post how GT_DANE is defined in your program,
for example of your defination is like this:
DATA GT_DANE LIKE STANDARD TABLE OF ZDEF_INTRASTAT.
or equivalent definitions:
DATA GT_DANE LIKE ZDEF_INTRASTAT OCCURS 0.
You can try to replace it with this definition:
DATA: BEGIN OF GT_DANE 0CCURS 0.
INCLUDE STRUCTURE ZDEF_INTRASTAT.
DATA: SELECT TYPE FLAG,
END OF GT_DANE 0CCURS 0.
In this way now the internal table GT_DANE has a field caled SELECT to be used for marker in ALV GRID
Max
09-10-2014 9:34 AM
Thanks, Max, your solution worked and I didn't have to change my code a lot.
09-10-2014 6:19 AM
Hi, Bartlomiej!
What is the easiest way to get those select squares (like on second image)?
One option for you is using checkboxes in a 1st field (as Mahesh suggested) so that user can select the necessary records. But I don't like that style because if you have 50 records on screen and you need to select 30 of them it's much easier to use a "built-in" solution instead of ticking every row. Just add the next line for your layout:
g_layo-sel_mode = 'A'.
And you'll get standard selection buttons to the left of your ALV table.
09-10-2014 8:15 AM
I tried this before, but I got error:
The data object "G_LAYO" has no component called "SEL_MODE". but there is a component called "EDIT_MODE".
09-10-2014 8:45 AM
Ah, sorry, I didn't notice you are using 'REUSE_ALV_GRID_DISPLAY'. I guess, in that case you'll have to add SELECT column in your outtab as Max suggested.
But you can try to use 'REUSE_ALV_GRID_DISPLAY_LVC' instead. Then you'll be able to set g_layo-sel_mode (it's of type LVC_S_LAYO there).
09-10-2014 6:54 AM
09-10-2014 8:43 AM
Hi Bartlomiej,
lf ur layout g_layo is define as following
DATA: g_layo TYPE lvc_s_layo.
Then you can easily achieve your requirement of selection of records from the alv grid display just by adding the one line in your code.
g_layo-sel_mode = 'A'.
With the above line you can solve your issue.
Regards,
Chakradhar.
09-10-2014 9:19 AM
So I changed this:
g_layo TYPE slis_layout_alv.
to this:
g_layo TYPE lvc_s_layo,
Then I called function 'REUSE_ALV_GRID_DISPLAY_LVC' instead of 'REUSE_ALV_GRID_DISPLAY'.I also had to change type of "lt_fcat" from SLIS_T_FIELDCAT_ALV to LVC_T_FCAT.
Now I can't use 'REUSE_ALV_FIELDCATALOG_MERGE' because of "lt_fcat's" wrong type.
I also get dump: "NO_FIELDCATALOG_AVAILABLE".
My task is to select one row from my ALV, then press my button and get the edit screen which you can access by opening transaction SM30, fill necessary fieds, get table select one row, press "Details" (crtl+shift+2) and get that final screen.
09-10-2014 9:32 AM
Hi
As I've suggested you you need to update the definition of your internal table: that's all?
Have you done it?
Can you post how you defined your internal table?
Max
09-10-2014 9:36 AM
If you stll want to see it:
gt_dane TYPE STANDARD TABLE OF ZDEF_INTRASTAT.
And I changed it like you suggested.
Thank you one more time.
09-10-2014 2:31 PM
I have next question, but it doesn't have to be solved. Here's my code:
PERFORM bdc_dynpro USING 'SAPMSVMA' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'VIMDYNFLDS-LTD_DTA_AR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=UPD'.
PERFORM bdc_field USING 'VIEWNAME' 'VEIAV'.
PERFORM bdc_field USING 'VIMDYNFLDS-LTD_DTA_NO' ''.
PERFORM bdc_field USING 'VIMDYNFLDS-LTD_DTA_AR' 'X'.
PERFORM bdc_dynpro USING 'SAPLSVIX' '0210'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MARK_CHECKBOX(11)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=OKAY'.
PERFORM bdc_field USING 'MARK_CHECKBOX(01)' 'X'.
PERFORM bdc_field USING 'MARK_CHECKBOX(11)' 'X'.
PERFORM bdc_dynpro USING 'SAPLSVIX' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'D0100_FIELD_TAB-LOWER_LIMIT(02)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=OKAY'.
PERFORM bdc_field USING 'D0100_FIELD_TAB-LOWER_LIMIT(01)' lv_datumjahr.
PERFORM bdc_field USING 'D0100_FIELD_TAB-LOWER_LIMIT(02)' lv_belegnumr.
PERFORM bdc_dynpro USING 'SAPLVINT' '0150'.
PERFORM bdc_field USING 'BDC_CURSOR' 'VEIAV-BELEGIDEN'.
In my program I choose a row from table, press my buton and it takes me to wanted edit mode.
Let's say that screen with my table is number 1, "edit mode" is 4th, two screens are ommited (selection screen for view VEIAV and the result of this selection screen).
Is there any possibilty to press back or exit button (esc, F3, whatever) and take user from screen 4 directly to screen 1?
Regards.
09-10-2014 2:38 PM
Hi
Try to use fm VIEW_MAINTENANCE_CALL instead of a BDC based on SM30 or a SUBMIT of RVEXVEF1 program
Max
09-11-2014 9:46 AM