sexta-feira, 26 de abril de 2013

Gerando relatórios em planilhas do excel, calc...

Em muitos casos os usuários pedem pela geração de relatórios em planilhas.

No Protheus alguns relatórios padrões da Totvs já existe esta opção, porem como fazer isso em relatórios customizados.

Bom, em meus relatórios eu customizei totalmente a forma de impressão através da funçõe de criação de arquivo do advpl, a FCREATE.

Abaixo um exemplo, onde o relatório imprime todos os códigos e nomes dos bens da tabela ST9, isso para quem possui o modulo de manutenção de ativos. Este relatorio também gera um arquivo .csv que é salvo automaticamente no c: da maquina do usuario.

quinta-feira, 25 de abril de 2013

Configurando ambientes no Novo Developer Studio

Para começar precisamos saber onde salvar os fontes que serão utilizados, no meu caso criei uma pasta em um servidor e mapeei este servidor em minha maquina local.

Quando clicamos no ícone do Developer ele nos pede qual workspace desejamos utilizar, no meu caso selecionei o mapeamento deste servidor.

Em seguida o developer é aberto. Para configurar o ambiente de compilação existe um ícone na parte superior do developer, ao lado do atalho para debug.

Nele existe a pasta others que contém o acesso ao TOTVs Server, que é uma espécie de aba onde serão configurados os servidores, ou ambientes de compilação.

Clicando no atalho criado, abrirá a aba para configuração.

Depois abre uma tela de configuração do servidor de aplicação, onde preenchemos o nome do servidor o ip e a porta de conexão e em seguida clicamos em detectar/validar. Se tudo ocorrer corretamente vai aparecer a versão do Servidor, em seguida clique em finish.

Depois aparecerá o servidor configurado logo abaixo do diretório Servers na aba Servers Extensio. Clique com o botão direito em sima do servidor e depois em conectar

Informe o nome do ambiente usuario e senha para conectar.

Depois para conseguir compilar no ambiente desejado, clique na aba do canto esquerdo inferior. Lá estarão todos os ambientes configurados por você.

A partir do momento que você estiver com um dos ambientes selecionados, poderá compilar seus fontes nele.

quarta-feira, 24 de abril de 2013

Criando um navegador em advpl

Para aqueles que assim como eu precisam de acesso a algum aplicativo web dentro do protheus, aqui esta um exemplo de como desenvolver um navegador interno (pode ser aberto dentro do sistema protheus).

Ele utiliza os mesmos padrões de configuração do navegador padrão do usuário da maquina, além é claro das configurações impostas no código fonte.

Obs: Para funcionar, é preciso configurar o smartcliente.ini e colocar logo abaixo da marcação [config] a opção: BrowserEnabled=1


#include "protheus.ch"

User Function Navegador()

Private aPages := {} // array que guarda os endereços visitados

Private nPgVist := -1 // controle a posicao do array aPages

Private aSize := MsAdvSize() // pega o tamanho da tela

Private oDlg1, oTIBrw

Private cNavegado := Space(80) // usado no objeto get para guardar os endereços web

Private lcont := .T.

DEFINE MSDIALOG oDlg1 TITLE "Navegador" From aSize[7],0 to aSize[6],aSize[5] of oMainWnd PIXEL

cNavegado := "http://www.google.com" // pagina inicial

oNav:= TGet():New(10,10,{|u| if(PCount()>0,cNavegado:=u,cNavegado)}, oDlg1,340,5,,,,,,,,.T.,,,,,,,,,,)

@ 010, 350 Button oBtnIr PROMPT "Ir" Size 40,10 Action(Processa({||Navegar()},"Abrindo","Aguarde...")) Of oDlg1 Pixel

@ 010, 390 Button oBtnImp PROMPT "Imprimir" Size 40,10 Action oTIBrw:Print() Of oDlg1 Pixel

@ 010, 430 Button oBtnAnte PROMPT "Anterior" Size 40,10 Action (Retorna()) Of oDlg1 Pixel

@ 010, 470 Button oBtnDep PROMPT "Avançar" Size 40,10 Action(Avanca()) Of oDlg1 Pixel

@ 010, 510 Button oBtnSair PROMPT "Sair" Size 40,10 Action(Sair()) Of oDlg1 Pixel

oTIBrw:= TIBrowser():New( 025,010,aSize[5]-640, 270, "http://www.google.com", oDlg1 )

aaDD(aPages,"http://www.google.com")

oNav:bLostFocus := { || Valido()}

Activate MsDialog oDlg1 Centered

Return

Static Function Navegar()

Ir()

Return

Static Function Ir()

oTIBrw:Navigate(AllTrim(cNavegado),oDlg1)

aaDD(aPages,AllTrim(cNavegado))

nPgVist := Len(aPages)

Return

Static Function Avanca() // proxima proxima pagina que jah foi visitada

if(Len(aPages) > nPgVist .and. Len(aPages) > 1 )

nPgVist++

oTIBrw:Navigate(aPages[nPgVist],oDlg1)

cNavegado := aPages[nPgVist]

oNav:Refresh()

EndIf

Return

Static Function Retorna() // pagina anterior que foi visitada

if(nPgVist>1)

nPgVist--

oTIBrw:Navigate(aPages[nPgVist],oDlg1)

cNavegado := aPages[nPgVist]

oNav:Refresh()

EndIf

Return

Static Function Sair() // fecha a tela

oDlg1:End()

Return