Page 1 of 1

WHEN en xBrowse

Posted: Wed Jun 13, 2018 8:38 pm
by acuellar
Estimados

Tengo dos columnas con GET_EDIT y quiero que sólo una permita datos por fila.

Code: Select all

      oCol:=oBrw1:AddCol()
      oCol:cEditPicture   := '@Z 999,999.99'
      oCol:bEditValue  := { || Nuevo->DEBE }
      oCol:nHeadStrAlign := AL_CENTER
      oCol:cHeader   := "D E B E"
      oCol:nWidth:=70
      oCol:nEditType :=EDIT_GET 
      oCol:bOnPostEdit := {|o, v, n| Nuevo->debe:=v_}
      oCol:nFooterType := AGGR_SUM 
      
      oCol:=oBrw1:AddCol()
      oCol:cEditPicture   := '@Z 999,999.99'
      oCol:bEditValue  := { || Nuevo->HABER }
      oCol:nHeadStrAlign := AL_CENTER
      oCol:cHeader   := "H A B E R"
      oCol:nWidth:=70
      oCol:nEditType :=EDIT_GET 
      oCol:bOnPostEdit := {|o, v, n| Nuevo->haber:=v }
      oCol:nFooterType := AGGR_SUM 
 
Aparte rengo un problema también en xBrowse Con bEditBlock Habilitando la pulsación de una tecla en éste caso F2

Code: Select all

    oCol:=oBrw1:AddCol()
      oCol:cEditPicture   := "@!"
      oCol:bStrData  := { || NUEVO->NROCTA }
      oCol:nHeadStrAlign := AL_CENTER
      oCol:cHeader   := "Cuenta"
      oCol:nWidth:=78
      oCol:AddResource('B-F2')
      oCol:nBtnBmp:= 1
      oCol:nEditType:= 5 
      oCol:bEditBlock:= { |nRow,nCol,oCol| (BuscaCta(nRow,nCol)) } 
      oCol:bOnPostEdit := {|o, v, n| If(!lbdr,Nuevo->NROCTA:=v, ) }
   .....
     oBrw1:bKeyDown = { | nKey |If( oBrw1:nColSel == 1 .and. nKey == VK_F2, (oBrw1:SelectedCol():RunBtnAction()), )} //Con ésto al pulsar F2 va a la función BuscaCta()
 
Aquí la función BuscaCta()

Code: Select all

Function BuscaCta(nRow,nCol)
   Local oVar,oDlgB, oBrw3, lOk:= .F.

    lbdr:=.T.
   DbSelectArea("Cuentas")
   dbGotop()
     
   DEFINE DIALOG oDlgB FROM 0,0 TO 203,260 PIXEL STYLE nOr( WS_VISIBLE, WS_POPUP ) 
     
    @0,0 xBrowse oBrw3 Of oDlgB AUTOSORT ALIAS "CUENTAS"
    oBrw3:nMarqueeStyle:=MARQSTYLE_HIGHLROW
    oBrw3:lHScroll:= .f.
    oBrw3:nRowDividerStyle:= 0
   oBrw3:lRecordSelector := .f.
   oBrw3:bLDblClick:={ || ( SysWait(.2),__KeyBoard(Chr(13)) ) }
          
   oCol:=oBrw3:AddCol()
    oCol:bStrData := { || CUENTAS->CTA_NRO }
    oCol:cHeader  := "NRO"
    oCol:nWidth:=75
  
    oCol:=oBrw3:AddCol()
    oCol:bStrData := { || CUENTAS->CTA_DES }
    oCol:cHeader  := "CUENTA"
     oCol:nWidth:=235
  
    oBrw3:CreateFromCode()
    
    @1,41 GET oBrw3:oSeek VAR oBrw3:cSeek SIZE 45,8 PIXEL OF oDlgB PICTURE "@!" UPDATE READONLY 
   
    oBrw3:bKeyDown:= { | nKey | iif(nKey=VK_RETURN,(lOk:=.T.,oBrw3:End(),oDlgB:End()), ) }
    
    ACTIVATE DIALOG oDlgB ON INIT (oDlgB:Move(nRow+320,378),oBrw3:Move(0,0,oDlgB:nWidth(),oDlgB:nHeight()));
                 VALID ( iif( lOk, (Nuevo->NROCTA:=CUENTAS->CTA_NRO), ),.T. ) 
Return Nil 
 
Si doy clip al botón del bEditBlock todo funciona perfecto, el problema es cuando pulso F2, me muestra el Browse de BuscaCta pero no funciona la flecha hacia abajo lo que al parecer se ha ubicado al final, porque al pulsar flecha hacia arriba me muestra el último.

Gracias por la ayuda.

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 1:08 pm
by acuellar
Estimados

Lo de bEditBlock lo solucioné pasando la base a un Array,

sólo me falta condicionar las columnas.

Gracias

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 3:34 pm
by joseluisysturiz
acuellar wrote:Estimados

Lo de bEditBlock lo solucioné pasando la base a un Array,

sólo me falta condicionar las columnas.

Gracias

Saludos... ya probastes :bEditWhen := {|| !EMPTY( aItems[oBrw:nArrayAt, 2] ) }, gracias... :shock:

Code: Select all

   WITH OBJECT oBrw:aCols[3]
      :bStrData := {|| IIF( LEN( aItems ) = 0, SPACE(10) ,;
                        TRANS( aItems[oBrw:nArrayAt, 3],"@E 999,999.999" ) ) }
      :cHeader := "Cantidad"
      :nWidth  := 60
      :cDataType := "N"
      :nDataStrAlign := AL_RIGHT
      :cEditPicture  := "@E 999,999.999"
      :nFootStrAlign := AL_RIGHT
        :nEditType     := EDIT_GET
      :bEditValid    := { | oGet, oCol | mayorqcero( oGet:value() ) }
        :bOnPostEdit   := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,;
                                                 ( oCol:value := xVal ,;
                                                   totalinea( oBrw, aVar, aGet ) ,;
                                                   addrow( oBrw ) ,;
                                                   oBrw:GoBottom() ,;
                                                   oBrw:SelectCol(1) ), ) }
      :bEditWhen   := {|| !EMPTY( aItems[oBrw:nArrayAt, 2] ) }
   END WITH
 

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 4:42 pm
by FranciscoA
Hola Adhemar.
Corríjeme si estoy equivocado.
Estás codificando lo que en mi pais llamamos Comprobante de Diario, y lo que quieres es que no se permitan valores en el DEBE y HABER en una misma fila.

Puedes utilizar el WHEN, pero tienes el inconveniente de que si el operador introdujo un valor en el debe, y lo correcto era en el haber, para corregir esta operacion debe primero borrar el valor en el debe y después digitarlo en el campo correcto (Haber).

Yo lo hago con una función, pero esta lleva otros valores y condiciones, la cual me permite digitar en _, con la salvedad que al campo incorrecto le otorga valor 0.

Tomando el ejemplo anterior, el operador unicamente tendría que digitar el valor en el haber, y automaticamente el debe queda en 0.

Intenta as:

Code: Select all

      oCol:=oBrw1:AddCol()
      oCol:cEditPicture   := '@Z 999,999.99'
      oCol:bEditValue  := { || Nuevo->DEBE }
      oCol:nHeadStrAlign := AL_CENTER
      oCol:cHeader   := "D E B E"
      oCol:nWidth:=70
      oCol:nEditType :=EDIT_GET 
[b]      oCol:bOnPostEdit := {|o, v, n| Nuevo->debe:=v, Nuevo->Haber:=0_}
[/b]      oCol:nFooterType := AGGR_SUM 
      
      oCol:=oBrw1:AddCol()
      oCol:cEditPicture   := '@Z 999,999.99'
      oCol:bEditValue  := { || Nuevo->HABER }
      oCol:nHeadStrAlign := AL_CENTER
      oCol:cHeader   := "H A B E R"
      oCol:nWidth:=70
      oCol:nEditType :=EDIT_GET 
[b]      oCol:bOnPostEdit := {|o, v, n| Nuevo->haber:=v, Nuevo->Debe:=0 }
[/b]      oCol:nFooterType := AGGR_SUM 
 
 
Intentalo y nos dices.
Saludos.

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 7:30 pm
by acuellar
Muchas gracias estimados

oCol:bEditWhen := {|| Nuevo->HABER=0 }

Era lo que estaba buscando.