WHEN en xBrowse

Post Reply
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

WHEN en xBrowse

Post 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.
Saludos,

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

Re: WHEN en xBrowse

Post by acuellar »

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
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: WHEN en xBrowse

Post 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
 
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
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: WHEN en xBrowse

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: WHEN en xBrowse

Post by acuellar »

Muchas gracias estimados

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

Era lo que estaba buscando.
Saludos,

Adhemar C.
Post Reply