Crear un punto de venta (6 de 10)

InicioAnteriorSiguienteFinal

Búsqueda de productos

Lo que vamos a hacer hoy es una pantalla que nos permita buscar productos, que los muestre en la pantalla y que podamos ver la información que se tenga de ellos.

A partir de este momento programaremos para lograr que los objetos (Formularios, Clases, Dll) interactúen entre sí. Por ejemplo, lograremos que al momento de generar un ticket de venta la pantalla en la que se haga el cobro ya sepa la cantidad que se cobrará al cliente en base al folio que tenga el ticket. Todo esto lo haremos en base a constructores.

Agregaremos varios formularios a nuestro proyecto para que quede como se muestra:




Si no me equivoco, frmBuscaProducto, frmCobrar, frmVentas. Hoy nos enfocamos a frmBuscaProducto y dejamos el resto para después.

Diseñaremos frmBuscaProducto para que quede como se muestra:



Le deberemos de agregar una Label, un TextBox, un Button y un ListView, según la siguiente tabla:



Nos vamos directamente al código y tecleamos lo siguiente en la sección de las directivas using (únicamente si no está la línea):

using System.Data.OleDb;


En la sección de declaraciones ponemos:

//Declaraciones
public string varID_PRODUCTO = "";


Crearemos el siguiente procedimiento, el cual nos ayudará para poner columnas en el ListView:

private void Encabezados()
{
lvProductos.View = View.Details;
lvProductos.Columns.Add("Clave producto", 0,
HorizontalAlignment.Left);
lvProductos.Columns.Add("Descripción", 250,
HorizontalAlignment.Left);
lvProductos.Columns.Add("Existencia", 90,
HorizontalAlignment.Right);
lvProductos.Columns.Add("Precio", 90,
HorizontalAlignment.Right);

}


Después agregamos el siguiente:

private void Producto()
{
try
{
if (lvProductos.Items.Count != 0)
{
varID_PRODUCTO = lvProductos.SelectedItems[0].Text;
}
else
{
varID_PRODUCTO = "";
}
this.Close();
}
catch (Exception ex)
{
MessageBox.Show("Debe seleccionar un elemento de la lista."+
" \nDescripción del error: \n" + ex.Message,
"Operación no válida", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
}


Agregamos este otro procedimiento:

private void ReadData(string prmDESC_PRODUCTO){
//Este procedimiento lee los datos que se
//tranferirán y los mostrará en forma de
//lista en el ListView
try {
//Si la conexion esta abierta la cerramos;
//en caso contrario, la abrimos
OleDbConnection cnnReadData =
new OleDbConnection(Class.clsMain.CnnStr);
if (cnnReadData.State == ConnectionState.Open)
cnnReadData.Close();
else cnnReadData.Open();
int I = 0;
OleDbCommand cmdReadData =
new OleDbCommand("SELECT ID_PRODUCTO,"+
" DESC_PRODUCTO,"+
" CANTIDAD,P_U_VENTA " +
" FROM CAT_PRODUCTOS"+
" WHERE DESC_PRODUCTO like '%" +
prmDESC_PRODUCTO + "%'", cnnReadData);
OleDbDataReader drReadData;
drReadData = cmdReadData.ExecuteReader();
lvProductos.Items.Clear();
while (drReadData.Read()){
lvProductos.Items.
Add(drReadData["ID_PRODUCTO"].ToString());
lvProductos.Items[I].SubItems.
Add(drReadData["DESC_PRODUCTO"].ToString());
lvProductos.Items[I].SubItems.
Add(drReadData["CANTIDAD"].ToString());
lvProductos.Items[I].SubItems.
Add(String.Format("{0:C}",
drReadData["P_U_VENTA"]));
I += 1;

}
drReadData.Close();
cmdReadData.Dispose();
cnnReadData.Close();
}
catch (Exception ex){
MessageBox.Show(ex.Message);
}
}


Pondremos lo siguiente el Form_Load:

//Form_Load
this.lvProductos.DoubleClick +=
new System.EventHandler(this.lvProductos_DoubleClick);
this.lvProductos.KeyPress +=
new System.Windows.Forms.KeyPressEventHandler(this.lvProductos_KeyPress);
Encabezados();


Y justo después del Form_Load ponemos lo siguiente:

void lvProductos_KeyPress(object sender, 
System.Windows.Forms.KeyPressEventArgs e){
switch (e.KeyChar){
case (char)Keys.Enter:
Producto();
break;
case (char)Keys.Escape:
varID_PRODUCTO = "";
this.Close();
break;
}
}
void lvProductos_DoubleClick(object sender,
System.EventArgs e){
Producto();

}


Deberá escribirse el código tal y cual se muestra, ya que se tratan de procedimientos creados por nosotros mismos.

Hacemos soble clic en el boton (btnBuscar) y le agregamos el siguiente código:

ReadData(txtDESC_PRODUCTO.Text);


Si todo va bien y no nos hemos equivocado, hemos terminado satisfactoriamente el ejercicio.

Recomendaciones:

  1. Hacer respaldos del sistema según se vaya avanzando en el desarrollo.

  2. Guardar los cambios periódicamente

  3. Tener mucho cuidado en donde colocamos nuestro código. Una instrucción mal colocada puede echar a perder todo nuestro trabajo.

  4. Para estos ejercicios, si lo pongo con mayúscula, es mayúscula y viceversa. No le hagamos al héroe, aun no tenemos la experiencia como para saber como funcionará mejor nuestro programa.

  5. Nadie es perfecto. Puedo equivocarme, siempre pruebo el código que estoy exponiendo, pero al momento de transcribirlo aquí pueden ocurrir errores.

10 comentarios:

  1. bien por el momento voy bien con algunas barrera pero corrigiendo gracias por el curso es mjuy practico mi correo es richardt_2000@hotmail.com

    ResponderEliminar
  2. disculpa todo va bien hasta la 3 parte solo que no puedo entrar al la ventana principal porque al poner usuario y contraseña me manda la leyenda de q no se encutra la bases de datos no existe y q en fnlogin no se ha iniciado la propiedad ConnectionString...???

    alguien q me pueda ayudar por favor

    ResponderEliminar
  3. Hola como estan quiero que ayuden en lo sguuiente,cuando intento buscar un cliente em el frmBuscarProducto me aparece el producto pero cuando doy doble click no me aparece en el frmVentas solo me aparece el codigo del producto en el txtID_PRODUCTO, espero que alguien lo sepa mi correo es felixtoledo2011@hotmail.com

    ResponderEliminar
  4. Saludos:
    Aqui molestando con 3 preguntas.
    Ya termine el programa y al intentar probarlo ya completo, tengo el mismo error que un compañero de aqui, me aparece "fnlogin no se ha iniciado la propiedad ConnectionString" ¿a que se debera? ya cree y le di conexion a la base de datos, pero no se si es correcta, ¿tienes la demas informacion de la base de datos?
    ¿El primer usuario lo creo en la base de datos directamente o como le hago?
    de antemano gracias por contestar las dudas de los novatos como yo y espero no molestar.
    mi correo es simon.rodriguez@grupoloyga.com.mx

    ResponderEliminar
  5. en el form_load tengo error his.lvProductos.DoubleClick += new System.EventHandler(this.lvProductos_DoubleClick);
    this.lvProductos.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lvProducto

    AYuda

    ResponderEliminar
  6. Alguien me podria facilitar la base de datos??

    S_Juanito@outlook.com

    ResponderEliminar
  7. Estimado

    has visto el problema de

    Error 1 No se puede encontrar el tipo o el nombre de espacio de nombres 'mPrintDocument' (¿falta una directiva using o una referencia de ensamblado?)

    es el unico inconveniente ocurrido hasta el momento

    saludos

    ResponderEliminar
  8. yo tamvien tengo el mismo problem ....No se puede encontrar el tipo o el nombre de espacio de nombres 'mPrintDocument' (¿falta una directiva using o una referencia de ensamblado?)
    alguien ya lo soluciono, necesito ayuda....

    ResponderEliminar
    Respuestas
    1. Debes colocar la clase public y hacer un using al inicio del codigo

      Eliminar