Difference between revisions of "SAP ABAP 740"
From SapWiki
(→VALUE) |
|||
Line 1: | Line 1: | ||
− | + | ==Manejo de strings== | |
− | |||
− | |||
[https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-us/abapcompute_string_format_options.htm Documentación SAP] | [https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-us/abapcompute_string_format_options.htm Documentación SAP] | ||
character_string = |{ a_numeric_variable }|. | character_string = |{ a_numeric_variable }|. | ||
Line 54: | Line 52: | ||
ld_message = |{ ld_delivery ALPHA = OUT }|. | ld_message = |{ ld_delivery ALPHA = OUT }|. | ||
− | + | ===shift_right && clase cl_abap_string_utilities=== | |
<nowiki>DATA(str) = `abc `. | <nowiki>DATA(str) = `abc `. | ||
Line 62: | Line 60: | ||
ASSERT rslt = shift_right( str ).</nowiki> | ASSERT rslt = shift_right( str ).</nowiki> | ||
− | + | ==Manejo de Tablas== | |
DATA l_pernr TYPE p0001-pernr VALUE '00003019'. | DATA l_pernr TYPE p0001-pernr VALUE '00003019'. | ||
SELECT * INTO TABLE @DATA(lt_p2010) FROM pa2010 WHERE pernr = @l_pernr. | SELECT * INTO TABLE @DATA(lt_p2010) FROM pa2010 WHERE pernr = @l_pernr. | ||
− | + | ===line_exists=== | |
IF line_exists( lt_p2010[ pernr = l_pernr begda = '20181101' ] ). | IF line_exists( lt_p2010[ pernr = l_pernr begda = '20181101' ] ). | ||
* do something | * do something | ||
Line 72: | Line 70: | ||
ENDIF. | ENDIF. | ||
− | + | ===line_index=== | |
DATA(l_index) = line_index( lt_p2010[ pernr = l_pernr begda = '20181101' ] ). | DATA(l_index) = line_index( lt_p2010[ pernr = l_pernr begda = '20181101' ] ). | ||
WRITE:/ l_index. | WRITE:/ l_index. | ||
− | + | ===Modify the contents based on TABLE-KEY=== | |
TRY. | TRY. | ||
lt_p2010[ pernr = l_pernr ]-begda = '20200101'. | lt_p2010[ pernr = l_pernr ]-begda = '20200101'. | ||
Line 82: | Line 80: | ||
ENDTRY. | ENDTRY. | ||
− | + | ===search line=== | |
TRY. | TRY. | ||
DATA(ls_p2010) = lt_p2010[ pernr = l_pernr ]. | DATA(ls_p2010) = lt_p2010[ pernr = l_pernr ]. | ||
Line 90: | Line 88: | ||
WRITE:/ ls_p2010-begda. | WRITE:/ ls_p2010-begda. | ||
− | + | ===CORRESPONDING=== | |
data lt_p0002 type TABLE OF p0002. | data lt_p0002 type TABLE OF p0002. | ||
Line 114: | Line 112: | ||
t_return[] = CORRESPONDING #( t_return_2[] ). | t_return[] = CORRESPONDING #( t_return_2[] ). | ||
− | + | ===Inicializar tabla=== | |
lt_p0002 = VALUE #( ( pernr = l_pernr begda = sy-datum ) ). | lt_p0002 = VALUE #( ( pernr = l_pernr begda = sy-datum ) ). | ||
− | + | ===agregar registros a tabla (append)=== | |
lt_p0002 = VALUE #( BASE lt_p0002 ( pernr = l_pernr begda = '20200201' ) ). | lt_p0002 = VALUE #( BASE lt_p0002 ( pernr = l_pernr begda = '20200201' ) ). | ||
− | + | ===FILTER=== | |
DATA lt_p0002_s TYPE STANDARD TABLE OF p0002 WITH NON-UNIQUE SORTED KEY pernr COMPONENTS pernr. | DATA lt_p0002_s TYPE STANDARD TABLE OF p0002 WITH NON-UNIQUE SORTED KEY pernr COMPONENTS pernr. | ||
Line 159: | Line 157: | ||
lt_p0002_h = FILTER #( lt_p0002_3 IN lt_filter_tab | lt_p0002_h = FILTER #( lt_p0002_3 IN lt_filter_tab | ||
WHERE pernr = pernr AND begda = begda ). | WHERE pernr = pernr AND begda = begda ). | ||
− | + | ====ejemplo 2==== | |
<nowiki> | <nowiki> | ||
DATA ti_teven TYPE TABLE OF teven. | DATA ti_teven TYPE TABLE OF teven. | ||
Line 188: | Line 186: | ||
ENDDO.</nowiki> | ENDDO.</nowiki> | ||
− | + | ===LOOP GROUP BY=== | |
*[https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenloop_group_by_abexas.htm Examples of Grouping with LOOP] | *[https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenloop_group_by_abexas.htm Examples of Grouping with LOOP] | ||
*Programa DEMO_LOOP_AT_ITAB_GROUP_BY | *Programa DEMO_LOOP_AT_ITAB_GROUP_BY | ||
Line 251: | Line 249: | ||
</nowiki> | </nowiki> | ||
− | + | ==CONV== | |
data: l_dir type char200. | data: l_dir type char200. | ||
l_dir = 'c:\temp'. | l_dir = 'c:\temp'. | ||
Line 264: | Line 262: | ||
ENDIF. | ENDIF. | ||
− | + | ==COND== | |
DATA(time) = COND string( WHEN sy-timlo < '120000' THEN |{ sy-timlo TIME = ISO } AM| | 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 |{ CONV t( sy-timlo - 12 * 3600 ) TIME = ISO } PM| | ||
WHEN sy-timlo = '120000' THEN |High Noon| | WHEN sy-timlo = '120000' THEN |High Noon| | ||
ELSE 'nada' ). | ELSE 'nada' ). | ||
− | + | == SWITCH == | |
DATA l_flag TYPE flag. | DATA l_flag TYPE flag. | ||
DATA(l_status) = SWITCH #( l_flag | DATA(l_status) = SWITCH #( l_flag | ||
Line 280: | Line 278: | ||
WHEN 3 THEN 'tres' | WHEN 3 THEN 'tres' | ||
else 'nada' ). | else 'nada' ). | ||
− | + | ==BOOLC== | |
p_f = boolc( p2001[] is not initial ). | p_f = boolc( p2001[] is not initial ). | ||
− | + | ==EQUIV== | |
[https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenlogexp_equiv.htm Equiv] | [https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenlogexp_equiv.htm Equiv] | ||
Line 304: | Line 302: | ||
ENDIF. | ENDIF. | ||
ENDIF.</nowiki> | ENDIF.</nowiki> | ||
− | + | ==NEW== | |
DATA g_sol TYPE REF TO cl_sol. | DATA g_sol TYPE REF TO cl_sol. | ||
CREATE OBJECT g_sol | CREATE OBJECT g_sol | ||
Line 315: | Line 313: | ||
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. | 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== | |
* [https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abapsql_expr.htm SQL Expressions sql_exp] | * [https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abapsql_expr.htm SQL Expressions sql_exp] | ||
* [https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abensql_functions_string.htm String Functions] | * [https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abensql_functions_string.htm String Functions] | ||
Line 373: | Line 371: | ||
</nowiki> | </nowiki> | ||
− | + | ===constantes en select list=== | |
<nowiki> | <nowiki> | ||
SELECT carrid, connid, '007' as tipo | SELECT carrid, connid, '007' as tipo | ||
Line 394: | Line 392: | ||
</nowiki> | </nowiki> | ||
− | + | ===CASE=== | |
<nowiki> | <nowiki> | ||
SELECT SINGLE j~partner, i~rut_pagador, i~total_pagar, i~nom_archivo, | SELECT SINGLE j~partner, i~rut_pagador, i~total_pagar, i~nom_archivo, | ||
Line 421: | Line 419: | ||
</nowiki> | </nowiki> | ||
− | + | ===CONCAT=== | |
<nowiki> | <nowiki> | ||
SELECT FROM spfli | SELECT FROM spfli | ||
Line 456: | Line 454: | ||
</nowiki> | </nowiki> | ||
− | + | ===SUBSTRING=== | |
<nowiki> | <nowiki> | ||
*PRmmaaRppnnnnnn | *PRmmaaRppnnnnnn | ||
Line 469: | Line 467: | ||
INTO CORRESPONDING FIELDS OF TABLE @gt_data . </nowiki> | INTO CORRESPONDING FIELDS OF TABLE @gt_data . </nowiki> | ||
− | + | ===Literal in SELECT List=== | |
<nowiki> | <nowiki> | ||
SELECT SINGLE @abap_true | SELECT SINGLE @abap_true | ||
Line 483: | Line 481: | ||
ENDIF. </nowiki> | ENDIF. </nowiki> | ||
− | + | ===aggregations=== | |
<nowiki> | <nowiki> | ||
* nombre completo empleado | * nombre completo empleado | ||
Line 497: | Line 495: | ||
[https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abapselect_aggregate.htm Open SQL - Aggregate Expressions agg_exp] | [https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abapselect_aggregate.htm Open SQL - Aggregate Expressions agg_exp] | ||
− | + | ===Host Expressions, Use in the WHERE Condition === | |
<nowiki> | <nowiki> | ||
REPORT demo_select_where_tab_exp. | REPORT demo_select_where_tab_exp. | ||
Line 536: | Line 534: | ||
demo=>main( ). | demo=>main( ). | ||
</nowiki> | </nowiki> | ||
− | + | ===ABAP SQL Indicator structure (ABAP 7.55 (or) S/4HANA 2020)=== | |
[https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapupdate_set_indicator.htm UPDATE dbtab, set indicators] | [https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapupdate_set_indicator.htm UPDATE dbtab, set indicators] | ||
<nowiki> | <nowiki> | ||
Line 560: | Line 558: | ||
</nowiki> | </nowiki> | ||
− | + | ==Códigos Varios== | |
DATA(l_day) = cl_rs_time_service=>get_weekday( i_date = sy-datum ). | DATA(l_day) = cl_rs_time_service=>get_weekday( i_date = sy-datum ). | ||
IF l_day > 4. | IF l_day > 4. |
Revision as of 15:49, 29 April 2023
Contents
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.
ld_message = |{ ld_delivery ALPHA = OUT }|.
shift_right && clase cl_abap_string_utilities
DATA(str) = `abc `. DATA(rslt) = str. cl_abap_string_utilities=>del_trailing_blanks( CHANGING str = rslt ). ASSERT rslt = shift_right( str ).
Manejo de Tablas
DATA l_pernr TYPE p0001-pernr VALUE '00003019'. SELECT * INTO TABLE @DATA(lt_p2010) FROM pa2010 WHERE pernr = @l_pernr.
line_exists
IF line_exists( lt_p2010[ pernr = l_pernr begda = '20181101' ] ). * do something WRITE:/ 'Existe'. ENDIF.
line_index
DATA(l_index) = line_index( lt_p2010[ pernr = l_pernr begda = '20181101' ] ). WRITE:/ l_index.
Modify the contents based on TABLE-KEY
TRY. lt_p2010[ pernr = l_pernr ]-begda = '20200101'. CATCH cx_sy_itab_line_not_found. ENDTRY.
search line
TRY. DATA(ls_p2010) = lt_p2010[ pernr = l_pernr ]. CATCH cx_sy_itab_line_not_found. RETURN. ENDTRY. WRITE:/ ls_p2010-begda.
CORRESPONDING
data lt_p0002 type TABLE OF p0002. lt_p0002 = CORRESPONDING #( lt_p2010 ). data(ls_p0002) = lt_p0002[ 1 ]. write:/ ls_p0002-pernr.
FUNCTION z_rfc_read_id. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" VALUE(I_ID) TYPE ZRFCID *" TABLES *" T_ID STRUCTURE ZTABLE *" T_RETURN STRUCTURE ZRETURN *" T_RETURN_2 STRUCTURE ZRETURN_2 OPTIONAL ... ... ... t_return_2[] = CORRESPONDING #( t_return[] ). APPEND LINES OF lt_return TO t_return_2. t_return[] = CORRESPONDING #( t_return_2[] ).
Inicializar tabla
lt_p0002 = VALUE #( ( pernr = l_pernr begda = sy-datum ) ).
agregar registros a tabla (append)
lt_p0002 = VALUE #( BASE lt_p0002 ( pernr = l_pernr begda = '20200201' ) ).
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 ).
ejemplo 2
DATA ti_teven TYPE TABLE OF teven. DATA l_pernr TYPE teven-pernr. TYPES: BEGIN OF filter, pernr TYPE teven-pernr, END OF filter, filter_tab TYPE HASHED TABLE OF filter WITH UNIQUE KEY pernr. DO 2 TIMES. IF sy-index = 1. l_pernr = '10000307'. ELSE. l_pernr = '00000000'. ENDIF. DATA(filter_tab) = VALUE filter_tab( ( pernr = l_pernr ) ). SELECT * FROM teven INTO TABLE ti_teven ORDER BY pernr ldate ltime erdat ertim pdsnr. DATA(lt_teven) = FILTER #( ti_teven IN filter_tab WHERE pernr = pernr ) . ENDDO.
LOOP GROUP BY
- Examples of Grouping with LOOP
- Programa DEMO_LOOP_AT_ITAB_GROUP_BY
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.
- APPEND VALUE
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'A000' ) TO lr_einri. APPEND VALUE #( sign = 'I' option = 'EQ' low = 'C200' ) TO lr_einri.
- VALUE #( BASE
TYPES: BEGIN OF ty_data2, col1 TYPE char1, col2 TYPE i, END OF ty_data2. DATA lt_tabla TYPE TABLE OF ty_data2. DATA lt_tabla2 TYPE TABLE OF ty_data2. lt_tabla = VALUE #( ( col1 = 'A' col2 = 2 ) ( col1 = 'B' col2 = 11 ) ( col1 = 'A' col2 = 23 ) ). LOOP AT lt_tabla INTO DATA(ls_tabla) WHERE col1 = 'A'. lt_tabla2 = VALUE #( BASE lt_tabla2 ( ls_tabla ) ). "APPEND ENDLOOP.
Uses BASE to append rows to existing rows in an internal table.
TYPES itab TYPE TABLE OF string WITH EMPTY KEY. DATA(itab) = VALUE itab( ( `a` ) ( `b` ) ( `c` ) ). ... itab = VALUE #( BASE itab ( `d` ) ( `e` ) ( `f` ) ).
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 ).
EQUIV
SELECTION-SCREEN BEGIN OF BLOCK bl1. PARAMETERS p_alv RADIOBUTTON GROUP radi. PARAMETERS p_csv RADIOBUTTON GROUP radi. PARAMETERS p_pc AS CHECKBOX. PARAMETERS p_serv AS CHECKBOX. SELECTION-SCREEN END OF BLOCK bl1. AT SELECTION-SCREEN ON BLOCK bl1. IF p_csv = abap_true. IF p_pc = abap_false AND p_serv = abap_false. MESSAGE 'Debe seleccionar destino de archivo de salida (PC o Servidor)' TYPE 'E'. elseIF p_pc = abap_true EQUIV p_serv = abap_true. MESSAGE e000(0k) WITH 'Debe elegir solo una opcion'. ENDIF. ENDIF.
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 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). SELECT SINGLE vorna && ' ' && nachn && ' ' && name2 AS nombre_emp, gbdat INTO (@wa-nombre_emp, @wa-gbdat) FROM pa0002 WHERE pernr = @pernr AND begda <= @sy-datum AND endda >= @sy-datum.
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 SELECT pernr, vorna, CASE WHEN vorna <> 'Homero' THEN 'MAGIOS' ELSE 'NO MAGIOS' END AS secta FROM pa0002 INTO TABLE @DATA(lt_pernr).
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 REPORT demo_sql_function_concat. CLASS demo DEFINITION. PUBLIC SECTION. CLASS-METHODS main. ENDCLASS. CLASS demo IMPLEMENTATION. METHOD main. SELECT CONCAT( CONCAT( carrid, LPAD( carrname,21,' ' ) ), LPAD( url,40,' ' ) ) AS line FROM scarr INTO TABLE @DATA(result). cl_demo_output=>display( result ). ENDMETHOD. ENDCLASS. START-OF-SELECTION. demo=>main( ).
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).
Open SQL - Aggregate Expressions agg_exp
Host Expressions, Use in the WHERE Condition
REPORT demo_select_where_tab_exp. CLASS demo DEFINITION. PUBLIC SECTION. CLASS-DATA carriers TYPE HASHED TABLE OF scarr WITH UNIQUE KEY carrid WITH NON-UNIQUE SORTED KEY name COMPONENTS carrname. CLASS-METHODS: class_constructor, main. ENDCLASS. CLASS demo IMPLEMENTATION. METHOD main. DATA name TYPE scarr-carrname VALUE 'United Airlines'. cl_demo_input=>request( CHANGING field = name ). SELECT carrid, connid, cityfrom, cityto FROM spfli WHERE carrid = @( VALUE spfli-carrid( carriers[ KEY name carrname = name ]-carrid OPTIONAL ) ) INTO TABLE @DATA(result). cl_demo_output=>display( result ). ENDMETHOD. METHOD class_constructor. SELECT * FROM scarr INTO TABLE carriers. ENDMETHOD. ENDCLASS. START-OF-SELECTION. demo=>main( ).
ABAP SQL Indicator structure (ABAP 7.55 (or) S/4HANA 2020)
TYPES wa TYPE sflight WITH INDICATORS ind. DATA itab TYPE TABLE OF wa WITH EMPTY KEY. SELECT carrid, connid, fldate, price FROM sflight WHERE carrid = char`LH` AND connid = numc`0400` AND fldate > '20180601' INTO CORRESPONDING FIELDS OF TABLE @itab. IF sy-subrc = 0. LOOP AT itab ASSIGNING FIELD-SYMBOL(<wa>). <wa>-price *= '0.8'. <wa>-ind-price = 'X'. ENDLOOP. UPDATE sflight FROM TABLE @itab INDICATORS SET STRUCTURE ind. ENDIF.
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