W Pub: ABAP Cursosentenciaformendform

<html>

<head>

<title>FORM .. ENDFORM</title>

</head>

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

<p align="left">⚠ &lt;b&gt;<span class="titulo">FORM .. ENDFORM</span>⚠ &lt;/b&gt;</p>

<p align="left">⚠ &lt;b&gt;Definicin⚠ &lt;/b&gt;</p>

<p align="left">Esta sentencia permite definir subrutinas.</p>

<p align="left">⚠ &lt;b&gt;Sintaxis:⚠ &lt;/b&gt;</p>

<pre>FORM <subrutina> [ TABLES <parmetros-formales> ]

[ USING <parmetros-formales> ]

[ CHANGING <parmetros-formales> ]</pre>

<p><subrutina> define el nombre de la subrutina. Con TABLES,

  USING y CHANGING definimos los parmetros formales de la subrutina. Para las 
  subrutina internas nos es definir parmetros  ya que la subrutina tiene 
  acceso a todos los objetos de datos declarados en el programa principal. Para 
  las subrutinas externas se puede elegir pasar los objetos de datos mediante 
  parmetros o utilizar memoria compartida entre el programa que llama a la subrutina 
  y la subrutina (sentencia COMMON PART).</p>

<p>⚠ &lt;b&gt;Ejemplo 1:⚠ &lt;/b&gt;</p>

<pre>PERFORM WELCOME.

FORM WELCOME.

  WRITE / 'Hola mundo'.

ENDFORM.</pre>

<p><br>

  ⚠ &lt;b&gt;Ejemplo 2:⚠ &lt;/b&gt;</p>

<pre>DATA: BEGIN OF X.

        INCLUDE STRUCTURE SFLIGHT.

DATA: ADDITION(8) TYPE C,

      END OF X.

...

PERFORM U USING X.

...

FORM U USING X STRUCTURE SFLIGHT.

  WRITE: X-FLDATE.

ENDFORM.</pre>

<p>⚠ &lt;b&gt;Ejemplo 3:⚠ &lt;/b&gt;<br>

</p>

<pre>TYPES: BEGIN OF FLIGHT_STRUC,

         FLCARRID LIKE SFLIGHT-CARRID,
         PRICE    LIKE  SFLIGHT-FLDATE,
       END   OF FLIGHT_STRUC.</pre>

<pre>DATA: MY_FLIGHT TYPE FLIGHT_STRUC OCCURS 0 WITH HEADER LINE,

      IBOOK1    LIKE SBOOK        OCCURS 0 WITH HEADER LINE,
      IBOOK2    LIKE IBOOK1       OCCURS 0,
      STRUC     LIKE SBOOK.</pre>

<pre>PERFORM DISPLAY TABLES MY_FLIGHT IBOOK1 IBOOK2 USING STRUC.</pre>

<pre>FORM DISPLAY TABLES P_ITAB LIKE MY_FLIGHT[]

                    P_BOOK1 LIKE      IBOOK1[]
                    P_BOOK2 LIKE      IBOOK2[]
             USING  P_STRU  LIKE      STRUC.
  DATA L_CARRID  LIKE P_ITAB-FLCARRID.
  ...
  WRITE: / P_STRU-CARRID, P_STRU-CONNID.
  ...
  LOOP AT P_ITAB WHERE FLCARRID = L_CARRID.
    ...
  ENDLOOP.
  ...

ENDFORM.</pre>

<p>⚠ &lt;b&gt;Ejemplo 4:⚠ &lt;/b&gt;</p>

<pre>DATA: NUMBER_1 TYPE I VALUE 1,

      NUMBER_2 TYPE I VALUE 2,
      TEXT_1(10)      VALUE 'one',
      TEXT_2(10)      VALUE 'two'.</pre>

<pre>PERFORM CONFUSE USING NUMBER_1

                      NUMBER_2
                      TEXT_1
                      NUMBER_1
                      TEXT_2.</pre>

<pre>FORM CONFUSE USING PAR_NUMBER_1 TYPE I

                   PAR_NUMBER_2 TYPE I
                   PAR_TEXT_1   TYPE C
                   VALUE(PAR_V_NUMBER_1) TYPE I
                   VALUE(PAR_V_TEXT_2) TYPE C.
  ADD 3 TO PAR_V_NUMBER_1.
  ADD 4 TO PAR_NUMBER_1.
  ADD NUMBER_1 TO PAR_NUMBER_2.
  TEXT_2 = 'three'.
  PAR_TEXT_1 = PAR_V_TEXT_2.
  PAR_V_TEXT_2 = 'four'.

ENDFORM.

</pre>

<p>El contenido de los campos despus de la llamada al ⚠ &lt;a href="perform.htm" tppabs="perform.htm"&gt;PERFORM⚠ &lt;/a&gt;

  Es:</p>

<pre>NUMBER_1 = 5

NUMBER_2 = 7

TEXT_1 = 'two'

TEXT_2 = 'three' </pre>

<p>⚠ &lt;b&gt;Vase tambin:⚠ &lt;/b&gt; ⚠ &lt;a href="perform.htm" tppabs="perform.htm"&gt;PERFORM⚠ &lt;/a&gt;</p>

</body>

</html>