Edición de una celda en xBrowse

Edición de una celda en xBrowse

Postby Marcelo Roggeri » Fri Jun 01, 2018 4:14 pm

Hola buenas tardes a todos, tengo un xBrowse que edito la columna 4 (Cantidad) y por defecto le asigno 1 y cando quiero modificar no me permite mas de un dígito
Les adjunto parte del codigo que utilizo, cualquier ayuda es de gran valor.
Code: Select all  Expand view
                oBrw := TXBrowse():New( oPanelCue )
                 *-----------------------------------------------
                 oCol := oBrw:AddCol()
                 oBrw:aCols[1]:cHeader       := "Item"
                 oBrw:aCols[1]:nWidth        := 100
                 oBrw:aCols[1]:cDataType     := "N"
                 oBrw:aCols[1]:nDataStrAlign := AL_CENTER
                 oBrw:aCols[1]:oDataFont     := hFnt["BrwFC"]
                 oBrw:aCols[1]:oHeaderFont   := hFnt["CabFC"]
                 oBrw:aCols[1]:nHeadStrAlign := 2
                 *-----------------------------------------------
                 oCol := oBrw:AddCol()
                 oBrw:aCols[2]:cHeader       := "Código"
                 oBrw:aCols[2]:nWidth        := 150
                 oBrw:aCols[2]:cDataType     := "N"
                 oBrw:aCols[2]:nDataStrAlign := AL_CENTER
                 oBrw:aCols[2]:oDataFont     := hFnt["BrwFC"]
                 oBrw:aCols[2]:oHeaderFont   := hFnt["CabFC"]
                 oBrw:aCols[2]:nHeadStrAlign := 2
                 *-----------------------------------------------
                 oCol := oBrw:AddCol()
                 oBrw:aCols[3]:cHeader       := "Producto"
                 oBrw:aCols[3]:nWidth        := 300
                 oBrw:aCols[3]:cDataType     := "C"
                 oBrw:aCols[3]:nDataStrAlign := AL_LEFT
                 oBrw:aCols[3]:oDataFont     := hFnt["BrwFC"]
                 oBrw:aCols[3]:oHeaderFont   := hFnt["CabFC"]
                 oBrw:aCols[3]:nHeadStrAlign := 0         // 0=Izquierda   1=Derecha   2=Centrado
                 *-----------------------------------------------
                 oCol:=oBrw:AddCol()
                 oBrw:aCols[4]:cHeader       := "Cantidad"
                 oBrw:aCols[4]:nWidth        := 150
                 oBrw:aCols[4]:cDataType     := "N"
                 oBrw:aCols[4]:cEditPicture  := "@Z 9,999.999"
                 oBrw:aCols[4]:nDataStrAlign := AL_RIGHT
                 oBrw:aCols[4]:oDataFont     := hFnt["BrwFC"]
                 oBrw:aCols[4]:oHeaderFont   := hFnt["CabFC"]
                 oBrw:aCols[4]:nHeadStrAlign := 2         // 0=Izquierda   1=Derecha   2=Centrado
                 oBrw:aCols[4]:nEdittype     := EDIT_GET
                 oBrw:aCols[4]:bOnPostEdit   := {|o,x,n|If(n=VK_RETURN,( oBrw:aArrayData[oBrw:nArrayAt,4]:=x,;
                                                                oBrw:aArrayData[oBrw:nArrayAt,7]:=x/oBrw:aArrayData[oBrw:nArrayAt,6] ),)}
                 *-----------------------------------------------
                 oCol := oBrw:AddCol()
                 oBrw:aCols[5]:cHeader       := "Uni.de Med."
                 oBrw:aCols[5]:nWidth        := 150
                 oBrw:aCols[5]:cDataType     := "N"
                 oBrw:aCols[5]:nDataStrAlign := AL_LEFT
                 oBrw:aCols[5]:oDataFont     := hFnt["BrwFC"]
                 oBrw:aCols[5]:oHeaderFont   := hFnt["CabFC"]
                 oBrw:aCols[5]:nHeadStrAlign := 2
                 *-----------------------------------------------
                 oCol := oBrw:AddCol()
                 oBrw:aCols[6]:cHeader       := "Kg Bolsa"
                 oBrw:aCols[6]:nWidth        := 150
                 oBrw:aCols[6]:cDataType     := "N"
                 oBrw:aCols[6]:nDataStrAlign := AL_CENTER
                 oBrw:aCols[6]:oDataFont     := hFnt["BrwFC"]
                 oBrw:aCols[6]:oHeaderFont   := hFnt["CabFC"]
                 oBrw:aCols[6]:nHeadStrAlign := 2
                 oBrw:aCols[6]:cEditPicture  := "@Z 9,999.999"
                 *-----------------------------------------------
                 oCol := oBrw:AddCol()
                 oBrw:aCols[7]:cHeader       := "Bolsas"
                 oBrw:aCols[7]:nWidth        := 150
                 oBrw:aCols[7]:cDataType     := "N"
                 oBrw:aCols[7]:nDataStrAlign := AL_CENTER
                 oBrw:aCols[7]:oDataFont     := hFnt["BrwFC"]
                 oBrw:aCols[7]:oHeaderFont   := hFnt["CabFC"]
                 oBrw:aCols[7]:nHeadStrAlign := 2
                 oBrw:aCols[7]:cEditPicture  := "@Z 9,999.99"
                 *-----------------------------------------------
                 oBrw:aCols[1]:nHeaderType := 2 // Comienza el primer grupo
                 oBrw:aCols[2]:nHeaderType := 1
                 oBrw:aCols[3]:nHeaderType := 1
                 oBrw:aCols[4]:nHeaderType := 1
                 oBrw:aCols[5]:nHeaderType := 1
                 oBrw:aCols[6]:nHeaderType := 1
                 oBrw:aCols[7]:nHeaderType := 1

                 with object oBrw
                      :nHeaderLines        := 1      // número de líneas de la cabecera
                      :nHeaderHeight       := 100    // Altura cabeceras de columna
                      :nRowHeight          := 50
                      :nHeader             := 1
                      :aHeaderTop          := {"I T E M   D E L   C O M P R O B A N T E"}

                      :nMarqueeStyle       := 3//MARQSTYLE_HIGHLROW // Estilo marquesina (fila seleccionada) 0 No 1 Marquesina punteada celular 2 Solid celular 3 Resalte la celda 4 fila resaltada y Levante teléfono 5
                      :nRowDividerStyle    := LINESTYLE_LIGHTGRAY
                      :nColDividerStyle    := LINESTYLE_LIGHTGRAY
                      :bClrSel             := {||{nRGB(255,255,255),nRGB(000,128,255)}}// para barra de linea selecc cuando el control no tiene el foco

                      :bClrHeader          := {|| { nRGB(255,255,255), nRGB( 000, 000, 000 ), } }
                      :nStretchCol         := STRETCHCOL_WIDEST // ajusta la ultima columna al limite derecho del browse

                      :l2007               := (.F.)
                      :lAllowColHiding     := .F.             // Anulo el menu contextual al hacer click sobre el Header del browse
                      :lRecordSelector     := .F.  //poner o no, COL de la flechita de la izq
                      :bClrStd             := { || { CLR_BLACK, If(oBrw:KeyNo % 2 == 0, RGB(193,221,255), RGB(221,245,255) ) } } // colores para lineas normales

                      :lHScroll            := .F.
                      :lVScroll            := .F.
                      :lColDividerComplete := .T. //completa pintado hasta el footer cuando lineas no llenan todo el browse
                      :lFastEdit           := .T.

                      :SetColor( CLR_BLACK, RGB(221,245,255) )

                 END WITH

                 oBrw:SetArray( aTblItem )
                 oBrw:CreateFromCode()
                 oPanelCue:oClient := oBrw

                 WITH OBJECT oBrw
                      :bChange    := { || oBrw:Refresh() }
                      :nTop       := 0
                      :nLeft      := 0
                      :nWidth     := nAnchoPan
                      :nHeight    := nAltoPan-320

                      :aCols[1]:bStrData      := {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 1 ], "" )}
                      :aCols[2]:bStrData      := {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 2 ], "" )}
                      :aCols[3]:bStrData      := {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 3 ], "" )}

                      :aCols[4]:bStrData      := {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 4 ], "" )}

                      :aCols[5]:bStrData      := {||If( Len( oBrw:aArrayData ) > 0, aUnidadMedida[oBrw:aArrayData[ oBrw:nArrayAt, 5 ]], 0 )}
                      :aCols[6]:bStrData      := {||If( oBrw:aArrayData[ oBrw:nArrayAt, 6 ] <> 0, oBrw:aArrayData[ oBrw:nArrayAt, 6 ], 0 )}

                      :aCols[7]:bStrData      := {||If( oBrw:aArrayData[ oBrw:nArrayAt, 6 ] <> 0, oBrw:aArrayData[ oBrw:nArrayAt, 4 ]/oBrw:aArrayData[ oBrw:nArrayAt, 6 ], 0 )}

                      :bKeyDown   := { |nKey| ( IF(nKey==VK_INSERT,(InsertaItems(oWndChild,oBrw,@aTblItem,lCpteNew),oBrw:SetArray(aTblItem)),;
                                                IF(nKey==VK_DELETE,EliminaItems(oBrw,lCpteNew),)),;
                                                oBrw:SetFocus() ) }
                 END

                 *----------------------------------------------------------

                hLays["H4"]:aVLayout[1]:oClient := oPanelCue


****************************************************************************
*
FUNCTION InsertaItems(oWndChild,oBrw,aTblItem,lCpteNew)
         LOCAL hArt := Hash()

         IF !lCpteNew
            RETURN NIL
         ENDIF

         BuscarArticulos(oWndChild,@hArt)

         IF EMPTY(hArt["cNomArt"])
            RETURN NIL
         ENDIF

         AAdd( aTblItem, { LEN(aTblItem)+1,;      // 1-
                           hArt["cCodigo"],;      // 2-
                           hArt["cNomArt"],;      // 3-Nombre del Articulo
                           1,;                    // 4-Cantidad
                           hArt["nUniMed"],;      // 5-
                           hArt["KgBolsa"],;      // 6-
                           1/hArt["KgBolsa"],;    // 7-
                           "COMUN",;              // 8-Tipo de Remito
                           hArt["IdArticulo"],;   // 9-Id_Articulo
                           hArt["IdRubro"],;      // 10-IdRubro
                           hArt["IdSubRubro"],;   // 11-IdSubRubro
                           "" } )

         oBrw:Refresh()

RETURN NIL
*
****************************************************************************

 

Saludos
Marcelo
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 325
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina

Re: Edición de una celda en xBrowse

Postby FranciscoA » Sat Jun 02, 2018 4:23 pm

Intenta modificando asi:
:aCols[4]:bStrData := {||If( Len( oBrw:aArrayData ) > 0, oBrw:aArrayData[ oBrw:nArrayAt, 4 ], 0 )}
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: Edición de una celda en xBrowse

Postby Marcelo Roggeri » Sun Jun 03, 2018 3:45 pm

Hola Armando ya probe asi pero no funciono, no se porque pero bueno decidi hacerlo con @ .....
Code: Select all  Expand view
               @ 0,0 XBROWSE oBrw SIZE -20,200 PIXEL OF oPanelCue;
                      COLUMNS 1,2,3,4,5,6,7;
                      HEADERS "Item","Código","Producto","Cantidad", "Uni.de Med.","Kg Bolsa","Bolsas";
                      COLSIZES 100,150,300,150,150,150,150;
                      picture  ,,,"@Z 99,999.999";
                      JUSTIFY  AL_CENTER,AL_CENTER,AL_LEFT,AL_LEFT,AL_LEFT,AL_LEFT,AL_RIGHT;
                      ARRAY aTblItem CELL LINES NOBORDER FASTEDIT;
                      FONT hFnt["BrwFC"]

                WITH OBJECT oBrw:Cantidad
                     :nEditType := EDIT_GET
                     :bOnPostEdit   := {|o,x,n|If(n=VK_RETURN,( o:value:=x,;
                                                                oBrw:aArrayData[oBrw:nArrayAt,7]:=x/oBrw:aArrayData[oBrw:nArrayAt,6] ),)}
                END
 


De esta manera funcionó
Te agradezco que te hallas tomado el tiempo para ayudarme
Saludos
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 325
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina

Re: Edición de una celda en xBrowse

Postby nageswaragunupudi » Mon Jun 04, 2018 1:43 pm

Good.

Instead of
Code: Select all  Expand view
WITH OBJECT oBrw:Cantidad
  :nEditType := EDIT_GET
  :bOnPostEdit   := {|o,x,n|If(n=VK_RETURN,( o:value:=x,;
                                                oBrw:aArrayData[oBrw:nArrayAt,7]:=x/oBrw:aArrayData[oBrw:nArrayAt,6] ),)}
END
 


You can also try
(1)
Code: Select all  Expand view
WITH OBJECT oBrw:Cantidad
   :nEditType  := EDIT_GET
   :bOnChange  := { | oCol, uOldVal| oBrw:Bolsas:VarPut( oCol:Value / oBrw:KgBolsa:Value ) }
END


or
(2)
Make "Bolsas" as a calculated column
Code: Select all  Expand view
WITH OBJECT oBrw
   :Bolsas:bEditValue := { || oBrw:aRow[ 7 ] := oBrw:aRow[ 4 ] / oBrw:aRow[ 6 ] }
   :Cantidad:nEditType := EDIT_GET
END
 
Regards

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

Re: Edición de una celda en xBrowse

Postby Marcelo Roggeri » Mon Jun 04, 2018 1:58 pm

ahhhh buenisimo muchas gracias Rao.

Otra cosa tuve que anular esta linea porque me seguía dando el mismo problema al editar la celda y no me permitía tipear mas de un numero

:bKeyDown := { |nKey| ( IF(nKey==VK_INSERT,(InsertaItems(oWndChild,oBrw,@aTblItem,lCpteNew),oBrw:SetArray(aTblItem)),;
IF(nKey==VK_DELETE,EliminaItems(oBrw,lCpteNew),)),;
oBrw:SetFocus() ) }

así que lo solucione con un botón de agregar y botón derecho para eliminar un item, no me gusto pero no supe porque me daba ese error

Saludos
Marcelo
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 325
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina

Re: Edición de una celda en xBrowse

Postby nageswaragunupudi » Tue Jun 05, 2018 2:01 am

Please build and test this sample.
Then you can adapt this to your requirements.
Code: Select all  Expand view
#include "fivewin.ch"

function Main()

   local oWnd, oBrw
   local aData    := {}

   DEFINE WINDOW oWnd

   @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oWnd ;
      DATASOURCE aData ;
      COLUMNS 1,2,3,4,5 ;
      HEADERS "SlNo", "Item", "Quantity", "Rate", "Amount" ;
      PICTURES "999", nil, "@Z 999,999", "99.99", "@Z 999,999,999.99" ;
      JUSTIFY AL_RIGHT, AL_LEFT, AL_RIGHT, AL_RIGHT, AL_RIGHT ;
      COLSIZES 60, 100, 100, 60, 100 ;
      CELL LINES FOOTERS FASTEDIT NOBORDER

   WITH OBJECT oBrw
      :cDataTypes    := { "N", "C", "N", "N", "N" }
      :Item:nEditType   := EDIT_GET
      WITH OBJECT :Quantity
         :nEditType     := EDIT_GET
         :nFooterType   := AGGR_SUM
         :bEditValid    := { |oGet| oGet:VarGet() > 0 }
      END
      WITH OBJECT :Rate
         :nEditType     := EDIT_GET
         :bEditValid    := { |oGet| oGet:VarGet() > 0 }
      END
      WITH OBJECT :Amount
         :bEditValue   := { || oBrw:aRow[ 5 ] := oBrw:aRow[ 3 ] * oBrw:aRow[ 4 ] }
         :nFooterType  := AGGR_SUM
      END

      :bKeyDown   := { |k| If( k == VK_INSERT, ( BrwAddRow( oBrw ), 0 ), ;
                           If( k == VK_DELETE, ( oBrw:Delete(), 0 ), nil ) ) }

      // This is optional. Provides auto-append
      :bPastEof   := { || If( oBrw:nLen == 0 .or. oBrw:Amount:Value != 0, BrwAddRow( oBrw ), nil ) }

      :MakeTotals()

       :CreateFromCode()
   END

   ACTIVATE WINDOW oWnd CENTERED

return nil

function BrwAddRow( oBrw )

   local aNewRow
   local nSlNo    := 1

   if oBrw:nLen > 0
      nSlNo := ATail( oBrw:aArrayData )[ 1 ] + 1
   endif
   aNewRow  := { nSlNo, SPACE( 10 ), 0, 1.0, 0 }

   AAdd( oBrw:aArrayData, aNewRow )
   oBrw:GoBottom()
   oBrw:MakeTotals()
   oBrw:nColSel   := 2
   oBrw:Refresh()

return nil
 
Regards

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

Re: Edición de una celda en xBrowse

Postby Marcelo Roggeri » Tue Jun 05, 2018 11:40 am

Muy buen ejemplo Rao muchas gracias, ya estoy probando estos ajustes, buen detalle.
Saludos
Marcelo
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 325
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina

Re: Edición de una celda en xBrowse

Postby Marcelo Roggeri » Tue Jun 05, 2018 12:14 pm

Bueno finalmente encontré el error que cometí

Code: Select all  Expand view
                    :bKeyDown   := { |nKey| ( IF(nKey==VK_INSERT,(InsertaItems(oWndChild,oBrw,@aTblItem,lCpteNew),oBrw:SetArray(aTblItem)),;
                                               IF(nKey==VK_DELETE,EliminaItems(oBrw,lCpteNew),)),;
                                               oBrw:SetFocus() ) }
 


Después de varios días, hoy me di cuenta que el SetFocus era el que me producia la falla.
Al sacarlo de ahí la edición funcionó.

Muchas gracias a todos los que me ayudaron
Saludos
Marcelo
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 325
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina

Re: Edición de una celda en xBrowse

Postby nageswaragunupudi » Tue Jun 05, 2018 1:28 pm

1) Please do not use "SetArray()" again in Insert or anywhere in the program,
2) Use oBrw:Delete() instead of your own function.

For this reason, I provided the template.
Regards

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

Re: Edición de una celda en xBrowse

Postby Marcelo Roggeri » Wed Jun 06, 2018 12:06 am

ok tendré en cuenta lo que dices
Muchas gracias
FWH - Harbour - BCC7 - PellesC
User avatar
Marcelo Roggeri
 
Posts: 325
Joined: Sat Jul 22, 2006 9:04 pm
Location: Venado Tuerto - Santa Fe -Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 79 guests