MUNDOSAP

MUNDOSAP (foro/index.php)
-   Formularios - SAPScript - Smartforms (foro/forumdisplay.php?f=5)
-   -   Salto de Pagina ---Sapscript (foro/showthread.php?t=36816)

mitosap 18/05/10 00:07:13

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 18/05/10 11:56:13

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!

mitosap 18/05/10 13:42:05

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.

mitosap 21/05/10 13:48:17

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


Husos Horarios son GMT. La hora en este momento es 15:47:53.

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