tMemDataSet curioso
Publicado: Sab Ago 12, 2006 3:09 pm
Hola estoy programando la carga de un pedido y quiero mostrar al final
cuanto suma el total vendido y la suma de las cantidades, entonces en el
tMemDataSet que tiene los datos en el evento onUpdate llamo a la siguiente
funcion:
METHOD ProductosUpdate( oSender ) CLASS tEditaPedido
::RecalcTotal()
RETURN Nil
METHOD RecalcTotal() CLASS tEditaPedido
local nTotal:=0, i, nItems:=0, nIva:=1+M->Sis_IvaInsc/100, j
local nRec:=::Productos:recno(), cAux:=''
::Productos:lUpdLinked:=.F.
::Productos:gotop()
while !::Productos:eof()
if ::aDatListasPrec[::comLista:nIndex][3]
nTotal+=::Productos:Cantidad*::Productos:Unitario
else
nTotal+=::Productos:Cantidad*::Productos:Unitario*nIva
endif
nItems+=round(::Productos:Cantidad,0)
::Productos:skip(1)
enddo
::edTotal:Value:=transf(nTotal,[email='@E]'@E[/email] 999,999.99')
::edItems:Value:=transf(nItems,[email='@E]'@E[/email] 999,999')
::Productos:goto(nRec)
::Productos:lUpdLinked:=.T.
RETURN Nil
Pero cuando tiene 2 lineas me suma dos veces la segunda linea y asi
sucesivamente ???¿¿¿, que puede ser .
Ademas en el evento onPostEdit de la columna codigo puse lo siguiente:
METHOD DBBrowse1Column1PostEdit( oSender, Value, lCanceled, nKey ) CLASS
tEditaPedido
local nPrec:=0
if !lCanceled .and. ::Productos:lOpen
::Productos:Edit()
::Productos:Codigo:=Value
if ::oSqlProd:lOpen
::oSqlProd:Close()
endif
::oSqlProd:cSelect:='select pro.cod_articu, pro.cod_barra,
pro.cod_iva, pro.descripcio, ' + ;
'lp.cod_articu, lp.nro_de_lis, lp.precio,
sk.cant_stock from sta11 pro ' + ;
'left join gva17 lp on
pro.cod_articu=lp.cod_articu ' + ;
'left join sta19 sk on
pro.cod_articu=sk.cod_articu ' + ;
'where pro.cod_articu='+CampoASTR(Value) + ;
' and lp.nro_de_lis='+CampoAStr(::nCodLista)
::oSqlProd:Open()
if !::oSqlProd:Eof()
::Productos:Descripcion:=::oSqlProd:Descripcio
::Productos:Unitario :=::oSqlProd:Precio
::Productos:Neto :=::Productos:Unitario*::Productos:Cantidad
::Productos:Stock :=::oSqlProd:Cant_Stock
nPrec:=::oSqlProd:Precio
endif
::Productos:UpDate()
::oSqlProd:Close()
endif
RETURN Nil
Quisiera saber si es necesario y lo estoy usando bien al ::Productos:Edit()
y ::Productos:Update(), es necesario en el componente tMemDataSet ??.
Desde ya muchas gracias por la respuesta a este problema misterioso.
cuanto suma el total vendido y la suma de las cantidades, entonces en el
tMemDataSet que tiene los datos en el evento onUpdate llamo a la siguiente
funcion:
METHOD ProductosUpdate( oSender ) CLASS tEditaPedido
::RecalcTotal()
RETURN Nil
METHOD RecalcTotal() CLASS tEditaPedido
local nTotal:=0, i, nItems:=0, nIva:=1+M->Sis_IvaInsc/100, j
local nRec:=::Productos:recno(), cAux:=''
::Productos:lUpdLinked:=.F.
::Productos:gotop()
while !::Productos:eof()
if ::aDatListasPrec[::comLista:nIndex][3]
nTotal+=::Productos:Cantidad*::Productos:Unitario
else
nTotal+=::Productos:Cantidad*::Productos:Unitario*nIva
endif
nItems+=round(::Productos:Cantidad,0)
::Productos:skip(1)
enddo
::edTotal:Value:=transf(nTotal,[email='@E]'@E[/email] 999,999.99')
::edItems:Value:=transf(nItems,[email='@E]'@E[/email] 999,999')
::Productos:goto(nRec)
::Productos:lUpdLinked:=.T.
RETURN Nil
Pero cuando tiene 2 lineas me suma dos veces la segunda linea y asi
sucesivamente ???¿¿¿, que puede ser .
Ademas en el evento onPostEdit de la columna codigo puse lo siguiente:
METHOD DBBrowse1Column1PostEdit( oSender, Value, lCanceled, nKey ) CLASS
tEditaPedido
local nPrec:=0
if !lCanceled .and. ::Productos:lOpen
::Productos:Edit()
::Productos:Codigo:=Value
if ::oSqlProd:lOpen
::oSqlProd:Close()
endif
::oSqlProd:cSelect:='select pro.cod_articu, pro.cod_barra,
pro.cod_iva, pro.descripcio, ' + ;
'lp.cod_articu, lp.nro_de_lis, lp.precio,
sk.cant_stock from sta11 pro ' + ;
'left join gva17 lp on
pro.cod_articu=lp.cod_articu ' + ;
'left join sta19 sk on
pro.cod_articu=sk.cod_articu ' + ;
'where pro.cod_articu='+CampoASTR(Value) + ;
' and lp.nro_de_lis='+CampoAStr(::nCodLista)
::oSqlProd:Open()
if !::oSqlProd:Eof()
::Productos:Descripcion:=::oSqlProd:Descripcio
::Productos:Unitario :=::oSqlProd:Precio
::Productos:Neto :=::Productos:Unitario*::Productos:Cantidad
::Productos:Stock :=::oSqlProd:Cant_Stock
nPrec:=::oSqlProd:Precio
endif
::Productos:UpDate()
::oSqlProd:Close()
endif
RETURN Nil
Quisiera saber si es necesario y lo estoy usando bien al ::Productos:Edit()
y ::Productos:Update(), es necesario en el componente tMemDataSet ??.
Desde ya muchas gracias por la respuesta a este problema misterioso.