PLAN DE PROFESIONALIZACIÓN DE LA ASF PROGRAMA ANUAL DE RUTAS (PAR) 2015 ACL INTERMEDIO (ACL: Audit Command Language) Lenguaje de Comandos de Auditoria Unidad General de Administración Instituto de Capacitación y Desarrollo en Fiscalización Superior Agosto de 2015 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Objetivo.................................................................................................................................... 5 Introducción ............................................................................................................................. 5 La Auditoría Superior de la Federación busca proporcionar herramientas que ayude en el proceso de revisiones diarias de los fiscalizadores de la ASF.................................................. 5 Lección 1: Comandos para el Análisis de datos ....................................................................... 6 Comando estadísticas .......................................................................................................... 6 Reutilización de comandos ................................................................................................... 7 Comando perfil ..................................................................................................................... 9 Comando estratificar ............................................................................................................ 9 Comando clasificar ............................................................................................................. 11 Comando histograma ......................................................................................................... 15 Lección 2: Concentración de datos ........................................................................................ 18 Comando resumir ............................................................................................................... 18 Comando generar tablas cruzadas ..................................................................................... 20 Lección 3: Integridad de datos ............................................................................................... 23 Integridad de la Información ............................................................................................... 23 Manejo de datos errados .................................................................................................... 23 Datos inválidos ................................................................................................................... 23 Comando verificar .............................................................................................................. 23 Análisis de Información Operativa ...................................................................................... 25 Comando examinar secuencia ........................................................................................... 25 Comando faltantes ............................................................................................................. 26 Comando buscar duplicados .............................................................................................. 29 Lección 4: Análisis de datos con fechas ................................................................................. 31 Comparación de fechas ...................................................................................................... 33 Cálculo de días de antigüedad ........................................................................................... 35 Comando antigüedad ......................................................................................................... 37 2 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Lección 5: Manejo de funciones en ACL ................................................................................ 39 Reglas generales funciones ............................................................................................... 39 Funciones matemáticas ...................................................................................................... 40 ABSOLUTE() .................................................................................................................. 40 MAXIMUM() .................................................................................................................... 41 MINIMUM() ..................................................................................................................... 42 ROUND() ........................................................................................................................ 42 Funciones fecha / hora ....................................................................................................... 43 AGE().............................................................................................................................. 43 CTOD() ........................................................................................................................... 44 DATE()............................................................................................................................ 46 TIME( ) ............................................................................................................................ 46 Funciones de conversión .................................................................................................... 47 DEC().............................................................................................................................. 47 STRING() ........................................................................................................................ 48 VALUE() ......................................................................................................................... 49 Funciones de cadena ......................................................................................................... 50 AT()................................................................................................................................. 50 CLEAN() ......................................................................................................................... 51 EXCLUDE() .................................................................................................................... 52 FIND() ............................................................................................................................. 53 INCLUDE()...................................................................................................................... 53 LENGTH( ) ...................................................................................................................... 54 LTRIM( ) ......................................................................................................................... 54 TRIM() ............................................................................................................................ 55 ALLTRIM( ) ..................................................................................................................... 55 3 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación REMOVE( ) ..................................................................................................................... 55 SUBSTRING( )................................................................................................................ 57 UPPER() ......................................................................................................................... 57 Funciones de acceso a bajo nivel ....................................................................................... 58 FILESIZE( ) ..................................................................................................................... 58 FTYPE() .......................................................................................................................... 59 RECLEN( ) ...................................................................................................................... 59 RECNO() ........................................................................................................................ 60 TEST() ............................................................................................................................ 61 Lección 6: Exportar datos ...................................................................................................... 62 Comando exportar a otra aplicación ................................................................................... 62 Exportar Todos los Campos ............................................................................................... 62 Exportar Campos Seleccionados........................................................................................ 64 Bibliografía ............................................................................................................................. 67 4 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Objetivo Aprender las facilidades del software de auditoría ACL para el análisis de datos y el diseño e implementación de pruebas de auditoría. Introducción Este es el segundo curso de la herramienta CAATT (Computer Assisted Audit Tools and Techniques) más ocupada por los auditores a nivel mundial llamada ACL. Después de haber trabajado con la herramienta, es importante aprender nuevas funcionalidades que te ayudarán a agilizar tus procesos de Análisis Electrónico de Datos. Una de las ventajas que tiene el programa de análisis, es que cuentan con funciones internas que nos permiten acelerar o hacer cálculos que con los comandos básicos son difíciles de implementar, pero lo importante es conocer que existen dichas funciones, conocer para que se aplica, y cuáles son las reglas para utilizarlas. La Auditoría Superior de la Federación busca proporcionar herramientas que ayude en el proceso de revisiones diarias de los fiscalizadores de la ASF. 5 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Lección 1: Comandos para el Análisis de datos Comenzaremos el curso con comandos que nos entregarán información estadística de los campos tipo numéricos y de fecha, pero también aprenderemos como podemos realizar concentrados de información, que nos permitan tener un entendimiento general de cómo se comporta una tabla especifica. Comando estadísticas El comando Estadísticas es de gran ayuda porque te ayuda a encontrar anomalías en tu información numérica, y de esta manera facilita tus análisis o fiscalizaciones. Abre la tabla Transabril. Digamos que requieres obtener las estadísticas de los campos Monto y Fecha_Trans Para lograr esto, debes seguir los siguientes pasos: 1. Selecciona Estadísticas de la barra de herramientas con el botón Analizar. Aparecerá la ventana de diálogo Estadísticas. 2. Selecciona los campos que deseas analizar (en este caso, el campo Monto y el campo Fecha_Transaccion) y un clic en Aceptar. El resultado se desplegará en la ventana de resultado. En dicha ventana se podrá ver la siguiente información: 6 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Dar un clic en la Tachuela, para fijar el resultado. Podemos condicionar el comando Estadísticas de igual forma que otros comandos como Contar registros… y Totalizar campos… Reutilización de comandos En la reutilización de comandos abriremos el Log dando un clic en la pestaña correspondiente del navegador del proyecto. El Log nos muestra las acciones y comandos que hemos realizado desde el inicio del proyecto. 7 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Por ejemplo si queremos repetir el comando para los valores positivos mayores que 100 de los montos. Dentro del Log, dar doble clic sobre el comando STATISTICS, esto mostrará el resultado del comando. En la ventana con el resultado, da doble clic sobre la línea del comando STATISTICS ON.... En la ventana del comando, da un clic en el botón Si... Con el cursor en el recuadro de expresión, selecciona Monto del recuadro de campos. Selecciona el operador y teclee 100 (Esto nos permite filtrar los valores positivos menores o igual a 100). Da un clic Aceptar dos veces y se mostrará el siguiente resultado. 8 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Comando perfil Este comando sirve para obtener información relevante de los campos numéricos seleccionados, no es posible ejecutarlo para campos de fecha. La información que nos entrega el comando son: total de dicho campo, valor absoluto, valor mínimo y valor máximo. Estos valores, de forma interna el ACL los almacena en variables para utilizarlos en otros comandos como Estratificar e Histograma, es posible emplear dichas variables. 1. Para acceder selecciona la opción Perfil... del menú Estadístico dentro del menú Analizar. La ventana de diálogo Perfil aparece 2. En la lista de campos del perfil, selecciona el campo deseado (Monto en nuestro caso) y da un clic en el botón Aceptar 3. El resultado será el siguiente Comando estratificar Este comando es muy útil cuando deseamos concentrado por rangos u observar la información numérica de una tabla en forma rápida, pues no se requiere ordenar la tabla ni indexarla. El comando suma los registros cuyos campos numéricos caen en cada uno de los intervalos especificados, los cuales pueden ser fijos o libres, dependiendo de sus necesidades. Imagina que deseas obtener un resumen en 10 intervalos del campo Monto, de la tabla Trans_abril. 1. Debes ir al menú Analizar 9 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 2. Selecciona la opción Estratificar /ó el botón Estratificar. La ventana de diálogo Estratificar aparecerá 3. Selecciona Monto en el combo a Estratificar en...; en Acumular campos..., selecciona Monto Nota que como valor mínimo aparece el valor mínimo del perfil anterior por omisión, lo mismo que en el valor máximo, esto se debe a que usted ya generó estas variables al ejecutar el comando Perfil. El número de intervalos por omisión es 10, pero puedes cambiar el valor si lo deseas, de hecho puedes definir cuáles serán sus rangos en el cuadro de Libre. 4. Da un clic en Aceptar. El resultado se despliega en la ventana de resultado. 10 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Examinando la ventana, observas que, de izquierda a derecha, tienes los rangos que manejaste en ACL (dichos intervalos los calculo automáticamente al dividir el valor total del campo Monto en 10 intervalos), en seguida tienes el número de registros que caen entre dichos rangos para el campo Monto y posteriormente el porcentaje del número de registros con respecto del total de registros. Comando clasificar El comando Clasificar se usa para resumir datos de texto de una tabla rápidamente. Este comando cuenta los registros que caen dentro de cada clase de un campo definido como caracteres y puede acumular los totales de campos numéricos para cada valor diferente. Este comando es similar al comando Estratificar, es decir, la tabla no necesita estar ordenada. Clasificar permite producir una nueva tabla con los datos clasificados, o podemos simplemente ver los resultados en pantalla. Cuando quieres clasificar la tabla Trans_abril sobre el campo Descripción para obtener los totales de montos en cada cliente 1. Presiona el botón 2. Selecciona del combo Clasificar en.., el campo Descripción 11 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 3. En la lista de Campos de subtotales.., selecciona el campo Monto Podemos mandar los resultados a pantalla a través de la ventana del último resultado o bien mandarlos a una tabla, para ello deberá seleccionar en la pestaña Salida, la opción Archivo como salida y teclear el nombre del archivo deseado junto al botón Nombre, en la pestaña de Salida 12 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 13 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Cuando el resultado se manda a pantalla, se tiene la opción de graficar el comando, para lograr esto basta dar un clic sobre la Pestaña de Gráfico que se encuentra en la parte inferior izquierda de la pantalla de resultado 14 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Comando histograma Un histograma es el equivalente gráfico del comando Estratificar que aplica solo a campos numéricos o al comando Clasificar que aplica solo a campos de texto. Ya que el comando Histograma es posible ejecutarlo para campos alfanuméricos o numéricos. ACL despliega gráficamente el número de registros que caen dentro de un valor o categoría. La diferencia es que solo mostrará el número de registros y no calcula los totales, para usarlo: 1. Selecciona la tabla a usar Trans_abril. Ejecuta el comando Perfil del menú Analizar, sobre el campo Monto 2. Selecciona de la barra de herramientas el botón Histograma. La ventana de diálogo aparece 3. En el combo Histograma en… selecciona el campo Monto Nota que de nuevo se toman por defecto el valor de las variables generadas por el comando Perfil. En la pestaña Más, normalmente tiene opciones para configurar, por principio de cuenta el Ámbito nos permite restringir el alcance de que registros queremos analizar, de forma predeterminada siempre será la opción Todos lo que indica que debe tomar toda la tabla o los registros que están filtrados en el momento de ejecución del comando. Estas opciones están en la mayoría de los comandos de ACL. 15 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Además las opciones: Suprimir Otros se refiere a no imprimir datos fuera del mínimo y máximo establecido, solo se activa cuando se ejecuta sobre un campo numérico (existe también en el comando Estratificar) Columnas nos permite establece el número de caracteres a lo ancho que se generarán solo cuando la salida se configura para un archivo de texto (por defecto el valor es de 78) Salto, te permite seleccionar un campo de texto, para que se calcule el comando Histograma, por cada valor diferente del campo seleccionado como Salto 4. Da un clic en el botón Aceptar Si la salida se hace a pantalla se creara una tabla con los datos obtenidos del comando. Obviamente la mejor opción es visualizar el gráfico en la pantalla. 16 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación La salida gráfica que tiene permite filtrar los registros que cumplen los criterios de cada valor graficado. 17 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Lección 2: Concentración de datos Comando resumir El resumir información puede hacerse de dos maneras: Si se está trabajando con tablas pequeñas y sin ordenar, lo más adecuado es usar el comando Clasificar. Por tablas pequeñas se refiere a aquellas que contienen hasta 10,000 clases. Una estimación del espacio requerido es a razón de 2MB de memoria RAM por cada 1,000 clases. O sea que para 10,000 clases se requieren 20 MB de memoria RAM Cuando se trabaja con tablas más grandes, es necesario usar el comando Resumir, en cuyo caso no tenemos ningún límite en cuanto al número de valores de texto o de fechas. Supongamos que queremos obtener un resumen del campo Clase de la tabla Inventario y que los campos que deseamos resumir son Existencia y Valor Mercado. Es decir, deseamos obtener un resumen por clasificación del producto, de la cantidad y del valor en mercado de los productos. 1. Abre la tabla Inventario 2. Selecciona Resumir... del menú Analizar 3. En la lista de campos Resumir sobre..., selecciona Clase y Localidad 4. En la lista de Acumular campos..., selecciona el campo Costo Unitario 18 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 5. En la pestaña Salida, selecciona Archivo y teclea Resumen_Inventario en el recuadro de Nombre... 6. Da un clic Aceptar ACL creará un registro para cada Clase y Localidad diferente con sus campos especificados acumulados. También ACL nos da el número de registros que caen en esa categoría. 19 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Comando generar tablas cruzadas En ACL, existe un comando que nos permite generar un concentrado similar a la tabla dinámica, este comando solo funciona sobre campos de texto y campos numéricos, en su caso requeriremos utilizar funciones para convertir campos de fecha en campos de texto. Las zonas similares a la tabla dinámica en Excel, es Filas, Columnas y Datos. El comando Tabla Cruzada, analiza campos de caracteres colocándolos en filas y columnas. Al crear una Tabla Cruzada de campos de caracteres, se pueden elaborar varios resúmenes, explorar áreas de interés y sumar campos numéricos. Puede utilizar Tabla Cruzada para elaborar resultados en forma de archivo, tabla o gráfico. Similar a las tablas dinámicas en Excel La Tabla Cruzada agrega como última columna el número de registros de una tabla, abre una columna para cada valor diferente de columna, calcula subtotales para los campos numéricos de cada valor de fila de cada valor de columna y totaliza las cantidades en cada valor de columna. Por ejemplo, en la tabla Inventario tiene una columna del Mes_Ejercicio. Se necesita realizar un concentrado por cada valor de Cve_Estacion mostrando en cada columna el monto correspondiente de cada mes de ejercicio diferente. Seguir los pasos que se muestran a continuación: 1. Abre la tabla Inventario 2. En el menú Analizar, selecciona Generar tablas cruzadas... o da un clic en el botón 3. En lo que respecta a Filas... elige Localidad, en Columnas selecciona Clase y acumula el campo Costo Unitario 20 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 4. Da un clic en la pestaña Salida, para generar una tabla de salida la cual se llamará TC_Inventario. Da un clic en Aceptar Este arreglo de la información permite ejecutar comandos sobre las columnas resultantes de manera eficiente. Por ejemplo, el comando Estadística. 1. Ejecuta el comando Estadísticas 2. Ingresa en el botón Estadísticas en.. , debes seleccionar todos los campos con el botón Agregar todos 3. La ventana de resultados de Estadísticas te muestra en el resultado por cada uno de los campos 21 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 22 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Lección 3: Integridad de datos Integridad de la Información Uno de los pasos importantes antes de iniciar el análisis electrónico de datos, es importante verificar que la información no contengan datos inválidos en las tablas o en su caso no tomar en cuenta dichos registros o realizar una revisión física de esos registros. Los datos errados se pueden deber a errores en la captura, o errores al generar el archivo de datos, por lo que es importante saber que existe un comando en el ACL, que te permitirá tener un manejo adecuado antes de iniciar el análisis. Manejo de datos errados En ocasiones es válido utilizar campos calculados utilizando funciones con la finalidad de depurar los datos erróneos, en caso de que se traten de errores bien identificados, pero debemos aclarar que esos campos, NO modificarán al archivo original, y es importante identificar el origen del problema, ya que puede ser una desviación. Abre la tabla Origen_Erroneo, la cual contiene detalles de facturas de productos vendidos. Hay siete campos definidos en esta tabla. Datos inválidos Cada campo tiene asignado un tipo de dato que describe su contenido. Los datos inválidos en un campo son datos que no concuerdan con el tipo de dato asignado al campo. Algunos ejemplos son caracteres no imprimibles en un campo de caracteres, datos no numéricos en un campo numérico, o blancos en un campo tipo PACKED, entre otros. Comando verificar El comando Verificar... utiliza las descripciones en la tabla, como criterio para verificar la validez de los datos en los campos especificados. Vamos a verificar todos los campos de datos definidos en la definición de la tabla reporte_inventario. 23 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 1. Selecciona Verificar... del menú Datos 2. Da un clic en el botón Verificar campos... 3. Da un clic en el botón Agregar todos y un clic en Aceptar y nuevamente en Aceptar ACL reporta 10 errores de validez, en cada una de ellas te muestra el número de registro y el nombre del campo donde se presenta el error. 24 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Análisis de Información Operativa Los comandos que veremos a continuación, solo sirven para bases de datos que cumplen con dos condiciones: cuente con un número consecutivo y dicho consecutivo tenga el control la entidad a fiscalizar. Comando examinar secuencia La información ordenada, es muy útil para identificar datos que se repiten o faltantes o fuera de secuencia, pues nos puede guiar a errores en la tabla, o para simplemente ver si están o no en la forma esperada. El comando Examinar la Secuencia... es muy útil para validar que la información se creó de manera consecutiva y no se “maquillo el archivo”. Abre la tabla reporte_inventario, es un archivo donde vienen importes que se recibieron a diferentes empleados. Selecciona Examinar la secuencia... del menú Analizar. En la ventana de Secuencia en…, selecciona el campo Cust_no. Da un clic en el botón de Aceptar. Cuando revisamos la secuencia es recomendable realizar las siguientes validaciones: El campo que tiene el número del documento Utilizando el número del documento y la fecha de la operación Utilizando la fecha de operación y el número del documento 25 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Comando faltantes Permite identificar la documentación faltante, proporciona las siguientes opciones para mostrar los resultados. Es recomendable ocuparlo solamente con el campo donde viene el número consecutivo. 1. Listar los intervalos faltantes: especifica una lista donde te notifica los intervalos de faltantes en vez de cada elemento faltante. Te muestra una lista de los valores de los campos clave a ambos lados del faltante 2. Elementos faltantes: cuando no sobrepasa el rango establecido. Especifica que la lista de salida mostrará una lista de cada elemento faltante. Si el tamaño de los faltantes es menor o igual que el Límite de elementos, aparecerá una lista con todos los elementos faltantes. Si el faltante es mayor, en la lista sólo aparecen la primera y la última clave faltante 3. Listar todos los elementos faltantes Selecciona el comando Buscar Faltantes... del menú Analizar, la caja de diálogo aparecerá. En la lista de Faltantes en…, selecciona el campo Transaccion_no. Para el primer caso, ACL trae predeterminada esta opción. Da un clic en Aceptar, valida que la salida es a Pantalla. El resultado es el siguiente: 26 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Para observar el resultado cuando se muestran los Elementos faltantes, reutiliza el comando. Selecciona ahora la opción Elementos faltantes. Automáticamente se habilitará la caja de edición de texto que contiene un número 5 que se refiere al Número máximo de elementos faltantes que se mostrarán, si los elementos faltantes exceden a este número, por ejemplo si son 6, únicamente se mostrará el intervalo Da un clic en Aceptar. 27 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Es importante observar que hay 174 intervalos, lo que significa que el número de elementos faltantes fue de 428089. Para poder observar todos los elementos faltantes, hay que modificar el número máximo de éstos a observar escribiendo el total de registros de la tabla. Es decir siempre es recomendable seleccionar esta opción y el número que debemos poner es el total de los registros, con lo que podemos estar seguros que nos dará como resultado todos los documentos faltantes. 28 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Comando buscar duplicados Selecciona la opción Buscar duplicados... del menú Analizar, la ventana de diálogo aparecerá En la ventana de campos Duplicados en…, selecciona el campo Documento. En la ventana Listar campos… agrega todos los campos con el botón Agregar todos. Valida que este activo la opción Preordenar. Clic en Aceptar Envié el resultado a Pantalla. Se generará un reporte conteniendo los 154 duplicados encontrados, reportándonos, el detalle de los registros duplicados en función al campo Transacción_no. 29 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 30 Lección 4: Análisis de datos con fechas El formato de entrada de fechas puede ser de cualquier largo. ACL interpreta formatos de fechas como sigue: AA Año 01- 99 AAAA Año 1900 - 2078 MM Mes 01 - 12 MMM Mes Ene - Dic DD Día 01 - 31 DDD Día 001 - 366 Todos los demás caracteres son tratados como relleno. Ejemplos de caracteres de relleno incluyen / como en 11/30/2002 (MM/DD/AAAA), o los espacios en blanco y comas en Nov 28, 1992 (MMM DD, AAAA). Los formatos de caracteres usados para entrada deben ser idénticos, a los campos de fecha que trae la tabla, de lo contrario ACL no interpretara correctamente la fecha lo que resulta en un valor cero (01/01/00) para el campo. Las fechas de los archivos se definen como un campo Date, cuando usted crea la definición de la tabla. Cuando seleccionas el tipo de dato Date, debes decirle a ACL como está el formato de fecha de cada campo en el archivo. Veamos el formato de las fechas almacenadas en la tabla Cobranza. 1. Abre la tabla Cobranza y selecciona del menú Edición, el comando Formato de Tabla... 2. En la lista de campos selecciona Fecha_Factura y da doble clic Vemos que el campo está definido con formato AAAAMMDD, lo que significa que la fecha 30 de Noviembre del 2010 aparece como 20101130 en el archivo. Nosotros debemos indicarle al ACL, como están almacenadas las fechas, desde que se define el formato de tabla de los campos de datos. 3. Oprime para cerrar la caja de diálogo del Formato de fecha El cambiar un formato de fecha errado se hace dando doble clic en el campo y editando. Oprime el botón para aceptar la nueva definición. ACL almacena los campos de fechas como la diferencia en días de la fecha con respecto al 1 de enero de 1900. Cuando un campo es definido como tipo Date, ACL internamente lo convierte en un número que usa para todas las operaciones sobre el campo. Si los datos en el campo son inválidos, Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación el resultado es cero y resulta en una fecha 00/00/00. ACL maneja fechas desde enero 1, 1900 hasta diciembre 31, 2095. La forma en que ACL despliega las fechas en las vistas, reportes y en la pantalla es distinta de como es definida y como la almacena internamente. El formato en que ACL despliega las fechas en las vistas, reportes y en la pantalla, depende de las opciones... del menú herramientas, en la pestaña fecha el combo Formato. El formato especificado en Preferencias... permanece en efecto hasta que termines la sesión de ACL a menos que hayamos oprimido el botón Aceptar... de la caja de diálogo de Opciones. Por ejemplo para que las fechas aparezcan con la forma MMM DD,AAAA. 1. Selecciona Opciones... del menú Herramientas. 2. Selecciona la pestaña Fecha. 3. En la caja de texto de Formato de muestreo de fecha teclea MMM DD,AAAA. 4. Clic en Aceptar 32 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Comparación de fechas Podemos comparar fechas, comparando el valor de un campo de fecha en el archivo de datos con una constante de fecha. Imagina que quieres enlistar de la tabla Cobranza, todos los registros del archivo que tienen una Fecha de vencimiento anterior a 1 julio de 2000. 1. Selecciona Extraer datos... del menú Datos. 2. Da un clic en la opción Campos 3. Da un clic en el botón de Extraer campos..., da un clic en Agregar todos y luego da un clic en Aceptar 4. Da un clic en el botón Si... 5. Selecciona el campo con doble clic en FechaVto 6. En la lista de operadores da un clic a 7. Presiona el botón Fecha... y selecciona la fecha 1 de Julio de 2000 8. Da un clic en Aceptar para cerrar el Constructor de expresiones 9. En la caja de En... teclea Cobranza antes de julio 2000 33 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 10. Da un clic en Aceptar La nueva tabla contiene sólo los elementos con fecha de vencimiento anterior al 1 de julio de 2000. 34 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Cálculo de días de antigüedad A menudo usamos fechas para determinar la antigüedad de las transacciones. La función AGE() calcula el número de días entre dos fechas que usted especifica. Si no se especifica una segunda fecha, AGE( ) usa la fecha del sistema. Por ejemplo podemos usar AGE( ) para comparar transacciones de cuentas por cobrar con la fecha de fin de año para calcular la antigüedad al cierre de año. Si queremos extraer el número de cuenta, importe y fecha de la factura de todas las transacciones con antigüedad de más de 180 días a la fecha de cierre 31 de diciembre de 2000 de la tabla Cobranza. 1. Selecciona Extraer datos... del menú Datos 2. Da un clic en la opción Campos 3. En la lista de campos a extraer da un clic en Cliente, luego oprime la tecla Ctrl, da un clic a Importe y luego a Fecha_Vto 4. Da un clic al botón Si... 5. En la lista de funciones da doble clic en AGE() 6. Con el cursor entre los paréntesis de AGE(), coloca el campo Fecha_Vto, selecciona la fecha `20001231` y fuera del paréntesis escribe > 180, la función quedara así: AGE(Fecha_Vto,`20001231`) > 180 7. Da un clic en Aceptar para cerrar el Constructor de expresiones 8. En la caja de En… teclea Cobranza mayor 180 dias 9. De un clic Aceptar ACL abre la tabla y muestra las 262 facturas con antigüedad mayor a 180 días al cierre del año fiscal. 35 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Para identificar transacciones que caen entre 0 - 29 días, 30 - 59 días y 60 - 89 días, construir las siguientes expresiones en la tabla Cobranza: Agregue los tres campos a la vista y verifique el resultado 36 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Comando antigüedad El comando Antigüedad se usa para producir un resumen de datos por rangos, en base al rango de días de antigüedad que tiene determinado el campo tipo fecha. Por ejemplo, si queremos saber la antigüedad que tienen las facturas de nuestra tabla Cobranza. 1. Abre la tabla Cobranza 2. Da un clic en el botón aparecerá en la barra de herramientas. La caja de diálogo 3. Selecciona Fecha_Vto en el combo Antigüedad en…, que es la fecha de vencimiento 4. En el combo de Fecha de corte selecciona el 31 de Diciembre de 2000 5. En los campos de subtotales, selecciona el campo Importe. En la sección de períodos de expiración, aparecen por defecto 0, 30, 60, 90,120 y 10000 que representan los días que han pasado con respecto a la fecha de corte 6. Presione el botón Aceptar ACL despliega el reporte en forma semejante a como lo desplegó en los comandos que hemos manejado anteriormente. Este comando también muestra una pestaña donde visualizamos el grafico. 37 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Muchos de los elementos en la tabla de transacciones, son notas de crédito, pagos u otros tipos de transacciones. En este caso sólo queremos ver la antigüedad de las facturas (es decir el tipo de transacción IN). Añadiremos un filtro local al comando que acabamos de procesar. 1. En la pestaña Texto, da doble clic sobre el nombre del comando AGE ON... 2. En el recuadro de Si..., teclea la expresión Tipo_Doc = “IN” 3. Da un clic en Aceptar. ACL muestra un sumario de la antigüedad que incluye sólo facturas, agrupadas conforme al período de antigüedad 38 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Lección 5: Manejo de funciones en ACL Reglas generales funciones En matemáticas una función es una regla que asigna a cada elemento x de un conjunto A exactamente un elemento, llamado F(x), de un conjunto B. En nuestro caso las funciones nos ayudan a interactuar con los datos de las tablas. Los parámetros son los valores que requiere la función, cabe señalar que existen parámetros opcionales y que se representan por los caracteres “<” y “>”. Cada parámetro puede ser de un tipo o más de un tipo de datos. Cuando escribimos más de un parámetro utilizamos el carácter llamado separador de listas, que en nuestro caso es el carácter de la coma “,”, en ocasiones algunos usuarios lo configuran como punto y coma “;”. Las expresiones y campos calculados se basan principalmente en los diferentes tipos de Funciones. Las funciones se podrán utilizar desde la ventana de Constructor de Expresiones. La opción de Pegar parámetros copia al seleccionar la función, los parámetros en el cuadro de expresión, por lo que se recomienda deshabilitar dicha opción y solo pasará la función sin los parámetros 39 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Existen diferentes tipos de funciones que podemos auxiliarnos de ellas para ampliar nuestros análisis, a continuación veremos las funciones más utilizadas en el ACL, y ejemplos de donde los podemos implementar dichas funciones Funciones matemáticas ABSOLUTE() ABS( ) devuelve el valor absoluto de una expresión numérica. Utiliza ABS( ) para determinar el valor absoluto de una población antes de generar un muestreo aleatorio. Formato de función: ABS(número) La función ABS( ) devuelve el valor absoluto de una expresión numérica especificada. Ejemplos: 40 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación ABS(-7.2) = 7.2 ABS(88.2) = 88.2 ABS(5) = 5 Para crear un campo que sea la diferencia entre dos campos: Cantidad1 y Cantidad2, especifica: ABS(Cantidad1 - Cantidad2) MAXIMUM() MAXIMUM( ) o MAX( ) devuelve el mayor de dos números. MAXIMUM( ) es la función opuesta de la función MINIMUM( ). Formato de función: MAXIMUM(N1, N2) Si N1 es mayor que N2, MAXIMUM( ) devuelve N1. De lo contrario, devuelve N2. Nota: “En la mayoría de las funciones o expresiones, si la cantidad de decimales de los parámetros de ambos números es diferente, el resultado se ajusta al que tiene el mayor número de decimales”. Ejemplos: MAX(4, 7) = 7 MAX(7.5, 4) = 7.5 MAX(7, 4.55) = 7.00 Si tiene una tabla de cuentas vencidas, para crear un campo llamado: Vencimiento_de_interes que contenga un valor mínimo de $1.00, especifique: MAX(BALANCE * ANNUAL_RATE, 1.00) Si el saldo multiplicado por el tipo de interés es inferior a un peso, tomará el valor de 1.00. De lo contrario, MAX( ) devuelve el importe del interés calculado. 41 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación MINIMUM() MINIMUM( ) o MIN( ) muestra el menor de dos números especificados. MINIMUM( ) es la función opuesta de la función MAXIMUM( ). Formato de función: MINIMUM(N1, N2) Si N1 es menor que N2, MINIMUM( ) devuelve N1. De lo contrario, devuelve N2. Ejemplos: MIN(4, 7) = 4 MIN(7.5, 4) = 4.0 MIN(7, 4.55) = 4.55 En la tabla de Inventarios, para crear un campo que contenga el valor más bajo del Costo y del Precio de venta, especifica: MIN(Costo, Precio_venta) ROUND() ROUND( ) devuelve un número entero redondeado de una expresión numérica o valor de campo. Utilice ROUND( ) cuando deseas redondear una expresión al número entero más cercano. Formato de función: ROUND(número) ROUND( ) devuelve un número igual a una expresión numérica o valor de campo redondeado al número entero más cercano. Esta función redondea de 0.5 hacia arriba en una unidad. Esta función DEC(Número, 0) = ROUND (Número). Ejemplos: ROUND(7.2) = 7 ROUND(7.5) = 8 42 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación ROUND(-7.5) = - 8 Para crear un campo que sea igual al saldo redondeado al valor más cercano en pesos, escribe: ROUND(Saldo) Funciones fecha / hora AGE() AGE( ) devuelve la antigüedad, en días, de una fecha especificada comparada con una fecha de corte especificada. Utiliza AGE( ) cuando compares dos fechas para determinar cuentas vencidas o para llevara a cabo análisis por antigüedad de balances. Formato de función: AGE(date <,fecha_de_corte_aaaammdd>) AGE( ) devuelve un valor numérico que denota la diferencia de antigüedad en días entre dos fechas. Cuando omites el segundo parámetro, ACL utiliza la fecha de sistema actual. Sin embargo, cuando incluyes el segundo parámetro, ACL calcula la antigüedad relativa a los fines de año fiscal u otras fechas de corte. Independientemente del formato en el que se almacena un campo de fecha, cuando se usan constantes, la constante debe ser: Una cadena de caracteres en la forma “AAMMDD” o “AAAAMMDD”. Una constante de fecha en la forma “AAMMDD” o “AAAAMMDD”. Una expresión o campo de fecha ACL válida. Las fechas anteriores a la fecha de corte devuelven un valor positivo. Las fechas posteriores a la fecha de corte devuelven un valor negativo. Las fechas aceptables van desde el 1 de enero de 1900 al 31 de diciembre de 9999. Esta función es utilizada por el comando Antigüedad, en donde utiliza como segundo parámetro la Fecha de corte. 43 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Ejemplos: Suponiendo que la fecha actual del sistema es el 1 de enero de 2006: AGE(`051220`) = 12 AGE(`20060108`) = -7 AGE(`20051220`, `060101`) = 12 AGE(Fecha) = 42 AGE(Fecha,`051230`) = 27 Para extraer el nombre, la cantidad y la fecha de la factura de todos los elementos de más de 180 días (por ejemplo al final del año fiscal), la expresión será: AGE(Fecha, `20051231`) > 180 CTOD() CTOD( ) convierte una expresión de caracteres o numérica en una expresión de fecha válida. Utiliza CTOD( ) para crear una fecha a fin de compararla con valores de campo de fecha, especialmente si la fecha no es una constante. Por ejemplo, para identificar todas las fechas antes de una fecha determinada, puedes utilizar la prueba: DATE < CTOD(año+mes+día) Nota: “ACL utiliza como fecha inicial el 1 de enero de 1900 para determinar el valor de fecha adecuado”. Formato de función: CTOD(campo <,"formato_fecha">) La función CTOD( ) (abreviatura de "carácter a fecha") convierte cadenas de caracteres o valores numéricos en fechas válidas. CTOD( ) es la función estándar que utiliza otro software. A diferencia de otros paquetes de software, ACL también convierte las expresiones numéricas en fechas. Si el primer parámetro es un número, internamente lo convierte en una cadena antes de la conversión. 44 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Se supone que el primer parámetro se almacena como "AAAAMMDD" o "AAMMDD". Si no lo es, ACL le permite que especifique un formato de cadena opcional. Es recomendable que uses SIEMPRE el formato, para minimizar el riesgo de que el ACL no identifique correctamente la fecha. Por ejemplo, para convertir a la fecha juliana con el formato "AADDD", especifica: CTOD(Fecha, "AADDD") Nota: “La cadena de formato tiene predeterminado el mismo formato que Configurar fecha y el tipo de datos de fecha. Dado que la cadena de formato es en realidad una cadena de caracteres, más que una fecha, deberá estar entre comillas dobles o simples según corresponda, no entre comillas invertidas”. Ejemplo: Suponga que tienes una tabla de Cobranza que incluye un campo de Fecha de vencimiento denominado Vencimiento. Deseas visualizar todas las transacciones con fecha de vencimiento anterior al 1 de julio de 2005. Para hacerlo, debe comparar el campo vencimiento con el valor 1 de julio de 2005. Dado que ACL interpreta el campo Vencimiento como un número único, no puedes compararlo con 07/01/05 ni 050701. Debes convertir 1 de julio de 2005 en otro número. Para hacerlo, utilice la condición o un filtro de la siguiente manera: Vencimiento < CTOD(050701, “AAMMDD”) Todas estas expresiones devuelven el valor 31 de diciembre de 2005: CTOD("051231") CTOD(311205, "DDMMAA") CTOD("20051231") CTOD("051231", "AAMMDD") CTOD("311205", "DDMMAA") CTOD(051231) CTOD(05365, "AADDD") CTOD("31/12/2005", "DD/MM/AAAA") Suponiendo un formato de presentación de fecha MM/DD/AA: CTOD("051220") = "12/20/05" CTOD("Dic2005", "MMMDDAA") = "12/20/05" 45 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación DATE() DATE( ) convierte una expresión de fecha, la fecha actual del sistema o un valor de campo de fecha en una cadena de caracteres que representa la fecha. Utiliza DATE( ) cuando necesites mostrar la fecha actual como una cadena. Formato de función: DATE(<fecha>) Si no se proporciona un parámetro, se convierte la fecha del sistema. La fecha se devuelve como cadena de caracteres de 12 bytes en el formato especificado por configurar fecha. Si SET DATE especifica un formato inferior a 12 bytes, el valor devuelto se completa con espacios en blanco. Ejemplos: Utilizando la configuración de fecha MM/DD/AA, con una fecha de sistema 22 de noviembre de 2011 y un valor de campo de fecha 31 de diciembre de 2008: DATE( ) = "11/22/11 " DATE(Fecha) = "12/31/08 " TIME( ) TIME( ) devuelve la hora y fecha del reloj del sistema. Utiliza TIME( ) para determinar la hora actual o la duración de tareas específicas. Formato de función: TIME( ) TIME( ) devuelve la hora según el reloj del sistema con el formato HH:MM:SS, como una cadena de ocho caracteres de longitud. Su valor no se ve afectado por el contenido del campo ni del registro. Ejemplo: TIME( ) = "15:38:52" Otro ejemplo más complejo: queremos determinar el tiempo transcurrido para un comando, puede convertir los resultados de esta función a una cantidad de 46 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación segundos antes de que comience el comando, repetir el proceso cuando se complete y restar ambos valores, como se detalla a continuación: H = TIME() H1 = VALUE(SUB(H,1,2),0)*3600 + VALUE(SUB(H,4,2),0)*60 + VALUE(SUB(H,7,2),0) H = TIME() H2 = VALUE(SUB(H,1,2),0)*3600 + VALUE(SUB(H,4,2),0)*60 + VALUE(SUB(H,7,2),0) SEGUNDOS = H2-H1 Estos cálculos toman partes separadas de la hora y calculan la cantidad de segundos a partir de la medianoche antes y después de las operaciones. Funciones de conversión DEC() DEC( ) le permite especificar el número de posiciones decimales para redondear una expresión numérica o un valor de campo. Se utiliza cuando deseas ajustar los lugares decimales en cálculos matemáticos o cuando deseas redondear un resultado a una cantidad especificada de lugares decimales. Formato de función: DEC(número, decimales) Donde número representa un campo numérico, valor o expresión. DEC( ) ajusta la cantidad de decimales en número a la cantidad especificada por los decimales. Si la cantidad de decimales se reduce, ACL redondea el resultado. No puedes utilizar la función DEC( ) después de un cálculo a fin de revertir el redondeo. Por ejemplo: DEC(3/2, 4) = 1.0000, no 1.5000 DEC(3.00/2, 4) = 1.5000 47 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación La cantidad de decimales es una constante y no puede modificarla durante el procesamiento. Ejemplos: DEC(7, 2) = 7.00 DEC(7.5647, 3) = 7.565 Para calcular el interés diario a seis posiciones decimales del campo Tasa_anual, especifica: DEC(Tasa_anual, 6) / 365 STRING() STRING( ) convierte una expresión numérica o valor de campo en una cadena de caracteres. Utiliza STRING( ) para convertir una expresión numérica o valor de campo a formato de caracteres para su uso como campo clave en un comando ACL, como Resumir o Unir. Formato de función: STRING(número, longitud <,formato>) STRING( ) convierte la expresión numérica o valor de campo en una cadena de una longitud especificada en longitud. La cadena resultante tendrá un signo menos si el número es negativo y el mismo número de posiciones decimales que el número (a menos que el formato óptimo especifique lo contrario, como se detalla a continuación). Puede especificar un formato numérico opcional, como un tercer parámetro para darle formato al resultado numérico de la función. Asegúrese de que se trate de una expresión de caracteres válida. Si la cadena resultante es más corta que la longitud, se agregan campos iniciales. Si la cadena resultante es más larga que la longitud, los caracteres iniciales se truncan sin notificación comenzando con el signo menos, si los hubiere. Ejemplos: STRING( 125.2, 7) = " 125.2" STRING(-125.2, 4) = "25.2" 48 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación STRING(-125.2, 7) = " -125.2" Esto ejemplos ilustran el uso del parámetro de formato numérico opcional: STRING(-125.2, 10, "(9,999.99)") = " (125.20)" STRING(-125.2, 6, "(9,999.99)") = "25.20)" Para crear un campo que convierta el campo Costo en una cadena para que pueda utilizarse como un campo clave, especifica: STRING(Costo, 8) VALUE() VALUE( ) convierte una expresión de caracteres o un campo en un equivalente numérico. Utiliza VALUE( ) si necesitas convertir una expresión de caracteres o un valor de campo en un formato numérico para su uso en comandos de ACL. VALUE( ) devuelve el equivalente numérico de una expresión de caracteres o valor de campo con un número especificado de posiciones decimales. Si el ajuste de decimales resulta en una pérdida de decimales, el resultado se redondea. VALUE( ) acepta números en cualquier formato. Puede utilizar cualquier formato numérico aceptado por el tipo de datos de impresión, tal como signos de puntuación, signos iniciales o finales y paréntesis como entradas. Si una cadena como "123" no contiene decimales, ACL considerará el número como un entero. Por ejemplo, al convertir VALUE("123", 2), al especificar dos posiciones decimales, ACL interpreta "123" como 123.00 y no 1.23. Formato de función: VALUE(cadena, decimales) En donde el parámetro decimales es una constante numérica que no puede cambiar de registro a registro. Ejemplos: VALUE("123.4-" , 3) = -123.400 VALUE("$123.456" , 2) = 123456.00 VALUE("77.45CR" , 2) = -77.45 VALUE(" (123,456.78)" , 0) = -123457 49 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Funciones de cadena AT() AT( ) devuelve la posición de una cadena de caracteres en otra cadena de caracteres. Debes especificar en qué ocurrencia de la cadena debe buscarse. Devuelve un valor de cero si no encuentra la cadena. La mayoría de las aplicaciones que se ocupan solamente de si una cadena se encuentra presente, la función FIND( ) es la alternativa más sencilla. AT( ) es necesaria si necesitas la ubicación de la cadena o si estás buscando ocurrencias múltiples. Utiliza AT( ) para buscar un valor en particular en un campo de texto libre (como una descripción, nombre o dirección). Formato de función: AT(Ocurrencia, Cadena, Campo de Caracteres) Ocurrencia: Específica qué ocurrencia de la cadena debe buscarse Cadena Especifica: La cadena de caracteres que debe buscarse Campo_Caracteres: Especifica la cadena de caracteres que debe buscarse AT() busca cadenas dentro de otra cadena, y devuelve la ubicación de la cadena buscada. AT() puede interpretarse como "¿en qué posición se encuentra el enésimo incidente de la cadena A en la cadena B?". AT( ) distingue entre mayúsculas y minúsculas, por lo tanto, "a" no es igual a "A." Si está buscando valores en datos conteniendo mayúsculas y minúsculas, considere la posibilidad de convertir los datos a mayúsculas, con la función UPPER( ). Ejemplos: AT( 1, "ABC", "ABCDEFG") = 1 AT( 2, "ABC", "ABCDEFGABCDEFG") = 8 AT( 2, "A", "ABCDEFGH") = 0 50 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación AT( 3, "ABC", "ABCDEFGABCDEFG") = 0 Para extraer todos los registros en los que la dirección contiene "Insurgentes", especifique esta función como una condición IF mientras utiliza la extracción de registros: AT(1, "INSURGENTES", UPPER(Dirección)) > 0 La función UPPER( ) se utiliza para que la búsqueda no distinga entre mayúsculas y minúsculas. Si la expresión AT( ) devuelve un valor mayor que cero, se encontró "Insurgentes" en el campo Dirección y se extrae el registro. Este ejemplo también encuentra "Av. Insurgentes" y "Calle insurgentes" Para ser más específico, se puede incluir un espacio en blanco después de "Insurgentes". Para contar la cantidad de registros de una tabla en la que el campo Nombre contiene "Eva", utiliza esta función como una condición IF durante el recuento de registros: AT(1, "Eva", Nombre) > 0 O si los datos contienen tanto mayúsculas como minúsculas, especifica: AT(1, "EVA", UPPER(Nombre) ) > 0 CLEAN() CLEAN( ) busca todos los caracteres no válidos de una cadena y los reemplaza, junto con todos los caracteres subsiguientes, por espacios en blanco. Utiliza CLEAN( ) para asegurar que los campos que contiene datos no válidos se impriman correctamente. También puedes utilizar CLEAN( ) para aislar partes de un campo, como el apellido en un campo de cliente que incluye el nombre y apellido del cliente. Formato de función: CLEAN(cadena <, caracteres_no_válidos_extra>) La función CLEAN( ) examina un campo o una cadena de caracteres de izquierda a derecha y busca los caracteres no válidos. Si encuentra un carácter, a partir de esa posición CLEAN( ) remplaza el carácter no válidos y el resto de la cadena con espacios en blanco. 51 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación El segundo parámetro opcional caracteres_no_válidos_extra le permite especificar valores de caracteres adicionales que deben considerarse no válidos a los fines de la prueba. Debes ingresar los valores para este parámetro entre comillas. Puedes aplicar la función CLEAN( ) automáticamente a todos los campos de caracteres activando la opción datos no válidos en blanco. Selecciona Herramientas en la barra de menús y elije Opciones, haz clic en la pestaña Numérico y selecciona la casilla de verificación datos no válidos en blanco. Ejemplos: CLEAN("ABC%DEF" , "%") = "ABC " CLEAN("1234.56,111,2" , "," ) = "1234.56 " En el siguiente ejemplo, # representa datos de carácter no válidos: CLEAN("DOE, JOHN##102891231" ) = "DOE, JOHN " CLEAN("DOE, JOHN##102891231", "," ) = "DOE " EXCLUDE() EXCLUDE( ) devuelve una cadena de longitud variable, excluyendo del resultado los caracteres que especifique. EXCLUDE( ) es la función opuesta a INCLUDE( ). Formato de función: EXCLUDE(cadena, caracteres_para_excluir) EXCLUDE( ) devuelve una cadena que contenga los caracteres en cadena, excluyendo los caracteres de caracteres_para_excluir, en el mismo orden en el que aparecen en la cadena. Ejemplos: EXCLUDE("123 cualquier calle", "0123456789") = " cualquier calle" Para eliminar una barra diagonal y un signo numérico del campo Producto, especifica: EXCLUDE(Producto, "/#") 52 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación FIND() Utiliza la función FIND( ) para buscar cualquier cadena de caracteres dentro de un campo especificado. La función FIND( ) no distingue mayúsculas de minúsculas (encuentra ambas). FIND( ) devuelve Verdadero si encuentra la cadena. La función FIND( ) ha sido diseñada para encontrar caracteres múltiples en un campo o registro. Esta función indicará verdadero cuando encuentre un equivalente hexadecimal o un carácter ASCII o EBCDIC. Formato de función: FIND(cadena <, campo>) FIND( ) busca la cadena en el campo especificado por el campo. Si omites el campo, FIND( ) busca la cadena en todo el registro. Ejemplos: FIND("Cancino", Apellido) FIND("Cancino") Para buscar en el campo ciudad las empresas ubicadas en Campeche, utilice el siguiente filtro de expresiones en la vista: FIND("Campeche", Ciudad) Si deja el parámetro de campo en blanco, la función FIND( ) buscará la cadena de caracteres en todo el registro. Por ejemplo, para buscar la palabra "Campeche" en cualquier lugar del registro, utilice el siguiente filtro de expresiones en la vista: FIND("Campeche") INCLUDE() INCLUDE( ) devuelve una cadena de longitud variable, incluyendo sólo los caracteres especificados en el resultado. INCLUDE( ) es la función opuesta a la función EXCLUDE( ). Formato de función: INCLUDE(cadena, “caracteres_para_incluir”) INCLUDE( ) devuelve una cadena que consiste sólo de aquellos caracteres de la cadena que aparecen en caracteres_para_incluir, en el mismo orden en el que aparecen en la cadena. Ejemplos: 53 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación INCLUDE("Oso # 40 Piso 1", "0123456789") = "401" Para crear un campo que conserve sólo los dígitos del campo Abc, especifique: INCLUDE(Abc,"0123456789") = “Abc” LENGTH( ) LENGTH( ) devuelve la longitud de una cadena especificada. Formato de función: LENGTH(cadena) LENGTH( ) cuenta el número de caracteres en cadena y devuelve ese número. Nota: “ACL cuenta los espacios en blanco finales en la longitud. Si no deseas que se cuenten los espacios en blanco finales, utiliza la función TRIM( ) para eliminar los espacios en blanco finales”. Por definición, la longitud de un campo de caracteres es siempre constante. Ejemplos: LENGTH("ABCDE ") = 6 Para crear un campo que tenga la longitud del campo Nombre excluyendo los espacios en blanco finales, especifique: LENGTH(TRIM(Nombre)) LTRIM( ) LTRIM( ) devuelve una cadena de longitud variable con espacios en blanco iniciales eliminados. LTRIM( ) elimina cualquier espacio en blanco inicial de una cadena. Formato de función: LTRIM(cadena) La cadena se copia al resultado y los espacios en blanco iniciales se ignoran. Ejemplos: LTRIM(" AB C ") = "AB C " LTRIM("ABC") = "ABC" LTRIM(" A ") = "A " 54 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación TRIM() TRIM( ) devuelve una cadena de longitud variable con espacios en blanco finales eliminados. TRIM( ) es similar a la función LTRIM( ), pero elimina los espacios finales de la cadena. Formato de función: TRIM(cadena) El valor de la cadena se copia al resultado y los espacios en blanco finales se ignoran. Ejemplos: TRIM("AB C ") = "AB C" TRIM("ABC") = "ABC" TRIM(" A ") = " A" ALLTRIM( ) ALLTRIM( ) devuelve una cadena de longitud variable con espacios en blanco iniciales y finales eliminados. Formato de función: ALLTRIM(cadena) Ejemplos: ALLTRIM("AB C ") = "AB C" ALLTRIM("ABC") = "ABC" ALLTRIM(" A ") = "A" Para concatenar el nombre y los apellidos especifica: ALLTRIM(Nombre) + ' ' ALLTRIM(Apellido_Materno) + ALLTRIM(Apellido_Paterno) + ' ' + REMOVE( ) REMOVE( ) elimina caracteres no deseados de una cadena de caracteres o valor de campo. 55 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Utiliza REMOVE( ) para normalizar los campos de datos que no tienen un formato coherente, como por ejemplo, los campos de direcciones. También puede utilizar esta función para eliminar la puntuación u otra información no válida de campos con una mala edición. Es posible que necesites REMOVE( ) antes de ejecutar los comandos Ordenar y Unir para regularizar estos datos para el formateo o la equivalencia duplicada. Esta función fue sustituida por las funciones INCLUDE( ) y EXCLUDE( ). Aún está disponible en la versión actual para compatibilizar con las versiones anteriores de ACL. Formato de función: REMOVE(cadena, “caracteres_válidos”) La función REMOVE( ) elimina caracteres no deseados de una cadena y retiene solamente los caracteres_válidos especificados. Es similar en intención a la función CLEAN( ), pero su funcionamiento es muy diferente. CLEAN( ) completa el resto del campo con espacios en blanco, mientras que REMOVE( ) mueve los caracteres válidos a la izquierda del campo y retiene su orden y agrega espacios en blanco al resultado final sea igual a la cadena. Asumiendo que tiene una tabla de transacción de inventario, en que el número del producto, Número_producto, no tiene el contenido de campo limpio. Debe ordenar la tabla en base a números de producto similares. La tabla puede contener "AB/123Q", "AB123 Q" y "AB 123-Q", y todos ellos hacen referencia al mismo producto, pero se clasifican de manera muy distinta. La función REMOVE( ) permite normalizar el campo para que el comando Ordenar puede actuar correctamente, convirtiendo cada uno de los ejemplos anteriores en "AB123Q". Ejemplos: REMOVE("ABC 123 XX4" , "ABC123" ) = "ABC123 " REMOVE("zABC 123 XX4", "ABCX123" ) = "ABC123XX " REMOVE("ABC 123 XX4" , "1234567890") = "1234 " Para crear un campo para ordenar o equiparar que contiene sólo los números del campo número de producto, especifica: REMOVE(Número_producto,"0123456789") 56 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación SUBSTRING( ) SUBSTR( ) devuelve una sub-cadena de una expresión de caracteres o de un valor de campo. Utiliza SUBSTR( ) para aislar una parte de una expresión de caracteres o un valor de campo. Formato de función: SUBSTRING(cadena, inicio, longitud) SUBSTR( ) devuelve una sub-cadena de la expresión de caracteres o valor de campo cadena. Inicio: especifica la posición inicial en la cadena. Longitud: especifica la longitud del resultado en caracteres. Ejemplos: SUBSTR("ABCDEF", 2, 3) = "BCD" Para extraer el año de un campo de caracteres que contiene una fecha con el formato “MM/DD/AAAA”, especifica: SUBSTR(DATE, 7, 4) UPPER() UPPER( ) convierte todos los caracteres alfabéticos de una expresión o valor de campo a mayúsculas. Utiliza UPPER( ) cuando busques datos escritos con mayúsculas y minúsculas combinadas o sin especificar. Formato de función: UPPER(cadena) La función UPPER( ) convierte todos los caracteres alfabéticos en la cadena a mayúsculas. Todos los caracteres no alfabéticos no sufren cambios. PROPER( ) convierte los caracteres alfabéticos de mayúscula a minúscula y LOWER( ) convierte los caracteres alfabéticos a minúscula. Ejemplos: UPPER("ABC") = "ABC" UPPER("abc 123 DEF") = "ABC 123 DEF" UPPER("AbCd 12") = "ABCD 12" Si deseas analizar la capitalización, puede identificar a todos los clientes con apellido "Camacho" especificando: UPPER(APELLIDO) = "CAMACHO" 57 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Funciones de acceso a bajo nivel FILESIZE( ) FILESIZE( ) devuelve el tamaño de un archivo. Utiliza FILESIZE( ) para determinar el tamaño de un archivo en bytes o si el archivo existe. La función FILESIZE( ) devuelve el tamaño de un archivo en bytes ó -1 si el archivo no existe. Normalmente, esta función se utiliza para detectar la existencia de un archivo para controlar la ejecución de un Script o para utilizar el tamaño devuelto para algún cálculo útil. Formato de función: FILESIZE(nombre_archivo) Nombre_archivo es el nombre del archivo cuyo tamaño se desea determinar. Si el archivo está en el mismo directorio que el proyecto de ACL, no es necesario especificar la ruta de acceso completa. Para archivos en otros directorios, ingresa una ruta relativa como Abc\Xyz.fil o una ruta absoluta como c:\Abc\Xyz.fil. Ejemplos: Para ejecutar el Script XYZ sólo si existe el archivo Abc.fil: DO XYZ IF FILESIZE("Abc.fil") > 0 Si el archivo cuyo tamaño que deseas conocer, no está en el mismo directorio que el proyecto ACL, debes de incluir la ruta de acceso relativa o una ruta de acceso absoluta al archivo. FILESIZE("c:\Directorio\Subdirectorio\Abc.fil") Para ver el tamaño de Abc.fil, utilice el comando CALCULATE en el registro de comandos. CALCULATE FILESIZE("Demo.fil") 58 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación FTYPE() FTYPE( ) devuelve un valor para identificar un tipo de campo u otro elemento. Utilice FTYPE( ) para detectar los tipos de datos mientras ejecuta un Script. Formato de función: FTYPE("cadena_de_nombre_de_campo") Si cadena_de_nombre_de_campo es el nombre del campo actual, el valor que devuelve es C (carácter), N (numérico), L (lógico), o D (fecha) en mayúscula. Si cadena_de_nombre_de_campo es el nombre de una variable, el valor que devuelve es c (carácter), n (numérico), l (lógico), o d (fecha) en minúscula. Si cadena_de_nombre_de_campo es el nombre de un Script, se devuelve b. De manera similar, FTYPE( ) devuelve y para una tabla, a para un área de trabajo, i para un índice y r para un reporte. Si cadena_de_nombre_de_campo no es ninguno de los anteriores, el valor devuelto es I (Indefinido). Si cadena_de_nombre_de_campo es el nombre de un campo, variable o script, asegúrese de especificarlo entre comillas simples o dobles. FTYPE( ) funciona solamente con los nombres de elementos o campos, no con su contenido. Ejemplos: Si Letra es un campo de caracteres y Número es un campo numérico: FTYPE(Letra) = "C" FTYPE(Número) = "N" Si tiene una aplicación estándar que utiliza el campo Cantidad para calcular totales, tal vez desee asegurarse de que haya realmente un campo Cantidad y que sea numérico antes de iniciar la aplicación estándar. La siguiente línea de comando se ejecuta solamente si Cantidad es un campo numérico: DO Script_1 IF FTYPE(Cantidad) = "N" RECLEN( ) RECLEN( ) devuelve la longitud del registro actual. Utiliza RECLEN( ) para detectar registros cortos o registros de una longitud en particular. Resulta de gran utilidad 59 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación con archivos CR/LF (impresión de imagen), dado que proporciona una manera sencilla de examinar la longitud de los registros. Formato de función: RECLEN( ) RECLEN( ) devuelve la longitud del registro actual. Para obtener información sobre como determinar el número de registro actual, consulta la función RECNO( ). Para registros de longitud fija, el resultado es una constante (la longitud del registro). Y los registros de longitud variable, debes cambiar el resultado para cada uno de los registros. Ejemplo: Para extraer todos los registros en los que la longitud es de 110 (suponiendo que éste es el tipo de registro que le interesa), especifica: RECLEN( ) = 110 RECNO() RECNO( ) devuelve el número de registro lógico actual, contando desde 1. Utiliza RECNO( ) para enviar los números de registro a una tabla o para determinar la ubicación relativa de un registro determinado en una tabla. Formato de función: RECNO( ) RECNO( ) devuelve el número de registro lógico actual Si la tabla no se encuentra indexada, RECNO( ) comienza con el valor 1 y va aumentando de a uno para cada registro de la tabla. Los números de registros lógicos y físicos son idénticos. Si la tabla se encuentra indexada, RECNO( ) se maneja de manera similar, pero en orden lógico, no físico. Si se utilizan los comandos SEEK o FIND, el número de registro se restablece en 1 después de que se ejecutan estos comandos. Ejemplo: Si seleccionamos el registro 99: RECNO( ) = 99 60 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación TEST() TEST( ) devuelve Verdadero si un texto especificado comienza en una ubicación de byte especificada dentro de un registro, de lo contrario, TEST( ) devuelve Falso. TEST( ) se utiliza automáticamente cuando crea un filtro en la ficha Agregar un nuevo filtro de datos de la ventana Formato de tabla. Formato de función: TEST(ubicación_de_byte, cadena) TEST( ) examina un registro para ver si la cadena de caracteres comienza en la posición especificada en ubicación_del_byte. De ser así, TEST( ) devuelve Verdadero. De lo contrario, devuelve Falso, aún si la cadena aparece en otra ubicación en la línea. Los parámetros en TEST( ) distinguen mayúsculas y minúsculas. La especificación "DEPTO" no encuentra "Depto." Si existe una posibilidad que el tamaño se encuentre combinado, utilice en primer lugar la función UPPER( ) para convertir todos los caracteres en mayúsculas. Si la cadena no es una expresión de carácter, debe tratarlo como una cadena de caracteres delimitándola con comillas. Ejemplos: Dado un registro que contenga: Departamento: Marketing ....|....1....|....2....|....3....| TEST(5, "Departamento") = T TEST(6, "Departamento") = F TEST(5, "DEPARTMENT") = F Para crear un filtro que identifique los encabezados de página, especifica: TEST(1, "Página:") 61 Lección 6: Exportar datos Comando exportar a otra aplicación Si quieres usar los datos de ACL en algún otro programa. Cuando quieras exportar los datos a un procesador de palabras para producir cartas de confirmación de saldos, o quizás necesites pasar la información a una hoja de cálculo para producir gráficos muy atractivos. El comando Exportar a otra Aplicación... se puede usar como una herramienta de conversión, tomando los datos de un programa y produciendo un archivo en un formato de otro programa. Exportar ofrece dos modos para exportar datos: desde Campos o desde Vista. 1. Opción Campos: para seleccionar campos, crear expresiones y seleccionar el orden de los campos para el archivo de exportación. Todos los campos de la tabla y de las tablas relacionadas pueden exportarse 2. Opción Vista: para exportar únicamente los campos de la vista actual en el orden en que se visualizan. La mayoría de las tablas exportadas conservan los títulos de columna de la vista Exportar Todos los Campos Trabajaremos con la tabla Inventarios, abre esta tabla. 1. Selecciona Exportar a otra Aplicación... del menú Datos. Aparece la ventana de diálogo Exportar. Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 2. Da un clic en el botón de Exportar campos... 3. Da un clic en Agregar todos. 4. Da un clic Aceptar. 5. En Exportar como selecciona Excel. 6. En el recuadro de En... escribe INVENTARIO. 7. Da un clic en Aceptar. ACL crea el archivo que ahora está listo para ser usado en Excel. 8. Minimiza el software de ACL. 9. Abre Excel. 10. En el menú Archivo, selecciona Abrir, ir al directorio C:\ASF\ACL_02_Intermedio\ en donde ACL acabas de crear el archivo. 63 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Exportar Campos Seleccionados Exportaremos solo algunos datos para ser usados en un archivo dBase. 1. Abre nuevamente la tabla Inventarios 2. Selecciona Exportar a otra Aplicación... del menú Datos 3. En el combo de campos que aparecen en Exportar campos..., da un clic en Codigo. Con la tecla Ctrl oprimida da un clic en Clase, Descripción, CostoUnit y Preciovta 4. En Exportar como selecciona dBase III Plus 5. En el recuadro de En... escribe Inventario DBase. 6. Da un clic en Aceptar Ahora bien, supongamos que se desea agregar en un documento de Word todos aquellos registros de la tabla Cobranza que tiene más de 59 días de antigüedad. 1. Abre la tabla Cobranza 2. Selecciona la opción Antigüedad del menú Analizar. Ejecuta el comando sobre el campo Fecha_Vto, la fecha de corte es el 31 de diciembre de 2000 y los periodos de expiración son 0 y 59. Da doble clic en la etiqueta que dice >59, en la columna Días cuando se muestre el resultado, con la finalidad de activar solo la cobranza con más de 59 días de antigüedad 3. Selecciona el comando Exportar a otra Aplicación... del menú Datos 4. Da un clic en Cliente sin dejar de presionar la tecla Ctrl, FechaFac, FechaVto y Importe 5. En el combo Exportar como selecciona la opción Archivo comb. Word 64 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación 6. En el recuadro de En... escribe Cobranza mayor a 59 dias 7. Da un clic Aceptar Abre el Word, en seguida abre el archivo que se acaba de generar. La ruta de almacenamiento de éste es la misma del proyecto ACL. El archivo lucirá de la siguiente forma: Selecciona todo el texto, con ayuda de las teclas Ctrl + E. Abrimos la pestaña Insertar de la cinta de opciones. Seleccionar del combo Tabla en el grupo Tablas, la opción Convertir texto en tabla..., aparece una ventana donde de forma automática configurará la tabla solo debemos seleccionar el botón Aceptar. Para eliminar las comillas de cada una de las celdas, seleccionamos la pestaña Inicio de la cinta de opciones, dentro del grupo Edición seleccionamos la opción Reemplazar... en el combo Buscar: escribe el símbolo de las dobles comillas y en el recuadro de Reemplazar con: no escribas nada. Presiona el botón Reemplazar todos. A continuación aparecerá la siguiente ventana. 65 Herramientas para apoyar el trabajo de fiscalización.- ACL Intermedio Auditoría Superior de la Federación Presiona el botón de Aceptar, luego el que tiene la leyenda Aceptar y por último Cancelar. 66 Bibliografía http:www.acl.com Fraud Detection - Using Data Analysis Techniques to Detect Fraud – David G. Coderre Normas Internacionales de Auditoría emitidas por IFAC (International Federation of Accountants) 15 y 16 Norma ISA 401 sobre Sistemas de Información por Computadora SAS 94 Norma SAP 1009