Problema al introducir un texto en un campo 'CREATE_TEXT'

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • gambitworms
    Junior Member
    • jun
    • 24

    #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.
    ************************************************** *****
  • gambitworms
    Junior Member
    • jun
    • 24

    #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!!

    Comentario

    • bisonye
      Senior Member
      • ago
      • 635

      #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!!
      http://sapymas.blogspot.com/

      Comentario

      • FranCone
        Junior Member
        • abr
        • 4

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

        Comentario

        • aldape
          Senior Member
          • dic
          • 204

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

          Comentario

          • gambitworms
            Junior Member
            • jun
            • 24

            #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?
            Editado por última vez por gambitworms; 10/09/2008, 07:03:41.

            Comentario

            • bisonye
              Senior Member
              • ago
              • 635

              #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.
              http://sapymas.blogspot.com/

              Comentario

              • gambitworms
                Junior Member
                • jun
                • 24

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

                Comentario

                • gambitworms
                  Junior Member
                  • jun
                  • 24

                  #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

                  Comentario

                  • lau_azul19
                    Junior Member
                    • may
                    • 7

                    #10
                    Holaaa

                    Oye ese update donde lo haces? al final de todo lo que hiciste ... podrías ayudarme, tengo el mismo problema ...
                    Originalmente publicado por gambitworms
                    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
                    LISS

                    Comentario

                    • lau_azul19
                      Junior Member
                      • may
                      • 7

                      #11
                      Ayuda con CREATE_TEXT

                      Hola chicos!!!

                      Buscando ayuda para salir de un problema ...

                      Sucede que intento agregar un texto largo a la CS01, pero con la función CREATE_TEXT, de alguna manera no me funciona para crear un texto nuevo, sin embargo si para modificar, si crea en tablas los registros, pero desde la CS03, Cs02 no puedo visualizar esa información.

                      Alguien ha tenido este problema ??

                      O alguien sabrá que puede estar ocurriendo ??

                      Se los agradecere mucho
                      LISS

                      Comentario

                      • HernanGN
                        Junior Member
                        • abr
                        • 4

                        #12
                        Gracias, me estaba sucediendo lo mismo

                        Gracias, me estaba sucediendo lo mismo

                        Saludos, Hernán


                        Originalmente publicado por gambitworms
                        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

                        Comentario

                        • HernanGN
                          Junior Member
                          • abr
                          • 4

                          #13
                          Bapi_alm_notif_data_add

                          En ciertas ocasiones fallaba, por lo que terminé haciéndolo con la Bapi BAPI_ALM_NOTIF_DATA_ADD, y de paso evito el update directo a la tabla.

                          Saludos, Hernán González Navas


                          Originalmente publicado por HernanGN
                          Gracias, me estaba sucediendo lo mismo

                          Saludos, Hernán
                          www.hernangn.com.ar

                          Comentario

                          Trabajando...