Top Banner
Ejemplos de Sentencias, Objetos y Funciones en Programas - Recorre Tabla Transarente y tabla Interna (*) - Prueba con Cadenas Replace, Split, translate, etc (*) - Parameters y Valor por Referencia (Using Changing) (*) - Select Anidados (*) - ABM de Tablas Internas (Altas Bajas y Modificaciones) (*) - ABM de Tablas Transaparentes (Altas Bajas y Modificaciones) (*) - Parameters Y Select Options (*) - Submit y Exports (*) - Invocacion de un Reporte desde una funcion (**) - Frame y At Line seleccion (*) - Seleccion Sreen para frame de Comentarios - Manejo de Archivos o Levantar / Upload o Archivo de Textos (*) o Planilla de Calculos (x) o Generar / Download o Generar Txt o Cualquier Archivo de Texto. o Ejecutar Archivos externos. o Ejecutar Desde Sap Diferentes Archivos Externos - Insertar Un registro en tabla Transparente (*) - Funciones SAP Vanilla (*) - At of Selection-Screen On Field(*) - Hipervinculos de Lineas (At Line selection) (**) - Field-Symbols (**) - Tabs en una cadena (**) - Para que un Parametro de Seleccion sea Oculto (Password) (1) - Unpack y Pack - Cómo desactivar el chequeo sintántico - Manejar Radio Buttons y al lado del otro. - For all Entries - Calculadora en POP-UP - Try-Catch en Abap - Leer Textos en Sap - Busca un String en Programa ABAP - Completar o Sacar ceros a la Izquierda de un programa (*)Ejemplos del banco Hipotecario (**)Base de conocimientos sap1 (1)Sintaxis Abap / Trucos (x)Fuente Desconocida
26

75003266 Dlver Trucos Abap

Apr 14, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 75003266 Dlver Trucos Abap

Ejemplos de Sentencias, Objetos y Funciones en Programas

- Recorre Tabla Transarente y tabla Interna (*)

- Prueba con Cadenas Replace, Split, translate, etc (*)

- Parameters y Valor por Referencia (Using Changing) (*)

- Select Anidados (*)

- ABM de Tablas Internas (Altas Bajas y Modificaciones) (*)

- ABM de Tablas Transaparentes (Altas Bajas y Modificaciones) (*)

- Parameters Y Select Options (*)

- Submit y Exports (*)

- Invocacion de un Reporte desde una funcion (**)

- Frame y At Line seleccion (*)

- Seleccion Sreen para frame de Comentarios

- Manejo de Archivos o Levantar / Upload o Archivo de Textos (*) o Planilla de Calculos (x) o Generar / Download o Generar Txt o Cualquier Archivo de Texto. o Ejecutar Archivos externos. o Ejecutar Desde Sap Diferentes Archivos Externos

- Insertar Un registro en tabla Transparente (*)

- Funciones SAP Vanilla (*)

- At of Selection-Screen On Field(*)

- Hipervinculos de Lineas (At Line selection) (**)

- Field-Symbols (**)

- Tabs en una cadena (**)

- Para que un Parametro de Seleccion sea Oculto (Password) (1)

- Unpack y Pack

- Cómo desactivar el chequeo sintántico

- Manejar Radio Buttons y al lado del otro.

- For all Entries

- Calculadora en POP-UP

- Try-Catch en Abap

- Leer Textos en Sap

- Busca un String en Programa ABAP

- Completar o Sacar ceros a la Izquierda de un programa (*)Ejemplos del banco Hipotecario (**)Base de conocimientos sap1 (1)Sintaxis Abap / Trucos (x)Fuente Desconocida

Page 2: 75003266 Dlver Trucos Abap
Page 3: 75003266 Dlver Trucos Abap

Recorre Tabla Transarente y tabla Interna

REPORT ycb01 .TABLES t000.DATA tabla01 LIKE t000 OCCURS 10 WITH HEADER LINE.

DATA: BEGIN OF customer, id(8) TYPE n, name(25), telephone(12), END OF customer.

SELECT * FROM t000 INTO TABLE tabla01.LOOP AT tabla01. WRITE: tabla01-mandt, AT 20 tabla01-mtext. NEW-LINE.ENDLOOP.ULINE.LOOP AT t000. WRITE: t000-mandt, t000-mtext. NEW-LINE.ENDLOOP.

Page 4: 75003266 Dlver Trucos Abap

Prueba con Cadenas Replace, Split, translate, etc

REPORT ycb02 .TABLES: t000, sflight.DATA: aa TYPE i.*------------------------------------------------------*select-options: fmtext for t000-mtext,* fmandt for t000-mandt.

*select sin Into*select * from t000 where mandt in fmandt* write t000-mandt.* write t000-mtext.* new-line.*endselect.*write 'no puede entrar aca'.*------------------------------------------------------*data: first(25), middle(2), last(25), full(54).*first = 'Con'.*middle = 'ca'.*last = 'tenate'.*concatenate first middle last into full separated by '.'.*write full.*------------------------------------------------------*data: list(40), name_1(25), name_2(25), name_3(25).*data arreglo(25) type c occurs 10 with header line.

*list = 'Edison,Smith,Young,a,b,c'.

*split list at ',' into name_1 name_2 name_3.*split list at ',' into table arreglo.

*write name_1.*write name_2.*write name_3.

*loop at arreglo.* write arreglo.* new-line.*endloop.*------------------------------------------------------*data names(25) type c.*names = ' bill charles '.

*shift names right deleting trailing space.*shift names left deleting leading space. (= Condense)

*write names.*------------------------------------------------------*data string(50) type c.

*string = 'El valor de la variable es X X XX es uno.'.*write / string.

*Diferencia entre Replace y Translate*replace 'X' with 'Y' into string.*translate string using 'XY'.

*write / string.

*------------------------------------------------------*data text(50) type c.*text = 'texas california new mexico lousiana oregon'.*search text for 'californ1'.*if sy-subrc ne 0.* write 'not found.'.

Page 5: 75003266 Dlver Trucos Abap

*else.* write 'se encontro'.*endif.*72*468921#*------------------------------------------------------DATA: cadena1(20) TYPE c, cadena2(20) TYPE c, off1 TYPE i, len1 TYPE i, off2 TYPE i, len2 TYPE i.off1 = 2.len1 = 3.off2 = 4.len2 = 3.

cadena1 = 'abcdefghij'.MOVE cadena1+off1(len1) TO cadena2.NEW-LINE.WRITE cadena2.

Page 6: 75003266 Dlver Trucos Abap

Parameters y Valor por Referencia (Using Changing)

PROGRAM ycb03 NO STANDARD PAGE HEADING.DATA: aa(10) TYPE c, bb(10) TYPE c, a1(10) TYPE c, a2(10) TYPE c, a3(10) TYPE c, b1(10) TYPE c, b2(10) TYPE c, b3(10) TYPE c.

a1 = '0'.a2 = '0'.a3 = '0'.b1 = '0'.b2 = '0'.b3 = '0'.WRITE: a1, a2, a3, b1, b2, b3.

PERFORM prueba USING a1 a2 a3 CHANGING b1 b2 b3.NEW-LINE.WRITE: a1, a2, a3, b1, b2, b3.

*-----------------------------------------------FORM prueba USING x1 x2 x3 CHANGING y1 y2 y3.

y1 = '1'. y2 = '1'. y3 = '1'.ENDFORM.

Select Anidados

REPORT ycb04 .TABLES: t000, customers, bookings.DATA mitabla TYPE t000 OCCURS 10 WITH HEADER LINE.

SELECT * FROM customers. SELECT * FROM bookings WHERE customid = customers-id. WRITE: / customers-name, bookings-fldate. ENDSELECT.ENDSELECT.

Page 7: 75003266 Dlver Trucos Abap

ABM de Tablas Internas (Altas Bajas y Modificaciones)

REPORT ycb05 .TABLES: customers.

DATA my_customers LIKE customers OCCURS 10 WITH HEADER LINE.

SELECT * FROM customers INTO TABLE my_customers.

PERFORM mostrar_datos.PERFORM insertar_registro.PERFORM mostrar_datos.PERFORM insertar_registro.PERFORM mostrar_datos.PERFORM modificar_registro.PERFORM mostrar_datos.PERFORM borrar_registro.PERFORM mostrar_datos.

*-------------------------------------------------------------------*MOSTRAR*-------------------------------------------------------------------FORM mostrar_datos. SKIP. LOOP AT my_customers. WRITE: / my_customers-id, my_customers-name. ENDLOOP.ENDFORM.*-------------------------------------------------------------------

*-------------------------------------------------------------------*ALTA*-------------------------------------------------------------------FORM insertar_registro. READ TABLE my_customers WITH KEY id = '12'. IF sy-subrc NE 0. my_customers-id = '12'. my_customers-name = 'Bart Simpson2'. my_customers-postcode = '7600'. my_customers-city = 'Mar del plata'. INSERT TABLE my_customers. ELSE. WRITE: / 'Ya existe dicho registro'. ENDIF.

ENDFORM.*-------------------------------------------------------------------

*-------------------------------------------------------------------*BAJA*-------------------------------------------------------------------*-------------------------------------------------------------------FORM borrar_registro. DELETE my_customers WHERE id = '12'. WRITE / 'registro borrado'.ENDFORM.*-------------------------------------------------------------------*MODIFICACION*-------------------------------------------------------------------FORM modificar_registro. READ TABLE my_customers WITH KEY id = '12'. IF sy-subrc EQ 0. my_customers-name = 'Bart Simpson modificado'. MODIFY my_customers INDEX sy-tabix. WRITE: / 'Registro modificado!'. ELSE.

Page 8: 75003266 Dlver Trucos Abap

WRITE: / 'No existe dicho registro. No se puede modificar'. ENDIF.ENDFORM.

*-------------------------------------------------------------------

ABM de Tablas Transaparentes (Altas Bajas y Modificaciones)

REPORT ycb06 .TABLES customers.

PERFORM insert_forma1.PERFORM insert_forma2.PERFORM insert_forma3.PERFORM update_forma1.PERFORM update_forma2.PERFORM update_forma3.PERFORM mostrar_datos.*-------------------------------------------------------*INSERTAR FORMA 1*-------------------------------------------------------FORM insert_forma1. customers-id = '20'. customers-name = 'Mike Tyson'. INSERT customers. IF sy-subrc <> 0. WRITE: / 'ya existe el Id: ', customers-id. ENDIF.ENDFORM.*-------------------------------------------------------*INSERTAR FORMA 2*-------------------------------------------------------FORM insert_forma2. DATA my_customers LIKE customers. my_customers-id = '21'. my_customers-name = 'James Bond 007'. INSERT INTO customers VALUES my_customers. IF sy-subrc <> 0. WRITE: / 'ya existe el id: ', my_customers-id. ENDIF.ENDFORM.*-------------------------------------------------------*INSERTAR FORMA 3*-------------------------------------------------------FORM insert_forma3.

DATA all_customers LIKE customers OCCURS 100 WITH HEADER LINE. all_customers-id = '32'. all_customers-name = 'cristiano5'. APPEND all_customers. all_customers-id = '33'. all_customers-name = 'cristiano6'. APPEND all_customers. all_customers-id = '34'. all_customers-name = 'cristiano7'. APPEND all_customers. INSERT customers FROM TABLE all_customers ACCEPTING DUPLICATE KEYS. IF sy-subrc <> 0. WRITE: / 'No se pudieron insertar ciertos datos de la tabla interna'. ENDIF.ENDFORM.

*-------------------------------------------------------*UPDATE FORMA 1

Page 9: 75003266 Dlver Trucos Abap

*-------------------------------------------------------FORM update_forma1. customers-id = '1'. customers-city = 'modificado!'. UPDATE customers. IF sy-subrc <> 0. WRITE 'entry not existing'. ENDIF.ENDFORM.

*-------------------------------------------------------*UPDATE FORMA 2*-------------------------------------------------------FORM update_forma2. UPDATE customers SET city = 'City Unknow' WHERE city = space.ENDFORM.*-------------------------------------------------------*UPDATE FORMA 3*-------------------------------------------------------FORM update_forma3. customers-id = '50'. customers-name = 'prueba'. customers-city = sy-datum. MODIFY customers.ENDFORM.*-------------------------------------------------------*MOSTRAR DATOS*-------------------------------------------------------FORM mostrar_datos. SKIP. WRITE: / 'customers-id', ' customers-name', ' customers-city'. SKIP. SELECT * FROM customers. WRITE: / customers-id, customers-name, customers-city. ENDSELECT.ENDFORM.*-------------------------------------------------------

Parameters Y Select Options

REPORT ycb07 . TABLES: customers. DATA parameter_lenght TYPE i.

PARAMETERS: p_id LIKE customers-id.

SELECT-OPTIONS: s_id FOR customers-id, s_name FOR customers-name.

SELECT * FROM customers WHERE id = p_id. WRITE customers-id. ENDSELECT. IF sy-subrc <> 0. WRITE: / 'No se encontraron datos que coincidan con p_id'. ENDIF. ULINE. SELECT * FROM customers WHERE id IN s_id AND name IN s_name. WRITE: / customers-id, customers-name. ENDSELECT.

Page 10: 75003266 Dlver Trucos Abap

Submit y Exports y programa Invocado por Submit y exports

Ejemplo1 Submit

REPORT ycb_prueba47 .*-DATA DECLARATION------------------------------------------------------

* Tabla interna donde se guardará la lista.DATA: ti_abaplist LIKE abaplist OCCURS 0 WITH HEADER LINE.

*-MAIN PROCESSING SECTION-----------------------------------------------

* Invoca a un programa, pasandole los parámetros de selección,* y haciendo que la salida del programa invocado, en vez de imprimirse,* se guarde en memoria. Luego retorna.SUBMIT ycb_prueba44WITH s_idoc-low = '123'EXPORTING LIST TO MEMORYAND RETURN.

* Trae los datos de memoria y los guarda en una tabla interna.* Esta tabla no es legible,CALL FUNCTION 'LIST_FROM_MEMORY' TABLES listobject = ti_abaplist EXCEPTIONS not_found = 1 OTHERS = 2.

* Imprime en pantalla la salida del programa invocado.CALL FUNCTION 'WRITE_LIST'* EXPORTING* WRITE_ONLY = 'X' TABLES listobject = ti_abaplist EXCEPTIONS empty_list = 1 OTHERS = 2.

Ejemplo 2

Programa que Exporta

REPORT ycb08 .TABLES: t000.DATA: my_t000 LIKE t000 OCCURS 10 WITH HEADER LINE.

SELECT * FROM t000 INTO TABLE my_t000.EXPORT my_t000 TO MEMORY ID 'ZCBMEM01'.

WRITE / 'Esto es 08 y voy a invocar a 09'.*submit ycb09 using selection-set 'ZCB02'.SUBMIT ycb09 USING SELECTION-SET 'ZCB02' AND RETURN.*submit ycb09 using selection-set 'ZCB02' via selection-screen.WRITE: / 'Ya volvió del programa invocado!'.

Page 11: 75003266 Dlver Trucos Abap

Programa que Importa.

REPORT ycb09 .WRITE: / '----------------------------'.WRITE: / 'Esto es 09'.WRITE: / '----------------------------'.SKIP 2.TABLES: customers,t000.DATA: my_t000 LIKE t000 OCCURS 10 WITH HEADER LINE.SELECT-OPTIONS: s_id FOR customers-id.

SELECT * FROM customers WHERE id IN s_id. WRITE: / customers-id, customers-name.ENDSELECT.

IMPORT my_t000 FROM MEMORY ID 'ZCBMEM01'.SKIP.WRITE: / 'Estos son los datos recibidos con el import'.LOOP AT my_t000. WRITE / my_t000-mandt.ENDLOOP.

Variante para prog. YCB09 Variante: ZCB02 p_Id: 20 a 50 *Corroborar que en la tabla Customers existan los datos

Invocacion de un Reporte desde una funcion

Submite un reporte desde una funcion, y vuelve a la funcion.Esto es porque utiliza el parámetro AND RETURN.

Si el reporte tenía salida por pantalla, no la muestra.Esto es porque utiliza el parametro EXPORTING LIST TO MEMORY

Le pasa los paramtros de seleccion al reporte.Para hacer esto, utiliza WITH CAMPO_PARAM = 'VALOR'

FUNCTION ycb01.*"----------------------------------------------------------------------*"*"Local interface:*" IMPORTING*" VALUE(CADENA2) TYPE CHAR100 OPTIONAL*" EXPORTING*" VALUE(RETURN_DESC) TYPE CHAR200*"----------------------------------------------------------------------

* Tabla interna usada para recibir los datos de memoria. DATA: cadena(100) TYPE c OCCURS 0 WITH HEADER LINE.*Submite el reporte con un parametro de selección, y vuelve. SUBMIT ycb03 WITH p_id = 'caso1' EXPORTING LIST TO MEMORY AND RETURN.*Obtiene los datos importados de la memoria.*IMPORTANTE: la variable a importar se debe llamar igual a la exportada. IMPORT cadena FROM MEMORY ID 'ZBCS_MEM01'.

Page 12: 75003266 Dlver Trucos Abap

*Muestra los datos importados. LOOP AT cadena. CONCATENATE return_desc cadena INTO return_desc. ENDLOOP.

ENDFUNCTION.

*-------------------------------------------------------------------

REPORT ycb03 .DATA: cadena(100) TYPE c OCCURS 0 WITH HEADER LINE.PARAMETERS: p_id TYPE char10.*--------------------------------------------------------START-OF-SELECTION.* Dependiendo del valor del parametro, inserta distintos datos en la* tabla interna. IF p_id EQ 'CASO1'. cadena = '-caso1 1!-'. APPEND cadena. cadena = '-caso1 2!-'. APPEND cadena. ELSE. cadena = '-caso no 1!-'. APPEND cadena. ENDIF.*Exporta la tabla interna a memoria. EXPORT cadena TO MEMORY ID 'ZBCS_MEM01'. WRITE: / 'Se finalizó'.

Frame y At Line seleccion.

REPORT ycb10 .TABLES: customers.

*En la pantalla de seleccion aparece un Frame(Marco) que contiene elPARAMETER y el select option.SELECTION-SCREEN BEGIN OF BLOCK uno WITH FRAME TITLE text-001.PARAMETERS: p_id LIKE customers-id.SELECT-OPTIONS s_id FOR customers-id.SELECTION-SCREEN END OF BLOCK uno.SELECT * FROM customers. WRITE: / customers-id, customers-name.ENDSELECT.

*Una vez ejecutado el reporte, se puede seleccionar lineasAT LINE-SELECTION. WRITE: / 'Se seleccionó una linea'. WRITE: ': ', sy-lilli.

WRITE: / 'repid: ', sy-repid. WRITE: / 'sy-dynnr', sy-dynnr. WRITE: / 'UNAME', sy-uname.

Seleccion Sreen para frame de Comentarios

SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 10(20) text-001 FOR FIELD parm.

Page 13: 75003266 Dlver Trucos Abap

SELECTION-SCREEN POSITION POS_high. PARAMETERS parm LIKE saplane-planetype. SELECTION-SCREEN END OF LINE.

At-selección Screen.

KEY-WORD: AT SELECTION-SCREEN, Validaciones, ON

SIRVE PARA VALIDAR QUE LA ENTRADA DE DATOS CUMPLA CIERTAS CONDICIONESANTES QUE EL PROGRAMA SE EJECUTE. OBS: ESTAS VALIDACIONES SE PODRIAN HACER DENTRO DEL PROGRAMA, PERO LO BUENO DE PONERLO ACA ES QUE NO SE PERMITE CONTINUAR HASTA QUE LA ENTRADA DE DATOS SEA VALIDA. ADEMAS PERO EL PROGRAMA NO CORTA ABRUPTAMENTE COMO PASARIA SI SE MUESTRA UN MENSAJE DE ERROR DENTRO DEL PROGRAMA. REPORT zcbprueba04 MESSAGE-ID 00.

PARAMETERS: campo1(10) TYPE c.

AT SELECTION-SCREEN ON campo1. IF campo1 = '1'. MESSAGE e398 WITH 'Error en el número.'. ENDIF.

START-OF-SELECTION. WRITE:/ 'Bien!'.

END-OF-SELECTION.

Manejo de Archivos

Archivo de Textos

Trx: AL11 para ver los directorios al que tienen acceso sap

REPORT ycb11 .TABLES: customers.

DATA: dsn(50) VALUE '\\s000sad\interfaces\cristian\archivo.txt', dsn2(50) VALUE '\\s000sad\interfaces\cristian\prueba.txt', record(80).DATA: BEGIN OF rec, name LIKE customers-name, END OF rec.*perform escritura_archivo_plano.*perform lectura_archivo_plano.*perform escritura_archivo_binario.*perform lectura_archivo_binario.*perform append_archivo_binario.*perform lectura_archivo_binario.PERFORM lectura_con_ws_upload.*************************************************************************ESCRITURA DE UN ARCHIVO

Page 14: 75003266 Dlver Trucos Abap

************************************************************************FORM escritura_archivo_plano. ULINE. WRITE: / 'form escritura_archivo_plano.'. WRITE: / '______________________________'. OPEN DATASET dsn FOR OUTPUT IN TEXT MODE. TRANSFER 'prueba111' TO dsn. TRANSFER 'prueba222' TO dsn. TRANSFER 'prueba333' TO dsn. CLOSE DATASET dsn.ENDFORM.*************************************************************************LECTURA DE UN ARCHIVO************************************************************************FORM lectura_archivo_plano. ULINE. WRITE: / 'form lectura_archivo_plano.'. WRITE: / '______________________________'. OPEN DATASET dsn FOR INPUT IN TEXT MODE. DO. READ DATASET dsn INTO record. IF sy-subrc NE 0. EXIT. ELSE. WRITE: / record. ENDIF. ENDDO. CLOSE DATASET dsn.ENDFORM.************************************************************************* CREACION DE ARCHIVO BINARIO************************************************************************FORM escritura_archivo_binario. ULINE. WRITE: / 'form escritura_archivo_binario.'. WRITE: / '______________________________'. OPEN DATASET dsn2 FOR OUTPUT. SELECT * FROM customers. MOVE-CORRESPONDING customers TO rec. TRANSFER rec TO dsn2. ENDSELECT. CLOSE DATASET dsn2.ENDFORM.************************************************************************* LECTURA DE ARCHIVO BINARIO************************************************************************FORM lectura_archivo_binario. ULINE. WRITE: / 'form lectura_archivo_binario..'. WRITE: / '______________________________'. OPEN DATASET dsn2 FOR INPUT. DO. READ DATASET dsn2 INTO rec. IF sy-subrc NE 0. EXIT. ENDIF. WRITE: / rec-name. ENDDO.ENDFORM.************************************************************************* Appending a file************************************************************************

FORM append_archivo_binario. ULINE. WRITE: / 'form append_archivo_binario.'. WRITE: / '______________________________'. OPEN DATASET dsn2 FOR APPENDING IN BINARY MODE. SELECT * FROM customers. MOVE-CORRESPONDING customers TO rec.

Page 15: 75003266 Dlver Trucos Abap

TRANSFER rec TO dsn2. ENDSELECT. CLOSE DATASET dsn2.ENDFORM.

************************************************************************* LECTURA DE UN ARCHIVO CON WS_UPLOAD* SIRVE PARA ARCHIVOS LOCALES (presentation server), o se la PC local.************************************************************************FORM lectura_con_ws_upload. DATA p_file LIKE rlgrap-filename VALUE 'c:\archivo.txt'. DATA: BEGIN OF it_entrada OCCURS 0, campo(80) TYPE c, END OF it_entrada.

CALL FUNCTION 'WS_UPLOAD' EXPORTING filename = p_file filetype = 'DAT' TABLES data_tab = it_entrada EXCEPTIONS conversion_error = 1 file_open_error = 2 file_read_error = 3 invalid_table_width = 4 invalid_type = 5 no_batch = 6 unknown_error = 7 gui_refuse_filetransfer = 8 customer_error = 9 OTHERS = 10.*Si no lo puedo abrir informo el error y termino el programa. IF sy-subrc <> 0. WRITE: / 'No se pudo abrir el archivo: ', p_file. ENDIF. LOOP AT it_entrada. WRITE / it_entrada-campo. ENDLOOP.ENDFORM.

- Planilla de calculo (Xls)

REPORT zexcelaitab.TABLES: alsmex_tabline.

DATA: BEGIN OF iexcel OCCURS 0. INCLUDE STRUCTURE alsmex_tabline.DATA: END OF iexcel.

* No of columnsDATA: BEGIN OF data_tab OCCURS 0, value_0001(50), value_0002(50), value_0003(50), value_0004(50), value_0005(50), : : value_0099(50), value_0100(50).

DATA: END OF data_tab.DATA: tind(4) TYPE n.DATA: zwfeld(19).

Page 16: 75003266 Dlver Trucos Abap

FIELD-SYMBOLS: <fs1>.

PARAMETERS: filenm LIKE rlgrap-filename MEMORY ID m01, noheader AS CHECKBOX.CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = filenm i_begin_col = 1 i_begin_row = 1 i_end_col = 100 i_end_row = 30000 TABLES intern = iexcel EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3.

IF sy-subrc <> 0. WRITE: / 'EXCEL UPLOAD FAILED ', filenm, sy-subrc.ELSE. SORT iexcel BY row col. LOOP AT iexcel. IF noheader = 'X' AND iexcel-row = 1. CONTINUE. ENDIF. tind = iexcel-col. CONCATENATE 'DATA_TAB-VALUE_' tind INTO zwfeld. ASSIGN (zwfeld) TO <fs1>. <fs1> = iexcel-value. AT END OF row. APPEND data_tab. WRITE:/ 'data_tab ', data_tab-value_0001, data_tab-value_0002, data_tab-value_0003, data_tab-value_0004. CLEAR data_tab. ENDAT. ENDLOOP.ENDIF

Generar / Download

Generar Txt o Cualquier Archivo de Texto.

data: l_filename type i.DATA: l_filename_uc TYPE string. MOVE p_filen TO l_filename_uc.

CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING bin_filesize = l_filename filename = l_filename_uc filetype = 'ASC' WRITE_FIELD_SEPARATOR = 'X' replacement = '#' TABLES data_tab = it_vwsat

Page 17: 75003266 Dlver Trucos Abap

EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22..

*FILETYPE: "ASC,bin

*Para crear un archivo a partir de una tabla con los campos separador por tab: USAR el FILETYPE = 'DAT'= o ns = "urn:schemas-microsoft-com:office:office" />

Download de txt en orientado a Objetos.

DATA: l_filename TYPE i. DATA: l_filename_uc TYPE string. MOVE p_archi TO l_filename_uc.

CALL METHOD cl_gui_frontend_services=>gui_downloadEXPORTING bin_filesize = l_filename filename = l_filename_uc filetype = 'ASC' replacement = '#' changing data_tab = t_outtab[].

Ejecutar Archivos externos

CALL FUNCTION 'WS_EXECUTE' EXPORTING program = 'wordpad' commandline = 'c:archivo1.rtf' EXCEPTIONS frontend_error = 1 no_batch = 2 prog_not_found = 3 illegal_option = 4 gui_refuse_execute = 5 OTHERS = 6.

Page 18: 75003266 Dlver Trucos Abap

Insertar Un registro en tabla Transparente

REPORT ycb14 .TABLES: customers.PARAMETERS: p_id LIKE customers-id OBLIGATORY, p_name LIKE customers-name OBLIGATORY, p_city LIKE customers-city, p_tel LIKE customers-telephone.

START-OF-SELECTION. PERFORM insert_customers.

*-------------------------------------------------------*INSERTAR FORMA 1**INSERTA UN REGISTRO EN LA TABLA CUSTOMERS.*OBTIENE LOS DATOS DEL PARAMETERS*-------------------------------------------------------FORM insert_customers. customers-id = p_id. customers-name = p_name. customers-telephone = p_tel. customers-city = p_city. INSERT customers. IF sy-subrc <> 0. WRITE: / 'Ya existe el Id: ', customers-id. ELSE. WRITE: / 'Registro insertado'. ENDIF.ENDFORM.

Funciones SAP Vanilla

REPORT ycb15.PARAMETERS p_date LIKE scal-date.DATA: ln_dia_semana LIKE scal-indicator, ln_semana LIKE scal-week.

START-OF-SELECTION. CALL FUNCTION 'DATE_COMPUTE_DAY' EXPORTING date = p_date IMPORTING day = ln_dia_semana.

WRITE: / 'El dia de la semana es: ', ln_dia_semana. WRITE: / 'Recordar que en SAP los días empiezan los lunes'. ULINE. CALL FUNCTION 'DATE_GET_WEEK' EXPORTING date = p_date IMPORTING week = ln_semana.* EXCEPTIONS* DATE_INVALID = 1* OTHERS = 2 WRITE: / 'La semana es: ', ln_semana.

Page 19: 75003266 Dlver Trucos Abap

At of Selection-Screen On Field

REPORT ycb16 .

PARAMETERS: p_numero TYPE n.

AT SELECTION-SCREEN ON p_numero. IF p_numero = 1. MESSAGE e001(zficomm) WITH text-003. ENDIF.

START-OF-SELECTION. WRITE: / 'hola'.

Hipervinculos de Lineas (At Line selection)

REPORT zcbprueba3 .

DATA: v_cadena(20) TYPE c.

AT LINE-SELECTION. WRITE: v_cadena.

START-OF-SELECTION.

WRITE:/ 'hola1'. v_cadena = 'CADENA1'. HIDE v_cadena.

WRITE:/ 'hola2'. v_cadena = 'CADENA2'. HIDE v_cadena.

END-OF-SELECTION.

Field-Symbols

Acceso a campos de tablas SQL

REPORT z_fsymbol.DATA: t_t000 LIKE t000 OCCURS 0 WITH HEADER LINE.FIELD-SYMBOLS <f_campo1>.

START-OF-SELECTION.* Copia los datos de la tabla de mandantes a una tabla interna. SELECT * FROM t000 INTO TABLE t_t000.* Recorre la tabla interna. LOOP AT t_t000.* Asigna la cadena t_t000-mandt al field-symbol,* pero entre PARENTESIS. De esta forma digamos que* el fields-symbol "sabe" que referencia a un objeto. ASSIGN ('t_t000-mandt') TO <f_campo1>.* Imprime la variable apuntada por el field-symbol. WRITE: / <f_campo1>.

Page 20: 75003266 Dlver Trucos Abap

ENDLOOP. WRITE: / sy-uline.

LOOP AT t_t000. ASSIGN ('t_t000-mandt') TO <f_campo1>.* Modifica el valor de la variable apuntada por el field-symbol. <f_campo1> = sy-tabix. WRITE: / <f_campo1>. ENDLOOP.

Do Varying con Field-Symbols

DATA: lv_field_lga(20) TYPE c, lv_field_bet(20) TYPE c, lv_field_anz(20) TYPE c, lv_field_ein(20) TYPE c, lv_field_opk(20) TYPE c, tipn(2) TYPE n.

FIELD-SYMBOLS: <lga> TYPE p0008-lga01, <bet> TYPE p0008-bet01, <anz> TYPE p0008-anz01, <ein> TYPE p0008-ein01, <opk> TYPE p0008-opk01.

* DO 20 TIMES VARYING w_it8_rep* FROM pt_p0008-lga01* NEXT pt_p0008-lga02.DO 20 TIMES. tipn = sy-index. CONCATENATE 'PT_P0008-LGA' tipn INTO lv_field_lga. ASSIGN (lv_field_lga) TO <lga>.

CONCATENATE 'PT_P0008-BET' tipn INTO lv_field_bet. ASSIGN (lv_field_bet) TO <bet>.

CONCATENATE 'PT_P0008-ANZ' tipn INTO lv_field_anz. ASSIGN (lv_field_anz) TO <anz>.

CONCATENATE 'PT_P0008-EIN' tipn INTO lv_field_ein. ASSIGN (lv_field_ein) TO <ein>.

CONCATENATE 'PT_P0008-OPK' tipn INTO lv_field_opk. ASSIGN (lv_field_opk) TO <opk>.

w_it8_rep-lga = <lga>. w_it8_rep-bet = <bet>. w_it8_rep-anz = <anz>. w_it8_rep-ein = <ein>. w_it8_rep-opk = <opk>.

* sigue igual

Page 21: 75003266 Dlver Trucos Abap

* ...

ENDDO.

Tabs en una cadena (Field symbols)

PROGRAMA QUE CONCATENA UN CARACTER TAB AL FINAL DE UNA CADENA Y EN CUALQUIER LUGAR DE UNA CADENA.

REPORT ycb_prueba07 .DATA: v_salida(10) TYPE c.DATA: v_tab TYPE c.FIELD-SYMBOLS: <fld>.

START-OF-SELECTION.

*---------------------*FORMA 1**CONCATENA UN TAB ATRAS*--------------------- v_salida = 'SAPGLOBAL'. ASSIGN v_tab(1) TO <fld> TYPE 'X'.

<fld> = '09'. CONCATENATE v_salida v_tab INTO v_salida. WRITE v_salida .

*---------------------*FORMA 2**CAMBIA UN CARACTER POR* UN TAB*--------------------- v_salida = 'SAPGLOBAL'. ASSIGN v_salida+3(1) TO <fld> TYPE 'X'. <fld> = '09'. WRITE v_salida .

*---------------------*FORMA 3**Invocando a una clase**---------------------

CLASS cl_abap_char_utilities DEFINITION LOAD. DATA: v_cadena(30) TYPE c. DATA: vertical_tab(1) TYPE c, horizontal_tab. horizontal_tab = cl_abap_char_utilities=>horizontal_tab. v_cadena = 'HORIZONTAL_TAB-SAPGLOBAL'. CONCATENATE v_cadena horizontal_tab INTO v_cadena. WRITE:/ v_cadena.

Page 22: 75003266 Dlver Trucos Abap

Para que un Parametro de Seleccion sea Oculto (Password)

Hace que un parameter salga oculto como campo de password

REPORT z_prueba.PARAMETERS: p_passwd(8) MODIF ID ver.

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN. IF screen-group1 = 'VER'. "Comprueba si el ID es = al que queremos que se oculte screen-invisible = '1'. MODIFY SCREEN. ENDIF. ENDLOOP.

END-OF-SELECTION.

Unpack y Pack

Si se hace un pack de una cadena numerica a un tipo P, y este tipo P está definido con decimales, completa primero la parte decimal y luego la parte entera. DATA: vp TYPE p DECIMALS 3.DATA: cadena(10) TYPE c VALUE '105473'.

PACK cadena TO vp.

WRITE:/ 'cadena:',cadena.WRITE:/ 'vp:', vp NO-GAP.

imprime:cadena: 105473vp: 105,473 Si se hace un unpack de un tipo P definido con decimales a una cadena, copia todos los digitos a la cadena, pero sin la coma decimal. Y completa con CEROS a la izquierda.= o ns = "urn:schemas-microsoft-com:office:office" /> ejemplo:

data: vp type p decimals 3 value '99.641'.DATA: cadena(10) TYPE c.

UNPACK vp TO cadena.

WRITE:/ 'cadena:',cadena.WRITE:/ 'vp:', vp NO-GAP.

imprime:cadena: 0000099641vp: 99,641

Page 23: 75003266 Dlver Trucos Abap

Cómo desactivar el chequeo sintántico

set extended check off. *codigo... *codigo... *codigo... set extended check on.

Como hacer que una columna no se mueva cuando el usuario dezplaza la pantalla para la derecha? RESPUESTA: Ejemplo: set left scroll-boundary column 13. Esto mantendrá los primeros 13 caracteres de todas las filas siempre visibles.

Manejar Radio Buttons y al lado del otro.

SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(10) text-005.PARAMETERS: r_rectd RADIOBUTTON GROUP rb1. "todosSELECTION-SCREEN COMMENT 15(10) text-006 FOR FIELD r_rectd.PARAMETERS: r_recsi RADIOBUTTON GROUP rb1. "con recursoSELECTION-SCREEN COMMENT 30(15) text-007 FOR FIELD r_recsi.PARAMETERS: r_recno RADIOBUTTON GROUP rb1. "sin recursoSELECTION-SCREEN COMMENT 50(15) text-008 FOR FIELD r_recno.SELECTION-SCREEN END OF LINE.

For all Entries

IF sy-subrc = 0. SELECT vbeln posnr matnr FROM lips INTO TABLE it_lips FOR ALL ENTRIES IN it_ekes WHERE vbeln = it_ekes-vbeln AND posnr = it_ekes-vbelp.

ENDIF.

LOOP AT it_ekes. READ TABLE it_lips WITH KEY vbeln = it_ekes-vbeln posnr = it_ekes-vbelp.

IF sy-subrc = 0. it_ekes-matnr = it_lips-matnr. MODIFY it_ekes TRANSPORTING matnr. ENDIF.ENDLOOP.

Page 24: 75003266 Dlver Trucos Abap

Calculadora el Pop-UP

El siguiente código nos generará una calculadora en una ventana (POP-UP). La función ‘FITRV_CALCULATOR’ nos devolverá en la variable X_VALUE el resultado del cálculo que haya hecho el usuario para luego utilizarlo como queramos en nuestro programa.

REPORT zcalculadora.DATA: x_value(15) TYPE c.CALL FUNCTION ‘fitrv_calculator’* EXPORTING* INPUT_VALUE =* CURRENCY =* START_COLUMN = ‘10'* START_ROW = ‘10' IMPORTING output_value = x_value EXCEPTIONS invalid_input = 1 calculation_canceled = 2 OTHERS = 3.IF sy-subrc = 0. “en este ejemplo imprimimos por pantalla el resultadowrite:/ ‘output value ‘, x_value.ENDIF.

Try-Catch en ABAP

El otro día viendo la documentación de SAP me encontré que existe la posibilidad de utilizar en ABAP el TRY-CATCH (muy usado en Java). TRY-CATCH sirve para el manejo de errores y excepciones. Y nos puede ser muy útil para evitar los odiosos Short Dumps.

Dejo un ejemplo donde trato de insertar un registro en una tabla Z usando try-catch para evitar errores de SQL:

*Intento insertar un registro en la tabla ZPROYECTOS, si hay algún tipo de error de SQL (que generalmente arroja un dump)… manejo la excepción con un mensaje de advertencia. TRY. INSERT INTO ZPROYECTOS VALUES WA_ZPROYEC. CATCH CX_SY_DYNAMIC_OSQL_ERROR. MESSAGE ‘Error al actualizar la tabla ZPROYECTOS’ TYPE ‘I’. ENDTRY.

Leer Textos en SAP

Para poder leer los campos de texto se usa la función read_text_inline. Esto generalmente lo usamos en formularios para mostrar textos de cabecera o de posición por ejemplo.

Para saber como llenar los campos, vamos al lugar donde cargamos el texto:

Page 25: 75003266 Dlver Trucos Abap

Una vez ahí clickeamos en el menú Pasar a —> Cabecera…

VG_INLINE suele tener el valor 1 (VG_INLINE = ‘1′.)

El código que tenemos que agregar es:DATA: vg_inline TYPE char1, vg_name LIKE thead-tdname, it_lines TYPE TABLE OF it_lin, it_inline TYPE TABLE OF it_lin, vg_id LIKE thead-tdid, vg_lang LIKE thead-tdspras, vg_obj LIKE thead-tdobject,call function ‘read_text_inline’ exporting if = vg_id inline_count = vg_inline language = vg_lang name = vg_name object = vg_obj tables inline = it_inline lines = it_lines exceptions id = 1 language = 2 name = 3 not_found = 4 object = 5 reference_check = 6 others = 7.IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.

* En la tabla IT_LINES nos queda el texto guardado

Busca un String en Programas ABAP

El reporte RSRSCAN1 nos va a servir para buscar un string (palabras, sentencias, mensajes, etc) en uno o más programas. Además nos listará la cantidad de ocurrencias.

Completar Ceros a la Izquierda de una Variable

* Función que saca los ceros a la izquierda de una variableCALL FUNCTION ‘conversion_exit_alpha_output’ EXPORTING input = vg_variable IMPORTING output = vg_variable.

Page 26: 75003266 Dlver Trucos Abap

* Función que completa con ceros a la izquierda de una variableCALL FUNCTION ‘conversion_exit_alpha_input’ EXPORTING input = vg_variable IMPORTING output = vg_variable.