Muchas gracias finalmente lo logre, ya esa el reporte, lo unico que me falta es cambiarle el encabezado pero ya con esto resuelvo cualquier reporte. si saben como cambiarle el encabezado a las columnas me avisan, alli les comparto el reporte:
Código:
*&---------------------------------------------------------------------*
*& REPORT ZMM_MATERIAL_MOVEMENT_REPORT
*& Developed by: Javier Portilla
*& Date: 2011-11-10
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZMM_MATERIAL_MOVEMENT_REPORT.
TABLES: mseg, mkpf, lfa1, marav.
CLASS lcl_handle_events DEFINITION DEFERRED.
DATA: gr_table TYPE REF TO cl_salv_table,
gt_outtab TYPE STANDARD TABLE OF ZMM_MATERIALMOVEMENT,
gt_mattab TYPE STANDARD TABLE OF ZMM_MATERIAL_DATA,
gr_events TYPE REF TO lcl_handle_events,
g_okcode TYPE syucomm.
FIELD-SYMBOLS <out> TYPE ZMM_MATERIALMOVEMENT.
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS:
on_user_command FOR EVENT added_function OF cl_salv_events
IMPORTING e_salv_function.
ENDCLASS. "lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
METHOD on_user_command.
PERFORM print_form USING e_salv_function text-i08.
ENDMETHOD. "on_user_command
ENDCLASS. "lcl_handle_events IMPLEMENTATION
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: Material FOR mseg-matnr,
Type FOR marav-mtart,
Posting FOR mkpf-budat.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
PERFORM fetch_data.
END-OF-SELECTION.
PERFORM display_full_screen.
*----------------------------------------------------------------------*
FORM fetch_data.
DATA: pre_outtab LIKE gt_outtab,
pre_mattab_initial LIKE gt_mattab,
pre_mattab_issue LIKE gt_mattab,
pre_mattab_recieve LIKE gt_mattab,
wa_outtab LIKE LINE OF gt_outtab,
wa_current LIKE LINE OF gt_outtab.
*copied from another report
TYPES: BEGIN OF t_materials_description,
matnr TYPE mseg-matnr,
maktx TYPE makt-maktx,
budat TYPE mkpf-budat,
END OF t_materials_description,
BEGIN OF t_initial,
matnr TYPE mseg-matnr,
bwart TYPE mseg-bwart,
menge TYPE mseg-menge,
dmbtr TYPE mseg-dmbtr,
END OF t_initial,
BEGIN OF t_issue,
matnr TYPE mseg-matnr,
bwart TYPE mseg-bwart,
menge TYPE mseg-menge,
dmbtr TYPE mseg-dmbtr,
END OF t_issue,
BEGIN OF t_receip,
matnr TYPE mseg-matnr,
bwart TYPE mseg-bwart,
menge TYPE mseg-menge,
dmbtr TYPE mseg-dmbtr,
END OF t_receip.
DATA: wa_matdescription TYPE t_materials_description,
it_matdescription TYPE TABLE OF t_materials_description,
it_matdescription_aux TYPE TABLE OF t_materials_description,
movement TYPE mseg-bwart,
materialCode TYPE makt-matnr,
materialCodeTemp TYPE makt-matnr,
materialCodeAct TYPE makt-matnr,
act_quantity TYPE mseg-menge,
old_quantity TYPE mseg-menge,
GIN type mseg-menge, "goods initial
GI type mseg-menge, "goods issued
GR type mseg-menge, "goods received
AI type mseg-menge, "goods initial
AIN type mseg-menge, "goods issued
AR type mseg-menge, "goods received
totalInitial type i,
totalAmountInitial type i,
totalIssued type i,
totalAmountIssued type i,
totalRecieved type i,
totalAmountRecieved type i,
wa_matinitial TYPE t_initial,
wa_matinitial_aux TYPE t_initial,
it_matinitial TYPE TABLE OF t_initial,
it_matinitial_aux TYPE TABLE OF t_initial,
wa_matissue TYPE t_issue,
wa_matissue_aux TYPE t_issue,
it_matissue TYPE TABLE OF t_issue,
it_matissue_aux TYPE TABLE OF t_issue,
wa_matreceip TYPE t_receip,
wa_matreceip_aux TYPE t_receip,
it_matreceip TYPE TABLE OF t_receip,
it_matreceip_aux TYPE TABLE OF t_receip,
cantidad TYPE sy-dbcnt.
SELECT mseg~matnr
makt~maktx
mkpf~budat
FROM mseg
INNER JOIN marav
ON mseg~matnr EQ marav~matnr
INNER JOIN makt
ON mseg~matnr EQ makt~matnr
AND makt~spras EQ 'ES'
INNER JOIN mkpf
ON mseg~mblnr EQ mkpf~mblnr
AND mseg~mjahr EQ mkpf~mjahr
INTO TABLE it_matdescription.
* WHERE makt~matnr IN Material " Sel. Screen
* AND marav~mtart IN Type " Sel. Screen
* AND mkpf~budat EQ Posting. " Sel. Screen
IF sy-subrc EQ 0.
cantidad = sy-dbcnt.
it_matdescription_aux[] = it_matdescription[].
DELETE ADJACENT DUPLICATES FROM it_matdescription_aux COMPARING matnr.
SORT it_matdescription_aux BY matnr.
SELECT mseg~matnr
mseg~bwart
mseg~menge
mseg~dmbtr
FROM MSEG INTO TABLE it_matinitial
WHERE mseg~bwart IN ('561', '562')
.
IF sy-subrc EQ 0.
cantidad = sy-dbcnt.
ENDIF.
SORT it_matdescription_aux BY matnr.
SELECT mseg~matnr
mseg~bwart
mseg~menge
mseg~dmbtr
FROM MSEG INTO TABLE it_matissue
WHERE mseg~bwart IN ('201', '202', '261', '262', '281', '282').
IF sy-subrc EQ 0.
cantidad = sy-dbcnt.
ENDIF.
SORT it_matissue BY matnr.
SELECT mseg~matnr
mseg~bwart
mseg~menge
mseg~dmbtr
FROM MSEG INTO TABLE it_matreceip
WHERE mseg~bwart IN ('101', '102', '501', '502').
IF sy-subrc EQ 0.
cantidad = sy-dbcnt.
ENDIF.
SORT it_matdescription_aux BY matnr.
SORT it_matinitial BY matnr.
SORT it_matissue BY matnr.
SORT it_matreceip BY matnr.
totalInitial = 0.
totalAmountInitial = 0.
totalIssued = 0.
totalAmountIssued = 0.
totalRecieved = 0.
totalAmountRecieved = 0.
LOOP AT it_matinitial INTO wa_matinitial.
IF materialCodeAct EQ ''.
materialCodeAct = wa_matinitial-matnr.
if wa_matinitial-bwart = '561'.
GIN = totalInitial + wa_matinitial-menge.
totalInitial = GIN.
AIN = totalAmountInitial + wa_matinitial-dmbtr.
totalAmountInitial = AIN.
elseif wa_matinitial-bwart = '562'.
GIN = totalInitial - wa_matinitial-menge.
totalInitial = GIN.
AIN = totalAmountInitial - wa_matinitial-dmbtr.
totalAmountInitial = AIN.
endif.
ELSEIF materialCodeAct EQ wa_matinitial-matnr.
if wa_matinitial-bwart = '561'.
GIN = totalInitial + wa_matinitial-menge.
totalInitial = GIN.
AIN = totalAmountInitial + wa_matinitial-dmbtr.
totalAmountInitial = AIN.
elseif wa_matinitial-bwart = '562'.
GIN = totalInitial - wa_matinitial-menge.
totalInitial = GIN.
AIN = totalAmountInitial - wa_matinitial-dmbtr.
totalAmountInitial = AIN.
endif.
ELSEIF materialCodeAct NE wa_matinitial-matnr.
wa_matinitial_aux-matnr = materialCodeAct.
wa_matinitial_aux-menge = totalInitial.
wa_matinitial_aux-dmbtr = totalAmountInitial.
INSERT wa_matinitial_aux INTO TABLE it_matinitial_aux.
GIN = 0.
totalInitial = 0.
materialCodeAct = wa_matinitial-matnr.
if wa_matinitial-bwart = '561'.
GIN = totalInitial + wa_matinitial-menge.
totalInitial = GIN.
AIN = totalAmountInitial + wa_matinitial-dmbtr.
totalAmountInitial = AIN.
elseif wa_matinitial-bwart = '562'.
GIN = totalInitial - wa_matinitial-menge.
totalInitial = GIN.
AIN = totalAmountInitial - wa_matinitial-dmbtr.
totalAmountInitial = AIN.
endif.
ENDIF.
ENDLOOP.
* -- MAT ISSUE
materialCodeAct = ''.
LOOP AT it_matissue INTO wa_matissue.
IF materialCodeAct EQ ''.
materialCodeAct = wa_matissue-matnr.
if wa_matissue-bwart = '201' OR wa_matissue-bwart = '261' OR wa_matissue-bwart = '281'.
GI = totalIssued + wa_matissue-menge.
totalIssued = GI.
AIN = totalAmountIssued + wa_matissue-dmbtr.
totalAmountIssued = AIN.
elseif wa_matissue-bwart = '202' OR wa_matissue-bwart = '262' OR wa_matissue-bwart = '282'.
GI = totalIssued - wa_matissue-menge.
totalIssued = GI.
AIN = totalAmountIssued - wa_matissue-dmbtr.
totalAmountIssued = AIN.
endif.
ELSEIF materialCodeAct EQ wa_matissue-matnr.
if wa_matissue-bwart = '201' OR wa_matissue-bwart = '261' OR wa_matissue-bwart = '281'.
GI = totalIssued + wa_matissue-menge.
totalIssued = GI.
AIN = totalAmountIssued + wa_matissue-dmbtr.
totalAmountIssued = AIN.
elseif wa_matissue-bwart = '202' OR wa_matissue-bwart = '262' OR wa_matissue-bwart = '282'.
GI = totalIssued - wa_matissue-menge.
totalIssued = GI.
AIN = totalAmountIssued - wa_matissue-dmbtr.
totalAmountIssued = AIN.
endif.
ELSEIF materialCodeAct NE wa_matissue-matnr.
wa_matissue_aux-matnr = materialCodeAct.
wa_matissue_aux-menge = totalIssued.
wa_matissue_aux-dmbtr = totalAmountIssued.
INSERT wa_matissue_aux INTO TABLE it_matissue_aux.
GI = 0.
totalIssued = 0.
materialCodeAct = wa_matissue-matnr.
if wa_matissue-bwart = '201' OR wa_matissue-bwart = '261' OR wa_matissue-bwart = '281'.
GI = totalIssued + wa_matissue-menge.
totalIssued = GI.
elseif wa_matissue-bwart = '202' OR wa_matissue-bwart = '262' OR wa_matissue-bwart = '282'.
GI = totalIssued - wa_matissue-menge.
totalIssued = GI.
endif.
ENDIF.
ENDLOOP.
* -- MAT RECIEVED
materialCodeAct = ''.
LOOP AT it_matreceip INTO wa_matreceip.
IF materialCodeAct EQ ''.
materialCodeAct = wa_matreceip-matnr.
if wa_matreceip-bwart = '101' OR wa_matreceip-bwart = '501'.
GR = totalRecieved + wa_matreceip-menge.
totalRecieved = GR.
AIN = totalAmountRecieved + wa_matreceip-dmbtr.
totalAmountRecieved = AIN.
elseif wa_matreceip-bwart = '102' OR wa_matreceip-bwart = '502'.
GR = totalRecieved - wa_matreceip-menge.
totalRecieved = GR.
AIN = totalAmountRecieved - wa_matreceip-dmbtr.
totalAmountRecieved = AIN.
endif.
ELSEIF materialCodeAct EQ wa_matreceip-matnr.
if wa_matreceip-bwart = '101' OR wa_matreceip-bwart = '501'.
GR = totalRecieved + wa_matreceip-menge.
totalRecieved = GR.
AIN = totalAmountRecieved + wa_matreceip-dmbtr.
totalAmountRecieved = AIN.
elseif wa_matreceip-bwart = '102' OR wa_matreceip-bwart = '502'.
GR = totalRecieved - wa_matreceip-menge.
totalRecieved = GR.
AIN = totalAmountRecieved - wa_matreceip-dmbtr.
totalAmountRecieved = AIN.
endif.
ELSEIF materialCodeAct NE wa_matreceip-matnr.
wa_matreceip_aux-matnr = materialCodeAct.
wa_matreceip_aux-menge = totalRecieved.
wa_matreceip_aux-dmbtr = totalAmountRecieved.
INSERT wa_matreceip_aux INTO TABLE it_matreceip_aux.
GR = 0.
totalRecieved = 0.
materialCodeAct = wa_matreceip-matnr.
if wa_matreceip-bwart = '101' OR wa_matreceip-bwart = '501'.
GR = totalRecieved + wa_matreceip-menge.
totalRecieved = GR.
elseif wa_matreceip-bwart = '102' OR wa_matreceip-bwart = '502'.
GR = totalRecieved - wa_matreceip-menge.
totalRecieved = GR.
endif.
ENDIF.
ENDLOOP.
LOOP AT it_matdescription_aux INTO wa_matdescription.
materialCode = wa_matdescription-matnr.
READ TABLE it_matinitial_aux INTO wa_matinitial
WITH KEY matnr = wa_matdescription-matnr
BINARY SEARCH.
IF sy-subrc EQ 0.
cantidad = sy-dbcnt.
ENDIF.
READ TABLE it_matissue_aux INTO wa_matissue
WITH KEY matnr = wa_matdescription-matnr
BINARY SEARCH.
IF sy-subrc EQ 0.
cantidad = sy-dbcnt.
ENDIF.
READ TABLE it_matreceip_aux INTO wa_matreceip
WITH KEY matnr = wa_matdescription-matnr
BINARY SEARCH.
IF sy-subrc EQ 0.
cantidad = sy-dbcnt.
ENDIF.
wa_outtab-matnr = wa_matdescription-matnr.
wa_outtab-maktx = wa_matdescription-maktx.
wa_outtab-menge = wa_matinitial-menge.
wa_outtab-dmbtr = wa_matinitial-dmbtr.
wa_outtab-menge2 = wa_matissue-menge.
wa_outtab-dmbtr2 = wa_matissue-dmbtr.
wa_outtab-menge3 = wa_matreceip-menge.
wa_outtab-dmbtr3 = wa_matreceip-dmbtr.
wa_outtab-budat = wa_matdescription-budat.
INSERT wa_outtab INTO TABLE pre_outtab.
CLEAR wa_matdescription.
CLEAR wa_matinitial.
CLEAR wa_matissue.
ENDLOOP.
ENDIF.
IF sy-subrc EQ 0.
LOOP AT pre_outtab ASSIGNING <out>.
<out>-perio = <out>-budat+4(2).
<out>-budat = space.
ENDLOOP.
UNASSIGN <out>.
SORT pre_outtab BY matnr maktx dmbtr budat.
LOOP AT pre_outtab ASSIGNING <out>.
COLLECT <out> INTO gt_outtab.
ENDLOOP.
UNASSIGN <out>.
ENDIF.
ENDFORM. "fetch_data
*----------------------------------------------------------------------*
FORM display_full_screen.
DATA: lr_content TYPE REF TO cl_salv_form_element.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_outtab ).
CATCH cx_salv_msg.
ENDTRY.
PERFORM create_alv_form_content_tol CHANGING lr_content.
gr_table->set_top_of_list( lr_content ).
DATA lr_functions TYPE REF TO cl_salv_functions_list.
lr_functions = gr_table->get_functions( ).
lr_functions->set_default('X').
DATA lr_columns TYPE REF TO cl_salv_columns.
lr_columns = gr_table->get_columns( ).
lr_columns->set_optimize('X').
PERFORM set_columns_technical USING lr_columns.
DATA lr_sorts TYPE REF TO cl_salv_sorts.
PERFORM set_columns_sorted USING lr_sorts.
DATA lr_events TYPE REF TO cl_salv_events_table.
lr_events = gr_table->get_event( ).
CREATE OBJECT gr_events.
SET HANDLER gr_events->on_user_command FOR lr_events.
gr_table->display( ).
ENDFORM. "display_full_screen
*----------------------------------------------------------------------*
FORM set_columns_technical USING ir_columns TYPE REF TO cl_salv_columns.
DATA: lr_column TYPE REF TO cl_salv_column.
TRY.
lr_column = ir_columns->get_column( 'BUDAT' ).
lr_column->set_technical( if_salv_c_bool_sap=>true ).
CATCH cx_salv_not_found.
ENDTRY.
*--------------------------------------------------------------------*
TRY.
lr_column = ir_columns->get_column( 'PERIO' ).
lr_column->set_long_text( 'Period' ).
lr_column->set_medium_text( 'Period' ).
lr_column->set_short_text( 'Period' ).
CATCH cx_salv_not_found.
ENDTRY.
ENDFORM. " SET_COLUMNS_TECHNICAL
*----------------------------------------------------------------------*
FORM set_columns_sorted USING ir_sorts TYPE REF TO cl_salv_sorts.
ir_sorts = gr_table->get_sorts( ).
TRY .
ir_sorts->add_sort(
columnname = 'MATNR'
).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.
TRY .
ir_sorts->add_sort(
columnname = 'MAKTX'
).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.
TRY .
ir_sorts->add_sort(
columnname = 'MENGE'
).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.
TRY .
ir_sorts->add_sort(
columnname = 'DMBTR'
).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.
TRY .
ir_sorts->add_sort(
columnname = 'BUDAT'
).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.
ENDFORM. " SET_COLUMNS_TECHNICAL
*----------------------------------------------------------------------*
FORM create_alv_form_content_tol
CHANGING cr_content TYPE REF TO cl_salv_form_element.
DATA: lr_top_element TYPE REF TO cl_salv_form_layout_grid,
lr_end_element TYPE REF TO cl_salv_form_layout_flow,
lr_grid TYPE REF TO cl_salv_form_layout_grid,
lr_header TYPE REF TO cl_salv_form_header_info,
lr_action TYPE REF TO cl_salv_form_action_info,
lr_textview1 TYPE REF TO cl_salv_form_text,
lr_textview2 TYPE REF TO cl_salv_form_text,
lr_textview3 TYPE REF TO cl_salv_form_text,
lr_textview4 TYPE REF TO cl_salv_form_text,
lr_icon TYPE REF TO cl_salv_form_icon,
lr_layout_grid1 TYPE REF TO cl_salv_form_layout_data_grid,
lr_layout_grid2 TYPE REF TO cl_salv_form_layout_data_grid,
lr_layout_grid3 TYPE REF TO cl_salv_form_layout_data_grid,
lr_layout_grid4 TYPE REF TO cl_salv_form_layout_data_grid.
CREATE OBJECT lr_top_element
EXPORTING
columns = 1.
lr_header = lr_top_element->create_header_information(
row = 1
column = 1
text = 'Material Movement Report' "#EC NOTEXT
tooltip = 'Material Movement Report' ). "#EC NOTEXT
lr_action = lr_top_element->create_action_information(
row = 2
column = 1
text = 'Movements: 561, 562, 281, 282, 201, 202, 261, 262, 101, 102. 501, 502' "#EC NOTEXT
tooltip = 'Movements: 561, 562, 281, 282, 201, 202, 261, 262, 101, 102. 501, 502' ). "#EC NOTEXT
*
* lr_grid = lr_top_element->create_grid( row = 3 column = 1 ).
*
** lr_grid->set_column_count( 2 ).
*
* lr_textview1 = lr_grid->create_text(
* row = 1
* column = 1
* text = 'C11' "#EC NOTEXT
* tooltip = 'Tooltip' ). "#EC NOTEXT
*
* lr_textview2 = lr_grid->create_text(
* row = 1
* column = 2
* text = 'C12' "#EC NOTEXT
* tooltip = 'Tooltip' ). "#EC NOTEXT
*
* lr_textview3 = lr_grid->create_text(
* row = 2
* column = 1
* text = 'C21' "#EC NOTEXT
* tooltip = 'Tooltip' ). "#EC NOTEXT
*
* lr_textview4 = lr_grid->create_text(
* row = 2
* column = 2
* text = 'C22' "#EC NOTEXT
* tooltip = 'Tooltip' ). "#EC NOTEXT
*
* lr_layout_grid1 ?= lr_textview1->get_layout_data( ).
* lr_layout_grid2 ?= lr_textview2->get_layout_data( ).
* lr_layout_grid3 ?= lr_textview3->get_layout_data( ).
* lr_layout_grid4 ?= lr_textview4->get_layout_data( ).
*
* lr_layout_grid1->set_h_align( if_salv_form_c_h_align=>left ).
*
* lr_layout_grid2->set_h_align( if_salv_form_c_h_align=>left ).
* lr_layout_grid3->set_h_align( if_salv_form_c_h_align=>left ).
*
* lr_layout_grid4->set_h_align( if_salv_form_c_h_align=>center ).
*
* CREATE OBJECT lr_icon
* EXPORTING
* icon = '@0A@' "#EC NOTEXT
* tooltip = 'Air'. "#EC NOTEXT
*
* CALL METHOD lr_grid->set_element
* EXPORTING
* row = 3
* column = 1
* r_element = lr_icon.
gr_table->set_top_of_list( lr_top_element ).
* DATA: lr_eol TYPE REF TO cl_salv_form_header_info.
* CREATE OBJECT lr_eol
* EXPORTING
* text = 'This is my Footer'. "#EC NOTEXT
*
* gr_table->set_end_of_list( lr_eol ).
cr_content = lr_top_element.
ENDFORM. " create_alv_form_content_tol
*----------------------------------------------------------------------*
FORM print_form USING i_function TYPE salv_de_function
i_text TYPE string.
DATA: i_formname TYPE tdsfname VALUE 'ZMM_DELVBYVENDOR_SF',
i_fm_name TYPE rs38l_fnam.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = i_formname
IMPORTING
fm_name = i_fm_name.
IF sy-subrc <> 0.
WRITE: / 'SSF_FUNCTION_MODULE_NAME error'.
ENDIF.
CALL FUNCTION i_fm_name
TABLES
it_main = gt_outtab.
IF sy-subrc <> 0.
WRITE: / 'CALLING FUNCTION MODULE NAME error'.
ENDIF.
ENDFORM. " PRINT_FORM