ene 31

Libro de V7

Posted in tutores

Aqui os dejo un recopilatorio con todos los capitulos publicados durante las fiestas navideñas:

Indice y presentación. (24 – diciembre – 2010)

Capitulo 1: El entorno de trabajo. (25 – diciembre – 2010)

Capitulo 2: Sitios y cajas (proyectos). (26 – diciembre – 2010)

Capitulo 3: Analisis del proyecto. (27 – diciembre – 2010)

Capitulo 4: El proyecto de datos. (28 – diciembre – 2010)

Capitulo 5: Iniciar el desarrollo. (29 – diciembre – 2010)

Capitulo 6: El aspecto visual. (30 – diciembre – 2010)

Capitulo 7: El asistente de formulas. (31 – diciembre – 2010)

Capitulo 8: Procesos (y eventos). (1 – enero – 2011)

Capitulo 9: Informes y más (2 – enero – 2011)

Capitulo 10: Controlar el stock (3 – enero – 2011)

Capitulo 11: Facturación (4 – enero – 2011)

Anexos. (5 – enero – 2011)

En este articulo están disponibles todas las descargas a todos los capitulos.

Espero que haya sido de vuestro agrado.

PDF Creator    Enviar artculo en formato PDF   
comments: 6 »
ene 25

Favoritos en ejecución

Posted in ejercicios

Si ya habeis realizado el ejercicio de ayer, ahora solo debeis realizar unos sencillos pasos para poder ejecutar la aplicación:

  1. Ejecutar vAdmin para Instanciar la aplicación, y dar permisos de ejecución a los usuarios
  2. Ejecutar vClient para tener acceso a la aplicación y poder realizar las primeras pruebas

Aqui os dejo una imagen para el recuerdo, de los inicios del blog, en las pruebas realizadas con este sencillo ejemplo.

Y otra prueba mas de que el ejemplo funciona,

Para tener acceso a todas estas webs, solo debes pulsar sobre la rejilla con el botón derecho del ratón y añadir o modificar los registros de la misma. Despues, solo debes seleccionar un registro y se visualizará la web automáticamente.

¡¡¡ Nos vemos en la vCena !!! 😀

PDF    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Favoritos en ejecución
ene 24

Marcadores o favoritos

Posted in ejercicios

Dependiento del navegador en que nos encontremos, una de las opciones mas usadas en cualquiera de ellos es la opción de Favoritos o de Marcadores, que viene a ser, un registro de las paginas web que visitamos con bastante frecuencia.

Y precisamente porque es algo tan habitual, en esta ocasión, he decidido realizar un pequeño y sencillo ejercicio para obtener el mismo resultado, en una aplicación de V7.

Bueno, precisamente el mismo, quizá no, os dejo a vosotros la tarea de darle un estilo agradable. Pero al menos, si vamos a tener la misma funcionalidad al finalizar el ejercicio.

Empecemos pues:

En primer lugar necesitamos 2 proyectos, uno de datos y otro de aplicación, como vemos en la imagen del margen superior derecho.

En el proyecto de datos, solo vamos a utilizar 2 objetos, una VARIABLE global de tipo númerica como se aprecia en la siguiente imagen.

Y también una tabla, cuya estructura vemos a continución, y en la que vamos a guardar toda la lista de favoritos que visitamos habitualmente.

Ya está, ya tenemos el proyecto de datos finalizado.

Pues comencemos con el proyecto de aplicación, que la verdad, tampoco es mucho mas complicado:

Primero, vamos a crear una rejilla y un formulario para el mantenimiento de la tabla que usaremos para almacenar nuestras URL’s

A continuación teneis el formulario y sus propiedades. No voy a entrar en detalles sobre como incluir los cotroles de edición y los botones, que eso ya es muy básico.

Y luego creais la rejilla y le asignais el formulario para Altas, Modificación y Bajas. También podeis crear un formulario para cada cosa, eso ya es decisión vuestra.

Ahora viene la parte interesante, en la que debemos mostrar las paginas web, al pulsar sobre un registro de la rejilla.

Para eso vamos a utilizar un formulario principal, donde visualizaremos el resultado. En este formulario, necesitamos mostrar la rejilla de favoritos y un control “Visor Html” para mostrar la pagina web seleccionada.

Para mostrar la rejilla necesitamos un proceso, sin origen (igual que el formulario) y cargamos la lista de favoritos y retornamos la lista con el resultado.

Para nuestro formulario principal, he decidido que será suficiente con mostrar la rejilla a la izquierda para seleccionar la web favorita, y el visor Html a la derecha para mostrar la pagina web. Y a continución, podeis ver el resultado.

En este formulario principal, ya solo nos queda por hacer 2 operaciónes:

  1. Crear el evento que se ejecutará al seleccionar el registro de favoritos y
  2. Crear una conexión de evento para que se ejecute el evento en el momento apropiado, al pinchar con el ratón sobre cualquier registro de la rejilla.

Aqui teneis el evento y la conexión de evento:

Ahora ya solo nos queda una cosa para terminar el ejercicio y poder ejecutarlo. ¿Que?

Pues crear el AUTOEXEC  y asignarle el formulario anterior,

En ejecución, solo necesitaras crear algunos registros sobre la rejilla, y luego podrás comprobar como al cambiar la selección sobre la rejilla, se actualiza automaticamente la página web deseada.

PDF    Enviar artculo en formato PDF   
comments: 7 »
ene 21

De donde vienen los bebes?

Posted in humor

Las cigüeñas, las flores, la semilla en la tierra….. eso está desfasado

” SEAMOS MODERNOS “

Un día, un hijo le pregunta a su padre: ¿Papá, como nací yo?

El padre ve que ha llegado el gran día y le dice: Mira hijo algún día teníamos que hablar de esto, así que siéntate que te lo voy a explicar.

Un día Papá y Mamá se conectaron a Facebook

Papá le mando a Mamá un email para verse en un cybercafé.

Notaron que tenían muchas cosas en común y se entendían muy bien.

Papá y Mamá, decidieron entonces compartir sus archivos.

Se metieron disimuladamente en el W.C. y Papá introdujo el Pendrive en el puerto USB de Mamá.

Cuando comenzaron a descargarse los archivos, se dieron cuenta que no tenían Firewall, por lo que ya era muy tarde para cancelar la descarga e imposible borrar los archivos.

Por lo que de esa manera a los nueve meses……… ¡¡¡¡ Apareció un VIRUS !!!!

PDF    Enviar artculo en formato PDF   
comments: 1 »
ene 19

Acceso a bases de datos externas existentes

Posted in foro, ideas, MySQL

En este hilo del foro, se comentan algunas cosas interesantes, y me gustaria aclarar y dar mi punto de vista

Crear aplicaciones sobre una base de datos existente

Velneo, en su modelo de “Base de Datos Real”, algo que la diferencia de las bases de datos relacionales como MySQL, PostgreSQL, SQLite, Oracle, MS-SQL, tiene muchas ventajas y algunos inconvenientes.

No voy a centrarme en esta ocasión en verificar cual de estas bases de datos obtiene mejores rendimientos, ya que no es el tema que se debate en esta ocasión.

El tema en cuestión, es que cada uno debe valorar las ventajas que les reporta una base de datos y los inconvenientes, y despues, agitarlo todo en una cocktelera, y tomar una decisión al respecto.

Desde que conoci Velazquez Visual, ahora Velneo, una de las cosas que mas me ha gustado, y de las que uno menos suele valorar con el paso del tiempo (quizá por la costumbre), ha sido la refactorización, y la facilidad con que podia realizar cualquier cambio en la estructura de la base de datos, sin tener que preocuparme de nada en absoluto.

Cuando llegue a Velazquez Visual (alla por el 97/98), venia precisamente de SQL (Multibase – Transtools), y aunque la base de datos funcionaba estupendamente en SQL, la empresa dejó de mantener las actualizaciones periodicas que realizaban (semestralmente). Durante casi 3 años estuve, probando otras herramientas, y por fin, en una revista especializada, vi el anuncio de Velazquez Visual, y decidi pedir una demo.

Desde que la instale, me sorprendio la facilidad con que se realizaban las actualizaciones en los datos, y la cantidad de tiempo que me ahorraba en mis actualizaciones a los clientes. Desde entonces, han ido apareciendo muchas novedades, algunas muy interesantes y llega un momento en que incluso podria haber olvidado toda la comodidad que habia ganado.

Cuando Velazquez Visual parecia que iba a desaparecer, volvi a buscar otras herramientas, y de nuevo el mismo problema, despues de evaluar varias herramientas, decidi que no queria perder la comodidad que habia tenido todos estos años.

La presentación de la V7 fue una luz en el camino, y decidi que habia que seguir esa luz.

Si bien es verdad que me he quejado mucho, siempre lo he echo para que Velneo respondiera, con la unica intención de mejorar la herramienta. Y parece que ese cambio se está produciendo, quizá mas lento de lo que todos deseariamos, pero veo como las cosas cambian, para mejor, y eso me gusta.

Volviendo a lo que nos pedia “Cjribera” en el foro, es cierto que todo el esfuerdo de Velneo esta pensado en su propia base de datos, y aunque el acceso a bases de datos externas, es posible, siempre se echa algo en falta.

Para estos casos, yo he decidido que hay que protestar y pedir y aportar ideas y/o soluciones, porque si no pido lo que necesito, si no me quejo por lo que no me gusta, ¿como van a saber en Velneo mis problemas?

Ahora despues de analizar estas peticiones, estoy pensando que me parecen muy interesantes, pero he querido llegar un poco mas alla, y he pensado, ¿como podriamos tener acceso a otras bases de datos? o dicho ¿como podriamos tener objetos de V7 asignados a tablas de bases de datos externas?

Y he tenido un pequeño “flash”, y he visto una posible solución al problema para poder usar bases de datos externas manteniendo lo bueno de Velneo, la refactorización.

Primero pense, asociar cada uno de los objetos a una “tabla SQL“, formularios, rejillas, busquedas, tubos, procesos, es complicado, cada vez que se produzca un cambio en la base de datos externa, los objetos dejarian de estar enlazados y se producirian cantidad de errores.

Entonces, como solucioarlo …   ¡¡ thinking !!

… y unos minutos despues, una idea,

Podriamos crear “Tablas lógicas“, con estructura similar a las tablas de la base de datos SQL (basicamente copias de las tablas), y asi podriamos asociar los objetos a estas tablas lógicas, manteniendo toda la operatividad que tenemos ahora.

Esta idea, permitiria mantener la refactorizacion entre los objetos de Velneo y las “tablas lógicas”. Cierto es , que si se produce un cambio en la estructura de datos de SQL, deberiamos corregirlo tambien en la “tabla lógica” para que los objetos se adaptasen correctamente, pero en cualquier caso, solo habria que corregir la estructura de campos de la tabla, evitandonos realizar correcciones en todos los objetos.

Luego segui soñando, y por soñar, que no quede…

Ya que tenemos esta “tabla lógica“, porque no tener toda la funcionalidad completa, ¿que quiero decir con esto?,

Pues que, ya puestos, y con las tablas sincronizadas, entre SQL y Velneo, realizar un alta en la “tabla lógica“, o una modificación o una baja, porque no mantener actualizada la tabla SQL, diretamente, ¿no es eso lo que hace ODBC?

Pero en este caso, realizando altas, modificaciones, bajas, o búsquedas directamente con sentencias de Velneo sobre las “tablas lógicas“.

Luego de soñar todo, viene un pajarito y me dice ¿porque te complicas tanto la vida?, todo esto puede ser mas sencillo aún. ¿Como?, y el pajarito me respondio:

A la definición de tablas actual, bastaria con añadir una propiedad “Conector”, que nos permitiera indicar a que base de datos vamos a realizar la conexión: Velneo V7 (interna), a MySQL, a PostgreSQL, a Oracle, y porque no a tablas de V6 con Aplicaciones de V7, etc.

Y de paso, una propiedad más , para establecer los datos de conexión a la base de datos. Y sobre todo, poder cambiar estos datos de conexion en ejecución para poder tener varias instalaciones con la misma estructura de base de datos.

Y ahora me direis, “los pajaritos no hablan”, pero como esto era un sueño, y en los sueños todo es posible. Además, este es mi sueño y yo decido quién habla y quién no, 😀 😀 😀

Luego me despierto y pienso que ha sido un sueño bonito, y que si lo cuento, es posible que se haga realidad. 😉

Aqui podeis votar la idea:

Desarrollar directamente sobre bases de datos existentes

P.D.:

Y porque el nombre de “Tabla lógica“, pues sencillamente, porque su funcionamiento seria similar al de las “Impresoras lógicas“, y de esta forma, todos los objetos de V7 quedan asignados a un origen, y ya solo nos queda asociar la tabla lógica a la tabla SQL, de la misma forma que asociamos una impresora lógica a una impresora real instalada en el sistema.

PDF Creator    Enviar artculo en formato PDF   
comments: 12 »
ene 18

Aplicación táctil para discobares

Posted in aplicaciones, videos

Aqui teneis unas imagenes del funcionamiento de la aplicacion de TPV táctil para discobares y restaurantes en V6. Este video es de hace ya algunos años, la versión actual, ha sido mejorada en muchos aspectos, tanto estructuralmente como esteticamente.

TPV y Backoffice para discobares y restaurantes

Podeis ver mas información de las funcionalidades en este artículo:

Permite multi-locales , multi-almacén , multi-TPV, multi-ejercicio, y funciona tanto en red (Cliente-Servidor), como en monopuesto, con descargas multiples.

Mas funcionalidades …

PDF Download    Enviar artculo en formato PDF   
comments: 2 »
ene 17

Algunas ideas para el futuro ¿v7.7 o v7.8?

Posted in ideas

Siguiendo con una serie de articulos en el que se aportan ideas para mejorar la herramienta, voy a indicar en este “post”, algunas más para que el futuro sea prometedor.

Enlace al post de ideas anterior: Mas sugerencias para la 7.6

En este caso, todas están intimamente relacionadas, y todas persiguen un mismo proposito, mayor apertura a los estandares y mejor integración entre Velneo V7 y otras herramientas.

Como algunos ya saben, este fin de semana, hemos realizado algunas pruebas para integrar V7 y Android, el resultado ha sido todo un exito desde las primeras pruebas realizadas. Pero para poder seguir avanzando, necesitamos mejorar la comunicacion entre ambos, y las sugerencias que aqui se realizan, permitirán que los experimentos realizados sean mucho mas eficientes y nos permitan avanzar mas rápido si cabe.

  1. Empecemos abriendo boca con algo sencillo, ya solicitado en alguna ocasión, “Ampliar las sentencias de proceso para el acceso a la API de datos de Velneo V7”, incluyendo algunas nuevas sentencias como:
    • APIVEL: Get nombre de tabla por identificador
    • APIVEL: Get tabla por número (para poder ver todas las tablas de un proyecto)
    • APIVEL: Get nombre de indice por identificador
    • APIVEL: Get indice por número (para poder ver todos los indices de una tabla)
    • APIVEL: Get nombre de proyecto por identificador
    • APIVEL: Get proyecto por número (para poder ver todos los proyectos de una solución)
  2. Poder disponer de funciones nativas para parsear y también para generar XML (y/o JSON) seria un avance muy interesante. Si ademas, se permitieran funcionalidades tales como las permitidas en la libreria “SimpleXML” de PHP para “XPath”. Eso seria una bomba.
  3. Ya disponemos de la posibilidad de ejecutar scripts de JavaScript (ECMAScript), VBscript, y también de Python. Pero considero, que hoy por hoy, de cara a la web, permitir Scripts de PHP seria todo un acierto, entre otras cosas, porque tambien es multiplataforma, porque hay “utilidades” y “aplicaciones” para aburrir, y sobre todo, porque romperia muchas barreras de cara al exterior.
  4. Si además, consideramos que, ante la falta del punto 2, “acceso nativo a XML”, mediante el punto 3 “ejecutar scripts de PHP” tambien tenemos solucionado en parte ese problema, hay poco mas que decir.

Para aquellos que aún tienen dudas de la potencia de XPath , aqui teneis un Tutorial de XPath, y aqui os dejo algunos Ejemplos, para que podais examinar toda su potencia.

Como ya sabemos, mañana será publica la nueva versión 7.6 y va a ser un poco precipitado que todas estas sugerencias sean incluidas en dicha versión, pero seria muy de agradecer que sean tenidas en cuenta para las próximas versiones.

De momento, creo que ya es suficiente, que la neurona ya empieza a echar humo 😀 .

Para caminar en la oscuridad de nuestras propias limitaciones, no hay nada mejor que dejarse guiar por un buen lazarillo. 😉

Create PDF    Enviar artculo en formato PDF   
comments: 8 »
ene 14

Prueba de acceso al CSID

Posted in humor

El CSID tenia una vacante para un asesino.

Estas oposiciones altamente clasificadas son de dificil acceso, y hay muchas pruebas y verificación de referencias implicadas antes de que usted pueda incluso ser considerado para el puesto.

Después de evaluar a algunos aspirantes a través de las verificaciones, entrenamientos y pruebas, las opciones se redujeron a 2 hombres y una mujer para el único puesto disponible.

Llego el día de la prueba final para definir quien conseguiría el trabajo.

Los agentes que administraban la prueba, llevaron a uno de los hombres a una puerta grande de metal y le dieron un arma.

Debemos confirmar que usted seguirá nuestras instrucciones,  sin importar las circunstancias

le explicaron

dentro de este sitio, usted encontrara a su esposa sentada en una silla. Tome esta arma y mátela

El hombre con una mirada de asombro le dijo:

Ud. no puede estar hablando en serio. Yo nunca podría matar a mi propia esposa

dijo un agente –

Bien, entonces usted definitivamente no es la persona adecuada para este trabajo.

Así que trajeron al segundo hombre a la misma puerta, le entregan el arma y le explican los mismos parámetros de la prueba.

El segundo hombre miro algo sobresaltado, pero sin embargo tomo el arma y entro al cuarto. Todo estuvo en silencio por cerca de 5 minutos, entonces la puerta se abrió. El hombre salió del cuarto con lagrimas en sus ojos y dijo:

Intente matarla, pero simplemente no pude apretar el gatillo. Supongo que no soy el hombre adecuado para el trabajo.

Los agentes contestaron:

No, usted no tiene lo que se necesita para esto. Tome a su esposa y vaya a casa.

Ahora solo les quedaba la mujer. La conducen a la misma puerta y le dan la misma arma.

Como prueba final, debemos estar seguros que usted seguirá las instrucciones sin importar las circunstancias. Dentro encontrara a su marido sentado en una silla. Tome esta arma y mátelo.

La mujer tomo el arma y abrió la puerta. Antes incluso de que la puerta se cerrara completamente, los agentes oyeron a la mujer descargar el arma completamente – uno por uno -, cada tiro disponible en el cargador. Entonces el mismo infierno se apodero de aquel cuarto. Se oyeron gritos, desgarramientos, golpeteo en las paredes. Esto continuo por varios minutos y finalmente todo quedó en silencio. La puerta se abrió lentamente, y allí estaba parada la mujer. Se limpio el sudor de la frente y dijo:

Coño, no me dijeron que el arma estaba cargada con balas de fogueo. He tenido que matarlo a golpes, con la silla.

PDF Download    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Prueba de acceso al CSID
ene 13

Calculo de stocks II

En el post de ayer, veiamos como realizar un sistema de control de existencias, el más básico de todos, con un solo almacén.

Aqui teneis el enlace para los que no lo visteis:

Calculo de stocks I

Hoy vamos a complicar un poquito el ejemplo, y vamos a convertir nuestro control de existencias en un sistema multi-almacén.

Y para el ejemplo de hoy vamos a necesitar unos cuantos cambios sobre el ejercicio de ayer, pero, dejando claro, que ambos sistemas son compatibles y pueden ser realizados sobre el mismo ejercicio.

Para convertir el ejercicio anterior a multi-almacén necesitamos lo siguiente:

  • Una tabla de Almacenes
  • Una tabla para controlar el Stock

Y por supuesto, necesitamos enlazar estas tablas en el esquema anterior.

Control de stocks en varios almacenesPara incorporar estas tablas a nuestro anterior esquema, solo necesitamos:

  1. En la tabla de “Lineas de documentos”, creamos un enlace a la tabla maestra “Almacen”, para saber en que almacén se produce cada movimiento.
  2. La tabla de “Stock” debe tener enlaces a las tablas maestras “Almacen” y “Productos”, y por supuesto, un campo numerico para guardar el Stock, #STOCK
  3. En la tabla “Stock”, tambien necesitamos un indice de clave unica, formado por los campos #PRODUCTO y #ALMACEN, para evitar que esta tabla tenga registros repetidos.
  4. De nuevo, en la tabla “Lineas de documentos”, necesitamos un campo “Puntero indirecto” a la tabla “Stock” mendiante el indice de clave única formado por #PRODUCTO y #ALMACEN, al que llamaremos #PROD_ALM .
  5. Y para terminar, tambien en la tabla de “Lineas de documento”, necesitamos crear la “Actualización”, a través del campo #PROD_ALM , para acumular la #CANTIDAD en el campo #STOCK de la tabla “Stock”

Una vez creada la actualización, solo debemos indicar el campo a actualizar #STOCK, el modo de actualización “ACUMULAR” y como formula:

¿que formula usariais para actualizar? … pensad un poquito

… pensad un poquito mas

… vale, es que no deberia tener que decirla, es la misma de ayer.

choose( #TIPO=”C” , #CANTIDAD , – #CANTIDAD)

¿Como es posible que la misma formula sirva para actualizar el sistema multi-almacén?

Pues, muy sencillo, porque la actualización se realiza sobre una tabla diferente y esa tabla (Stock), dispone de un indice de clave única que combina las 2 tablas maestras “Productos” y “Almacén”.

¿Cuantos almacenes puedo controlar con este sistema: 2 , 3 , 4?

El ejemplo de ayer nos permitia controlar solo UN almacén. En este ejemplo, no hay una limitación del número de almacenes, en realidad depende del campo #ID de la tabla “Almacén”, si has creado un #ID con valor autonumerico de 1 byte, podrás controlar 255 almacenes, pero si amplias el numero de bytes del valor numérico a 2, podrás contolar más de 65.000 almacenes, y puedes seguir ampliando el número de bytes, pero la pregunta es ¿cuantos almacenes necesitas realmente?

Si vamos a usar la misma formula para actualizar y las dos actualiaciones deben ser creadas en la misma tabla de “Lineas de documento” ¿podemos hacer esto con una actualizacion para las 2 tablas?

La respuesta es ¡NO!, ya que, cada actualización debe corresponderse a un campo enlazado a una tabla maestra o a un puntero indirecto, y como puedes comprobar, la primera actualización acumula el resultado en la tabla “Productos” y la segunda, acumula el resultado en la tabla “Stock”

Y una última pregunta, ahora que he creado el sistema de control multi-almacén, ¿para que necesito mantener la acualización del ejemplo de ayer?

Por una razón muy sencilla: porque manteniendo las 2 actualiaciones, gestionamos mejor nuestro almacén, sabiendo las existencias de cada producto en cada uno de los almacenes, pero también, conociendo el stock acumulado de cada producto.

¿Alguna pregunta más?

Create PDF    Enviar artculo en formato PDF   
comments: 6 »
ene 12

Calculo de stocks I

Vamos a analizar a partir de ahora y en los proximos post, un sistema de control de existencias, y porque en varios post, y no solo uno.

Pues bien, no se trata de hacer un culebrón con este articulo, ya que lo que pretendo es finalizar cada ejemplo en cada uno de los articulos. Se trata de realizar varios ejemplos en base a diferentes analisis para cubrir varias posibilidades.

Y en este primer articulo vamos a ver como realizar el calculo de existencias cuando trabajamos con un almacén, que seria el caso mas sencillo que se nos va a presentar en cualquier aplicación de gestión.

Bueno, es falso, en realidad el ejemplo mas sencillo, seria no tener que controlar el stock 😀 , pero en ese caso, este articulo no tendria ningún sentido.

¿Que necesitamos para realizar este ejercicio?

Pues basicamente, 3 tablas:

  • La tabla de Productos,
  • La tabla de Albaranes (Documentos de venta y/o de compra)
  • Y la tabla de Movimientos (Lineas de documentos)
  • Si utilizamos la misma tabla para movimientos de compra y de venta, entonces, tambien necesitaremos una tabla estatica para diferenciar el tipo de movimiento a realizar, aunque también podriamos usar otros metodos para resolver ese problema.

Ahora que ya conocemos la estructura de nuestra aplicación, ¿cual es el siguiente paso?

Algunos se estaran preguntando, ¿y la tabla de entidades?, ¿donde está?, ¡vaya ejemplo de gestión!, pero es que, para este ejemplo, la tabla de entidades no pinta absolutamente nada, y como no nos resulta útil, he decidido prescindir de ella y centrarnos solo en lo verdaderamente importante: los productos y su stock.

Control de stock de un almacénAhora que ya he dejado claro este punto, seguimos con el ejemplo, el siguiente paso.

La tabla estatica, solo necesita 2 valores, “C” para compras y “V” para ventas. Y en la tabla de Lineas de documentos, debemos crear un enlace a la tabla estatica, para conocer el tipo de cada una de las operaciones realizadas.

Debemos crear las relaciones entre tablas, y aunque puede haber preferencias al elegir el tipo de tabla, el esquema quedara asi. La tabla de movimientos puede ser maestra con un enlace a “Documentos” o tambien submaestra de “Documentos” , pero eso depende de cada uno.

El calculo del stock, lo vamos a realizar directamente en la tabla de Productos, con un campo numérico para acumular el resultado.

Y para obtener dicho acumulado, solo necesitamos crear una “actualización” en la tabla de “Lineas de documentos”, sobre el campo enlazado a la tabla maestra de “Productos”.

Para finalizar el ejercicio, solo debemos indicar el modo de actualizar “ACUMULAR”, y en la Formula: ¿que?

En la formula bastaria una función:

choose( #TIPO=”C” , #CANTIDAD , – #CANTIDAD)

que en castellano, viene a significar:

Si el movimiento es una Compra, “Suma” el campo #CANTIDAD y si no lo es, “Resta” el campo #CANTIDAD.

PDF Printer    Enviar artculo en formato PDF   
comments: 7 »