PDA

Ver la Versión Completa : Problemas con CALL FUNCTION 'SAVE_TEXT'


BY_MY
08/07/08, 09:16:29
Buenos dias a todos compañeros.

Se que sobre este tema se ha hablado por el foro y lo he mirado pero no consigo hacer lo que pretendo.

Yo trabajo en el modulo PS y necesitaria incorporar unos textos largos a los objetos que creo (pep's, cabeceras de Grafo, operaciones de Grafo, etc). Para ello si no me equivoco se usa la funcion CALL FUNCTION 'SAVE_TEXT'.

El caso es que he debbugeado el codigo y parece que el standart lo hace asi pero yo pongo los mismos campos o similares y aunque no da errores no modifica el texto que yo quiero. ¿Alguien sabe porque, alguna sugerencia o manual?.


mi codigo es:



DATA: header TYPE TABLE OF thead WITH HEADER LINE.
DATA: lines TYPE TABLE OF tline WITH HEADER LINE.



header-TDOBJECT = 'PMS'.
header-TDNAME = 'E00003732'.
header-TDID = 'LTXT'.
header-TDSPRAS = 'S'.
*TDTITLE
*header-TDFORM = 'SYSTEM'.
*TDSTYLE
header-TDVERSION = 00001.
header-TDFUSER = 'IBM14'.
header-TDFRELES = 700.
header-TDFDATE = 20080708.
*TDFTIME
*TDLUSER
*TDLRELES
*TDLDATE
header-TDLTIME = 095235.
header-TDLINESIZE = 072.
header-TDTXTLINES = 00004.
*TDHYPHENAT
*TDOSPRAS
header-MANDT = SY-MANDT.
append header.
lines-TDFORMAT = '*'.
lines-TDLINE = 'AAAAAAAAAAAAAAABBBBBBBBBBBBCCCCCC'.
append lines.
lines-TDFORMAT = '*'.
lines-TDLINE = 'AAAAAAAAAAAAAAABBBBBBBBBBBBCCC'.
append lines.
lines-TDFORMAT = '*'.
lines-TDLINE = 'AAAAAAAAAAAAAAABBBBBBBBBBBBCCCCC'.
append lines.
lines-TDFORMAT = '*'.
lines-TDLINE = 'AAAAAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCCCCD'.
append lines.

CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
HEADER = HEADER
INSERT = ' I '
SAVEMODE_DIRECT = ' X '
OWNER_SPECIFIED = ' SAPUSER '


LOCAL_CAT = ' '
IMPORTING
*FUNCTION =
NEWHEADER = HEADER
TABLES
LINES = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

COMMIT WORK.









Un saludo y gracias de antemano. ;) ;) ;) ;)

chivi82
08/07/08, 12:53:02
¿Has probado a llamar al módulo de función COMMIT_TEXT después de hacer el SAVE_TEXT?

BY_MY
08/07/08, 13:11:27
Es cierto, era eso. Lo que pasa es que no habia dicho que lo solucione, gracias. Ahora el problema va a ser leer textos planos sin un limite de caracteres ni de lineas pero supongo que habra alguna funcion o manera de hacerlo.


un saludo y gracias. ;-)

aldape
09/07/08, 23:30:01
pues, creo que seria con la funcion READ_TEXT...

no pense que hubiera una funcion SAVE_TEXT jeje...
la ultima vez que quice agregar un texto a un objeto, hice un batch-input que lo agregaba, :P... voy a investigar esta funcion

Saludos!

BY_MY
15/07/08, 09:26:15
Buenas a todos.

Seguimos con la funcion SAVE_TEXT. El caso es que cuando en el pep (es el modulo PS) se ha modificado el texto mediante el standart pues luego lanzo mi report y me modifica los textos perfectamente, hata aqui todo correcto pero.... El problema viene cuando creo el pep y voy a insertar el texto (que realmente es lo que necesito) pues no me lo genera, le pongo el campo 'insert' y me devuelve error al intentar abrirlo, por lo que intuyo que es algun bloqueo que pueda tener que al entrar por el standart a mano desbloquea y ya no necesita mas.


¿Alguien sabe Algo de esto? podrian echarme una mano, ahora si me corre prisa.

Muchas gracias.

ibecerra
15/07/08, 14:18:30
Al parecer hay campos que no estas llenando correctamente
por ejemplo
SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}LS_THEAD-TDNAME = XLIPS-VBELN. --> aquie deberia ir el nuevo codigo que se ha generado en este caso estoy poniendo el nro de pedido

te paso el codigo que tengo que funciona bien cuando creo o modificio una entrega , guardo un texto.
SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L0S32 {color: #3399FF;}.L0S33 {color: #4DA619;}.L0S52 {color: #0000FF;}LS_THEAD-TDOBJECT = 'VBBK'.
LS_THEAD-TDNAME = XLIPS-VBELN.
LS_THEAD-TDID = '0001'.
LS_THEAD-TDSPRAS = SY-LANGU.
LS_THEAD-TDFORM = 'SYSTEM'.
LS_THEAD-TDVERSION = '00001'.
LS_THEAD-TDFUSER = SY-UNAME.
LS_THEAD-TDFRELES = SY-SAPRL.
LS_THEAD-TDFDATE = SY-DATUM.
LS_THEAD-TDFTIME = SY-UZEIT.
LS_THEAD-TDLUSER = SY-UNAME.
LS_THEAD-TDLRELES = SY-SAPRL.
LS_THEAD-TDLDATE = SY-DATUM.
LS_THEAD-TDLTIME = SY-UZEIT.
LS_THEAD-TDLINESIZE = '072'.
LS_THEAD-TDTXTLINES = '00001'.
LS_THEAD-TDMACODE1 = 'VL02SAPMV50A'.
LS_THEAD-MANDT = SY-MANDT.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
HEADER = LS_THEAD
IMPORTING
NEWHEADER = LS_THEAD
TABLES
LINES = TLINETAB
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 4
OTHERS = 5.

BY_MY
15/07/08, 14:28:16
Hola Ibecerra.

Revisare lo que me cuentas pero creo que no es cuestion de campos ya que esta sacado del standar y funcionan pero como intente explicar solo funciona si antes modifico el texto por la transaccion cj20n a mano y a partir de ahi va perfecto.

Este modulo el PS creo que en eso es algo peculiar ya que a la hora de llamar ha bapis hay que inicializarlas en algunas ocasiones, etc.

Intullo que es como si necesitara generar el texto antes de modificarlo ya que aunque visualmente parezca creado me da la sensacion de que no es asi.

Alguna sugerencia? Como digo una vez hecha una modificacion a mano del texto en la cj20n, la bapi funciona perfectamente pero hasta entonces no.

De hecho si fuerzo el insert al intentar hacer la funcion commit me dice que no puede abrirlo.


saludos y gracias por todo, agradezco cualquier ayuda porque me corre mucha prisa.

bisonye
15/07/08, 16:24:13
Prueba con la funcion CREATE_TEXT. Es muy parecida, la utilicé hace mucho (No en PS) y me funcionó.

Saludos

BY_MY
15/07/08, 16:47:20
YA HE PROBADO Y TAMPOCO FUNCIONA.

La verdad espiezo a desesperar un poco porque debe ser alguna tonteria pero se me escapa ahora mismo. Tambien es cierto que parece propio PS.

SAludos y gracias por el interes. ;)

bisonye
16/07/08, 06:51:31
¿Has probado a meter el texto directamente desde la se37?
Yo le pasaría solo los estos campos de cabecera :
header-TDOBJECT = 'PMS'.
header-TDNAME = 'E00003732'.
header-TDID = 'LTXT'.
header-TDSPRAS = 'S'.
¿Estas seguro que el tdname es correcto?
Si te dice esto:
Intullo que es como si necesitara generar el texto antes de modificarlo ya que aunque visualmente parezca creado me da la sensacion de que no es asi. yo utilizaría la función create_text, el save creo que es para modificar.

A ver si sacamos algo en claro.

Saludos

BY_MY
16/07/08, 07:42:12
He intentado utilizar la funcion create test, por supuesto sin exito. La verdad es que una unica diferencia aparente es que hace un init_text antes del Save_text. Yo pense lo mismo que el create me lo solucionaria pero no. Por otra parte los datos son correctos porque ya digo... cuando entro en la cj20n y modifico el texto a mano y grabo... acto seguido me empieza a funcionar el report y me coje los cambios. Esto no me vale porque estoy generando un proceso automatico para crear pep y necesitaria meter el texto justo despues de crearlo sin intervencion manual.


De todas maneras revisare lo del create pero ya digo que lo probe con los mismos datos del SAve_text y nada.


Saludos y gracias a ver si podemos sacar algo y en cuanto sepa la solucion la posteare si nadie la posteo antes.

bisonye
16/07/08, 07:52:37
A ver que me entere.

Estas creando un pep (no se lo que es pero me imagino que será algún tipo de documento de PS). Cuando creas este pepe le quieres meter el texto extendido. Igual el problema que tienes es que el documento no está completamente creado (no se ha hecho el commit a la BD) y no puede crear el texto con el número de documento.

Es una idea, a ver si por ahí van los tiros.

Saludos

BY_MY
16/07/08, 07:57:59
Un pep es un objeto de PS (tampoco se mucho de ello) el caso es que graficamente hay una estructura de pep's y otros elementos, tipo arbol de programacion. El elemento generado esta porque aparece y no es cuestion de tiempo sino de algo que se cree o active con referencia al texto. La verdad es que me sorprende que el create tampoco funcione aunque el Save_Text tambien tiene una opcion insert que se comporta igual y ocurre lo mismo que contaba antes.


:confused: :confused: :confused: :confused: :confused:

Saludos.

bisonye
16/07/08, 08:02:42
Si el elemento esta creado y puedes crear a "mano" el texto yo iría a la se37 a crear el texto mediante la función (sacandolo del report) a ver que pasa. Si sigue sin crearlo ni da mensaje de error haz un debug a la función a ver que está pasando.

Suerte.

BY_MY
16/07/08, 08:08:18
Eso que me dices ya lo he hecho y sigue sin funcionar. He debuggeado la funcion standar, sobre todo el save_text y dependiendo de lo que intente hacer asi me da resultado, en uno de los casos el insert devolvia sy-subrc = 4 y de ahi el fallo. cambiando insert por el parametro modify otra cosa.


El caso es que hay algo que hace el standar de la cj20n que la funcion no.


Saludos y agradezco el interes. ;) :p ;) ;)

bisonye
16/07/08, 08:13:11
¿Y al ejecutar por la se37 el save_Text o el create_text que sy-subrc te devuelve?

BY_MY
16/07/08, 10:15:18
sy-subrc = 0.

De echo en la tabla que devuelve con los textos cambiados aparece el que yo introduzco como si lo hubiera hecho.


;-)

bisonye
16/07/08, 10:23:31
¿Y poniendo el commit despues de la función no te lo guarda? Parece que hace la entrada pero que no hace el commit.

Saludos

BY_MY
16/07/08, 11:08:33
En otros modulos creo que no pero aqui hay que llamar a la funcion commit y luego a la sentencia commit. Si fuera que no hace el commit no lo haria nunca y no dependiendo de una modificacion manual ¿no?. De todas maneras lo pruebo.


De verdad que os agradezco cualquier idea, en cuanto sepa que es lo posteare. porque me tiene ..... :D :D :D :D

BY_MY
17/07/08, 07:49:32
¿Alguna otra sugerencia?

Se agradece cualquier idea.

Gracias.

Antopi
17/07/08, 14:38:36
Hola BY_MY!!


Aquí solucionamos algo similar, usamos la función CREATE_TEXT y después regeneramos el mensaje, de esa manera si guarda los cambios requeridos, aclarando esto se hace con batch input.

BY_MY
23/07/08, 09:23:16
Buenas.

La verdad es que no entiendo eso de regenerar los textos y me gustaria evitar un bach-imput ya que el proceso ya es pesado de por si y todo se hace mediante bapis por lo que el bach o similar es el ultimo recurso.

Sabeis el porque podria suceder y asi despues ver la solucion?


Muchas gracias a todos por el interes. :p :p :p

i_arnaiz
23/07/08, 10:33:48
Hola a todos.

Os recomiendo que hecheis un ojo a este include, con el que se pueden crear, leer y modificar textos de una manera sencilla.

http://sap4.com/wiki/index.php?title=ZISAPTEXT

un saludo.

Nacho

BY_MY
30/07/08, 09:49:00
Hola a todos.

Al final los textos los creaba correctamente pero el problema era que se crean con un idioma y al crear el PEP (objeto al que iba asignado el texto) la bapi crea un registro en la tabla PRPS pero en este registro no hay idioma.

Se soluciona poniendo el idioma del texto.

Un saludo y gracias a todos por la ayuda. Espero que nos sirva en un futuro.



:p :p :p :p

gambitworms
04/09/08, 09:47:55
La verdad es que tengo exactamente el mismo problema que tenías tu. Pero no entiendo como lo solucionaste.

La verdad que le paso a la tabla header el idioma por header-tdspras?

Podrías explicarmelo mejor?

Muchas gracias de antemano.

BY_MY
29/10/08, 15:52:09
Buenas.

Creo que te conteste por el correo pero por si acaso lo hago por aqui. El problema no esta en el testo que le metemos en la funcion sino en la creacion del pep que en la tabla prps no pone el campo correspondiente al idioma y lo deja en blanco con lo que el debe ir a la PRPS y no tiene idioma de Texto largo y va a los textos largos (suponiendo que vaya si no tiene el campo) y busca con texto vacio pero tu le insertaste uno con lo que no devuelve nada.

Un saludo y espero lo solucionaras.

jcamilogo
09/01/09, 14:10:03
Hola que tal !

He sentido un alivio enorme al encontrar este tema en el foro porque estoy teniendo el mismo problema :( Lo que no encuentro es el campo en el que se especifica el idioma para el elemento PEP en el llamado de la BAPI.

Estoy que me enloquezco con esto, agradeceria enormemente tu ayuda.

Saludos,

jcamilogo

Buenas.

Creo que te conteste por el correo pero por si acaso lo hago por aqui. El problema no esta en el testo que le metemos en la funcion sino en la creacion del pep que en la tabla prps no pone el campo correspondiente al idioma y lo deja en blanco con lo que el debe ir a la PRPS y no tiene idioma de Texto largo y va a los textos largos (suponiendo que vaya si no tiene el campo) y busca con texto vacio pero tu le insertaste uno con lo que no devuelve nada.

Un saludo y espero lo solucionaras.

acesap
27/01/09, 11:52:08
Estoy también en la misma situación, ¿Cómo pasaste el idioma para el PEP a través de la BAPI?.

sechin4
14/07/14, 23:32:30
Después de crear el elemento Pep deben actualizar la tabla PRPS el campo TXTSP = SY-LANGU para que puedan grabar el texto con la función SAVE_TEXT

Slds.