Ver Mensaje Individual
  #1  
Viejo 18/05/10, 00:07:13
mitosap mitosap is offline
Member
 
Fecha de Ingreso: sep 2009
Mensajes: 57
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.
Responder Con Cita