Boton solo funciona una vez

Boton solo funciona una vez

Postby mariordz » Thu Jan 10, 2019 8:14 pm

Buenas tardes compañeros del foro, les pido su ayuda para resolver un problema bastante extraño, tengo un dialogo desde recursos, en el dialogo un Xbrowse y una serie de botones, al pulsar uno de ellos me debe desplegar una ventana con una serie de datos relacionados a la celda de la que estoy ejecutando, todo parece funcionar bien, a excepción de que cuando pulso el botón y me despliega la información correspondiente, despues cierro la ventana y vuelvo a pulsar el botón este no responde, es como si al llamar la función que ejecuta este botón no le devolviera el foco al botón desde donde fue llamada, pero otros botones que existen en el mismo dialogo si funcionan.

Espero haberme explicado correctamente y ver si existe alguna solución para este peculiar comportamiento.

Uso FW16.04+Harbour+BCC7+xDevStudio0.72

Aqui parte del cósigo que estoy ejecutando:


Code: Select all  Expand view

Function revi_inci
    public oDlgins
    close all
    use &dbtmp1 alias nomina
    DbGotop()
   
    define font oFont1  name "TIMES NEW ROMAN" size 0,-14 bold
    DEFINE DIALOG oDlgins resource "dlgverdb5" of oVentprinc title "Incidencias para nomina semanal" icon "icono1" font oFont1g
    cLeye1:="     Incidencias correspondientes al periodo del: "+cIpr+" al: "+cFpr+" de la sucursal "+alltrim(locncode)
    redefine say prompt cLeye1 ID 1 of oDlgins font oFont1
   
    oBrw := TXBrowse():New( oDlgins )
   oBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL //seleccion por celda
    oBrw:nColDividerStyle := LINESTYLE_INSET
    oBrw:nRowDividerStyle := LINESTYLE_INSET
    oBrw:lColDividerComplete := .t. //completa pintado hasta el footer cuando lineas no llenan todo el browse
   oBrw:nHeaderHeight := 44 //Altura cabeceras de col
    oBrw:lRecordSelector := .t. //poner o no, COL de la flechita de la izq
   oBrw:nHeaderLines := 3
    oBrw:bClrHeader := {|| { nRGB(152, 251, 152), nRGB(47, 79, 79) } }//{|| { nRGB(140, 0, 0), nRGB(229,0,0) } } // VERDECITO
    oBrw:bClrFooter := oBrw:bClrHeader
    oBrw:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales
    oBrw:bClrSel := {|| { nRGB( 0, 0,255), nRGB(241,222,088) } } // para barra de linea selecc cuando el control no tiene el foco
    oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(248,195, 34) } } // para barra de linea selecc cuando el control tiene el foco
    oBrw:nRowHeight := 19
    oBrw:lFastEdit := .T.
       
    oCol = oBrw:AddCol()
    oCol:bStrData = { || nomina->sucursal }
    oCol:nDataStrAlign := 0
    oCol:nHeadStrAlign := AL_LEFT
    oCol:cHeader = "Sucursal"
    oCol:nWidth = 60
    oCol:oHeaderFont := oFont1
    oCol:bClrHeader := { || {  color_1(),65535 } }
    oCol:oHeaderFont := oFont1
       
*****Defino todas las columnas del xBrowse........
       
    oBrw:SetRDD()
       
    oBrw:Sucursal:lMergeVert   := .t.

    oBrw:CreatefromResource(3)
    lSalpag:=.F.
    redefine button oBtn1cs ID 10 of oDlgins prompt "Salvar" action(oDlgins:end())
   redefine button oBtn2cs ID 11 of oDlgins prompt "Procesar" action(oDlgins:end())
    redefine button oBtn3cs ID 12 of oDlgins prompt "Integrar" action(oDlgins:end)
    redefine button oBtn4cs ID 13 of oDlgins prompt "Detalles" action(deta_inci(),oDlgins:refresh())
    redefine button oBtn5cs ID 14 of oDlgins prompt "&Salvar resumen" action(oDlgins:end(),salvainsc())
    redefine button oBtn6cs ID 15 of oDlgins prompt "&Cancelar" action(oDlgins:end())
    activate dialog oDlgins center on init (obtn1cs:hide(),oBtn2cs:hide(),oBtn3cs:hide(),oBtn3cs:hide())
    oFont1:end()
return
 


Y aqui la función que es llamada al pulsar el botón "Detalles":

Code: Select all  Expand view
Function deta_inci
    nColu:=oBrw:nColSel()
    cNonodi:=alltrim(str(no_nomina))
    if nColu=5 .or. nColu=6 .or. nColu=7 .or. nColu=8
        do case
        case nColu=5
            cCadsql1di:="Select fechaincide,observaciones from &tInci_dia where no_nomina='&cNonodi' and incapacidad="+;
            "'1' and fechaincide between '&cIpr' and '&cFpr'"
        case nColu=6
            cCadsql1di:="Select fechaincide,observaciones from &tInci_dia where no_nomina='&cNonodi' and vacaciones="+;
            "'1' and fechaincide between '&cIpr' and '&cFpr'"
        case nColu=7
            cCadsql1di:="Select fechaincide,observaciones from &tInci_dia where no_nomina='&cNonodi' and permiso="+;
            "'1' and fechaincide between '&cIpr' and '&cFpr'"
        case nColu=8
            cCadsql1di:="Select fechaincide,observaciones from &tInci_dia where no_nomina='&cNonodi' and falta="+;
            "'1' and fechaincide between '&cIpr' and '&cFpr'"
        endcase
        oRs1di := TOleAuto():New( "ADODB.Recordset" )
        oRs1di:CursorType := 1 // opendkeyset
        oRs1di:CursorLocation := 3 // local cache
        oRs1di:LockType := 3 // lockoportunistic
        *msgget("A","B",@cCadsql1di)
        *Comando SQL para consultar clientes en GP
        TRY
            cursorwait()
            oRS1di:Open( cCadsql1di,'Provider='+xPROVIDER+';Data Source='+xSOURCE+';Initial Catalog='+xCATALOGA+';User Id='+xUSERID+';Password='+xPASSWORD )
            CATCH oErr
                MsgInfo( "Error al generar el recordset de detalle de incidencia" )
                msgget("A","B",@cCadsql1di)
            RETURN(.F.)
        END TRY
        oRs1dinr := oRs1di:RecordCount()
        if oRs1dinr>0
            aDatos:={}
        oRs1di:MoveFirst()
        for unregdi:=1 to oRs1dinr
                aadd(aDatos,dtoc(oRs1di:Fields(0):Value))
            oRs1di:MoveNext()
            next
            oRs1di:MoveFirst()
            aadd(aDatos,oRs1di:Fields(1):Value)
            DEFINE DIALOG oDlg FROM 2, 2 TO 250,450 TITLE "Detalle incidencia" PIXEL of oDlgins
        @ 0, 2 SAY " Información de la incidencia "  OF oDlg
        @ 1, 2 XBROWSE oBrw OF oDlg  SIZE 200,85 ;
         AUTOCOLS ;
         HEADERS "Detalle" ;
         SIZES 350 ;
         ARRAY aDatos ;
         FOOTERS LINES CELL
           oBrw:CreateFromCode()
            @ 105,165 BUTTON "&Salir"  OF oDlg ACTION oDlg:End() pixel
        ACTIVATE DIALOG oDlg CENTERED
        oRs1di:close()
        oDlgins:refresh()
        Sysrefresh()
        endif
    endif
return(NIL)
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Boton solo funciona una vez

Postby cmsoft » Thu Jan 10, 2019 9:52 pm

Si no me equivoco, el error esta en la linea
Code: Select all  Expand view

      @ 1, 2 XBROWSE oBrw OF oDlg  SIZE 200,85 ;
         AUTOCOLS ;
         HEADERS "Detalle" ;
         SIZES 350 ;
         ARRAY aDatos ;
         FOOTERS LINES CELL
           oBrw:CreateFromCode()
            @ 105,165 BUTTON "&Salir"  OF oDlg ACTION oDlg:End() pixel
 

Que es una variable supongo que estatica.
Prueba poner
Code: Select all  Expand view

Function deta_inci
local oBrwDet
....
@ 1, 2 XBROWSE oBrwDet OF oDlg  SIZE 200,85 ;
         AUTOCOLS ;
         HEADERS "Detalle" ;
         SIZES 350 ;
         ARRAY aDatos ;
         FOOTERS LINES CELL
           oBrwDet:CreateFromCode()
            @ 105,165 BUTTON "&Salir"  OF oDlg ACTION oDlg:End() pixel
 
User avatar
cmsoft
 
Posts: 1191
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Boton solo funciona una vez (Resuelto)

Postby mariordz » Thu Jan 10, 2019 10:57 pm

Muchas gracias por tu respuesta Cesar, funcionó de maravilla.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Boton solo funciona una vez

Postby cmsoft » Thu Jan 10, 2019 11:02 pm

Excelente! Me alegro mucho!!
Abrazo
User avatar
cmsoft
 
Posts: 1191
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

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

cron