Está en la página 1de 33

SENTENCIAS ABAP

Sentencias HANA
Pasa letras a mayúsculas
TRANSLATE lv_vkona TO UPPER CASE.

Saca Ceros de la izquierda de una cadena


SHIFT lv_vkona LEFT DELETING LEADING '0'.

Colocar Ceros a la izquierda de una cadena


UNPACK ls_doc_xblnr-xblnr to <ls_xblnr>-low.
ls_doc_xblnr-xblnr = ‘12345678’
<ls_xblnr>-low = ‘000012345678’

Concatenar campos
  DATA: lv_clave(8).
  lv_clave = I_DFKKOP-HVORG && I_DFKKOP-TVORG.

Lectura con Cursor y por páquetes.. Es más rápido cuando


trabajamos con muchos registros.
DATA:   xcursor    TYPE cursor,
        pack_size  TYPE i,
t_rep06  LIKE fkk_id_tax_data OCCURS 0,
t_alvtab LIKE gs_tab OCCURS 0.

  OPEN CURSOR xcursor FOR
     SELECT (sel_fields) FROM dfkkrep06
              WHERE bukrs EQ p_bukrs                        "Index 001
              AND   opbel EQ gs_opbel-opbel
              AND   ubdat IN s_ubdat
              AND   uldat IN s_uldat
              AND   (where)
     ORDER BY (order).

  DO.
    REFRESH t_rep06 .
    REFRESH t_alvtab .
    FETCH NEXT CURSOR xcursor
          INTO CORRESPONDING FIELDS OF TABLE t_rep06
          PACKAGE SIZE pack_size.
    IF sy-subrc NE 0.
      CLOSE CURSOR xcursor.
      EXIT.
    ENDIF.

    PERFORM fill_output_table.
    PERFORM extraer_datos.

    gs_layout-min_linesize = '132'.
    gs_layout-list_append = 'X'.  "Combine ALV list

    PERFORM print_alv_list TABLES t_alvtab.
  ENDDO.

Select con %

  SELECT SINGLE const INTO @DATA(lv_const)
    FROM zficat_cl_param
    WHERE repid EQ 'ZFICAR_CL_CLIENTES_FICTI'
      AND const LIKE 'BLART_%'
      AND value EQ @lw_ptficab-blart.
  IF sy-subrc EQ 0.
    lw_ptficab-blart = lv_const+6(2).
  ENDIF.

Loop con índices. Es mil veces más rápido que sin ellos

TYPE SORTED TABLE OF
Este es el tipo más apropiado si necesita una tabla que se ordene a medida que la llena. Las
tablas ordenadas se llenan con la declaración INSERT. Las entradas se insertan de acuerdo con
la secuencia de clasificación definida a través de la clave de la tabla. Cualquier entrada ilegal se
reconoce tan pronto como intenta agregarla a la tabla. El tiempo de respuesta para el acceso a
la clave es logarítmicamente proporcional al número de entradas de la tabla, ya que el sistema
siempre utiliza una búsqueda binaria. Las tablas ordenadas son particularmente útiles para el
procesamiento parcialmente secuencial en un LOOP si especifica el comienzo de la clave de la
tabla en la condición WHERE.
En este caso el SY-TABIX trae el número del registro de la tabla dentro del loop.
Ejemplo:
  
DATA: lt_zdfkkzr_key    TYPE SORTED TABLE OF zdfkkzr
            WITH UNIQUE KEY primary_key
                COMPONENTS NRZAS  OPBEL OPUPK OPUPW.
    move lt_zdfkkzr[]       to lt_zdfkkzr_key[]. 
    sort lt_param_cod by const.     
    LOOP AT lt_zdfkkzr_key ASSIGNING FIELD-SYMBOL(<ls_zdfkkzr>) USING KEY primary_key.
      DATA(lv_indice) = sy-tabix.
      READ TABLE lt_param_cod ASSIGNING <ls_param_cod>
        WITH KEY const = <ls_zdfkkzr>-zcod_compro
        BINARY SEARCH.

      CHECK sy-subrc IS INITIAL.
      CHECK <ls_param_cod>-value EQ 'CASTIGO'.

      READ TABLE lt_dfkk TRANSPORTING NO FIELDS
        WITH KEY gpart = <ls_zdfkkzr>-gpart
                 vkont = <ls_zdfkkzr>-vkont
                 BINARY SEARCH.

      CHECK sy-subrc IS NOT INITIAL.

      DELETE lt_zdfkkzr INDEX lv_indice.                                                

    ENDLOOP.

TYPE HASHED TABLE OF
Este es el tipo más apropiado para cualquier tabla donde la operación principal es el acceso
por clave. No puede acceder a una tabla hash utilizando su índice. El tiempo de respuesta para
el acceso a la clave permanece constante, independientemente del número de entradas de la
tabla. Al igual que las tablas de bases de datos, las tablas hash siempre tienen una clave única.
Las tablas hash son útiles si desea construir y utilizar una tabla interna que se asemeje a una
tabla de base de datos o para procesar grandes cantidades de datos.
En este caso el SY-TABIX SIEMPRE trae un 0 en la tabla dentro del loop.

DATA spfli_tab TYPE HASHED TABLE


                   OF spfli
                   WITH UNIQUE KEY primary_key
                     COMPONENTS carrid connid
                   WITH NON-UNIQUE SORTED KEY city_from_to
                     COMPONENTS cityfrom cityto
                   WITH NON-UNIQUE SORTED KEY city_to_from
                     COMPONENTS cityto cityfrom.

    FIELD-SYMBOLS <spfli> LIKE LINE OF spfli_tab.

    SELECT *
           FROM spfli
           ORDER BY carrid, connid
           INTO TABLE @spfli_tab.

    WRITE / 'LOOP without USING KEY' COLOR = 4.


    SKIP.
    LOOP AT spfli_tab ASSIGNING <spfli>.
      WRITE: / <spfli>-carrid COLOR = 3,
               <spfli>-connid COLOR = 3 INTENSIFIED off,
               <spfli>-cityfrom,
               <spfli>-cityto.
    ENDLOOP.
    SKIP.

    WRITE / 'LOOP with USING KEY cityfrom cityto' COLOR = 4.


    SKIP.
    LOOP AT spfli_tab ASSIGNING <spfli> USING KEY city_from_to.
      WRITE: / <spfli>-carrid,
               <spfli>-connid,
               <spfli>-cityfrom COLOR = 3,
               <spfli>-cityto   COLOR = 3 INTENSIFIED off.
    ENDLOOP.
    SKIP.

    WRITE / 'LOOP with USING KEY cityto cityfrom' COLOR = 4.


    SKIP.
    LOOP AT spfli_tab ASSIGNING <spfli> USING KEY city_to_from.
      WRITE: / <spfli>-carrid,
               <spfli>-connid,
               <spfli>-cityfrom COLOR = 3 INTENSIFIED off,
               <spfli>-cityto   COLOR = 3.
    ENDLOOP.
    SKIP.

Usar tablas STATICS.


Estas tablas permanecen siempre abiertas tanto en el programa que llama a la función como
en la misma función.
FUNCTION zficaf_cl_paym_061_fields.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(I_PERSON_ADDRESS) TYPE  BAPIBUS1006_ADDRESS OPTIONAL
*"     REFERENCE(I_VKONT) TYPE  VKONT_KK
*"     REFERENCE(I_GPART) TYPE  GPART_KK OPTIONAL
*"     REFERENCE(I_WAERS) TYPE  DFKKZK-WAERS
*"     REFERENCE(I_BUKRS) TYPE  BUKRS
*"     REFERENCE(I_COD_RECAUDADOR) TYPE  ZFICA_E_COD_RECAUDADOR
*"     REFERENCE(I_CONSULTA_DETALLE) TYPE
*"        ZFICAST_SAPRDD_DETL_CONS_DEUDA
*"  EXPORTING
*"     VALUE(E_CONSULTA_DETALLE) TYPE  ZFICAST_SAPRDD_DETL_CONS_DEUDA
*"----------------------------------------------------------------------

  
*  Declaro la tabla con estructura creada en la SE11
  STATICS: lt_static_detalle TYPE TABLE OF zfica_cl_061_fields.

* Leo si existe.
  READ TABLE lt_static_detalle INTO DATA(ls_static_detalle)
    WITH KEY i_consulta_detalle-cod_barra = i_consulta_detalle-cod_barra.
  IF sy-subrc = 0.
* Si existe sólo paso los valores que ya están calculados para no calcular de nuevo    
MOVE ls_static_detalle-e_consulta_detalle      TO e_consulta_detalle.
    IF ls_static_detalle-i_consulta_detalle-monto_deuda NE i_consulta_detalle-monto_deuda.
      CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERN_9'
        EXPORTING
          currency        = i_waers
          amount_internal = i_consulta_detalle-monto_deuda
        IMPORTING
          amount_external = amount_ex.

      e_consulta_detalle-monto_deuda = amount_ex.
    ENDIF.
    EXIT. “Hará que se salga de la función llevando el valor que tenía la tabla STATICS
  ENDIF.

* Deaquí para abajo está la rutina para el cálculo de la variable de salida


……………………………………
……………………………………

* Y al final grabo en la tabla STATICS para que cuando entre de nuevo encuentre
el dato y lo pase directo sin tener que pasar por toda la función    
  APPEND INITIAL LINE TO lt_static_detalle  ASSIGNING FIELD-SYMBOL(<ls_static_detalle>).
  MOVE i_consulta_detalle       TO <ls_static_detalle>-i_consulta_detalle.
  MOVE e_consulta_detalle       TO <ls_static_detalle>-e_consulta_detalle.
  UNASSIGN <ls_static_detalle>.

ENDFUNCTION.

DBUG.
Sirve para debuguear un proceso de fondo (batch)
Ejemplo:
Transacción FPRW y FPRV
TRANSLATE var to upper case.
  TRANSLATE iv_zztaxtype TO upper case.
Pasar Fecha-Hora a campo Time-Stamp
Ejemplo 1:

DATA: ls-valid_from type timezone.

CONVERT DATE sy-datum TIME sy-uzeit INTO TIME STAMP ls-valid_from TIME 
ZONE sy-zonlo.

EJemplo 2:

GET TIME STAMP FIELD DATA(ts).

SELECT SINGLE tzonesys


       FROM ttzcu
       INTO @DATA(tzone).

CONVERT TIME STAMP ts TIME ZONE tzone


        INTO DATE DATA(date) TIME DATA(time).

Ejemplo 3:
Creates a time stamp from the system date and system time.

DATA tz TYPE timezone.


CALL FUNCTION 'GET_SYSTEM_TIMEZONE'
  IMPORTING
    timezone = tz.

CONVERT DATE sy-datum TIME sy-uzeit


        INTO TIME STAMP DATA(ts) TIME ZONE tz.

Example

Determines a local date and a local time from a time stamp.

GET TIME STAMP FIELD DATA(ts).

CONVERT TIME STAMP ts TIME ZONE sy-zonlo


        INTO DATE DATA(date) TIME DATA(time).

SPLIT
Ejemplo 1:
types: begin of t_tabla,
f1(20) type c,
f2(20) type c,
f3(20) type c,
end of t_tabla.
data: it_tabla type table of t_tabla
SPLIT lv_aux2 AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE it_tabla.

Ejemplo 2:
DATA: NAMES(30) TYPE C VALUE 'Charly, John , Peter',
ONE(10) TYPE C,
TWO(10) TYPE C,
DELIMITER(2) VALUE ','.

SPLIT NAMES AT DELIMITER INTO ONE TWO.

Programación con objetos


*Capturar índice de fila(s) marcada(s)
  CALL METHOD vg_grilla->get_selected_rows
    IMPORTING
      et_index_rows = vl_index_rows.

    LOOP AT vl_index_rows INTO vl_selected_row.

      READ TABLE xxxxx
         INDEX vl_selected_row-index
           INTO wag_retiros.

Endloop.

Hacer Refresh a la Grilla de la dynpro

     CALL METHOD vg_grilla->refresh_table_display.

* Forzar Enter para que traspase el valor por ejemplo si queremos


sumar no será necesario que el usuario presione enter
      CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
        EXPORTING
          functioncode           = 'ENTER'
        EXCEPTIONS
          function_not_supported = 1
          OTHERS                 = 2.

Para refrescar pantalla


sfields-refresh = 'X'.

Authority-Check
Para validar objeto por Organización de Ventas de la VBAK
    AUTHORITY-CHECK OBJECT 'V_VBRK_VKO'
        ID 'VKORG' FIELD <Org.Venta>
        ID 'ACTVT' FIELD '03'.

Para validar objeto por Sociedad de la tabla VBRK


  AUTHORITY-CHECK OBJECT 'V_VBRK_BUK'
        ID 'VKORG' FIELD <Sociedad>
        ID 'ACTVT' FIELD '03'.

 Para validar objeto por una transacción


       authority-check object 'Z_MM1094' nombre transacción
                   id 'EKORG' field zscp-ekorg campo del archivo
                   id 'ACTVT' field '03'. “Lectura

Para validar Sociedad


AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD <ls_t001>-bukrs
ID 'ACTVT' FIELD '03'. "Here you need the proper activity (display '03' /change '02' /
etc.)
IF sy-subrc <> 0. "Auth check failed
HOLA ASDDSADSA
ENDIF.

Para validar objeto por Centro


  SELECT *
    FROM t001w
    WHERE werks IN s_werks .

    AUTHORITY-CHECK OBJECT 'M_MSEG_WWA'
      ID 'WERKS'   FIELD t001w-werks
      ID 'ACTVT'   FIELD '03'.

    IF sy-subrc NE 0.
      MESSAGE e054(zmm_sorepa) WITH t001w-werks.
    ENDIF.

  ENDSELECT.

Variables tipo Rango


select-options  BUDAT for MKPF-BUDAT.
Data: datum                  TYPE RANGE OF MKPF-BUDAT.
Move budat[] to datum[]-

CALL TRANSACTION
Definición
La sentencia CALL TRANSACTION permite ejecutar una transacción.
Sintaxis:
CALL TRANSACTION <transaccion> [AND SKIP FIRST SCREEN ].
Esta sentencia llama a la transacción <transacción>. <transacción> puede ser un literal o
una variable. Para retornar
desde la transacción al programa se utiliza la sentencia LEAVE PROGRAM.
Con la cláusula AND SKIP FIRST SCREEN además de llamar a la sentencia indicada
se puede saltar la
primera pantalla de la transacción. Esta acción debe ir combinada con el uso de
parámetros SPA/GPA de los
campos de la primera pantalla de la transacción (sentencia SET PARAMETERS) para
que el momento de la
ejecución de la transacción, ésta tome los parémtros de la memoria (sentencia GET
PARAMETERS) y así, de
esta forma, poder saltar la primera pantalla. Si para pasar la primera pantalla se necesita
rellenar parñametros
que no indicamos, el sistema presenta la primera pantalla y será el usuario el que realiza
la entrada
manualmente.
l
Esta sentencia tiene una variante con la cláusula USING que cambia totalmente el
significado de la sentencia.
Se utiliza como método de batch-input.
l
Sentencia utilizada para implementar el método CALL TRANSACTION.
CALL TRANSACTION <transacción> USING <tabla>
[ MODE <modo> ]
[ UPDATE <actualización> ]
[ MESSAGES INTO <tabla-mensajes ].
<transacción> es el código de la transacción, a la cual vamos a realizar el batch-input.
<tabla> es la tabla interna con
los datos de batch-input (estructura BDCDATA). Si la transacción devuelve algún tipo
de mensaje, las siguientes
variables del sistema guardan la siguiente información:
l SY-MSGID -> Identificador de mensaje (REPORT ..... MESSAGE-ID xx).
l SY-MSGTY -> Tipo de mensaje (A -> Abend, E-> Error, ...) ("A", "E", "I", "S", "W", and
"X".)
l SY-MSGNO -> Número de mensaje.
l SY-MSGV1 -> Valor 1 del mensaje (si existe).
l SY-MSGV2 -> Valor 2 del mensaje (si existe).
l SY-MSGV3 -> Valor 3 del mensaje (si existe).
l SY-MSGV4 -> Valor 4 del mensaje (si existe).
La variable del sistema SY-SUBRC toma el valor 0 si el proceso ha sido satisfactorio.
En caso contrario toma un valor distinto de 0. Una llamada a una transacción puede
terminar satisfactoriamente si se realiza un COMMIT WORK, un
CALL SCREEN con valor 0 o un LEAVE TO TRANSACTION <código-transacción>.
Con la cláusula MODE especificamos el modo de ejecución de la transacción. <modo>
puede tener uno de los
siguientes valores (el valor por defecto es A):
1. A -> Se muestran todas las pantallas.
2. E -> Se muestran sólo las pantallas con error.
3. N -> No se muestra ninguna pantalla.
Con la cláusula UPDATE especificamos el modo de actualización de la base de datos.
<actualización> puede tener uno
de los siguientes valores (el valor por defecto es A):
1. A -> Modo asíncrono.
2. S -> Modo síncrono.
Con la cláusula MESSAGES INTO el sistema actualiza la tabla interna <tabla-
mensajes> con todos los mensajes que
CALL TRANSACTION
file:///C|/DOWNLOADS INTERNET/Ayuda ABAP 4/call_transaction.htm (1 de 2) [09/11/2000 11:22:52]
se generan en la transacción. La tabla interna debe tener la estructura BDCMSGCOLL.
Los errores que se pueden producir en tiempo de ejecución son los siguientes:
1. CALL_TRANSACTION_NOT_FOUND -> Transacción desconocida.
2. CALL_TRANSACTION_IS_MENU -> La transacción especificada es un menú.
3. CALL_TRANSACTION_USING_NESTED -> Se ha utilizado una llamada inválida
para esta sentencia.
4. CALL_TRANSACTION_LOCKED -> Transacción bloqueda.
Ejemplo:
REPORT ZPRUEBA.
DATA class_name TYPE c LENGTH 30 VALUE 'CL_SPFLI_PERSISTENT'.
DATA: bdcdata_wa TYPE bdcdata,
bdcdata_tab TYPE TABLE OF bdcdata.
DATA opt TYPE ctu_params.

CLEAR bdcdata_wa.
bdcdata_wa-program = 'SAPLSEOD'.
bdcdata_wa-dynpro = '1000'.
bdcdata_wa-dynbegin = 'X'.
APPEND bdcdata_wa TO bdcdata_tab.

CLEAR bdcdata_wa.
bdcdata_wa-fnam = 'BDC_CURSOR'.
bdcdata_wa-fval = 'SEOCLASS-CLSNAME'.
APPEND bdcdata_wa TO bdcdata_tab.

CLEAR bdcdata_wa.
bdcdata_wa-fnam = 'SEOCLASS-CLSNAME'.
bdcdata_wa-fval = class_name.
APPEND bdcdata_wa TO bdcdata_tab.

CLEAR bdcdata_wa.
bdcdata_wa-fnam = 'BDC_OKCODE'.
bdcdata_wa-fval = '=CIDI'.
APPEND bdcdata_wa TO bdcdata_tab.

opt-dismode = 'E'.
opt-defsize = 'X'.
opt-nobinpt = 'X'.
CALL TRANSACTION 'SE24' USING bdcdata_tab
OPTIONS FROM opt
 MESSAGES INTO messtab.

  LOOP AT messtab WHERE msgtyp = 'E'.
    SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
                              AND   arbgb = messtab-msgid
                              AND   msgnr = messtab-msgnr.
    IF sy-subrc = 0.
      l_mstring = t100-text.
      IF l_mstring CS '&1'.
        REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
        REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
        REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
        REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
      ELSE.
        REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
        REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
        REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
        REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
      ENDIF.
      CONDENSE l_mstring.
      MESSAGE i499(sy) WITH l_mstring.
    ELSE.
      MESSAGE i499(sy) WITH messtab.
    ENDIF.
  ENDLOOP.

Tipos de mensajes:

A- Y se sale por
complete del programa

I- y continúa con
el programa
E- y se sale del
programa por completo
S-

CONDENSE
Definición
Para borrar espacios en blanco superfluos en campos alfanuméricos.
Sintaxis:
CONDENSE <campo> [ NO-GAPS ].
Borra cualquier secuencia de espacios en blanco, dejando sólo uno que exista entre palabras existentes
en <campo>.
Los espacios en blanco por la izquierda también desaparecen.
Con la cláusula NO-GAPS todos los espacios en blanco desaparecen.
Ejemplo 1:
DATA: BEGIN OF NAME,
TITLE(8), VALUE 'Dr.',
FIRST_NAME(10), VALUE 'Michael',
SURNAME(10), VALUE 'Hofmann',
END OF NAME.
CONDENSE NAME.
WRITE NAME.
La salida en pantalla sería: Dr. Michael Hofmann
Ejemplo 2:
DATA: BEGIN OF NAME,
TITLE(8), VALUE 'Dr.',
FIRST_NAME(10), VALUE 'Michael',
SURNAME(10), VALUE 'Hofmann',
END OF NAME.
CONDENSE NAME NO-GAPS.
La variable NAME valdría: Dr.MichaelHofmann

DELETE
Definición
Para borrar líneas de una tabla interna contamos con la sentencia DELETE. Varios formatos de la
sentencia nos permiten borrar líneas de una forma diferente.
Sintaxis:
El sistema sólo puede procesar esta sentencia dentro de un bucle LOOP .. ENDLOOP. La sentencia
DELETE borra la línea que estemos tratando en el bucle.
DELETE <tabla> INDEX <índice>.
Con la cláusula INDEX, el sistema borra la línea con el índice <índice> en la tabla interna <tabla>.
Después de borrar la línea, el índice de la siguiente línea es decrementado en 1. Si la operación es
completada, la variable SY-SUBRC vale 0. Si la línea con el índice <índice> no existe, SY-SUBRC vale 4.

DELETE ADJACENT DUPLICATE ENTRIES FROM <tabla> [ COMPARING <c> ].


Esta sentencia borra todas las entradas duplicada adyacentes de una tabla interna. Dos líneas se
consideran duplicadas si cumplen uno de los siguientes criterios de comparación:
Sin la cláusula COMPARING, el contenido de los campos claves estándar deben ser iguales.
Con la cláusula COMPARING con el formato siguiente: COMPARING <c1> <c2> .... El contenidos de los
campos ( c1, c2 ....) debe ser igual. También se puede especificar el nombre de los campos que hay que
comparar en tiempo de ejecución utilizando la siguiente sintaxis: (<campo>). La variable <campo>
contiene el nombre de la variable que se va a comparar. Si en el momento de procesar la sentencia
DELETE, <campo> está vacío, el sistema la ignora. Si contiene el nombre inválido, se produce un error en
tiempo de ejecución.

Con la cláusula COMPARING con el siguiente formato: COMPARING ALL FIELDS, el contenido de todos
los campos debe ser igual.

Si el sistema borra al menos una línea de la tabla la variable SY-SUBRC valdrá 0 si no borra ninguna línea,
SY-SUBRC valdrá 4. Es recomendable que la tabla interna este ordenada antes de ejecutar esta
sentencia.

Ejemplo:
sort xs520 by pvrtnr pkunag.
DELETE ADJACENT DUPLICATES FROM xs520 COMPARING pvrtnr pkunag.

DELETE <TABLA> [ FROM <n1> ] [ TO <n2> ] [ WHERE <condición> ].


Sentencia utilizada para borrar registros de una tabla de la base de datos. Con esta sentencia se puede
borrar una o varias líneas de una tabla. Sólo se pueden borrar líneas de una tabla a través de una vista si
ésta sólo hace referencia a una única tabla.
Se debe indicar al menos una de las tres cláusulas.
Si utilizamos la sentencia sin la cláusula WHERE, el sistema borrará todas las líneas de la tabla <tabla>
cuyo índice esté comprendido entre <n1> y <n2>.

Si no utilizamos la cláusula FROM, el sistema borrará desde la primera línea.

Si no utilizamos la cláusula TO, el sistema borrará hasta la última línea.

Con la cláusula WHERE el sistema sólo borrará aquellas líneas de la tabla <tabla> que cumplen la
condición especificada en <condición>. En <condición> se puede utilizar cualquier expresión lógica. El
primer operando debe ser un componente de la estructura de línea de la tabla interna. Si el sistema
borra al menos una línea la variable SY-SUBRC valdrá 0, si no borra ninguna valdrá 4.
DELETE {<tabla> | (<campo>) } [ CLIENT SPECIFIED ] [ FROM <área> ].
Con la cláusula FROM, la línea que se borra es la que coincide con la clave primara del área <área>. Sin la
cláusula FROM, la línea que se borra es la que coincide con la clave primaria del área de trabajo de la
tabla tabla>

El área de trabajo <área> debe tener al menos, la longitud de la clave primaria. Si se borra al menos una
línea de la tabla la variable SY-SUBRC valdrá 0, si no se borra ninguna valdrá 4.

Con la especificación dinámica de la tabla, la cláusula FROM es obligatoria.


DELETE FROM {<tabla> | (<campo>) } [ CLIENT SPECIFIED ] [ WHERE <condición> ].
Esta variante nos permite borrar una o varias líneas de la tabla <tabla> en función de las
especificaciones de la cláusula WHERE. Dicha cláusula tiene las mismas opciones que las vistas para la
sentencia SELECT. Si no especificamos la cláusula WHERE, todas las líneas de la tabla se borran. <tabla>
debe estar declarada con la sentencia TABLES.

La variable del sistema SY-DBCNT contiene el número de líneas borrar. Si se borra al menos una línea de
la tabla la variable SY-SUBRC valdrá 0, si no se borra ninguna valdrá 4.

Hay que vigilar mucho con la cláusula WHERE para no borrar toda la tabla o líneas que no deseamos
borrar. La única forma de recuperar lo borrada es restaurar el backup de la base de datos.
DELETE {<tabla> | (<tabla>) } [ CLIENT SPECIFIED ] FROM TABLE <tabla-interna>.

DELETE
file:///C|/DOWNLOADS INTERNET/Ayuda ABAP 4/delete.htm (1 de 2) [09/11/2000 11:24:02]
Con esta variante se puede borrar línea de una tabla de diccionario, basándose las líneas de una tabla
interna. <tabla> y (<tabla>) sirve para especificar el nombre de la tabla de forma estática o dinámica.
Esta sentencia borra aquellas líneas de la tabla cuya clave primaria coincida con la definida en una línea
de la tabla interna. La tabla interna debe tener la longitud de la clave primaria de la tabla. Si el sistema
no puede borrar ninguna entrada de la tabla porque no coincide ninguna clave primaria, el sistema
continúa con la siguiente línea de la tabla interna. Si todas las líneas de la tabla interna se procesan, SY-
SUBRC vale 0, en caso contrario vale 4. SY-DBCNT nos indica el número de líneas borradas. Si la tabla
interna está vacía, SY-SUBRC y SY-DBCNT valen 0.

Ejemplo 1:
DATA: BEGIN OF NAMETAB OCCURS 100,
NAME(30) TYPE C, END OF NAMETAB.
...
DELETE NAMETAB FROM 5 TO 36 WHERE NAME CA 'ABC'.

DESCRIBE TABLE
Definición
Se utiliza para saber el número de líneas de una tabla interna (rows) y para saber el valor de la cláusula
OCCURS de la definición de la tabla.
Sintaxis:
DESCRIBE TABLE <tabla> [ LINES <línea> ] [ OCCURS <tamaño> ].
Si utilizamos la cláusula LINES el sistema actualiza <línea> con el número de entradas en la tabla interna
<tabla>.
l
l Con la cláusula OCCURS el sistema actualiza <tamaño> con el tamaño definido de la tabla.

Ejemplo 1:
DESCRIBE TABLE xs520 LINES reg.

EXPORT
Definición
Exporta la descripción de una estructura generada. SAP creó esta sentencia para uso interno. Se puede
utilizar pero hay que tener en cuenta que SAP puede cambiar o eliminar la sintaxis sin previo aviso.
Sintaxis:
EXPORT <tabla> <h> <f> ID <id>.
Exporta la descripción de la estructura <tabla>. Esta sentencia sólo se utiliza en las herramientas del
repositorio de
ABAP/4. Se puede producir el error EXPORT_NAMETAB_WORK_IF si el nombre de la tabla es demasiado
largo.

Ejemplo 1: Transportar Variable

EXPORT p_anula TO MEMORY ID 'traspaso'.


Donde p_anula es la variable que tiene el valor y la dejará en la memoria en TRASPASO (Ver
IMPORT)

Ejemplo 2: Transportar una tabla a memoria

Tables: vbak

export vbak to memory id 'vbak_pedido_vtas'.


Ver en IMPORT como se rescata esta tabla de memoria

Ejemplo 3: Transportar una estructura

  DATA: r_audit TYPE plmt_audit_act_ui.
  DATA: l_flag(1) TYPE c.
*  GET_UI_STRUCTURE
  CALL METHOD ir_action_attr_assignment->get_ui_structure
    IMPORTING
      es_external_structure = r_audit
      ev_authority_error    = l_flag.

  FREE MEMORY ID 'ZAUDIT'.
  export zaudit from r_audit to memory id 'ZAUDIT'.

Ejemplo 4

  EXPORT gt_bapiret2  FROM gt_bapiret2 to SHARED MEMORY vari(tl) id 'gt_bapiret2'.

GET PARAMETER
Definición
Lee el valor del parámetro actualizando el contenido del campo.
Sintaxis:
GET PARAMETER ID '<parametro>' FIELD <campos>.
El sistema lee el valor del parámetro <parámetro> actualizando el contenido del campo
<campo>. <parámetro>
siempre es un literal alfanumérico de 3 posiciones y debe ir con las comillas (' '). El
valor del parámetro de memoria no
varia.
A partir de la versión 4.x se puede utilizar la variable SY-SUBRC. En esta versión si
conseguimos leer el parámetro de
memoria correctamente SY-SUBRC valdrá 0, en caso contrario valdrá 4. En versiones
anteriores había que introducir
un valor erróneo y una vez ejecutado la sentencia GET PARAMETER comprobar si el
valor había cambiado.
Ejemplo:
DATA : REPID(8).
GET PARAMETER ID 'RID' FIELD REPID.
Ejemplo 2:
get parameter id 'GJR' field p_gjahr.

Véase también: SET PARAMETER.

IMPORT FROM LOGFILE


Definición
Recupera objetos de datos del área de modificación de datos de la base de datos. SAP creó esta
sentencia para uso
interno. Se puede utilizar pero hay que tener en cuenta que SAP puede cambiar o eliminar la sintaxis sin
previo aviso.
Sintaxis:
IMPORT <campo> <tabla> FROM LOGFILE ID <clave>.
Recupera objetos de datos (variables, field-strings, tablas, etc.) del área de updates de la base de datos.
Se recomienda
no utilizar esta sentencia.
IMPORT FROM LOGFILE
Ejemplo 1: Traer una variable

IMPORT p_anula FROM MEMORY ID 'traspaso'.


Donde p_anula es la variable con la que se trabajará y donde quedará el valor de memoria (Ver
EXPORT)

Ejemplo 2: Traer una tabla a memoria

data: t_vbak like vbak,

import vbak to t_vbak from memory id 'vbak_pedido_vtas'.

Ejemplo 3: Transportar una estructura

  DATA: r_audit TYPE plmt_audit_act_ui.
  DATA: l_flag(1) TYPE c.

  import zaudit to r_audit from memory id 'ZAUDIT'.
  FREE MEMORY ID 'ZAUDIT'.

Ejemplo 4

  IMPORT gt_bapiret2  TO gt_bapiret2 FROM SHARED MEMORY vari(tl) id 'gt_bapiret2'.
INSERT
En una tabla de base de datos ejemplo tabla ZTRANSPO
*---------------------------------------------------------------------*
* Selection-screen 222 for Patente
*---------------------------------------------------------------------*
selection-screen begin of screen 222 as window.
selection-screen begin of block patente with frame title text-nb1.
parameter w_landp(50) type c obligatory default 'CL'.
parameter w_transp like lfa1-stcd1 obligatory.
parameter w_ntrans like lfa1-name1 obligatory.
parameter w_chofer like lfa1-stcd1 obligatory.
parameter w_nchofe like lfa1-name1 obligatory.
parameter w_patent(10) type c obligatory.
selection-screen end of block patente.
selection-screen end of screen 222.

CLEAR ztranspo.
MOVE w_transp TO ztranspo-cempresa.
MOVE w_chofer TO ztranspo-cchofer.
MOVE w_patent TO ztranspo-patente.
INSERT ZTRANSPO.

READ table
read table ekbeaux with key ebeln = tregistro-ebeln
ebelp = tregistro-ebelp
estado = '' .

read table ekbeaux index 1.

REPLACE
Definición
Reemplaza cierta parte de un string por otro string.
Sintaxis:
REPLACE <string1> WITH <string2> INTO <campo> [ LENGTH <longitud> ].
El sistema busca en el campo <campo> la primera ocurrencia del string <string1> para sustituirla por el
string
<string2>.
Con la cláusula LENGTH sólo se sustituirá los caracteres indicados en <longitud>. Si no se especifica la
cláusula
LENGTH la sustituición del string <string1> será completa. Si el string <string1> se encuentra en el campo
<campo>
es sustituido por <string2> y la variable del sistema SY-SUBRC toma el valor 0. En caso contrario, no se
reemplaza
nada y SY-SUBRC toma el valor 4. <string1>, <string2> y <longitud> pueden ser variables.

Ejemplo 1:

DATA FIELD(10).
MOVE 'ABCB' TO FIELD.
REPLACE 'B' WITH 'string' INTO FIELD.
Devuelve:
FIELD = 'AstringCB', SY-SUBRC = 0

Ejemplo 2:

do.
replace '.' with ' ' into fecha.
if sy-subrc <> 0.
exit.
endif.
enddo.

Ejemplo 3:
Data: pstrt(10).
Pstrt = ’23.07.2009’.
replace all occurrences of '.' in detalle-pstrt with ' '.

resultado:
pstrt = ‘23072009’.

Ejemplo 4:
Usar la función SSM_REPLACE_CHAR_BY_SPACE

SELECT de dos tablas juntas


SELECT  carrname
  INTO  TABLE name_tab
  FROM  scarr
  WHERE EXISTS ( select  *
                   FROM  spfli
                   WHERE carrid   =  scarr~carrid AND
                         cityfrom = 'NEW YORK'        ).

SELECT ..CORRESPONDING
TYPES: BEGIN OF rec,
         bukrs                Like bsis-bukrs,
         hkont                Like bsis-hkont,
         gjahr                Like bsis-gjahr,
         belnr                Like bsis-belnr,
         buzei(3),
         budat                Like bsis-budat,
         waers                Like bsis-waers,
         blart                Like bsis-blart,
         bschl                Like bsis-bschl,
         shkzg                Like bsis-shkzg,
         dmbtr                Like bsis-dmbtr,
         sgtxt                Like bsis-sgtxt,
         dmbe2                Like bsis-dmbe2,
         bdif3                Like bsis-BDIF3,
       END   OF rec.
DATA: bsisbsas                TYPE rec OCCURS 0 WITH HEADER LINE.

  select *
    into corresponding fields of table bsisbsas
  from bsis
  where bukrs = p_bukrs
    and hkont = p_hkont
    and gjahr = bilbjahr
    and monat in b-monate.

  select *
    appending corresponding fields of table bsisbsas
  from bsas
  where bukrs = p_bukrs
    and hkont = p_hkont
    and gjahr = bilbjahr
    and monat in b-monate.
Ejemplo de dos tablas con Join:

data: begin of gt_sflight1 occurs 0.
        include structure ZMMT_FACT_ELEC.
data:   POSICION            TYPE EBELP,
        HES_HEM              TYPE ZHES_HEM,
        KOSTL                TYPE KOSTL,
        MENGE                TYPE MENGE_D,
        MEINS                TYPE BSTME,
        PRECIO_UNI          TYPE BPREI,
        MONTO_AFECTO        TYPE BWERT,
        MONTO_EXENTO        TYPE BWERT,
        OBSERVACION          TYPE CHAR200.
data: end of gt_sflight1.

  select zmmt_fact_elec~estado          zmmt_fact_elec~sociedad
         zmmt_fact_elec~proveedor       zmmt_fact_elec~rut_proveedor
         zmmt_fact_elec~fecha_documento zmmt_fact_elec~orden_compra    
      zmmt_fact_elec~folio_factura   
         zmmt_fact_elecd~posicion       
         zmmt_fact_elecd~menge          zmmt_fact_elecd~meins

    into corresponding fields of table gt_sflight1
  from ( zmmt_fact_elec
         inner join zmmt_fact_elecd
         on  zmmt_fact_elecd~correlativo = zmmt_fact_elec~correlativo
         and zmmt_fact_elecd~folio_factura = zmmt_fact_elec~folio_fact
ura
         and zmmt_fact_elecd~f_recepcion = zmmt_fact_elec~f_recepcion
         and zmmt_fact_elecd~h_recepcion = zmmt_fact_elec~h_recepcion
         and zmmt_fact_elecd~orden_compra = zmmt_fact_elec~orden_compr
a
         and zmmt_fact_elecd~proveedor = zmmt_fact_elec~proveedor
         and zmmt_fact_elecd~sociedad = zmmt_fact_elec~sociedad )
       where zmmt_fact_elec~sociedad        in s_bukrs
         and zmmt_fact_elec~rut_proveedor   in s_rutpr
         and zmmt_fact_elec~fecha_documento in s_f_doc
         and zmmt_fact_elec~folio_factura   in s_folio
         and zmmt_fact_elec~orden_compra    in s_ebeln
         and zmmt_fact_elec~estado          in s_kostl
         and zmmt_fact_elecd~kostl          in s_estado .

SELECT en vez de Loop


Se necesita llenar la tabla interna gti_rseg con los datos de la tabla
RSEG pero solo para los datos que se encuentran en la tabla interna
gti_rbkp.
En vez de hacer:
Loop at gti_rbkp.
SELECT belnr gjahr buzei ebeln ebelp matnr werks wrbtr shkzg mwskz
       menge bprme xekbz kschl lfbnr lfgja lfpos rbmng rbwwr lifnr
  INTO CORRESPONDING FIELDS OF TABLE gti_rseg
FROM rseg
WHERE belnr EQ gti_rbkp-belnr
  AND   gjahr EQ gti_rbkp-gjahr
  AND   ebeln IN gra_devoluc.
Endloop.

Se puede hacer esto:


SELECT belnr gjahr buzei ebeln ebelp matnr werks wrbtr shkzg mwskz
       menge bprme xekbz kschl lfbnr lfgja lfpos rbmng rbwwr lifnr
  INTO CORRESPONDING FIELDS OF TABLE gti_rseg
FROM rseg
  FOR ALL ENTRIES IN gti_rbkp
WHERE belnr EQ gti_rbkp-belnr
  AND   gjahr EQ gti_rbkp-gjahr
  AND   ebeln IN gra_devoluc.

La primera forma es más lenta que la segunda.

SELECT con count, sum, o avg

Ejemplo 1:

DATA: count(2) TYPE sy-dbcnt.

    SELECT COUNT(*) FROM EKPO                    "client specified
                 BYPASSING BUFFER
    WHERE EBELN EQ ebeln.
    COUNT = SY-DBCNT.

Ejemplo 2:
TABLES SBOOK.
DATA: COUNT TYPE I,
SUM TYPE P DECIMALS 2,
AVG TYPE F,
MAX TYPE P DECIMALS 2.
DATA: CONNID LIKE SBOOK-CONNID.

SELECT CONNID COUNT(*) SUM( LUGGWEIGHT ) AVG( LUGGWEIGHT )


MAX( LUGGWEIGHT )
INTO (CONNID, COUNT, SUM, AVG, MAX)
FROM SBOOK
WHERE CARRID = 'LH '
AND FLDATE = '19950228'
GROUP BY CONNID.
WRITE: / CONNID, COUNT, SUM, AVG, MAX.
ENDSELECT.

SELECT FROM sflight


       FIELDS carrid,
              MIN( price ) AS min_price,
              MAX( price ) AS max_price
       GROUP BY carrid
       INTO TABLE @DATA(result).

cl_demo_output=>display( result ).

Ejemplo 3:

DATA: COUNT TYPE I.


SELECT COUNT(* )
INTO count
FROM eban
WHERE banfn = ban-banfn.

Tipos de Select
« en: 10 de Octubre de 2007, 11:34:33 am »

Aquí os dejo un pueqeño recopilatorio de SELECT.

Es una chorrada pero igual alguno te resulta curioso, seguiré actualizandolo según me
vengan en mente mas casos.  

*-- Cuando queremos guardar el contenido de una tabla de la BD a una tabla


interna:

Código: [Seleccionar]

SELECT * INTO TABLE ti_vbrk FROM vbrk


                           WHERE bukrs IN p_bukrs
                             AND fkdat IN p_fkdat
                             AND kunag IN p_kunag
                             AND vbeln IN p_vbeln.

*-- Para seguir añadiendo registros en una tabla interna sin borrar los que hay

Código: [Seleccionar]
SELECT * APPENDING TABLE ti_bsid FROM bsid
                   WHERE kunnr  = ti_write-kunnr2
                     AND bschl  = '01'
                     AND bldat <= fecha_b-high.

*-- Cuando queremos coger campos sueltos de una tabla de la BD a unas


variables:

Código: [Seleccionar]

SELECT SINGLE werks aubel


         INTO (v_werks, v_aubel)
         FROM vbrp
        WHERE vbeln = ti_vbrk-vbeln.

*-- Como recuperar el nombre de usuario

Código: [Seleccionar]

SELECT SINGLE * FROM usr21


               WHERE bname = v_ernam.

SELECT SINGLE name_text


         INTO v_nombre
         FROM adrp
        WHERE persnumber = usr21-persnumber.

*-- Para sacar la cantidad de registros que hay en la selección utilizamos


COUNT

Código: [Seleccionar]

SELECT COUNT( * ) INTO v_number1


                  FROM bsid
                 WHERE kunnr = ti_write-kunnr2
                   AND bschl = '01'
                   AND bldat <= fecha_b-high.

*-- Para hacer sumatorios utilizamos SUM

Código: [Seleccionar]
  SELECT SUM( CANTIDADTTE ) SUM( CANTIDADPAGADA ) SUM( IMPORTE )
         SUM( IMPORTE_CIN ) CAMION PLANTA_SAP DIVISION
         INTO (I_DATOS-MCTRAN, I_DATOS-MCPAGA, I_DATOS-IMPTOT,
               I_DATOS-IMPINC, I_DATOS-CAMION, I_DATOS-PLANTA,
               I_DATOS-DIVISI)
         FROM ZALBARANES
         WHERE FECHA   IN S_FECHA
           AND ESTADO  GT '4'
         GROUP BY DIVISION PLANTA_SAP CAMION.
  ENDSELECT.

*-- Cuando queremos decir que nos coja todos lo registros que empiecen por...
006*

Código: [Seleccionar]

SELECT * FROM COSP


        WHERE GJAHR EQ P_EJERCI
          AND OBJNR EQ D_CENTRO_COSTE
          AND ( KSTAR LIKE '006%' OR
                KSTAR LIKE '009%' OR
                KSTAR LIKE '008%' )
          AND WRTTP EQ '04'.

*-- Para evitar hacer un LOOP a una tabla interna.

Código: [Seleccionar]

SELECT * FROM /bic/cubo23 INTO TABLE i_cub


          FOR ALL ENTRIES   IN ti_cuentas
        WHERE fiscyear       = p_gjahr
          AND /bic/co_area   = i_sociedades-co_area
          AND /bic/version   = version
          AND /bic/costelmnt = ti_cuentas-cuenta
          AND /bic/center   IN s_kostl.

SET PARAMETER
Definición
Actualización de un parámetro SPA/GPA.
Sintaxis:
SET PARAMETER ID '<parámetro>' FIELD <campo>.
El sistema actualiza el valor del parámetro <parámetro> con el contenido del campo
<campo>. <parámetro> siempre es
un literal alfanumérico de tres posiciones y debe ir con las comillas (' '). El valor
anterior del parámetro se sobrescribe.
Véase también: GET PARAMETER.

Ejemplo 1:

set parameter id 'GJR' field sy-datum(4).

STRLEN
Sirve para saber el largo de una variable.

Ejemplo 1:

Data: largo type i.

largo = strlen( variable ).

SUBMIT
Definición
Ejecuta un programa.
Sintaxis:
SUBMIT { <programa> | (<programa>) } [ LINE-SIZE <columnas> ] [ LINE-COUNT
<filas> ]
[ TO SAP-POOL
[ DESTINATION <destino> ]
[ COPIES <copias> ]
[ LIST NAME <nombre> ]
[ COVER TEXT <texto> ]
[ LIST AUTHORITY <autorización> ]
[ INMEDIATELY <flag> ]
[ KEEP IN SPOOL <flag> ]
[ NEW LIST IDENTIFICATION <flag> ]
[ DATASET EXPIRATION ]
[ LINE-COUNT <líneas> ]
[ LINE-SIZE <columnas> ]
[ LAYOUT <layout> ]
[ SAP COVER PAGE <modo> ]
[ COVER PAGE <flag> ]
[ RECEIVER <receptor> ]
[ DEPARTMENT <departamento> ]
[ ARCHIVE MODE <modo> ]
[ ARCHIVE PARAMETERS <parámetros> ]
[ WITHOUT SPOOL DYNPRO ] ]
[ SPOOL PARAMETERS <parámetros> ]
[ ARCHIVE PARAMETERS <parámetros> ]
[ WITHOUT SPOOL DYNPRO ]
[ VIA SELECTION-SCREEN ]
[ AND RETURN ]
[ EXPORTING LIST TO MEMORY ]
[ USER <usuario> VIA JOB <job> NUMBER <número> ]
[ USING SELECTION-SETS OF PROGRAM <programa1> ].
Esta sentencia llama al report <programa>. El nombre del programa se puede especificar dinámicamente
utilizando una variable entre paréntesis.
El significado de las cláusulas es el siguiente:
l LINE-SIZE -> El programa se visualiza con el número de columnas definido en <columnas>.
l LINE-COUNT -> El programa se visualiza con el número de líneas definido en <filas>.
l TOP SAP-SPOOL -> Especifica los parámetros de impresión. El significado de las cláusulas es el
siguiente:
l DESTINATION -> Dispositivo de salida.
l COPIES -> Número de copias.
l LIST NAME -> Nombre del listado.
l LIST DATASET -> Nombre del spool dataset.
l COVER TEXT -> Título de la cubierta.
l LIST AUTHORITY -> Autorización de display.
l INMEDIATELY -> Impresión inmediata.
l KEEP IN SPOOL. Guardar el listado después de la impresión.
l NEW LIST IDENTIFICATION -> Identificación del nuevo listado.
l DATASET EXPIRACION -> Fecha de expiración.
l LINE-COUNT -> Líneas por página.
l LINE-SIZE -> Columnas del informe.
l LAYOUT -> Formato de impresión.
l SAP COVER PAGE -> Con carátula de impresión.
l COVER PAGE -> Selección de cubierta.
l RECEIVER -> Usuario receptor.
l DEPARTMENT -> Nombre del departamento.
SUBMIT
file:///C|/DOWNLOADS INTERNET/Ayuda ABAP 4/submit.htm (1 de 2) [09/11/2000 11:26:11]
l ARCHIVE MODE -> Modo de archivo.
l ARCHIVE PARAMETERS -> Parámetros de archivo.
l WITHOUT SPOOL DYNPRO -> Salta la pantalla de control de impresión.
l SPOOL PARAMETERS -> Parámetros de impresión.
l VIA SELECTION-SCREEN -> Aparece al usuario la pantalla de selección.
AND RETURN -> El programa llamador permanece en espera mientras se ejecuta el programa llamado.
Cuando el programa llamado
termina se devuelve control al programa llamador. Para ello se crea una sesión interna.
l
EXPORTING LIST TO MEMORY -> El listado de salida del programa llamado no aparece en pantalla.
En su lugar se guarda en
memoria. El programa llamador puede leer el listado de la memoria. Esta cláusula no puede ser utilizada
en combinación con la cláusula
TO SAP-SPOOL.
l
l USER <usuario> VIA JOB <job> NUMER <n> -> Se utiliza para incluir un paso de job en un proceso
de background.
USING SELECTION-SETS OF PROGRAM -> El programa llamado utiliza las variantes del programa
<programa1>. Si los parámetros y
criterios de selección de ambos programas no coinciden, las variables de <programa1> se pueden borrar.
l
Los mensajes de error que se pueden producir son los siguientes:
l LOAD_PROGRAM_NOT_FOUND -> El programa específico no existe.
l SUBMIT_WRONG_TYPE -> El programa especificado no es un report.
l SUBMIT_IMPORT_ONLY_PARAMETER -> Valor inválido pasado por parámetro.
l SUBMIT_WRONG_SIGN -> Valor inválido pasado a un criterio de selección.
l SUBMIT_IN_ITAB_ILL_STRUCTURE -> Tabla pasado como criterio con estructure errónea.
La sentencia submit, con una determina cláusula también nos permite añadir pasos a un job creado con el
módulo de función JOB_OPEN.
SUBMIT <report> AND RETURN
USER <usuario>
VIA JOB <nombre_job> NUMBER <id_job>
TO SAP-SPOOL SPOOL PARAMETERS <parámetros_impresión>
ARCHIVE PARAMETERS <parámetro_archivo>
WITHOUT SPOOL DYNPRO.

Ejemplo 1:

SUBMIT Z_MB51_resumen AND RETURN

Donde: Z_MB51_RESUMEN es otro reporte hecho por la SE80 o SE38.

Ejemplo pasando variables de pantalla del programa llamado


        SUBMIT /SCWM/R_MIG_PRODUCT
          with p_filtpa = ' '
          with p_filtpb = 'X'
          with P_MASTER = 'X'
          WITH P_LGNEW  = P_EWM_LGNUM
          WITH p_entitl = P_EWM_ENTITLED
          WITH P_FILEC  = P_RUTA_UPLOAD
        AND RETURN.
PROGRAMA /SCWM/R_MIG_PRODUCT.
  SELECTION-SCREEN BEGIN OF BLOCK a0 WITH FRAME TITLE TEXT-000.
  PARAMETERS: p_filtpa RADIOBUTTON GROUP g3 DEFAULT 'X' USER-COMMAND c
md1.
  PARAMETERS: p_filtpb RADIOBUTTON GROUP g3.

  SELECTION-SCREEN SKIP.
  SELECTION-SCREEN BEGIN OF LINE.
* Product Master Data
  PARAMETERS: p_master TYPE /scwm/de_mig_master USER-COMMAND cmd2.
  SELECTION-SCREEN COMMENT 3(30) FOR FIELD p_master.
  SELECTION-SCREEN POSITION 34.
* Fixed Bin assignment
  PARAMETERS: p_fixbin TYPE /scwm/de_mig_fixbin USER-COMMAND cmd3.
  SELECTION-SCREEN COMMENT 35(20) FOR FIELD p_fixbin.
  SELECTION-SCREEN END OF LINE.

  PARAMETERS: p_werks  TYPE /scwm/erp_plant.
  PARAMETERS: p_lgnum  TYPE /scwm/de_lgnum_erp.
  SELECT-OPTIONS: p_lgtyp FOR gv_lgtyp_erp.
  SELECT-OPTIONS: p_matnr FOR gv_matnr_erp.
  PARAMETERS: p_lgnew  TYPE /scwm/lgnum MEMORY ID /scwm/lgn MATCHCODE 
OBJECT /scwm/sh_lgnum OBLIGATORY.
  PARAMETERS: p_entitl TYPE /scwm/de_entitled MEMORY ID /scwm/entitled 
MATCHCODE OBJECT /scwm/sh_entitled_mig.

  SELECTION-SCREEN END   OF BLOCK a0.
STRING
Definición
Sentencia utilizada para colocar espacios a una variable.
Sintaxis:

Ejemplo 1:

DATA: T(10) VALUE 'abcdefghij',

      STRING LIKE T.

* Imprimir espacios a la izquierda

STRING = T.

SHIFT STRING BY 3 PLACES RIGHT.

WRITE / STRING.

* Imprimir espacios a la derecha

STRING = T.

SHIFT STRING BY 3 PLACES LEFT.

WRITE / STRING

WAIT
Definición
Sentencia utilizada para esperar la terminació n de la ejecució n asíncrona de un mó dulo de funció n.
Sintaxis:
WAIT UNTIL <expresió n_ló gica> [ UP TO <segundos> SECONDS ].
La sentencia espera a que la expresió n ló gica <expresió n_ló gica> sea TRUE. Esta sentencia só lo
debe ser utilizada en combinació n con la sentencia CALL FUNCTION STARTING NEW TASK <tarea>
Véase también: CALL FUNCTION STARTING NEW TASK.

Ejemplo 1:
wait up to 5 seconds.

WRITE
Definición Cuando asignamos valores a objetos de datos con la sentencia, se puede utilizar las opciones
de la sentencia WRITE a excepción de UNDER y
NO-GAP. Sintaxis:
WRITE { <c1> [ +<o1> ][ <(l1)> ] | (<c1>)} TO <c2>[ +<o2> ] [ <l2>) ] [ <opciones> ].
La sentencia WRITE TO escribe el contenido del campo fuente <c1> sobre el campo destino <c2>. <c1>
puede ser cualquier objeto de datos, <c2> sólo puede ser una variable. <c2> no puede ser un literal o una
variable. El contenido de <c1> permanece sin cambios.
La sentencia WRITE TO siempre comprueba las especificaciones realizadas en el registro maestro de
usuarios, por ejemplo, si el punto decimal debe aparecer con coma (,) o con punto (.). El campo destino
siempre se considera como alfanumérico (tipo C). Por esta razón es conveniente que el campo destino sea
siempre alfanumérico.
También se puede especificar el nombre del campo fuente en tiempo de ejecución, para ello, encerramos
entre paréntesis el nombre del objeto de dato que contiene el nombre del objeto de dato que vamos a
utilizar. Sin embargo, no se puede especificar en tiempo de ejecución el campo destino. Para ello
deberemos utilizar fild-symbols.
Se puede especificar el offset y la longitud, tanto del campo fuente como del campo destino. En esta
sentencia, el offset y la longitud del campo pueden ser variable.
SAP recomienda la asignación del campos con offset y longitud entre campos no numéricos. Con campos
numéricos, el resultado puede ser imprevisible.
WRITE { <campo> [ +<o1> ] TO <tabla> [ +<o2> ] [ <l2>) ] INDEX <índice>.
El contenido de la sección del campo <campo> con desplazamiento de <o1> posiciones y longitud <l!>
es sobrescrito en la tabla interna <tabla>, en la línea con índice <índice>, en la sección con
desplazamiento de <o2> posiciones y longitud <l2>. Observemos que en esta sentencia no se utiliza en
ningún caso el área de trabajo. Esto es una variante de la sentencia WRITE .. TO (utilizada para otros
casos). La sentencia WRITE .. TO no reconoce la estructura de línea de la tabla interna. SAP recomienda
el uso de esta sentencia sólo si queremos, por ejemplo, sustituir flag del que sabemos exactamente su
posición. También puede ser utilizada para tablas con estructuras de un único campo alfanumérico; tablas
con esta estructura son importantes, por ejemplo, para la generación automática de programas.

Ejemplo 1:
DATA: NAME(5) VALUE 'FIELD', FIELD(5) VALUE 'Harry', DEST(18) VALUE
'Robert James Smith', OFF TYPE I, LEN TYPE I.
OFF = 7. LEN = 8. WRITE (NAME) TO DEST+OFF(LEN).
El campo DEST valdrá " Robert Harry ith ". Véase también: WRITE.
file:///C|/DOWNLOADS INTERNET/Ayud

Ejemplo 2 (Fechas):

DATA: dura TYPE i,


time TYPE t VALUE '080000'.

dura = sy-uzeit - time.


time = dura.

WRITE /(30) dura USING EDIT MASK '==SDURA'.


WRITE /(30) time USING EDIT MASK
'RRThe duration is __:__:__'.

WRITE sy-datum YYMMDD.

Ejemplo 3 (Hora:}

DATA: time_stamp TYPE timestamp,


tzone TYPE timezone.

time_stamp = 20020627180000.
tzone = 'AUSTAS'.
WRITE / time_stamp TIME ZONE tzone.

Ejemplo 4 valores con moneda:

DATA int TYPE i VALUE 12345678.


WRITE int NO-GROUPING CURRENCY 'EUR'.

Data: output_lista-dmshb like bseg-wrbtr,

output_lista-hwaer like bkpf-waers,

bdcdata-fval(100).

write output_lista-dmshb  to bdcdata-fval currency output_lista-hwaer.

  condense bdcdata-fval.

UPDATE TABLE
Actualizar tabla en forma directa

Definición
Sentencia utilizada para modificar registros de una tabla de la base de datos.
Sintaxis:
UPDATE { <tabla> | (<tabla>) } [ CLIENT SPECIFIED ] [ FROM <área> ].
Con esta variante de la sentencia UPDATE modificamos una sola línea de la tabla especificada. El
significado de la cláusula FROM es la
siguiente:
●
FROM -> El área de trabajo <área> sobrescribe la línea de la tabla que tenga la misma clave primaria. La
tabla <tabla> debe estar
declarada con la sentencias TABLES. Si no especificamos la cláusula FROM, será el contenido del área
de trabajo de la propia tabla el
que sobrescriba la línea de la tabla con la misma clave primaria. El área de trabajo <área>debe tener la
misma longitud que el área de
trabajo de la tabla. Para asegurarnos de que el área de trabajo <área> tiene la misma estructura que el área
de trabajo de la tabla <tabla>
se suele declarar con la sentencia DATA (o TYPE) una estructura utilizando la cláusula LIKE <tabla>.
Si la operación concluye satisfactoriamente, SY-SUBRC vale 0 y SY-DBCNT vale 1, en caso contrario
SY-SUBRC vale 4 y SY-DBCNT val0. Se puede especificar el nombre de la tabla en tiempo de ejecución
como veíamos en sentencias anteriores con la opción (<campo>). Con esta
opción, la cláusula FROM es obligatoria y <área> no puede ser la propia área de trabajo de la tabla.
UPDATE <tabla> [ CLIENT SPECIFIED ] SET <set1> ... <setn> [ WHERE
<condición> ].
Esta variante nos permite modificar una o varias líneas de la tabla <tabla> en función de las
especificaciones de la cláusula WHERE. Dicha
cláusula tiene las mismas opciones que las vistas para la sentencia SELECT. Si no especificamos la
cláusula WHERE, todas las líneas de la tabla
se cambian. <tabla> debe estar declaradas con la sentencia TABLES.
Para identificar las columnas a cambiar se utiliza la cláusula SET. La lista de comandos especificados en
la cláusula SET debe respetar uno de
los siguientes formatos:
- <f> = <g>. -> <f> es un campo de la tabla <tabla>. <g> es un valor.
- <f> = <f> + <g>. -> <f> es un campo de la tabla <tabla>. <g> es un valor. El valor de <f> es
incrementado con el valor de <g>.●
●
- <f> = <f> - <g>. -> <f> es un campo de la tabla <tabla>. <g> es un valor. El valor de <f> es
decrementado con el valor de <g>puede ser un literal o una variable.
Para ver la regla de conversión entra campos de la base de datos y campos de un programa, ver la cláusula
INTO de la sentencia SSY-DBCNT contiene el número de líneas cambiadas. SY-SUBRC es 0 si al menos
una línea es cambiada y 4 si ninguna línea es cambiad
esta variante de sentencia no se puede especificar el nombre de la tabla en tiempo de ejecución.
UPDATE { <tabla> | (<tabla>) } [ CLIENT SPECIFIED ] [ FROM TABLE
<tabla_interna> ].
Otra forma de actualizar varias líneas de una tabla es con la anterior variante de la sentencia UPDATE. Se
puede definir la tablactualizar estáticamente con la opción <tabla>, o dinámicamente con la opción
(<tabla>).
Las líneas de la tabla interna sobrescriben las líneas de la tabla internas que tengan la misma clave
primaria. Las líneas de la<tabla_interna> deben tener la misma longitud que el área de trabajo de la tabla.
Para asegurarnos de esto, se suele declarar laDATA o TYPE) con la misma estructura que la tabla de
diccionario (cláusula LIKE).
Si el sistema no puede cambiar una línea porque la clave primaria no existe en la tabla de la base de datos,
el sistema continúalínea de la tabla interna. Si todas las líneas se procesan satisfactoriamente, SY-SUBRC
vale 0, en caso contrario vale 4. SY-DBCvalor del número de líneas actualizadas por la sentencia.
Con esta sentencia sucede lo mismo que con la sentencia INSERT. Es mucho más eficiente modificar un
conjunto de líneas en una sooperación (segunda variante de la sentencia UPDATE) que modificarlas una
a una (primera variante de la sentencia UPDATE).
Ejemplo 1:
UPDATE SCUSTOM SET: DISCOUNT = '003',
TELEPHONE = '0621/444444'
WHERE ID = '00017777'.

Ejemplo 2:
TABLES SCUSTOM.
DATA WA LIKE SCUSTOM.
WA-ID = '12400177'.
WA-TELEPHONE = '06201/44889'.
UPDATE SCUSTOM FROM WA.
Véase también: MODIFY, INSERT.

También podría gustarte