Salto de Pagina ---Sapscript

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • mitosap
    Member
    • sep
    • 57

    #1

    Salto de Pagina ---Sapscript

    Hola amigos.

    Tengo un programa control desde el cual hago un llamado al sapscript para imprimir un estado de cuenta. El programa es selectivo (parameter -un cliente a la vez). Me han pedido generar varios estados de cuenta (select-options) y para ello necesito que por cada cliente salte de página y se impriman sus encabezados (ventanas Header,Sociedad, Resumen).

    He puesto el llamado al formulario-sapscript dentro de un loop, con un at first y un at last (para abrir y cerrar el formulario solo una vez). Todo bien, pero cuando se trata de un nuevo cliente no se como manejar el salto de la pagina.

    A continuación parte del código:

    **La tablita interna tiene n códigos de cliente, a los cuales se les selecciona **partidas abiertas y compensadas del periodo de estado de cuenta y se car-
    **gan en otras tablitas que se usan para imprimir detalle (Ventana MAIN con
    **diferentes elementos).
    **>>
    ** ctab_kunnr
    ** 1) 25
    ** 2) 47
    ** 3) 84
    ** ..
    ** ..
    ** N) NN
    **>>

    Loop at ctab.
    At first.
    ITCPO-TDPAGESLCT = SPACE. "Todas las páginas
    ITCPO-TDNEWID = 'X'. "Crea nuevo spool
    ITCPO-TDCOPIES = 1. "1 copia
    ITCPO-TDDEST = 'LOCL'. "Nombre de la impresora
    ITCPO-TDPREVIEW = SPACE. "No Preview
    ITCPO-TDCOVER = SPACE. "No portada
    ITCPO-TDIMMED = 'X'. "Imprime inmediatamente
    ITCPO-TDDELETE = 'X'. "Borra después de imprimir

    CALL FUNCTION 'OPEN_FORM'
    EXPORTING
    FORM = 'ZESTADO_CUENTA'
    LANGUAGE = SY-LANGU
    OPTIONS = ITCPO
    DEVICE = 'PRINTER'
    DIALOG = 'X'
    EXCEPTIONS
    OTHERS = 1.

    IF SY-SUBRC NE 0.
    WRITE /'error al abrir formulario'.
    STOP.
    ENDIF.
    Endat.
    move ctab-kunnr to w_kunnr.

    * Las ventanas header, sociedad y resumen se están imprimiendo solo para el
    *primer cliente. Las ventanas address, info y MAIN si se imprimen para los *diferentes clientes.
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'HEADER'
    EXCEPTIONS
    OTHERS = 1.

    * Imprimimos la ventana Sociedad
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'SOCIEDAD'
    EXCEPTIONS
    OTHERS = 1.

    * --- Imprimimos la ventana Address
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'ADDRESS'
    EXCEPTIONS
    OTHERS = 1.

    * Imprimimos la ventana CABECERA
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'INFO'
    ELEMENT = '503'
    EXCEPTIONS
    OTHERS = 1.

    * Imprimimos la ventana CABECERA
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'INFO'
    ELEMENT = '505'
    EXCEPTIONS
    OTHERS = 1.

    * Imprimimos la ventana CABECERA
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'RESUMEN'
    EXCEPTIONS
    OTHERS = 1.
    **
    * --- Imprime Titulo de Pagos Realizados
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'MAIN'
    ELEMENT = '522'
    EXCEPTIONS
    OTHERS = 1.

    * Imprimimos la ventana MAIN Pagos Realizados
    sort rtab by budat.
    loop at rtab where statu = 'PC'.
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'MAIN'
    ELEMENT = '534'
    EXCEPTIONS
    OTHERS = 1.
    endloop.

    sort rtab by budat.
    loop at itab where statu = 'PC'.
    CALL FUNCTION 'WRITE_FORM'
    EXPORTING
    WINDOW = 'MAIN'
    ELEMENT = '535'
    EXCEPTIONS
    OTHERS = 1.
    endloop.
    **
    .....
    .....
    ......
    ......
    **

    AT LAST.
    IF l_error IS INITIAL.
    CALL FUNCTION 'CLOSE_FORM'.
    IF sy-subrc NE 0.
    l_error = 'X'.
    ENDIF.
    ENDIF.
    ENDAT.

    Ya he hecho el salto pero no con formulario sapscript si no con WRITE ** directamente, incluyendo un at new (gracias a la ayuda que recibí en este mismo foro).

    loop ctab.
    ...
    AT NEW kunnr
    new-page
    ENDAT.
    ..
    ..
    endloop.




    Agradecido infinitamente con la ayuda que me puedan brindar.

    Saludos y que estén muy bien.
  • emerson.tosin
    Member
    • dic
    • 57

    #2
    Se las paginas son iguales para todos los clientes, és solo abrir y cerrar el formulario en el final del LOOP ( OPEN_FORM E CLOSE_FORM ). Puede también, crear un ELEMENTO DE DATOS "/E" con el comando "NEW-PAGE".

    espero que ayude!
    Editado por última vez por emerson.tosin; 18/05/2010, 11:58:20.

    Comentario

    • mitosap
      Member
      • sep
      • 57

      #3
      Gracias Emerson.

      El tema es que si cololo el open-form y close-form por cliente, me va a mostrar la pantalla de pre-visualización por cada uno. Lo que estoy buscando es que haga el open y close form solo para el primer y último cliente respectivamente.
      Lo del comando new-page como elemento de texto, se lo incluí en la primera ventana de titulos (HEADER) y se comporta igual. A partir del segundo cliente me está omitiendo las ventanas HEADER, SOCIEDAD Y RESUMEN. La ventanas ADDRESS, INFO Y MAIN si las imprime pero de forma corrida no obedece el salto de pagina (new-page):


      CALL FUNCTION 'WRITE_FORM'
      EXPORTING
      WINDOW = 'HEADER'
      ELEMENT = 'NP'
      EXCEPTIONS
      OTHERS = 1.

      El Elemento de texto NP tiene el comando NEW-PAGE.
      Estaré haciendo algo mal seguramente, espero su valiosa ayuda.....

      Saludos.

      Comentario

      • mitosap
        Member
        • sep
        • 57

        #4
        Si funcionó como me dijo Emerson, incluyendo un elemento de texto con una linea comando NEW-PAGE.

        ...
        ...
        sort rtab by budat.
        loop at itab where statu = 'PC'.
        CALL FUNCTION 'WRITE_FORM'
        EXPORTING
        WINDOW = 'MAIN'
        ELEMENT = '535'
        EXCEPTIONS
        OTHERS = 1.
        endloop.
        **
        **
        ** Esto me provoca el salto a la proxima pagina.
        CALL FUNCTION 'WRITE_FORM'
        EXPORTING
        WINDOW = 'MAIN'
        ELEMENT = 'NP'
        EXCEPTIONS
        OTHERS = 1.

        Lo que me queda ahora es controlar el reseteo de contador de pagina por cada cliente.
        Amigos un millón de gracias y que esten muy bien....

        Comentario

        Trabajando...