Jump to content
Fivewin Brasil

Contribuição: Função prática em xBrowse


oribeiro

Recommended Posts

Pessoal,

Passei algumas boas horas trabalhando numa função para mostrar de forma rápida os dados dum DBF em forma de planilha.

Vejam o resultado:

Função:

********************************************************************************************
FUNCTION xPlanilha(xDbf,xTit,xFld) // Planilha usando o xBrowse -> PARAM=(oDbf,cTít,aCampos)
********************************************************************************************
   #include "XBrowse.Ch"
   Local oDlg, oBrw, oReg, oFld, i
   Local aFld := {}
   if Select(xDbf)=0
      Return nil
   endif
   Select(xDbf)
   (xDbf)->(DbGoTop())
   Default xTit := "Planilha: "+Alias()
   Default xFld := {}
   DEFINE DIALOG oDlg SIZE 800,420 FONT WndMain():oFont TITLE xTit TRANSPARENT
   if Empty(xFld) // Mostra Todos os campos do DBF
      @ 10,10 XBROWSE oBrw OF oDlg SIZE 380,180 PIXEL AUTOCOLS FOOTERS LINES CELL ALIAS (xDbf)
      AEval(oBrw:aCols, {|o| o:cToolTip := {'Coluna:' + CRLF + o:cHeader,    'Informação'}}) // ToolTip nas colunas automático
   else           // Mostra Campos específicos do DBF
      @ 10,10 XBROWSE oBrw OF oDlg SIZE 380,180 PIXEL AUTOCOLS FOOTERS LINES CELL
      For i=1 To Len(xFld)
         oFld := xDbf+"->"+xFld[i][1]
         ADD TO oBrw DATA &oFld HEADER xFld[i][1]
      Next
      i:=0
      AEval(oBrw:aCols, {|o| (i++, o:cToolTip:={'Coluna:'+CRLF+ iif(Empty(xFld[i][2]),xFld[i][1],xFld[i][2]) ,'Informação'}) }) // ToolTip nas colunas passado no parâmetro
   endif
   oBrw:lAutoSort := Empty((xDbf)->(OrdScope()))                                             // Se o DBF está com OrdScope, então não permitir a mudança na classificação para não perder o filtro
   oBrw:bClrStd   := {|| {CLR_BLACK, iif(oBrw:Keyno()%2=0, CLR_WHITE, CLR_HGRAY) } }         // Cores nas linhas (Par/Impar) ou (oBrw:cAlias)->(RecN())%2=0
// oBrw:DelCol( 1 )                                                                          // Deleta Coluna
// oBrw:DT_EMISS:cEditPicture := 'dd/mm/yyyy'                                                // Máscara da Coluna
// oBrw:aCols[1]:bLClickHeader := {|| (xDbf)->(DBSETORDER(1)), oBrw:GoTop(), oBrw:Refresh()} // Para ordenar a planilha pela coluna, quando selecionada.
   oBrw:CreateFromCode()
   @ 195, 010 BUTTON "&Imprimir" SIZE 50,10 FONT oFontGet PIXEL ACTION oBrw:Report()         // IIF( MsgYesNo("Deseja imprimir essa planilha?","Confirme"), (oReg:=(xDbf)->(RecN()),Listar(xTit,,,,,,,,,,,,,.T.,.F.),(xDbf)->(DbGoTo(oReg)),oBrw:Refresh()), )
   @ 195, 070 BUTTON "&Excel"    SIZE 50,10 FONT oFontGet PIXEL ACTION oBrw:ToExcel()
// @ 195, 130 BUTTON "&Pesquisa" SIZE 50,10 FONT oFontGet PIXEL ACTION (Pesquisa(xDbf,,oDlg,OrdNumber(),"Informe o que deseja encontrar:",xDbf,.f.,.t.),oBrw:Refresh()) // ( cSeek:=Space(50), iif(oaMsgGet("Buscar por","Informe o que deseja encontrar:",@cSeek,"LUPA"),oBrw:RDDIncrFilter(Upper(Alltrim(cSeek))),) )
   @ 195, 190 BUTTON "&Fechar"   SIZE 50,10 FONT oFontGet PIXEL ACTION oDlg:End()
   ACTIVATE DIALOG oDlg CENTERED ON INIT oBrw:SetFocus()
Return Nil

A Chamada dessa função resume-se em abrir o arquivo e chamar a função ou, se preferir incrementar, passar uma matriz com os campos a serem mostrados e os seus títulos, assim:

      SELECT(cDbfNS)
      cTit := "Notas de Serviço")
      xPlanilha(Alias(),cTit)

OU

      // PLANILHA //
      xFld := {{"NR_NF"    ,"Número da nota fiscal"            },;
               {"DT_EMISS" ,"Data de emissão da nota"          },;
               {"TOTALNF"  ,"Total da nota"                    },;
               {"VALSERV"  ,"Valor dos Serviços"               },;
               {"DESCONTOS","Descontos na nota"                },;
               {"SERV1"    ,"Linha 1 da descrição dos serviços"},;
               {"SERV2"    ,"Linha 2 da descrição dos serviços"} }
      xPlanilha(Alias(),cTit,xFld)

Um abraço a todos,

Link to comment
Share on other sites

Oscar, boa tarde.

Existe a função xbrowse() (em ..\source\function\xbrowser.prg) que tem vários parâmetros, entre elas, o lFastEdit.

A minha sugetão, seria alterar esta função para receber um array de campos a serem apresentados (apresentar todos os campos não é sempre a melhor opção).

Em todo caso, vale o esforço para ajudar a comunidade.

Um abraço, Euclides.

Link to comment
Share on other sites

Obrigado Euclides,

Vou estudar a função xBrowse().

A função acima já contempla a passagens de quais campos serão apresentados, é só criar uma matriz que contenha os campos e a descrição deles para o Hint das colunas.

Assim:

cTit := "Titulo para o xBrowse"

// ABERTURA DO ARQUIVO //
USE (ARQUIVO)

// CAMPOS QUE APARECERÃO NO BROWSE //
xFld := {{"NR_NF"    ,"Número da nota fiscal"            },;
         {"DT_EMISS" ,"Data de emissão da nota"          },;
         {"TOTALNF"  ,"Total da nota"                    },;
         {"VALSERV"  ,"Valor dos Serviços"               },;
         {"DESCONTOS","Descontos na nota"                },;
         {"SERV1"    ,"Linha 1 da descrição dos serviços"},;
         {"SERV2"    ,"Linha 2 da descrição dos serviços"} }

// CHAMADA DA FUNÇÃO //
xPlanilha(Alias(), cTit, xFld)
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...