Grupo de funciones EPSF.
DATA: gt_itab TYPE STANDARD TABLE OF char2048.
DATA: gs_itab TYPE char2048.
*&---------------------------------------------------------------------*
*& Form recuperar_datos_fichero_s
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM recuperar_datos_fichero_s.
DATA: l_filename TYPE string.
l_filename = p_path_o.
REFRESH gt_itab.
OPEN DATASET l_filename FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
DO.
CLEAR: gs_itab.
READ DATASET l_filename INTO gs_itab.
IF sy-subrc NE 0.
EXIT.
ELSE.
APPEND gs_itab TO gt_itab.
ENDIF.
ENDDO.
ELSE.
g_error = 'X'.
MESSAGE i000(zmm) WITH 'Error al abrir fichero:'
'No existe fichero'
'l_filename'.
ENDIF.
ENDFORM. "recuperar_datos_fichero_s
*&---------------------------------------------------------------------*
*& Form recuperar_datos_fichero
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM recuperar_datos_fichero_l.
DATA: l_filename TYPE string.
l_filename = p_path_o.
REFRESH gt_itab.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_filename
CHANGING
data_tab = gt_itab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
g_error = 'X'.
MESSAGE ID sy-msgid
TYPE 'I' "sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "recuperar_datos_fichero
*&---------------------------------------------------------------------*
*& Form guardar_datos_fichero
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM guardar_datos_fichero_s.
DATA: l_filename TYPE string.
l_filename = p_path_d.
OPEN DATASET l_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
LOOP AT gt_itab INTO gs_itab.
TRANSFER gs_itab TO l_filename.
ENDLOOP.
CLOSE DATASET l_filename.
ELSE.
g_error = 'X'.
MESSAGE i000(zmm) WITH 'Error al crear fichero'
'l_filename'.
ENDIF.
ENDFORM. "guardar_datos_fichero_L
*&---------------------------------------------------------------------*
*& Form guardar_datos_fichero_L
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM guardar_datos_fichero_l.
DATA: l_filename TYPE string.
l_filename = p_path_d.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = l_filename
filetype = 'ASC'
CHANGING
data_tab = gt_itab
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
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
IF sy-subrc <> 0.
g_error = 'X'.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "guardar_datos_fichero
jueves, diciembre 31, 2009
lunes, noviembre 30, 2009
PDF - Report conversión orden spool y PDF
Existe el report standard para pasar órdenes de spool a PDF:
- RSTXPDFT4.
- RSTXPDFT4.
viernes, noviembre 13, 2009
FS - Field-Symbols
Necesarios para recuperar datos de variables no accesibles en modo local.
FIELD-SYMBOLS: TYPE docubatch_data_s.
FIELD-SYMBOLS: TYPE docubatch_data_t.
DATA: l_wa_docubatch_com TYPE docubatch_screen_fields.
DATA: l_nombre_campo(100).
DATA: l_charg TYPE charg_d.
* Tabla sin cabecera, si tuviera cabecera habría que acceder por GT_DATA[].
l_nombre_campo = '(SAPLVBDOCUBATCH_DM)GT_DATA'.
ASSIGN (l_nombre_campo) TO.
l_subrc = sy-subrc.
*********
* Tabla *
*********
READ TABLE ASSIGNING
WITH KEY matnr = l_wa_mseg-matnr.
************************************************
* Tabla que contiene un campo que es una tabla *
************************************************
IF sy-subrc EQ 0.
CLEAR: l_wa_docubatch_com.
READ TABLE-t_docubatches INDEX 2
INTO l_wa_docubatch_com.
IF sy-subrc EQ 0.
l_charg = l_wa_docubatch_com-docubatch_charg.
ENDIF.
ENDIF.
FIELD-SYMBOLS:
FIELD-SYMBOLS:
DATA: l_wa_docubatch_com TYPE docubatch_screen_fields.
DATA: l_nombre_campo(100).
DATA: l_charg TYPE charg_d.
* Tabla sin cabecera, si tuviera cabecera habría que acceder por GT_DATA[].
l_nombre_campo = '(SAPLVBDOCUBATCH_DM)GT_DATA'.
ASSIGN (l_nombre_campo) TO
l_subrc = sy-subrc.
*********
* Tabla *
*********
READ TABLE
WITH KEY matnr = l_wa_mseg-matnr.
************************************************
* Tabla que contiene un campo que es una tabla *
************************************************
IF sy-subrc EQ 0.
CLEAR: l_wa_docubatch_com.
READ TABLE
INTO l_wa_docubatch_com.
IF sy-subrc EQ 0.
l_charg = l_wa_docubatch_com-docubatch_charg.
ENDIF.
ENDIF.
martes, noviembre 10, 2009
FICHEROS - Trabajar con nombres de rutas y ficheros
¿Qué tenemos?
C:\CARPETA1\CARPETA2\FICHERO.EXE
¿Qué queremos?
valor1 = C:\CARPETA1\CARPETA2\
valor2 = FICHERO.EXE
¿Además de la sentencia ABAP split que podemos utilizar?
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = p_ruta_completa " C:\CARPETA1\CARPETA2\FICHERO.EXE
IMPORTING
stripped_name = v_exe " FICHERO.EXE
file_path = v_cd. " C:\CARPETA1\CARPETA2\
C:\CARPETA1\CARPETA2\FICHERO.EXE
¿Qué queremos?
valor1 = C:\CARPETA1\CARPETA2\
valor2 = FICHERO.EXE
¿Además de la sentencia ABAP split que podemos utilizar?
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = p_ruta_completa " C:\CARPETA1\CARPETA2\FICHERO.EXE
IMPORTING
stripped_name = v_exe " FICHERO.EXE
file_path = v_cd. " C:\CARPETA1\CARPETA2\
miércoles, noviembre 04, 2009
FICHEROS - Listar ficheros de directorio local y del servidor SAP
Transacciones para trabajar con fichero del servidor SAP AL11, N2UX, CG3Y y CG3Z.
*****
PARAMETER: p_fdir TYPE pfeflnamel DEFAULT
*'/usr/sap/tmp'.
'C:\pruebas\xml'.
PARAMETER: p_local AS CHECKBOX DEFAULT 'X'.
DATA: BEGIN OF it_filedir OCCURS 10.
INCLUDE STRUCTURE salfldir.
DATA: END OF it_filedir.
DATA: l_it_file_table TYPE TABLE OF sdokpath WITH HEADER LINE.
DATA: l_it_dir_table TYPE TABLE OF sdokpath.
************************************************************************
START-OF-SELECTION.
************************************************************************
IF p_local EQ 'X'.
CALL FUNCTION 'TMP_GUI_DIRECTORY_LIST_FILES'
EXPORTING
directory = p_fdir
filter = '*.XML'
* IMPORTING
* FILE_COUNT =
* DIR_COUNT =
TABLES
file_table = l_it_file_table
dir_table = l_it_dir_table
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
LOOP AT l_it_file_table.
WRITE: / l_it_file_table-pathname.
ENDLOOP.
ELSE.
* Get Current Directory Listing for OUT Dir
* OJO al probar el MF directamente en la SE37 (convierte a mayúsculas).
CALL FUNCTION 'RZL_READ_DIR_LOCAL'
EXPORTING
name = p_fdir
TABLES
file_tbl = it_filedir.
* List of files are contained within table it_filedir
LOOP AT it_filedir.
WRITE: / it_filedir-name.
ENDLOOP.
ENDIF.
*****
PARAMETER: p_fdir TYPE pfeflnamel DEFAULT
*'/usr/sap/tmp'.
'C:\pruebas\xml'.
PARAMETER: p_local AS CHECKBOX DEFAULT 'X'.
DATA: BEGIN OF it_filedir OCCURS 10.
INCLUDE STRUCTURE salfldir.
DATA: END OF it_filedir.
DATA: l_it_file_table TYPE TABLE OF sdokpath WITH HEADER LINE.
DATA: l_it_dir_table TYPE TABLE OF sdokpath.
************************************************************************
START-OF-SELECTION.
************************************************************************
IF p_local EQ 'X'.
CALL FUNCTION 'TMP_GUI_DIRECTORY_LIST_FILES'
EXPORTING
directory = p_fdir
filter = '*.XML'
* IMPORTING
* FILE_COUNT =
* DIR_COUNT =
TABLES
file_table = l_it_file_table
dir_table = l_it_dir_table
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
LOOP AT l_it_file_table.
WRITE: / l_it_file_table-pathname.
ENDLOOP.
ELSE.
* Get Current Directory Listing for OUT Dir
* OJO al probar el MF directamente en la SE37 (convierte a mayúsculas).
CALL FUNCTION 'RZL_READ_DIR_LOCAL'
EXPORTING
name = p_fdir
TABLES
file_tbl = it_filedir.
* List of files are contained within table it_filedir
LOOP AT it_filedir.
WRITE: / it_filedir-name.
ENDLOOP.
ENDIF.
miércoles, octubre 28, 2009
Trabajar con decimales
Puede interesar redondear cantidades. Para ello hay dos opciones:
- Utitlizar variables de tipo entero, que realizan automáticamente la conversión.
- Utilizar las sentencias de ABAP, 'floor' y 'ceil'.
DATOS:
Cantidad 1 1,200
Cantidad 2 1,600
RESULTADO:
Variable tipo "I" cantidad 1 = 1 ( parte decimal < 0,50 )
Variable tipo "I" cantidad 2 = 2 ( parte decimal > 0,50 )
Sentencia "Ceil" cantidad 1 = 2,000
Sentencia "Floor" cantidad 1 = 1,000
- Utitlizar variables de tipo entero, que realizan automáticamente la conversión.
- Utilizar las sentencias de ABAP, 'floor' y 'ceil'.
DATOS:
Cantidad 1 1,200
Cantidad 2 1,600
RESULTADO:
Variable tipo "I" cantidad 1 = 1 ( parte decimal < 0,50 )
Variable tipo "I" cantidad 2 = 2 ( parte decimal > 0,50 )
Sentencia "Ceil" cantidad 1 = 2,000
Sentencia "Floor" cantidad 1 = 1,000
lunes, octubre 05, 2009
MF - Trabajar con importes
Tenemos un fichero con importes y queremos grabarlo en SAP (separador decimales = ',')
Definir variables de tipo char de tamaño = longitud+decimales+1 del punto
SAP guardar los importes con el separador de importe '.'
Utilizar el MF:
data: l_importe_c(28).
data: l_importe type BAPIWRBTR.
CALL FUNCTION 'MOVE_CHAR_TO_NUM'
EXPORTING
chr = l_importe_c
IMPORTING
NUM = l_importe
EXCEPTIONS
CONVT_NO_NUMBER = 1
CONVT_OVERFLOW = 2
OTHERS = 3.
Definir variables de tipo char de tamaño = longitud+decimales+1 del punto
SAP guardar los importes con el separador de importe '.'
Utilizar el MF:
data: l_importe_c(28).
data: l_importe type BAPIWRBTR.
CALL FUNCTION 'MOVE_CHAR_TO_NUM'
EXPORTING
chr = l_importe_c
IMPORTING
NUM = l_importe
EXCEPTIONS
CONVT_NO_NUMBER = 1
CONVT_OVERFLOW = 2
OTHERS = 3.
martes, septiembre 15, 2009
SAPSCRIPT - Llamar a una rutina
Código de SAPSCRIPT:
/: PERFORM RECUPERAR_DATOS_PAGOS IN PROGRAM ZPROGRAMA
/: USING &VAR1&
/: USING &VAR2&
/: CHANGING &VAR3&
/: ENDPERFORM
REPORT zfi_include.
*&---------------------------------------------------------------------*
*& Form recuperar_codigo_nacional
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IN_TAB text
* -->OUT_TAB text
*----------------------------------------------------------------------*
FORM recuperar_datos_pagos TABLES in_tab STRUCTURE itcsy
out_tab STRUCTURE itcsy.
DATA: l_wa_in_tab TYPE itcsy.
DATA: l_wa_out_tab TYPE itcsy.
DATA: l_var1 TYPE reguh-laufd.
DATA: l_var2 TYPE reguh-laufi.
DATA: l_var3 TYPE reguh-rwbtr.
* Recuperar valores SAPSCRIPT
CLEAR: l_wa_in_tab.
READ TABLE in_tab WITH KEY name = 'VAR1'
INTO l_wa_in_tab.
IF sy-subrc EQ 0.
l_var1 = l_wa_in_tab-value.
ENDIF.
CLEAR: l_wa_in_tab.
READ TABLE in_tab WITH KEY name = 'VAR2'
INTO l_wa_in_tab.
IF sy-subrc EQ 0.
l_var2 = l_wa_in_tab-value.
ENDIF.
* Modificar valores SAPSCRIPT
l_var3 = l_var1 + l_var2.
l_wa_out_tab-value = l_var3.
l_wa_out_tab-name = 'VAR3'.
MODIFY out_tab FROM l_wa_out_tab
TRANSPORTING value
WHERE name EQ 'VAR3'.
ENDFORM. "recuperar_datos_pagos
/: PERFORM RECUPERAR_DATOS_PAGOS IN PROGRAM ZPROGRAMA
/: USING &VAR1&
/: USING &VAR2&
/: CHANGING &VAR3&
/: ENDPERFORM
REPORT zfi_include.
*&---------------------------------------------------------------------*
*& Form recuperar_codigo_nacional
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IN_TAB text
* -->OUT_TAB text
*----------------------------------------------------------------------*
FORM recuperar_datos_pagos TABLES in_tab STRUCTURE itcsy
out_tab STRUCTURE itcsy.
DATA: l_wa_in_tab TYPE itcsy.
DATA: l_wa_out_tab TYPE itcsy.
DATA: l_var1 TYPE reguh-laufd.
DATA: l_var2 TYPE reguh-laufi.
DATA: l_var3 TYPE reguh-rwbtr.
* Recuperar valores SAPSCRIPT
CLEAR: l_wa_in_tab.
READ TABLE in_tab WITH KEY name = 'VAR1'
INTO l_wa_in_tab.
IF sy-subrc EQ 0.
l_var1 = l_wa_in_tab-value.
ENDIF.
CLEAR: l_wa_in_tab.
READ TABLE in_tab WITH KEY name = 'VAR2'
INTO l_wa_in_tab.
IF sy-subrc EQ 0.
l_var2 = l_wa_in_tab-value.
ENDIF.
* Modificar valores SAPSCRIPT
l_var3 = l_var1 + l_var2.
l_wa_out_tab-value = l_var3.
l_wa_out_tab-name = 'VAR3'.
MODIFY out_tab FROM l_wa_out_tab
TRANSPORTING value
WHERE name EQ 'VAR3'.
ENDFORM. "recuperar_datos_pagos
viernes, septiembre 04, 2009
SAPSCRIPT - Varios
Varias temas sobre SAPSCRIPT:
- Linea muy larga, se ponde '=' para que mantenga mismo párrafo.
- Mostrar texto sólo cuando una variable esta informada, &'TEXTO 'VARIABLE&.
- Eliminar espacios cantidades, &VARIABLE(C)&.
- Para suprimir el reconocimiento de un carácter especial, use <(>...<)>.
- Variables de paginación:
DEFINE &PAGINA_ACTUAL& = &PAGE(2)&
DEFINE &TOTAL_PAGINA& = &SAPSCRIPT-FORMPAGES(2)&
IF &PAGINA_ACTUAL(C)& EQ &TOTAL_PAGINA(C)&
- Linea muy larga, se ponde '=' para que mantenga mismo párrafo.
- Mostrar texto sólo cuando una variable esta informada, &'TEXTO 'VARIABLE&.
- Eliminar espacios cantidades, &VARIABLE(C)&.
- Para suprimir el reconocimiento de un carácter especial, use <(>...<)>.
- Variables de paginación:
DEFINE &PAGINA_ACTUAL& = &PAGE(2)&
DEFINE &TOTAL_PAGINA& = &SAPSCRIPT-FORMPAGES(2)&
IF &PAGINA_ACTUAL(C)& EQ &TOTAL_PAGINA(C)&
miércoles, julio 22, 2009
SAPSCRIPT - Descargar/Subir formulario SAPSCRIPT
Hay dos programas standard:
- RSTXSCRP. Testeado. Marcar opción "Formato binario de ficher".
- RSTXR3TR.
- RSTXSCRP. Testeado. Marcar opción "Formato binario de ficher".
- RSTXR3TR.
viernes, julio 17, 2009
MF - Módulos de función POPUP
* POPUP_GET_VALUES, se informa tabla y campo que hace referencia (crear matchcode).
* POPUP_GET_VALUES_DB_CHECKED, se informa tabla y campo que hace referenci (crea matchcode) y hace la verificación que exista valor.
* POPUP_TO_CONFIRM, realizar pregunta si/no. Para mostrar texto muy largo se puede un texto dialog mediante la transacción SE61 (tipo DT). Después en la llamada del módulo de función se informa campo DIAGNOSE_OBJECT = 'Z_NOMBRE_TEXTO_DIALOGO'.
Para más información:
http://help.sap.com/saphelp_nw04/helpdata/en/2a/f9fff0493111d182b70000e829fbfe/content.htm
* POPUP_GET_VALUES_DB_CHECKED, se informa tabla y campo que hace referenci (crea matchcode) y hace la verificación que exista valor.
* POPUP_TO_CONFIRM, realizar pregunta si/no. Para mostrar texto muy largo se puede un texto dialog mediante la transacción SE61 (tipo DT). Después en la llamada del módulo de función se informa campo DIAGNOSE_OBJECT = 'Z_NOMBRE_TEXTO_DIALOGO'.
Para más información:
http://help.sap.com/saphelp_nw04/helpdata/en/2a/f9fff0493111d182b70000e829fbfe/content.htm
viernes, abril 03, 2009
Utilizar memoria de SAP
Hay dos operaciones:
- Grabar en memoria, EXPORT l_variable TO MEMORY ID 'ID_MEMORIA'.
- Cargar de memoria, IMPORT l_variable FROM MEMORY ID 'ID_MEMORIA'.
Las dos variables se deben llamar igual y tener la misma estructura.
Variables standard:
- CECO => KOS.
IMPORTANTE: para poder trabajar con variables en memoria es necesario crear en el perfil del usuario (con valor '').
- Grabar en memoria, EXPORT l_variable TO MEMORY ID 'ID_MEMORIA'.
- Cargar de memoria, IMPORT l_variable FROM MEMORY ID 'ID_MEMORIA'.
Las dos variables se deben llamar igual y tener la misma estructura.
Variables standard:
- CECO => KOS.
IMPORTANTE: para poder trabajar con variables en memoria es necesario crear en el perfil del usuario (con valor '').
jueves, febrero 26, 2009
BAPI - Tratar mensajes error
- Utilizar la sentencia MESSAGE y añadir INTO p_variable.
- MF BAPI_MESSAGE_GETDETAIL.
- MF RPY_MESSAGE_COMPOSE.
- MF C14ALD_BAPIRET2_SHOW.
- MF C14Z_MESSAGES_SHOW_AS_POPUP.
- MF BAPI_MESSAGE_GETDETAIL.
- MF RPY_MESSAGE_COMPOSE.
- MF C14ALD_BAPIRET2_SHOW.
- MF C14Z_MESSAGES_SHOW_AS_POPUP.
MESSAGE ID wa-id TYPE wa-type NUMBER wa-number
INTO wa-message
WITH wa-message_v1 wa-message_v2 wa-message_v3 wa-message_v4.
miércoles, enero 21, 2009
DYNPRO - ocultar botones
Al trabajar con dynpro si queremos ocultar botones:
LOOP AT SCREEN
IF screen-name EQ 'Nombre_campo_ocultar'.
screen-output = 1.
screen-input = 0.
screen-invisible = 1.
modify screen.
ENDIF.
ENDLOOP.
Esta parte de código de pone en el PBO si el programa es de tipo PROGRAM o en el evento AT SELECTION-SCREEN OUTPUT si el programa es de tipo REPORT.
LOOP AT SCREEN
IF screen-name EQ 'Nombre_campo_ocultar'.
screen-output = 1.
screen-input = 0.
screen-invisible = 1.
modify screen.
ENDIF.
ENDLOOP.
Esta parte de código de pone en el PBO si el programa es de tipo PROGRAM o en el evento AT SELECTION-SCREEN OUTPUT si el programa es de tipo REPORT.
Suscribirse a:
Entradas (Atom)