Wcontapre: algunos trucos y secretos


Tabla de contenido

  1. Uso de la condición lógica optativa...

Uso de la condición lógica optativa...

La condición lógica optativa te permitirá sacar el máximo partido a los listados y resúmenes por impresora, así como a algunas consultas,  pudiendo acotar el listado hasta la mínima expresión. Dependiendo de los listados y si estas en ejercicio corriente o futuros, variarán los campos que podrás usar para construir la condición o conjunto de condiciones.
Para ello, tienes los siguientes operadores:

Operadores lógicos

.AND. ( Y lógico )
.OR. ( O lógico )
.NOT. ( NO lógico, también lo puedes sustituir por el símbolo !)
Ten en cuenta los puntos, antes y después de cada palabra.

Operadores relacionales

> ( mayor que...)
< ( menor que...)
<> (distinto de...)
>= ( mayor que o igual a...)
<= ( menos que o igual a...)
== ( exactamente igual a...)
= ( igual a...)
$ (subcadena, para encontrar una cadena de caracteres dentro de otra)
A continuación veremos los distintos campos que puedes utilizar.

Campos utilizables en listados y fichas de ejercicio corriente

(Date cuenta de que los valores para campos de caracteres, van entre comillas)

TIPO ( numérico, p.e. field->Tipo == 300 ).
SIGNO ( numérico, p.e. field->Signo == 1 ).
SECCION ( caracteres, p.e. field->Seccion == "13" ).
SERVICIO ( caracteres, p.e. field->Servicio <> "02" ).
PROGRAMA (caracteres, p.e. field->Programa > "111A" ).
ECONOMICA ( caracteres, p.e. field->Economica = "2" ).
FUNCION ( caracteres. Solo si usas el centro de coste).
PROYECTO ( caracteres. p.e. field->Proyecto <> "00000000" ).
TERCERO( caracteres, se refiere al NIF del tercero, p.e. field->Tercero == "0095456235X" ).
ASIENTO ( caracteres, se refiere al nombre del tercero, p.e. field->Asiento = "PEREZ" ).
NOMPROYECT (caracteres, se refiere a la explicación del asiento. P.e. "FACTURA 1234/04" $ field->Nomproyect).
NOTA ( caracteres, se refiere al contenido de las observaciones. P.e. "REPARO 123" $ field->Nota ).
RCNUM, ANUM, ADNUM, ONUM (caracteres, p.e. field->Onum = "01234")
CODEX (caracteres, se refiere al campo CLAVE. P.e. field->Clave == "0023").
INTERNUM (nº de captura del PICCAC, tendrás que usas la función val() para que funcione, p.e. val(field->Internum) > 1000. La otra alternativa más engorrosa, es usar ceros a la izquierda: field->Internum > "0000001000" ).
EXPNUM ( Nº de operación del PICCAC. Vale lo dicho en el caso anterior. P.e. val( field->Expnum ) < 500 , o field->Expnum < "00000500" ).
INTERNUM2 (Nº de expediente del PICCAC. Vale lo dicho en los dos casos anteriores. No debes poner los guiones. P.e. Val( Field->Internum2 ) = 41030718, o field->Internum2 = "41030718" ).
AREA (caracteres, p.e. field->Area == "999").
ANO ( caracteres, se refiere a si es o no es plurianual. P.e. field->Ano == "S" ).
IMPORT( numérico, p.e. field->Import > 10000.50 ).
FECHA ( campo fecha, se refiere a la fecha del asiento. Para construir  la condición, te hace falta usar la función ctod(). P.e. field->Fecha >= ctod("05-02-2004" . La función ctod() convierte la cadena "05-02-2004" a una variable tipo fecha para poder compararla con los datos de los campos).
FECHA2 (Se refiere a la fecha de Intervención. A usar como en el caso anterior).

Campos utilizables en resúmenes de ejercicio corriente

SECCION, SERVICIO, PROGRAMA, ECONOMICA, FUNCION, PROYECTO ( igual que en la sección anterior)
OBJETIVO (caracteres. P.e. field->Objetivo == "714HA" )
FINANCIA (numérico. P.e. Field->Financia <> 28 ).
MC000, MC210, MC220, MC221, MC230, MC231, MC240, MC250, MC260, MC270, MC280, MC281, RC300, RC301, RC302, RC303 ( son todos ellos campos numéricos. P.e. field->RC300 > 10000 ).
AIMPORT, ADIMPORT, OIMPORT, OPIMPORT ( lo mismo que el caso anterior).
REAIMPORT ( se refiere al total de autorizaciones con cargo a retenciones de crédito. Se usa como en los dos casos anteriores.).

Campos utilizables en listados, fichas y resúmenes de ejercicios futuros

Su uso, salvo que se indique lo contrario, igual que en ejercicio corriente.
TIPO, SIGNO ( numéricos )
SECCION, SERVICIO, PROGRAMA, ECONOMICA, PROYECTO ( caracteres ).
TERCERO, ASIENTO, NOMPROYECT, NOTA (caracteres).
RCNUM, ANUM, ADNUM (caracteres).
CODEX , INTERNUM, EXPNUM, INTERNUM2, AREA (caracteres)
IMPORT (numérico, se refiere al importe total de las anualidades)
FECHA, FECHA2 ( campos fecha )
FINANCIA (numérico).

Algunos ejemplos de condiciones con operadores lógicos

( Son simplemente ejemplos, no te los tomes demasiado en serio.)

1) Field->Fecha > ctod("01-05-2004") .and. field->Import > 1000000 .and. "REPARO" $ field->Nota . Traducción al cristiano: Procesa todos los registros con fecha del asiento mayor que 01-05-2004 y cuyo importe sea superior a 1.000.000 de euros y que en el campo de observaciones contenga la palabra "REPARO".
2) Field->Servicio == "02" .or. field->Programa == "111A" . Con esto le estamos diciendo que nos procese todos los registros cuyo servicio sea el 02 o cuyo programa sea el 111A, indistintamente. Date cuenta que cualquiera de las dos condiciones da validez al conjunto.
3) Field->Servicio == "02" .and.  field->Programa == "111A" . Con esto le estamos diciendo que nos procese todos los registros cuyo servicio sea el 02 y cuyo programa sea el 111A. En este caso, se tienen que cumplir ambas condiciones para que el conjunto sea válido.
4) Para combinar ambas ( .or. y .and. ) , es mejor usar paréntesis para que se interprete con más claridad. Veámoslo  juntando el primer y el tercer ejemplo:
( Field->Fecha > ctod("01-05-2004") .and. field->Import > 1000000 .and. "REPARO" $ field->Nota )  .or.  ( Field->Servicio == "02" .and. field->Programa == "111A" ) .
En este caso, la totalidad del conjunto tendrá validez tanto en el caso de que se cumplan todas las condiciones del primer conjunto  entre paréntesis, o bien todas las condiciones del segundo.
5) Vamos a ver un ejemplo con el operador lógico .not. ( también ! ). Sobre todo puede ser útil en conjunción con  el operador relacional $. Veámoslo:
!  "A" $ Field->Nomproyect .and. ! "A" $  Field->Asiento. Con esto le estamos diciendo que procese todos los registros que no contengan la letra "A", ni en el campo de explicación del asiento ni en el campo de nombre del tercero.

Algunas funciones que podrás usar en las condiciones

ctod(). Para convertir una cadena de caracteres a una variable fecha. Ya vimos su uso anteriormente. P.e. Field->fecha = ctod( "02-12-2004" ) .
day(). Retorna el valor del día de una fecha. P.e. day( Field->Fecha ) = 20. Se cumplirá la condición si el campo fecha contiene el valor 20 como día del mes.
empty(). Determina si un campo está vacío. P.e. empty( field->Fecha ). Se cumple la condición si el campo fecha está vacio.
trim(). Corta los espacios en blanco a la derecha en una cadena de caracteres. P.e. trim( field->Asiento ) = "GONZALEZ DOMINGUEZ, PEDRO"
month(). Retorna el valor del mes de una fecha. P.e. month( Field->Fecha ) = 12. Se cumplirá la condición si el campo fecha contiene el valor 12 como mes.
left(). Devuelve el valor de x caracteres empezando por la izquierda de una cadena. P.e. left( field->Asiento , 5 ) == "GONZA".
right(). Devuelve el valor de x caracteres finales de una cadena. P.e. right( trim( field->Asiento) , 5 ) == "PEDRO".
substr(). Devuelve el valor de x caracteres a partir de una posición y dentro de una cadena. P.e. substr( field->Asiento,10,9) == "DOMINGUEZ", nos encontrará todos los asientos que tengan la cadena DOMINGUEZ en esa posición del campo Asiento (Nombre del Tercero). Substr( field->Internum2, 2, 3) = "107", nos encontrará todos los asientos que tengan "107" en esa posición del campo Internum2 (nº de expediente del PICCAC).
val(). Convierte una cadena de caracteres a un valor numérico. Ya vimos su uso anteriormente. P.e. val( field->Expnum ) > 1000.
year(). Retorna el valor del año de una fecha. P.e. year( Field->Fecha ) < 2004. Se cumplirá la condición si el campo fecha contiene un valor menor de 2004 como año.

Advertencia

Espero que las cosas hayan quedado más o menos claras y no haber metido la pata con algún error de sintaxis que te induzca a confusión.
Para acabar quería decirte lo siguiente: En el caso de que el conjunto de las condiciones contengan algún error de sintaxis, como por ejemplo no poner alguno de los puntos del operador .or. , o cualquier otro tipo de error como campo inexistente, etc. ,  el programa finalizará, previo mensaje de error.  No ocurre absolutamente nada porque acabe de esta forma. Al entrar de nuevo te saldrá un cartelito diciendo que saliste de una forma anormal; ignóralo en este caso y continúa. Ánimo y suerte.

Volver al principio de la tabla

Copyright © 2004-2006  Paulino Alonso Panero. Reservados todos los derechos.
Revisado el: 23-03-2008.
DHTML Menu By Milonic JavaScript