Вы находитесь на странице: 1из 26

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 Cmo desactivar el chequeo sintntico 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

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.

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.'.

*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.

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.

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 PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM mostrar_datos. insertar_registro. mostrar_datos. insertar_registro. mostrar_datos. modificar_registro. mostrar_datos. borrar_registro. 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.

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

*------------------------------------------------------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.

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 parmetros de seleccin, * y haciendo que la salida del programa invocado, en vez de imprimirse, * se guarde en memoria. Luego retorna. SUBMIT ycb_prueba44 WITH s_idoc-low = '123' EXPORTING LIST TO MEMORY AND 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!'.

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 parmetro AND RETURN. Si el reporte tena 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 seleccin, 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'.

*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 el PARAMETER 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 lineas AT 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.

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

At-seleccin Screen.
KEY-WORD: AT SELECTION-SCREEN, Validaciones, ON

SIRVE PARA VALIDAR QUE LA ENTRADA DE DATOS CUMPLA CIERTAS CONDICIONES ANTES 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 nmero.'. 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

************************************************************************ 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.

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 columns DATA: 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).

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

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_download EXPORTING 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.

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 das 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.

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>.

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

* ... 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. .

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: 105473 vp: 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: 0000099641 vp: 99,641

Cmo desactivar el chequeo sintntico


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. "todos SELECTION-SCREEN COMMENT 15(10) text-006 FOR FIELD r_rectd. PARAMETERS: r_recsi RADIOBUTTON GROUP rb1. "con recurso SELECTION-SCREEN COMMENT 30(15) text-007 FOR FIELD r_recsi. PARAMETERS: r_recno RADIOBUTTON GROUP rb1. "sin recurso SELECTION-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.

Calculadora el Pop-UP
El siguiente cdigo nos generar una calculadora en una ventana (POP-UP). La funcin FITRV_CALCULATOR nos devolver en la variable X_VALUE el resultado del clculo 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 resultado write:/ output value , x_value. ENDIF.

Try-Catch en ABAP
El otro da viendo la documentacin 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 algn tipo de error de SQL (que generalmente arroja un dump) manejo la excepcin 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 funcin read_text_inline. Esto generalmente lo usamos en formularios para mostrar textos de cabecera o de posicin por ejemplo. Para saber como llenar los campos, vamos al lugar donde cargamos el texto:

Una vez ah clickeamos en el men Pasar a > Cabecera

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

El cdigo 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 ms programas. Adems nos listar la cantidad de ocurrencias.

Completar Ceros a la Izquierda de una Variable


* Funcin que saca los ceros a la izquierda de una variable CALL FUNCTION conversion_exit_alpha_output EXPORTING input = vg_variable IMPORTING output = vg_variable.

* Funcin que completa con ceros a la izquierda de una variable CALL FUNCTION conversion_exit_alpha_input EXPORTING input = vg_variable IMPORTING output = vg_variable.

Вам также может понравиться