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

t000-mtext. WRITE: tabla01-mandt. LOOP AT t000. telephone(12). DATA: BEGIN OF customer. LOOP AT tabla01. AT 20 tabla01-mtext. TABLES t000. NEW-LINE. DATA tabla01 LIKE t000 OCCURS 10 WITH HEADER LINE.Recorre Tabla Transarente y tabla Interna REPORT ycb01 . SELECT * FROM t000 INTO TABLE tabla01. NEW-LINE. END OF customer. ULINE. WRITE: t000-mandt. name(25). ENDLOOP. id(8) TYPE n. ENDLOOP. .

b. middle(2). * write 'not found.'.Smith. etc REPORT ycb02 . last(25). *split list at '. *write name_2.Young. *translate string using 'XY'.' into table arreglo. *Diferencia entre Replace y Translate *replace 'X' with 'Y' into string. *write name_1. *middle = 'ca'. *concatenate first middle last into full separated by '. *write full.'. translate. *shift names left deleting leading space. *loop at arreglo.'. * new-line. *write / string. * fmandt for t000-mandt. Split. *split list at '. *write name_3. DATA: aa TYPE i. *-----------------------------------------------------*data string(50) type c. *names = ' bill charles '. name_2(25). *select sin Into *select * from t000 where mandt in fmandt * write t000-mandt.Prueba con Cadenas Replace. *-----------------------------------------------------*select-options: fmtext for t000-mtext. full(54). *write 'no puede entrar aca'. * write t000-mtext. TABLES: t000. *write / string. *search text for 'californ1'. name_3(25). *-----------------------------------------------------*data: first(25). *text = 'texas california new mexico lousiana oregon'. *data arreglo(25) type c occurs 10 with header line. (= Condense) *write names. *if sy-subrc ne 0. *shift names right deleting trailing space.a.c'. *string = 'El valor de la variable es X X XX es uno. * write arreglo. * new-line.' into name_1 name_2 name_3. sflight. name_1(25). *last = 'tenate'. *endloop. *list = 'Edison. *-----------------------------------------------------*data: list(40). *-----------------------------------------------------*data names(25) type c. *first = 'Con'. . *endselect. *-----------------------------------------------------*data text(50) type c.

off2 = 4. off1 = 2. off1 TYPE i. MOVE cadena1+off1(len1) TO cadena2. *72*468921# *-----------------------------------------------------DATA: cadena1(20) TYPE c. len1 TYPE i. len2 TYPE i. off2 TYPE i. len1 = 3. len2 = 3. *endif. * write 'se encontro'. cadena2(20) TYPE c. NEW-LINE.*else. WRITE cadena2. . cadena1 = 'abcdefghij'.

a2. b2. a2. TABLES: t000. y2 = '1'. a2 = '0'. a2(10) TYPE c. b2 = '0'. WRITE: a1. WRITE: a1. NEW-LINE. ENDSELECT. a3(10) TYPE c. b3(10) TYPE c. a3. a3. a1 = '0'. b1. a3 = '0'. WRITE: / customers-name. bb(10) TYPE c. b3 = '0'. b1. DATA: aa(10) TYPE c. . ENDSELECT. customers. bookings. y3 = '1'. Select Anidados REPORT ycb04 . bookings-fldate. b1 = '0'. a1(10) TYPE c. SELECT * FROM customers. y1 = '1'. ENDFORM. b2(10) TYPE c. PERFORM prueba USING a1 a2 a3 CHANGING b1 b2 b3. SELECT * FROM bookings WHERE customid = customers-id. b3. b3.Parameters y Valor por Referencia (Using Changing) PROGRAM ycb03 NO STANDARD PAGE HEADING. b1(10) TYPE c. *----------------------------------------------FORM prueba USING x1 x2 x3 CHANGING y1 y2 y3. DATA mitabla TYPE t000 OCCURS 10 WITH HEADER LINE. b2.

mostrar_datos. SKIP. ENDLOOP. *------------------------------------------------------------------*------------------------------------------------------------------*BAJA *------------------------------------------------------------------*------------------------------------------------------------------FORM borrar_registro. mostrar_datos. my_customers-name = 'Bart Simpson2'. my_customers-name. my_customers-id = '12'. my_customers-postcode = '7600'. mostrar_datos. READ TABLE my_customers WITH KEY id = '12'. *------------------------------------------------------------------*MOSTRAR *------------------------------------------------------------------FORM mostrar_datos.ABM de Tablas Internas (Altas Bajas y Modificaciones) REPORT ycb05 . . WRITE / 'registro borrado'. ENDFORM. insertar_registro. PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM mostrar_datos. insertar_registro. modificar_registro. INSERT TABLE my_customers. *------------------------------------------------------------------*MODIFICACION *------------------------------------------------------------------FORM modificar_registro. MODIFY my_customers INDEX sy-tabix. TABLES: customers. IF sy-subrc NE 0. WRITE: / 'Ya existe dicho registro'. DELETE my_customers WHERE id = '12'. DATA my_customers LIKE customers OCCURS 10 WITH HEADER LINE. ELSE. ENDIF. ENDFORM. ENDFORM. ELSE. WRITE: / my_customers-id. READ TABLE my_customers WITH KEY id = '12'. mostrar_datos. *------------------------------------------------------------------*------------------------------------------------------------------*ALTA *------------------------------------------------------------------FORM insertar_registro. SELECT * FROM customers INTO TABLE my_customers. LOOP AT my_customers. my_customers-city = 'Mar del plata'. WRITE: / 'Registro modificado!'. IF sy-subrc EQ 0. my_customers-name = 'Bart Simpson modificado'. borrar_registro.

ENDIF. customers-id.WRITE: / 'No existe dicho registro. APPEND all_customers. PERFORM insert_forma3. PERFORM update_forma1. PERFORM insert_forma2. PERFORM update_forma2. ENDIF. TABLES customers. all_customers-id = '32'. ENDFORM. *------------------------------------------------------*INSERTAR FORMA 3 *------------------------------------------------------FORM insert_forma3. WRITE: / 'No se pudieron insertar ciertos datos de la tabla interna'. *------------------------------------------------------*INSERTAR FORMA 1 *------------------------------------------------------FORM insert_forma1. all_customers-name = 'cristiano6'. customers-id = '20'. APPEND all_customers. ENDFORM. DATA my_customers LIKE customers. my_customers-id = '21'. INSERT customers FROM TABLE all_customers ACCEPTING DUPLICATE KEYS. IF sy-subrc <> 0. IF sy-subrc <> 0. PERFORM mostrar_datos. all_customers-id = '33'. No se puede modificar'. customers-name = 'Mike Tyson'. ENDIF. *------------------------------------------------------*INSERTAR FORMA 2 *------------------------------------------------------FORM insert_forma2. *------------------------------------------------------*UPDATE FORMA 1 . my_customers-name = 'James Bond 007'. all_customers-name = 'cristiano7'. all_customers-name = 'cristiano5'. APPEND all_customers. ENDIF. IF sy-subrc <> 0. DATA all_customers LIKE customers OCCURS 100 WITH HEADER LINE. all_customers-id = '34'. my_customers-id. *------------------------------------------------------------------- ABM de Tablas Transaparentes (Altas Bajas y Modificaciones) REPORT ycb06 . PERFORM update_forma3. PERFORM insert_forma1. INSERT INTO customers VALUES my_customers. ENDFORM. WRITE: / 'ya existe el Id: '. ENDFORM. WRITE: / 'ya existe el id: '. INSERT customers.

s_name FOR customers-name. ENDFORM. ENDIF. customers-id = '1'. UPDATE customers. customers-city = 'modificado!'. WRITE customers-id. customers-name. IF sy-subrc <> 0. WRITE: / 'No se encontraron datos que coincidan con p_id'. SELECT * FROM customers WHERE id = p_id. WRITE: / customers-id. WRITE: / customers-id. UPDATE customers SET city = 'City Unknow' WHERE city = space.*------------------------------------------------------FORM update_forma1. customers-city. SKIP. PARAMETERS: p_id LIKE customers-id. ENDFORM. ENDSELECT. . ' customers-city'. customers-name = 'prueba'. ' customers-name'. WRITE 'entry not existing'. SELECT * FROM customers WHERE id IN s_id AND name IN s_name. customers-name. *------------------------------------------------------- Parameters Y Select Options REPORT ycb07 . ENDSELECT. TABLES: customers. *------------------------------------------------------*UPDATE FORMA 3 *------------------------------------------------------FORM update_forma3. ENDFORM. *------------------------------------------------------*MOSTRAR DATOS *------------------------------------------------------FORM mostrar_datos. ULINE. customers-id = '50'. MODIFY customers. SELECT-OPTIONS: s_id FOR customers-id. customers-city = sy-datum. SELECT * FROM customers. ENDFORM. SKIP. DATA parameter_lenght TYPE i. ENDIF. *------------------------------------------------------*UPDATE FORMA 2 *------------------------------------------------------FORM update_forma2. IF sy-subrc <> 0. ENDSELECT. WRITE: / 'customers-id'.

TABLES: t000. * Imprime en pantalla la salida del programa invocado. SELECT * FROM t000 INTO TABLE my_t000. EXPORT my_t000 TO MEMORY ID 'ZCBMEM01'. CALL FUNCTION 'LIST_FROM_MEMORY' TABLES listobject = ti_abaplist EXCEPTIONS not_found = 1 OTHERS = 2. WRITE / 'Esto es 08 y voy a invocar a 09'. Luego retorna. *-DATA DECLARATION-----------------------------------------------------* Tabla interna donde se guardará la lista. *submit ycb09 using selection-set 'ZCB02'. . *submit ycb09 using selection-set 'ZCB02' via selection-screen. * y haciendo que la salida del programa invocado. en vez de imprimirse. Ejemplo 2 Programa que Exporta REPORT ycb08 . * se guarde en memoria. pasandole los parámetros de selección. WRITE: / 'Ya volvió del programa invocado!'. SUBMIT ycb09 USING SELECTION-SET 'ZCB02' AND RETURN. * Trae los datos de memoria y los guarda en una tabla interna. *-MAIN PROCESSING SECTION----------------------------------------------* Invoca a un programa.Submit y Exports y programa Invocado por Submit y exports Ejemplo1 Submit REPORT ycb_prueba47 . SUBMIT ycb_prueba44 WITH s_idoc-low = '123' EXPORTING LIST TO MEMORY AND RETURN. * Esta tabla no es legible. CALL FUNCTION 'WRITE_LIST' * EXPORTING * WRITE_ONLY = 'X' TABLES listobject = ti_abaplist EXCEPTIONS empty_list =1 OTHERS = 2. DATA: ti_abaplist LIKE abaplist OCCURS 0 WITH HEADER LINE. DATA: my_t000 LIKE t000 OCCURS 10 WITH HEADER LINE.

DATA: cadena(100) TYPE c OCCURS 0 WITH HEADER LINE. TABLES: customers. Esto es porque utiliza el parámetro AND RETURN. SELECT * FROM customers WHERE id IN s_id. *Obtiene los datos importados de la memoria. WRITE / my_t000-mandt. y vuelve. utiliza WITH CAMPO_PARAM = 'VALOR' FUNCTION ycb01. DATA: my_t000 LIKE t000 OCCURS 10 WITH HEADER LINE. .Programa que Importa. LOOP AT my_t000. REPORT ycb09 . WRITE: / customers-id. customers-name. *"---------------------------------------------------------------------*"*"Local interface: *" IMPORTING *" VALUE(CADENA2) TYPE CHAR100 OPTIONAL *" EXPORTING *" VALUE(RETURN_DESC) TYPE CHAR200 *"---------------------------------------------------------------------* Tabla interna usada para recibir los datos de memoria. WRITE: / '----------------------------'. Esto es porque utiliza el parametro EXPORTING LIST TO MEMORY Le pasa los paramtros de seleccion al reporte. SKIP. WRITE: / '----------------------------'.t000. Para hacer esto. ENDLOOP. Si el reporte tenía salida por pantalla. IMPORT cadena FROM MEMORY ID 'ZBCS_MEM01'. ENDSELECT. WRITE: / 'Estos son los datos recibidos con el import'. y vuelve a la funcion. SELECT-OPTIONS: s_id FOR customers-id. Variante para prog. IMPORT my_t000 FROM MEMORY ID 'ZCBMEM01'. no la muestra. SKIP 2. 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. WRITE: / 'Esto es 09'. *IMPORTANTE: la variable a importar se debe llamar igual a la exportada. *Submite el reporte con un parametro de selección. SUBMIT ycb03 WITH p_id = 'caso1' EXPORTING LIST TO MEMORY AND RETURN.

*------------------------------------------------------------------REPORT ycb03 . *Una vez ejecutado el reporte. se puede seleccionar lineas AT LINE-SELECTION. ENDFUNCTION. EXPORT cadena TO MEMORY ID 'ZBCS_MEM01'. SELECT * FROM customers. LOOP AT cadena. WRITE: / 'Se finalizó'. *En la pantalla de seleccion aparece un Frame(Marco) que contiene el PARAMETER y el select option. SELECT-OPTIONS s_id FOR customers-id. cadena = '-caso1 1!-'. SELECTION-SCREEN BEGIN OF BLOCK uno WITH FRAME TITLE text-001. WRITE: / 'UNAME'. ENDLOOP. sy-dynnr. sy-uname. APPEND cadena. *-------------------------------------------------------START-OF-SELECTION. TABLES: customers. REPORT ycb10 . * Dependiendo del valor del parametro. PARAMETERS: p_id LIKE customers-id. cadena = '-caso1 2!-'. SELECTION-SCREEN COMMENT 10(20) text-001 FOR FIELD parm. inserta distintos datos en la * tabla interna. *Exporta la tabla interna a memoria. ELSE. CONCATENATE return_desc cadena INTO return_desc. sy-repid. WRITE: ': '. ENDSELECT. WRITE: / 'repid: '. DATA: cadena(100) TYPE c OCCURS 0 WITH HEADER LINE.*Muestra los datos importados. Frame y At Line seleccion. ENDIF. . Seleccion Sreen para frame de Comentarios SELECTION-SCREEN BEGIN OF LINE. customers-name. PARAMETERS: p_id TYPE char10. SELECTION-SCREEN END OF BLOCK uno. WRITE: / 'Se seleccionó una linea'. cadena = '-caso no 1!-'. WRITE: / 'sy-dynnr'. IF p_id EQ 'CASO1'. APPEND cadena. WRITE: / customers-id. APPEND cadena. sy-lilli.

Validaciones. PARAMETERS parm LIKE saplane-planetype. SELECTION-SCREEN END OF LINE. dsn2(50) VALUE '\\s000sad\interfaces\cristian\prueba. name LIKE customers-name. *perform escritura_archivo_plano. PERFORM lectura_con_ws_upload. ON SIRVE PARA VALIDAR QUE LA ENTRADA DE DATOS CUMPLA CIERTAS CONDICIONES ANTES QUE EL PROGRAMA SE EJECUTE. DATA: dsn(50) VALUE '\\s000sad\interfaces\cristian\archivo. Manejo de Archivos Archivo de Textos Trx: AL11 para ver los directorios al que tienen acceso sap REPORT ycb11 . *perform lectura_archivo_plano. At-selección Screen. *perform lectura_archivo_binario. END-OF-SELECTION. *perform lectura_archivo_binario. MESSAGE e398 WITH 'Error en el número.SELECTION-SCREEN POSITION POS_high. PARAMETERS: campo1(10) TYPE c. *perform escritura_archivo_binario. IF campo1 = '1'. START-OF-SELECTION. KEY-WORD: AT SELECTION-SCREEN. ENDIF.txt'.'. DATA: BEGIN OF rec.txt'. WRITE:/ 'Bien!'. record(80). REPORT zcbprueba04 MESSAGE-ID 00. PERO LO BUENO DE PONERLO ACA ES QUE NO SE PERMITE CONTINUAR HASTA QUE LA ENTRADA DE DATOS SEA VALIDA. *perform append_archivo_binario. ************************************************************************ *ESCRITURA DE UN ARCHIVO . ADEMAS PERO EL PROGRAMA NO CORTA ABRUPTAMENTE COMO PASARIA SI SE MUESTRA UN MENSAJE DE ERROR DENTRO DEL PROGRAMA. OBS: ESTAS VALIDACIONES SE PODRIAN HACER DENTRO DEL PROGRAMA. TABLES: customers. AT SELECTION-SCREEN ON campo1. END OF rec.

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

ENDSELECT.Planilla de calculo (Xls) REPORT zexcelaitab. . IF sy-subrc <> 0. DATA: zwfeld(19). *Si no lo puedo abrir informo el error y termino el programa. INCLUDE STRUCTURE alsmex_tabline. ENDIF. value_0001(50). o se la PC local. value_0003(50). . WRITE: / 'No se pudo abrir el archivo: '. DATA: END OF data_tab. ENDFORM. ENDFORM. ENDLOOP. DATA: BEGIN OF it_entrada OCCURS 0. END OF it_entrada. ************************************************************************ * LECTURA DE UN ARCHIVO CON WS_UPLOAD * SIRVE PARA ARCHIVOS LOCALES (presentation server). DATA: END OF iexcel. DATA: BEGIN OF iexcel OCCURS 0. WRITE / it_entrada-campo. DATA: tind(4) TYPE n. value_0100(50). value_0004(50). ************************************************************************ FORM lectura_con_ws_upload. LOOP AT it_entrada. DATA p_file LIKE rlgrap-filename VALUE 'c:\archivo. campo(80) TYPE c. 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.txt'. : : value_0099(50).TRANSFER rec TO dsn2. CLOSE DATASET dsn2. * No of columns DATA: BEGIN OF data_tab OCCURS 0. TABLES: alsmex_tabline. value_0005(50). value_0002(50). p_file.

ENDLOOP. noheader AS CHECKBOX. data_tab-value_0002. 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. 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 . data_tab-value_0004. ELSE. IF noheader = 'X' AND iexcel-row = 1. CONTINUE. WRITE: / 'EXCEL UPLOAD FAILED '. <fs1> = iexcel-value. CONCATENATE 'DATA_TAB-VALUE_' tind INTO zwfeld. MOVE p_filen TO l_filename_uc. SORT iexcel BY row col. data: l_filename type i. sy-subrc. AT END OF row. filenm. CLEAR data_tab. PARAMETERS: filenm LIKE rlgrap-filename MEMORY ID m01. ASSIGN (zwfeld) TO <fs1>. ENDAT. LOOP AT iexcel.FIELD-SYMBOLS: <fs1>. WRITE:/ 'data_tab '. ENDIF. tind = iexcel-col. DATA: l_filename_uc TYPE string. ENDIF Generar / Download Generar Txt o Cualquier Archivo de Texto. data_tab-value_0003. IF sy-subrc <> 0. data_tab-value_0001. APPEND data_tab.

Ejecutar Archivos externos CALL FUNCTION 'WS_EXECUTE' EXPORTING program = 'wordpad' commandline = 'c:archivo1. CALL METHOD cl_gui_frontend_services=>gui_download EXPORTING bin_filesize = l_filename filename = l_filename_uc filetype = 'ASC' replacement = '#' changing data_tab = t_outtab[]. DATA: l_filename_uc TYPE string..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.rtf' EXCEPTIONS frontend_error =1 no_batch =2 prog_not_found =3 illegal_option =4 gui_refuse_execute = 5 OTHERS = 6. *FILETYPE: "ASC. DATA: l_filename TYPE i. MOVE p_archi TO l_filename_uc. .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.

ln_semana. CALL FUNCTION 'DATE_COMPUTE_DAY' EXPORTING date = p_date IMPORTING day = ln_dia_semana. customers-id = p_id. ln_semana LIKE scal-week. ENDFORM. WRITE: / 'Registro insertado'. ENDIF. ln_dia_semana. WRITE: / 'El dia de la semana es: '. PERFORM insert_customers. START-OF-SELECTION. customers-name = p_name. customers-city = p_city. WRITE: / 'Ya existe el Id: '. IF sy-subrc <> 0. CALL FUNCTION 'DATE_GET_WEEK' EXPORTING date = p_date IMPORTING week = ln_semana. WRITE: / 'Recordar que en SAP los días empiezan los lunes'. *------------------------------------------------------*INSERTAR FORMA 1 * *INSERTA UN REGISTRO EN LA TABLA CUSTOMERS. *OBTIENE LOS DATOS DEL PARAMETERS *------------------------------------------------------FORM insert_customers. PARAMETERS p_date LIKE scal-date. Funciones SAP Vanilla REPORT ycb15. customers-id. START-OF-SELECTION. INSERT customers. ELSE. * EXCEPTIONS * DATE_INVALID = 1 * OTHERS =2 WRITE: / 'La semana es: '. p_name LIKE customers-name OBLIGATORY. p_tel LIKE customers-telephone. DATA: ln_dia_semana LIKE scal-indicator. p_city LIKE customers-city. TABLES: customers. customers-telephone = p_tel.Insertar Un registro en tabla Transparente REPORT ycb14 . ULINE. . PARAMETERS: p_id LIKE customers-id OBLIGATORY.

De esta forma digamos que * el fields-symbol "sabe" que referencia a un objeto. . AT SELECTION-SCREEN ON p_numero. * Imprime la variable apuntada por el field-symbol. MESSAGE e001(zficomm) WITH text-003. * Copia los datos de la tabla de mandantes a una tabla interna. HIDE v_cadena. FIELD-SYMBOLS <f_campo1>. ASSIGN ('t_t000-mandt') TO <f_campo1>.At of Selection-Screen On Field REPORT ycb16 . * Asigna la cadena t_t000-mandt al field-symbol. START-OF-SELECTION. WRITE: / <f_campo1>. v_cadena = 'CADENA2'. START-OF-SELECTION. END-OF-SELECTION. WRITE: v_cadena. * pero entre PARENTESIS. * Recorre la tabla interna. AT LINE-SELECTION. WRITE: / 'hola'. LOOP AT t_t000. v_cadena = 'CADENA1'. WRITE:/ 'hola2'. DATA: v_cadena(20) TYPE c. IF p_numero = 1. HIDE v_cadena. DATA: t_t000 LIKE t000 OCCURS 0 WITH HEADER LINE. PARAMETERS: p_numero TYPE n. WRITE:/ 'hola1'. Field-Symbols Acceso a campos de tablas SQL REPORT z_fsymbol. START-OF-SELECTION. Hipervinculos de Lineas (At Line selection) REPORT zcbprueba3 . SELECT * FROM t000 INTO TABLE t_t000. ENDIF.

FIELD-SYMBOLS: <lga> TYPE p0008-lga01. CONCATENATE 'PT_P0008-LGA' tipn INTO lv_field_lga. WRITE: / sy-uline. ASSIGN (lv_field_ein) TO <ein>. w_it8_rep-ein = <ein>. lv_field_bet(20) TYPE c. w_it8_rep-opk = <opk>. lv_field_anz(20) TYPE c. ASSIGN (lv_field_anz) TO <anz>. <bet> TYPE p0008-bet01. ASSIGN (lv_field_lga) TO <lga>. tipn = sy-index. * Modifica el valor de la variable apuntada por el field-symbol. ASSIGN ('t_t000-mandt') TO <f_campo1>. w_it8_rep-lga = <lga>. ASSIGN (lv_field_bet) TO <bet>. CONCATENATE 'PT_P0008-BET' tipn INTO lv_field_bet. ENDLOOP. <f_campo1> = sy-tabix. DO 20 TIMES. <opk> TYPE p0008-opk01. lv_field_opk(20) TYPE c. lv_field_ein(20) TYPE c.ENDLOOP. CONCATENATE 'PT_P0008-ANZ' tipn INTO lv_field_anz. CONCATENATE 'PT_P0008-EIN' tipn INTO lv_field_ein. <anz> TYPE p0008-anz01. * DO 20 TIMES VARYING w_it8_rep * FROM pt_p0008-lga01 * NEXT pt_p0008-lga02. w_it8_rep-anz = <anz>. Do Varying con Field-Symbols DATA: lv_field_lga(20) TYPE c. <ein> TYPE p0008-ein01. WRITE: / <f_campo1>. ASSIGN (lv_field_opk) TO <opk>. w_it8_rep-bet = <bet>. CONCATENATE 'PT_P0008-OPK' tipn INTO lv_field_opk. LOOP AT t_t000. * sigue igual . tipn(2) TYPE n.

FIELD-SYMBOLS: <fld>. CONCATENATE v_cadena horizontal_tab INTO v_cadena. . ENDDO. WRITE v_salida . DATA: v_cadena(30) TYPE c. <fld> = '09'. ASSIGN v_tab(1) TO <fld> TYPE 'X'. *--------------------*FORMA 3 * *Invocando a una clase * *--------------------CLASS cl_abap_char_utilities DEFINITION LOAD.. ASSIGN v_salida+3(1) TO <fld> TYPE 'X'. DATA: v_tab TYPE c. horizontal_tab. REPORT ycb_prueba07 DATA: v_salida(10) TYPE c. *--------------------*FORMA 2 * *CAMBIA UN CARACTER POR * UN TAB *--------------------v_salida = 'SAPGLOBAL'. START-OF-SELECTION.. <fld> = '09'. WRITE v_salida . Tabs en una cadena (Field symbols) PROGRAMA QUE CONCATENA UN CARACTER TAB AL FINAL DE UNA CADENA Y EN CUALQUIER LUGAR DE UNA CADENA. DATA: vertical_tab(1) TYPE c. . CONCATENATE v_salida v_tab INTO v_salida. horizontal_tab = cl_abap_char_utilities=>horizontal_tab.* . WRITE:/ v_cadena. v_cadena = 'HORIZONTAL_TAB-SAPGLOBAL'. *--------------------*FORMA 1 * *CONCATENA UN TAB ATRAS *--------------------v_salida = 'SAPGLOBAL'.

641 . LOOP AT SCREEN. imprime: cadena: 0000099641 vp: 99. DATA: cadena(10) TYPE c VALUE '105473'. vp NO-GAP.= o ns = "urn:schemas-microsoft-com:office:office" /> ejemplo: data: vp type p decimals 3 value '99. IF screen-group1 = 'VER'. pero sin la coma decimal.cadena. completa primero la parte decimal y luego la parte entera. WRITE:/ 'cadena:'. ENDIF.Para que un Parametro de Seleccion sea Oculto (Password) Hace que un parameter salga oculto como campo de password REPORT z_prueba. MODIFY SCREEN. y este tipo P está definido con decimales. imprime: cadena: 105473 vp: 105. WRITE:/ 'vp:'.641'. WRITE:/ 'vp:'. DATA: vp TYPE p DECIMALS 3. copia todos los digitos a la cadena. DATA: cadena(10) TYPE c. PARAMETERS: p_passwd(8) MODIF ID ver. PACK cadena TO vp.cadena. WRITE:/ 'cadena:'. ENDLOOP. AT SELECTION-SCREEN OUTPUT. Unpack y Pack Si se hace un pack de una cadena numerica a un tipo P. UNPACK vp TO cadena.473 Si se hace un unpack de un tipo P definido con decimales a una cadena. "Comprueba si el ID es = al que queremos que se oculte screen-invisible = '1'. Y completa con CEROS a la izquierda. END-OF-SELECTION. vp NO-GAP.

set extended check on. Esto mantendrá los primeros 13 caracteres de todas las filas siempre visibles. "sin recurso SELECTION-SCREEN COMMENT 50(15) text-008 FOR FIELD r_recno. PARAMETERS: r_recsi RADIOBUTTON GROUP rb1. *codigo. READ TABLE it_lips WITH KEY vbeln = it_ekes-vbeln posnr = it_ekes-vbelp. *codigo. "todos SELECTION-SCREEN COMMENT 15(10) text-006 FOR FIELD r_rectd. LOOP AT it_ekes. *codigo. MODIFY it_ekes TRANSPORTING matnr.... . 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. SELECTION-SCREEN END OF LINE. it_ekes-matnr = it_lips-matnr. ENDIF.Cómo desactivar el chequeo sintántico set extended check off. 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. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) text-005. Manejar Radio Buttons y al lado del otro. For all Entries IF sy-subrc = 0. "con recurso SELECTION-SCREEN COMMENT 30(15) text-007 FOR FIELD r_recsi. PARAMETERS: r_rectd RADIOBUTTON GROUP rb1. ENDLOOP.. PARAMETERS: r_recno RADIOBUTTON GROUP rb1. ENDIF.

si hay algún tipo de error de SQL (que generalmente arroja un dump)… manejo la excepción con un mensaje de advertencia. DATA: x_value(15) TYPE c. 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). x_value. IF sy-subrc = 0. CATCH CX_SY_DYNAMIC_OSQL_ERROR. ENDIF. TRY-CATCH sirve para el manejo de errores y excepciones. TRY. Para saber como llenar los campos. Esto generalmente lo usamos en formularios para mostrar textos de cabecera o de posición por ejemplo.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. 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. Y nos puede ser muy útil para evitar los odiosos Short Dumps. 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. Leer Textos en SAP Para poder leer los campos de texto se usa la función read_text_inline. “en este ejemplo imprimimos por pantalla el resultado write:/ ‘output value ‘. vamos al lugar donde cargamos el texto: . REPORT zcalculadora. MESSAGE ‘Error al actualizar la tabla ZPROYECTOS’ TYPE ‘I’. ENDTRY. INSERT INTO ZPROYECTOS VALUES WA_ZPROYEC.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. it_inline TYPE TABLE OF it_lin. etc) en uno o más programas. . it_lines TYPE TABLE OF it_lin. Completar Ceros a la Izquierda de una Variable * Función que saca los ceros a la izquierda de una variable CALL FUNCTION ‘conversion_exit_alpha_output’ EXPORTING input = vg_variable IMPORTING output = vg_variable. 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. sentencias. vg_name LIKE thead-tdname.Una vez ahí clickeamos en el menú Pasar a —> Cabecera… VG_INLINE suele tener el valor 1 (VG_INLINE = ‘1′. vg_id LIKE thead-tdid.) El código que tenemos que agregar es: DATA: vg_inline TYPE char1. * 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. Además nos listará la cantidad de ocurrencias. ENDIF. mensajes. vg_lang LIKE thead-tdspras. vg_obj LIKE thead-tdobject. IF sy-subrc <> 0.

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

Sign up to vote on this title
UsefulNot useful