1. Tipos de datos
Nada Tipo nulo
Número Un número de coma flotante de doble precisión. Ejemplo: 12777,45, 0,000056, 1E18
Texto Una cadena de texto de cualquier longitud, delimitada entre comillas dobles o simples. Ejemplo: "hola", 'sin comentarios'
Lógico Los valores 'cierto' y 'falso'. Ejemplo: cierto, falso, a < b
Bloque Un bloque de código, que especifica una secuencia de instrucciones. Ejemplo: {a=1; b=2; c=3}
Variable Una variable, de cualquiera de los tipos indicados. Ejemplo: &a (siendo a una variable)
Lista Una lista (array) de elementos, de cualquiera de los tipos indicados. Ejemplo: #("uno"; "dos"; "tres"; 4; 5)
Registro Un registro es un conjunto de campos, formados cada uno por un nombre y un valor. Ejemplo: cliente = #[nombre: “Pedro” nif: “12345678Z” edad: 48]; Mensaje(“Nombre: “+cliente.nombre+”. Edad: “+EnTexto(cliente.edad));
Tipo Un tipo de dato, cualquiera de los tipos indicados. Ejemplo: tipo("uno")
2. Operadores de cálculo
+ (más ) - Suma de dos números Ejemplo: 3 + 4 devuelve 7 - Concatenación de dos textos Ejemplo: "uno" + "dos" devuelve "unodos"
- (menos ) - Resta de dos números Ejemplo: 3 - 4 devuelve -1 - Cambio de signo de un número Ejemplo: -(3 + 4) devuelve -7
* (asterisco) - Multiplicación de dos números Ejemplo: 3 * 4 devuelve 12
/ (barra de división) - División de dos números Ejemplo: 3 / 4 devuelve 0,75
modulo - Resto de la división entera de dos números Ejemplo 7 modulo 4 devuelve 3
no - negación de un valor lógico Ejemplo: no (3 > 4) devuelve cierto
y - Combina dos valores lógicos con el operador lógico AND Ejemplo: (1 > 2) y (3 < 4) devuelve falso
o - Combina dos valores lógicos con el operador lógico OR Ejemplo: (1 > 2) o (3 < 4) devuelve cierto
3. Operador de asignación
= (igual) Asigna un valor (y un tipo) a una variable, definiéndola si no existe Ejemplo: a = 7 Nota: No utilizar este operador para comparar dos elementos (un error bastante frecuente)
4. Operadores de comparación
== (doble igual) Devuelve cierto si los dos elementos comparados son iguales. Es aplicable a todos los tipos, pero si los elementos son de diferente tipo, se produce un "error de tipo". Ejemplo: 3 == 4 devuelve falso
<> (menor-mayor) Devuelve cierto si los dos elementos comparados son diferentes. Es aplicable a todos los tipos, pero si los elementos son de diferente tipo, se produce un "error de tipo". Ejemplo: 3 <> 4 devuelve cierto
>, >=, <, <= (mayor, mayor-igual, menor, menor-igual) - Si los operandos son números, evalúa las comparaciones según el valor numérico de los operandos Ejemplo: 3 > 4 devuelve falso - Si los operandos son textos, evalúa las comparaciones según el orden alfabético de los operandos, sin tener en cuenta las mayúsculas / minúsculas Ejemplo: "abeja" < "mosca" devuelve cierto - Si los operandos son lógicos, se considera que cierto es mayor a falso Ejemplo: cierto > falso devuelve cierto - Si los operandos son de diferente tipo entre sí, o de cualquier otro tipo que los arriba indicados, se produce un "error de tipo"
5. Otros operadores
() (paréntesis) - Agrupan operaciones, alterando su precedencia. Se permiten ilimitados niveles Ejemplo: (a + b)*(c + (d - e) / 2) - Indican los argumentos o parámetros de las funciones Ejemplo: EnLetras(a) - Precedidos por el símbolo #, definen una lista de elementos Ejemplo: #("uno";"dos";"tres")
[ ] (corchetes) - Permiten obtener un caracter de un texto Ejemplo: a = "distrito-k"; a[3] devuelve "s" - Permiten obtener un elemento de una lista (array) Ejemplo: a = #("uno";"dos";"tres"); a[2] devuelve "dos" - Evalúan una función predefinida (depende de la aplicación) Ejemplo (sólo en SQL Conta): [s '430'] devuelve el saldo de la cuenta 430
{ } (llaves) Delimitan un bloque de código Ejemplo: si a == b entonces {a = a + 1} sino {a = a - 1}
@ (arroba) Permite obtener el valor de una variable cuyo nombre se obtiene de una expresión. De esta forma se puede conseguir acceder a una variable que tenga espacios en blanco en el nombre. También permite evaluar un bloque de código. Ejemplo: a = 25; nombre = "a"; @nombre devuelve 25 a = 25; @”a” devuelve 25
& (ampersand) Permite obtener la variable cuyo nombre se obtiene a partir de una expresión Ejemplo: a = 25; &a devuelve la variable a, no el valor 25
; (punto y coma) - Permite separar los elementos de una lista (array). Ejemplo: a = #("uno";"dos";"tres") - Permite separar los argumentos o parámetros de una función. Ejemplo: Min(a; b) - Permite ejecutar más de una orden, separándolas entre sí. El valor devuelto por el conjunto de órdenes es el último evaluado. Ejemplo: a = 3; b = 4; a + b; Se ejecutan las tres órdenes, y devuelve 7
6. Estructuras de lenguaje
identificadores Son palabras que se utilizan para dar nombre a variables, campos de registros y a las funciones predefinidas del lenguaje. Se pueden utilizar letras mayúsculas, minúsculas, acentuadas, eñes y cedillas; y dígitos numéricos siempre que no estén al principio del identificador. No pueden incluir espacios en blanco ni ningún tipo de signo excepto el guión bajo “_”. Se consideran iguales dos identificadores que se diferencien únicamente por las mayúsculas, minúsculas o acentos. Ejemplos: cliente, nombre_cliente, NombreCliente, importe1, importe2, situación
comentarios Los comentarios sirven para poner aclaraciones en el programa. Pueden ser de dos tipos: - Simples: comienzan con%% y se extienden hasta el final de la línea actual. Ejemplo: %% esto es un comentario - Delimitados: comienzan con un% y finalizan con otro. Pueden ocupar varias líneas. Ejemplo: % esto es un comentario%
funciones predefinidas Para llamar a una función, debe indicarse su nombre, y si desean indicarse argumentos o parámetros, deben indicarse a continuación entre paréntesis, separados entre sí por ";" Ejemplo de llamada a una función sin argumentos: Pi Ejemplo de llamada a una función con argumentos: Max(a;b)
funciones definidas por el usuario Se pueden definir funciones asignándole un bloque de código a una variable. Para llamarlas hay que utilizar el operador @. Se pueden pasar parámetros, a los que se accede desde la función mediante la variable “params”. Ejemplo: aplicaIva = { params[1] * params[2]/100 }; @aplicaIva(500;16) devuelve 80 (el 16% de 500)
si
si
si
haz
7. Constantes predefinidas
Constante Tipo Descripción
Nada Nada El valor nulo Cierto Lógico El valor lógico cierto Falso Lógico El valor lógico falso TNada Tipo El tipo Nada TNumero Tipo El tipo Número TTexto Tipo El tipo Texto TLogico Tipo El tipo Lógico TBloque Tipo El tipo Bloque TVariable Tipo El tipo Variable TLista Tipo El tipo Lista TRegistro Tipo El tipo Registro TTipo Tipo El tipo Tipo
8. Funciones matemáticas
Función Resultado Descripción
Pi Número El número Pi (3,1415...)
Abs(
Redondeo(
Defecto(
Exceso(
Entero(
Decimal(
Positivo(
Negativo(
RedondeoDec(
RedondeoFactor(
LogXY(
Potencia(
Min(
Max(
9. Funciones de manipulación de textos
Función Resultado Descripción
TxTamaño(
TxEstáVacío (
TxRellenaIzq(
TxRellenaDer(
TxLimpiaIzq(
TxLimpiaDer(
TxLimpia (
TxPosicion(
TxTrozo(
TxDesdeHasta(
TxIzquierda (
TxDerecha (
TxBorra(
TxReplica (
TxReemplaza(
TxSustituye(
TxMayúsculas (
TxMinúsculas (
TxPrimeraMayúscula (
TxCuantasPalabras(
TxPalabra(
TxRestoPalabras(
TxQuitaFormato(
TxEsNúmero (
TxConvierte (
Intro Texto Devuelve un retorno de carro
10. Funciones de conversión
Función Resultado Descripción
EnTexto(
EnNumero(
EnNumero(
EnLetraF(
EnLetraM(
EnLetra(
Formatea(
Formatea(
FormateaHoras(
Máscara: HH:MM:SS.
Ejemplo:
FormateaHoras(7,59) -> 07:35:24
FormateaPrecio(
Devuelve
Entrecomillar(
Entrecomillar(
11. Funciones de manipulación de listas (arrays) (Todas empiezan a contar en 1)
Función Resultado Descripción
LCrea Lista Crea y devuelve una lista vacía
Registro Para crear un variable registro usar esta nomenclatura: cliente = #[nombre: “Pedro” nif: “12345678Z” edad: 48]; Mensaje(“Nombre: “+cliente.nombre+”. Edad: “+EnTexto(cliente.edad));
LAñade(
RAñade(
Ejemplo:
Registro = #[Campo1: "valor1" Campo2: 100]; RAñade(Registro;"Campo3");
Registro.Campo3 = 1200;
Mensaje(Registro.Campo3);
LBorra(
LTamaño(
LQuita(
LAplica(
LCarga(
LGraba(
TipoLista(
ChequeaTipoItem(
LInserta(lista; posicion; valor) Nada Inserta el valor en la lista en la posición indicada (1 es la primera). Ejemplo: a=#(11;12;13); LInserta(a;2;7) % a valdrá #(11;7;12;13)
LOrdena(lista) Nada Ordena la lista. Los números van antes que
los textos. No se diferencian mayúsculas de minúsculas. Ejemplo: a=#(11;'a';7;12,6;6); LOrdena(a) % a valdrá #(6;7;11;12,6;'a')
LPosicion(lista; valor) Número Busca el valor en la lista y retorna la posición (0 si no lo encuentra). Ejemplo: LPosicion(#(11;7;12;13);7) # retorna 2
LConvierte(lista) Número Convierte los elementos de la lista que sean de tipo texto pero contengan números en verdaderos números. Ejemplo: a=#(11;'12,6';'a'); LConvierte(a) % a valdrá #(11;12,6;'a')
TxEmpaqueta(
TxDesempaqueta(
12. Funciones de manipulación de fechas
EnTexto Texto Devuelve un campo de Tipo Fecha en texto para poder operar con él.
FechaHoy Texto Devuelve la fecha actual
HoraActual Texto Devuelve la hora en formato hh:nn:ss
HoraActual(
FechaEnNúmero(
FechaEnTexto(
FormateaFecha(
FormateaFecha(
FormateaFechaHora(
DiferenciaEnDías(
EsAñoBisiesto(
EsMismoMes(
DíasMes(
DíasAño(
AnteriorMes(
SiguienteMes(
PrimerDíaMes(
ÚltimoDíaMes(
DíaDe(
MesDe(
AñoDe(
SemanaDe(
TrimestreDe(
DíaDeSemana(
DiferenciaEnHoras(fechaHoraInicio; fechaHoraFin)
Hora Retorna la diferencia en horas entre la fecha hora de inicio y la de fin. Ejemplo: DiferenciaEnHoras('1/1/2000 23:50:00'; '2/1/2000 0:01:00') % retorna '0:11:00'
DiferenciaEnHoras(listafechaHoraInicio; listafechaHoraFin)
Lista Retorna una lista con las diferencias en horas entre cada elemento de las dos listas de fecha hora de inicio y de fin. Ejemplo: DiferenciaEnHoras(#('1/1/2000 23:50:00';'1/1/2000 0:00:00'); #('2/1/2000 0:01:00'; '1/1/2000 0:01:00') ) % retorna #('0:11:00';'0:01:00')
HoraEnNúmero(hora) Número Retorna la hora convertida a número (nº de segundos transcurridos). Ejemplo: HoraEnNúmero('0:11:00') % retorna 660
HoraEnTexto(numero) Hora Retorna el número de segundos convertido en hora. Ejemplo: HoraEnTexto(660) % retorna '0:11:00'
13. Funciones de manipulación de variables
Función Resultado Descripción
ExisteVariable(
DestruirVariable(
VerVars(
EditarVars(
DuplicarVars(
BorrarVars(
RenombrarVars(
SustituirVars(
SustituirVars(
SetVariablePrefix(
GetVariablePrefix Texto Devuelve el prefijo por defecto para las nuevas variables
Tipo(
EsNada(
14. Funciones de acceso a base de datos
Función Resultado Descripción
ObtListaSQL(
CuantosRegistros(
EjecutarSQL(
ConsultaCampo(
ConsultaLista(
ConsultaRegistro(
Ejemplo: consultaregistro('select sum(stock1) as stock1, sum(stock2) as stock2, sum(pendservir1) as pservir1, sum(pendservir2) as pservir2, sum(pendrecibir1)as precibir1, sum(pendrecibir2) as precibir2 ' +'from existenc where codarticulo=codarticulo'; #(LineasDeCompraYVenta.Articulo.Codigo) ); stock = datos.Stock1;
ConsultaCuantos(
ConectaBDE(
ConectaSQL(
Desconecta(
Todas las funciones de acceso a base de dato soportan el pase de un alias como parámetro. Ejemplo: Leer(
FUNCIONAMIENTO DE LA FUNCIÓN LEER DEL EVALUADOR
La función Leer tiene la siguiente sintaxis: Leer(Entidad;Campo;Filtro[;Alias]).
Entidad: Indica la tabla de la cual vamos a leer los datos, es decir, si queremos leer un dato de la tabla de clientes tendremos que colocar en entidad cliente. Para fabricaciones, reparaciones y proyectos existen nombres especiales que no se corresponden con las tablas. Existe un documento donde se detallan estos nombres.
Campo: Indica el campo que vamos a leer de la tabla. Si queremos leer un campo del registro actual tendremos que preceder al nombre del campo por Actual.(El punto incluido). Si lo que queremos es obtener el valor de un dato adicional para el registro actual en lugar del nombre del campo colocaremos el nombre del dato adicional (escrito de la misma manera que en la definición del dato adicional).
Filtro: Este campo sólo se utiliza cuando no queremos leer un dato del registro actual, aunque no se utilice se debe colocar un valor vacío en la llamada de la función. Este filtro se definirá como una sentencia Where de SQL (condicion and/or condicion...). Tambíen puede usarse una posición relativa con relación a la línea actual (sólo válido para las líneas en las ventanas de documentos, fabricación, reparaciones y proyectos).
Alias: Alias de una conexión a una base de datos externa hecha con “ConectaSQL” o “ConectaBDE”.
Campos especiales para las líneas de documentos:
Nombrearticulo: Nombre del artículo.
Codarticulo: Código del artículo.
Cantidadreal: Cantidad real del artículo(compuestos).
Coddocumentoorigen: Código del documento origen.
Coddocumento: Código del documento.
Codllinea: Código de la línea.
Nivel: Nivel del árbol.
Cantidad: Cantidad del artículo.
Coste: Precio de coste del artículo.
Precio: Precio del artículo.
Porcentajecomision: Porcentaje de comisión.
Descuentos: Descuentos en forma de cadena.
Iva: Porcentaje de iva.
Recequiv: Porcentaje de recargo de equivalencia.
Irpf: Porcentaje de irpf.
Beneficio: Beneficio.
Porcbeneficio: Porcentaje de beneficio.
Importe: Importe.
Iiprecio: Precio iva incluido.
Iiimporte: Importe iva incluido.
Costepuntoverde: Coste punto verde.
Puntoverde: Punto verde del artículo.
Codclienteorigen: Código del cliente origen.
Tipoorigen: Tipo de documento origen.
Serieorigen: Serie del documento origen.
Numeroorigen: Número del documento origen.
Fechaorigen: Fecha del documento origen.
Cantidadorigen: Cantidad de la línea de origen.
Cantidadorigenreal: Cantidad real de la línea de origen(compuestos).
Referenciaproveedor: Referencia del proveedor.
Codbarras: Código de barras.
Nombreoriginal: Nombre original del artículo.
Unidadarticulo: Unidad del artículo.
Unidaddecarticulo: Decimales unidad del artículo.
Preciodecarticulo: Decimales de precio del artículo.
FUNCIONAMIENTO DE LA FUNCIÓN ESCRIBIR DEL EVALUADOR
La función Leer tiene la siguiente sintaxis: Escribir(Entidad;Campo;Valor;Filtro).
Entidad: Indica la tabla de la cual vamos a leer los datos, es decir, si queremos escribir un dato de la tabla de clientes tendremos que colocar en entidad cliente.
Campo: Indica el campo que vamos a leer de la tabla. Siempre será un campo actual es decir no podemos escribir un campo de una tabla que no estemos editando. Si lo que queremos es escribir un dato adicional colocaremos en este campo el nombre del dato adicional.
Valor: Valor que vamos a escribir en el campo.
Filtro: Este campo sólo se utiliza en los documentos para indicar la línea en la que queremos escribir.
Campos especiales para las líneas de documentos:
Nombrearticulo: Nombre del artículo.
Codarticulo: Código del artículo.
Cantidad: Cantidad del artículo.
Coste: Precio de coste del artículo.
Precio: Precio del artículo.
Porcentajecomision: Porcentaje de comisión.
Descuentos: Descuentos en forma de cadena.
Iva: Porcentaje de iva.
Recequiv: Porcentaje de recargo de equivalencia.
Irpf: Porcentaje de irpf.
Costepuntoverde: Coste punto verde.
Referenciaproveedor: Referencia del proveedor.
15. Funciones varias
Función Resultado Descripción
Mensaje(
Pregunta(
Confirma(
Error(
SiguienteControl(
AnteriorControl(
Imprimir(
PararImpresion Nada Para de imprimir el formato actual
ResultadoNada() Nada Evalúa el bloque de código (especificado entre llaves) y descarta el valor de resultado, devolviendo "nada"
cumplerestricción(
Clona(
Formato de máscaras para números
Una máscara para números es un texto que indica la forma de presentar un número, y puede estar formada por los siguientes especificadores:
"0" Indica la posición de un dígito. Si el valor que se está formateando tiene un dígito en la posición donde el "0" aparece en la máscara, entonces se muestra ese dígito. Si no, se muestra un "0" en esa posición.
"#" Indica la posición de un dígito. Si el valor que se está formateando tiene un dígito en la posición donde el "0" aparece en la máscara, entonces se muestra ese dígito. Si no, no se muestra nada en esa posición.
"." Separador decimal. El primer caracter "." en la máscara determina la posición del separador decimal en el valor presentado. Cualquier "." adicional se ignora.
"," Separador de miles. Si la máscara contiene algún caracter ",", el valor presentado tendrá separadores de miles cada tres dígitos a la izquierda del separador decimal. La ubicación y la cantidad de "," en la máscara no afecta al resultado.
"e+" Notación científica. Si cualquiera de los textos "e+", "e-" aparecen en la máscara, el número es presentado utilizando notación científica. Puede agregarse a estos símbolos un grupo de hasta cuatro "0", para indicar el mínimo número de dígitos del exponente. El especificador "e+" muestra siempre el signo del exponente, ya sea positivo o negativo, pero el especificador "e-" sólo muestra el signo si es negativo.
'xx' ó "xx" Los caracteres encerrados por comillas simples o dobles se muestran tal como se indican, y no afectan al formato. Lo mismo ocurre si utilizamos cualquier caracter que no sea un especificador de la presente lista.
";" Separa las secciones para números positivos, negativos o ceros en la máscara.
Notas
-
El número se presenta siempre redondeado a la máxima cantidad de decimales indicados por los "0" ó "#" a la derecha del separador decimal. Si la máscara no contiene el separador decimal, el número se redondeará al entero más cercano.
-
Si el número tuviera más dígitos que los indicados en la máscara, estos dígitos se presentarán a la izquierda del primer "0" ó "#".
-
Para permitir diferentes máscaras para valores positivos, negativos y ceros, la máscara puede contener entre una y tres secciones separadas por ";". - Una sección: La máscara se aplica a todos los valores - Dos secciones: La primera se aplica a valores positivos y ceros, y la segunda a negativos - Tres secciones: La primera se aplica a valores positivos, la segunda a negativos, y la tercera a ceros
-
Si la máscara está vacía, o no se especifica máscara, el valor se presenta utilizando la siguiente máscara por defecto: ",0.#####". Es decir, con separador de miles, y con hasta cinco decimales, presentando siempre el cero pava valores menores a uno.
-
En cualquier caso, si hubiera más de 18 dígitos a la izquierda del separador decimal, se presentará el número en notación científica, aunque no se haya especificado.
Ejemplos
Valores 1234 -1234 0,5 0
"" 1234 -1234 0,5 0
"0" 1234 -1234 1 0
"0.00" 1234,00 -1234,00 0,50 0,00
"#.##" 1234 -1234,5
"#,##0.00" 1.234,00 -1.234,00 0,50 0,00
"#,##0.00;(#,##0.00)" 1.234,00 (1.234,00) 0,50 0,00
"#,##0.00;;Cero" 1.234,00 -1.234,00 0,50 Cero
"0.000E+00" 1,234E+03 -1,234E+03 5,000E-01 0,000E+00
"#.###E-0" 1,234E3 -1,234E3 5E-1 0E0
Formato de máscaras para fechas
Una máscara para fechas es un texto que indica la forma de presentar una fecha, y puede estar formada por los siguientes especificadores:
d Muestra el día como un número de uno o dos dígitos (1-31) dd Muestra el día como un número de dos dígitos (01-31) ddd Muestra el nombre abreviado del día de la semana (lun,mar,mié,jue,vie,sáb,dom) dddd Muestra el nombre completo del día de la semana (lunes-domingo) ddddd Muestra la fecha con formato dd/mm/yyyy dddddd Muestra la fecha usando el formato de fecha larga definido en Windows Normalmente: dddd, dd' de 'mmmm' de 'yyyy m Muestra el mes como un número de uno o dos dígitos (1-12) mm Muestra el mes como un número de dos dígitos (01-12) mmm Muestra el nombre abreviado del mes (ene-dic) mmmm Muestra el nombre completo del mes (enero-diciembre) yy Muestra el año como un número de dos dígitos (00-99) yyyy Muestra el año como un número de cuatro dígitos (0000-9999) / Muestra el separador de fecha que se haya definido en Windows (normalmente la barra, "/") 'xx' ó "xx" Los caracteres encerrados por comillas simples o dobles se muestran tal como se indican, y no afectan al formato.
Formato de máscaras para horas
Una máscara para horas es un texto que indica la forma de presentar una hora, y puede estar formada por los siguientes especificadores:
h Muestra la hora del día como un número de uno o dos dígitos (0-23) hh Muestra la hora del día como un número de dos dígitos (00-23) n Muestra el minuto como un número de uno o dos dígitos (0-59) nn Muestra el minuto como un número de dos dígitos (00-59) s Muestra el segundo como un número de uno o dos dígitos (0-59) ss Muestra el segundo como un número de dos dígitos (00-59) t Muestra la hora con formato "hh:nn" tt Muestra la hora con el formato definido en Windows (normalmente "h:nn:ss") am/pm Usa formato de 12 horas con el especificador h o hh precedente, y muestra 'am' o 'pm' según corresponda. El am ó pm del resultado se mostrará en mayúsculas, minúsculas o ambas según estén en el especificador. a/p Usa formato de 12 horas con el especificador h o hh precedente, y muestra 'a' o 'p' según corresponda. El a ó p del resultado se mostrará en mayúsculas o minúsculas según esté el especificador. : Muestra el separador de hora que se haya definido en Windows (normalmente los dos puntos, ":") 'xx' ó "xx" Los caracteres encerrados por comillas simples o dobles se muestran tal como se indican, y no afectan al formato.
Funciones específicas de SQL Conta
Función Resultado Descripción
PreguntaMeses Texto Muestra un cuadro de diálogo solicitando los períodos, y devuelve una lista de períodos, que puede utilizarse en la función [ ] (ver más abajo)
DatoEmpresa(
Formula(
Formula(
[
[ D|H|S ] Número Debe, haber o saldo de la lista de cuentas . Si no se especifica , se asume el total del ejercicio [ N [ C Listas de cuentas Los elementos que conforman una lista de cuentas, son los siguientes: Puede anteponerse a una cuenta o rango uno de los siguientes modificadores: - Devuelve el resultado, cambiado de signo P Devuelve el resultado, sólo si es positivo N Devuelve el resultado, sólo si es negativo La lista de cuentas estará formada por una o más cuentas o rangos, separados por ";". Ejemplos "430" Cuenta 430 "400-430" Cuentas de la 400 a la 430 "400-430;-472" Cuentas de la 400 a la 430, más la cuenta 472 cambiada de signo "P400-430;472" Cuentas de la 400 a la 430 sólo si son positivas, más la cuenta 472 Listas de períodos Los elementos que conforman una lista de períodos, son los siguientes: Ejemplos "AP;1;3": Asiento de apertura, enero, marzo "AP-REG": Desde asiento de apertura hasta regularización "": Todos los períodos ";": Ningún período Funciones específicas de SQL Pyme para impresión de documentos El sistema de impresión de documentos de SQL Pyme proporciona dos objetos que permiten indicar fórmulas, definiendo todas las variables indicadas en la parte derecha del editor de formularios. Estos objetos son: DocumentoFórmula La fórmula se evaluará una vez para cada objeto y página. Si existen varias órdenes, separadas por ";", se procederá normalmente, devolviendo el resultado de la última orden. Las funciones adicionales disponibles en este contexto son: DatoAdicional Se explica más adelante ArtículoFórmula La fórmula se evaluará una vez para cada línea del documento. Si existen varias órdenes, separadas por ";", se evaluará cada orden por separado, agregando el resultado de cada una al cuerpo del documento. Las funciones adicionales disponibles en este contexto son: DatoAdicional Se explica más adelante ArtículoCaracterística Se explica más adelante ArtículoDocOrigenDatoAdicional Funciona como DatoAdicional, pero obtiene los datos del documento de origen de la línea actual CambióOrigen Si el origen de la línea actual ha cambiado con respecto a la anterior, la función devuelve Cierto, y si no, devuelve Falso F<n> Cambia la fuente actual a la de índice <n> I<n> Cambia la indentación actual a <n> centímetros S<n> Inserta <n> líneas a esta columna, e inserta líneas en blanco a todas las demás columnas hasta quedar a la altura de ésta. ENTER Inserta una línea en blanco ORIGEN Si el origen de esta línea ha cambiado con respecto a la anterior, devuelve: "De <tipo> Nº <serie>-<número> del <fecha>:" DatoAdicional(<entidad>;<formato>;<dato>) Esta función permite obtener información sobre los datos adicionales de las entidades. Los parámetros son: Ejemplos DatoAdicional("Cliente"; "El valor de%n es%v") podría devolver la siguiente lista El valor de Ultima visita es 12/01/2001 El valor de Garantía es Sí El valor de Importe de la póliza es 12.500 DatoAdicional("Artículo"; "%v"; "Garantía") podría devolver el siguiente valor 6 meses Funciones equivalentes Para una mayor comodidad de uso, se han definido las siguientes funciones equivalentes: En documentos DocumentoDatoAdicionalNombre( En órdenes de fabricación DatoAdicionalNombre( ArtículoCaracterística( Esta función permite obtener información sobre las características indicadas en las líneas de los documentos. Los parámetros son: Ejemplos ArtículoCaracterística("%p") podría devolver la siguiente lista Talla 36, Color Rojo Talla 36, Color Negro Talla 38, Color Negro Lote 18 Lote 20 Lote 22 ArtículoCaracterística("%p:%c", "Talla-Color") podría devolver la siguiente lista Talla 36, Color Rojo: 12,5 Talla 36, Color Negro: 27,0 Talla 38, Color Negro: 11,4 ArtículoCaracterística("%n%v =%c%u", "Lotes") podría devolver la siguiente lista Lote 18 = 5,2 Kg Lote 20 = 12,4 Kg Lote 22 = 0,7 Kg ArtículoCaracterística("%p", "Talla-Color", "36") podría devolver la siguiente lista Talla 36, Color Rojo Talla 36, Color Negro ArtículoCaracterística("%p", "Talla-Color", "", "Negro") podría devolver la siguiente lista Talla 36, Color Negro Talla 38, Color Negro ArtículoCaracterística("%p", "Talla-Color", "", "", "Color") podría devolver la siguiente lista Talla 36, Color Negro Talla 38, Color Negro Talla 36, Color Rojo Funciones equivalentes Para una mayor comodidad de uso, se han definido las siguientes funciones equivalentes: ArtículoCaracterísticaNombre(...) = ArtículoCaracterística("%n";...) ArtículoCaracterísticaValor(...) = ArtículoCaracterística("%v";...) ArtículoCaracterísticaPar(...) = ArtículoCaracterística("%p";...) ArtículoCaracterísticaCantidad(...) = ArtículoCaracterística("%c";...) ArtículoCaracterísticaUnidad(...) = ArtículoCaracterística("%u";...) EJEMPLOS PRÁCTICOS DE SCRIPTS En la siguiente relación hacemos mención a algunos ejemplos que se pueden realizar con los scripts para poder visualizar su funcionamiento y la potencia que alcanzan. MOSTRAR LA UBICACIÓN DEL ALMACEN EN LOS FORMATOS DE IMPRESIÓN. Dentro de los formatos de impresión tenemos una serie de variables para imprimir. Puede ocurrir que alguno de los campos que quiero imprimir no esté dentro de esas variables. Ahora con los scripts nos permite leer cualquier campo de cualquier tabla por lo que ya no necesitaré que exista como variable. Un ejemplo sería sacar la ubicación del almacén de los artículos. Esa variable no existe en el formato por lo que haríamos el siguiente script: Leer("Existenc"; "Ubicacion"; "CodArticulo='" + ArtículoCódigo + "' and CodAlmacen = '"+ EnTexto(ArtículoAlmacénCódigo) + "'"); Este script lo tendríamos que poner dentro de la variable ArtículoFórmula del formato de impresión y en la posición que quisiéramos. En el indicamos que tabla queremos leer en este caso Existenc que es la tabla de almacén, el campo que queremos leer la Ubicación, y la restricción que hacemos que será que codarticulo que es de la tabla de existencias es igual al campo artículocodigo del formato de impresión y lo mismo con el codalmacen que es igual a la variable artículoalmacencódigo. RELLENAR UN DATO ADICIONAL DE CABECERA CON LA PERSONA DE CONTACTO DEL CLIENTE Podemos crear un dato adicional de cabecera, por ejemplo le llamamos Contacto y que ese campo se rellene automáticamente con un dato de otra tabla, por ejemplo el campo persona de contacto de la tabla de clientes. Este script lo colocaríamos en la casilla del cliente del formato de edición en salida para que cuando salga de esa casilla me rellene el dato adicional. El script sería el siguiente: Cod_Cliente=Leer("DocCab";"Actual.CodCliente";""); PersonaContacto=Leer("Domicili";"PersonaContacto";"Tipo=0 and Codtipo=1 and codigo=" + Formatea("#";Cod_Cliente)); Escribir("CarValor";"Actual.Contacto";PersonaContacto;""); En este script lo que hacemos es dividir en dos, creando 1º las variable y luego lo que sería el propiamente el script con las variables que hemos creado. Creamos la variable codcliente donde le decimos que lea el codigo actual del cliente de la tabla de cabecera de documentos. A continuación creamos persona de contacto y también que lo lea pero de la tabla de domicilios que es donde se encuentra la persona de contacto. Por tanto leemos domicili, lo siguiente el campo que queremos leer PersonaContacto y a continuación ponemos la restricción que este caso le decimos que tipo=0 que significa que es de clientes el domicilio(si fuera 1 sería para proveedores) el codtipo=1 que es la 1ª dirección que hemos creado y le decimos que el codigo de la dirección es igual al codigo del cliente que fue la 1ª variable que creamos. Por último queremos que ese dato que estamos leyendo lo escriba en el dato adicional que hemos creado, por lo que hacemos la sentencia escribir, ponemos en que tabla, en este caso carvalor, como se llama el campo(contacto) y le ponemos actual porque queremos que nos rellene el campo del documento que estamos haciendo no el de todos. Y por último el valor del dato que queremos escribir que sería la variable anteriormente calculada. Las últimas comillas serían par si queremos hacer un filtro que en este caso no es necesario. CREAR UNA SERIE DISTINTA POR CADA PROVEEDOR Otra opción que tenemos es que en función del código del proveedor me asigne automáticamente una serie para controlar la facturación o numeración de las facturas de mis proveedores. El script lo colocaría a la salida de la casilla del proveedor.En este caso el script sería el siguiente: Codcliente=leer("Doccab";"Actual.Codcliente";""); Escribir("DocCab";"Actual.Serie";EnTexto(codcliente);""); Sería un script muy sencillo donde sólo leemos el código del proveedor y lo escribimos en la serie actual.Este script se colocaría en la salida del campo del proveedor para que al salir del campo rellene la serie. MOSTRAR PRECIO STANDARD EN LOS DOCUMENTOS Otro ejemplo que podríamos tener es en los documentos de venta. Cuando metemos un cliente nos sale el precio que le tenemos estipulados y nos puede interesar además visualizar el precio Standard del artículo. Para ello podemos crear un dato adicional que sea Precio Standard donde ponga automáticamente el precio de la ficha del artículo cada vez que venda uno. El script sería el siguiente: cod_articulo=Leer("DocLin";"Actual.Codarticulo";""); precio=Leer("articulo";"precioventa";"codigo='" + cod_articulo+"'"); Escribir("DocCar";"Actual.Precio Standard";Formatea(",0.00";precio);""); Este script lo pondríamos a la salida del campo de artículo, nombre y código de barras para que si busco un artículo por cualquier de esos campos al salir me rellene el dato adicional. CONSERVAR EL PRECIO QUE SE MODIFICA Otra opción que nos da los scripts se refiere a conservar el precio en un documento cuando se modifica. Si se le cambia manualmente el precio en un documento, cuando vuelvo a modificar la cantidad vuelve a recalcularlo para ver si tiene condiciones. Para evitar que una vez modificado el precio lo cambie cuando le introduzca la cantidad podría realizar los siguiente: En la casilla de cantidad del formato de edición en entrada pondría lo siguiente: Valor_anterior=Leer("Doclin";"Actual.Precio";""); Y en la casilla de salida: Escribir("Doclin";"Actual.Precio";EnTexto(valor_anterior);""); De esa manera conservaría el precio que hubiese variado. ETIQUETAS CON PRECIOS POR CARACTERÍSTICAS Este script esta en un formato de impresión de etiquetas. Sirve para sacar el precio por caracteristica. cod_tipo_iva=Leer("Articulo";"TipoIva";"codigo='" + Código+"'"); campo_iva= "IVA" + EnTexto(cod_tipo_iva+1); porcentaje_iva=Leer("Empresa";campo_iva;""); si Característica<>"" y CuantosRegistros("venta"; "codarticulo='" + Código + "' and codcaract=2 and valorcaract='" + Característica + "'")<>0 entonces {Formatea(",0.00";Leer("venta";"precio";"codarticulo='" + Código + "' and codcaract<>'' and valorcaract='" + Característica + "'")((porcentaje_iva/100)+1))} sino {Formatea(",0.00";PrecioConIva)}; ESTADO DE UN DOCUMENTO El siguiente script pone a SI un dato adicional de albarán (FACTURADO), para poder luego realizar busquedas por dato adicional de aquellos documentos que tengan el valor del dato adicional a NO. En Archivo / Tablas Auxiliares creamos un dato adicional de documento que se llama ESTADO y de tipo texto, indicamos que lo solicite en albaranes. En la configuración del formato de edicion de albaranes (con el botón derecho sobre el albaran vamos a la opcion de configurar), ponemos el dato adicional ESTADO a visible y como valor por omision NO. Con esto conseguiremos que cada vez que creemos un albarán este se visualize en la lista. Una vez configurado el formato de edición del albarán pasamos a la configuración del formato de impresión de la factura, añadiendo el script correspondiente, para que a la hora de reemitir la factura, pasar albaranes a factura o realizar el proceso de facturación de albaranes este se ejecute y por lo tanto se marque el albarán. Deberemos de tener en cuenta que si disponemos de varios formatos de factura este script deberá añadirse en todos. Deberemos tener en cuenta que si realizamos un proceso de anulación de emisión de facturas, el dato adicional ESTADO seguira teniendo el valor SI, pues el script no se ejecutará. El siguiente script se introducirá dentro de un campo artículo formula, en principio el usado para imprimir la descripción del articulo. Podremos dar de alta si asi lo deseamos un nuevo campo ArtículoFormula: Escribir("CarValor";"Valor";"'SI'";"codclase=1 and codcaract=5 and codobjeto='" + EnTexto(Formatea("0";Leer("DocCab";"Codigo";"serie=" + "'" + ArtículoDocOrigenSerie + "'" + " and numero=" + EnTexto(ArtículoDocOrigenNúmero) + " and tipo=2")))+"'"); Donde: CodCaract; Es el codigo del dato adicional ESTADO. Tipo; Especifica el tipo del documentos (este script se creo para aquellos albaranes que se pasen a pedido, si deseamos ampliar esta configuación a otro tipo de documentos deberemos de tener en cuenta este campo). SUMA DE UN DATO ADICIONAL DE LÍNEA Este script va acumulando el valor de un dato adicional de linea en un dato adicional de documento El script lo introducimos en el dato adicional de línea. Tendremos un dato adicional de cabecera que es peso total y un dato adicional de línea que será peso. De esta manera el peso que vayamos introduciendo en cada línea lo irá sumando y lo pondrá en la casilla de la cabecera como peso total. En la entrada del dato adicional de línea pondremos: peso_anterior=Leer("DocCar";"Actual.PESO";""); peso_total=Leer("CarValor";"Actual.PESO TOTAL";""); Y en la salida: peso_articulo=Leer("DocCar";"Actual.PESO";""); peso_total=peso_total-peso_anterior+peso_articulo; Escribir("CarValor";"Actual.PESO TOTAL"; Formatea("0.00";peso_total);""); OBTENER DATOS CON LEER USANDO POSICIONAMIENTO RELATIVO Para obtener el número de líneas del documento actual sería así: Leer(“DOCLIN”;”Actual.CuantasLíneas”;) Para obtener la posición de la línea en la que estamos: Leer(“DOCLIN”;”Actual.NúmeroLínea”;””) Para leer el nombre de la línea 5 (siempre se empieza a contar en 1): Leer(“DOCLIN”;”Actual.Nombre”;”5”) Para leer el nombre de 5 líneas a partir de la actual: Leer(“DOCLIN”;”Actual.Nombre”;”+5”)
ANT: Resultado del ejercicio anterior
AP: Asiento de apertura 1 a 12: Meses del año, 1=Enero, 2=Febrero,..., 12=Diciembre
REX: Asiento de regularización de existencias
REG: Asiento de regularización
CIE: Asiento de cierre La lista de períodos puede estar formada por uno o más elementos, separados por ";", o por un rango de elementos, separados por "-".
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.