Tips Sap Abap

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 9

Instalador / https://aancos.

com/2021/02/01/sap-gui-for-windows-7-70/

1. Sentencias Hana
- Read table:
lv_dato = VALUE #( ltd_map_imputacion[ domvalue_l = <fs_vbap>-status_cred ]-
ddtext DEFAULT space ).

- Rango:
DATA: lr_sgsart TYPE RANGE OF vwpanla-gsart.
"Creamos rango con los números de packno
lr_sgsart = VALUE #( FOR lwa_calendoper IN pt1_calendoper
( sign = 'I'
option = 'EQ'
low = lwa_calendoper-sgsart ) ).

SORT lr_sgsart.
DELETE ADJACENT DUPLICATES FROM lr_sgsart COMPARING ALL FIELDS.

"Rango de entregas para obtener unidad de flete


lr_entrega = VALUE #( FOR lwa_lips IN ltd_lips
( sign = 'I'
option = 'EQ'
low = |{ lwa_lips-entrega ALPHA = IN }| )
).

"Rango de entregas para obtener Orden de Flete TM REC


lr_entrega_dev = VALUE #( FOR lwa_vbfa IN ltd_vbfa_dev WHERE ( vbtyp_v =
'J' )
( sign = 'I'
option = 'EQ'
low = |{ lwa_vbfa-vbelv ALPHA =
IN }| ) ).

DATA: lr_bname TYPE RANGE OF usr21-bname,


lwa_bname LIKE LINE OF lr_bname.

CLEAR lwa_bname.
lwa_bname-sign = 'I'.
lwa_bname-option = 'EQ'.
lwa_bname-low = pi_dataemail-ernam.
APPEND lwa_bname TO lr_bname.

CLEAR lwa_bname.
lwa_bname-sign = 'I'.
lwa_bname-option = 'EQ'.
lwa_bname-low = pi_dataemail-aenam.
APPEND lwa_bname TO lr_bname.

2. Bucle Infinito
do.
if space = 'X'.
exit.
endif.
enddo.

3. Exportar valor en memoria


EXPORT ex_tcode FROM ls_tcode TO MEMORY ID 'LS_TCODE'.
IMPORT ex_tcode TO ls_tcode FROM MEMORY ID 'LS_TCODE'.
IMPORT lvs_tafkz = l_tafkz FROM MEMORY ID 'MIGO'.

4. Exportar valor en Base de Datos


"Programa donde se exporta los datos

TYPES: BEGIN OF lty_data,


counter TYPE sy-tabix,
temp_data TYPE string,
END OF lty_data.
DATA: ltd_data TYPE TABLE OF lty_data.

FIELD-SYMBOLS: <fs_data> TYPE lty_data.


"Exportamos los valores
APPEND INITIAL LINE TO ltd_data ASSIGNING <fs_data>.
<fs_data>-counter = 1.
<fs_data>-temp_data = ls_action.

APPEND INITIAL LINE TO ltd_data ASSIGNING <fs_data>.


<fs_data>-counter = 2.
<fs_data>-temp_data = sy-tcode.

EXPORT ex_data FROM ltd_data TO DATABASE indx(zz) ID 'ZXMBCU01'.

"Programa donde se importa los datos


IMPORT ex_action = lv_action FROM DATABASE indx(zz) ID 'ZXMBCU01'.
IMPORT ex_tcode = lv_tcode FROM DATABASE indx(zz) ID 'ZXMBCU01'.

"Programa donde se importa


TYPES: BEGIN OF lty_data,
counter TYPE sy-tabix,
temp_data TYPE string,
END OF lty_data.

DATA: ltd_data TYPE TABLE OF lty_data.


DATA: lo_expimp TYPE REF TO cl_abap_expimp_db.
DATA: lv_tcode TYPE sy-tcode,
lv_action TYPE goaction.

IMPORT ex_data = ltd_data FROM DATABASE indx(zz) ID 'ZXMBCU01'.

"Una vez importado los registos, los eliminamos


CREATE OBJECT lo_expimp.
TRY.
CALL METHOD lo_expimp->delete
EXPORTING
tabname = 'INDX'
client = sy-mandt
area = 'ZZ'
id = 'ZXMBCU01'
client_specified = abap_true.
CATCH cx_sy_client.
ENDTRY.

LOOP AT ltd_data ASSIGNING FIELD-SYMBOL(<fs_data>).


CASE <fs_data>-counter.
WHEN 1.
lv_action = <fs_data>-temp_data.
WHEN 2.
lv_tcode = <fs_data>-temp_data.
ENDCASE.
ENDLOOP.

5. Eliminar de tabla interna


"dentro de loop
DELETE TABLE gdt_data FROM <fs_data>.

6. Particionar cadena
data: lv_tamcadena TYPE i.

lv_tamcadena = strlen( <fs_mensajes_cp>-descripcion_mensaje ).

"Particionamos el mensaje
IF lv_tamcadena LE 50.
lwa_mensaje-message_v1 = <fs_mensajes_cp>-descripcion_mensaje.
ELSE.
lwa_mensaje-message_v1 = <fs_mensajes_cp>-descripcion_mensaje(50).
lv_tamcadena = lv_tamcadena - 50.

IF lv_tamcadena LE 50.
lwa_mensaje-message_v2 = <fs_mensajes_cp>-
descripcion_mensaje+50(lv_tamcadena).
ELSE.
lwa_mensaje-message_v2 = <fs_mensajes_cp>-descripcion_mensaje+50(50).
lv_tamcadena = lv_tamcadena - 50.

IF lv_tamcadena LE 50.
lwa_mensaje-message_v2 = <fs_mensajes_cp>-
descripcion_mensaje+100(lv_tamcadena).
ELSE.
lwa_mensaje-message_v3 = <fs_mensajes_cp>-descripcion_mensaje+100(50).
lv_tamcadena = lv_tamcadena - 50.

IF lv_tamcadena LE 50.
lwa_mensaje-message_v2 = <fs_mensajes_cp>-
descripcion_mensaje+150(lv_tamcadena).
ELSE.
lwa_mensaje-message_v4 = <fs_mensajes_cp>-
descripcion_mensaje+150(50).
ENDIF.
ENDIF.
ENDIF.
ENDIF.

7. Funciones HCM
"Leemos IT0007
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = innnn-pernr
infty = lc_0007
begda = innnn-begda
endda = innnn-endda
IMPORTING
subrc = lv_subrc
TABLES
infty_tab = ltd_p0007
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.

CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE'


EXPORTING
number = p_pernr.

CALL FUNCTION 'HR_INFOTYPE_OPERATION'


EXPORTING
infty = '0071'
subtype = p_record-subty
number = p_record-pernr "employeenumber
validityend = validityend
validitybegin = validitybegin
record = p_record
operation = insert
nocommit = nocommit
dialog_mode = '0'
IMPORTING
return = return_struct
key = personaldatakey
EXCEPTIONS
OTHERS = 0.

"unlock record after modification


CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
EXPORTING
number = p_pernr.

8. URLs

- Guía para agregar campos a tx fbl1n


https://blogs.sap.com/2019/01/04/5-easy-steps-to-add-new-line-item-fields-to-fbl1n/

- Guía para XML


https://sapintegrationhub.com/abap/transformation/xml-transformation-example-
xslt_tool/

http://saptechnical.com/Tutorials/AdobeForms/
http://www.teknoda.com.ar/tips/sap/t23adobefor.pdf
https://s3-eu-west-1.amazonaws.com/gxmedia.galileo-press.de/leseproben/2890/
sappress_sap_interactive_forms_by_adobe.pdf
https://www.munich-enterprise.com/es/formularios-de-adobe-de-sap

9. Para asignaciones dinámicas


FIELD-SYMBOLS: <item> TYPE any,
<fs_pstyp> TYPE pstyp.

ASSIGN ('<LO_REQ_ITEM_STATE>->ITEM') TO <item>.


CHECK <item> IS ASSIGNED.

ASSIGN COMPONENT 'PSTYP' OF STRUCTURE <item> TO <fs_PSTYP>.


CHECK sy-subrc = 0.

10. Collect
"Obtenemos la Stock Propio Total por Centro
CLEAR lwa_sumastockpropio.
LOOP AT ltd_stockpropio INTO lwa_stockpropio.
MOVE-CORRESPONDING lwa_stockpropio TO lwa_sumastockpropio.
COLLECT lwa_sumastockpropio INTO ltd_sumastockpropio.
ENDLOOP.

11. Include structure


TYPES: BEGIN OF lty_result_aux,
umlmc TYPE marc-umlmc,
trame TYPE marc-trame.
INCLUDE STRUCTURE zmms_result_consultamat.
TYPES: END OF lty_result_aux.

12. Mayusculas y minusculas

TRANSLATE text TO UPPER CASE.


TRANSLATE text TO LOWER CASE.

13. PRogramar en qas


LSTRDU50

14. If en una sola linea


ls_tot_vlradj = COND string( WHEN tot_vlradj IS INITIAL THEN '0' ELSE
ls_tot_vlradj ).

15. Replace cadena


"Quitamos separador de decimales
REPLACE ALL OCCURRENCES OF lc_sep_dec IN ls_tot_vlradj WITH space.

16. Agegar espacio a la izquierda.


data: ls_tot_vlradj type char015.
SHIFT ls_tot_vlradj RIGHT DELETING TRAILING space.

* MOVE lv_dettxt TO lv_tot(6).


* MOVE ' ' TO lv_tot+6(126).
* MOVE ls_tot_vlradj TO lv_tot+134(15).
* MOVE ls_tot_capital TO lv_tot+149(15).
* MOVE ls_tot_interes TO lv_tot+164(15).
* MOVE ' ' TO lv_tot+179(8).
* MOVE ls_tot_provini TO lv_tot+187(15).
* MOVE ls_tot_provcme TO lv_tot+202(15).
* MOVE ls_tot_provcdv TO lv_tot+217(15).
* MOVE ls_tot_provtot TO lv_tot+232(15).
* MOVE ' ' TO lv_tot+247(8).
* MOVE ls_tot_vlrnetorea TO lv_tot+255(15).
* MOVE ls_tot_vlrnetolib TO lv_tot+270(15).
* MOVE ' ' TO lv_tot+285(60).

17. Formato fecha

"CONVERTIMOS EL FORMATO DE FECHA A ##.##.####
DATA: gv_fecha_cab(10) TYPE c.
CALL FUNCTION 'CONVERSION_EXIT_PDATE_OUTPUT'
  EXPORTING
    input         =  sy-datum
  IMPORTING
    output        =  gv_fecha_cab
    .  "  CONVERSION_EXIT_PDATE_OUTPUT

18. Valores Dominio


TYPES: tty_dd07v TYPE STANDARD TABLE OF dd07v.
DATA: lt_tipo_ingreso TYPE tty_dd07v,
lw_tipo_ingreso TYPE LINE OF tty_dd07v.

REFRESH: lt_tipo_ingreso[].

* Leer los valores de un Dominio


CALL FUNCTION 'DD_DOMVALUES_GET'
EXPORTING
domname = 'ZDMM_SC_TIPO_ING'
text = 'X'
langu = sy-langu
TABLES
dd07v_tab = lt_tipo_ingreso
EXCEPTIONS
wrong_textflag = 1
OTHERS = 2.

LOOP AT lt_tipo_ingreso INTO lw_tipo_ingreso.


WRITE: / lw_tipo_ingreso-ddtext.
ENDLOOP.

19. Fecha
REPLACE ALL OCCURRENCES OF '/' IN ls_wwert WITH '.'.

CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'


EXPORTING
date_external = ls_wwert
IMPORTING
date_internal = lv_wwert
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
IF sy-subrc EQ 0.
lwa_bbkpf-wwert = lv_wwert.
ENDIF.

20. Programa modificar en QAS: LSTRDU50

21. Último registro tabla interno


DESCRIBE TABLE IT_AEND LINES vl_index.
READ TABLE IT_AEND INTO wa_AEND INDEX vl_index.

22. Campos dinamicos


DATA: lwa_origen LIKE LINE OF lr_origen,
lv_field TYPE string.

FIELD-SYMBOLS: <fs_campo> TYPE any.

REFRESH: ltd_const, ltd_tipobien, lr_origen.


CLEAR: lwa_nombre_archivo, lwa_num_archivo, lwa_tam_campos.

LOOP AT ltd_const ASSIGNING FIELD-SYMBOL(<fs_const>).


CASE <fs_const>-campo.

WHEN 'NOMARCHV'.
CONCATENATE 'lwa_nombre_archivo-nom' <fs_const>-secuencia INTO lv_field.
ASSIGN (lv_field) TO <fs_campo>.
IF sy-subrc = 0.
<fs_campo> = <fs_const>-valor1.
ENDIF.

23. Formatos de numeros


lv_wrbtr_aux TYPE wrbtr,
ls_wrbtr TYPE c LENGTH 16,
ls_wrbtr = lv_wrbtr_aux.
WRITE lv_wrbtr_aux TO ls_wrbtr.
REPLACE '-' WITH space INTO ls_wrbtr.

24. Obtener mensaje de clase de mensaje


* CALL FUNCTION 'FORMAT_MESSAGE'
* EXPORTING
* id = 'ZMM'
* lang = sy-langu
* no = '001'
* v1 = lwa_zmb1bc_1-value
* IMPORTING
* msg = lv_mensaje
* EXCEPTIONS
* not_found = 1
* OTHERS = 2.
* IF sy-subrc <> 0.
* ENDIF.

25. ALV en popup


* TRY.
* cl_salv_table=>factory(
* IMPORTING
* r_salv_table = lo_alv
* CHANGING
* t_table = ltd_series[] ).
* CATCH cx_salv_msg.
* ENDTRY.
*
* DATA: lr_functions TYPE REF TO cl_salv_functions_list.
*
* lr_functions = lo_alv->get_functions( ).
* lr_functions->set_all( 'X' ).
*
* IF lo_alv IS BOUND.
* lo_alv->set_screen_popup(
* start_column = 25
* end_column = 100
* start_line = 6
* end_line = 10 ).
*
* lo_alv->display( ).
* ENDIF.

26. Actualizar tabla con tabla interna


MODIFY demo_bulk_modify FROM TABLE itab.

27. Consulta dinamica


ls_where = 'zs~medidor IN s_medid AND yr~werks IN s_werks AND yr~insta_ca IN
s_edifi AND'.
" Obtenemos campo fecha para filtrar
IF rb_corte EQ 'X'.
ls_fecha = 'zs~fecha_corte IN s_fecha'.
ELSEIF rb_recon EQ 'X'.
ls_fecha = 'zs~fecha_reconexion IN s_fecha'.
ELSEIF rb_no_ac EQ 'X'.
ls_fecha = 'zs~fecha_noacceso IN s_fecha'.
ELSEIF rb_suspe EQ 'X'.
ls_fecha = 'zs~fecha_suspension IN s_fecha'.
ENDIF.

CONCATENATE ls_where ls_fecha INTO ls_where SEPARATED BY space.

" Consulta con filtro dinámico en fecha


SELECT DISTINCT zs~medidor zs~fecha_hora zs~secuencia zs~fecha_corte
zs~fecha_reconexion zs~fecha_noacceso
zs~fecha_suspension zs~resp_acceso zs~fecha_registro yr~werks AS centro
yr~insta_ca AS edificio
yr~kunnr AS instalacion
INTO TABLE ltd_corecequipo
FROM zsdt_corecequipo AS zs
INNER JOIN yrvimcp01 AS yr ON zs~medidor = yr~medidor
WHERE (ls_where).

BCALV_EDIT_04

28. JOB

DATA : lv_jobname TYPE tbtcjob-jobname,


lv_jobclass TYPE tbtcjob-jobclass VALUE 'A',
lv_jobcount TYPE tbtcjob-jobcount,
lv_report TYPE sy-repid VALUE 'ZSDP0006',
lv_variant TYPE raldb-variant.

lv_variant = lv_variante.

CONCATENATE lv_report sy-datum sy-uzeit INTO lv_jobname SEPARATED BY '-'.

CALL FUNCTION 'JOB_OPEN'


EXPORTING
jobname = lv_jobname
jobclass = lv_jobclass
IMPORTING
jobcount = lv_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.

IF sy-subrc = 0.

CALL FUNCTION 'JOB_SUBMIT'


EXPORTING
authcknam = sy-uname
jobcount = lv_jobcount
jobname = lv_jobname
report = lv_report
variant = lv_variant
EXCEPTIONS
bad_priparams = 1
bad_xpgflags = 2
invalid_jobdata = 3
jobname_missing = 4
job_notex = 5
job_submit_failed = 6
lock_failed = 7
program_missing = 8
prog_abap_and_extpg_set = 9
OTHERS = 10.

IF sy-subrc = 0.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_jobcount
jobname = lv_jobname
sdlstrtdt = sy-datum
sdlstrttm = sy-uzeit
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
ENDIF.
ENDIF.

29. Programa con batch input: ZSDP0004 solgas

20. Try catch cuando no encuentra data


TRY.
DATA(wa_resv) = ltd_reserva[ rep_comm = <fs_table>-rep_comm ].
ti_return = VALUE #( BASE ti_return ( type = 'E'
number = 999
id = 'ZRS' message = <fs_table>-
message ) )."* ^_note_2372993
CATCH cx_sy_itab_line_not_found.
ENDTRY.

21. Programa con batch seleccionado


ZFIP0037 - casapalca
método: GENERAR_COMPENSACION

22. Programa Iconos: ADITES26

You might also like