Desarrollo de un Programa de Ventas en Autoplay

Esta sección esta especialmente diseñada para todos aquellos usuarios que estés desarrollando plugins o aplicaciones y quieran ayuda para dichos plugins o aplicaciones.
Hola a Todos, Agradecimiento profundos y sinceros a Ceone y Rafax por permitirnos a los interesados en el autoplay a seguir creando e investigando nuevas cosas. Bueno sin mas rodeos, les explico lo que vengo a mostrarles esta vez.

LO QUE TENGO:
Basicamente estoy a punto de iniciar un negocio de ventas de Videojuegos, programas, ETC, mi negocio se llama CLICK ,.para lo que acabo de crear una aplicacion en donde bien puedo yo ingresar como ADMINISTRADOR o las personas que contrate como VENDEDORES y se puede vizualizar la lista de los Juegos que tengo (la lista de los programas ya se complementa si es que ya tengo finalizado el de los videojuegos),. me muestra la lista de juegos que tengo con su respectiva descripcion , cuando lo selecciono y le hago click en el boton diseño Me sale como es el diseño de la portada del disco,. (El UNICO QUE ESTA COMO EJEMPLO ES EL DE DEVIL MAY CRY 4 HAGANLE CLICK PARA QUE VEAN). Ademas tiene la Opciones de Agregar, Editar, Eliminar, O buscar un Juego (Solo administrador),. esto lo hice ya que en la descripcion de cada Juego se muestra el Nº de Dvd que se tiene que utilizar para quemar el Juego, su precio, etc.

LO QUE LE FALTA :
Bueno les dire que no soy un Trome ni Capo de la programacion,. mas me inclino por el Diseño Grafico, y si e podido hacer esta aplicacion es por que e visto APZ, de base de datos que circulan por ahi, y me e podido ir guiando de poco en poco,. y asi es como lo e podido hacer, TAMPOCO es que este en "0" programando algo se,. pero no mucho ES POR ESO QUE RECURRO A LA AYUDA DE CUALQUIERA QUE PUEDA BRINDARMELA, y es la siguiente:

- Quisiera que tenga una especie de aplicacion de Venta de que cuando yo elija Uno, Dos o 20 Juegos para ser vendidos, estos se vayan acumulando en una especie de tabla o algo asi, para que me bote cuanto seria el precio Final.

- Como trabajo tambien con CD y DVDS para quemar que haiga una especie de STOCK,. que me vaya restando automaticamente el numero de DVD en almacen que me van quedando despues de alguna venta.
y que solo luego El administrador pueda modificarlo de acuerdo a como vaya abasteciendo fisicamente su almacen.

Espero que lo tomen como un reto para TODOS ademas que se van a quedar tmb con la aplicacion para ustedes, y acontinuacion les envio el Link para que descarguen el proyecto. OJO: no esta en apz ,. solo descomprimen la carpete "Software Venta" y lo pegan en la parte de proyectos del Autoplay y luego lo abren para que miren el codigo fuente y esas cosas,. MUCHAS GRACIAS, y cualquiera avanze o mejora y opinion me la hacen saber por favor,. espero que podemas contrribuir todas para hacer una especie de aplicacion de compra y venta que seria alucinante ya que me e matado buscando y no existe ninguno creado con AUTOPLAY. BYE

http://www.mediafire.com/?1rxx8f8ads1qk6q

PD: Lo hice en AMS 7.5 y las contraseñas para entrar como administrador y vendedor son "admin" y "vend" respectivamente gracias
Le echaremos un vistazo... pero te recomiendo que mires de utilizar ya ams8 ;)
RAFAX tienes razon,. ya es hora de actualizarse,. es por eso que ya lo converti todo a AMS8,. hay les paso el link:

http://www.mediafire.com/?odb36dvv7bfl7sq

Y gracias de antemano BYE
Algunos puntos sobre el programa importantes:

-Las dimensiones no te coincidirán con muchas resoluciones de otros pcs y por ejemplo en mi pantalla (1024x800) la pagina "juegos administrador" se ve cortada , deberías hacerlo todo mas pequeño con opción de redimensionar.

- Las funciones como FillSitesList() es mejor que las tengas en global functions y las llames desde donde quieras , asi las tendras disponibles para toda la Aplicación cuando las necesites.

- Otra cosa es al crear la tabla los campos que sean numeros , ponlos como tal osea el campo "Numero" que se refieres a cantidad en stock seria asi "Numero number" y evita meter DVD 2 ni letras mas que nada para la hora de hacer sumas y restas del stock si es un text o hay texto por medio es mas complicado , para el tema numero de dvd,s puedes concatenar DVD,s despues en el input asi :

Código: Seleccionar todo

sNumero = tjuegos.Data[nItemRowNumber]["Numero"].." DVD,s";
El tema almacén no se bien a que se refiere pero si es algo así deberías hacer lo mismo.

- Para lo de factura, lo suyo seria usar un objeto Grid y un botón "añadir a carro" o algo asi en admin y vendedor, para ello crea una pagina con tu diseño con un grid y algún botón de imprimir factura y demás donde se podria imprimir el grid.

- Mirate este hilo , hay un proyecto que te puede ayudar

http://www.amsspecialist.info/viewtopic.php?f=3&t=103

Ya tienes faena... crea el proyecto como apz, es mas manejable y pesa menos
RAFAX me encanto el hilo que me enviastes,. sobre facturacion,. aunque le falta pulir algunas cosas como que no puede guardar y esas cosas,. voy a revisarlo bien,. por otra parte un gran favor , si tuvieras otros proyectos asi de facturacion como ese te lo agradeceria,. voy a revisarlo bien bien,. para enviarte un gran avanze de mi proyecto para que lo puedas PULIR, ya de antemano muchas gracias. Estate atento cuando te envie las mejoras.
Otra cosa,. voy a tener en cuenta TODAS, tus sugerencias creeme,. pero si tuvieras ejemplos te lo agradeceria bastante para guiarme,. NO para copiar CODIGO IGUAL,. si no para guiarme,.por que la verdad no te entendi mucho lo del: FillSiteslist, lua Syntax Highlighting, grid, etc. Supongo que tmb tienes cosas que hacer por eso te pido ejemplos,.no que me des clases particulares,. jejejeje,. y Gracias ,. estate atento.
Bueno yo por mi parte (poco a poco ) estoy haciendo tu proyecto pero en plan sencillo y practico para mostrarte lo que es es script que al final y la cabo es lo importante.

Lo de que no entiendes es que las funciones , osea.. como esta:
function FillSitesList()
	--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	--  Borra el contenido de todos los elementos de la página
	--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	ListBox.DeleteItem("ListBox_SiteList", -1);
    Input.SetText("Input_Info_Display", "");
    ListBox.DeleteItem("Total", -1);
	Input.SetText("Search", "");
	
	--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	--  Consulta webs de mesa y almacenar todas las entradas en la tabla tusuarios
	--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	tjuegos = SQLite.QueryToTable(db,"SELECT * FROM Juegos");
	nLastError = Application.GetLastError();
	if nLastError ~= SQLite.OK then
		Dialog.Message("Error", SQLite.GetLastErrorString());
	end
	
	--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	-- si no hubo errores, continua, de lo contrario no hace nada
	--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	if nLastError == SQLite.OK then
		-- recorrer la tabla
		for nRow = 1,tjuegos.Rows do
	    	-- obtener el título del registro actual
	    	sNombre = tjuegos.Data[nRow]["Nombre"];
	    	-- agregar el elemento a la lista con el texto del título y los datos = = número de fila (en la tabla)
	    	ListBox.AddItem("ListBox_SiteList", tjuegos.Data[nRow]["Nombre"], nRow);
	    end
	end
end
Las pongas en global functions y despues la llames igual desde donde quieras , en tu caso On Show de la pagina:

Código: Seleccionar todo

FillSitesList();
Lo otro me refiero a que cuando sean números como el precio y la cantidad en stock , en la base de datos solo metas números sin mas textos ni nada como DVD,s ya que luego habrá que hacer operaciones como sumar o restar a stock o sumar precios para dar totales y estos textos serán un incordio.

Cuando tenga algo mas te lo paso , tu sigue por tu parte con los arreglillos que hablamos , un saludo
Bueno colega, si lo que andas buscando es algo asi como un tpv, uno de mis softwares comerciales es lo que te puede venir bien.

Desde hace mucho tiempo este sistema esta probado en cajas de discotecas y parques tematicos

Se comunica con cajon portamonedas y con impresora de tikets

Imagen

Por cuestiones de licencias de uso no puedo proporcionarlo libre, es de pago, pero si te interesa contactame seguro que te puedo hacer un buen precio

Efectivamente posee un area de configuracion y de manejo, es muy adaptable por lo que seguro que te puede venir bien.

salu2
Weno compañero , aquí te dejo ejemplo de como estructuraría yo el programa tuyo , adapta lo que te sirva a tu proyecto y si tienes mas dudas ... ya sabes...

HIDE: ON
Hidebb Message Hidden Description
Bueno echare un vistazo y vere en que les puedo ayudar, ya que yo igualmente estoy investigando sobre como hacer condiciones en las bases de datos como por ejemplo:

- Tengo una Tabla de Inventario de productos
- otra Tabla de ventas

entre esas dos tablas quiero tenes una tercera de existencia

lo que quiero hacer es lo siguiente....


tabla productos - tabla ventas y que el resultado lo guarde en la tabla existencia

Bueno como parece es lo mismo que tu quieres haber si logro encontrar algo o ayudarte en algo...
Muy bien agotaras , jugar con tres tablas , aunque lo que comentas con dos ya se podría hacer bien no?
Depende mucho del tipo de ventas que se vayan a efectuar pero lo usual es:

1.- Tabla de productos (inventario con stocks y donde se controlan las existencias)
2.- Tabla de ventas (para ver el resumen se suelen agrupar los resultados por el id de la nota)

Por cada venta, aparte de registrarla en la tabla de ventas, se realizan operaciones como:
UPDATE inventario SET stock=((select stock from inven where idproducto=variable)-cantidadvendida) WHERE idproducto=variable
Supongo este tipo de consultas son las que buscan para controlar las existencias.

Pero en lo personal he notado que algunas veces, por requerimiento del cliente, se necesitan parámetros que caen en redundancia innecesaria. Me refiero a que si en una venta tenemos un campo de "Comentarios" entonces al registrarla en la tabla de ventas el comentario se registraría igual en cada uno de los artículos vendidos ocasionando un gasto innecesario de bytes (se satura la db sin necesidad).

Para ello yo recomiendo una db como:

1.- Tabla de productos (inventario con stocks, etc)
2.- Tabla de ventas donde sólo se registran el idnotadeventa, los articulos vendidos (idarticulo), cantidadvendida, preciounitario y total (aunque en realidad pueden omitir la última).
3.- Tabla de notas de venta donde se registra el id de la nota y otros campos que no queremos repetir como: comentarios, idcliente, fecha, etc.

La tabla de ventas y notas de venta son tablas que se interrelacionan. Recuerden que podemos accesar a todo los campos de una tabla desde una consulta a otra mediante los índices.

Para saber la cantidad vendida de un artículo en cierto periodo de fechas pueden usar consultas como:
SELECT SUM(cantidadvendida) FROM ventas WHERE idarticulo=variable AND idnota IN(SELECT idnotadeventa FROM notasdeventa WHERE fecha >variablefecha1 and fecha< variablefecha2)
De todo esto comenté hace un par de semanas en mi blog jeje.
te lo as currado amigo pero crees que podrías hacer una especie se manual o apz para a si poder comprenderlo mucho mejor.

se entiende pero lo explicaste en SQL y pues al implementarlo en SQLite para AMS cambia algunos parametros.
Hola gente que tal ,. muchas gracias por su apoyo enserio,. veo que ustedes si saben dar la mano,. porfavor todo acerca de ejemplo parecidos,. de ventas y esas cosas,. o que hayan descrubrido o echo mandenmela porfa para revisar,. de antemano muchas,.
Agotaras, por ahora ando algo ocupado (diseñando un par de sitios web) pero creo que durante la semana podría estar subiendo el ejemplo de la interacción entre esas 3 tablas.
no te preocupes amigo tomate tu tiempo.
Bueno me metí al rollo de esto de las tres tablas y pues la verdad logre guardar y toda la onda pero en la consulta me cuelo no se que pasa pero aquí dejo el ejemplo que cree haber si le echan una mirada haber en que me pueden ayudar.


aqui esta en enlace al ejemplo:

Código: Seleccionar todo

http://www.massmirror.com/5439990d33449532aa877f9b4ba08d86.html
Espero me puedan ayudar....


Aquí esta la base de datos y las tablas:
sDatabaseFile = _SourceFolder .. "\\AutoPlay\\Docs\\Stock.db";

db = SQLite.Open(sDatabaseFile);
nLastError = Application.GetLastError();
if nLastError ~= SQLite.OK then
	Dialog.Message("Error de Apertuta", SQLite.GetLastErrorString());
end
SQLite.Query(db,"CREATE Table Productos(RecordID integer primary key, Codigo text, Articulo text, Cantidad)");
SQLite.Query(db,"CREATE Table Ventas(RecordID integer primary key, Codigo text, Articulo text, Cantidad_ventas)");
SQLite.Query(db,"CREATE Table Stock_Result(RecordID integer primary key, Codigo text, Articulo text, Cantidad_Result)");


NOTA: Bueno despues de tanto y tanto lo logre hice funcioanr esto aqui el script para hacer la consulta y la resta de los dos campos de la tablas Productos y Ventas:
	ListBox.DeleteItem("Listado", -1);
	
tSeleccion_Datos = SQLite.QueryToTable(db,"SELECT Cantidad, Cantidad_ventas, Articulo FROM Productos, Ventas");
	
	nLastError = Application.GetLastError();
	if nLastError ~= SQLite.OK then
		Dialog.Message("Error", SQLite.GetLastErrorString());
	end

	if nLastError == SQLite.OK then

		for nRow = 1,tSeleccion_Datos.Rows do
		   sName = tSeleccion_Datos.Data[nRow]["RecordID"];
    	
	    sCodigo = tSeleccion_Datos.Data[nRow]["Codigo"];
	    	sArticulo = tSeleccion_Datos.Data[nRow]["Articulo"];
	    	   sCantidad = tSeleccion_Datos.Data[nRow]["Cantidad"];
	    	      sCantidad_ventas = tSeleccion_Datos.Data[nRow]["Cantidad_ventas"];
	    	   	 sCantidad_Result = tSeleccion_Datos.Data[nRow]["Cantidad_Result"]
	    
Resultado = sCantidad - sCantidad_ventas
	    
ListBox.AddItem("Listado", sArticulo.. "-" ..sCantidad.. "-" ..sCantidad_ventas.. "-" ..Resultado, nRow);


	    end
	end
	Total = ListBox.GetCount("Listado");
Label.SetText("lbl_Total", Total);

Bueno lo que hice pues es muy facil hice la consulta con esta cadena
tSeleccion_Datos = SQLite.QueryToTable(db,"SELECT Cantidad, Cantidad_ventas, Articulo FROM Productos, Ventas");
donde SELECT seleccionara los campos siguientes Cantidad, Cantidad_ventas, Articulo de las tablas Productos, Ventas

Luego cree una mini tabla de operaciones esta:
Resultado = sCantidad - sCantidad_ventas
la cual lo que hace es restar las cantidades almacenadas en estos dos campos y guardar en la variable el resultado el cual luego sera impreso en el ListBox a si:
ListBox.AddItem("Listado", sArticulo.. "-" ..sCantidad.. "-" ..sCantidad_ventas.. "-" ..Resultado, nRow);
Bueno ahora estoy haciendo unas cosas mas de pruebas publicare el ejemplo cuando termine de hacerle unas mejoras.


NOTA 2: si alguien mas me quiere dar una mano en mejorar este script se lo agradecería.
Le echaremos un ojo...
Aquí va el ejemplo anterior que realice mejorado , interactua con Grid , ComboBox entre otros , actualizada stock según ventas y catalogo , espero os sirva. ;)

HIDE: ON
Hidebb Message Hidden Description
Agotaras, no te recomiendo mucho el leer primero el dato de la tabla y posteriormente restarlo en otra consulta. Si tienes a 2 o más usuarios (digamos 100) haciendo ventas todos conectados a una misma base de datos entonces el stock final puede no ser fiable. Ejemplo:

Supongamos que tienes un stock de 10 lápices y un usuario hace una venta por 3...Según tu script primero se lee el valor de 10, luego se le restan 3 y por último se guarda 7. Pero si otro usuario al mismo tiempo esta haciendo una venta por 5 lápices entonces se guadará el resultado de la última venta (ya sea 5 o 7 pero no 2) y no el real.

Por ésto es que es mejor hacer la resta del stock directamente desde la consulta sql que selecciona el mismo (suena a trabalenguas jaja).

Ojalá y el día de hoy tenga oportunidad de hacerte el ejemplo.
No he mirado la APP completa pero lo que dice webultra es verdad, lo mejor es sacar la cantidad, restarla y actualizarla todo en la misma consulta, además de que puedes hacerlo a la vez es más fiable.