campo de escritura libre con tamaño amplio

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • dmgman
    Senior Member
    • feb
    • 149

    #1

    campo de escritura libre con tamaño amplio

    Hola a todos.
    Me ha surgido la siguiente duda:

    Si quiero crear un campo de escritura libre, es decir, de comentarios, etc...

    - En el diccionario como defino dicho campo, cuya finalidad es que tenga la mayor longitud que se pueda.
    - En la dynpro, existe alguna caja de texto de escritura multilinea o algun elemento para tal uso.
    Carpe Diem !!
  • txape
    Junior Member
    • abr
    • 28

    #2
    Fijate en el editor de textos del enjoy sap

    Salu2

    Comentario

    • dmgman
      Senior Member
      • feb
      • 149

      #3
      Perdona mi desconocimiento, pero no te entiendo.
      Yo lo he hecho a partir de la herramienta de creacion de ventanas existente en los Module Pool.
      Carpe Diem !!

      Comentario

      • DCErick
        Moderator
        • mar
        • 1090

        #4
        Originalmente publicado por dmgman
        Hola a todos.
        Me ha surgido la siguiente duda:

        Si quiero crear un campo de escritura libre, es decir, de comentarios, etc...

        - En el diccionario como defino dicho campo, cuya finalidad es que tenga la mayor longitud que se pueda.
        - En la dynpro, existe alguna caja de texto de escritura multilinea o algun elemento para tal uso.
        Lograste solucionar este problema dmgman..
        Actualmente yo estoy buscando hacer algo para eso y no doy con bola.
        -------------------
        ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

        Comentario

        • luisgb
          Junior Member
          • nov
          • 10

          #5
          Holas,

          Para un programa en el cual en la pantalla de selección necesitaba un parámetro multitexto utilicé la funcion "TERM_CONTROL_EDIT" la cual al ejecutarse muestra un campo multitexto y graba en una tabla todas las lineas ingresadas.

          Espero les sirva de ayuda,

          Luis G

          Comentario

          • chivi82
            Member
            • mar
            • 64

            #6
            texto ilimitado

            La primera idea que nos viene a la cabeza cuando queremos guardar texto es crear un campo de char255 en una tabla Z. Pero no se mantendría el formato (negrita, cursiva, salta de línea). Para resolver este problema se pueden utilizar los textos de sap.

            Los diferentes id de textos se guardan en la tabla TTXID.

            1) Configurar Texto nuevo. (se podría utilizar un tipo de texto ya creado)

            Si vamos a la sm30 hay un botón donde para buscar pasos en el Customizing que trabajen con esta tabla. Debemos buscar una descripción parecida a 'Definir ID de texto'. Aquí crearemos nuestros objetos y clases nuevas. Previamente hay que buscar un tipo de objeto al que queremos añadir los nuevos ID's.

            2) Inicializar variables
            IF NOT cc_org IS INITIAL.
            CALL METHOD cc_org->free.
            ENDIF.

            IF NOT txtedit_nota IS INITIAL.
            CALL METHOD txtedit_nota->free.
            ENDIF.

            3) Recuperar Texto.

            Programa Control =>
            DATA: cc_nota TYPE REF TO cl_gui_custom_container.
            DATA: txtedit_nota TYPE REF TO cl_gui_textedit.
            ************************************************** **********************************
            PBO
            ************************************************** **********************************
            * Crear CUSTOM-CONTROL
            IF cc_nota IS INITIAL.

            CREATE OBJECT cc_nota
            EXPORTING
            container_name = 'CC_TEXTO' "Nombre del custom control del Dynpro
            EXCEPTIONS
            cntl_error = 1
            cntl_system_error = 2
            create_error = 3
            lifetime_error = 4
            lifetime_dynpro_dynpro_link = 5
            others = 6.

            ENDIF.

            * Asignarle edición de texto
            IF txtedit_nota IS INITIAL.

            CREATE OBJECT txtedit_nota
            EXPORTING
            wordwrap_mode = 2
            wordwrap_position = 72
            parent = cc_nota
            EXCEPTIONS
            error_cntl_create = 1
            error_cntl_init = 2
            error_cntl_link = 3
            error_dp_create = 4
            gui_type_not_supported = 5
            others = 6.

            * Quitar botones
            CALL METHOD txtedit_nota->set_toolbar_mode.
            CALL METHOD txtedit_nota->set_statusbar_mode.
            PERFORM llenar_texto.
            ENDIF.

            * Visualizar/Modificar
            IF action EQ 'DISP'.
            CALL METHOD txtedit_nota->set_readonly_mode
            EXPORTING
            readonly_mode = '1'.
            ELSE.
            CALL METHOD txtedit_nota->set_readonly_mode
            EXPORTING
            readonly_mode = '0'.
            ENDIF.

            ************************************************** **************************
            Rutina=> PERFORM llenar_texto.
            ************************************************** **************************
            DATA: w_header TYPE thead,
            t_tline TYPE TABLE OF tline,
            w_tline TYPE tline,
            t_texto TYPE TABLE OF char255.

            w_header-tdobject = 'FORMMAT'.
            w_header-tdname = zwf_mat_alta_dg-formnumber.
            w_header-tdspras = sy-langu.

            CALL FUNCTION 'READ_TEXT'
            EXPORTING
            id = w_header-tdid "Tipo de texto
            language = w_header-tdspras "Idioma
            name = w_header-tdname "Id del texto
            object = w_header-tdobject "Nombre del objeto
            TABLES
            lines = t_tline
            EXCEPTIONS
            id = 1
            language = 2
            name = 3
            not_found = 4
            object = 5
            reference_check = 6
            wrong_access_to_archive = 7
            OTHERS = 8.

            *Copiar texto con formato a sólo texto
            LOOP AT t_tline INTO w_tline.
            APPEND w_tline-tdline TO t_texto.
            ENDLOOP.

            * Guardar texto en objeto
            CALL METHOD txtedit_nota->set_text_as_r3table
            EXPORTING
            table = t_texto
            EXCEPTIONS
            error_dp = 1
            error_dp_create = 2
            OTHERS = 3.

            3) Guardar texto.
            DATA: w_header TYPE thead,
            t_tline TYPE TABLE OF tline,
            w_tline TYPE tline,
            t_texto TYPE TABLE OF char255,
            w_texto TYPE char255.

            CLEAR w_header.
            w_header-tdobject = 'FORMMAT'.
            w_header-tdname = zwf_mat_alta_dg-formnumber.
            w_header-tdspras = sy-langu.
            w_header-tdid = 'DG'. " texto datos generales

            * Eliminar texto anterior
            CALL FUNCTION 'DELETE_TEXT'
            EXPORTING
            id = w_header-tdid
            language = w_header-tdspras
            name = w_header-tdname
            object = w_header-tdobject
            EXCEPTIONS
            not_found = 1
            OTHERS = 2.

            * Recuperar texto de la pantalla
            CALL METHOD txtedit_nota->get_text_as_r3table
            IMPORTING
            table = t_texto.

            LOOP AT t_texto INTO w_texto.
            w_tline-tdformat = '*'.
            w_tline-tdline = w_texto.
            APPEND w_tline TO t_tline .
            ENDLOOP.

            * Guardar texto nuevo
            CALL FUNCTION 'SAVE_TEXT'
            EXPORTING
            header = w_header
            TABLES
            lines = t_tline
            EXCEPTIONS
            id = 1
            language = 2
            name = 3
            object = 4
            OTHERS = 5.

            CALL FUNCTION 'COMMIT_TEXT'.

            Comentario

            • isratol
              Member
              • jul
              • 63

              #7
              Justamente acabo de hacer eso....
              Y pues si le batalle, pero porque yo tenia que adapatarlo a una funcionalidad Estandar...( a una transaccion estandar de SAP)

              revisa este programa en la SE11..
              SAPSCRIPT_DEMO_NOTE_EDITOR

              yo practicamente lo copie y lo adapte al estandar...
              quedo muy bien...
              en cuanto a la longitud del campo... pues en ese programa, yo lo vi indefinida jajaja... tal vez puedas usar el tipo de dato LCHR o VARC....

              Lo que hace este programita, es guardarte el texto( por cada enter que des, o depende del ancho) en una tabla interna....
              de esa tabla interna le hice un loop y fui concatenando cada registro en un tipo de dato largo... y lo iba separando por pipes, para que al volverlo a cargar, cuando encuentre el pipe, significa que es otra linea..

              ahi das la funcionalidad que necesites...

              espero te resuelva un poco tu duda...
              Israel Toledo

              Comentario

              • isratol
                Member
                • jul
                • 63

                #8
                Jajaja..
                perdon es en la SE38, no en la se11
                Israel Toledo

                Comentario

                • DCErick
                  Moderator
                  • mar
                  • 1090

                  #9
                  Originalmente publicado por chivi82
                  La primera idea que nos viene a la cabeza cuando queremos guardar texto es crear un campo de char255 en una tabla Z. Pero no se mantendría el formato (negrita, cursiva, salta de línea). Para resolver este problema se pueden utilizar los textos de sap.
                  .
                  Gracias. Eso era exactamente lo que queria hacer.
                  -------------------
                  ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

                  Comentario

                  Trabajando...