MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 15/03/10, 10:58:07
Aleksei Aleksei is offline
Junior Member
 
Fecha de Ingreso: feb 2007
Mensajes: 4
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!
Responder Con Cita
  #2  
Viejo 15/03/10, 17:59:15
natytrotta natytrotta is offline
Junior Member
 
Fecha de Ingreso: nov 2006
Mensajes: 3
Smile

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:
Responder Con Cita
  #3  
Viejo 15/03/10, 18:08:30
natytrotta natytrotta is offline
Junior Member
 
Fecha de Ingreso: nov 2006
Mensajes: 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.
Responder Con Cita
  #4  
Viejo 16/03/10, 12:03:51
Aleksei Aleksei is offline
Junior Member
 
Fecha de Ingreso: feb 2007
Mensajes: 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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 18:13:04.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web