ACTUALIZAR UN CAMPO DESDE UN FORMULARIO

455 views
Skip to first unread message

JONATAN LÓPEZ

unread,
Apr 18, 2013, 5:42:52 AM4/18/13
to publice...@googlegroups.com
Hola a todos!
Bueno tengo un problema tengo un formulario llamado ventas y en el entorno tengo 2 tablas productos y ventas el tema es que yo cuando vendo un producto quiero restarle la cantidad de productos pero de la tabla productos.
 No puedo actualizar un campo o sea el campo cantidad de la tabla  productos a traves de mi formulario de ventas.
Desde ya muchas gracias :)

Eric Natareno Guerra

unread,
Apr 18, 2013, 9:52:52 AM4/18/13
to publicesvfoxpro
Supongo que estas utilizando tablas nativas, para ello podrías utilizar algo como esto
select productos
Se supone que ya debes estar en el registro del producto vendido, de lo contrario lo buscas
seek codigo del producto vendido
rlock()
replace cantidad with cantidad - cantidad vendida &&cantidad vendida la puedes tener en un textbox o en un cursor para descargar todo un pedido haciendo un scan
.........
flush
unlock

Esta sería una de las formas pero en el foro hay un gran numero de expertos que no dudo te darán varias alternativas
Saludos

JONATAN LÓPEZ

unread,
Apr 18, 2013, 10:27:30 PM4/18/13
to publice...@googlegroups.com
Disculpa Tqanyouman no entiendo lo de "tabla nativas" bueno pero la ayuda que me pudiste ofrecer la aplique y bueno te paso el codigo de como
lo puse y como lo entendi :D
SELECT productos
SEEK productos.codigo
        RLOCK()
        replace Cantidad WITH productos.Cantidad - thisform.txtcantidad.Value
FLUSH
        UNLOCK
SELECT ventas

         
ELSE
    MESSAGEBOX("Registro no guardado")
     
ENDIF    
La cuestion es que no me restó :/ capaz lo codifique mal o no se pero muchas gracias por responder :D Disculpa tambien la ignorancia >_<

Carlos Miguel FARIAS

unread,
Apr 19, 2013, 7:14:17 AM4/19/13
to Grupo Fox
Si te seleccionas en la tabla productos y haces un seek usando como clave, un campo de la tabla producto, se va a posicionar, en el mismo lugar en el que está, o sea, no tenes ninguna garantia/certeza de estar posicionado en el registro que quieres realmente modificar. Es más, tampoco sabes si realmente encontraste algún registro.
Ademas, intentas bloquear un registro, sin siquiera saber si lo encontrastes e intentas actualizar si saber siquiera que lograste bloquearlo (o a mi no me llego el IF del RLOCK()

Haría algunos cambios en el código.
Supongo que el valor clave esta en un campo del formulario y el indice se llama "XPRODUCTO"

WITH THISFORM
   IF SEEK( .idProducto.value, "PRODUCTOS", "XPRODUCTO")
      IF RLOCK()
         liAreaPrevia = SELECT()
         SELECT Productos
         REPLACE Cantidad WITH Cantidad - .txtCantidad.value && asumo que el textbox fuerza tipo dato numérico.
         FLUSH
         UNLOCK
         SELECT (liAreaPrevia)
      ELSE
         MessageBox("Registro Articulo No Disponible")
   ELSE
      MessageBox("Registro Articulo No Existe")
   ENDIF
ENDWITH

Espero te acerque a lo que necesitas...
Saludos: Miguel, La Pampa (RA)

JONATAN LÓPEZ

unread,
Apr 19, 2013, 12:55:48 PM4/19/13
to publice...@googlegroups.com
Hola Miguel :) no logra restar :/ el puntero se coloca en el registro pero no resta :/ y no quiero bloquear un registro solo quiero restar pero lo probe
bloqueando solo para saber si al hacer el bloqueo lo restaba solamente para eso :/ voy a seguir intentando cualquier ayuda seran bienvenidas
igual  :) Muchas Gracias por sus consejos :)

Jose Mario

unread,
Apr 19, 2013, 5:34:19 PM4/19/13
to publice...@googlegroups.com
coloca el formulario o lo que haces, asi es bien complicado
es mas facil ver lo que haces
hace un print screen de la pantalla y la adicionas o el formulario envialo

JONATAN LÓPEZ

unread,
Apr 19, 2013, 6:27:03 PM4/19/13
to publice...@googlegroups.com
FrmVentas.png

JONATAN LÓPEZ

unread,
Apr 19, 2013, 6:27:32 PM4/19/13
to publice...@googlegroups.com
Ahi esta el formulario :)

mpulla

unread,
Apr 19, 2013, 6:39:54 PM4/19/13
to publice...@googlegroups.com
Hola Jonatan.

Hace mucho que no trabajo con tablas nativas, me parece que tienes seteado buffer para la tabla por lo que despues de hacer la actualización tienes que hacer un tableUpdate.

Cambiaria el replace por:

local lnCantidad As Decimal, lidProducto As Integer

lnCantidad = ThisForm.TxtCantidad.Value
lidProducto= ThisForm.idProducto.value

Update Productos set Cantidad = Cantidad -  lnCantidad Where idProducto = 450
=TableUpdate(.T.)


Saludos.
Mauricio

Mario Oviedo

unread,
Apr 20, 2013, 9:16:40 AM4/20/13
to Comunidad de Visual Foxpro en Español
que complicado esto, lo mas comun es que tengas un formulario en donde
podas consultar, ingresar un nuevo movimiento, adicionar un nuevo
movimiento, eliminarar un movi, y por ahi un lugar donde podas decir
actualizar datos solo de los que aun no estan actualizados, estoy mas
o menos hablando de salidas o compras para inventario, no es
recomendable tener un combo para ingreso del codigo, a la par podes
tener un command para consultar los productos que tenes en tu
inventario

Mario Oviedo

unread,
Apr 20, 2013, 9:24:10 AM4/20/13
to Comunidad de Visual Foxpro en Español
compras.JPG

JONATAN LÓPEZ

unread,
Apr 22, 2013, 6:29:27 PM4/22/13
to publice...@googlegroups.com
TEMA SOLUCIONADO :D MUCHAS GRACIAS A TODOS ME FUERON PERO DE MUCHA AYUDA BENDICIONEEEES ^_^
Reply all
Reply to author
Forward
0 new messages