Revisa este metodo : METHOD BtnBmp1Click( oSender ) CLASS TForm2
Desde la linea 152 a la linea 214 y desde la linea 165 a la linea 201 (el
bucle) que es donde se produce el problema solo tiene 14 lineas de codigo,
por favor solo lee estas lineas y ejecuta el programa y veras el
comportamiento extraño.
Y el METHOD BtnBmp1Click( oSender ) CLASS TForm2 es el que produce la falla
Todo el otro codigo del formulario ni lo veas.
Otra, si no queres ver el codigo no lo veas, solo ejecuta el programa y
prueba lo que te digo:Lo unico que tenes que hacer es un click en la
cantidad 25 y escribir
otra y directamente hace un click en el boton grabar, luego proba hacer un
click en la cantidad presiona enter y hace un click en grabar.
Y dime si puedes reproducir la falla (insisto no veas el codigo), si la
puedes reproducir y te pica la curiosidad, solo lee las lineas del bucle
165-201 el bucle solo recorre el tMemDataSet y te informa las lineas que
recorrio con un MsgAlert.
Saludos Atte.
Ing. Christian Assenza
----- Original Message -----
From: Ignacio Ortiz de Zúñiga
Newsgroups: local.xailer.pro.es
Sent: Friday, November 17, 2006 3:20 PM
Subject: Re: Problemas con el tMemDataSet (2)
Crhistian,
¿Dónde están el código comentado? Cuando me hagas un ejemplo de 20 líneas
encantado lo reviso. Espero que lo entiendas.
Saludos
/*
* Proyecto: Sistema_Pedidos
* Fichero: test_tmem.prg
* Descripción:
* Autor:
* Fecha: 13/11/2006
*/
#include "Xailer.ch"
CLASS TForm2 FROM TForm
COMPONENT oDBBrowse1
COMPONENT Productos
COMPONENT oDBBrowse1Column3
COMPONENT oDBBrowse1Column1
COMPONENT oBtnBmp1
COMPONENT oDBBrowse1Column5
COMPONENT lblTotal
COMPONENT oButton1
COMPONENT oButton2
COMPONENT oBDIsi
DATA nItems INIT 0
DATA nTotal INIT 0
METHOD CreateForm()
METHOD FormInitialize( oSender )
METHOD DBBrowse1Column1PostEdit( oSender, Value, lCanceled, nKey )
METHOD DBBrowse1Column3PostEdit( oSender, Value, lCanceled, nKey )
METHOD BtnBmp1Click( oSender )
METHOD RecalcTotal(cTipo)
METHOD CalcNeto()
METHOD ProductosAddNew( oSender )
METHOD ProductosCancel( oSender )
METHOD ProductosEdit( oSender )
METHOD ProductosPostDelete( oSender )
METHOD ProductosPostOpen( oSender )
METHOD ProductosPreAppend( oSender )
METHOD ProductosUpdate( oSender )
METHOD Button1Click( oSender )
METHOD Button2Click( oSender )
ENDCLASS
#include "test_tmem.xfm"
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TForm2
local i, cCodigo, cDescrip, nCantidad, nUnitario, oSql
::oBDIsi:lConnected:=.T.
oSql:=::oBDIsi:NewDataSet('select idproducto,nombreproducto,preciounidad
from Productos')
oSql:lDisplayErrors:=.F.
for i:=1 to 4
do case
case i==1
cCodigo:='4 '
nCantidad:=5
case i==2
cCodigo:='1 '
nCantidad:=2
case i==3
cCodigo:='8 '
nCantidad:=14
case i==4
cCodigo:='2 '
nCantidad:=25
endcase
oSql:cSelect:="select idproducto,nombreproducto,preciounidad from
Productos" + ;
" where idproducto="+alltrim(cCodigo)
oSql:Open()
cDescrip :=oSql:NombreProducto
nUnitario:=oSql:PrecioUnidad
if i==1
::Productos:Open({{cCodigo,cDescrip,nCantidad,nUnitario,0,nC antidad*nUnitario,0,21,0}}
, ;
{'Codigo','Descripcion','Cantidad','Unitario' , ;
'PrecSIva','Neto','Stock','TasaIva' , ;
'Descuento' ;
})
else
::Productos:AddNew()
::Productos:Codigo :=cCodigo
::Productos:Descripcion:=cDescrip
::Productos:Cantidad :=nCantidad
::Productos:Unitario :=nUnitario
::Productos:Neto :=nCantidad*nUnitario
::Productos:UpDate()
endif
oSql:Close()
next
::RecalcTotal('TODO')
oSql:End()
::oDBBrowse1:nColSel:=3
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD DBBrowse1Column1PostEdit( oSender, Value, lCanceled, nKey ) CLASS
TForm2
local nValue, cSelect, oSql
if ::Productos:lOpen .and. !lCanceled
cSelect:="select idproducto,nombreproducto,preciounidad from
Productos" + ;
" where idproducto="+alltrim(Value)
oSql:=::oBDIsi:NewDataSet(cSelect)
oSql:lDisplayErrors:=.F.
oSql:Open()
if empty(Value)
::Productos:Descripcion:=''
::Productos:Unitario :=0
else
::Productos:Descripcion:=oSql:nombreproducto
::Productos:Unitario :=oSql:PrecioUnidad
endif
::Productos:Codigo:=Value
::CalcNeto()
oSql:Close()
oSql:End()
endif
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD CalcNeto() CLASS tForm2
if valtype(::Productos:Unitario)<>'N'
::Productos:Unitario:=0
endif
if valtype(::Productos:Cantidad)<>'N'
::Productos:Cantidad:=0
endif
::Productos:Neto:=::Productos:Unitario*::Productos:Cantidad
RETURN(::Productos:Neto)
//---------------------------------------------------------- --------------------
METHOD DBBrowse1Column3PostEdit( oSender, Value, lCanceled, nKey ) CLASS
TForm2
if ::Productos:lOpen .and. !lCanceled
::Productos:Cantidad:=Value
::CalcNeto()
endif
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD BtnBmp1Click( oSender ) CLASS TForm2
local cAux:='', nValue, cSelect, oSql
/// DESCONECTO EL BROWSE DE LOS DATOS PARA QUE NO SE ACTUALIZE EL BROWSE
///
::Productos:lUpdLinked:=.F.
/// VOY AL PRIMER ITEM
::Productos:gotop()
/// CREO UNA CONSULTA ///
oSql:=::oBDIsi:NewDataSet('select idproducto,nombreproducto,preciounidad
from Productos')
oSql:lDisplayErrors:=.F.
/// BUCLE DE RECORRIDO DE TODOS LOS ITEMS ///
while !::Productos:eof()
/// SI NO TIENE PRODUCTO PASO A LA SIGUIENTE LINEA ///
if empty(::Productos:Codigo)
::Productos:skip(1)
loop
endif
/// BUSCO EN LA TABLA EL PRODUCTO QUE RECORRO ///
oSql:cSelect:="select idproducto,nombreproducto,preciounidad from
Productos" + ;
" where idproducto="+alltrim(::Productos:Codigo)
/// ABRO LA CONSULTA
oSql:Open()
/// ACTUALIZO LOS DATOS DEL ITEM EN LA GRILLA
/// CON LOS DE LA BASE DE DATOS
::Productos:Descripcion:=oSql:nombreproducto
::Productos:Unitario :=oSql:PrecioUnidad
/// CALCULO EL TOTAL DEL ITEM CANTIDAD*UNITARIO
::CalcNeto()
/// ARMO UN STRING PARA MOSTRAR AL FINAL DEL BUCLE ///
cAux+='Recorri registro '+strzero(::Productos:recno(),2) + ;
' '+alltrim(::Productos:Codigo) + ;
' '+alltrim(str(::Productos:Cantidad,9,1)) + ;
' '+alltrim(str(::Productos:Unitario,9,2)) + ;
' '+alltrim(str(::Productos:Neto,9,2))+chr(13)+chr(10)
/// CIERRO LA CONSULTA
oSql:Close()
/// PASO AL SIGUIENTE REGISTRO ///
::Productos:Skip(1)
/// FIN DEL BUCLE ///
enddo
/// VUELVO A CONECTAR EL BROWSE A LOS DATOS
::Productos:lUpdLinked:=.T.
/// DEJO EL PUNTERO EN EL PRIMER REGISTRO
::Productos:gotop()
/// DESCTRUYO LA CONSULTA
oSql:End()
/// TE MUESTRO LOS ITEMS QUE RECORRI
MsgAlert(cAux,'Ver')
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosAddNew( oSender ) CLASS TForm2
::Productos:Cargo:='AGR'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosCancel( oSender ) CLASS TForm2
if ::Productos:Cargo<>'ESP'
::RecalcTotal('SUMA')
endif
::Productos:Cargo:='ESP'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosEdit( oSender ) CLASS TForm2
if ::Productos:Cargo<>'EDI'
::RecalcTotal('RESTA')
endif
::Productos:Cargo:='EDI'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosPostDelete( oSender ) CLASS TForm2
::RecalcTotal('TODO')
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosPostOpen( oSender ) CLASS TForm2
::Productos:Cargo:='ESP'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosPreAppend( oSender ) CLASS TForm2
if ::Productos:RecCount()>=14
MsgAlert('No puede agregar mas de 14 items ...')
RETURN(.F.)
endif
RETURN(.T.)
//---------------------------------------------------------- --------------------
METHOD ProductosUpdate( oSender ) CLASS TForm2
if ::Productos:Cargo<>'ESP'
::RecalcTotal('SUMA')
endif
::Productos:Cargo:='ESP'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD RecalcTotal(cTipo) CLASS TForm2
local nRec:=::Productos:recno(), nAux1, nAux2
nAux1:=::Productos:Unitario*::Productos:Cantidad
do case
case cTipo=='SUMA'
::nTotal+=nAux1
::nItems+=round(::Productos:Cantidad,0)
case cTipo=='RESTA'
::nTotal-=nAux1
::nItems-=round(::Productos:Cantidad,0)
case cTipo=='TODO'
::Productos:lUpdLinked:=.F.
::Productos:gotop()
::nTotal :=0
::nItems :=0
while !::Productos:eof()
nAux1:=::Productos:Unitario*::Productos:Cantidad
::nTotal+=nAux1
::nItems +=round(::Productos:Cantidad(dsFIELD),0)
::Productos:skip(1)
enddo
::Productos:goto(nRec)
::Productos:lUpdLinked:=.T.
endcase
::lblTotal:cText:='TOTAL:'+transf(::nTotal,[email='@E]'@E[/email] 999,999.99') + ;
' ITEMS:'+str(::nItems,3)
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD Button1Click( oSender ) CLASS TForm2
::oBtnBmp1:lEnabled:=.F.
::Productos:AddNew()
::Productos:UpDate()
::oDbBrowse1:nColSel:=1
::oBtnBmp1:lEnabled:=.T.
::oDbBrowse1:SetFocus()
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD Button2Click( oSender ) CLASS TForm2
if ::Productos:reccount()>1
::Productos:Delete()
else
::Productos:Edit()
::Productos:Codigo :=''
::Productos:Descripcion:=''
::Productos:Unitario :=0
::Productos:Cantidad :=0
::Productos:Neto :=0
::Productos:UpDate()
::oDBBrowse1:Refresh()
endif
::oDbBrowse1:SetFocus()
RETURN Nil
//---------------------------------------------------------- --------------------
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje
news:[email=
455df77a@news.xailer.com...]
455df77a@news.xailer.com...[/email]
> Ignacio el ejemplo, la seccion que tenes que revisar tiene 14 lineas y
> esta
> toda comentada no tenes que agregar los datos ni nada. Bueno en fin
> dejalo,
> la verdad que le dedique bastante tiempo para hacerlo y comentarlo.
>
> Saludos
>
>
>
> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
> news:455dbd10$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>> Christian,
>>
>> Como te comento. Te ruego que hagas un ejemplo más simple o me digas como
>> reproducirlo con cualquier ejemplo que incluye Xailer. Lo siento.
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>>
http://www.xailer.com
>> "Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje
>> news:[email=
455d97b7@news.xailer.com...]
455d97b7@news.xailer.com...[/email]
>>> Ignacio probe lo que me envias y se me soluciono el problema de la
>>> cantidad que se me duplicaba en la linea de abajo. Con respecto al
>>> primer
>>> problema persiste, he modificado el programa para que ya te aparezca con
>>> datos cargados y comente c/linea entre la 153 y 212, el bucle que es
>>> donde esta la falla solo tiene 14 lineas. Espero que no me consideres un
>>> pesado y puedas probarlo y ver de que se trata.
>>> Lo unico que tenes que hacer es un click en la cantidad 25 y escribir
>>> otra y directamente hace un click en el boton grabar, luego proba hacer
>>> un click en la cantidad presiona enter y hace un click en grabar.
>>>
>>> Espero no tener que molestarte mas.
>>>
>>> Saludos Atte desde la Patagonia Argentina
>>> Ing. Christian Assenza
>>>
>>>
>>>
>>>
>>> "Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje
>>> news:[email=
4558d5f2@news.xailer.com...]
4558d5f2@news.xailer.com...[/email]
>>>> Por fin logre reproducir la falla, (ver seccion del codigo VER 1), si
>>>> yo
>>>> estoy dentro del browse y edito la cantidad y para salir no presiono
>>>> enter
>>>> si no que directamente hago un click en el boton 'Grabar' fijate que al
>>>> mostrar los datos que recorri del tMem solo me aparece la ultima fila o
>>>> la
>>>> fila en que estoy para abajo (debes probarlo con 4 o mas lineas), si
>>>> quito
>>>> la seccion VER 1 de (A) a (B) y quito ademas las lineas (C) funciona de
>>>> maravilla el codigo.
>>>>
>>>> Y la otra falla (ver seccion del codigo VER 2) cada ves que estoy en la
>>>> cantidad y presiono enter, si estoy en la ultima linea quiero que se
>>>> agregue
>>>> una nueva pero la cantidad se me repite en la linea de abajo, como
>>>> deberia
>>>> programar esto para que no me pegue la cantidad en la linea de abajo
>>>> ???.
>>>>
>>>> Ambos problemas me preocupan de sobremanera imagina un sistema de
>>>> pedidos
>>>> que mezcla los precios ?. Se que este es mi primer proyecto de ese
>>>> estilo y
>>>> recibire antentamente cualquier sugerencia para que funcione de la
>>>> mejor
>>>> manera.
>>>>
>>>> Saludos Atte.
>>>> Ing. Christian Assenza
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>
"Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
news:455dfd58$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
Crhistian,
¿Dónde están el código comentado? Cuando me hagas un ejemplo de 20 líneas
encantado lo reviso. Espero que lo entiendas.
Saludos
/*
* Proyecto: Sistema_Pedidos
* Fichero: test_tmem.prg
* Descripción:
* Autor:
* Fecha: 13/11/2006
*/
#include "Xailer.ch"
CLASS TForm2 FROM TForm
COMPONENT oDBBrowse1
COMPONENT Productos
COMPONENT oDBBrowse1Column3
COMPONENT oDBBrowse1Column1
COMPONENT oBtnBmp1
COMPONENT oDBBrowse1Column5
COMPONENT lblTotal
COMPONENT oButton1
COMPONENT oButton2
COMPONENT oBDIsi
DATA nItems INIT 0
DATA nTotal INIT 0
METHOD CreateForm()
METHOD FormInitialize( oSender )
METHOD DBBrowse1Column1PostEdit( oSender, Value, lCanceled, nKey )
METHOD DBBrowse1Column3PostEdit( oSender, Value, lCanceled, nKey )
METHOD BtnBmp1Click( oSender )
METHOD RecalcTotal(cTipo)
METHOD CalcNeto()
METHOD ProductosAddNew( oSender )
METHOD ProductosCancel( oSender )
METHOD ProductosEdit( oSender )
METHOD ProductosPostDelete( oSender )
METHOD ProductosPostOpen( oSender )
METHOD ProductosPreAppend( oSender )
METHOD ProductosUpdate( oSender )
METHOD Button1Click( oSender )
METHOD Button2Click( oSender )
ENDCLASS
#include "test_tmem.xfm"
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TForm2
local i, cCodigo, cDescrip, nCantidad, nUnitario, oSql
::oBDIsi:lConnected:=.T.
oSql:=::oBDIsi:NewDataSet('select idproducto,nombreproducto,preciounidad
from Productos')
oSql:lDisplayErrors:=.F.
for i:=1 to 4
do case
case i==1
cCodigo:='4 '
nCantidad:=5
case i==2
cCodigo:='1 '
nCantidad:=2
case i==3
cCodigo:='8 '
nCantidad:=14
case i==4
cCodigo:='2 '
nCantidad:=25
endcase
oSql:cSelect:="select idproducto,nombreproducto,preciounidad from
Productos" + ;
" where idproducto="+alltrim(cCodigo)
oSql:Open()
cDescrip :=oSql:NombreProducto
nUnitario:=oSql:PrecioUnidad
if i==1
::Productos:Open({{cCodigo,cDescrip,nCantidad,nUnitario,0,nC antidad*nUnitario,0,21,0}}
, ;
{'Codigo','Descripcion','Cantidad','Unitario' , ;
'PrecSIva','Neto','Stock','TasaIva' , ;
'Descuento' ;
})
else
::Productos:AddNew()
::Productos:Codigo :=cCodigo
::Productos:Descripcion:=cDescrip
::Productos:Cantidad :=nCantidad
::Productos:Unitario :=nUnitario
::Productos:Neto :=nCantidad*nUnitario
::Productos:UpDate()
endif
oSql:Close()
next
::RecalcTotal('TODO')
oSql:End()
::oDBBrowse1:nColSel:=3
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD DBBrowse1Column1PostEdit( oSender, Value, lCanceled, nKey ) CLASS
TForm2
local nValue, cSelect, oSql
if ::Productos:lOpen .and. !lCanceled
cSelect:="select idproducto,nombreproducto,preciounidad from
Productos" + ;
" where idproducto="+alltrim(Value)
oSql:=::oBDIsi:NewDataSet(cSelect)
oSql:lDisplayErrors:=.F.
oSql:Open()
if empty(Value)
::Productos:Descripcion:=''
::Productos:Unitario :=0
else
::Productos:Descripcion:=oSql:nombreproducto
::Productos:Unitario :=oSql:PrecioUnidad
endif
::Productos:Codigo:=Value
::CalcNeto()
oSql:Close()
oSql:End()
endif
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD CalcNeto() CLASS tForm2
if valtype(::Productos:Unitario)<>'N'
::Productos:Unitario:=0
endif
if valtype(::Productos:Cantidad)<>'N'
::Productos:Cantidad:=0
endif
::Productos:Neto:=::Productos:Unitario*::Productos:Cantidad
RETURN(::Productos:Neto)
//---------------------------------------------------------- --------------------
METHOD DBBrowse1Column3PostEdit( oSender, Value, lCanceled, nKey ) CLASS
TForm2
if ::Productos:lOpen .and. !lCanceled
::Productos:Cantidad:=Value
::CalcNeto()
endif
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD BtnBmp1Click( oSender ) CLASS TForm2
local cAux:='', nValue, cSelect, oSql
/// DESCONECTO EL BROWSE DE LOS DATOS PARA QUE NO SE ACTUALIZE EL BROWSE
///
::Productos:lUpdLinked:=.F.
/// VOY AL PRIMER ITEM
::Productos:gotop()
/// CREO UNA CONSULTA ///
oSql:=::oBDIsi:NewDataSet('select idproducto,nombreproducto,preciounidad
from Productos')
oSql:lDisplayErrors:=.F.
/// BUCLE DE RECORRIDO DE TODOS LOS ITEMS ///
while !::Productos:eof()
/// SI NO TIENE PRODUCTO PASO A LA SIGUIENTE LINEA ///
if empty(::Productos:Codigo)
::Productos:skip(1)
loop
endif
/// BUSCO EN LA TABLA EL PRODUCTO QUE RECORRO ///
oSql:cSelect:="select idproducto,nombreproducto,preciounidad from
Productos" + ;
" where idproducto="+alltrim(::Productos:Codigo)
/// ABRO LA CONSULTA
oSql:Open()
/// ACTUALIZO LOS DATOS DEL ITEM EN LA GRILLA
/// CON LOS DE LA BASE DE DATOS
::Productos:Descripcion:=oSql:nombreproducto
::Productos:Unitario :=oSql:PrecioUnidad
/// CALCULO EL TOTAL DEL ITEM CANTIDAD*UNITARIO
::CalcNeto()
/// ARMO UN STRING PARA MOSTRAR AL FINAL DEL BUCLE ///
cAux+='Recorri registro '+strzero(::Productos:recno(),2) + ;
' '+alltrim(::Productos:Codigo) + ;
' '+alltrim(str(::Productos:Cantidad,9,1)) + ;
' '+alltrim(str(::Productos:Unitario,9,2)) + ;
' '+alltrim(str(::Productos:Neto,9,2))+chr(13)+chr(10)
/// CIERRO LA CONSULTA
oSql:Close()
/// PASO AL SIGUIENTE REGISTRO ///
::Productos:Skip(1)
/// FIN DEL BUCLE ///
enddo
/// VUELVO A CONECTAR EL BROWSE A LOS DATOS
::Productos:lUpdLinked:=.T.
/// DEJO EL PUNTERO EN EL PRIMER REGISTRO
::Productos:gotop()
/// DESCTRUYO LA CONSULTA
oSql:End()
/// TE MUESTRO LOS ITEMS QUE RECORRI
MsgAlert(cAux,'Ver')
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosAddNew( oSender ) CLASS TForm2
::Productos:Cargo:='AGR'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosCancel( oSender ) CLASS TForm2
if ::Productos:Cargo<>'ESP'
::RecalcTotal('SUMA')
endif
::Productos:Cargo:='ESP'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosEdit( oSender ) CLASS TForm2
if ::Productos:Cargo<>'EDI'
::RecalcTotal('RESTA')
endif
::Productos:Cargo:='EDI'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosPostDelete( oSender ) CLASS TForm2
::RecalcTotal('TODO')
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosPostOpen( oSender ) CLASS TForm2
::Productos:Cargo:='ESP'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ProductosPreAppend( oSender ) CLASS TForm2
if ::Productos:RecCount()>=14
MsgAlert('No puede agregar mas de 14 items ...')
RETURN(.F.)
endif
RETURN(.T.)
//---------------------------------------------------------- --------------------
METHOD ProductosUpdate( oSender ) CLASS TForm2
if ::Productos:Cargo<>'ESP'
::RecalcTotal('SUMA')
endif
::Productos:Cargo:='ESP'
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD RecalcTotal(cTipo) CLASS TForm2
local nRec:=::Productos:recno(), nAux1, nAux2
nAux1:=::Productos:Unitario*::Productos:Cantidad
do case
case cTipo=='SUMA'
::nTotal+=nAux1
::nItems+=round(::Productos:Cantidad,0)
case cTipo=='RESTA'
::nTotal-=nAux1
::nItems-=round(::Productos:Cantidad,0)
case cTipo=='TODO'
::Productos:lUpdLinked:=.F.
::Productos:gotop()
::nTotal :=0
::nItems :=0
while !::Productos:eof()
nAux1:=::Productos:Unitario*::Productos:Cantidad
::nTotal+=nAux1
::nItems +=round(::Productos:Cantidad(dsFIELD),0)
::Productos:skip(1)
enddo
::Productos:goto(nRec)
::Productos:lUpdLinked:=.T.
endcase
::lblTotal:cText:='TOTAL:'+transf(::nTotal,[email='@E]'@E[/email] 999,999.99') + ;
' ITEMS:'+str(::nItems,3)
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD Button1Click( oSender ) CLASS TForm2
::oBtnBmp1:lEnabled:=.F.
::Productos:AddNew()
::Productos:UpDate()
::oDbBrowse1:nColSel:=1
::oBtnBmp1:lEnabled:=.T.
::oDbBrowse1:SetFocus()
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD Button2Click( oSender ) CLASS TForm2
if ::Productos:reccount()>1
::Productos:Delete()
else
::Productos:Edit()
::Productos:Codigo :=''
::Productos:Descripcion:=''
::Productos:Unitario :=0
::Productos:Cantidad :=0
::Productos:Neto :=0
::Productos:UpDate()
::oDBBrowse1:Refresh()
endif
::oDbBrowse1:SetFocus()
RETURN Nil
//---------------------------------------------------------- --------------------
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje
news:[email=
455df77a@news.xailer.com...]
455df77a@news.xailer.com...[/email]
> Ignacio el ejemplo, la seccion que tenes que revisar tiene 14 lineas y
> esta
> toda comentada no tenes que agregar los datos ni nada. Bueno en fin
> dejalo,
> la verdad que le dedique bastante tiempo para hacerlo y comentarlo.
>
> Saludos
>
>
>
> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
> news:455dbd10$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>> Christian,
>>
>> Como te comento. Te ruego que hagas un ejemplo más simple o me digas como
>> reproducirlo con cualquier ejemplo que incluye Xailer. Lo siento.
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>>
http://www.xailer.com
>> "Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje
>> news:[email=
455d97b7@news.xailer.com...]
455d97b7@news.xailer.com...[/email]
>>> Ignacio probe lo que me envias y se me soluciono el problema de la
>>> cantidad que se me duplicaba en la linea de abajo. Con respecto al
>>> primer
>>> problema persiste, he modificado el programa para que ya te aparezca con
>>> datos cargados y comente c/linea entre la 153 y 212, el bucle que es
>>> donde esta la falla solo tiene 14 lineas. Espero que no me consideres un
>>> pesado y puedas probarlo y ver de que se trata.
>>> Lo unico que tenes que hacer es un click en la cantidad 25 y escribir
>>> otra y directamente hace un click en el boton grabar, luego proba hacer
>>> un click en la cantidad presiona enter y hace un click en grabar.
>>>
>>> Espero no tener que molestarte mas.
>>>
>>> Saludos Atte desde la Patagonia Argentina
>>> Ing. Christian Assenza
>>>
>>>
>>>
>>>
>>> "Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje
>>> news:[email=
4558d5f2@news.xailer.com...]
4558d5f2@news.xailer.com...[/email]
>>>> Por fin logre reproducir la falla, (ver seccion del codigo VER 1), si
>>>> yo
>>>> estoy dentro del browse y edito la cantidad y para salir no presiono
>>>> enter
>>>> si no que directamente hago un click en el boton 'Grabar' fijate que al
>>>> mostrar los datos que recorri del tMem solo me aparece la ultima fila o
>>>> la
>>>> fila en que estoy para abajo (debes probarlo con 4 o mas lineas), si
>>>> quito
>>>> la seccion VER 1 de (A) a (B) y quito ademas las lineas (C) funciona de
>>>> maravilla el codigo.
>>>>
>>>> Y la otra falla (ver seccion del codigo VER 2) cada ves que estoy en la
>>>> cantidad y presiono enter, si estoy en la ultima linea quiero que se
>>>> agregue
>>>> una nueva pero la cantidad se me repite en la linea de abajo, como
>>>> deberia
>>>> programar esto para que no me pegue la cantidad en la linea de abajo
>>>> ???.
>>>>
>>>> Ambos problemas me preocupan de sobremanera imagina un sistema de
>>>> pedidos
>>>> que mezcla los precios ?. Se que este es mi primer proyecto de ese
>>>> estilo y
>>>> recibire antentamente cualquier sugerencia para que funcione de la
>>>> mejor
>>>> manera.
>>>>
>>>> Saludos Atte.
>>>> Ing. Christian Assenza
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>