Edicion de un ARRAY con xBrowse

Post Reply
Marcelo Via Giglio
Posts: 1077
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time

Edicion de un ARRAY con xBrowse

Post by Marcelo Via Giglio »

Buenos dias,

siendo nuevo con xBrowse he buscado la manera de hacer una edicion de un array directamente en el Browse


(Parte del codigo)

Code: Select all | Expand



REDEFINE XBROWSE oBrw ID 103 OF oDlg ;
              ARRAY oData:aData ;
                    CELL FASTEDIT

       oCol                   := oBrw:AddCol()
       oCol:bStrData      := aData[ oBrw:nArrayAt, 5 ]
       oCol:cHeader       := "Cantidad"
       oCol:nWidth         := 70
       oCol:nDataStrAlign := 1
       oCol:nHeadStrAlign := 2

   oBrw:aCols[5]:nEditType    := EDIT_GET
   oBrw:aCols[5]:cEditPicture := "999,999.99"
   oBrw:aCols[5]:bOnPostEdit  := {|o, v, n| aData[ oBrw:nArrayAt, 5 ] := v,;
                                                           aData[ oBrw:nArrayAt, 7 ] := aData[ oBrw:nArrayAt, 5 ] * 10 }

 


Tengo algo asi, pero tengo problemas con el picture de edicion y la presentacion de la informacion (numero 999,999.99 )en el browse, he utilizado TRANSFORM ( TRANSFORM(oCol:bStrData := aData[ oBrw:nArrayAt, 5 ]) ), pero no funciona bien, ademas de darme errores al momento del bOnPostEdit referente al tipo de dato.

Hay algun ejemplo que pueda consultar con algo similar?

saludos

Marcelo
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Edicion de un ARRAY con xBrowse

Post by rolando »

Marcelo,

Copio parte de código de como lo implemento. Es usando la Tdatabase pero se puede aplicar a Array.

Code: Select all | Expand

oCol                                            := oBrw:AddCol()
oCol:cHeader                    := "DEBE"
oCol:bStrData                   := { || Transform(oDbf:DEBE,"99999.99") }
oCol:nHeadStrAlign              := AL_CENTER
oCol:nDataStrAlign              := AL_RIGHT
oCol:nWidth                     := 60
oBrw:aCols[3]:nEditType     := EDIT_GET
oBrw:aCols[3]:bOnPostEdit := {|oCol, xVal, nKey| iif( nKey != VK_ESCAPE, ;
              (oDbf:DEBE:=val(Transformo(xVal,5)) , oDbf:save() , ;
                            ActualizoCols(oDbf,oBrw,@cSaySaldo,oSaySaldo) ,;
                          oBrw:refresh() ) , ) }
oBrw:aCols[3]:cEditPicture := "@B"

 


Saludos

Rolando :D
Marcelo Via Giglio
Posts: 1077
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time

Re: Edicion de un ARRAY con xBrowse

Post by Marcelo Via Giglio »

Rolando,

gracias por responder, modifique un ejemplo del directorio sample para mostrar mi problema

Code: Select all | Expand

#include "fivewin.ch"
#include "xbrowse.ch"

function Main()

   local aData, oDlg, oBrw, oCol


   aData := { { 1,1}, ;
              { 2,2}, ;
              { 3,3}, ;
              { 4,4} }

   DEFINE DIALOG oDlg SIZE 600,300 PIXEL TITLE 'XBROWSE RAGGED ARRAYS'

   @ 10,10 XBROWSE oBrw ;
      ARRAY aData ;
      SIZE 180,100 PIXEL OF oDlg ;
      FASTEDIT CELL

   oCol = oBrw:AddCol()
   oCol:bStrData    = { || TRANSFORM( aData[obrw:nArrayAt,1],"999,999.99") }
   oCol:cHeader     = "First"
   oCol:nEditType   = EDIT_GET
   oCol:cEditPicture = "999,999.99"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | aData[obrw:nArrayAt,1] := VAL(xVal) }

   oCol = oBrw:AddCol()
   oCol:bStrData    = { || TRANSFORM( aData[obrw:nArrayAt,2],"999,999.99") }
   oCol:cHeader     = "second"
   oCol:nEditType   = EDIT_GET
   oCol:cEditPicture = "999,999.99"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | aData[obrw:nArrayAt,2] := VAL(xVal) }


   oBrw:CreateFromCode()

   @ 130,10 BUTTON "Next" OF oDlg ACTION oBrw:goDown() PIXEL
 
   ACTIVATE DIALOG oDlg CENTERED

return nil
 


si introduces por ejemplo "12345.67" obtienes "123.00" y yo esperaria obtener "12,345.67", vengo de utilizar le tWbrose de HDC y me estoy adaptando al xB por eso no se sus mañas :-), alguna idea

saludos y gracias

Marcelo
Marcelo Via Giglio
Posts: 1077
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time

Re: Edicion de un ARRAY con xBrowse

Post by Marcelo Via Giglio »

Rolando,

tal parece que las unicas opciones son no utilizar cEditPicture o cEditPicture = "@B" y dejar que al final solo en la visualizacion se acomode el dato con TRANSFORM.

Ya buscaremos tiempo para darnos una vuelta por el fuente de xBrowse

gracias y saludos

Marcelo
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Edicion de un ARRAY con xBrowse

Post by rolando »

Marcelo,

Te adjunto una pequeña reforma a tu código agregando una columna más para que veas como lo uso.

Le agregue una función para que al tomar un dato "lo acomode" al formato que uso. Lo que sucede es que no uso la coma como vos, solamente el punto decimal. Miralo y quizás ayude en algo.

Saludos.

Rolando :D

Code: Select all | Expand

#include "fivewin.ch"
#include "xbrowse.ch"

function Main()

   local aData, oDlg, oBrw, oCol


   aData := { { 1,1,1}, ;
              { 2,2,2}, ;
              { 3,3,3}, ;
              { 4,4,4} }

   DEFINE DIALOG oDlg SIZE 600,300 PIXEL TITLE 'XBROWSE RAGGED ARRAYS'

   @ 10,10 XBROWSE oBrw ;
      ARRAY aData ;
      SIZE 180,100 PIXEL OF oDlg ;
      FASTEDIT CELL

   oCol = oBrw:AddCol()
   oCol:bStrData    = { || TRANSFORM( aData[obrw:nArrayAt,1],"999,999.99") }
   oCol:cHeader     = "First"
   oCol:nEditType   = EDIT_GET
   oCol:cEditPicture = "999,999.99"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | aData[obrw:nArrayAt,1] := VAL(xVal) }

   oCol = oBrw:AddCol()
   oCol:bStrData    = { || TRANSFORM( aData[obrw:nArrayAt,2],"999,999.99") }
   oCol:cHeader     = "second"
   oCol:nEditType   = EDIT_GET
   oCol:cEditPicture = "999,999.99"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | aData[obrw:nArrayAt,2] := VAL(xVal) }

                        //-----------------------------------------//
   oCol                                := oBrw:AddCol()
   oCol:cHeader        := "DEBE"
   oCol:bStrData       := { || Transform(aData[obrw:nArrayAt,3],"99999.99") }            
   oCol:nHeadStrAlign  := AL_CENTER
   oCol:nDataStrAlign  := AL_RIGHT   // AL_LEFT
   oCol:nWidth         := 60
   oBrw:aCols[3]:nEditType := EDIT_GET
   oBrw:aCols[3]:bOnPostEdit := {|oCol, xVal, nKey| iif( nKey != VK_ESCAPE, ;
                     (aData[obrw:nArrayAt,3]:=val(Transformo(xVal,5)) ,;
                     oBrw:refresh() ) , ) }
   oBrw:aCols[3]:cEditPicture := "@B"

                                            //-----------------------------------------//


   oBrw:CreateFromCode()

   @ 130,10 BUTTON "Next" OF oDlg ACTION oBrw:goDown() PIXEL
 
   ACTIVATE DIALOG oDlg CENTERED

return nil



// ------------------------------------------------------------------------------------

 Function Transformo(cValor,nDigitos)   // nDigitos es cant numeros permitidos antes del punto

     local cTransformada , nPunto , nLen , cCifra , cDecimales



     nLen:=len(cValor)
     nPunto:=at(".",cValor)       // en nPunto tengo el lugar del punto o cero si no tiene punto

     if nPunto > 1 .and. nPunto <> nLen
         if nPunto < (nDigitos+1)
           cCifra       := substr(cValor,1,(nPunto-1))
             cDecimales := substr(cValor,(nPunto+1),(nLen-nPunto))
             if len(cDecimales) = 1
                 cDecimales:=cDecimales+"0"
             endif
             cTransformada:=cCifra+"."+cDecimales
             Return cTransformada
         endif
     endif

     if nPunto = 0    // si no tiene punto
         if len(cValor) > nDigitos           //3
             cCifra         :=  substr(cValor,1,nDigitos) // extraigo cifra sin punto decimal
             cDecimales :=  substr(cValor,(nDigitos+1),(len(cValor)-(nDigitos+1)))
             if len(cDecimales) = 1
                cDecimales:=cDecimales+"0"
             endif
             if len(cDecimales) > 2
                cDecimales:=str(round(val(cCifra+cDecimales),2))
                cDecimales:=substr(cDecimales,(len(cDecimales)-2))
             endif
         endif
         if len(cValor) < nDigitos
             cCifra         :=  alltrim(cValor)  
             cDecimales :=  "00"
         endif
         cTransformada:=cCifra+"."+cDecimales
         Return cTransformada
     endif

     cTransformada := cValor
 Return cTransformada
 
 // ------------------------------------------------------------------------------------
jbrita
Posts: 507
Joined: Mon Jan 16, 2006 3:42 pm

Re: Edicion de un ARRAY con xBrowse

Post by jbrita »

Tambien se puede ocupar asi, yo de esta manera lo ocupos para los browse y listados

Coma_Pto(TRANSFORM((x_total1-neto_x),"99,999,999")
Coma_Pto(TRANSFORM((x_total1-neto_x),"99,999,999.99")


*---------------------------------------------
*
* Cambia las Comas por Puntos y los Puntos por Coma
*----------------------------------------------------
FUNCTION Coma_Pto
*----------------
PARAMETERS tira

long = LEN(tira)
tira = SPACE(01) + tira + SPACE(01)
posz = long + 1
DO WHILE SUBSTR(tira,posz,1) <> SPACE(01)
IF SUBSTR(tira,posz,1) = ","
tira = SUBSTR(tira,1,posz - 1) + "." + SUBSTR(tira,posz + 1,long - posz + 2)
ELSE
IF SUBSTR(tira,posz,1) = "."
tira = SUBSTR(tira,1,posz - 1) + "," + SUBSTR(tira,posz + 1,long - posz + 2)
ENDIF
ENDIF
posz = posz - 1
ENDDO
RETURN SUBSTR(tira,2,long)
jbrita
Posts: 507
Joined: Mon Jan 16, 2006 3:42 pm

Re: Edicion de un ARRAY con xBrowse

Post by jbrita »

jbrita wrote:Tambien se puede ocupar asi, yo de esta manera lo ocupos para los browse y listados

Coma_Pto(TRANSFORM((x_total1-neto_x),"99,999,999")
Coma_Pto(TRANSFORM((x_total1-neto_x),"99,999,999.99")


*---------------------------------------------
*
* Cambia las Comas por Puntos y los Puntos por Coma
*----------------------------------------------------
FUNCTION Coma_Pto*----------------
PARAMETERS tira

long = LEN(tira)
tira = SPACE(01) + tira + SPACE(01)
posz = long + 1
DO WHILE SUBSTR(tira,posz,1) <> SPACE(01)
IF SUBSTR(tira,posz,1) = ","
tira = SUBSTR(tira,1,posz - 1) + "." + SUBSTR(tira,posz + 1,long - posz + 2)
ELSE
IF SUBSTR(tira,posz,1) = "."
tira = SUBSTR(tira,1,posz - 1) + "," + SUBSTR(tira,posz + 1,long - posz + 2)
ENDIF
ENDIF
posz = posz - 1
ENDDO
RETURN SUBSTR(tira,2,long)
Marcelo Via Giglio
Posts: 1077
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time

Re: Edicion de un ARRAY con xBrowse

Post by Marcelo Via Giglio »

Gracias por las respuestas,

tal parece que el cPictureEdit no es tomado en cuenta, ya que si pruebas en tu ejemplo Rolando, tu puedes digitar letras y no solo numeros como deberia ser, pero bueno supongo que sobrevivire con esto :-)

Gracias Rolando y jBrita

Marcelo
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Edicion de un ARRAY con xBrowse

Post by Daniel Garcia-Gil »

Marcelo

No es tan complicado...

Te presento 3 formas de hacerlo

1) dejar a xbrowse hacer el trabajo

Code: Select all | Expand

  @ 10,10 XBROWSE oBrw ;
      ARRAY aData ;
      COLUMNS 1, 2;      
      COLSIZES 100, 100;
      SIZE 180,100 PIXEL OF oDlg ;
      FASTEDIT CELL;
      PICTURE "999,999.99", "999,999.99"
     
   AEval( oBrw:aCols, {| oCol | oCol:nEditType := EDIT_GET  })  


2) Haces tu el trabajo

Code: Select all | Expand

  @ 10,10 XBROWSE oBrw ;
      ARRAY aData ;
      SIZE 180,100 PIXEL OF oDlg ;
      FASTEDIT CELL

   oCol = oBrw:AddCol()
   oCol:cHeader     = "First"
   oCol:nEditType   = EDIT_GET
   oCol:cEditPicture = "999,999.99"
   oCol:nArrayCol    = 1

   oCol = oBrw:AddCol()
   oCol:cHeader     = "second"
   oCol:nEditType   = EDIT_GET
   oCol:cEditPicture = "999,999.99"
   oCol:nArrayCol    = 2


3) combinado

Code: Select all | Expand

  @ 10,10 XBROWSE oBrw ;
      ARRAY aData ;
      SIZE 180,100 PIXEL OF oDlg ;
      FASTEDIT CELL
   
   ADD TO oBrw ARRAY ELEMENT 1 TITLE "First"  EDITABLE PICTURE "999,999.99"
   
   ADD TO oBrw ARRAY ELEMENT 2  TITLE "Second" EDITABLE PICTURE "999,999.99"
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Marcelo Via Giglio
Posts: 1077
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time

Re: Edicion de un ARRAY con xBrowse

Post by Marcelo Via Giglio »

Daniel,

muchas gracias, lo has planteado de una manera muy sencilla, ahora a probar

gracias

Marcelo
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Edicion de un ARRAY con xBrowse

Post by rolando »

Marcelo,

Tienes razón. Lo que pasa es que yo lo uso editando directamente la DBF, no un array y los campos en los que aplico esto son del tipo Numérico (no aceptan letras).

Saludos.

Rolando :D
Post Reply