Buenas, a ver si me pueden ayudar. He tenido que convertir un listado con formato de lista a formato de ALV, y para ello lo único que he hecho ha sido cambiar la llamada a la función REUSE_ALV_LIST_DISPLAY por REUSE_ALV_GRID_DISPLAY, lo que pasa es que al hacer esto se me ha descuadrado el top-of-page. ¿Alguien sabe cómo conservar el formato que tenía en el listado con forma de lista, o al menos introducir saltos entre líneas?
Les dejo imágenes con las cabeceras de ambos listados y el código en el que se monta el top-of-page.
FORM top_of_page_render.
* interface structurebegin of g_s_bestand.
DATA: lr_content TYPE REF TO cl_salv_form_element.
*... (1) create the information to be displayed by using
* the ALV Form elements
PERFORM create_alv_form_content_top CHANGING lr_content.
*... (2) Sending the information to the ALV
* Once the inforation to be displayed has been
* created the information has to be sent to the ALV
* This is done by calling the static method
* CL_SALV_FORM_CONTENT=>SET( <content> ) with the content
* which is to be displayed.
* Alternativly the function module REUSE_ALV_COMMENTARY_WRITE
* can still be used.
cl_salv_form_content=>set( lr_content ).
ENDFORM. " top_of_page_render
*----------------------------------------------------------------------*
* create_alv_form_content_top
*----------------------------------------------------------------------*
* baustelle
FORM create_alv_form_content_top
CHANGING cr_content TYPE REF TO cl_salv_form_element.
*
DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
lr_flow TYPE REF TO cl_salv_form_layout_flow,
l_text(500) TYPE c,
l_char(500) TYPE c.
DATA: l_row TYPE i,
l_figure(24) TYPE c,
l_flag_tied_empties(01) TYPE c.
DATA: l_f_text(60) TYPE c. "n999530
*----------------------------------------------------------------------
*... create a grid
CREATE OBJECT lr_grid.
* the current data are in interface structure g_s_bestand.
* in the case the report run in print or background mode
* --> print the old headlines
IF NOT sy-prdsn IS INITIAL.
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
IF bwbst IS INITIAL.
* stocks only
WRITE : sy-pagno NO-SIGN TO g_s_header_77-page.
MOVE : g_s_header_77 TO l_text.
ELSE.
* stocks and values
WRITE : sy-pagno NO-SIGN TO g_s_header_91-page.
MOVE : g_s_header_91 TO l_text.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
ADD 1 TO l_row.
ENDIF.
* first line : plant or valuation area---------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
IF bwbst IS INITIAL.
PERFORM f2200_read_t001 USING g_s_bestand-werks. "n999530
WRITE g_s_bestand-werks TO l_f_text. "n999530
CONDENSE l_f_text. "n999530
CONCATENATE l_f_text t001w-name1 "n999530
INTO l_f_text "n999530
SEPARATED BY space. "n999530
MOVE : text-020 TO l_text,
l_f_text TO l_text+g_offset_header. "n999530
ELSE.
* show valuation area
* MOVE : text-025 TO l_text,
MOVE : text-116 TO l_text,
g_s_bestand-bwkey TO l_text+g_offset_header.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* second line : material number----------------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
* MOVE : text-021 TO l_text.
MOVE : text-117 TO l_text.
WRITE : g_s_bestand-matnr TO l_text+g_offset_header.
* add line to object
lr_flow->create_text( text = l_text ).
* third line : material short text-------------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
PERFORM f2100_mat_text USING g_s_bestand-matnr.
* MOVE : text-022 TO l_text,
MOVE : text-118 TO l_text,
g_s_makt-maktx TO l_text+g_offset_header.
* add line to object
lr_flow->create_text( text = l_text ).
* fourth line : batch if required--------------------------------------
IF xchar = 'X'.
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
MOVE : text-023 TO l_text,
g_s_bestand-charg TO l_text+g_offset_header.
* add line to object
lr_flow->create_text( text = l_text ).
ENDIF.
* line : stock and value on start date ------------------------------
* with one empty line
ADD 2 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
* convert unit of measurement from internal to external format n1018717
WRITE : g_s_bestand-meins TO l_f_meins_external. "n1018717
CLEAR l_text.
IF bwbst IS INITIAL.
* stock on start date
MOVE : g_date_line_from TO l_text.
WRITE g_s_bestand-anfmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* stocks and values on start date
MOVE : g_date_line_from TO l_text.
WRITE g_s_bestand-anfmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
WRITE g_s_bestand-anfwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* line : total quantity and value of goods receipts--------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
CLEAR l_text.
IF bwbst IS INITIAL.
* total quantities of goods receipts
MOVE : text-005 TO l_text+2.
WRITE g_s_bestand-soll TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* total quantities and values of goods receipts
MOVE : text-030 TO l_text+2.
WRITE g_s_bestand-soll TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
WRITE g_s_bestand-sollwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* line : total quantity and value of goods issues----------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
CLEAR l_text.
IF bwbst IS INITIAL.
* total quantities of goods issues
MOVE : text-006 TO l_text+2.
COMPUTE g_s_bestand-haben = g_s_bestand-haben * -1.
WRITE g_s_bestand-haben TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* total quantities of goods issues
MOVE : text-031 TO l_text+2.
COMPUTE g_s_bestand-haben = g_s_bestand-haben * -1.
WRITE g_s_bestand-haben TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
COMPUTE g_s_bestand-habenwert = g_s_bestand-habenwert * -1.
WRITE g_s_bestand-habenwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* line : stock and value on end date ------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
CLEAR l_text.
IF bwbst IS INITIAL.
* stock on end date
MOVE : g_date_line_to TO l_text.
WRITE g_s_bestand-endmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* stocks and values on end date
MOVE : g_date_line_to TO l_text.
WRITE g_s_bestand-endmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
WRITE g_s_bestand-endwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* copy whole header object
cr_content = lr_grid.
ENDFORM.
Gracias de antemano.
Les dejo imágenes con las cabeceras de ambos listados y el código en el que se monta el top-of-page.
FORM top_of_page_render.
* interface structurebegin of g_s_bestand.
DATA: lr_content TYPE REF TO cl_salv_form_element.
*... (1) create the information to be displayed by using
* the ALV Form elements
PERFORM create_alv_form_content_top CHANGING lr_content.
*... (2) Sending the information to the ALV
* Once the inforation to be displayed has been
* created the information has to be sent to the ALV
* This is done by calling the static method
* CL_SALV_FORM_CONTENT=>SET( <content> ) with the content
* which is to be displayed.
* Alternativly the function module REUSE_ALV_COMMENTARY_WRITE
* can still be used.
cl_salv_form_content=>set( lr_content ).
ENDFORM. " top_of_page_render
*----------------------------------------------------------------------*
* create_alv_form_content_top
*----------------------------------------------------------------------*
* baustelle
FORM create_alv_form_content_top
CHANGING cr_content TYPE REF TO cl_salv_form_element.
*
DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
lr_flow TYPE REF TO cl_salv_form_layout_flow,
l_text(500) TYPE c,
l_char(500) TYPE c.
DATA: l_row TYPE i,
l_figure(24) TYPE c,
l_flag_tied_empties(01) TYPE c.
DATA: l_f_text(60) TYPE c. "n999530
*----------------------------------------------------------------------
*... create a grid
CREATE OBJECT lr_grid.
* the current data are in interface structure g_s_bestand.
* in the case the report run in print or background mode
* --> print the old headlines
IF NOT sy-prdsn IS INITIAL.
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
IF bwbst IS INITIAL.
* stocks only
WRITE : sy-pagno NO-SIGN TO g_s_header_77-page.
MOVE : g_s_header_77 TO l_text.
ELSE.
* stocks and values
WRITE : sy-pagno NO-SIGN TO g_s_header_91-page.
MOVE : g_s_header_91 TO l_text.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
ADD 1 TO l_row.
ENDIF.
* first line : plant or valuation area---------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
IF bwbst IS INITIAL.
PERFORM f2200_read_t001 USING g_s_bestand-werks. "n999530
WRITE g_s_bestand-werks TO l_f_text. "n999530
CONDENSE l_f_text. "n999530
CONCATENATE l_f_text t001w-name1 "n999530
INTO l_f_text "n999530
SEPARATED BY space. "n999530
MOVE : text-020 TO l_text,
l_f_text TO l_text+g_offset_header. "n999530
ELSE.
* show valuation area
* MOVE : text-025 TO l_text,
MOVE : text-116 TO l_text,
g_s_bestand-bwkey TO l_text+g_offset_header.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* second line : material number----------------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
* MOVE : text-021 TO l_text.
MOVE : text-117 TO l_text.
WRITE : g_s_bestand-matnr TO l_text+g_offset_header.
* add line to object
lr_flow->create_text( text = l_text ).
* third line : material short text-------------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
PERFORM f2100_mat_text USING g_s_bestand-matnr.
* MOVE : text-022 TO l_text,
MOVE : text-118 TO l_text,
g_s_makt-maktx TO l_text+g_offset_header.
* add line to object
lr_flow->create_text( text = l_text ).
* fourth line : batch if required--------------------------------------
IF xchar = 'X'.
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
MOVE : text-023 TO l_text,
g_s_bestand-charg TO l_text+g_offset_header.
* add line to object
lr_flow->create_text( text = l_text ).
ENDIF.
* line : stock and value on start date ------------------------------
* with one empty line
ADD 2 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
* convert unit of measurement from internal to external format n1018717
WRITE : g_s_bestand-meins TO l_f_meins_external. "n1018717
CLEAR l_text.
IF bwbst IS INITIAL.
* stock on start date
MOVE : g_date_line_from TO l_text.
WRITE g_s_bestand-anfmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* stocks and values on start date
MOVE : g_date_line_from TO l_text.
WRITE g_s_bestand-anfmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
WRITE g_s_bestand-anfwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* line : total quantity and value of goods receipts--------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
CLEAR l_text.
IF bwbst IS INITIAL.
* total quantities of goods receipts
MOVE : text-005 TO l_text+2.
WRITE g_s_bestand-soll TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* total quantities and values of goods receipts
MOVE : text-030 TO l_text+2.
WRITE g_s_bestand-soll TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
WRITE g_s_bestand-sollwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* line : total quantity and value of goods issues----------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
CLEAR l_text.
IF bwbst IS INITIAL.
* total quantities of goods issues
MOVE : text-006 TO l_text+2.
COMPUTE g_s_bestand-haben = g_s_bestand-haben * -1.
WRITE g_s_bestand-haben TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* total quantities of goods issues
MOVE : text-031 TO l_text+2.
COMPUTE g_s_bestand-haben = g_s_bestand-haben * -1.
WRITE g_s_bestand-haben TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
COMPUTE g_s_bestand-habenwert = g_s_bestand-habenwert * -1.
WRITE g_s_bestand-habenwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* line : stock and value on end date ------------------------------
ADD 1 TO l_row.
lr_flow = lr_grid->create_flow( row = l_row column = 1 ).
CLEAR l_text.
IF bwbst IS INITIAL.
* stock on end date
MOVE : g_date_line_to TO l_text.
WRITE g_s_bestand-endmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
ELSE.
* stocks and values on end date
MOVE : g_date_line_to TO l_text.
WRITE g_s_bestand-endmenge TO l_figure
UNIT g_s_bestand-meins.
MOVE l_figure TO l_text+g_offset_qty(24).
* move g_s_bestand-meins to l_text+g_offset_unit. n1018717
MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
WRITE g_s_bestand-endwert TO l_figure
CURRENCY g_s_bestand-waers.
MOVE l_figure TO l_text+g_offset_value(24).
MOVE g_s_bestand-waers TO l_text+g_offset_curr.
ENDIF.
* add line to object
lr_flow->create_text( text = l_text ).
* copy whole header object
cr_content = lr_grid.
ENDFORM.
Gracias de antemano.

, pero supongo q solo bastaria crear una linea en blanco dentro de la tabla interna q se mandara a la funcion, en este caso es gt_lheader ... aver si nos cuentas como t fue
Comentario