#1
|
|||
|
|||
Table control - Salida en PAI
Buenas,
Llevaba un par de años sin tener que hacer table controls y modulpools y ahora estoy liado con uno pero no me acuerdo de casi nada. Además, por la versión, se ha diseñar con el editor alfanumérico y yo estaba acostumbrado a la maravilla del gráfico y su wizard. El tema, dejándome de dar vueltas, es que teniendo el table control definido y mostrando los datos que quiero, cuando intento hacer scroll (ya sea con las barras propias o los botones) el programa no hace nada, ejecuta el PAI y vuelve directamente a la pantalla inicial de SAP. Adjunto el código aunque aviso que seguramente sea lioso ya que llevo un par de dias mirando por internet y he copiado trozos de diversos foros donde he visto que daban soluciones, pero a mí aún me falla. Intuyo que es por el maldito PAI pero la verdad no sé que tendría que poner en el loop. --------DYNPRO------- PROCESS BEFORE OUTPUT. MODULE status_0200. MODULE data_retrieval. LOOP AT it_znorma57 INTO wa_znorma57 WITH CONTROL it_tcontrol CURSOR it_tcontrol-current_line. MODULE populate_screen. MODULE lines. ENDLOOP. * * * PROCESS AFTER INPUT. MODULE exit_0200 AT EXIT-COMMAND. LOOP AT it_znorma57. MODULE user_command_0200. ENDLOOP. ---------- PBO ----------------- *----------------------------------------------------------------------* * INCLUDE ZNORMA57_PBO * *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'ZINICIO_N57'. SET TITLEBAR 'ZIN57'. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------* *& Module STATUS_0200 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0200 OUTPUT. SET PF-STATUS 'ZNORMA57'. SET TITLEBAR 'ZN57'. ENDMODULE. " STATUS_0200 OUTPUT *&---------------------------------------------------------------------* *& Module DATA_RETRIEVAL OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE data_retrieval OUTPUT. * Se seleccionan los datos según los parámetros de la pantalla inicial. SELECT opbel gpart vkont budat bldat blart betrh FROM dfkkop INTO CORRESPONDING FIELDS OF TABLE it_znorma57 WHERE opbel IN s_opbel AND gpart IN s_gpart AND vkont IN s_vkont AND budat IN s_budat AND bldat IN s_bldat AND faedn IN s_faedn AND blart IN s_blart. DESCRIBE TABLE it_znorma57 LINES v_lineas. it_tcontrol-lines = v_lineas. ENDMODULE. " DATA_RETRIEVAL OUTPUT *&---------------------------------------------------------------------* *& Module POPULATE_SCREEN OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE populate_screen OUTPUT. DATA: ld_line TYPE i. * Set which line of table is a top of displayes table control. IF sy-stepl = 1. it_tcontrol-lines = it_tcontrol-top_line + sy-loopc - 1. ENDIF. * move fields from work area to screen fields. MOVE-CORRESPONDING wa_znorma57 TO znorma57. ENDMODULE. " POPULATE_SCREEN OUTPUT *&---------------------------------------------------------------------* *& Module LINES OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE lines OUTPUT. step_lines = sy-loopc. ENDMODULE. " LINES OUTPUT --------- PAI -------------- *----------------------------------------------------------------------* * INCLUDE ZNORMA57_PAI * *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0100 INPUT. CASE sy-ucomm. WHEN 'BACK'. LEAVE PROGRAM. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'CANCEL'. LEAVE PROGRAM. WHEN 'EJECUTAR'. SET SCREEN 0200. LEAVE SCREEN. ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0200 INPUT. save_code = ok_code. CLEAR ok_code. CASE save_code. WHEN 'BACK'. CLEAR: it_znorma57. REFRESH: it_znorma57. PERFORM limpiar_datos_seleccion. LEAVE TO SCREEN 0100. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'CANCEL'. LEAVE PROGRAM. WHEN 'PG+'. "Avanzar página offset = it_tcontrol-lines - step_lines. IF it_tcontrol-top_line LT offset. it_tcontrol-top_line = it_tcontrol-top_line + step_lines. ENDIF. WHEN 'PG-'. "Retroceder página offset = step_lines. IF it_tcontrol-top_line GT offset. it_tcontrol-top_line = it_tcontrol-top_line - step_lines. ELSE. it_tcontrol-top_line = 1. ENDIF. WHEN 'PG++'. " last page it_tcontrol-top_line = it_tcontrol-lines - step_lines + 1. WHEN 'PG--'. " first page it_tcontrol-top_line = 1. ENDCASE. ENDMODULE. " USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* *& Module EXIT INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE exit_0100 INPUT. LEAVE PROGRAM. ENDMODULE. " EXIT INPUT *&---------------------------------------------------------------------* *& Module EXIT_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE exit_0200 INPUT. save_code = ok_code. CLEAR ok_code. CASE save_code. WHEN 'BACK'. CLEAR: it_znorma57. REFRESH: it_znorma57. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'CANCEL'. LEAVE PROGRAM. ENDCASE. ENDMODULE. " EXIT_0200 INPUT Muchas gracias por vuestra ayuda! |
#2
|
|||
|
|||
El "MODULE lines" debería ir en el PAI, después del "LOOP AT it_znorma57".
Porque en el PBO el sy-loopc es igual a 0. Te paso esto como ayuda: |
#3
|
|||
|
|||
Perdón, en realidad, lo tenés que poner en el PAI, dentro del loop. Y el MODULE user_command_0200 después del loop.
PROCESS AFTER INPUT. MODULE exit_0200 AT EXIT-COMMAND. LOOP AT it_znorma57. MODULE lines. ENDLOOP. MODULE user_command_0200. |
#4
|
|||
|
|||
Muchas gracias por la respues
Pero ahora me pasa otra cosa y es que cuando muestro muchos registros y me desplazo hacia abajo con el scroll si marco dos registros y pulso un botón que tengo que me marca el bloque, lo hace pero de la pantalla anterior. Es decir, en el PAI parece que no detecta que el table control no está en la primera línea. Alguna idea? He logrado explicarme bien? Muchas gracias. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|