Urgente! Duda

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Karla V.
    Senior Member
    • may
    • 100

    #1

    Urgente! Duda

    Hola Amigos, como hago para eliminar registos duplicados en una tabla declarada como FIELD-SYMBOLS TYPE ANY TABLE??
    intenté con:
    DELETE ADJACENT DUPLICATES FROM <lt_data> COMPARING LIFNR BELNR.
    Pero me da error que dice
    The specified type has no structure and therefore no component called
    "LIFNR". .
    Yo pensé que era por el nombre del campo pero ese campo si existe en la tabla....
  • Duarco
    Member
    • jun
    • 54

    #2
    Hola como vas?...

    intenta a hacer el borrado de la siguiente forma:

    DELETE ADJACENT DUPLICATES FROM <lt_data> COMPARING ('LIFNR BELNR').

    Los field symbol como tal tienen la referencia en memoria de la tabla que hayas asignado, por lo tanto, no puedes acceder directamente al campo que desees.

    Comentario

    • Karla V.
      Senior Member
      • may
      • 100

      #3


      Hola!
      al principio no me dio error de compilación pero cuando lo ejecuté me salio este error:

      - "LIFNR BELNR" contains a specification of the form "A->B" for a
      dynamic access to an object attribute.
      This type of attribute access is only permitted statically at this
      point in time.

      - "LIFNR BELNR" contains significant closing spaces (only possible for the type
      STRING).
      Es una tabla dinámica no se q mas hacerle

      Comentario

      • Duarco
        Member
        • jun
        • 54

        #4
        La tabla es completamente dinamica? o la creaste a partir de otra tabla interna?

        Comentario

        • Karla V.
          Senior Member
          • may
          • 100

          #5
          Bueno yo realmente estoy modificando el codigo que hizo otra persona, yo soy nueva programando en esto y no entiendo bien qué hizo, te envío lo que creo que es el centro de todo, según entiendo creo toda una tabla dinamica llamada gt_data y después no entiendo que hace el ASSIGN gt_data->* TO <lt_data>.? copia toda la información con estructura y todo?
          *&--
          CALL METHOD cl_alv_table_create=>create_dynamic_table
          EXPORTING
          it_fieldcatalog = gt_fcat
          IMPORTING
          ep_table = gt_data
          EXCEPTIONS
          generate_subpool_dir_full = 1
          OTHERS = 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.

          ASSIGN gt_data->* TO <lt_data>.
          CREATE DATA ls_data LIKE LINE OF <lt_data>.
          ASSIGN ls_data->* TO <ls_data>.

          Comentario

          • Karla V.
            Senior Member
            • may
            • 100

            #6


            Bueno lo resolvi de otra manera, vacié una variable que era lo que hacia que se me duplicaran los registros, gracias de todos modos.

            Comentario

            • Duarco
              Member
              • jun
              • 54

              #7
              si, efectivamente es una tabla dinamica....

              aca creas la tabla dinamica segun un catalogo de tabla (gt_fcat)

              CALL METHOD cl_alv_table_create=>create_dynamic_table
              EXPORTING
              it_fieldcatalog = gt_fcat
              IMPORTING
              ep_table = gt_data
              EXCEPTIONS
              generate_subpool_dir_full = 1
              OTHERS = 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.

              Y la tabla o estructura creada queda en gt_data.

              Haz el intento de eliminar la tabla a gt_data y no al field symbol.

              Hice la prueba, y el

              DELETE ADJACENT DUPLICATES FROM <fs> COMPARING ALL FIELDS.

              Si funciona, no se si te servira la comparacion por todos los campos.

              Comentario

              • Duarco
                Member
                • jun
                • 54

                #8
                OK...con gusto, la idea es colaborar

                Comentario

                • Karla V.
                  Senior Member
                  • may
                  • 100

                  #9
                  Gracias, si lo probé con el ALL pero tenia que ordenar la tabla y me desconfiguraba la presentación, lo que estaba pasando es que una tabla quedaba llena con informacion vieja y por eso repetia los registros, lo que hice fue vaciar la tabla y listo, Gracias! ahora no se si sabes como me copio una clase de objeto?
                  es que necesito probar la clase original que hizo el programador para ir comparando si me falta algo, yo pense que servia presionando boton derecho sobre el nombre de la clase y copiandola pero cuando hago eso, pareciera que lo copiara todo con sus metodos, pero al ejecutar la transaccion dice que no encuentra los metodos de la clase.

                  Comentario

                  • Duarco
                    Member
                    • jun
                    • 54

                    #10
                    mmm... la verdad las clases no son mi fuerte, pero valida la transaccion SE24.

                    Comentario

                    • Karla V.
                      Senior Member
                      • may
                      • 100

                      #11


                      Gracias, ahhhh ya sé, parece que si crea la copia pero hay que activarle todos los modulos.

                      Comentario

                      • Duarco
                        Member
                        • jun
                        • 54

                        #12
                        OK, es con gusto

                        Comentario

                        Trabajando...