ABAP Cursosentenciasort
<HTML>
<HEAD> <TITLE>SORT</TITLE> </HEAD> <BODY BGCOLOR="#000000" TEXT="#FFFFFF" LINK="#0099FF" VLINK="#AA0000"> <p align="left">⚠ <b class="titulo">SORT⚠ </b></p>
<P align="left">⚠ <B>Definicin⚠ </B></P>
<p align="left">Ordena una tabla interna. </p>
<p align="left">⚠ <B>Sintaxis:⚠ </B></p>
SORT <tabla> [ <orden> ][ AS TEXT ]
[ BY <campo1> [ <orden> ][ AS TEXT ] ... <campon> [ <orden>][ AS TEXT ] ].
<p>El significado de las clusulas es el siguiente:</p>
<ul>
<li>BY -> Si no la utilizamos la tabla interna es ordenada
por la clave estndar. Para definir un criterio de ordenacin distinto a
la clave estndar se utiliza la clusula BY- Con la clusula BY los
campos se ordenarn de acuerdo con los componentes especificados
<campo1> ... <campon>. Estos componentes puede ser de cualquier
tipo (incluido tablas). El nmero de campos que se pueden ordenar est
restringido a 250. El sistema utiliza las opciones utilizadas antes de BY
(<orden> y AS TEXT) como valores por defecto para los campos
especificados en BY. Se pueden especificar el criterio de ordenacin en
tiempo de ejecucin, utilizando ( <nombre> ) en lugar de
<campo>. La variable <nombre> contiene el nombre del componente
de la tabla interna. Si la variable <nombre> est vaca, el sistema
ignorar el criterio de ordenacin, si contiene un nombre de componente
invlido, producir un error en tiempo de ejecucin. Para cualquier
campo, componente de una tabla interna, se puede indicar un offset
(posicin) y longitud. En <orden> se puede especificar cmo se debe
ordenar la tabla, de forma descendente, DESCENDING, o de formas ascendente,
ASCENDING,. Por defecto el orden es ascendente.</li>
<li>AS TEXT -> Influye en el mtodo de ordenacin para
campos alfanumricos. Sin esta opcin, el sistema ordena los campos
binariamente, de acuerdo con el sistema donde tengamos el sistema SAP R/3.
Con la opcin AS TEXT, el sistema ordena los campos alfanumricos de forma
alfabtica. Si especificamos AS TEXT antes de la clusula BY, slo
afectar a los campo de tipo C. Si lo especificamos despus de la
clusula BY slo podr ser utilizada en campos de tipo C, con lo
cual la ordenacin no es estable. Esto quiere decir que lneas con la
misma clave de ordenacin no tienen por qu ser ordenadas de la misma
forma en distintas ejecuciones. Si no hay suficiente espacio en memoria para
ordenar la tabla, el sistema escribe los datos en un fichero externo
temporal. El nombre de ese fichero est especificado en el parmetro
DIR_SORTTMP del perfil de arranque de SAP.</li>
</ul>
<p>⚠ <b>Ejemplo:⚠ </b></p>
<pre>DATA: ONR(7), DATE TYPE D, POSITION(3) TYPE N,
CUSTOMER(16),
PNR(5) TYPE N, NAME(10), UNITS TYPE I,
ORDERS TYPE I.
FIELD-GROUPS: HEADER, ORDER, PRODUCT, DATE_FIRST.
INSERT ONR DATE POSITION INTO HEADER. INSERT CUSTOMER INTO ORDER. INSERT PNR NAME UNITS INTO PRODUCT. INSERT DATE ONR POSITION INTO DATE_FIRST. ONR = 'GF00012'. DATE = '19921224'. POSITION = '000'. CUSTOMER = 'Good friend (2.)'. EXTRACT ORDER. ADD 1 TO POSITION. PNR = '12345'. NAME = 'Screw'. UNITS = 100. EXTRACT PRODUCT. ADD 1 TO POSITION. PNR = '23456'. NAME = 'Nail'. UNITS = 200. EXTRACT PRODUCT. ONR = 'MM00034'. DATE = '19920401'. POSITION = '000'. CUSTOMER = 'Moneymaker'. EXTRACT ORDER. ADD 1 TO POSITION. PNR = '23456'. NAME = 'Nail'. UNITS = 300. EXTRACT PRODUCT. ADD 1 TO POSITION. PNR = '34567'. NAME = 'Hammer'. UNITS = 4. EXTRACT PRODUCT. ONR = 'GF00011'. DATE = '19921224'. POSITION = '000'. CUSTOMER = 'Good friend (1.)'. EXTRACT ORDER. ADD 1 TO POSITION. PNR = '34567'. NAME = 'Hammer'. UNITS = 5. EXTRACT PRODUCT. SORT BY DATE_FIRST. LOOP. AT ORDER.
WRITE: /, / DATE, ONR, POSITION,
CUSTOMER, 'ordered:'.
ENDAT.
AT PRODUCT.
WRITE: / DATE, ONR, POSITION,
PNR, NAME, UNITS.
ENDAT.
ENDLOOP.</pre>
<p>El resultado en pantalla sera:</p> <pre>01041992 MM00034 000 Moneymaker ordered: 01041992 MM00034 001 23456 Nail 300 01041992 MM00034 002 34567 Hammer 4 </pre> <pre>24121992 GF00011 000 Good friend (1.) ordered: 24121992 GF00011 001 34567 Hammer 5 </pre> <pre>24121992 GF00012 000 Good friend (2.) ordered: 24121992 GF00012 001 12345 Screw 100 24121992 GF00012 002 23456 Nail 200 </pre></BODY>
</HTML>