PDA

Ver la Versión Completa : Popup Alv


juanmgdelomana
21/10/08, 14:48:25
Hola:

Tengo que hacer una modificación en un programa de tipo module pool que va a hacer un chequeo cuando pincho un boton 'AÑADIR' y añado una/s nueva/s factura/s con su proveedor, datos que yo introduzco.

El tema es ver si esta es única y en el caso de que no lo sea debería mostrar un popup con una información en ALV (las coincidencias encontradas, es decir las facturas que tienen el mismo nº de factura y el mismo proveedor). Lo estoy intentando hacer con un módulo de funciones ya que este trozo de código se utilizará más adelante en otros sitios.

Se os ocurre algo, lo que he intentado no me para de dar distintos dumps. ¿Me podría ayudar alguien? Os dejo mi código.

Muchas gracias por vuestra colaboración. Un saludo.

type-pools: slis. " ALV Global types

data: l_exit.
data: ls_private type slis_data_caller_exit.
data: ls_fieldcat type slis_fieldcat_alv.
data: lt_fieldcat type slis_t_fieldcat_alv.

DATA: REF_DDIC LIKE DD03P-TABNAME.

data: ls_selfield TYPE SLIS_SELFIELD.

data: cuenta type i.

data: rp_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.


refresh it_zesfera_cab_fact.
clear it_zesfera_cab_fact.


loop at IT_FACTURA.

SELECT *
from zesfera_cab_fact
APPENDING table it_zesfera_cab_fact
* into table it_zesfera_cab_fact
where factura = it_factura-factura and
proveedor = it_factura-proveedor and
estatus <> 'B'.

endloop.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = sy-repid
I_INTERNAL_TABNAME = 'it_zesfera_cab_fact'
I_STRUCTURE_NAME = REF_DDIC
* I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = sy-repid
CHANGING
CT_FIELDCAT = RP_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
* OTHERS = 3
.


CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_ZEBRA = 'X'
I_TABNAME = it_zesfera_cab_fact
IT_FIELDCAT = rp_fieldcat[]
IMPORTING
ES_SELFIELD = LS_SELFIELD
TABLES
T_OUTTAB = it_zesfera_cab_fact.


ENDFUNCTION.

DavidXD_XD
21/10/08, 17:07:55
Hola ... asi como colocas puedes usar ese REUSE_POPUP_ALV .... pero tbm puedes usar el mismo REUSE_ALV_LIST_DISPLAY y esa es mas conocida y facil que usar que la otra, ahora la cuestion es q abarca toda la pantalla y no actua como POPUP, para eso debes usar los campos de esa funcion:

FUNCTION REUSE_ALV_LIST_DISPLAY.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(I_INTERFACE_CHECK) DEFAULT SPACE
*" VALUE(I_BYPASSING_BUFFER) TYPE CHAR01 OPTIONAL
*" VALUE(I_BUFFER_ACTIVE) DEFAULT SPACE
*" VALUE(I_CALLBACK_PROGRAM) LIKE SY-REPID DEFAULT SPACE
*" VALUE(I_CALLBACK_PF_STATUS_SET) TYPE SLIS_FORMNAME DEFAULT
*" SPACE
*" VALUE(I_CALLBACK_USER_COMMAND) TYPE SLIS_FORMNAME DEFAULT SPACE
*" VALUE(I_STRUCTURE_NAME) LIKE DD02L-TABNAME OPTIONAL
*" VALUE(IS_LAYOUT) TYPE SLIS_LAYOUT_ALV OPTIONAL
*" VALUE(IT_FIELDCAT) TYPE SLIS_T_FIELDCAT_ALV OPTIONAL
*" VALUE(IT_EXCLUDING) TYPE SLIS_T_EXTAB OPTIONAL
*" VALUE(IT_SPECIAL_GROUPS) TYPE SLIS_T_SP_GROUP_ALV OPTIONAL
*" VALUE(IT_SORT) TYPE SLIS_T_SORTINFO_ALV OPTIONAL
*" VALUE(IT_FILTER) TYPE SLIS_T_FILTER_ALV OPTIONAL
*" VALUE(IS_SEL_HIDE) TYPE SLIS_SEL_HIDE_ALV OPTIONAL
*" VALUE(I_DEFAULT) DEFAULT 'X'
*" VALUE(I_SAVE) DEFAULT SPACE
*" VALUE(IS_VARIANT) LIKE DISVARIANT STRUCTURE DISVARIANT
*" OPTIONAL
*" VALUE(IT_EVENTS) TYPE SLIS_T_EVENT OPTIONAL
*" VALUE(IT_EVENT_EXIT) TYPE SLIS_T_EVENT_EXIT OPTIONAL
*" VALUE(IS_PRINT) TYPE SLIS_PRINT_ALV OPTIONAL
*" VALUE(IS_REPREP_ID) TYPE SLIS_REPREP_ID OPTIONAL
*" VALUE(I_SCREEN_START_COLUMN) DEFAULT 0
*" VALUE(I_SCREEN_START_LINE) DEFAULT 0
*" VALUE(I_SCREEN_END_COLUMN) DEFAULT 0
*" VALUE(I_SCREEN_END_LINE) DEFAULT 0

Debes colocarle las coordenadas en los parametros:
I_SCREEN_START_COLUMN
I_SCREEN_START_LINE
I_SCREEN_END_COLUMN
I_SCREEN_END_LINE

Espero te ayude :D