W Pub: ABAP Cursosentenciasort

<HTML>

<HEAD>

<TITLE>SORT</TITLE>

</HEAD>

<BODY BGCOLOR="#000000" TEXT="#FFFFFF" LINK="#0099FF" VLINK="#AA0000">

<p align="left">⚠ &lt;b class="titulo"&gt;SORT⚠ &lt;/b&gt;</p>

<P align="left">⚠ &lt;B&gt;Definicin⚠ &lt;/B&gt;</P>

<p align="left">Ordena una tabla interna. </p>

<p align="left">⚠ &lt;B&gt;Sintaxis:⚠ &lt;/B&gt;</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>⚠ &lt;b&gt;Ejemplo:⚠ &lt;/b&gt;</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>