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.
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
tMemDataSet curioso
tMemDataSet curioso
Christian,
Te recomiendo que cambies esos métodos largos de mucho código por simples
LogDegug() para que compruebes exactamente que eventos se te están
disparando y en que orden.
Si te sigue fallando mandanos un pequeño ejemplo que podamos usar. Gracias
Un saludo,
"Christian" <christianassenza@yahoo.com.ar> escribió en el mensaje
news:[email=44ddd31f@news.xailer.com...]44ddd31f@news.xailer.com...[/email]
>
> 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.
>
>
>
Te recomiendo que cambies esos métodos largos de mucho código por simples
LogDegug() para que compruebes exactamente que eventos se te están
disparando y en que orden.
Si te sigue fallando mandanos un pequeño ejemplo que podamos usar. Gracias
Un saludo,
"Christian" <christianassenza@yahoo.com.ar> escribió en el mensaje
news:[email=44ddd31f@news.xailer.com...]44ddd31f@news.xailer.com...[/email]
>
> 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.
>
>
>
tMemDataSet curioso
Ya encontre el problema, cuando el tMemDataSet entra en modo de edicion, no
lo podes recorrer siempre te devuelve los campos del mismo registro y yo
cuando grabo los datos ponia en modo de edicion el vicio porque parece que
el TDBBrowse me lo pone automaticamente en dicho modo, asi que ya lo
resolvi, muchas gracias igualmente y voy a probar esa funcion LogDebug.
Pero ahora tengo otro msg de error que ya te lo estoy mandando al foro.
"Ignacio Ortiz de Zúñiga" <_support_@xailer.com> escribió en el mensaje
news:[email=44e040c7@news.xailer.com...]44e040c7@news.xailer.com...[/email]
> Christian,
>
> Te recomiendo que cambies esos métodos largos de mucho código por simples
> LogDegug() para que compruebes exactamente que eventos se te están
> disparando y en que orden.
>
> Si te sigue fallando mandanos un pequeño ejemplo que podamos usar.
> Gracias
>
> Un saludo,
>
> "Christian" <christianassenza@yahoo.com.ar> escribió en el mensaje
> news:[email=44ddd31f@news.xailer.com...]44ddd31f@news.xailer.com...[/email]
>>
>> 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.
>>
>>
>>
>
>
lo podes recorrer siempre te devuelve los campos del mismo registro y yo
cuando grabo los datos ponia en modo de edicion el vicio porque parece que
el TDBBrowse me lo pone automaticamente en dicho modo, asi que ya lo
resolvi, muchas gracias igualmente y voy a probar esa funcion LogDebug.
Pero ahora tengo otro msg de error que ya te lo estoy mandando al foro.
"Ignacio Ortiz de Zúñiga" <_support_@xailer.com> escribió en el mensaje
news:[email=44e040c7@news.xailer.com...]44e040c7@news.xailer.com...[/email]
> Christian,
>
> Te recomiendo que cambies esos métodos largos de mucho código por simples
> LogDegug() para que compruebes exactamente que eventos se te están
> disparando y en que orden.
>
> Si te sigue fallando mandanos un pequeño ejemplo que podamos usar.
> Gracias
>
> Un saludo,
>
> "Christian" <christianassenza@yahoo.com.ar> escribió en el mensaje
> news:[email=44ddd31f@news.xailer.com...]44ddd31f@news.xailer.com...[/email]
>>
>> 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.
>>
>>
>>
>
>