Tipos y Objetos de Datos en Programación
Tipos y Objetos de Datos en Programación
Pueden declararse tipos de datos (son descripciones que definen los objetos de datos que se
declaren luego, y no ocupan memoria) y objetos de datos (entidades físicas que sí ocupan
memoria: variables. Tienen un tipo asociado, y se procesan según el tipo que sea).
La longitud se mide en caracteres, NO en bytes. Variables que no sean del mismo tipo
exactamente pueden no ser totalmente compatibles, lo que puede provocar errores de
conversiones numéricas. Por ej., para operaciones de división usar el tipo P (packed), al menos
para el recoger el resultado.
Las tablas internas son las creadas como locales en un programa; no pertenecen al Diccionario
de Datos. Sólo son visibles localmente en el programa en el que se declaran. Se declaran con:
IF sy-subrc <> 0.
WRITE ‘No se ha encontrado ningún
dato’.
ELSE.
LOOP AT ztabla. " bucle que
recorre la tabla, para imprimirla entera
WRITE: ztabla-nombre, ztabla-
cliente.
END-LOOP.
ENDIF.
Dichas sentencias son: STOP, EXIT, CHECK y REJECT. Son todas incondicionales
salvo CHECK. La sentencia CONTINUE vale para pasar a la siguiente vuelta de un bucle.
STOP.
Incondicional. Se debe usar sólo en el evento START-OF-SELECTION. Su
efecto es cancelar todas las selecciones de las tablas de la base de datos,
abandonando el evento, y activar el END-OF-SELECTION (siempre lo activa. Si
no se desea esto, debe usarse EXIT en lugar de STOP).
EXIT.
Incondicional. Abandona totalmente el bloque actual o evento (excepto
eventos AT...) si no está dentro de ningún bloque, y activa la pantalla de salida.
Puede usarse fuera de bucles (acaba subrutinas, acaba eventos, ...) o dentro de
ellos, para finalizar estos.
CHECK { condición | tabla_selección | SELECT-OPTIONS }.
Condicional. Si la condición es falsa, acaba el bloque de proceso o evento (si no
está dentro de ningún bloque) actual; si es cierta, sigue (como si no hubiera
ningún CHECK). Es decir, que si no se “pasa” el chequeo, se salta a la siguiente
vuelta del bucle (funciona como un CONTINUE condicional), o abandona la
subrutina, ... (funciona como un EXIT condicional). La opción SELECT-
OPTIONS sólo puede usarse para CHECKs que vayan tras eventos GET. Su
efecto es comprobar que la entrada leída de la tabla cumpla todos los criterios
de selección asociados.
REJECT [ tabla_bd ].
Incondicional. Tras REJECT, se procesa el siguiente evento GET para la misma
tabla, abandonando la selección actual. Opcionalmente se puede indicar una
tabla de la base de datos jerárquicamente superior, con lo cual, tras
ejecutar REJECT se procesa el siguiente GET de la tabla especificada (la
siguiente “vuelta” del GET; la “vuelta” actual se abandona).
CONTINUE.
Incondicional. Termina la vuelta de un bucle (DO, WHILE), de forma
incondicional, pasando a la siguiente vuelta. Normalmente sólo se puede usar
dentro de un bucle de ese tipo.
TABLES tabla.
Así se declara el área de trabajo de la tabla del D.D. especificada, para poder
usarla.
DATA variable [ (long) ] [ TYPE tipo | LIKE campo ] [ DECIMALS núm ]
[ VALUE valor ].
Versión de DATA para declarar variables. El tipo por defecto
es C (alfanumérico) y la longitud por defecto es la definida así para cada tipo
(para los tipo C, longitud 1: un carácter). Otros tipos de datos simples
son: I (integer), P (numérico empaquetado), N (numérico no
empaquetado), D (date), ... Con LIKE, se toma como tipo el mismo que tenga
el campo especificado. Con VALUE se inicializa a la vez que se declara. Ejemplo
de sentencias DATA encadenadas:
Ejemplo:
LOCAL variable.
Se usa para declarar variables locales dentro de subrutinas
(FORM ... ENDFORM). Si existe una variable global de mismo nombre, se salva
su valor al entrar en la subrutina, y se restaura al salir, es decir, que la variable
local deja de existir fuera de la subrutina.
STATICS var [ long ] [ TYPEtipo ] [ VALUE valor | IS
INITIAL ][ DECIMALS num ].
También para variables locales. Se usa sólo dentro de FORMs (subrutinas).
Funciona como LOCAL, pero con la diferencia de que conserva a la salida de la
subrutina el valor que se le dé dentro de ésta, en lugar de restaurar el valor
previo: pero la variable sólo será visible en los procesos en los que esté definida.
STATICS: BEGIN OF nombre, ..., END OF nombre.
Se usa para declarar un field string dentro de una subrutina o módulo de
función. Es similar a un DATA, pero es local al subprograma en el que se defina,
y en sucesivas llamadas al mismo conserva su valor (no es destruido como
ocurre con las variables locales; es estático).
RANGES tabla_selección FOR campo.
Define una tabla interna con igual estructura que la de un select-options.
Permite usar IN (puede recoger un intervalo de valores). La diferencia es que en
la pantalla de selección no aparece esta tabla de selección, cosa que ocurriría
con un SELECT-OPTIONS (así puede dársele valor por programa, en lugar de
que lo haga el usuario). Formato de esta tabla:
Tiene 4 campos: El campo SIGN indica si los valores frontera del intervalo
(campos LOW y HIGH) están incluidos (‘I’) o excluidos. El
campo OPTION puede ser: EQ (=), NE (<>), CP (contiene pattern), NP (no
contiene pattern), BT (between), GT (>), LT (<), GE (>=), LE (<=). Los
campos LOW y HIGH definen el intervalo o rango de valores (si es un valor
individual sólo se rellena (en) LOW). Esta tabla tendrá una entrada
por cada intervalo o valor individual definido. Todos estos campos son accesibles
y modificables como los de cualquier otra tabla.
TYPE-POOL nombre_tipo.
Para declarar grupos de tipos. Se acceden con la transacción SE11 (Diccionario
de Datos, que es donde se guarda la estructura del TYPE-POOL). En ellos sólo
pueden definirse constantes y tipos (con TYPE), y deben nombrarse empezando
con el nombre del grupo de tipos seguido de ‘_’. Al ser objetos del D.D. podrán
ser visibles en todos los programas SAP. Para llamarlos o acceder a ellos desde
un programa se usa la sentencia (distinta) TYPE-POOLS.
Ejemplo de declaración:
TYPE-POOLS nombre_tipo.
Sentencia que sirve para acceder o llamar a un TYPE-POOL almacenado ya en
el D.D.
Ejemplo:
Sentencia que transforma un campo de texto simple a un campo tal que es más
rápidamente ordenable, insertando índices, claves, …
Si "campo" era 'ABCB', el resultado será 'AholaCB' (reemplaza sólo la primera
ocurrencia). Devuelve código de retorno 0 si la operación fue correcta, y 4 si
hubo algún error.
See here to view full function module documentation and code listing, simply by
entering the name BAPI_EXCHANGERATE_GETDETAIL into the relevant SAP
transaction such as SE37 or SE80.
The ABAP code below is a full code listing to execute function module
BAPI_EXCHANGERATE_GETDETAIL including all data declarations. The code uses
the latest in-line data DECLARATION SYNTAX but I have included an ABAP code
snippet at the end to show how declarations would look using the original method
of declaring data variables up front. This will allow you to compare and fully
understand the new inline method. Please note some of the newer syntax such as
the @DATA is not available until a later 4.70 service pack (SP8).
DATA:
ld_exch_rate TYPE BAPI1093_0 ,
ld_return TYPE BAPIRET1 .
DATA(ld_rate_type) = some text here
DATA(ld_from_curr) = Check type of data required
DATA(ld_to_currncy) = Check type of data required
DATA(ld_date) = 20210129.
The below ABAP code uses the older none in-line data declarations. This allows you
to see the coding differences/benefits of the later inline syntax. It may also be
useful if you are using an older version of SAP as some of the newer syntax above,
such as the @DATA is not available until 4.70 EHP 8.
The API method makes it possible to read an entry from the exchange rate table.
The system carries out an authorization check for ...See here for full SAP fm
documentation
Please help keep this info upto date and use the comments section below to add
useful hints, tips and information specific to this SAP function. This will then be
available for you and other users to easily find by simply searching on the object
name BAPI_EXCHANGERATE_GETDETAIL or its description.
*&---------------------------------------------------------------------*
*& Report ZPRUEBA_FECHA_TCAMBIO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPRUEBA_FECHA_TCAMBIO.
START-OF-SELECTION.
perform obtener_valor.
form obtener_valor.
data:
ld_exch_rate type BAPI1093_0,
ld_rate_type type BAPI1093_1-rate_type,
ld_return type BAPIRET1,
ld_from_curr type BAPI1093_1-from_curr,
ld_to_currncy type BAPI1093_1-to_currncy,
ld_date type BAPI1093_2-trans_date.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform.
"Nota:
"CURRENCY: el tipo de moneda para el cambio
"‘USD’ : el tipo de cambio que se desea obtener
"EXCHANGE_RATE_DATE: Fecha del día.
"exch_rate: Datos obtenidos
CREAR Y GESTIONAR BANCOS EN SAP Una de las transacciones que
encontramos en la carpeta de Finanzas, es la que nos va a
permitir crear bancos para poder posteriormente trabajar con el resto
de transacciones que necesitan de un banco, como la contabilidad,
gestión de cobros, etc., Accederemos al esquema de carpetas, Finanzas
[Link] Bancos Datos Maestros Maestro
de bancos Crear O directamente con la transacción FI01
Después de rellenar estos datos, podemos acceder a la pantalla que nos va a permitir si es
necesario ampliar la información.
Icono que nos permite mostrar otro formulario para completar la información del banco que
estamos creando.
Al activar el icono nos aparece el formulario siguiente,
Si realizamos cambios en la pantalla anterior pulsaremos aceptar, sino podemos cancelar.
1. Build field catalog and set the field DO_SUM of field catalog to ‘X’ for the field
for which you want calculate the totals.
2. Pass field catalog to function module ‘REUSE_ALV_GRID_DISPLAY’.
TYPE-POOLS: slis. " SLIS contains all the ALV data types
*&---------------------------------------------------------------------*
*& Data Declaration
*&---------------------------------------------------------------------*
DATA: it_sbook TYPE TABLE OF sbook.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
wa_fieldcat-fieldname = 'CONNID'.
wa_fieldcat-seltext_m = 'Con. No.'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'FLDATE'.
wa_fieldcat-seltext_m = 'Date'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'BOOKID'.
wa_fieldcat-seltext_m = 'Book. ID'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'PASSNAME'.
wa_fieldcat-seltext_m = 'Passenger Name'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'LOCCURAM'.
wa_fieldcat-seltext_m = 'Price'.
*Calculate Total for Price
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'LOCCURKEY'.
wa_fieldcat-seltext_m = 'Currency'.
APPEND wa_fieldcat TO it_fieldcat.
*Pass data and field catalog to ALV function module to display ALV list
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fieldcat
TABLES
t_outtab = it_sbook
EXCEPTIONS
program_error = 1
OTHERS = 2.
Output
TYPE-POOLS: slis. " SLIS contains all the ALV data types
*&---------------------------------------------------------------------*
*& Data Declaration
*&---------------------------------------------------------------------*
DATA: it_sbook TYPE TABLE OF sbook.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_sort TYPE slis_t_sortinfo_alv,
wa_sort TYPE slis_sortinfo_alv..
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
wa_fieldcat-fieldname = 'CONNID'.
wa_fieldcat-seltext_m = 'Con. No.'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'FLDATE'.
wa_fieldcat-seltext_m = 'Date'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'BOOKID'.
wa_fieldcat-seltext_m = 'Book. ID'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'PASSNAME'.
wa_fieldcat-seltext_m = 'Passenger Name'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'LOCCURAM'.
wa_fieldcat-seltext_m = 'Price'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'LOCCURKEY'.
wa_fieldcat-seltext_m = 'Currency'.
APPEND wa_fieldcat TO it_fieldcat.
*Build sort catalog
wa_sort-spos = 1.
wa_sort-fieldname = 'CARRID'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO it_sort.
*Pass data and field catalog to ALV function module to display ALV list
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fieldcat
it_sort = it_sort
TABLES
t_outtab = it_sbook
EXCEPTIONS
program_error = 1
OTHERS = 2.
Output
If you want to calculate subtotals for more fields, just add a record in sort field catalog for
each field.
wa_sort-spos = 2.
wa_sort-fieldname = 'CONNID'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
APPEND wa_sort TO it_sort.
Output
ALV con botones estandar y propios
612 Views
Follow
RSS Feed
Buenos dias,
METHOD toolbar2.
DATA l_function LIKE e_toolbar-function.
**Mostrar registro de IT0768
l_function = 'V_768'.
CLEAR e_toolbar.
e_toolbar-function = l_function.
e_toolbar-icon = icon_system_possible_entries.
e_toolbar-disabled = space.
e_toolbar-text = text-022.
e_toolbar-quickinfo = ''.
APPEND e_toolbar TO e_object->mt_toolbar.
** Bloquear registro
l_function = 'V_BLOQ'.
CLEAR e_toolbar.
e_toolbar-function = l_function.
e_toolbar-icon = icon_locked.
e_toolbar-disabled = space.
e_toolbar-quickinfo = ''.
APPEND e_toolbar TO e_object->mt_toolbar.
** Desbloquear resgistro
l_function = 'V_DBLOQ'.
CLEAR e_toolbar.
e_toolbar-function = l_function.
e_toolbar-icon = icon_unlocked.
e_toolbar-disabled = space.
e_toolbar-quickinfo = ''.
APPEND e_toolbar TO e_object->mt_toolbar.
e_interactive = 'X'.
ENDMETHOD. "toolbar
la cuestion es que cuando quiero controlar las acciones asociadas a mis botones
hago una redifinicion del metodo dispatch
Un saludo
*----- Sample Progam -----*
*----------------------------------------------------------------------*
***INCLUDE YRVR058_DEST_WISE_SUMMARY_DF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text *-- Rajesh Vasudeva
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA .
IF ITAB[] IS NOT INITIAL.
PERFORM F_APPEND_BLOCK.
ELSE.
MESSAGE 'Data not found for the selection
criteria' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " display_data
*&---------------------------------------------------------------------*
*& Form f_append_block
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_APPEND_BLOCK .
DATA : L_WA_SORT TYPE SLIS_SORTINFO_ALV, "For
sort
L_WA_EVENTS TYPE SLIS_ALV_EVENT. "For
events
*&---------------------------------------------------------------------*
*& Form f_field_catalog_part
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_FIELD_CATALOG_PART .
REFRESH I_FIELD_CAT_PART.
CLEAR I_FIELD_CAT_PART.
PERFORM F_CREATE_CATALOG USING :
*Month
C_TAB 'MONTH' 'MONTH' SPACE 'L' 7
I_FIELD_CAT_PART[],
*OBD
*C_TAB 'VBELN' 'Delivery' SPACE 'L' 12
I_FIELD_CAT_PART[],
*DATE
C_TAB 'WADAT_IST' 'Date' SPACE 'L' 10
I_FIELD_CAT_PART[],
*Destination
C_TAB 'CITY1' 'Destination' SPACE 'L' 25
I_FIELD_CAT_PART[],
*Qty By Road
C_TAB 'NTGEW_ROAD' 'Road Quantity' SPACE 'R' 16
I_FIELD_CAT_PART[],
*Rail Qty
C_TAB 'NTGEW_RAIL' 'Rail Quantity' SPACE 'R' 16 I_FIELD_CAT_PART[],
*Total Qty C_TAB 'TOT' 'Total Quantity' SPACE 'R' 16
I_FIELD_CAT_PART[], *RR/Trk No.
C_TAB 'EXTI2' 'Truck/RR No.' SPACE 'L' 17 I_FIELD_CAT_PART[].
*&---------------------------------------------------------------------*
*& Form f_DISPLAY_block
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_STRUCT_LAYOUT text
* -->P_I_FIELD_CAT_PART[] text
* -->P_C_TAB text
* -->P_I_EVENTS_PART[] text
* -->P_I_SORT_PART[] text
*----------------------------------------------------------------------*
FORM F_DISPLAY_BLOCK USING FP_LAYOUT TYPE
SLIS_LAYOUT_ALV
FP_I_FCAT TYPE
SLIS_T_FIELDCAT_ALV
VALUE(FP_TABNAME) TYPE
ANY
FP_I_EVENTS TYPE
SLIS_T_EVENT
FP_I_SORT TYPE
SLIS_T_SORTINFO_ALV.
DATA: V_REPID TYPE SYREPID,
"current Program id
C_SAVE TYPE CHAR1 VALUE 'A'.
"variant save
V_REPID = SY-REPID.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " f_DISPLAY_block
*&---------------------------------------------------------------------*
*& Form f_create_catalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_C_TAB text
* -->P_0085 text
* -->P_0086 text
* -->P_SPACE text
* -->P_0088 text
* -->P_5 text
* -->P_I_FIELD_CAT_PART[] text
*----------------------------------------------------------------------*
FORM F_CREATE_CATALOG USING FP_I_TABNAME TYPE
SLIS_TABNAME
FP_I_FIELDNAME TYPE SLIS_FIELDNAME
FP_I_SELTEXT TYPE
SCRTEXT_L
FP_I_DOSUM TYPE
CHAR1
FP_I_JUST TYPE C
FP_I_OUTPUTLEN TYPE
OUTPUTLEN
FP_I_FCAT TYPE
SLIS_T_FIELDCAT_ALV.
L_REC_FCAT-TABNAME = FP_I_TABNAME.
L_REC_FCAT-FIELDNAME = FP_I_FIELDNAME.
L_REC_FCAT-SELTEXT_L = FP_I_SELTEXT.
L_REC_FCAT-DO_SUM = 'X'.
*l_rec_fcat-do_sum = ' '.
L_REC_FCAT-JUST = FP_I_JUST.
L_REC_FCAT-OUTPUTLEN = FP_I_OUTPUTLEN.
L_REC_FCAT-DECIMALS_OUT = '2'.
L_REC_FCAT-KEY = '1'.
***********************************************************************
* Subroutines for Headings
***********************************************************************
*&---------------------------------------------------------------------*
*& Form f_display_header_partA
*&---------------------------------------------------------------------*
* Display header for report for Part A
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE .
SKIP 1.
WRITE:/25 ' Name of Company ',80 'RUN DATE' ,
SY-DATUM.
* SKIP 1.
* WRITE:/60 'RUN DATE' , SY-DATUM.
SKIP 1.
DATA: YR(4) TYPE N,
FIN_PRD(10) TYPE C.
IF S_DTABF-LOW+4(2) LT '04'.
YR = S_DTABF-LOW+0(4) - 1.
CONCATENATE YR '-' S_DTABF-LOW+2(2) INTO FIN_PRD.
ELSE.
YR = S_DTABF-LOW+0(4) + 1.
CONCATENATE S_DTABF-LOW+0(4) '-' YR+2(2) INTO
FIN_PRD.
ENDIF.
WRITE:/5 'DETAILS OF THE MONTH/DATE WISE DESPATCHES
MADE BY ROAD/RAIL DURING THE YEAR ' , FIN_PRD .
SKIP 1.
* WRITE :/ 'SALES OFFICE : ' , P_SALES,' ' , RNAME.
* SKIP 1.
ENDFORM. " DISPLAY_DATA