SCRIPTS DE CAMPOS
La nueva versión de OBRAS 3.0, incorpora la posibilidad de lanzar procesos a la entrada o salida de campos. Para ello se ha habilitado la correspondiente función en los formularios de edición de pantalla, disponiendo al mismo tiempo de toda la potencia ya presentada en el evaluador (formatos de impresión).
Una vez abierto el formulario de edición de pantalla, pulsando el botón martillo de la barra de herramientas, podremos hacer doble click en cualquier campo de la columna Valor por omisión, apareciendo el botón de script a su derecha. Una vez pulsado este, se abrirá el formulario de introducción de procesos relacionados con el campo, tanto para la entrada como salida del mismo.
Los comandos y estructura del lenguaje a utilizar son los presentados en el Evaluador, común a otros apartados del programa como por ejemplo los formatos de impresión. Añadiendo a este dos nuevas funciones que se describen a continuación.
FUNCIONAMIENTO DE LA FUNCIÓN LEER DEL EVALUADOR
La función Leer tiene la siguiente sintaxis: Leer(Entidad;Campo;Filtro).
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.
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...).
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. 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.
FUNCIONAMIENTO DE LA FUNCION “ RESULTADONADA ” DEL EVALUADOR
Está función se usa únicamente en el formato de impresión y su sintaxis es la siguiente:
ResultadoNada({script});
Donde script: se sustituye por el script que nosotros deseamos y lo que devuelva no se imprime en el formato de impresión
Ejemplo : ResultadoNada({verdadero=0});
En este ejemplo verdadero no se imprimiría pudiendo usar la variable en el resto del documento.
FUNCIONAMIENTO DE LA FUNCION “OBTLISTASQL” DEL EVALUADOR
Está función devuelve una lista con todos los valores devueltos por una sentencia SQL. Esta función se puede usar tanto en el formato de impresión como en el formato de edición. Su sintaxis es la siguiente:
ObtListaSql(“sentencia sql”);
Donde sentencia SQL se sustituirá por la sentencia SQL deseada :
Ejemplo: ObtListaSql(“select codigo from articulo”);
Este ejemplo devuelve una lista con todos los códigos de artículos.
FUNCIONAMIENTO DE LA FUNCION EJECUTARSQL DEL EVALUADOR
Está función ejecuta la SQL que le pase como parámetro. Su sintaxis es la siguiente:
EjecutarSql(“sentencia sql”);
Donde sentencia SQL se sustituirá por la sentencia SQL deseada.
Ejemplo: EjecutarSql(“delete from venta where codarticulo=’” + CodigoArticulo + “’”);
Este ejemplo realiza un borrado de la tabla de artículos.
FUNCIONAMIENTO DE LA FUNCION IMPRIMIR DEL EVALUADOR
Esta función se usa para llamar a otro formato de impresión. Su sintaxis es la siguiente:
Imprimir(‘ruta formato”);
Donde ruta formato se sustituirá por la ruta del formato que queremos imprimir.
Ejemplo: Imprimir(‘c: \distrito\OBRAS\ ventas.fmt’);
Si estamos imprimiendo con el formato de impresión ventas2.fmt y dentro de un DocumentoFormula introducimos esta función cuando el OBRAS 3.0 encuentre dicha función comenzará a imprimir con el formato ventas.fmt. Cuando finalice la impresión de ventas.fmt volverá a ventas2.fmt y continuará con la impresión de las variables que no se hubiesen impreso.
FUNCIONAMIENTO DE LA FUNCION PARARIMPRESION DEL EVALUADOR
Sirve para parar la impresión en el momento deseado su uso suele ir acompañado del uso de la función Imprimir. Su sintaxis es la siguiente:
PararImpresión:
Ejemplo: Imprimir(‘c: \distrito\OBRAS\ ventas.fmt’);
PararImpresión;
Con este ejemplo veíamos que OBRAS 3.0 empezaba con la impresión de ventas.fmt y volvía para finalizar con la impresión de ventas2.fmt, Si después de la función Imprimir colocamos PararImpresion, en ventas2.fmt no se continuará imprimiendo las variables que quedasen pendientes.
FUNCIONAMIENTO FUNCIONES SIGUIENTECONTROL Y ANTERIORCONTROL DEL EVALUADOR
Estas funciones se usan en el formato de edición y sirve para pasar el foco a un determinado campo del formato de edición, teniendo en cuenta que si el campo destino tiene un script este se ejecutará. Su sintaxis es la siguiente:
AnteriorControl(número de controles a saltar);
SiguienteControl(número de controles a saltar);
Ejemplo: AnteriorControl(4);
SiguienteControl(4);
Si en nuestro formato de edición tenemos los campos de cabecera en el orden que se muestran en la figura y nosotros estamos situados en el campo Agente (donde se encuentra la función de ejemplo) el cursor se desplazará al campo número.
El funcionamiento es análogo para la función SiguienteControl en el caso de estar en el campo número el foco saltaría al campo Agente.
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);"");
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.