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?

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 Download    Enviar artculo en formato PDF   
comments: 7 »
nov 13

Estructuras de programacion: DO … WHILE

Y nos queda el bucle DO … WHILE, y esta sentencia es similar al bucle FOR y WHILE, en realidad, para ciertos casos, se podrian utilizar cualquiera de ellas y el resultado seria el mismo.

C++

do{
instrucciones;-
}
while(condicion);

Java

do
{

sentencias;
}
while ( condición );

Y el siguiente metodo, es la forma abreviada de hacer un bucle DO … While con una sola sentencia.

do sentencia while ( condición );

JavaScript

do
{
sentencias;
}
while(
condición );

PHP

do {
sentencias;
}
while (
condición);

Velneo

En velneo no disponemos del bucle DO … While, solo podras usar el bucle FOR

C#

do {
instrucciones;
}
while(
condición );

Visual Basic

Do { While | Until } condicion
[ sentencias ]
[ Exit Do ]
[ sentencias ]
Loop

o tambien


Do
[ sentencias ]
[ Exit Do ]
[ sentencias ]
Loop { While | Until } condicion

Ruby On Rails

until condicion

sentencias

end

El bucle FOR se suele utilizar para repetir una tarea N veces, y WHILE se suele utilizar cuando se debe comprobar la condicion antes de ejecutar la tarea por primera vez, esto implica que el contenido del bucle While, podria no ejecutarse y el bucle DO … WHILE, similar a los anteriores excepto en una cosa, la condicion se comprueba al final del bucle, y eso implica que las sentencias contenidas en el interior del bucle se van a ejecutar al menos una vez.

Esta vez lo repetire solo una vez, solo una vez, porque la condicion no se ha cumplido, pero eso aun no lo sabia hasta que lo he repetido.

PDF Printer    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Estructuras de programacion: DO … WHILE
nov 3

Estructuras de programacion: WHILE

Esta vez si que hablamos de WHILE, y esta sentencia es similar al bucle FOR, en realidad, para ciertos casos, se podrian utilizar cualquiera de ellas y el resultado seria el mismo.

C++

while(condicion)
{
instrucciones-a-repetir;
}

Java

while( condicion ) {
// instruccionoes a repetir
}

Y el siguiente metodo, es la forma abreviada de hacer un bucle While con una sola sentencia.

while( condicion ) sentencia;

JavaScript

while ( condicion )
{

//sentencias-a-repetir;
}

PHP

while ( condición ) sentencia;

En pHP tambien disponemos del metodo abreviado y del metodo normal para este tipo de bucle.

while( condición )
{
instrucciones;
}

Velneo

En velneo no disponemos del bucle While, solo podras usar el bucle FOR

C#

while( condición )
{
instrucciones;
}

Visual Basic

While condition
[ sentencias ]
[ Exit While ]
[ sentencias ]
End While

Ruby On Rails

while condicion
sentencias
end

Y despues de ver como son las sentencias, algunos os preguntareis, ¿que sentido tiene tener dos sentencias para realizar la misma tarea?, bueno, pues debo decir que no son solo dos, en algunos casos tenemos 3 sentencias para realizar la misma tarea, el bucle, es decir, repetir una tarea un numero determinado de veces.

Las diferencias son minimas, en algun caso casi no existen, pero basicamente son de eficiencia en la programacion.

El bucle FOR se suele utilizar para repetir una tarea N veces, y WHILE se suele utilizar cuando se debe comprobar la condicion antes de ejecutar la tarea por primera vez, esto implica que el contenido del bucle While, podria no ejecutarse.

Esta vez no me voy a repetir, porque la condicion no se ha cumplido.

PDF Creator    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Estructuras de programacion: WHILE
oct 28

Estructuras de programacion: FOR

Visita el blog oficial del autor:  “Pepeto’s blog

Continuamos con las odiosas comparaciones, y esta vez le toca el turno a los bucles, esas estructuras que se repiten, se repiten, se repiten, stop!, una y otra vez mientras se cumple la condicion.

Si tenemos en cuenta lo dicho anteriormente, pareceria que estamos hablando de WHILE, pero no hemos llegado aun, hoy le toca el turno a FOR, que tambien necesita una condicion para ejecutarse, aunque la condicion siempre suele ser un contador numerico incremental, lo que permite saber exactamente cuantas veces se ejecutara el contenido.

C++

for( contador; condicion-final; incremento )
{

instrucciones-a-repetir;
}

Java

for (;;){} // bucle infinito

Esta es la forma de hacer un bucle infinito en Java

for( valor-inicial ; condición-final ; incremento )
{

// instruccionoes a repetir
}

Y el siguiente metodo, es la forma abreviada de hacer un bucle con una sola sentencia.

for( valor-inicial ; condición-final ; incremento ) sentencia;

JavaScript

for ( inicialización ; condición ; incremento )
{

//sentencias-a-repetir;
}

Para una sola sentencia tenemos el metodo abreviado

for ( inicialización ; condición ; incremento ) sentencia;

PHP

for ( inicialización ; condición ; incremento ) sentencia;

En PHP tambien tenemos el metodo abreviado y normal.

for ( inicialización ; condición ; incremento )
{

sentencias;
}

Velneo

En velneo necesitamos nuevamente mostrar una imagen para ver el bucle

Bucle FOR

C#

for( inicialización; condición; iteración )
{
instrucciones;
}

Visual Basic

FOR (inicializacion) TO (termino del bucle) STEP (paso)
sentencias
NEXT

Ruby On Rails

for variable [, variable …] in expression [do]
code
end

Ahora la decision la debes tomar tu, ¿has aprendido algo?, ¿has aprendido algo?, ¿has aprendido algo?, ¿has aprendido algo?, …

PDF Printer    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Estructuras de programacion: FOR
oct 20

Estructuras de programacion: SWITCH

Ya que hemos empezado con las condiciones, vamos a continuar con ellas.

En el “post” anterior veiamos como en algunos casos, era posible realizar un IF multiple con la sentencia IF ( codicion1 ) { sentencias; } ELSE-IF ( condicion2) { sentencias; }

Pero para realizar esta tarea, siempre y cuando la condicion a comprobar sea la misma, tenemos una estructura mas apropiada, el SWITCH , que nos permite comprobar diferentes resultados para una misma condicion,

C++

switch (condición)
{

case primer_caso:
instrucciones 1; break;
case segundo_caso:
instrucciones 2; break;
case caso_n:
instrucciones n; break;
default:
instrucciones-else;
}

Java

switch( expresión )
{
case constante1:
sentencia1; break;
case constanteN:
sentenciaN; break;
default:
sentencia; break;
}

JavaScript

switch( expresión )
{
case constante1:
sentencia1; break;
case constanteN:
sentenciaN; break;
default:
sentencia;
}

PHP

switch( expresión )
{
case constante1:
sentencia1; break;
case constanteN:
sentenciaN; break;
default:
sentencia;
}

Velneo

En velneo no disponemos de esta estructura, al menos en la version 7.4.1

C#

switch (caseSwitch)
{
case 1:
Console.WriteLine(“Case 1”); break;
case 2:
Console.WriteLine(“Case 2”); break;
default:
Console.WriteLine(“Default case”); break;
}

Visual Basic

Select Case <condición>
Case <opción 1>
‘…
Case <opción 2>
‘…
Case Else
‘…
End Select

Ruby On Rails

case var
when x
# do stuff
when y, z
# do other stuff
else
# yay, else, then!
end

Fijate en un detalle, al finalizar cada sentencia CASE, casi siempre hay una sentencia BREAK, es importante y es por una razon, si no indicamos el BREAK, seguiran ejecutandose las sentencias de forma secuencial hasta finalizar el SWITCH.

Como siempre las diferencias estan en Visual Basic y Ruby On Rails.

Ahora la decision la debes tomar tu, has aprendido algo, ¿ case “POCO” , case “REGULAR” , case “MUCHO” , default: “NS-NC”?

PDF    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Estructuras de programacion: SWITCH
oct 14

Estructuras de programacion: IF

Seguimos con nuestra comparativa, y hemos ampliado la familia, con tres nuevos miembros a examen (a peticion de Jorge Hontoria 😉 ) y ha sido revisado el articulo anterior para incluir esta peticion desde su origen.

En esta ocasion vamos a ver una de las sentencias mas comunes de control de flujo en una aplicacion, la toma de decisiones, que admite dos posibles respuestas: SI / NO , Verdad / Falso , 1 / 0 , llamadlo como querais, se trata del IF de toda la vida, la sentencia que te obliga a elegir un camino, y por tanto, a dejar otro, como la vida misma. Aunque no siempre, el camino elegido, sea el mas correcto.

A lo que vamos, que se nos va la pinza, aqui teneis el codigo en cada uno de los lenguajes:

C++

if (condición)
{
instrucciones;
}
else
{
instrucciones;
};

Java

if (condición) sentencia 1;
else sentencia 2;

En el codigo anterior puedes observar como para una sola sentencia verdadera o falsa, no es necesario indicar los { }

if (condición)
{
sentencia-1;
sentencia-2;
}
else
{
sentencia-3;
sentencia-4;
}

JavaScript

if (condición) sentencia 1;

En este aspecto JavaSrcipt es igual a Java

if (expresión) {
//acciones a realizar en caso positivo – verdadero
//…
} else {
//acciones a realizar en caso negativo – falso
//…
}

PHP

if (condición1)
{

Instrucción 1;
Instrucción 2;

}
else
{

if (condición2)
{

Instrucción A;
Instrucción B;

}
else
{
Instrucción X

}

}

Las estructuras tambien pueden ser anidadas como vemos aqui. Y en algunos casos como PHP, tambien podemos utilizar IF multiples,

if (condición1)
{

Instrucción 1;
Instrucción 2;

}
elseif (
condición2)
{

Instrucción A;
Instrucción B;

}
else
{

Instrucción X

}

HTML

Este lenguaje no dispone de estructuras de control de flujo, ya dije que no es un lenguaje de programacion como tal.

CSS

Pues como Html, no permite estructuras de control de flujo, se ejecutan secuencialmente, de principio a fin del archivo.

Velneo

Para Velneo V7 no me queda otra que utilizar imagenes, pues los procesos y eventos no son escritos al uso, con un editor de texto, que le vamos a hacer

Condicion IF

C#

if( condición )
instrucciones;

Si deseamos incluir varias sentencias, estamos obligados a iniciar y finalizar con { }

if( condición ) {
instrucciones;

}
else {
instrucciones;

}

Visual Basic

IF (expresion) then
Sentencias
….
ELSE
Sentencias
….
END IF

V.B. tambien permite los IF multiples, como vemos a continuacion,

IF (expresion1) then
Sentencias1
….
ELSEIF (expresion2) then
Sentencias2
….
ELSEIF (expresion3) then
Sentencias3
….
ELSE
Sentencias4
….
END IF

Ruby On Rails

if condicion
Sentencias1
else
Sentencias2
end

Ruby tambien permite los IF multiples, pero fijate que “else-if” se convierte en “elsif“, no se trata de un error tipografico.

if condicion1
Sentencias1
elsif condicion2
Sentencias2
else
Sentencias3
end

Ahora la decision la debes tomar tu, has aprendido algo, ¿SI o NO?

PDF Creator    Enviar artculo en formato PDF   
comments: 2 »
oct 8

Estructuras de programacion: REM

Vamos a empezar con esta serie de articulos, en la que se pretende comparar algunos de los lenguajes de programacion mas conocidos e importantes y por supuesto, Velneo V7.

Y he decidido comenzar por REM,

No se porque, quiza por que su presencia en una aplicacion en ejecucion es completamente insignificante, tanto, que la importancia que tiene esta sentencia en ejecucion, es inversamente proporcional la importancia que tienen en el codigo fuente,

REM (en ejecucion)  ==  Null

REM (en codigo fuente)  ==  Full

Asi es, en ejecucion no vale para nada, y sin embargo en el codigo fuente es imprescindible para entender lo que se lee y lo que el programador quiere realizar, y es importante no solo para que los demas lo entiendan, lo es tambien para uno mismo.

Y como se usa en cada uno de los lenguajes,

C++

/*
rem de varias lineas
*/

Java

// rem de una linea


/*
rem de varias lineas
*/

JavaScript

// rem de una linea

/*
rem de varias lineas
*/

PHP

// rem de una linea

/*
rem de varias lineas
*/

HTML

<!– rem de una o varias lineas –>

<!–
rem de una o varias lineas
–>

CSS

/*
rem de varias lineas
*/

Velneo

rem ( aqui escribes el comentario, solo una linea )

Como puedes comprobar, en todos los lenguajes de programacion que hemos comparado es exactamente igual.

Claro que HTML es diferente, pero es que HTML es un lenguaje de etiquetas y no un lenguaje de programacion como tal.

Edito:

Gracias Jorge por tus comentarios, los tendre en cuenta, y aqui he re-editado el post para incluir lo que pides, ruego me disculpeis si cometo algun error, pues no conozco a fondo todos los lenguajes que aqui se estan comparando. Pero intentare hacerlo bien, :)

C#

// rem de una linea

/*
rem de varias lineas
*/

Visual Basic

‘ comentario de una linea, en V.B. es necesario comentar cada linea

Ruby On Rails

[(#REM)  – comentario para una o varias lineas ]

PDF    Enviar artculo en formato PDF   
comments: 2 »
oct 4

Estructuras de programacion

Para los proximos dias, estoy preparando unos articulos, donde abordaremos como son las estructuras de control y pequeños ejemplos en los diferentes lenguajes de programacion.

Y como siempre hemos dicho que en Velneo habia que cambiar el chip, os animo a que aporteis algun ejemplo y yo tratare de realizar el mismo ejemplo en V7.

No os confundais, no se trata de hacer una aplicacion completa en V7, basada en otra que ya teneis en C++, p.e., ¡NOOOOOO!, se trata de pequeños fragmentos de codigo en diferentes lenguajes y como deberiamos hacerlo en V7.

En la zona de contacto, teneis mis datos, y mi eMail para enviar algun ejemplo que querais resolver.

En definitiva, aprovechare para comentar y comparar estructuras en varios lenguajes, sin entrar en cual de ellos es mas eficiente en su tarea, o que lenguaje es mejor para ¿que?

¿Tiene utilidad?

Pues espero, que para los que vienen a V7 de otros lenguajes de programacion, puede serles util, y para los que solo han conodido Velneo, siempre esta bien ser un poco “cotilla”.

PDF Creator    Enviar artculo en formato PDF   
comments: 1 »