WHEN en xBrowse

WHEN en xBrowse

Postby acuellar » Wed Jun 13, 2018 8:38 pm

Estimados

Tengo dos columnas con GET_EDIT y quiero que sólo una permita datos por fila.
Code: Select all  Expand view

      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  Expand view

    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  Expand view

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 C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: WHEN en xBrowse

Postby acuellar » Thu Jun 14, 2018 1:08 pm

Estimados

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

sólo me falta condicionar las columnas.

Gracias
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: WHEN en xBrowse

Postby joseluisysturiz » Thu Jun 14, 2018 3: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... :shock:

Code: Select all  Expand view

   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
 
Last edited by joseluisysturiz on Thu Jun 14, 2018 11:43 pm, edited 1 time in total.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: WHEN en xBrowse

Postby FranciscoA » Thu Jun 14, 2018 4: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: Select all  Expand view
     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
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: WHEN en xBrowse

Postby acuellar » Thu Jun 14, 2018 7:30 pm

Muchas gracias estimados

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

Era lo que estaba buscando.
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 70 guests