You are on page 1of 16

USER: cursoits

PW : cursoits

//metcharren
//mi PW

SAP Logon Curso ABAP 2010


COMANDO UTILES DENTRO DEL PROGRAMA:
/o
/n
z*
/nex

//crear otro modo (barra+letra "o" )


//regresar al menu principal
//busca todos los programas Z
//se cierra todo sin guardar!

/ose38
//crea otro modo ya con la transaccion especificada
/nse11
//en la misma ventana abre otra transaccion ( equivalente a volver al menu principal e
ingresar a la transaccion se11)
sm35 = Batch Input.
al11 = muestra los directorios propios de SAP.
TRANSACCIONES
se38 = transaccion para crear/modificar/etc un programa.
se37 = buscar y ejecutar funciones ( standar y Z ).
se11 = transaccion para ver las tablas de base de datos.
se16 = ver los datos de las tablas.
se93 = transaccion que crea o modifica transacciones.
se71 = la vamos a odiar (sirve para hacer formularios).
se24 = ver clases de objetos.
se39 = se pueden abrir 2 programas al mismo tiempo para compararlos.
ACCESOS DIRECTOS POR TECLADO
F8 = ejecutar
F7 = ver
F12 = volver

ABAP
C caracteres.
N caracteres que se pueden operar.
String
I int
D fecha
Instrucciones:
-Como declarar datos:
DATA: <variable> TYPE <tipo>,
<variable> LIKE <referencia>
-Crear tipos propios de datos:
TYPE: <tipo> TYPE <tipo>
TYPE: begin of ty_reg,

nombre(10) type c, //es igual que nombre(10),


edad type I,
end of ty_reg.
DATA: w_reg type ty_reg.
- Como declarar una tabla:
DATA: begin of t_tabla, occurs 0,
nombre(10) type c,
edad type I,
end of t_tabla.
Loop at t_tabla into w_tabla.
end loop.

Sentencia SELECT
*Select single (devuelve 1 solo registro)
*Select
*Select
=
select+loop
endselect
=
-Como llenar una tabla en ABAP
Select A
B
from
into table
where

C
tabla1
t_tabla
A = 'pepe'.

Select A
B
from
into table
where

C
tabla1
t_tabla
A like 'p%'.

(todas las que empiecen con P y sigan con cualquier cosa)

Select nombre edad


from
tabla1
into table
t_tabla
where
nombre like 'p%' and
edad > 20.
-Como traer llenar una variable con un campo de un solo registro de una tabla
Select single A
from
into
where

B
C
tabla1
w_reg
A = 'pepe'.

-Como usar Select + endselect

select A
B
C
from tabla1
where A = 'pepe'.
------------- sentencias
------endselect.
Select

* (trae todos los campos de la tabla)


from tabla1
where A = 'pepe'.
------------------endselect.
EJEMPLO
Siempre antes de hacer un select hay que preguntar si la tabla esta vacia porque sino en caso de
que este vacia al utilizar "for all entries" nos traeria todos los campos.
t_nombres
Jua 20
n
Pep 17
e
Select calle nro
from t_direcciones
into table t_dir
for all entries in t_nomrbes
where nombre = t_nombres-nombre

SQL
Definicion: Conjunto de sentencias standar para interactuar con una BD.

Base de Datos:
-Datos organizados en tablas.
-Los datos dentro de las tablas se diferencian por campos claves que NO se pueden repetir.
-Concepto Clave Primaria y Clave Primaria Compuesta.
-Recordar ejemplo tablas alumnos.

Comandos de SQL:
-INSERT
-UPDATE (no se pueden moficiar campos claves, en todo caso borrar el registro y volver a
crearlo).
-DELETE (sirve para borrar registros enteros, no campos).
-SELECT (trae datos de la tabla).

Sentencias SQL:
Lo que esta entre corchetes es OPCIONAL
nombre_tabla = MARA
-INSERT INTO <MARA> VALUES

nombre(nombre del campo de la tabla) = Ignacio


apellido(nombre del campo de la tabla) = Crosta
-UPDATE <MARA> SET <set1> <set 2> ... [WHERE <cond>].
<set1> :DNI = 35.256.654
-DELETE FROM <MARA> WHERE <cond>.
-SELECT [SINGLE/DISTINCT]<DNI, LEG, NOMBRE>
INTO <variable/estructura/tabla>
FROM <MARA>
[WHERE <condicin>]
//[GROUP BY <campos>]
//[HAVING <condicin>]
//[ORDER BY <campos> [ASCENDING/DESCENDING]].

ESTRUCTURA DE UN PROGRAMA
DATOS
(DATA/TYPE/CONSTANTS)
----------SELECTION SCREEN. ( diseo de la pantalla del programa)
----------EVENTOS (codigos que se ejecutan si pasa algo en la pantalla)
START-OF-SELECTION
-----(todo codigo que traiga informacion desde la BD)
-----END-OF-SELECTION
-----(toda informacion que no necesite datos de la BD)
-----FORMS
-----(serian las subrutinas del C++)
------SELECTION SCREEN:
Parameters (variables que se utilizan en la pantalla inicial)
PARAMETER p_param1(nombre variable) LIKE MARA-MATNR(MATNR =
campo de una tabla)
PARAMETERS: p_param1 TYPE I,
p_param2 TYPE C.

-SELECT OPCION:
SELECT-OPTIONS s_sel1 FOR MARA-MATNR

s_sel1
SIGN

OPTION

LOW

HIGH

I (include)

BW (betwen)

OOOO1

OOO20

E (exclude)

BW (betwen)

OOO17

OOO19

I (include)

EQ (equal)

OOO10

E (exclude)

EQ (equal)

OOO15

*de esta manera se seleccionan los datos entre 00001-00020 y 00025-00030


EJEMPLO EN CODIGO DE LA PANTALLA DE SELECCION:

1- Objetivo: Crear una pantalla de seleccion con algunos checkbox y


radiobuttons.
CODIGO FUENTE 1
REPORT zetcharren01
TABLES: mara.
SELECTION-SCREEN BEGIN OF BLOCK blocke.
PARAMETERS: p_num TYPE i,
p_rad1 RADIOBUTTON GROUP g_1,
p_rad2 RADIOBUTTON GROUP g_1,
p_rad3 RADIOBUTTON GROUP g_2,
p_rad4 RADIOBUTTON GROUP g_2,
p_check AS CHECKBOX DEFAULT 'X'.
SELECT-OPTIONS s_sel1 FOR mara-matnr.
SELECTION-SCREEN end of block blocke.

FIN CODIGO FUENTE 1

2- Objetivo:

ingresar numero de cliente y traer de una tabla (KNA1) el


nombre del mismo.
CODIGO FUENTE 2
REPORT ZETCHARREN02.
DATA w_nombre LIKE KNA1-NAME1.
TABLES: KNA1.
SELECTION-SCREEN BEGIN OF BLOCK blocke.
PARAMETERS: p_num LIKE KNA1-KUNNR.
SELECTION-SCREEN end of block blocke.
START-OF-SELECTION.
SELECT SINGLE NAME1
from KNA1

INTO w_nombre
WHERE KUNNR = p_num.
END-OF-SELECTION.
uline.
WRITE:/ text-002, w_nombre.
uline.
WRITE:/ text-001 ,p_num.
Uline.

FIN CODIGO FUENTE 2

3- Objetivo:

ingresar un rango de numeros de clientes y que nos traiga de


la tabla (KNA1) el nombre con su respectivo numero de cliente, y mostrar
al final de todo la cantidad de clientes que se mostraron.
CODIGO FUENTE 3
REPORT ZETCHARREN02.
*TABLES
TABLES: KNA1.
*END TABLES
*DATA
DATA: begin of t_nombres occurs 0,
nombre like KNA1-NAME1,
numero like KNA1-KUNNR,
end of t_nombres.
total TYPE i.

*END DATA
*SELECTION SCREEN
SELECTION-SCREEN BEGIN OF BLOCK blocke.
SELECT-OPTIONS s_kunnr FOR KNA1-KUNNR.
SELECTION-SCREEN end of block blocke.
*END SELECTION SCREEN
IF NOT s_kunnr[] IS INITIAL.

ENDIF.

SELECT NAME1 KUNNR


FROM KNA1
INTO TABLE t_nombres
WHERE KUNNR in s_kunnr.
END-OF-SELECTION.

LOOP AT t_nombres.
WRITE:/ t_nombres-nombre, t_nombres-numero.
Total = total + 1.
ENDLOOP.
WRITE:/'|', text-001,'|', total,'|'.

FIN CODIGO FUENTE 3

4- Objetivo:

mismo objetivo que el 3, solo que le agregamos si mostramos


los nombres o el total de clientes que se encontraron en el rango
seleccionado.

CODIGO FUENTE 4
REPORT zetcharren02.
TABLES: kna1.
DATA: BEGIN OF t_nombres OCCURS 0,
nombre LIKE kna1-name1,
numero LIKE kna1-kunnr,
END OF t_nombres,
total TYPE i.
SELECTION-SCREEN BEGIN OF BLOCK blocke.
PARAMETERS: p_rad1 RADIOBUTTON GROUP g_1,
p_rad2 RADIOBUTTON GROUP g_1.
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
SELECTION-SCREEN END OF BLOCK blocke.
START-OF-SELECTION.
IF NOT s_kunnr[] IS INITIAL.
SELECT name1 kunnr
FROM kna1
INTO TABLE t_nombres
WHERE kunnr IN s_kunnr.
ENDIF.
END-OF-SELECTION.
IF p_rad1 = 'X'.
LOOP AT t_nombres.
WRITE:/ t_nombres-nombre, t_nombres-numero.
ENDLOOP.
ELSE.
LOOP AT t_nombres.
total = total + 1.
ENDLOOP.
WRITE:/'|', text-001,'|', total,'|'.
ENDIF.

FIN CODIGO FUENTE 4

5- Objetivo:

traer informacion cruzada de 2 tablas y mostrar numero,


nombre y direccion de un rango de clientes previamente ingresado por el
usuario.
CODIGO FUENTE 5
REPORT zetcharren02.
***************************************
TABLES: kna1.
***************************************
DATA: BEGIN OF t_nombres OCCURS 0,
nombre LIKE kna1-name1,
numero LIKE kna1-kunnr,
calle LIKE kna1-adrnr,
END OF t_nombres,
total TYPE i,
BEGIN OF t_direcciones OCCURS 0,
calle LIKE adrc-addrnumber,
nombrecalle LIKE adrc-street,
numcalle LIKE adrc-house_num1,
END OF t_direcciones.
***************************************

SELECTION-SCREEN BEGIN OF BLOCK blocke.


PARAMETERS: p_rad1 RADIOBUTTON GROUP g_1,
p_rad2 RADIOBUTTON GROUP g_1,
p_check AS CHECKBOX.
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
SELECTION-SCREEN END OF BLOCK blocke.
***************************************
START-OF-SELECTION.
IF NOT s_kunnr[] IS INITIAL.
SELECT name1 kunnr adrnr
FROM kna1
INTO TABLE t_nombres
WHERE kunnr IN s_kunnr.
ENDIF.
IF NOT t_nombres[] IS INITIAL.
SELECT addrnumber street house_num1
FROM adrc
INTO TABLE t_direcciones
FOR ALL ENTRIES IN t_nombres
WHERE addrnumber = t_nombres-calle.
ENDIF.
END-OF-SELECTION.
***************************************
IF p_rad1 = 'X'.
LOOP AT t_nombres.
READ TABLE t_direcciones WITH KEY calle = t_nombres-calle.
IF sy-subrc = 0.
IF p_check = 'X' AND NOT t_direcciones-nombrecalle = ''.
WRITE:/ t_nombres-nombre, t_nombres-numero, t_direcciones-nombrecalle,'N', t_direcciones-numcalle.
ELSE.
IF NOT p_check = 'X'.
WRITE:/ t_nombres-nombre, t_nombres-numero, t_direcciones-nombrecalle,'N', t_direcciones-numcalle.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT t_nombres.
total = total + 1.
ENDLOOP.
WRITE:/'|', text-001,'|', total,'|'.
ENDIF.

FIN CODIGO FUENTE 5

6- Objetivo:

traer informacion cruzada de 2 tablas y mostrar numero,


nombre y direccion de un rango de clientes previamente ingresado por el
usuario y tambien filtrado por nombre de calle. CAMBIOS
CODIGO FUENTE 6
REPORT zetcharren02.
***************************************
TABLES: kna1,
adrc.
***************************************
DATA: BEGIN OF t_nombres OCCURS 0,
nombre LIKE kna1-name1,
numero LIKE kna1-kunnr,
calle LIKE kna1-adrnr,
END OF t_nombres,

total TYPE i,
BEGIN OF t_direcciones OCCURS 0,
calle LIKE adrc-addrnumber,
nombrecalle LIKE adrc-street,
numcalle LIKE adrc-house_num1,
END OF t_direcciones.
***************************************
SELECTION-SCREEN BEGIN OF BLOCK blocke.
PARAMETERS: p_rad1 RADIOBUTTON GROUP g_1,
p_rad2 RADIOBUTTON GROUP g_1,
p_check AS CHECKBOX.
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
SELECT-OPTIONS s_calle FOR adrc-street.
SELECTION-SCREEN END OF BLOCK blocke.
***************************************
START-OF-SELECTION.
IF NOT s_kunnr[] IS INITIAL.
SELECT name1 kunnr adrnr
FROM kna1
INTO TABLE t_nombres
WHERE kunnr IN s_kunnr.
ENDIF.
IF NOT t_nombres[] IS INITIAL AND NOT s_calle[] IS INITIAL.
SELECT addrnumber street house_num1
FROM adrc
INTO TABLE t_direcciones
FOR ALL ENTRIES IN t_nombres
WHERE addrnumber = t_nombres-calle AND street IN s_calle.
ENDIF.
END-OF-SELECTION.
***************************************
IF p_rad1 = 'X'.
LOOP AT t_nombres.
READ TABLE t_direcciones WITH KEY calle = t_nombres-calle.
IF sy-subrc = 0.
IF p_check = 'X' AND NOT t_direcciones-nombrecalle = ''.
WRITE:/ t_nombres-nombre, t_nombres-numero, t_direcciones-nombrecalle,'N', t_direcciones-numcalle.
ELSE.
IF NOT p_check = 'X'.
WRITE:/ t_nombres-nombre, t_nombres-numero, t_direcciones-nombrecalle,'N', t_direcciones-numcalle.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT t_nombres.
total = total + 1.
ENDLOOP.
WRITE:/'|', text-001,'|', total,'|'.
ENDIF.

FIN CODIGO FUENTE 6


REPORT zetcharren02.
***************************************
TABLES: kna1,
adrc.
***************************************
DATA: BEGIN OF t_nombres OCCURS 0,
nombre LIKE kna1-name1,
numero LIKE kna1-kunnr,
calle LIKE kna1-adrnr,
END OF t_nombres,
total TYPE i,
BEGIN OF t_direcciones OCCURS 0,
calle LIKE adrc-addrnumber,
nombrecalle LIKE adrc-street,

numcalle LIKE adrc-house_num1,


END OF t_direcciones.
***************************************
SELECTION-SCREEN BEGIN OF BLOCK blocke.
PARAMETERS: p_rad1 RADIOBUTTON GROUP g_1,
p_rad2 RADIOBUTTON GROUP g_1,
p_check AS CHECKBOX.
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
SELECT-OPTIONS s_calle FOR adrc-street.
SELECTION-SCREEN END OF BLOCK blocke.
*---------------------------------------START-OF-SELECTION.
PERFORM f_seleccionar.
END-OF-SELECTION.
*---------------------------------------IF p_rad1 = 'X'.
PERFORM f_mostrar.
ELSE.
PERFORM f_mostrar_cantidad_clientes CHANGING total.
WRITE:/'|', text-001,'|', total,'|'.
ENDIF.
*&--------------------------------------------------------------------*
*&
Form f_seleccionar
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_seleccionar.
IF NOT s_kunnr[] IS INITIAL.
SELECT name1 kunnr adrnr
FROM kna1
INTO TABLE t_nombres
WHERE kunnr IN s_kunnr.
ENDIF.
IF NOT t_nombres[] IS INITIAL AND NOT s_calle[] IS INITIAL.
SELECT addrnumber street house_num1
FROM adrc
INTO TABLE t_direcciones
FOR ALL ENTRIES IN t_nombres
WHERE addrnumber = t_nombres-calle AND street IN s_calle.
ENDIF.
ENDFORM.

"f_seleccionar

*&--------------------------------------------------------------------*
*&
Form f_mostrar
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_mostrar.
LOOP AT t_nombres.
READ TABLE t_direcciones WITH KEY calle = t_nombres-calle.
IF sy-subrc = 0.
IF p_check = 'X' AND NOT t_direcciones-nombrecalle = ''.
WRITE:/ t_nombres-nombre, t_nombres-numero, t_direcciones-nombrecalle,'N', t_direcciones-numcalle.
ELSE.
IF NOT p_check = 'X'.
WRITE:/ t_nombres-nombre, t_nombres-numero, t_direcciones-nombrecalle,'N', t_direcciones-numcalle.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDLOOP.
ENDFORM.

"f_mostrar

*&--------------------------------------------------------------------*

*&
Form f_mostrar_cantidad_clientes
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->TOTAL
text
*---------------------------------------------------------------------*
FORM f_mostrar_cantidad_clientes CHANGING total TYPE i.
LOOP AT t_nombres.
total = total + 1.
ENDLOOP.

ENDFORM.

"f_mostrar_cantidad_clientes

DEBUGGER
F5 = Ejecutar instruccion por instruccion.
F6 = Ejecutar 1 blocke.
F7 = Sale de la Subrutina.
F8 = Ejecutar normal o hasta el siguiente Break Point.

EJEMPLO INGRESAMOS N PEDIDO Y NOS TRAE LA FECHA Y CANTIDAD.


REPORT zetcharren03

DATA: fecha LIKE vbak-erdat,


BEGIN OF t_cantidad OCCURS 0,
cantidad LIKE vbap-zmeng,
END OF t_cantidad,
total TYPE i.
***************************************
SELECTION-SCREEN BEGIN OF BLOCK blocke.
PARAMETERS: doc LIKE vbak-vbeln.
SELECTION-SCREEN END OF BLOCK blocke.
***************************************
PERFORM f_traer_fecha.
PERFORM f_llenar_t_cantidades.
PERFORM f_sumar_total CHANGING total.
PERFORM f_mostrar.
***************************************
*&--------------------------------------------------------------------*
*&
Form f_traer_fecha
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_traer_fecha.
*TRAIGO LA FECHA
IF NOT doc = ''.
SELECT SINGLE erdat
FROM vbak
INTO fecha
WHERE vbeln = doc.
ENDIF.

*FIN TRAIGO LA FECHA


ENDFORM.

"f_traer_fecha

*&--------------------------------------------------------------------*
*&
Form f_llenar_t_cantidades
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_llenar_t_cantidades.
*LLENO TABLA DE CANTIDADES
SELECT zmeng
FROM vbap
INTO TABLE t_cantidad
WHERE vbeln = doc.
*FIN LLENO TABLA DE CANTIDADES
ENDFORM.

"f_llenar_t_cantidades

*&--------------------------------------------------------------------*
*&
Form f_sumar_total
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->TOTAL
text
*---------------------------------------------------------------------*
FORM f_sumar_total CHANGING total TYPE i.
*SUMO TOTAL
LOOP AT t_cantidad.
total = total + t_cantidad-cantidad.
ENDLOOP.
*FIN SUMO TOTAL
ENDFORM.

"f_sumar_total

*&--------------------------------------------------------------------*
*&
Form f_mostrar
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_mostrar.
WRITE:/ 'N Pedido: ', doc.
WRITE:/ 'Fecha: ', fecha.
WRITE:/ 'Total Unidades: ', total.
ENDFORM.

"f_mostrar

Igual que el anterior pero para un rango de


pedidos.
REPORT zetcharren03
TABLES: vbak.
DATA:
BEGIN OF t_fechas OCCURS 0,
documento LIKE vbak-vbeln,
fecha LIKE vbak-erdat,
END OF t_fechas,
BEGIN OF t_cantidad OCCURS 0,
documento LIKE vbak-vbeln,
cantidad LIKE vbap-zmeng,
END OF t_cantidad,

BEGIN OF t_final OCCURS 0,


documento LIKE vbak-vbeln,
fecha LIKE vbak-erdat,
total TYPE i,
END OF t_final,
total TYPE i,
fecha(10) TYPE c.
***************************************
SELECTION-SCREEN BEGIN OF BLOCK blocke.
SELECT-OPTIONS doc FOR vbak-vbeln.
SELECTION-SCREEN END OF BLOCK blocke.
***************************************
PERFORM f_traer_fecha.
PERFORM f_llenar_t_cantidad.
*---------------------FORMA 1 DE HACERLO UTILIZANDO COLLECT.
LOOP AT t_cantidad.
READ TABLE t_fechas WITH KEY documento = t_cantidad-documento.
IF sy-subrc = 0.
t_final-documento = t_cantidad-documento.
t_final-fecha = t_fechas-fecha.
t_final-total = t_cantidad-cantidad.
COLLECT t_final.
ENDIF.
ENDLOOP.
*---------------------FORMA 2 DE HACERLO.
*LOOP AT t_fechas.
* CLEAR total.
* PERFORM f_sumar_total CHANGING total.
* t_final-documento = t_fechas-documento.
* t_final-fecha = t_fechas-fecha.
* t_final-total = total.
* APPEND t_final.
* CLEAR t_final.
*ENDLOOP.
PERFORM f_mostrar.
***************************************
*&--------------------------------------------------------------------*
*&
Form f_traer_fecha
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_traer_fecha.
*TRAIGO LA FECHA
IF NOT doc[] IS INITIAL.
SELECT vbeln erdat
FROM vbak
INTO TABLE t_fechas
WHERE vbeln IN doc.
ENDIF.
*FIN TRAIGO LA FECHA
ENDFORM.

"f_traer_fecha

*&--------------------------------------------------------------------*
*&
Form f_llenar_t_cantidades
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_llenar_t_cantidad.
*LLENO TABLA DE CANTIDADES
SELECT vbeln zmeng
FROM vbap
INTO TABLE t_cantidad
WHERE vbeln IN doc.
*FIN LLENO TABLA DE CANTIDADES

ENDFORM.

"f_llenar_t_cantidades

*&--------------------------------------------------------------------*
*&
Form f_sumar_total
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->TOTAL
text
*---------------------------------------------------------------------*
FORM f_sumar_total CHANGING total TYPE i.
*SUMO TOTAL
LOOP AT t_cantidad WHERE documento = t_fechas-documento.
total = total + t_cantidad-cantidad.
ENDLOOP.
*FIN SUMO TOTAL
ENDFORM.

"f_sumar_total

*&--------------------------------------------------------------------*
*&
Form f_mostrar
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM f_mostrar.
LOOP AT t_final.
CONCATENATE t_final-fecha+6(2) t_final-fecha+4(2) t_final-fecha(4)
INTO fecha
SEPARATED BY '/'.
WRITE:/ 'N Pedido: ', t_final-documento.
WRITE:/ 'Fecha: ', fecha.
WRITE:/ 'Total Unidades: ', t_final-total.
ULINE.
ENDLOOP.
ENDFORM.
"f_mostrar

SENTENCIA "AT NEW" , "AT END OF",


"AT FIRST" y "AT LAST"
SORT t_tabla BY "campo" DESCENDING/ASCENDING.
LOOP AT t_tabla.
AT NEW documento.
CLEAR total.
READ TABLE t_fechas WITH KEY documento = t_cantidad-documento.
IF sy-subrc = 0.
t_final-documento = t_cantidad-documento.
t_final-fecha = t_fechas-fecha.
ENDAT.
********CODIGO ENTRE LOS ATS********
total = total + t_tabla-cantidad.
******FIN CODIGO ENTRE LOS ATS******
AT END OF
t_final-cant = total.
APPEND t_final.
ENDAT.
END LOOP.

Llamar funciones desde ABAP.


CALL FUNCTION 'nombre_funcion'.
IMPORT
------------------EXPORT
------------------TABLES
------------------EXCEPTIONS.
-------------------.
*Lo que en la funcion es "import" en el programa seria "export" y viceversa.
EJEMPLO ( funcion que calcula el total del programa anteriro)
CODIGO DE LA LLAMADA DESDE EL PROGRAMA:
CALL FUNCTION 'Z_MFE_TOTAL'
EXPORTING
documento = t_fechas-documento
IMPORTING
total
= total.

CODIGO DE LA FUNCION EN SI:


FUNCTION Z_MFE_TOTAL.
*"---------------------------------------------------------------------*"*"Interfase local
*" IMPORTING
*"
REFERENCE(DOCUMENTO) LIKE VBAK-VBELN
*" EXPORTING
*"
REFERENCE(TOTAL) LIKE VBAP-ZMENG
*"---------------------------------------------------------------------TABLES: vbap.
DATA: BEGIN OF t_cantidad OCCURS 0,
cantidad LIKE vbap-zmeng,
END OF t_cantidad.
CLEAR total.
SELECT zmeng
FROM vbap
INTO TABLE t_cantidad
WHERE vbeln = documento.
LOOP AT t_cantidad.
total = total + t_cantidad-cantidad.
ENDLOOP.
ENDFUNCTION.

011;PEPE;30111111
012;HECTOR;222222
SPLIT cadena AT ';'
INTO var1
var2
var3.

You might also like