Table control - Salida en PAI

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Aleksei
    Junior Member
    • feb
    • 4

    #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!
  • natytrotta
    Junior Member
    • nov
    • 3

    #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:

    Comentario

    • natytrotta
      Junior Member
      • nov
      • 3

      #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.

      Comentario

      • Aleksei
        Junior Member
        • feb
        • 4

        #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.

        Comentario

        Trabajando...