MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   duda sobre ordenación de tablas. (foro/showthread.php?t=71672)

awas90 20/05/14 11:49:22

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 20/05/14 15:38:48

"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?

Ripper87 20/05/14 17:53:46

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:


Y en la tabla t_entregas_aux quedaría la tabla tal cual como quieres.

Mauricio Hidalgo 20/05/14 21:37:18

y porque no ocupan SORT ?

zocter 21/05/14 14:02:40


No se yo.... Eso no tiene mucho sentido... para que quieres tener una tabla ordenada por numero de posicion de otra tabla?

Ripper87 21/05/14 14:20:36

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?

zocter 21/05/14 15:00:08

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 :)

awas90 21/05/14 17:01:11

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... :(


Husos Horarios son GMT. La hora en este momento es 22:11:49.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web