#1
|
|||
|
|||
ALV top-of-page
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. |
#2
|
|||
|
|||
vas ha tener q utilizar un funcion para la cabecera ejemplo
*---principal PERFORM EVENTTAB_BUILD USING GT_EVENTS[]. PERFORM COMMENT_BUILD USING GT_LHEADER[]. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_BACKGROUND_ID = 'ALV_BACKGROUND' I_CALLBACK_PROGRAM = G_REPID IS_LAYOUT = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT[] IT_SORT = GT_SORT[] I_SAVE = G_SAVE IS_VARIANT = G_VARIANT IT_EVENTS = GT_EVENTS[] TABLES T_OUTTAB = GT_DATA. *------ *&---------------------------------------------------------------------* *& Form COMMENT_BUILD *&---------------------------------------------------------------------* FORM COMMENT_BUILD USING LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER. DATA: LS_LINE TYPE SLIS_LISTHEADER, L_TEXTO(10). REFRESH LT_TOP_OF_PAGE. * Titulo CLEAR LS_LINE. LS_LINE-TYP = 'H'. LS_LINE-INFO = TEXT-TTT. APPEND LS_LINE TO LT_TOP_OF_PAGE. * Cliente CLEAR LS_LINE. LS_LINE-TYP = 'S'. IF NOT VBAK-KUNNR IS INITIAL. CLEAR KNA1-NAME1. SELECT SINGLE NAME1 INTO KNA1-NAME1 FROM KNA1 WHERE KUNNR EQ VBAK-KUNNR. LS_LINE-KEY = TEXT-T02. CONCATENATE VBAK-KUNNR KNA1-NAME1 INTO LS_LINE-INFO SEPARATED BY SPACE. APPEND LS_LINE TO LT_TOP_OF_PAGE. ENDIF. * Material IF NOT VBAP-MATNR IS INITIAL. CLEAR KNA1-NAME1. SELECT SINGLE MAKTX INTO MAKT-MAKTX FROM MAKT WHERE MATNR EQ VBAP-MATNR AND SPRAS EQ SY-LANGU. LS_LINE-KEY = TEXT-T03. CONCATENATE VBAP-MATNR MAKT-MAKTX INTO LS_LINE-INFO SEPARATED BY SPACE. APPEND LS_LINE TO LT_TOP_OF_PAGE. ENDIF. * Numero de Pedido IF NOT VBAK-VBELN IS INITIAL. LS_LINE-KEY = TEXT-T04. LS_LINE-INFO = VBAK-VBELN. APPEND LS_LINE TO LT_TOP_OF_PAGE. ENDIF. * Fecha/Hora/Usuario LS_LINE-KEY = TEXT-T01. WRITE SY-UNAME TO L_TEXTO. CONCATENATE '/' L_TEXTO INTO LS_LINE-INFO. WRITE SY-UZEIT TO L_TEXTO. CONCATENATE '/' L_TEXTO LS_LINE-INFO INTO LS_LINE-INFO. WRITE SY-DATUM TO L_TEXTO. CONCATENATE L_TEXTO LS_LINE-INFO INTO LS_LINE-INFO. APPEND LS_LINE TO LT_TOP_OF_PAGE. ENDFORM. *---------------------------------------------------------------------* * FORM TOP_OF_PAGE * *---------------------------------------------------------------------* FORM TOP_OF_PAGE. * CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING I_LOGO = 'LOGOQS1' IT_LIST_COMMENTARY = GT_LHEADER. ENDFORM. *&---------------------------------------------------------------------* *& Form EVENTTAB_BUILD *&---------------------------------------------------------------------* FORM EVENTTAB_BUILD USING LT_EVENTS TYPE SLIS_T_EVENT. DATA: LS_EVENT TYPE SLIS_ALV_EVENT. * REFRESH LT_EVENTS. CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING I_LIST_TYPE = 0 IMPORTING ET_EVENTS = LT_EVENTS. READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE INTO LS_EVENT. IF SY-SUBRC EQ 0. MOVE C_TOP_OF_PAGE TO LS_EVENT-FORM. APPEND LS_EVENT TO LT_EVENTS. ENDIF. READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND INTO LS_EVENT. IF SY-SUBRC EQ 0. MOVE C_USER_COMMAND TO LS_EVENT-FORM. APPEND LS_EVENT TO LT_EVENTS. ENDIF. READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_PF_STATUS_SET INTO LS_EVENT. IF SY-SUBRC EQ 0. MOVE C_PF_STATUS_SET TO LS_EVENT-FORM. APPEND LS_EVENT TO LT_EVENTS. ENDIF. ENDFORM. |
#3
|
||||
|
||||
Hola ... asi como coloca Ibecerra en el ejemplo, el problema es que puedes usar la funcion
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING I_LOGO = 'LOGOQS1' IT_LIST_COMMENTARY = GT_LHEADER. Donde I_LOGO es opcional y puedes ver los logos que tienes disponibles en la transaccion OAER, y el otro campo es la tabla interna que contiene el titulo, ahora para eso existen los tipos H y S, H es para titulos de la cabecera y S es para textos normales el cual esta compuestos de 2 partes. gt_leader-typ = 'S'. gt_leader-key = 'Usuario'. gt_leader-info = 'BCUSER'. aparecera en tu ALV de esta forma: Usuario: BCUSER Espero sirva la info
__________________
David Carballido Córdova |
#4
|
|||
|
|||
Gracias a ambos por vuestra ayuda.
Lo de usar el 'REUSE_ALV_COMMENTARY_WRITE' ya lo intenté usar pero el problema es que las líneas en blanco que quiero meter se me añaden al final de la cabecera, aumentando el espacio entre la última línea de la cabecera y el comienzo de la información del listado. La cuestión era saber si se podía introducir líneas en blanco entre línea y línea. Gracias de nuevo por su ayuda. |
#5
|
||||
|
||||
Hola ... no lo he intentado , 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
__________________
David Carballido Córdova |
#6
|
|||
|
|||
DavidXD_XD,
Lo de meter una linea en blanco entre dos de datos en la tabla que lleva la información que se le pasa a la función 'REUSE_ALV_COMMENTARY_WRITE' ya lo intenté, y como comenté anteriormente, y creo que es por usar la función 'REUSE_ALV_GRID_DISPLAY', se me eliminan las lineas en blanco que hay en medio de la información y se empiezan a añadir al final de la última línea del TOP-OF-PAGE del listado. Empiezo a pensar que es una cosa de la función 'REUSE_ALV_GRID_DISPLAY', ya que la 'REUSE_ALV_LIST_DISPLAY' si que deja los espacios, y que no se puede solucionar. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|