oribeiro Posted May 9, 2014 Report Share Posted May 9, 2014 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, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted May 10, 2014 Author Report Share Posted May 10, 2014 Há algo que eu posso fazer para melhorar a função xPlanilha() ?? Pretendo utilizá-la em todo o meu sistema. Agradeço as sugestões. Quote Link to comment Share on other sites More sharing options...
Euclidao Posted May 10, 2014 Report Share Posted May 10, 2014 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. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted May 10, 2014 Author Report Share Posted May 10, 2014 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) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.