11-22-2017 12:07 PM
Hi , does anyone know how to make half screen alv grid, half screen tabs that will have some PERFORM fields from ALV GRID? Thanks in advance. Please find below my code :
REPORT Z_DATE_BAZA_PF.
TABLES MAKT.
TABLES MVKE.
TABLES T178T.
TABLES MARA.
TABLES MARC.
TABLES T002.
TYPE-POOLS: slis. " SLIS contains all the ALV data types
DATA: MyGridTitle TYPE LVC_TITLE.
DATA: report_id LIKE sy-repid.
DATA: MyLayout TYPE slis_layout_alv. "alv layout
DATA: afield TYPE slis_fieldcat_alv.
*DATA: it_sort TYPE slis_t_sortinfo_alv.
DATA: it1_sort TYPE slis_t_sortinfo_alv.
*DATA: wa_sort TYPE slis_sortinfo_alv.
DATA: it_filter TYPE slis_t_filter_alv.
Data: ls_filter TYPE slis_filter_alv.
DATA: FIELDCATALOG TYPE slis_t_fieldcat_alv, "WITH HEADER LINE,
GD_LAYOUT TYPE slis_layout_alv,
G_SAVE TYPE C VALUE 'X',
G_VARIANT TYPE DISVARIANT,
GX_STOC TYPE DISVARIANT,
G_EXIT TYPE C.
DATA: MyEvents TYPE slis_t_event.
DATA: it_sort TYPE slis_t_sortinfo_alv,
wa_sort TYPE slis_sortinfo_alv..
data: MySwitch_Acces(3) Type c.
Data: MySwitch_Unit(3) Type c.
Data: MySwitch_Depozit(3) Type c.
CONSTANTS MySpras(2) VALUE '4'.
DATA: LowUnit(7) TYPE c.
DATA: LowDivizia(5) TYPE c.
Data: wTxt1(50) type C.
DATA: PRIVILEG_USER(100) type c VALUE 'K_ABAP,K_BASIS,K_PRG,PRG_IT'.
DATA: w_layout TYPE lvc_s_layo.
DATA number TYPE sy-dynnr.
data: ok_code type SY-UCOMM.
DATA: GV_FLAG TYPE CHAR1.
DATA: name TYPE vrm_id,
list TYPE vrm_values,
value LIKE LINE OF list,
save_ok TYPE sy-ucomm.
DATA: GV_SCR TYPE SY-DYNNR.
TYPES: BEGIN OF ROWUSERS,
RECORD_ID LIKE ZUSERS-RECORD_ID,
USER_NAME LIKE ZUSERS-USER_NAME,
PROG_NAME LIKE ZUSERS-PROG_NAME,
REPO_TITLE LIKE ZUSERS-REPO_TITLE,
OPTIONS LIKE ZUSERS-OPTIONS,
UNITLOG LIKE ZUSERS-UNITLOG,
DOMENII LIKE ZUSERS-DOMENII,
CONTMAT LIKE ZUSERS-CONTMAT,
DEPOZITE LIKE ZUSERS-DEPOZITE,
DIVIZII LIKE ZUSERS-DIVIZII,
PCTLUCR LIKE ZUSERS-PCTLUCR,
CENTPROF LIKE ZUSERS-CENTPROF,
PROG_PROD LIKE ZUSERS-PROG_PROD,
RETETE LIKE ZUSERS-RETETE,
SERVICII LIKE ZUSERS-SERVICII,
ACCES LIKE ZUSERS-ACCES,
LOWDATA LIKE ZUSERS-LOWDATA,
HIGHDATA LIKE ZUSERS-HIGHDATA,
FLAG(1) TYPE C,
LINE_KOLOR(4) TYPE C,
END OF ROWUSERS.
*
DATA: ARTUSERS TYPE ROWUSERS,
ARTPROGR TYPE ROWUSERS,
ITUSERS TYPE STANDARD TABLE OF ROWUSERS INITIAL SIZE 0,
ITPROGR TYPE STANDARD TABLE OF ROWUSERS INITIAL SIZE 0.
DATA: FIELDCATALOG2 TYPE lvc_s_fcat OCCURS 0,
G_VARIANT2 TYPE DISVARIANT.
"DATA: afield type lvc_s_fcat.
DATA: Splitter_1 TYPE REF TO cl_gui_splitter_container,
Container TYPE REF TO cl_gui_custom_container,
Container_1 TYPE REF TO cl_gui_container,
Container_2 TYPE REF TO cl_gui_container,
Grid1 TYPE REF TO cl_gui_alv_grid,
Grid2 TYPE REF TO cl_gui_alv_grid.
DATA: G_container TYPE scrfname VALUE 'CCONTAINER'.
TYPE-POOLS cndp.
call screen 100.
TYPES: BEGIN OF tables_fields,
WERKS TYPE MARC-WERKS, "Unitate logistica
"MATNR TYPE MARC-MATNR, "Cod material
MATNR TYPE MARA-MATNR, "Cod material
MAKTX TYPE MAKT-MAKTX, "Date de baza 1->Descriere material
KONDM TYPE MVKE-KONDM, "Vanzari 2 ->GrupCalcPretMaterial cod
VTEXT TYPE T178T-VTEXT, "Vanzari 2 ->GrupCalcPretMaterial descriere
GROES TYPE MARA-GROES, "Date de baza 1 -> Marime/ Dimensiuni
SPRAS TYPE MAKT-SPRAS,
TEXTPRI(250) TYPE c, "Text date principale.
TEXTVER(75) TYPE C, "Text verificare.
COMINT(75) TYPE C, "Comentariu intern.
TEXTVANZ(75) TYPE C, "Text vanzari.
"vbeln Type VBAK-VBELN,
"POSNR TYPE VBAK-POSNR,
END OF tables_fields.
DATA: lt_join TYPE STANDARD TABLE OF tables_fields,
wa_join TYPE tables_fields.
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE text-001.
SELECT-OPTIONS UnitLog FOR MARC-WERKS DEFAULT '3000'. " Unitate logistica
SELECT-OPTIONS Material FOR MARC-MATNR default'V826016-C0.75L'."Cod material
SELECT-OPTIONS DenMat FOR MAKT-MAKTX."Descriere material
SELECTION-SCREEN END OF BLOCK BLOCK1.
PERFORM UserAcces.
if MySwitch_Unit = 'Yes' AND MySwitch_Acces = 'Yes'.
PERFORM Selectare.
loop at lt_join into wa_join.
PERFORM READTEXT.
PERFORM READTEXT2.
PERFORM READTEXT3.
PERFORM READTEXT4.
Modify lt_join from Wa_join transporting TEXTPRI TEXTVER COMINT TEXTVANZ.
PERFORM BUILD_FIELDCATALOG.
PERFORM sort_catalog.
EndLoop.
* PERFORM LOOP.
* PERFORM CULOARE.
* PERFORM FILTRARE.
PERFORM DISPLAY_ALV_REPORT TABLES lt_join.
*ELSE.
* Perform mymessage using 'Nu aveti acces' 'Va rog consultati superiorul dvs' '.'.
Endif.
at selection-screen.
*https://archive.sap.com/discussions/thread/82713
*https://archive.sap.com/discussions/thread/347034
*https://archive.sap.com/discussions/thread/53618
* http://www.onexeno.com/alv-grid-should-display-in-three-tabstrips/
START-OF-SELECTION.
Form UserAcces.
select *
##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE ITusers
from zusers
where USER_NAME = SY-UNAME and PROG_NAME = 'z_date_baza_pf'.
*
if Sy-DBCNT = 0. "Utilizator inexistent in tabela - PRIVILEGIAT
if Privileg_User ns Sy-UName.
Concatenate Sy-Uname ',' Privileg_User
into Privileg_User.
EndIf.
MySwitch_Acces = 'Yes'.
* MySwitch_Depozit = 'Yes'.
MySwitch_Unit = 'Yes'.
else.
MySwitch_Unit = 'No'.
MySwitch_Acces = 'No'. " Daca utilizatorul exista in tabela
* MySwitch_Depozit = 'No'.
Loop at ITusers into ARTUSERS. " ZUSERS inseamna
if sy-subrc = 0.
exit.
EndIf.
EndLoop.
*
Case ArtUsers-Acces.
when 'Exc'.
Perform MyMessage using
' Acces nepermis !!!'
' Acces nepermis !!!'
' Consultati administratorul Bazei de date SAP'.
MySwitch_Acces = 'No'.
exit.
when 'Yes'.
if Privileg_User ns Sy-UName.
Concatenate Sy-Uname ',' Privileg_User
into Privileg_User.
EndIf.
MySwitch_Acces = 'Yes'.
when 'No' or ''.
Privileg_User = ''.
MySwitch_Acces = 'No'.
EndCase.
* Validare unitati logistice
if ArtUsers-UnitLog = ''.
MySwitch_Unit = 'Yes'.
else.
MySwitch_Unit = 'No'.
Loop at UnitLog.
Concatenate 'Y-' UnitLog-Low into LowUnit.
MySwitch_Unit = 'No'.
if ArtUsers-UnitLog cs LowUnit.
MySwitch_Unit = 'Yes'.
else.
MySwitch_Unit = 'No'.
Concatenate 'Nu aveti acces la Unitatea:'
UnitLog-Low into wtxt1 separated by space.
Perform MyMessage using
' Acces nepermis !!!'
wtxt1
' Consultati administratorul bazei de date'.
exit.
EndIf.
EndLoop.
EndIf.
ENDIF.
ENDFORM.
Form MyMessage using p_title p_text1 p_text2.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
titel = p_title
textline1 = p_text1
textline2 = p_text2
start_column = 25
start_row = 6.
* importing
* answer = risp2.
EndForm.
FORM Selectare.
SELECT DISTINCT a~werks
a~matnr
b~maktx
c~KONDM
d~VTEXT
e~GROES
b~spras
FROM MARC as a
INNER JOIN MAKT AS b
on a~matnr = b~matnr
INNER JOIN MVKE as c
ON a~matnr = c~matnr
INNER JOIN T178T as d
on c~kondm = d~kondm
INNER JOIN MARA as e
on a~matnr = e~matnr
INTO CORRESPONDING FIELDS OF TABLE lt_join
WHERE a~werks IN UnitLog AND " Unitate logistica
a~matnr IN Material AND "Cod material
b~maktx IN DenMat." AND
"b~spras EQ sy-langu.
*SORT lt_join by WERKS.
*DELETE ADJACENT DUPLICATES FROM lt_join comparing WERKS.
ENDFORM.
FORM sort_catalog.
wa_sort-spos = 2.
wa_sort-fieldname = 'MATNR'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO it_sort.
wa_sort-spos = 4.
wa_sort-fieldname = 'KONDM'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO it_sort.
wa_sort-spos = 5.
wa_sort-fieldname = 'VTEXT'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO it_sort.
wa_sort-spos = 6.
wa_sort-fieldname = 'GROES'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO it_sort.
ENDFORM.
FORM READTEXT.
data: it_MVKE type standard table of MVKE initial size 0.
data: lMVKE like MVKE, lMAKT like MAKT, lT002 like T002 ,
lTDNAME like THEAD-TDNAME,"text header
it_TLINE type standard table of TLINE,
wa_TLINE type TLINE.
data: cObject(10) type c, cID(4) type c.
select MATNR from MARA into corresponding fields of table it_MVKE
where MATNR in Material order by MATNR.
cID = 'GRUN'. cObject = 'MATERIAL'. "Text date principale "
loop at it_MVKE into lMVKE.
lTDNAME = lMVKE-MATNR.
select spras from T002 into lT002.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = cID
LANGUAGE = lT002-SPRAS
NAME = lTDNAME
OBJECT = cObject
TABLES
LINES = it_TLINE
EXCEPTIONS
ID = 1
OTHERS = 8.
IF SY-SUBRC EQ 0.
LOOP AT it_TLINE INTO wa_TLINE.
* wa_join-TEXTPRI = wa_TLINE-TDLINE.
* append wa_join to lt_join.
* clear wa_join.
CONCATENATE wa_join-TEXTPRI wa_tline-tdline INTO wa_join-TEXTPRI separated by ' ; '.
ENDLOOP.
ENDIF.
ENDSELECT.
ENDLOOP.
ENDFORM.
FORM READTEXT2.
*http://www.gotothings.com/sapac002.htm
*http://www.erpgreat.com/abap/use-fm--read-text-to-read-the-various-text.htm
*http://sap.ittoolbox.com/groups/technical-functional/sap-dev/call-function-read_text-173308
"https://saplsmw.com/Generate_a_Report_with_Material_Master_Long_Texts
"https://www.consolut.com/en/s/sap-ides-access/d/s/doc/F-READ_MULTIPLE_TEXTS/
***********************functional doar pe un singur text*******************************************
data: it_MVKE type standard table of MVKE initial size 0.
data: lMVKE like MVKE, lMAKT like MAKT, lT002 like T002 ,
lTDNAME like THEAD-TDNAME,"text header
it_TLINE type standard table of TLINE,
wa_TLINE type TLINE, lText type string.
data: cObject(10) type c, cID(4) type c.
select MATNR from MARA into corresponding fields of table it_MVKE
where MATNR in Material order by MATNR.
cID = 'PRUE'. cObject = 'MATERIAL'. "Text verificare
loop at it_MVKE into lMVKE.
lTDNAME = lMVKE-MATNR.
"loop at it_cids into wa_cids.
select spras from T002 into lT002.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = cID
LANGUAGE = lT002-SPRAS
NAME = lTDNAME
OBJECT = cObject
TABLES
LINES = it_TLINE
EXCEPTIONS
ID = 1
OTHERS = 8.
IF SY-SUBRC EQ 0.
select single * from MAKT into lMAKT where MATNR eq lMVKE-MATNR
and SPRAS eq lT002-SPRAS.
LOOP AT it_TLINE INTO wa_TLINE.
* wa_join-TEXTVER = wa_TLINE-TDLINE.
* append wa_join to lt_join.
* CLEAR wa_join.
CONCATENATE wa_join-TEXTVER wa_tline-tdline INTO wa_join-TEXTVER separated by ' ; '.
ENDLOOP.
ENDIF.
ENDSELECT.
ENDLOOP.
ENDFORM.
FORM BUILD_FIELDCATALOG.
REFRESH FIELDCATALOG.
afield-FIELDNAME = 'WERKS'.
afield-SELTEXT_M = 'Unitate logistica'.
afield-COL_POS = 1.
afield-OUTPUTLEN = 10.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'MATNR'.
afield-SELTEXT_M = 'Cod material'.
afield-COL_POS = 2.
afield-OUTPUTLEN = 10.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'MAKTX'.
afield-SELTEXT_M = 'Descriere material '.
afield-COL_POS = 3.
afield-OUTPUTLEN = 20.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'KONDM'.
afield-SELTEXT_M = 'Cod grupa'.
afield-COL_POS = 4.
afield-OUTPUTLEN = 7.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'VTEXT'.
afield-SELTEXT_M = 'Descriere grupa'.
afield-COL_POS = 5.
afield-OUTPUTLEN = 10.
afield-decimals_out = 0.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'GROES'.
afield-SELTEXT_M = 'Marime/Dimensiuni'.
afield-COL_POS = 6.
afield-OUTPUTLEN = 28.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'TEXTPRI'.
afield-SELTEXT_M = 'Text date principale'.
afield-COL_POS = 7.
afield-OUTPUTLEN = 20.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'TEXTVER'.
afield-SELTEXT_M = 'Text verificare'.
afield-COL_POS = 8.
afield-OUTPUTLEN = 15.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
afield-FIELDNAME = 'COMINT'.
afield-SELTEXT_M = 'Comentariu intern'.
afield-COL_POS = 09.
afield-OUTPUTLEN = 18.
afield-decimals_out = 0.
APPEND afield TO FIELDCATALOG.
CLEAR afield.
ENDFORM.
FORM DISPLAY_ALV_REPORT TABLES lt_join.
* USING P_GRID_TITLE.
* rs_selfield TYPE slis_selfield.
report_id = SY-REPID.
* RS_SELFIELD-ROW_STABLE = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = report_id
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
IT_FIELDCAT = FIELDCATALOG"[]
* I_GRID_TITLE = P_GRID_TITLE
I_SAVE = 'X'
IT_EVENTS = MyEvents
is_layout = MyLayout
it_sort = it_sort
it_filter = it_filter " List output filter criteria
* IS_VARIANT = G_VARIANT
TABLES
T_OUTTAB = lt_join
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM.
*---------------------------------------------------------*
* Grid Header *
*---------------------------------------------------------*
Form TOP-OF-PAGE.
*ALV Header declarations
data: My_header type slis_t_listheader,
wa_header type slis_listheader,
My_line like wa_header-info,
ld_lines type i,
ld_linesc(10) type c.
* Title
clear wa_header.
wa_header-typ = 'H'.
wa_header-info =
'Raport date de baza produse finite'.
append wa_header to My_header.
*
* clear wa_header.
* wa_header-typ = 'H'.
* wa_header-info =
* 'Efectuati DUBLU Click pt Analiza Grafica - optiunile 01-08'.
* append wa_header to My_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = My_header.
* i_logo = 'Z_LOGO'.
endform.
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TABSTRIP'
CONSTANTS: BEGIN OF C_TABSTRIP,
TAB1 LIKE SY-UCOMM VALUE 'P1',
TAB2 LIKE SY-UCOMM VALUE 'P2',
TAB3 LIKE SY-UCOMM VALUE 'P3',
TAB4 LIKE SY-UCOMM VALUE 'P4',
END OF C_TABSTRIP.
*&SPWIZARD: DATA FOR TABSTRIP 'TABSTRIP'
CONTROLS: TABSTRIP TYPE TABSTRIP.
DATA: BEGIN OF G_TABSTRIP,
SUBSCREEN LIKE SY-DYNNR,
PROG LIKE SY-REPID VALUE 'Z_DATE_BAZA_PF',
PRESSED_TAB LIKE SY-UCOMM VALUE C_TABSTRIP-TAB1,
END OF G_TABSTRIP.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TABSTRIP'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TABSTRIP_ACTIVE_TAB_SET OUTPUT.
SET PF-STATUS 'MAIN100'.
* creating object reference for container
* PERFORM Selectare.
* PERFORM BUILD_FIELDCATALOG.
CREATE OBJECT container
EXPORTING
container_name = 'CCONTAINER'."Pass name of container created in Screen no 100
*splitting the main container into 2 rows & 1 coloum
CREATE OBJECT splitter_1
EXPORTING
Parent = container
Rows = 2
Columns = 1.
*getting the reference for the splited container (row 1 & col 1 container)
CALL METHOD splitter_1->get_container
EXPORTING
Row = 1
Column = 1
RECEIVING
Container = container_1.
*getting the reference for the splited container (row 2 & col 1 container)
*CALL METHOD splitter_1->get_container
*EXPORTING
* Row = 2
* Column = 1
*RECEIVING
* Container = container_2.
*populating first internal table to the container
CREATE OBJECT container
EXPORTING
container_name = g_container.
CREATE OBJECT grid1
EXPORTING
i_parent = container_1.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
is_variant = G_VARIANT2
i_save = ' '
is_layout = w_layout
CHANGING
it_outtab = lt_join
IT_FIELDCATALOG = FIELDCATALOG
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
TABSTRIP-ACTIVETAB = G_TABSTRIP-PRESSED_TAB.
CASE G_TABSTRIP-PRESSED_TAB.
WHEN C_TABSTRIP-TAB1.
G_TABSTRIP-SUBSCREEN = '0101'.
WHEN C_TABSTRIP-TAB2.
G_TABSTRIP-SUBSCREEN = '0102'.
WHEN C_TABSTRIP-TAB3.
G_TABSTRIP-SUBSCREEN = '0103'.
WHEN C_TABSTRIP-TAB4.
G_TABSTRIP-SUBSCREEN = '0104'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'TABSTRIP'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
*MODULE TABSTRIP_ACTIVE_TAB_GET INPUT.
* OK_CODE = SY-UCOMM.
* CASE OK_CODE.
* WHEN C_TABSTRIP-TAB1.
* G_TABSTRIP-PRESSED_TAB = C_TABSTRIP-TAB1.
* WHEN C_TABSTRIP-TAB2.
* G_TABSTRIP-PRESSED_TAB = C_TABSTRIP-TAB2.
* WHEN C_TABSTRIP-TAB3.
* G_TABSTRIP-PRESSED_TAB = C_TABSTRIP-TAB3.
* WHEN C_TABSTRIP-TAB4.
* G_TABSTRIP-PRESSED_TAB = C_TABSTRIP-TAB4.
* WHEN OTHERS.
**&SPWIZARD: DO NOTHING
* ENDCASE.
*ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CALL METHOD cl_gui_cfw=>dispatch.
IF sy-ucomm = 'BACK'
OR sy-ucomm = 'EXIT'
OR sy-ucomm = 'CANCEL'.
CALL METHOD container->free.
* LEAVE PROGRAM.
LEAVE TO SCREEN 0.
<br>
Below see below how it should look like
11-22-2017 1:26 PM
Just split the dynpro in two area, a container upper part, and a tab subscreen in lower part.
Or for dynamic ratio, define only the tab dynpro subfield area as a full screen wide, then use a docking container for the ALV, attached upper side and with a ratio of 50%
11-22-2017 1:28 PM
Hi Raymond, thank you for your answer ,i already did a container in the upper part and a tabstrip in the bottom part.How can i now fill my alv content in the container and in the tab subscreen?
11-22-2017 1:55 PM
The first is basic concept within SE51, the second one look for samples in wiki of the forum with keyword CL_GUI_DOCKING_CONTAINER.
11-22-2017 2:03 PM