Вы находитесь на странице: 1из 7

Cursores estaticos Ejemplo de ventas en power builder

Posted by admin Under Power Builder 103 Comments |

Para este ejemplo de cursores hacemos uso de la base de datos Northwind en SQL SERVER 2005 Conexion

Ventas de articulos en ejecucion

Evento Buscar producto en el control sle_1

Busqueda de Clientes ventana: w_buscacliente

Codigo fuentes de w_sisventas

Codigo Fuente Completo para el Copy and Paste


Evento open() de la aplicacion: sisventas // Profile conecion SQLCA.DBMS = OLE DB SQLCA.AutoCommit = False SQLCA.DBParm = PROVIDER=SQLOLEDB,DATASOURCE=74DA713F70F54D7,PROVIDERSTRIN G=database=northwind,PERSISTSENSITIVE=True,INTEGRATEDSECURITY=sspi connect using sqlca; open(w_sisventas)

Evento open() del objeto:w_sisventas //listado de categoria string categoria declare cCategoria cursor for select categoryname from categories; open cCategoria; fetch cCategoria into: categoria; do while sqlca.sqlcode=0 ddlb_1.additem( categoria) fetch cCategoria into:categoria; loop close cCategoria; ddlb_1.selectitem( 1) //listview lv_2.addcolumn( Producto,left!,980) lv_2.addcolumn( ID,left!,0) lv_2.addcolumn( stock,left!,0) lv_2.addcolumn(precio,right!,0) valor_like=% listaproductos(ddlb_1.text) //lv_1 Productos lv_1.addcolumn( Cant.,left!, 200) lv_1.addcolumn( Producto,left!,800) lv_1.addcolumn( Precio,left!,400) lv_1.addcolumn( Importe,left!,400) lv_1.addcolumn( ProdID,left!,0) Evento selectionchanged() del control ddlb_1: w_sisventas //llamanos a la funcion qrecibe como parametro el nombre de categoria listaproductos(ddlb_1.text) Evento buscarproducto() del control sle_1: w_sisventas //buscar productos atraves de una busqueda incremental //del sle_1, para esto se debe crear un nuevo evento (event ID: pbm_keyup) valor_like=sle_1.text + % listaproductos(ddlb_1.text) Evento clicked() del control cb_4: w_sisventas //agregando a detalle de venta (lv_1)

lv_1.additem( sle_2.text,1)//cantidad string prod lv_2.getitem( lv_2.selectedindex( ),1,prod)//asignamos un valor a prod lv_1.setitem( lv_1.totalitems( ),2,prod)//producto string precio lv_2.getitem( lv_2.selectedindex(),4,precio) lv_1.setitem( lv_1.totalitems(),3,precio)//precio lv_1.setitem( lv_1.totalitems( ),4,string(dec(sle_2.text)*dec(precio)))//importe ///////// string prodID lv_2.getitem( lv_2.selectedindex( ),2,prodID) lv_1.setitem( lv_1.totalitems( ),5,prodID)//ProduID montopagar+=dec(sle_2.text)*dec(precio) st_12.text=string(montopagar,##0.00) Evento clicked() del control cb_5: w_sisventas //eliminando elemento del detalle de venta(lv_1) string cant, precio lv_1.getitem( lv_1.selectedindex( ),1,cant) lv_1.getitem( lv_1.selectedindex(),3,precio) montopagar -=dec(cant)*dec(precio) st_12.text=string(montopagar,##0.00) lv_1.deleteitem( lv_1.selectedindex( )) Evento clicked() del control cb_2: w_sisventas //registrar venta //registramos en las tablas orders y orderdetails string fecha int codOrder fecha=string(date(now())) //orders INSERT INTO Orders ( CustomerID, orderDate) VALUES (:idCliente,:fecha ) ; select max(orderID) into:codOrder from orders ; //orderdetails string ProdID,Precio,Cant int i for i=1 to lv_1.totalitems( )

lv_1.getitem(i,1,cant) lv_1.getitem( i,3,precio) lv_1.getitem( i,5,prodID) //messagebox(prodid,Codorder) INSERT INTO OrderDetails (orderID, ProductID, UnitPrice, Quantity) VALUES (:codOrder,:prodID,:precio,:cant) ; //Actualizamos la tabla products el campo STOCK update products set unitsinstock=unitsinstock- :cant where productID=:prodID; next if sqlca.sqlcode=0 then messagebox(Registro,Registrado exitosamente) else messagebox(Error,sqlca.sqlerrtext) end if Evento open() del objeto:w_buscacliente lv_1.addcolumn( Nombre,left!,800) lv_1.addcolumn( id,left!,0) //llenado de cliente (nombre,idcliente=instance variable y global variable) nombre=% open cCliente; fetch cCliente into:nombre,:Idcliente; //messagebox(nombre,idcliente) do while sqlca.sqlcode=0 lv_1.additem(nombre,1) lv_1.setitem( lv_1.totalitems( ) ,2,Idcliente) fetch cCliente into:nombre,:idCliente; loop close cCliente; Evento buscarClientes() del control sle_1: w_buscacliente //busqueda de cliente lv_1.deleteitems( ) nombre= sle_1.text+% open cCliente; fetch cCliente into:nombre,:idCLiente; do while sqlca.sqlcode=0 lv_1.additem( nombre,1) lv_1.setitem( lv_1.totalitems(),2,idCliente) fetch cCliente into:nombre,:IDcliente;

loop close cCliente; Nota: falta agregar mas funciones como: nueva venta, condicionar la cantidad y el stock, agregar elementos al listview detalleVenta siempre y cuando ingrese el stock, etc.

Вам также может понравиться