checkbox en xbrowse

checkbox en xbrowse

Postby surGom » Mon Oct 30, 2017 4:46 pm

Tengo el siguiente problema, tengo un array con un item lógico, probé de varias formas pero no funciona correctamente. Alguien me podría facilitar un pequeño ejemplo de como hacerlo. Yo hice esto

Code: Select all  Expand view
static function bajalote( oGeto, nboton, odlgrem )
local odLote
local aLotes := Array(0)
local oDlg1, obrw1
local oGet
LOCAL oBoton
LOCAL aLoteback := Array(0)
LOCAL oTotal
LOCAL lacepto := .f.


local z := 1
//"Código", "Cantidad", "Producto", "Despacho"
if !pasaje("lotedep"); return nil; endif
   DATABASE odLote
   odLote:setorder(2)

   FOR z = 1 to Len(oDeposito:aDetalle)
      if odLote:seek(oDeposito:aDetalle[ z, 1 ])
         do
           if !Empty(odLote:stock)
             AAdd( aLotes,{.f.,odLote:codigo, odLote:lote, odLote:vto, odLote:stock,odLote:recno()} )
           endif
           odLote:skip()
         until odLote:codigo != oDeposito:aDetalle[ z, 1 ]
      endif
   NEXT
   aLoteback := AClone( aLotes )

   IF Len(aLotes) = 0
      MsgStop("No hay datos de lotes sobres este producto","Aviso del sistema")
      return nil
   endif

   DEFINE DIALOG oDlg1 RESOURCE "DIA_XBRVARIOS1"
      oDlg1:cCaption := "Dirección origen"

   REDEFINE XBrowse obrw1 id 101 oDlg1 update;
         columns 1, 2, 3, 4;
         COLSIZES 10, 75, 90, 80, 100;
         HEADERS "", "Código", "Lote", "Vto", "Stock";
         ARRAY aLotes


  // obrw1:setarray(aLotes)
//  AEval( obrw1:aCols, { |oCol| oCol:nEditType   := EDIT_GET })

   WITH OBJECT obrw1
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW
      :bClrSelFocus     := { || { CLR_BLACK, CLR_HGRAY } }
      :nStretchCol      := 3
      :aCols[ 1 ]:bClrSelFocus := { ||{  CLR_BLACK, CLR_WHITE } }
      :lmultiselect := .f.
 (1)     :bLClicked        := { |r,c,f,obrw1| If( obrw1:MouseColPos( c ) == 1 , ;
                           If( ( f := AScan( obrw1:aSelected, obrw1:BookMark ) ) == 0, ;
                           AAdd( obrw1:aSelected, obrw1:BookMark ), ;
                           ADel( obrw1:aSelected, f, .t. ) ), nil ), ftotal(aLotes,aLoteback, oTotal,F,obrw1) ,;
                           obrw1:RefreshCurrent() }

   END




   WITH OBJECT obrw1:aCols[ 1 ]
    /*  :bEditValue    := { || aLotes[obrw1:nArrayAt,1] }
      :setcheck() */

      :bEditValue    := { || AScan( obrw1:aSelected, obrw1:BookMark ) > 0 }
      :SetCheck()
      :nHeadBmpNo    := { || If( Len( obrw1:aSelected ) == obrw1:nLen, 1, 2 ) }

   END WITH

   WITH OBJECT obrw1:aCols[ 2 ]
      :bEditValue := {|| transform( aLotes[obrw1:nArrayAt,2], "9999") }
      :nDataStrAlign := AL_CENTER
   END WITH

   WITH OBJECT obrw1:aCols[ 3 ]
      :bEditValue := {||  aLotes[obrw1:nArrayAt,3] }
      :nDataStrAlign := AL_CENTER
   END WITH

   WITH OBJECT obrw1:aCols[ 4 ]
      :bEditValue := {||  transform(  aLotes[obrw1:nArrayAt,4], "@d" )}
      :nDataStrAlign := AL_CENTER
   END WITH


   WITH OBJECT obrw1:aCols[ 5 ]
      :bEditValue := {||  Transform( aLotes[obrw1:nArrayAt,5],"@e 9,999,999.99") }
      :nDataStrAlign := AL_RIGHT
      :nEditType   := EDIT_GET
   END WITH

   redefine GET oTotal VAR ntotal id 103 picture "@e 999,999.99" of oDlg1
   REDEFINE BUTTON nboton id 102 ACTION ( lacepto := .t., oDlg1:end())

   ACTIVATE DIALOG oDlg1

  // @180,245 say "Faltante" BORDER SIZE 195,10 OF oDlg1
   if lacepto
      for each z in aLotes
         if z[ 1 ]
            odLote:goto( z[ 6 ] )
            if reviso(odLote)
               odLote:stock := z[ 5 ]
               salvo(odLote)
            endif
         endif
      next
   endif
   CIERROALIAS(odLote:calias, odLote)
return nil

////////////////////////////////////////////////////////////////////////////////
static function ftotal(aLotes,aLoteback, oTotal,F,oBrw1)
local nAt := oBrw1:nArrayAt



if F = 0
   if ntotal > aLotes[nAt,5]
      ntotal -= aLotes[nAt,5]
      aLotes[nAt,5] := 0
   else
      aLotes[nAt,5] -= ntotal
      ntotal := 0
   endif
   aLotes[nAt,1] := .t.
elseif F = 1
   ntotal += aLoteback[nAt,5]
   aLotes[nAt,5] := aLoteback[nAt,5]
   aLotes[nAt,1] := .F.
endif
oBrw1:refresh()
oTotal:refresh()
return nil
////////////////////////////////////////////////////////////////////////////////


 


Si no pòngo (1) al hacer click en el checbox no hace nada
Al estar (1) si se hace un clik en el checbox hace lo que se espera, pero si lo hago en otra celda cambia y dispara la función ftotal
No me deja editar la quinta columna
si pongo
    /*  :bEditValue    := { || aLotes[obrw1:nArrayAt,1] }
      :setcheck() */
no hace nada .

Lo que pretendo es que al hacer click en el checbox me cambie la condición y poder disparar la función ftotal, con un bposedit, y siquiero cambiar algo del array poder hacerlo.

Gracias por su atención

Luis
surGom
 
Posts: 639
Joined: Wed Oct 19, 2005 12:03 pm

Re: checkbox en xbrowse

Postby armando.lagunas » Mon Oct 30, 2017 6:15 pm

creo que te falta una definicion de columna

Code: Select all  Expand view

   REDEFINE XBrowse obrw1 id 101 oDlg1 update;
         columns 1, 2, 3, 4;
         COLSIZES 10, 75, 90, 80, 100;
         HEADERS "", "Código", "Lote", "Vto", "Stock";
         ARRAY aLotes
 


deberia ser columns 1,2,3,4,5;

te paso mi troso de codigo, el cual funciona perfectamente en mis aplicaciones y hace mas menos lo mismo:

Code: Select all  Expand view


REDEFINE XBROWSE oBrw[4] ID  30 COLUMNS "INCL","DESC","CFEC","LOTE","PORC","KILO" ALIAS "PA47" OF oDlg FONT xFont NOBORDER AUTOSORT FOOTERS

                              oBrw[4]:aCols[1]:cHeader     := "Inc"               ;  oBrw[4]:aCols[1]:nWidth        :=   30
                              oBrw[4]:aCols[2]:cHeader     := "Productor"         ;  oBrw[4]:aCols[2]:nWidth        :=  170
                              oBrw[4]:aCols[3]:cHeader     := "Fecha"             ;  oBrw[4]:aCols[3]:nWidth        :=   35  ;  oBrw[4]:aCols[3]:nDataStrAlign  := AL_CENTER
                              oBrw[4]:aCols[4]:cHeader     := "Lote"              ;  oBrw[4]:aCols[4]:nWidth        :=   50  ;  oBrw[4]:aCols[4]:nDataStrAlign  := AL_CENTER
                              oBrw[4]:aCols[5]:cHeader     := "% Exp"             ;  oBrw[4]:aCols[5]:nWidth        :=   50
                              oBrw[4]:aCols[6]:cHeader     := "Kilos"             ;  oBrw[4]:aCols[6]:nWidth        :=   70
 
                              oBrw[4]:nHeaderLines         :=  2
                              oBrw[4]:Inc:SetCheck()
                              oBrw[4]:bLDblClick           := {|| IF ( PA47->INCL, PA47->INCL := .f., PA47->INCL := .t. ), oBrw[ 3]:Refresh(), KilosLotes( oBrw, oGet ) }

 


La funcion KilosLotes(), valida el resultado al clikear el setcheck()


Otro Ejemplo con EDIT_GET activado en las columnas

Code: Select all  Expand view

REDEFINE XBROWSE oLbx ID 96 COLUMNS "CO01","NOME","LOTE","FAMI","SFAM","MOVI","UNID","VA01","TOTE","NETO" ALIAS "PA13" OF oDlg FONT xFont NOBORDER AUTOSORT FOOTERS

                             oLbx:aCols[01]:cHeader     := "Empresa"           ;  oLbx:aCols[01]:nWidth       := 50  ;   oLbx:aCols[01]:nDataStrAlign  := AL_CENTER
                             oLbx:aCols[02]:cHeader     := "Especie"           ;  oLbx:aCols[02]:nWidth       := 75  ;   oLbx:aCols[02]:nDataStrAlign  := AL_CENTER
                             oLbx:aCols[03]:cHeader     := "Codigo"            ;  oLbx:aCols[03]:nWidth       := 65  ;   oLbx:aCols[03]:nDataStrAlign  := AL_CENTER
                             oLbx:aCols[04]:cHeader     := "Fam"               ;  oLbx:aCols[04]:nWidth       := 40  ;   oLbx:aCols[04]:nDataStrAlign  := AL_CENTER
                             oLbx:aCols[05]:cHeader     := "SFam"              ;  oLbx:aCols[05]:nWidth       := 40  ;   oLbx:aCols[05]:nDataStrAlign  := AL_CENTER
                             oLbx:aCols[06]:cHeader     := "Descripción"       ;  oLbx:aCols[06]:nWidth       := 330 ;   oLbx:aCols[06]:nDataStrAlign  := AL_LEFT
                             oLbx:aCols[07]:cHeader     := "Uni"               ;  oLbx:aCols[07]:nWidth       := 40  ;   oLbx:aCols[07]:nDataStrAlign  := AL_CENTER
                             oLbx:aCols[08]:cHeader     := "Precio"            ;  oLbx:aCols[08]:nWidth       := 70
                             oLbx:aCols[09]:cHeader     := "Cantidad"          ;  oLbx:aCols[09]:nWidth       := 70
                                                                                  oLbx:aCols[09]:bEditValue   := { || PA13->TOTE }
                                                                                  oLbx:aCols[09]:cEditPicture := "@E 99,999.00"
                                                                                  oLbx:aCols[09]:nEditType    := EDIT_GET
                                                                                  oLbx:aCols[09]:bOnPostEdit  := {| oCol, xVal, nKey | ;
                                                                                                                    IIF( nKey == VK_RETURN,          ;
                                                                                                                    IIF( xVal >=0,                   ;
                                                                                                                       (PA13->TOTE:=xVal,            ;
                                                                                                                        PA13->NETO:=PA13->VA01*xVal, ;
                                                                                                                        oLbx:MakeTotals(),           ;
                                                                                                                        oLbx:Refresh(),              ;
                                                                                                                        oApp:cMaterial := SPACE(7),  ;
                                                                                                                        oSay[5]:Refresh() ),),)}

                             oLbx:aCols[10]:cHeader     := "Tot.Neto"          ;  oLbx:aCols[10]:nWidth       := 80  ;   oLbx:aCols[10]:nFooterType    := AGGR_TOTAL

                             oLbx:nHeaderLines         :=  2

 



espero de que te sirva como ejemplo.

Saludos
SkyPe: armando.lagunas@hotmail.com
Mail: armando.lagunas@gmail.com
User avatar
armando.lagunas
 
Posts: 346
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile

Re: checkbox en xbrowse

Postby surGom » Wed Nov 01, 2017 11:06 am

Armando muchas gracias, tu código me sirvió para aclarame muchas cosas.

Un abrazo.

Luis
surGom
 
Posts: 639
Joined: Wed Oct 19, 2005 12:03 pm


Return to FiveWin para Harbour/xHarbour

Who is online

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

cron