#1
|
|||
|
|||
Problema al introducir un texto en un campo 'CREATE_TEXT'
Hola a todos
Estoy intentando introducir un texto en un aviso en el módulo 'PM'. Total estoy usando la función CREATE_TEXT. El problema es que si entro desde el standar y escribo algo en el texto y guardo, si luego lanzo mi programa, introduce el texto sin problemas. Pero si no entro en el aviso y no modifico el texto, no introduce nada. Totalmente desesperado!! LLevo ya una semana con esto!! Os pongo el código que utilizo: * DEFINICIÓN DE TABLAS INTERNAS DATA: it_header TYPE TABLE OF thead WITH HEADER LINE. DATA: it_lines TYPE TABLE OF tline WITH HEADER LINE. *DEFINICION DE VARIABLES DATA: texto(264) TYPE c VALUE 'TEXTO QUE QUIERO INTRODUCIR', longitud TYPE i VALUE 0, contador TYPE i VALUE 0, lineas TYPE i VALUE 0, desplazamiento TYPE i VALUE 0. *INTRODUCIMOS EL TEXTO POR LINEAS it_lines-tdformat = '*'. it_lines-tdline = texto. append it_lines. CALL FUNCTION 'CREATE_TEXT' EXPORTING FID = 'LTXT' FLANGUAGE = 'S' FNAME = '000010046949' "nº del aviso donde introduzco el texto FOBJECT = 'QMEL' FFORMAT = '*' TABLES FLINES = IT_LINES EXCEPTIONS NO_INIT = 1 NO_SAVE = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. **HACEMOS EL COMMIT CALL FUNCTION 'COMMIT_TEXT' EXPORTING OBJECT = IT_HEADER-TDOBJECT NAME = IT_HEADER-TDNAME. COMMIT WORK. ******************************************************* |
#2
|
|||
|
|||
La verdad que he comprobado que el CREATE_TEXT funciona!!. Es decir si luego despues de lanzar mi programa ejecuto la función READ_TEXT me devuleve el texto que he introducido con mi programa, pero si entro en el aviso no se ve el texto...estoy loco loco ya!!
|
#3
|
|||
|
|||
Esto del create_text es espinoso....
Parece que todo está bien aunque las pocas veces que he utilizado la función no le he puesto el * ni en la llamada ni en la tabla con las líneas. Aunque sinceramente no creo que sea el problema pruebalo, por probar... Otra cosa, supongo que lo habrás comprobado pero revisa bien el número de 0 del FNAME. Para comprobar que realmente funciona crea el texto a mano y revisa los parametros, borralo e intenta crearlo por código con los mismos parámetros (con copy paste para que no se escape nada) A ver si encontramos el fallo!! |
#4
|
|||
|
|||
Puede Servir...
Te comento que recientemente yo tuve problemas con dicha función, y a final de cuentas pude resolverlo de acuerdo a lo que yo estaba manejando dentro de mi programa. Debido a que yo necesitaba insertar/actualizar los textos, dependiendo del momento de ejecución del programa, tuve que optar por la funcion CREATE_TEXT y SAVE_TEXT, dependiendo de lo requerido. Para esto, utilizaba de inicio la función READ_TEXT, para comprobar la existencia del texto, y entonces si determinar si iba a crear o insertar el texto en cuestión. Posteriormente aplicaba el commit, y por ultimo, tuve q poner un wait, ya que por alguna razón, y debido a que estaba dentro de un ciclo para barrer las posiciones de mi material, no "alcanzaba" a actualizarse mi texto en cada pasada, y en la siguiente pasada eliminaba lo escrito previamente (aparte el wait del commit, no me funcionó :S). Te incluyo parte de mi codigo, esperando que te sirva de algo.
v_name = 'TEXTOPOSICION' aqui iria tu texto a buscar v_texto = 'TEXTO A ESCRIBIR' ti_header-tdname = v_name. ti_header-tdid = 'B01'. ti_header-tdspras = sy-langu. ti_header-tdobject = 'EBAN'. ti_header-mandt = sy-mandt. call function 'READ_TEXT' exporting client = sy-mandt id = 'B01' language = sy-langu name = v_name object = 'EBAN' tables lines = ti_lines exceptions not_found = 4. ti_lines-tdformat = '*'. ti_lines-tdline = v_texto. append ti_lines to ti_lines. if sy-subrc eq 4. call function 'CREATE_TEXT' exporting fid = 'B01' flanguage = sy-langu fname = v_name fobject = 'EBAN' save_direct = 'X' tables flines = ti_lines exceptions no_init = 1 no_save = 2 others = 3. else. call function 'SAVE_TEXT' exporting client = sy-mandt header = ti_header insert = ' ' savemode_direct = 'X' tables lines = ti_lines exceptions id = 1 language = 2 name = 3 object = 4 others = 5. endif. call function 'BAPI_TRANSACTION_COMMIT' exporting wait = 'X'. * Obligamos a que espere un segundo, y libere objetos call function 'DEQUEUE_ALL'. wait up to 1 seconds. |
#5
|
|||
|
|||
yo una vez tuve que hacer eso tambien, lo que hice fue hacer un batch-input a la transaccion y que agegara el texto desde ahi... me funciona muy bien
y ademas le agrega la linea de fecha-hora-usuario que lo hace por default el SAP... te dejo el codigo del batch que utilice... saludos... data name like stxl-tdname. name = cliente_grid_info-qmnum. perform bdc_dynpro using 'SAPLIQS0' '0100'. perform bdc_field using 'BDC_CURSOR' 'RIWO00-QMNUM'. perform bdc_field using 'BDC_OKCODE' '/00'. perform bdc_field using 'RIWO00-QMNUM' cliente_grid_info-qmnum. perform bdc_dynpro using 'SAPLIQS0' '7200'. perform bdc_field using 'BDC_OKCODE' '=TXQM'. perform bdc_dynpro using 'SAPLSTXX' '1100'. perform bdc_field using 'BDC_OKCODE' '=TXBA'. " change position perform bdc_field using 'BDC_OKCODE' '=EDPO'. perform bdc_dynpro using 'SAPLSTXX' '1155'. perform bdc_field using 'BDC_CURSOR' 'RSTXT-TXLINENR'. perform bdc_field using 'BDC_OKCODE' '=EDWE'. refresh u_data. call function 'READ_TEXT' exporting client = sy-mandt language = 'S' object = 'QMEL' id = 'LTXT' name = name tables lines = u_data exceptions others = 1. data linec type i. data linet(3) type c. describe table u_data lines linec. linec = linec + 2. write linec to linet left-justified. perform bdc_field using 'RSTXT-TXLINENR' linet. perform bdc_dynpro using 'SAPLSTXX' '1100'. perform bdc_field using 'BDC_OKCODE' '=TXBA'. data n type i value 2. data field(20) type c. loop at t_data into s_data. data nc(3) type c. write n to nc left-justified. concatenate 'RSTXT-TXLINE(' nc ')' into field. perform bdc_field using field s_data-tdline. n = n + 1. endloop. perform bdc_dynpro using 'SAPLIQS0' '7200'. perform bdc_field using 'BDC_OKCODE' '=BUCH'. perform bdc_field using 'BDC_CURSOR' 'VIQMEL-QMTXT'. |
#6
|
|||
|
|||
Nada de nada
Muchas gracias a todos por el interés!!
He revisado bien los ceros del tdname....he quitado y puesto el '*' y he echo la llamada call function 'BAPI_TRANSACTION_COMMIT' exporting wait = 'X' tambíen call function 'DEQUEUE_ALL'. wait up to 1 seconds. y nada de nada He mirado en las tablas STXH y STXL y allí da de alta el texto correctamente. Lo curioso es que si despues de este código ejecuto solo la función READ_TEXT me devuelve el código que he introducido pero cuando voy a mirarlo no aparece escrito. Cosa que si que ocurre cuando antes entro y modifico yo a mano....Me encantaría evitar el Bach imput por ahora ya que sería todo muy lento. ¿Alguna idea más? Úlima edición por gambitworms fecha: 10/09/08 a las 07:03:41. |
#7
|
|||
|
|||
El lenguaje lo estas poniendo a piñon...
¿Puede ser eso? Está claro que el texto te lo crea, si has revisado el ID, NAME y OBJECT la única variable que te queda es el lenguaje. |
#8
|
|||
|
|||
Nada de nada
Aquí os mando el código que tengo completo. También he puesto el lenguaje con sy-langu....
De verdad no se que carajo puede ser....Negro estoy ya!!! Y encima es urgente así que... Insisto si luego hago un text con la funcion READ_TEXT y con los paramétros que le paso me rescata el texto pero cuando entro a mirarlo no esta!!...o está y no lo muestra.... En fin.... ¿Alguna idea más? Gracias CODIGO: * DEFINICIÓN DE TABLAS INTERNAS DATA: it_header TYPE TABLE OF thead WITH HEADER LINE. DATA: it_lines TYPE TABLE OF tline WITH HEADER LINE. *DEFINICION DE VARIABLES DATA: texto(264) TYPE c VALUE 'TEXTO A INTRODUCIR', **Limpiamos las tablas que hemos definido CLEAR it_lines. CLEAR it_header. *************************************************** ************************************************** it_header-tdobject = 'QMEL'. it_header-tdid = 'LTXT'. it_header-tdspras = sy-langu. it_header-tdform = 'PM_QMEL'. it_header-mandt = sy-mandt. it_header-tdname = '000010046946'. *MIRAMOS SI HAY TEXTO call function 'READ_TEXT' exporting client = sy-mandt id = 'LTXT' language = sy-langu name = '000010046946' object = 'QMEL' tables lines = it_lines exceptions not_found = 4. **INTRODUCIMOS EL TEXTO POR LINEAS it_lines-tdformat = '*'. it_lines-tdline = texto. append it_lines. ****************************** if sy-subrc eq 4. *SI NO EXISTE EL TEXTO LO CREAMOS call function 'CREATE_TEXT' exporting fid = 'LTXT' flanguage = sy-langu fname = '000010046946' fobject = 'QMEL' save_direct = 'X' tables flines = it_lines exceptions no_init = 1 no_save = 2 others = 3. else. *SI EXISTE INSERTAMOS call function 'SAVE_TEXT' exporting client = sy-mandt header = it_header insert = ' ' savemode_direct = 'X' tables lines = it_lines exceptions id = 1 language = 2 name = 3 object = 4 others = 5. endif. ****HE REALIZADO TODOS LOS COMMIT QUE CONOZCO Y NADA DE NADA *** CALL FUNCTION 'COMMIT_TEXT'. COMMIT WORK. call function 'BAPI_TRANSACTION_COMMIT' exporting wait = 'X'. call function 'DEQUEUE_ALL'. wait up to 1 seconds. |
#9
|
|||
|
|||
Por fin....llego la solución.
Es un indicador que tiene la tabla QMEL y que para que lo muestre bien tenemos que meterle una 'X'.
UPDATE QMEL SET INDTX = 'X' WHERE QMNUM = tdname. Vamos solucionado Muchas gracias a todos por el interés |
#10
|
|||
|
|||
Holaaa
Oye ese update donde lo haces? al final de todo lo que hiciste ... podrías ayudarme, tengo el mismo problema ...
__________________
LISS |
Herramientas | Buscar en Tema |
Desplegado | |
|
|