FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour WHEN en xBrowse
Posts: 1713
Joined: Tue Oct 28, 2008 06:26 PM

WHEN en xBrowse

Posted: Wed Jun 13, 2018 08:38 PM
Estimados

Tengo dos columnas con GET_EDIT y quiero que sólo una permita datos por fila.
Code (fw): Select all Collapse
      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 (fw): Select all Collapse
    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 (fw): Select all Collapse
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.

Saludos,



Adhemar Cuéllar

Posts: 1713
Joined: Tue Oct 28, 2008 06:26 PM

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 01:08 PM

Estimados

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

sólo me falta condicionar las columnas.

Gracias

Saludos,



Adhemar Cuéllar

Posts: 2069
Joined: Fri Jan 06, 2006 09:28 PM

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 03:34 PM
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... :-)

Code (fw): Select all Collapse
   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
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 04:42 PM
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 ambos campos, 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 (fw): Select all Collapse
      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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1713
Joined: Tue Oct 28, 2008 06:26 PM

Re: WHEN en xBrowse

Posted: Thu Jun 14, 2018 07:30 PM

Muchas gracias estimados

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

Era lo que estaba buscando.

Saludos,



Adhemar Cuéllar

Continue the discussion