Problema con nColSel de Xbrowse

Problema con nColSel de Xbrowse

Postby mariordz » Fri Jan 18, 2019 4:12 pm

Buenos días amigos del foro, tengo un xbrowse con bastantes columnas, necesito mostrar un dialogo con detalles, pero estos dependen del campo en el que me encuentre posicionado, el problema es que cuando uso la clausula nColsel, esta varia, dependiendo de lo que el Xbrowse esta mostrando en pantalla, no en relación al número real de campos que contiene el mismo.

Es decir, si mi xbrowse tiene 22 campos y en pantalla inicialmente solo me caben 8, al seleccionar ualquier campo y consultar los detalles los campos corresponderían con su posición "real", pero si me desplazo a la derecha dos campos, entonces el campo3 será el nColsel=1, campo4=nColsel2 y así sucesivamente.

Code: Select all  Expand view
Campo1,Campo2,Campo3,Campo4,Campo5,Campo6,Campo7,Campo8,campo9,campo10.....


La pregunta real es:

Como le hago para saber el numero de campo "fisico" en que me encuentro para poder mostrar los detalles que necesito en forma correcta?

Aqui parte del código:

Code: Select all  Expand view
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

               oCol = oBrw:AddCol()
        oCol:bStrData = { || nomina->Empleado }
        oCol:nDataStrAlign := 0
        oCol:nHeadStrAlign := AL_LEFT
        oCol:cHeader = "Sucursal"
        oCol:nWidth = 60
        oCol:oHeaderFont := oFont1
        oCol:bClrHeader := { || {  color_1(),65535 } }
        oCol:oHeaderFont := oFont1

               oCol = oBrw:AddCol()
        oCol:bStrData = { || nomina->Faltas }
        oCol:nDataStrAlign := 0
        oCol:nHeadStrAlign := AL_LEFT
        oCol:cHeader = "Faltas del periodo"
        oCol:nWidth = 60
        oCol:oHeaderFont := oFont1
        oCol:bClrHeader := { || {  color_1(),65535 } }
        oCol:oHeaderFont := oFont1

        oBrw:SetRDD()
        *oBrw:bLDblClick := {|| msgalert("VER DETALLES INCAPACIDAD","Detalles")}
       
        oBrw:Sucursal:lMergeVert   := .t.
        *oBrw:nFreeze := 3

        oBrw:CreatefromResource(3)
        lSalpag:=.F.
        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
        oFont1:end()
    endif
return





Function deta_inci
    local oBrwDet
    nColu:=oBrw:nColSel()
    cNonodi:=alltrim(str(no_nomina))
        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'"
            cTi:='"Incapacidad"'
            deta1()
        case nColu=6
            cCadsql1di:="Select fechaincide,observaciones from &tInci_dia where no_nomina='&cNonodi' and vacaciones="+;
            "'1' and fechaincide between '&cIpr' and '&cFpr'"
            cTi:='"Vacaciones"'
            deta1()
        case nColu=7
            cCadsql1di:="Select fechaincide,observaciones from &tInci_dia where no_nomina='&cNonodi' and permiso="+;
            "'1' and fechaincide between '&cIpr' and '&cFpr'"
            cTi:='"Permiso"'
            deta1()
        case nColu=8
            cCadsql1di:="Select fechaincide,observaciones from &tInci_dia where no_nomina='&cNonodi' and falta="+;
            "'1' and fechaincide between '&cIpr' and '&cFpr'"
            cTi:='"Falta"'
            deta1()
        case ncolu>9 .and. nColu<16
            cCadsql1di:="Select fecha_hrsext,horas_extra,horas_invent,hora_comida,monto_efectivo from &tHorase where "+;
            "no_nomina='&cNonodi' and fecha_hrsext between '&cIpr' and '&cFpr'"
            cTi:='"Falta"'
            deta2()
        otherwise
            return(NIL)
        endcase
return(NIL)
 



PD, como verán la línea:
*oBrw:bLDblClick := {|| msgalert("VER DETALLES INCAPACIDAD","Detalles")}
Está bloqueada, porque cuando le doy doble click al campo entra al modo edición ¿Como podría hacerle para que al darle doble click no entre a editar el campo y haga el llamado a la función "deta_inci"?

Gracias y saludos.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Problema con nColSel de Xbrowse

Postby cmsoft » Fri Jan 18, 2019 9:55 pm

Para que no te entre en modo edicion, puedes ponerle el lFastEdit en .f.
Para que te llame a la funcion segun donde hace el doble click puedes ponerle a cada columna que llame a la funcion deta_inic con el nro de columna que estas definiendo
Code: Select all  Expand view
oCol = oBrw:AddCol()
        oCol:bStrData = { || nomina->Faltas }
        oCol:nDataStrAlign := 0
        oCol:nHeadStrAlign := AL_LEFT
        oCol:cHeader = "Faltas del periodo"
        oCol:nWidth = 60
        oCol:oHeaderFont := oFont1
        oCol:bClrHeader := { || {  color_1(),65535 } }
        oCol:bLDClickData := { || {  deta_inic(3) } } //<-- Agrega esta linea en cada campo
        oCol:oHeaderFont := oFont1
 

Y asi en cada caso...
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Problema con nColSel de Xbrowse

Postby FranciscoA » Fri Jan 18, 2019 10:03 pm

Como le hago para saber el numero de campo "fisico" en que me encuentro para poder mostrar los detalles que necesito en forma correcta?


PD, como verán la línea:
*oBrw:bLDblClick := {|| msgalert("VER DETALLES INCAPACIDAD","Detalles")}
Está bloqueada, porque cuando le doy doble click al campo entra al modo edición ¿Como podría hacerle para que al darle doble click no entre a editar el campo y haga el llamado a la función "deta_inci"?


Intenta asi:

Code: Select all  Expand view
oBrw:bLDblClick := {|| deta_inci(oBrw)}

Function deta_inci(oBrw)
    local oBrwDet
    nColu:=oBrw:SelectedCol():nCreationOrder
 


Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Problema con nColSel de Xbrowse (Solucionado)

Postby mariordz » Fri Jan 18, 2019 10:45 pm

Mil gracias por su aporte, probé con sus ideas y quedo trabajando correctamente.

Nuevamente mil gracias a ambos.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 97 guests