duda sobre ordenación de tablas.

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • awas90
    Member
    • may
    • 68

    #1

    duda sobre ordenación de tablas.

    Buenas compañeros, tenog una duda a ver si podeis ayudarme.

    Tengo dos tablas, vamos a llamarlas t_entregas y t_doc_aux.

    ambas tablas tienen la siguiente estructura:

    DATA: BEGIN OF t_entregas OCCURS 0,
    vbeln LIKE vbak-vbeln,
    posnr LIKE vbap-posnr,
    sernr LIKE equi-sernr,
    matnr LIKE equi-matnr,
    werks LIKE vbap-werks,
    lgort LIKE lips-lgort.
    DATA: END OF t_entregas.

    DATA: BEGIN OF n_doc_aux OCCURS 0,
    vbeln LIKE n_docu-vbeln,
    num_pos LIKE n_docu-num_pos.
    DATA: END OF n_doc_aux.

    Vale, imaginemos que n_doc_aux esta ordenada por num_pos, de menor a mayor.

    ahora necesito ordenar t_entregas en función de n_doc_aux.

    Había pensado en pasar los datos de t_entregas a una nueva tabla auxiliar para ordenar esta, limpiar la original y pasar los datos de nuevo a t_entregas.

    sin embargo, por mucho que lo intento, no logro sacar el código abap...

    Alguna ayuda?
  • zocter
    Member
    • nov
    • 36

    #2
    "ahora necesito ordenar t_entregas en función de n_doc_aux."

    ¿En que sentido? ¿Puedes dar un ejemplo con datos y como tendría que quedar?

    Comentario

    • Ripper87
      Member
      • dic
      • 37

      #3
      Bueno, no se si hay una forma más facil. Pero usando la lógica que dijiste de usar una tabla auxiliar lo haría de esta forma:

      Código:
      * Ordenamos por documento y posicion
      SORT t_entregas BY vbeln posnr.
      
      * Ordenamos por num_pos
      SORT n_doc_aux BY num_pos.
      
      LOOP AT n_doc_aux.
        LOOP AT t_entregas WHERE vbeln EQ n_doc_aux-vbeln.
          t_entregas_aux = t_entregas.
          APPEND t_entregas_aux.
        ENDLOOP.
      ENDLOOP.
      Y en la tabla t_entregas_aux quedaría la tabla tal cual como quieres.

      Comentario

      • Mauricio Hidalgo
        Senior Member
        • may
        • 481

        #4
        y porque no ocupan SORT ?

        Comentario

        • zocter
          Member
          • nov
          • 36

          #5
          Originalmente publicado por Ripper87
          Bueno, no se si hay una forma más facil. Pero usando la lógica que dijiste de usar una tabla auxiliar lo haría de esta forma:

          Código:
          * Ordenamos por documento y posicion
          SORT t_entregas BY vbeln posnr.
          
          * Ordenamos por num_pos
          SORT n_doc_aux BY num_pos.
          
          LOOP AT n_doc_aux.
            LOOP AT t_entregas WHERE vbeln EQ n_doc_aux-vbeln.
              t_entregas_aux = t_entregas.
              APPEND t_entregas_aux.
            ENDLOOP.
          ENDLOOP.
          Y en la tabla t_entregas_aux quedaría la tabla tal cual como quieres.
          No se yo.... Eso no tiene mucho sentido... para que quieres tener una tabla ordenada por numero de posicion de otra tabla?

          Comentario

          • Ripper87
            Member
            • dic
            • 37

            #6
            De los clientes se espera cualquier cosa.

            Igual no veo descabellado lo que se quiere, como dije no se si hay una forma más sencilla para esto, digamos que tienes los documentos en las tablas de SAP:

            123
            321
            456
            654

            Y por alguna razón del negocio, el cliente quiere que en el reporte/formulario siempre se muestre en este orden:

            1. 456
            2. 123
            3. 654
            4. 321

            Pues ese orden está dado por una tablita Z que diga:

            Doc Orden
            123 2
            321 4
            456 1
            654 3

            Se le hace un sort a esta tabla por el campo Orden:

            456 1
            123 2
            654 3
            321 4

            Y llegamos al punto en donde estaba el amigo... como ordenamos la tabla que nombre al principio con respecto a esta?

            Comentario

            • zocter
              Member
              • nov
              • 36

              #7
              Originalmente publicado por Ripper87
              De los clientes se espera cualquier cosa.

              Igual no veo descabellado lo que se quiere, como dije no se si hay una forma más sencilla para esto, digamos que tienes los documentos en las tablas de SAP:

              123
              321
              456
              654

              Y por alguna razón del negocio, el cliente quiere que en el reporte/formulario siempre se muestre en este orden:

              1. 456
              2. 123
              3. 654
              4. 321

              Pues ese orden está dado por una tablita Z que diga:

              Doc Orden
              123 2
              321 4
              456 1
              654 3

              Se le hace un sort a esta tabla por el campo Orden:

              456 1
              123 2
              654 3
              321 4

              Y llegamos al punto en donde estaba el amigo... como ordenamos la tabla que nombre al principio con respecto a esta?
              En ese caso tú código me parece correcto, no creo que haya otra opción o no se me ocurre. Con Inner Join sobre tablas del diccionario, pero para tablas internas esa opción no me parece mal

              Comentario

              • awas90
                Member
                • may
                • 68

                #8
                Al final pude resolverlo. Pondre el codigo en pseudo-sap.

                DATA: " Declaramos tabla auxiliar dónde estara el orden. (A.K.A n_doc_aux)

                DATA: " Declaramos tabla auxiliar dónde volcaremos los datos ya ordenados.
                (A.K.A entrega_aux)

                CLEAR n_doc_aux.
                REFRESH entrega_aux.

                IF n_doc_aux[] is initial.
                n_doc_aux[] = n_doc[] " n_doc es la tabla original.
                ENDIF.

                SORT n_doc_aux BY "Aqui ordenamos como lo deseemos, en este caso por
                "una variable llamada num_pos (por ejemplo).

                LOOP AT n_doc_aux.
                LOOP AT entrega WHERE ..... " Condiciones de busqueda. entrega es la
                " tabla original.
                " Volcamos los datos de entrega a entrega_aux.
                ENDLOOP.
                ENDLOOP.

                CLEAR entrega.
                REFRESH entrega.

                IF entrega[] is INITIAL.
                entrega[] = entrega_aux[].
                ENDIF.

                Espero que se entienda. Así logramos que la tabla entrega esté ordenada de la forma que queriamos.

                Espero que les sirva a más gente


                EDIT: Pensaba que este foro respetaba las tabulaciones...

                Comentario

                Trabajando...