Page 1 of 1

Ayuda Con Xbrowse (Consulta a Cristobal N.)

Posted: Thu Nov 14, 2019 3:12 pm
by remtec
Amigos

Tengan todos un buen dia.

Hay un problema con la pagina, esta muy lento el acceso, publique en la mañana y no se registro.

Tengo un problema, Uso un Xbrowse con una Dbf, uno de sus campos contiene el codigo del dia y lo que necesito mostrar es le nombre que esta definido en un Array de Dias.

Agradeciendo y en espera de sus comentarios, les saluda muy atte.

Antonio

Dejo Parte del codigo:

Code: Select all

*** Array que contiene el codigo y nombre del dia
alias:= {{"1","Lunes"},{"2","Martes"},{"3","Miercoles"},{"4","Jueves",{"5","Viernes"},{"6","Sabado"},{"7","Domingo"}}}

***

     REDEFINE SAY otitu2 PROMPT " DIAS DE ATENCION "  ID 4006 OF oDlg33 COLORS RGB(43, 59, 109)   FONT oFont1

   REDEFINE XBROWSE oBrw2  ID 4005 OF oDlg33 DATASOURCE "HoraBase" FONT oFont2;
                        HEADERS 'Día','Inicio','Término','Frecu','Can.Paci','Estado';
                      COLUMNS 'Cod_Dia', 'Hor_Ini','Hor_Fin','Frecue','Can_Pac','Est_Dia',   // <--- Cod_Dia, aqui debo mostrar el nombre del dia que esta en "aDias"
                        PICTURES '@!','@!','##:##','##:##','99','9','!';
                                        CELL LINES AUTOSORT NOBORDER;

                         WITH OBJECT oBrw2
                             oBrw2:nMarqueeStyle := MARQSTYLE_HIGHLROW
                             oBrw2:nColDividerStyle := LINESTYLE_RAISED
                             oBrw2:nRowDividerStyle := LINESTYLE_RAISED
                                 oBrw2:bClrHeader := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
                                 oBrw2:bClrStd  := { || If( Eval( oBrw2:bKeyNo,,oBrw2) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                 { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra

                                 oBrw2:nOpacity    := 230
                                 oBrw2:nHeaderHeight      := 35
                                 oBrw2:nFreeze       := 5

                                 oBrw2:aCols[ 1 ]:oDataFont := oFont7
                                oBrw2:lAutoSort := .t.
                                oBrw2:lFooter := .T.
                                oBrw2:lHScroll := .f.
                                oBrw2:SetStyle( 2007)
                                oBrw2:nColorPen := CLR_RED
                              oBrw2:bChange := {|| oBrw2:Refresh() }
                                 oBrw2:aCols[1]:bClrHeader := { || { CLR_HRED,CLR_WHITE } }
                            END WITH

   REDEFINE BTNBMP ID 4003 PROMPT "ELIMINAR" OF oDlg33  2007  FONT oFont7 C;
                    ToolTip  "ELIMINA REGISTRO";
                    ACTION (delrow(  ), oBrw2:Refresh())



   ACTIVATE DIALOG oDlg33 CENTERED


     RELEASE FONT oFont,oFont1,oFont7


     Return nil






 

Re: Ayuda Con Xbrowse

Posted: Thu Nov 14, 2019 3:25 pm
by cnavarro
Antonio, en la definicion de las columnas, pon directamente la function que te va a devolver lo que necesitas, sólo asegúrate que en el return de esa function está el valor correcto.
Aunque hay otras formas de hacerlo, creo que esta forma que te indico te servirá en más ocasiones

Code: Select all


   REDEFINE XBROWSE oBrw2  ID 4005 OF oDlg33 DATASOURCE "HoraBase" FONT oFont2;
                        HEADERS 'Día','Inicio','Término','Frecu','Can.Paci','Estado';
                      COLUMNS MyNombreDia( 'Cod_Dia' ), 'Hor_Ini','Hor_Fin','Frecue','Can_Pac','Est_Dia',   // <--- Cod_Dia, aqui debo mostrar el nombre del dia que esta en "aDias"
                        PICTURES '@!','@!','##:##','##:##','99','9','!';
                                        CELL LINES AUTOSORT NOBORDER;

.../...

Function MyNombreDia( nDia )

   local cNombre
   cNombre         := // aqui asignas según el valor que recibes como parámetro en el array: aDias[ nDia ] ¿?, no sé lo que tienes en el array

Return cNombre

 

Re: Ayuda Con Xbrowse

Posted: Thu Nov 14, 2019 3:41 pm
by remtec
Hola Cristobal

Como siempre muy agradecido por tu ayuda y tiempo dedicado.

Muchos Saludos

Antonio

Re: Ayuda Con Xbrowse

Posted: Fri Nov 15, 2019 12:11 am
by remtec
Hola Cristobal

Tengo un problema al pasar la variable en la Function como me indicas, pasa como el nombre del la variable y no como valor.

Muchos Saludos.
Antonio

Dejo el Codigo:

Code: Select all


     @ 20,200 XBROWSE oBrw2 SIZE -10,-35 PIXEL OF oDlg1 DATASOURCE "HoraB" ;
                        HEADERS 'Día','Inicio','Término','Frecu','N. Paci','Estado';
                      COLUMNS NomDia( "Cod_dia" ), 'Hor_Ini','Hor_Fin','Frecu','Can_Pac','Est_Dia';
                        COLSIZES 120, 60, 60, 45, 60, 60;
                        PICTURES '@!','##:##','##:##','999','999','!';
                CELL LINES AUTOSORT NOBORDER;
                             oBrw2:nMarqueeStyle := MARQSTYLE_HIGHLROW
                             oBrw2:nColDividerStyle := LINESTYLE_RAISED
                             oBrw2:nRowDividerStyle := LINESTYLE_RAISED
                                 oBrw2:bClrHeader := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
                                 oBrw2:bClrStd  := { || If( Eval( oBrw2:bKeyNo,,oBrw2) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                 { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra

                                 oBrw2:nOpacity    := 230
                                 oBrw2:nHeaderHeight      := 35
                                 oBrw2:nFreeze       := 5


                                oBrw2:lAutoSort := .t.
                                oBrw2:lFooter := .T.
                                oBrw2:lHScroll := .f.
                                oBrw2:SetStyle( 2007)
                                oBrw2:nColorPen := CLR_RED
                                oBrw2:CreateFromCode()
     /*
   REDEFINE BTNBMP ID 4003 PROMPT "ELIMINAR" OF oDlg33  2007  FONT oFont7 C;
                    ToolTip  "ELIMINA REGISTRO";
                    ACTION (delrow( oBrw2,@Can_Cod1,@Val_Tot1 ), oSay5:Refresh(),oSay6:Refresh(),oBrw2:Refresh())

        */

   ACTIVATE DIALOG oDlg1 CENTERED


     RELEASE FONT oFont,oFont1,oFont7


     Return nil

Function NomDia(cCod)
    ?cCod
                If Val(cCod) = 0
                        Return .f.
                Endif
                nDia:= aScan(aDias,   { | array | array[1] == cCod} )
                cNomDia:=aDias[nDia][2]   //  <--- Obtener Nombre del Dia del Array
                Return cNomDia

 

Re: Ayuda Con Xbrowse (Consulta a Cristobal N.)

Posted: Fri Nov 15, 2019 1:44 am
by cnavarro
Antonio, tienes razón, las prisas

Prueba asi

Code: Select all

                    COLUMNS NomDia( HoraB->Cod_dia ), 'Hor_Ini','Hor_Fin','Frecu','Can_Pac','Est_Dia';
 

Re: Ayuda Con Xbrowse (Consulta a Cristobal N.)

Posted: Fri Nov 15, 2019 2:17 am
by remtec
Hola Cristobal

Muchas gracias por tu ayuda y disculpa todas las molestias.

Ya habia probado lo que me indicas y no pasa el valor.

Te cuento, tengo 2 Xbrowse anidados, en el segundo xrbowse se muestra la informacion cuando me desplazo en el primer xbrowse, solo que la columna Cod_Dia del segundo Xbrowse, no muestra el valor del campo a la Function.

Muchos Saludos.

Antonio.

Dejo El Codigo Completo:

Code: Select all



Function Def_Horario()
    Local oDlg, oBrw, oFont1,oFont2, oCol,oTitu1,oTitu2,oFont3,aStruc,oSay1,oSay2,oSay5,oFont4,oFont5
    local oDlg33, oFont, otitu,oFont7,oBrw2,oDlg4,oBot1,oBot2
      Local oSay6,otitu6

      Public aDias:= {{"1","Lunes"},{"2","Martes"},{"3","Miercoles"},{"4","Jueves"},{"5","Viernes"},{"6","Sabado"},{"7","Domingo"}}

     cTemp:="c:"
     If !File(cTemp+"HoraBase.DBF")   // Calendario del Mes
         DbCreate(cTemp+"HoraBase.DBF", {{ "Cod_Pro" ,"C", 4, 0 },;              // Codigo Profesional
                                        { "Cod_Esp" ,"C", 4, 0 },;                // Codigo Especialidad
                                                                                { "Cod_Dia" ,"C", 1, 0 },;                // Codigo del Dia de la Semana
                                                                                { "Hor_Ini" ,"C", 5, 0 },;                // Hora de Inicio
                                                                                { "Hor_Fin" ,"C", 5, 0 },;                // Hora de Termino
                                                                                { "Frecu"   ,"N", 3, 0 },;                // Frecuencia de Atencion  en Minutos
                                                                                { "Can_Pac" ,"N", 3, 0 },;                // Cantidad de Pacientes Por Dia
                                                                                { "Est_Dia" ,"C", 1, 0 };                 // Estado de Atencion, Permite Marcar dia Bloqueado por no Aistencia
                                                                                 } ,"DBFCDX")
   Endif


      Abre_dbf("Profesio",1,.f.,"Profe")
      Set inde to Profesio
      DbSetorder(2)

        If !file("HoraBase.CDX")
                Abre_dbf("HoraBase",1,.t.,"")
            inde on Cod_Pro tag hr1 To HoraBase
              DbClosearea()
    Endif

        Abre_dbf("HoraBase",2,.f.,"HoraB")
      Set inde to HoraBase
        Sele a

      SET RELATION TO Cod_Pro INTO HoraB SCOPED

        /*
      Abre_dbf("Especia",1,.f.,"Espe")
      Set inde to Especia
     */

   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-14
     DEFINE FONT oFont1 NAME 'TAHOMA' SIZE 0,24   BOLD
     DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-12  BOLD
     DEFINE FONT oFont7 NAME "TAHOMA" SIZE 0,-14  BOLD


     DEFINE DIALOG oDlg1 SIZE 895,570 PIXEL FONT oFont3   STYLE nOr( WS_POPUP, WS_VISIBLE, WS_DLGFRAME )

     @ 35,10 XBROWSE oBrw SIZE 200,-35 PIXEL OF oDlg1 DATASOURCE "Profe" ;
            HEADERS 'Nombre del Profesional','Especialidad';
            COLUMNS 'Nom_Pro','Tip_Esp';
            PICTURES "@!","@!" ;
            COLSIZES 280, 70;
      CELL LINES AUTOSORT NOBORDER;
                             oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
                             oBrw:nColDividerStyle := LINESTYLE_INSET
                             oBrw:nRowDividerStyle := LINESTYLE_INSET
                                 oBrw:bClrHeader := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
                                 oBrw:nOpacity    := 230
                                 oBrw:nHeaderHeight      := 35
                                 oBrw:nFreeze       := 2


                                 oBrw:bClrStd  := { || If( Eval( oBrw:bKeyNo,,oBrw1) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                          { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra
                                 oBrw:aCols[ 1 ]:oDataFont := oFont7

                                 oBrw:bClrStd       := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }
                                 oBrw:bClrSelFocus  := {|| { nRGB(  255,  255,  255), nRGB(102, 178, 255) } }
                                 oBrw:bClrSel       := {|| { nRGB(  0,  0,255), nRGB(241,222,088) } }  // para barra de linea selecc cuando el control no tiene el foco
                                 oBrw:lAutoSort := .t.
                                 oBrw:lFooter := .f.
                                 oBrw:lHScroll := .f.
                             oBrw:lIncrFilter   := .F.
                             oBrw:lSeekWild     := .F.                   &&  .T. Busca Contenido, .F. Que comience con lo que digita
                                 oBrw:SetStyle( 2018)
                                 oBrw:nColorPen := CLR_RED
                                 oBrw:bChange := {|| oBrw:Refresh() }


                                WITH OBJECT oBrw
                                                     :bChange    := { || oBrw2:GoTop(), oBrw2:Refresh()  }
                                                     :CreateFromCode()
                                END

     @ 35,216 XBROWSE oBrw2 SIZE -10,-35 PIXEL OF oDlg1 DATASOURCE "HoraB" ;
                        HEADERS 'Día','Inicio','Término','Frecu','N. Paci','Estado';
                      COLUMNS NomDia( HoraB->COD_DIA  ), 'Hor_Ini','Hor_Fin','Frecu','Can_Pac','Est_Dia';
                        COLSIZES 120, 60, 60, 45, 60, 60;
                        PICTURES '@!','##:##','##:##','999','999','!';
                CELL LINES AUTOSORT NOBORDER;
                             oBrw2:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
                             oBrw2:nColDividerStyle := LINESTYLE_INSET
                             oBrw2:nRowDividerStyle := LINESTYLE_INSET
                                 oBrw2:bClrHeader := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
                                 oBrw2:bClrStd  := { || If( Eval( oBrw2:bKeyNo,,oBrw2) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                 { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra

                                 oBrw2:nOpacity    := 230
                                 oBrw2:nHeaderHeight      := 35
                                 oBrw2:nFreeze       := 6


                                oBrw2:lAutoSort := .t.
                                oBrw2:lFooter := .f.
                                oBrw2:lHScroll := .f.
                                oBrw2:SetStyle( 2007)
                                oBrw2:nColorPen := CLR_RED
                                oBrw2:CreateFromCode()
     /*
   REDEFINE BTNBMP ID 4003 PROMPT "ELIMINAR" OF oDlg33  2007  FONT oFont7 C;
                    ToolTip  "ELIMINA REGISTRO";
                    ACTION (delrow( oBrw2,@Can_Cod1,@Val_Tot1 ), oSay5:Refresh(),oSay6:Refresh(),oBrw2:Refresh())

        */

   ACTIVATE DIALOG oDlg1 CENTERED


     RELEASE FONT oFont,oFont1,oFont7


     Return nil

Function NomDia(cCod)
    ?cCod
                If Val(cCod) = 0
                        Return .f.
                Endif
                nDia:= aScan(aDias,   { | array | array[1] == cCod} )
                cNomDia:=aDias[nDia][2]   //  <--- Obtener Nombre del Dia del Array
                Return cNomDia


 

Re: Ayuda Con Xbrowse (Consulta a Cristobal N.)

Posted: Fri Nov 15, 2019 7:42 am
by cnavarro
Bien, si no te funciona asi, prueba de esta forma

Code: Select all

   .../...
   COLUMNS 'Cod_dia', 'Hor_Ini','Hor_Fin','Frecu','Can_Pac','Est_Dia';
   .../...
   :aCols[ 1 ]:bEditValue   := { | |  NomDia( HoraB->Cod_dia )  }
 

Re: Ayuda Con Xbrowse (Consulta a Cristobal N.)

Posted: Fri Nov 15, 2019 1:10 pm
by remtec
Hola Francisco

Muy buen dia.

Aplique tu modificacion y efectivamente ahora si muestra el nombre del dia en la Columna.

Lo que si necesito saber si es correcto que por caja profesional seleccionado, cuando llena este xbrowse, envia 7 veces a la funcion por cada dia de la semana?

Es como que vaya a la Funcion a buscar el dia, tantas veces como columnas tenga, es muy extraño.

Muchos Saludos
Antonio

Asi deje tengo el codigo:

Code: Select all

                             oBrw2:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
                             oBrw2:nColDividerStyle := LINESTYLE_INSET
                             oBrw2:nRowDividerStyle := LINESTYLE_INSET
                                 oBrw2:bClrHeader := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
                                 oBrw2:bClrStd  := { || If( Eval( oBrw2:bKeyNo,,oBrw2) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                 { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra

                                 oBrw2:aCols[ 1 ]:bEditValue   := { | |  NomDia( HoraB->Cod_dia )  }  // <-- Esto Agregue.

                                 oBrw2:nOpacity    := 230
                                 oBrw2:nHeaderHeight      := 35
                                 oBrw2:nFreeze       := 6


                                oBrw2:lAutoSort := .t.
                                oBrw2:lFooter := .f.
                                oBrw2:lHScroll := .f.
                                oBrw2:SetStyle( 2007)
                                oBrw2:nColorPen := CLR_RED
                                oBrw2:CreateFromCode()

 

Re: Ayuda Con Xbrowse (Consulta a Cristobal N.)

Posted: Fri Nov 15, 2019 2:08 pm
by cnavarro
remtec wrote:Hola Francisco

Muy buen dia.

Aplique tu modificacion y efectivamente ahora si muestra el nombre del dia en la Columna.

Lo que si necesito saber si es correcto que por caja profesional seleccionado, cuando llena este xbrowse, envia 7 veces a la funcion por cada dia de la semana?

Es como que vaya a la Funcion a buscar el dia, tantas veces como columnas tenga, es muy extraño.
Imagino que el mensaje es para mí y no para Francisco, por eso te contesto
A la pregunta que me haces, lo lógico es que conteste el autor del xbrowse ( Mr. Rao ), por si él considera que lo que te he propuesto se debe hacer de otra forma más correcta.
Tienes en alguna function un RefreshCurrent o Refresh?

Re: Ayuda Con Xbrowse (Consulta a Cristobal N.)

Posted: Fri Nov 15, 2019 4:18 pm
by remtec
cnavarro wrote:
remtec wrote:Hola Francisco

Muy buen dia.

Aplique tu modificacion y efectivamente ahora si muestra el nombre del dia en la Columna.

Lo que si necesito saber si es correcto que por caja profesional seleccionado, cuando llena este xbrowse, envia 7 veces a la funcion por cada dia de la semana?

Es como que vaya a la Funcion a buscar el dia, tantas veces como columnas tenga, es muy extraño.
Imagino que el mensaje es para mí y no para Francisco, por eso te contesto
A la pregunta que me haces, lo lógico es que conteste el autor del xbrowse ( Mr. Rao ), por si él considera que lo que te he propuesto se debe hacer de otra forma más correcta.
Tienes en alguna function un RefreshCurrent o Refresh?
Hola Cristobal.

Mil perdones, me congundi, claro que es para ti, ya que tu has tenido la gentileza como siempre de estar dispuesto a ayudarme.
Mira uso Refresh, te comente solo porque me llamo la atencion, tu respuesta hace y comple lo que necesito, pero esto es solo por que quise saber si era normal, ahora como elimine el print dentro de la function, que era para revisar, cumple lo que necesito, finalmente es lo que me importa.

Muchas gracias por todo.
Antonio.
Antonio