Difference between revisions of "SAP ABAP 740"
From SapWiki
| Line 279: | Line 279: | ||
INTO table @DATA(result). | INTO table @DATA(result). | ||
| + | ************************************************************* | ||
| + | CASE | ||
| + | ************************************************************* | ||
| + | SELECT SINGLE j~partner, i~rut_pagador, i~total_pagar, i~nom_archivo, | ||
| + | CASE i~banco_abon | ||
| + | WHEN ' ' THEN i~banco_abon2 | ||
| + | ELSE i~banco_abon | ||
| + | END AS banco | ||
| + | INTO CORRESPONDING FIELDS OF @wa_data | ||
| + | FROM zfi_histra_paso AS i INNER JOIN but000 AS j | ||
| + | ON i~rut_pagador = j~bu_sort2 | ||
| + | INNER JOIN zfi_bp_datos_com AS z | ||
| + | ON j~partner = z~bp | ||
| + | WHERE i~folio = @g_folio_histra | ||
| + | AND i~rut_pagador IN @s_rut | ||
| + | AND i~nom_archivo LIKE 'A%' | ||
| + | AND j~partner IN @s_bp | ||
| + | AND z~tipo_sucursal = '00' . "#EC CI_SEL_NESTED | ||
************************************************************* | ************************************************************* | ||
concat | concat | ||
Revision as of 17:19, 12 September 2020
Contents
Ejemplos
Manejo de strings
character_string = |{ a_numeric_variable }|.
character_string = |This resulted in return code { sy-subrc }|.
LO_OBJECT->STRING2XML( |{ converted_xml }{ xml_row-row_close_tag }| ).
v_var1 = 'Esto es'. v_var2 = 'un'. v_var3 = 'String'. lv_result = v_var1 && v_var2 && v_var3.
[WIDTH = len]
[ALIGN = LEFT|RIGHT|CENTER|(val)]
[PAD = c]
[CASE = RAW|UPPER|LOWER|(val)]
[SIGN = LEFT|LEFTPLUS|LEFTSPACE|RIGHT|RIGHTPLUS|RIGHTSPACE|(val)]
[EXPONENT = exp]
[DECIMALS = dec]
[ZERO = YES|NO|(val)]
[XSD = YES|NO|(val)]
[STYLE = SIMPLE|SIGN_AS_POSTFIX|SCALE_PRESERVING
|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO
|SCALE_PRESERVING_SCIENTIFIC|ENGINEERING
|(val)]
[CURRENCY = cur]
[NUMBER = RAW|USER|ENVIRONMENT|(val)]
[DATE = RAW|ISO|USER|ENVIRONMENT|(val)]
[TIME = RAW|ISO|USER|ENVIRONMENT|(val)]
[TIMESTAMP = SPACE|ISO|USER|ENVIRONMENT|(val)]
[TIMEZONE = tz]
[COUNTRY = cty] ...
l_dir = |including a \{ bracket|.
l_dir = |c:\\temp|. "c:\temp'
TRY.
WRITE: / |string|.
WRITE: / |{ my_variable }|.
WRITE: / |i'm a { my_variable }!|.
WRITE: / |i'm number { my_number * 10 }!| .
WRITE: / |client 000 is called: | &&
|{ clients[ mandt = '000' ]-mtext }|.
WRITE: / |i'm going to be in upper case: | &&
|{ my_variable CASE = UPPER }|.
WRITE: / |function and formatting:| &&
| date raw - { my_string->date( ) DATE = RAW }| &&
| date iso - { my_string->date( ) DATE = ISO }|.
CATCH cx_root.
ENDTRY.
Manejo de Tablas
DATA l_pernr TYPE p0001-pernr VALUE '00003019'.
SELECT * INTO TABLE @DATA(lt_p2010) FROM pa2010 WHERE pernr = @l_pernr.
*1 line_exists
IF line_exists( lt_p2010[ pernr = l_pernr begda = '20181101' ] ).
* do something
WRITE:/ 'Existe'.
ENDIF.
*2 l_index
DATA(l_index) = line_index( lt_p2010[ pernr = l_pernr begda = '20181101' ] ).
WRITE:/ l_index.
*3 Modify the contents based on TABLE-KEY
TRY.
lt_p2010[ pernr = l_pernr ]-begda = '20200101'.
CATCH cx_sy_itab_line_not_found.
ENDTRY.
*4
DATA(ls_p2010) = lt_p2010[ pernr = l_pernr ].
WRITE:/ ls_p2010-begda.
*5
data lt_p0002 type TABLE OF p0002.
lt_p0002 = CORRESPONDING #( lt_p2010 ).
data(ls_p0002) = lt_p0002[ 1 ].
write:/ ls_p0002-pernr.
*6 Inicializar tabla lt_p0002 = VALUE #( ( pernr = l_pernr begda = sy-datum ) ).
*7 agregar registros a tabla (append) lt_p0002 = VALUE #( BASE lt_p0002 ( pernr = l_pernr begda = '20200201' ) ).
*8 FILTER
DATA lt_p0002_s TYPE STANDARD TABLE OF p0002 WITH NON-UNIQUE SORTED KEY pernr COMPONENTS pernr.
lt_p0002_s = VALUE #( ( pernr = l_pernr begda = '20200201' )
( pernr = '00003020' begda = '20200301' )
).
DATA(lt_p0002_h) = FILTER #( lt_p0002_s USING KEY pernr WHERE pernr = l_pernr ).
* Create a filter internal table with multiple values
DATA filter_tab TYPE SORTED TABLE OF p0002-pernr
WITH UNIQUE KEY table_line.
filter_tab = VALUE #( ( l_pernr ) ).
* Apply filters
lt_p0002_h = FILTER #( lt_p0002_s IN filter_tab
WHERE pernr = table_line ).
*
TYPES: BEGIN OF ty_filter,
pernr TYPE p0002-pernr,
begda TYPE p0002-begda,
END OF ty_filter,
ty_filter_tab TYPE HASHED TABLE OF ty_filter
WITH UNIQUE KEY pernr begda.
DATA(lt_filter_tab) = VALUE ty_filter_tab( ( pernr = l_pernr begda = '20200201' ) ).
DATA lt_p0002_3 TYPE STANDARD TABLE OF p0002.
lt_p0002_3 = VALUE #( ( pernr = l_pernr begda = '20200201' )
( pernr = '00003020' begda = '20200301' )
).
clear lt_p0002_h.
lt_p0002_h = FILTER #( lt_p0002_3 IN lt_filter_tab
WHERE pernr = pernr AND begda = begda ).
VALUE
types ty_ra type RANGE OF vbak-auart.
data(ra_auart) = VALUE ty_ra(
( low = 'Z1' sign = 'I' option = 'EQ' )
( low = 'Z2' sign = 'I' option = 'EQ' )
).
select vbeln into table @data(LT_vbeln) from vbak where auart in @ra_auart.
DATA itab TYPE RANGE OF i.
itab = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 10 )
( low = 21 high = 30 )
( low = 41 high = 50 )
option = 'GE' ( low = 61 ) ).
data ra_ktart TYPE RANGE OF p2006-ktart.
CASE lw_solicitudes-subty.
WHEN '0100'.
ra_ktart = VALUE #( ( low = '01' sign = 'I' option = 'EQ' )
( low = '02' sign = 'I' option = 'EQ' ) ).
WHEN '0300' OR '0301' OR '0309'.
ra_ktart = VALUE #( ( low = '17' sign = 'I' option = 'EQ' ) ).
WHEN '0901'.
ra_ktart = VALUE #( ( low = '10' sign = 'I' option = 'EQ' ) ).
ENDCASE.
CONV
data: l_dir type char200. l_dir = 'c:\temp'. data(l_resp) = cl_gui_frontend_services=>directory_exist( DIRECTORY = CONV #( l_dir ) ).
DATA l_date_c(8) VALUE '20200205'.
DATA(l_day) = cl_rs_time_service=>get_weekday( i_date = CONV #( l_date_c ) ). IF l_day > 4. WRITE:/ 'Solo lunes a jueves'. RETURN. ENDIF.
COND
DATA(time) = COND string( WHEN sy-timlo < '120000' THEN |{ sy-timlo TIME = ISO } AM|
WHEN sy-timlo > '120000' THEN |{ CONV t( sy-timlo - 12 * 3600 ) TIME = ISO } PM|
WHEN sy-timlo = '120000' THEN |High Noon|
ELSE 'nada' ).
SWITCH
DATA l_flag TYPE flag.
DATA(l_status) = SWITCH #( l_flag
WHEN 'X' THEN 'OK'
ELSE 'Error'
).
DATA(l_number) = SWITCH string( sy-index WHEN 1 THEN 'uno'
WHEN 2 THEN 'dos'
WHEN 3 THEN 'tres'
else 'nada' ).
BOOLC
p_f = boolc( p2001[] is not initial ).
NEW
DATA g_sol TYPE REF TO cl_sol.
CREATE OBJECT g_sol
EXPORTING
i_iddocumento = p_id
.
data(g_sol2) = NEW cl_sol( i_iddocumento = p_id ).
Non-class-based exceptions of the instance constructor cannot be handled, which means that sy-subrc is never set to a value other than 0. The return code sy-subrc is not set when anonymous data objects are created.
OPEN SQL
- SQL Expressions sql_exp
- String Functions
- Demos: DEMO_SQL_*
SELECT pernr, vorna,
CASE
WHEN vorna <> 'Homero' THEN 'MAGIOS'
ELSE 'NO MAGIOS'
END AS secta
FROM pa0002
INTO TABLE @DATA(lt_pernr).
SELECT FROM pa0002 FIELDS pernr,vorna WHERE gbdat >= '19900101' INTO TABLE @DATA(lt_pernr2).
SELECT FROM vbrk
INNER JOIN vbrp
ON vbrk~vbeln = vbrp~vbeln
FIELDS vbrk~*,vbrp~posnr,vbrp~matnr
WHERE fkdat >= '20190101'
INTO TABLE @DATA(itab).
*ITAB[1]-VBRK-VBELN = '0090156792'
DATA city TYPE spfli-cityfrom VALUE 'NEW YORK'.
SELECT *
FROM sflight AS s
WHERE seatsocc < s~seatsmax AND
EXISTS ( SELECT *
FROM spfli
WHERE carrid = s~carrid AND
connid = s~connid AND
cityfrom = @city )
INTO TABLE @DATA(free_flights).
DATA: carr_id TYPE spfli-carrid VALUE 'LH',
conn_id TYPE spfli-connid VALUE '400'.
SELECT SINGLE city, latitude, longitude
FROM sgeocity
WHERE city IN ( SELECT cityfrom
FROM spfli
WHERE carrid = @carr_id AND
connid = @conn_id )
INTO (@DATA(city), @DATA(lati), @DATA(longi)).
SELECT planetype, seatsmax
FROM saplane AS plane
WHERE seatsmax < @wa-seatsmax AND
seatsmax >= ALL
( SELECT seatsocc
FROM sflight
WHERE carrid = @wa-carrid AND
connid = @wa-connid )
ORDER BY seatsmax
INTO (@DATA(plane), @DATA(seats)).
SELECT SINGLE
FROM demo_expressions
FIELDS CAST( num1 AS CHAR( 20 ) ) AS col1,
CAST( numlong1 AS CHAR( 20 ) ) AS col2,
CAST( dec3 AS CHAR( 20 ) ) AS col3,
CAST( dats2 AS CHAR( 20 ) ) AS col4
WHERE id = 'X'
INTO @DATA(result).
*************************************************************
constantes en select list
*************************************************************
SELECT carrid, connid, '007' as tipo
FROM spfli
INTO table @DATA(result).
SELECT carrid, connid, @abap_true as tipo
FROM spfli
INTO table @DATA(result).
SELECT carrid, connid, @sy-datum as fecha_ejecucion
FROM spfli
INTO table @DATA(result).
*************************************************************
CASE
*************************************************************
SELECT SINGLE j~partner, i~rut_pagador, i~total_pagar, i~nom_archivo,
CASE i~banco_abon
WHEN ' ' THEN i~banco_abon2
ELSE i~banco_abon
END AS banco
INTO CORRESPONDING FIELDS OF @wa_data
FROM zfi_histra_paso AS i INNER JOIN but000 AS j
ON i~rut_pagador = j~bu_sort2
INNER JOIN zfi_bp_datos_com AS z
ON j~partner = z~bp
WHERE i~folio = @g_folio_histra
AND i~rut_pagador IN @s_rut
AND i~nom_archivo LIKE 'A%'
AND j~partner IN @s_bp
AND z~tipo_sucursal = '00' . "#EC CI_SEL_NESTED
*************************************************************
concat
*************************************************************
SELECT FROM spfli
FIELDS CONCAT( CONCAT( carrid , '_' ),
CAST( connid AS CHAR ) ) AS key,
cityto, 1 AS cities
INTO TABLE @DATA(result).
KEY CITYTO CITIES
LH_0400 NEW YORK 1
AA_0017 SAN FRANCISCO 1
AZ_0555 FRANKFURT 1
*************************************************************
SUBSTRING
*************************************************************
*PRmmaaRppnnnnnn
*0208020 + aa + mm + nnnnnn
*Ejemplo: PR0720R007188233 se convierte en 02080202007188233
SELECT concat( '0208020', ( concat( substring( xblnr,5,2 ), ( concat( substring( xblnr,3,2 ), ( substring( xblnr,10,6 ) ) ) ) ) ) ) AS folio
FROM bsis
WHERE bukrs EQ @g_bukrs
AND xblnr IN @s_xblnr
AND augdt = '00000000'
INTO CORRESPONDING FIELDS OF TABLE @gt_data .
**************************************************************
* Literal in SELECT List
**************************************************************
SELECT SINGLE @abap_true
FROM scarr
WHERE carrid = @carrier
INTO @DATA(exists).
IF exists = abap_true.
cl_demo_output=>display(
|Carrier { carrier } exists in SCARR| ).
ELSE.
cl_demo_output=>display(
|Carrier { carrier } does not exist in SCARR| ).
ENDIF.
**************************************************************
*aggregations
**************************************************************
* nombre completo empleado
select VORNA && ' ' && nachn as nombre from pa0002 into table @data(lt_data) where pernr = '10000000'.
*total factura
select netwr + MWSBK as total from vbrk into table @data(lt_vbrk) UP TO 1 ROWS.
* facturas con total > 1000000
select netwr + MWSBK as total from vbrk where netwr + MWSBK > 10000 and waerk = 'CLP'
into table @data(lt_vbrk).
Códigos Varios
DATA(l_day) = cl_rs_time_service=>get_weekday( i_date = sy-datum ). IF l_day > 4. WRITE:/ 'Solo lunes a jueves'. RETURN. ENDIF.
IF cl_rs_time_service=>get_weekday( i_date = sy-datum ) > 4. WRITE:/ 'Solo lunes a jueves'. RETURN. ENDIF.
******************** DATA(components) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( 'T100' ) )->components.
Demos
[1] Demos