MakeTotals en Columna editable

MakeTotals en Columna editable

Postby FranciscoA » Mon Jan 02, 2017 9:00 pm

Feliz año nuevo 2017, a todos.

Bueno, este año me ha recibido con un problema que considero pequeño, pero llevo horas tratando de resolverlo.

En un xbrowse de solo 3 columnas, la primera es editable.

Al introducir un valor en la col editable (1ra), los calculos para las otras lo hace bien.
Sin embargo el MakeTotals() actua extrañamente: Duplica en el :nTotal de la 1a columna, el valor introducido.

Agradeceré cualquier sugerencia o solución que puedan brindar.

Aqui el codigo para prueba:
Code: Select all  Expand view
//---------------------//PRUEBA MAKETOTALS() SOBRE COL EDITABLE CON TOTAL EN FOOTER
Function ColFootTotal()
   local cOldSele:=Select()
   local oDlg, oBrw
   LOCAL bSayMontos := {|| oBrw:MakeTotals(),oBrw:Refresh(), msginfo(oBrw:pventaus:nTotal) }
   LOCAL nTCambio := 29.30, n

   DBCREATE("MAESTRO",{ {"PVENTAUS","N", 10,2 } ,;
                         {"TCAMBIO" ,"N", 10,4 },;
                         {"PVENTA" ,"N",  10,2 } })

   DBUSEAREA(.T.,,"MAESTRO","MAESTRO",.F.)
   dbselectarea("MAESTRO")

   for n := 1 to 5
      Maestro->(dbAppend())
      Maestro->pventaus := 0  
      Maestro->tcambio  := 0  
      Maestro->pventa   := 0  
   next

   dbgotop()

   DEFINE DIALOG oDlg SIZE 600,500 PIXEL
   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "MAESTRO" ;
      COLUMNS "PVENTAUS","TCAMBIO","PVENTA" ;
      FOOTERS CELL LINES NOBORDER


WITH OBJECT oBrw:PVENTAUS
   :cEditPicture := "999,999.99"
   :nEditType := EDIT_GET   //1
   :lTotal    := .t.
   :nTotal    := 0
   :nFooterType := AGGR_SUM
   :bOnPostEdit := {|oCol,xVal,nKey| Maestro->TCAMBIO := nTCambio,;
                                     Maestro->PVENTAUS:=xVal,;
                                     Maestro->PVENTA:=Round(xVal*nTcambio,2),;
                                     Eval(bSayMontos) }

   :bEditValid := {|oGet|  oGet:Value > 0 }
END

WITH OBJECT oBrw:PVENTA
   :lTotal     := .t.
   :nTotal     := 0
   :nFooterType := AGGR_SUM
END

   oBrw:MakeTotals()

   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED

   Maestro->(DbCloseArea())
   Ferase("Maestro.dbf")

   dbSelectArea(cOldSele)
return nil
 


Si observan, el msginfo presenta el valor correcto, pero en el footer es erroneo.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2111
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: MakeTotals en Columna editable (Resuelto)

Postby FranciscoA » Mon Jan 02, 2017 9:38 pm

:bFooter := { |o| o:nTotal }

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2111
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: MakeTotals en Columna editable

Postby nageswaragunupudi » Thu Jan 05, 2017 11:02 pm

Please try
Code: Select all  Expand view
#include "fivewin.ch"

Function Main()
   local cOldSele:=Select()
   local oDlg, oBrw
   LOCAL nTCambio := 29.30, n

   DBCREATE("MAESTRO",{ {"PVENTAUS","N", 10,2 } ,;
                         {"TCAMBIO" ,"N", 10,4 },;
                         {"PVENTA" ,"N",  10,2 } })

   DBUSEAREA(.T.,,"MAESTRO","MAESTRO",.F.)
   dbselectarea("MAESTRO")

   for n := 1 to 5
      Maestro->(dbAppend())
      Maestro->pventaus := 0
      Maestro->tcambio  := 0
      Maestro->pventa   := 0
   next

   dbgotop()

   DEFINE DIALOG oDlg SIZE 600,500 PIXEL
   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "MAESTRO" ;
      COLUMNS "PVENTAUS","TCAMBIO","PVENTA" ;
      FOOTERS CELL LINES NOBORDER FASTEDIT

   WITH OBJECT oBrw

      WITH OBJECT :PVENTAUS
         :nEditType := EDIT_GET   //1
         :nFooterType := AGGR_SUM
         :bOnPostEdit := {|oCol,xVal,nKey| Maestro->TCAMBIO := nTCambio,;
                                           Maestro->PVENTAUS:=xVal }

         :bEditValid := {|oGet|  oGet:Value > 0 }
         :bOnChange  := { || oBrw:PVenta:VarPut( ROUND( MAESTRO->TCAMBIO * MAESTRO->PVENTAUS, 2 ) ) }
      END

      :PVENTA:nFooterType := AGGR_SUM
      :MakeTotals()
      :CreateFromCode()
   END

   ACTIVATE DIALOG oDlg CENTERED

   Maestro->(DbCloseArea())
   Ferase("Maestro.dbf")

   dbSelectArea(cOldSele)
return nil
 


When PVENAUS is edited, this column is automatically re-totaled.
oBrw:PVenta:VarPut( <newvalue> ) changes the value of PVENTA and also automatically re-totals PVENTA column.

Need not call MakeTotals() again at runtime.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10253
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: MakeTotals en Columna editable

Postby FranciscoA » Fri Jan 06, 2017 4:36 am

Mr. Rao.
Gracias por su codigo. Lo implementaré.
Regards.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2111
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 12 guests

cron