PDA

Ver la Versión Completa : SapScript importar tablas DO TIMES


RakelD
02/04/09, 14:11:50
Hola!

Soy nueva en esto de los Sapscripts, y tengo que hacer uno que me liste una tabla que tengo en un Zprograma creado por mi, para obtener los datos que quiero que saque.

El problema es que a mi Sapscript lo llama un programa estándar de Sap, por lo que las llamadas a las ventanas y sus elementos no las controlo. Entonces, lo que me gustaría hacer es que una vez esté en el elemento de la main que quiero, me muestre la tabla.

E intentado hacer un do times, trayendome una variable con la cantidad de lineas que tiene la tabla y llamar al metodo que me obtiene los registros, pero aún así nada. Necesito algo para que me saque todos los datos de mi tabla y no sólo el primero.

Agradecería cualquier sugerencia ya que me urge la entrega.

Muchas gracias de antemano por todo.

Un saludo.

jcflores
02/04/09, 14:32:43
Dentro de los elementos de texto del SAPScript hay algunos que hacen referencia a tablas y se imprimen de acuerdo a la cantidad de registro de cada una de ellas, podrias usar uno de ellos como "pivot" para hacer la impresion de tu tabla Z.

.

RakelD
02/04/09, 14:46:23
Hola, no he entendido muy bien lo que me dices, sorry.

Yendo a donde, me coge la tabla interna i_tab que está en mi programa zprograma_sap por ejemplo... no es una tabla de diccionario, funciona tambien para eso...? :confused:

jcflores
02/04/09, 14:49:38
Me gustaria saber con que tipo de formulario estas trabajando y desde donde es llamado.

Lo otro es que dentro del formulario deberias tener elementos de texto estandares con los cuales puedes hacer loop's a tablas estandares,

Tu puedes usar como referencia uno de esos elementos de texto y colgar tu tabla interna ahi.

RakelD
02/04/09, 14:56:59
La llamada la hago desde el estandar de SAP f.18, me he creado un SapScript que es una copia de otro estandar, ya estaba todo creado, entonces las llamadas que hacia al otro las hace igual a este, por lo que yo no controlo las llamadas a las ventanas y a los elementos.

Entonces para hallar los datos que queria, me he creado un programa nuevo, unicamente para obtenerlos , un z_programa, y lo llamo desde las ventanas del main de mi SapScript con:
perform obtener in z_programa
using && ....
changing && ....
endperform
Lo que quiero es que me liste una i_tab que hay dentro de ese método obtener, pero que me liste toda la tabla, no solo la primera linea.

Espero haberme explicado.... :o

jcflores
02/04/09, 15:42:32
Dentro de los elementos de texto de la copia del formulario, uno de ellos debe hacer referencia alguna tabla estandar (puedes guiarte de acuerdo a los campos que se imprimen en la parte inferior del elemento de texto)... inclusive puede que uno de esos te sirva para la tabla z que intentas imprimir.

edu_alo_martinez
02/04/09, 16:10:19
Has intentado desde tu programa Z, usar las funciones OPEN_FORM y WRITE_FORM ????


Saludos,

RakelD
02/04/09, 16:15:58
Si lo hago, pero cuando voy haciendo el debug al llamar a la funcion write_form se me queda en la siguiente instruccion:

check co_perform-active <> true.

teniendo ambas como valor X. por lo que sale de la funcion sin ir a ninguna instruccion mas de la funcion......

edu_alo_martinez
02/04/09, 16:57:15
Yo te recomendaria que coloques dentro de un loop la funcion write_form, para que no solo te muestre el primer elemento y puedas ver todo el contenido de la tabla interna.

LOOP AT itab.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'CAB'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'MAIN'
* IMPORTING
* PENDING_LINES =
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
BAD_PAGEFORMAT_FOR_PRINT = 7
SPOOL_ERROR = 8
CODEPAGE = 9
OTHERS = 10
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDLOOP.

RakelD
02/04/09, 17:08:08
Ya lo tengo así, he intentado hacerlo poniendo antes un open_form y nada la cuestion es que
check co_perform-active <> true
tienen el mismo valor, por lo que no ejecuta las siguientes instrucciones..., estando ya en el codigo de la funcion write_form.

Pasa del primer rojo al ultimo, porque tienen los dos el valor X.

function write_form.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(ELEMENT) DEFAULT SPACE
*" VALUE(FUNCTION) DEFAULT 'SET'
*" VALUE(TYPE) DEFAULT 'BODY'
*" VALUE(WINDOW) DEFAULT 'MAIN'
*" EXPORTING
*" VALUE(PENDING_LINES)
*" EXCEPTIONS
*" ELEMENT
*" FUNCTION
*" TYPE
*" UNOPENED
*" UNSTARTED
*" WINDOW
*" BAD_PAGEFORMAT_FOR_PRINT
*" SPOOL_ERROR
*" CODEPAGE
*"----------------------------------------------------------------------
data:
create type i,
etype like itcca-tdetype.

check co_perform-active <> true.

pending_lines = false.

if rstxc-tddebug = true.
perform debug_write_form using element function type window.
endif.
if rstxc-tdopen = false.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 423
v1 = 'WRITE_FORM'.
perform exception.
message a423 with 'WRITE_FORM' raising unopened.
endif.
if rstxc-tdclose = true.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 443
v1 = 'WRITE_FORM'.
perform exception.
message a443 with 'WRITE_FORM' raising unstarted.
endif.
* Start Parser, if not started
if type = 'BODY' or window ne system_window_main.
if rstxc-tdwinopen = false.
perform pa_open_windows.
endif.
if rstxc-tdstarted = false and window = system_window_main.
perform pa_open.
if rstxc-tddebug = true.
perform debug_write_form using element function type window.
endif.
endif.
endif.
* Type
case type.
when 'TOP'.
if window ne 'MAIN'.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 424
v1 = 'TOP'.
perform exception.
message a424 with 'TOP' raising type.
endif.
etype = etype_top.
when 'BOTTOM'.
if window ne 'MAIN'.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 424
v1 = 'BOTTOM'.
perform exception.
message a424 with 'BOTTOM' raising type.
endif.
etype = etype_bottom.
when 'BODY'.
etype = etype_current.
when others.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 425
v1 = type.
perform exception.
message a425 with type raising type.
endcase.
* Read Windows
read table windows with key tdwindow = window
tdetype = etype
binary search.
if sy-subrc ne 0.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 426
v1 = window
v2 = rstxc-tdform.
perform exception.
message a426 with window rstxc-tdform raising window.
endif.
* Read ELEMENTS
read table elements with key tdwindow = window
tdevent = element
binary search.
if sy-subrc ne 0.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 427
v1 = element
v2 = window
v3 = rstxc-tdform.
perform exception.
message a427 with element window rstxc-tdform raising element.
endif.
perform tx_set using tx_form_txtind.
if tx_catalog-tdastyle ne space.
clear tx_catalog-tdastyle.
modify tx_catalog index tx_catalog-tdtxtind.
endif.
* Function
case function.
when ev_func_set.
perform ev_set_element using etype create.
when ev_func_append.
if window = system_window_main and etype = etype_current.
perform ev_set_element using etype create.
else.
perform ev_append_element using etype create.
endif.
when ev_func_delete.
perform ev_delete_element.
when others.
call function 'SAPSCRIPT_MESSAGE_DEF'
exporting no = 428
v1 = function.
perform exception.
message a428 with function raising function.
endcase.
if rstxc-tddebug = true.
perform debug_func using elements-tdfromline.
debug-break. "#EC NOBREAK
endif.
* Main
check window = system_window_main.

case etype.
when etype_current.
ev_actual = create.
perform pa_body.
when etype_bottom.
perform pa_bottom.
if pc_bottom_height > ft-bot_height.
pending_lines = true.
endif.
when etype_top.
endcase.

endfunction.

edu_alo_martinez
02/04/09, 17:39:46
Ve a la transaccion SP01 y encontraras un boton que dice "Further Selection Criteria..." al dar click aparecera una ventana y selecciona la opcion "User-Defined" y en la opcion que dice "PRINT-IMMEDIATELY" si esta sin el chek, colocaselo.

Y dime esto es para imprimir Purchase Orders???

Saludos,