Pular para o conteúdo principal

Postagens

Mostrando postagens de 2010

Pegando senhas dos usuários do Protheus 8

Para você que é ADMIN e, numa emergência, precise de uma rotina para pegar as senhas dos seus usuários do Protheus 8, segue uma rotina que faz isso e grava tudo num arquivo texto, sem criptografia. A rotina lê o arquivo SIGAPASS.SPF e grava o arquivo DADOSU.TXT na pasta TEMP (que deve ser criada dentro da pasta do Protheus). O arquivo contém o nome reduzido, senha e mais alguns dados. Use com responsabilidade: user function PegaSenhas() local aPswDet := "",; cArquivo, cPswFile := "sigapss.spf", cRBSFConct := cPswId := cPswName := cPswPwd := cPswDet := cUserId := "",; lEncrypt := .f.,; nArquivo, nPswRec := 0, nRBSFrec := SPF_RecCount(cPswFile, 1) psworder(1) for nId := 1 to nRBSFrec cUserId := strzero(nId,6) nPswRec := spf_seek(cPswFile,"1U"+cUserId, 1) if nPswRec > 0 spf_getfields(cPswFile, nPswRec, @cPswId, @cPswName, @cPswPwd, @cPswDet) aPswDet := str2array(cPswDet, lEncrypt)

Construção visual de telas em ADVPL

Gaia 2010 Gerador Auxiliar de Interface ADVPL Para quem não conhece, o programa Gaia pode ser uma boa ajuda na hora de criar telas para programas ADVPL. Você monta as telas visualmente como no Delphi ou VB e tem opção para transformar seu design em código ADVPL para adicionar em seu programa. Esta versão do Gaia está bem bacana (parabéns ao autor). O registro é gratuito (Freeware) e, de acordo com o autor, servirá apenas para o controle de usuários e aviso sobre atualizações.  Para fazer download, entre no link: http://mansano.com/gaia/ Veja também: •  Protheus: Criando tela de login personalizada. •  Editando Imagens no Protheus

Gráficos no Protheus

Gráficos no Protheus Usando a função MATGRAPH pode-se criar gráficos que serão montados a partir dos dados de um array ou de um arquivo de trabalho passado como parâmetro. Pode-se também escolher o tipo de gráfico com 2 ou 3 dimensões e visualizar em formato de linha, barra ou área. Para usar, use o include PROTHEUS.CH ou TOTVS.CH e inclua a função abaixo em seu programa, modificando-a da maneira que achar melhor: user function fRBSFgraf() local lGraph3D := .t. // .F. Grafico 2 dimensoes - .T. Grafico 3 dimensoes local lMenuGraph := .t. // .F. Nao exibe menu - .T. Exibe menu para mudar o tipo de grafico local lMudaCor := .t. local nTipoGraph := 2 local nCorDefault := 1 local aDados := {{"Valor 1", 100}, {"Valor 2", 500},{"Valor 3", 1000}} local aStru := {} local cArquivo := CriaTrab(,.f.) local i If MsgYesNo("Deseja exibir o grafico com os dados do array?")    // O grafico sera montado a partir dos dados do arr

Editando imagens usando o Protheus

Você conhece a Classe TDrawer? Usando-a você pode abrir e manipular imagens com extensões BMP (Bitmap), JPG (Joint Photographic Group) e PNG (Portable Network Graphics). Para isto, basta você adicionar a função (exemplo abaixo), em seu programa (usar include TOTVS.CH ou PROTHEUS.CH), fazer a chamada a ela num botão e compilar. Segue a função: User Function TDrawer Private isText := .F. Private colors := {CLR_HRED, -1} // Linha Vermelha / Fundo Transparente DEFINE DIALOG oDlg TITLE "Exemplo TDrawer" FROM 180,180 TO 550,700 PIXEL // Menu de Opções oMenu := TMenu():New() oMenu:Add(TMenuItem():New(oMenu:Owner(),'Abre',,,,{||isText:=.F.,openFile()})) oMenu:Add(TMenuItem():New(oMenu:Owner(),'Salva',,,,{||isText:=.F.,saveFile()})) oMenu:Add(TMenuItem():New(oMenu:Owner(),'Texto',,,,{||isText:=.T.})) oMenu:Add(TMenuItem():New(oMenu:Owner(),'Selecao',,,,{||isText:=.F.,oDrawer:SetType(0)})) oMenu:Add(TMenuItem():New(oMenu:Owne

Enviando e-mails usando ADVPL

Para enviar e-mail no Protheus, usando o ADVPL, primeiro configure os parâmetros seguintes: MV_RELSERV: smtp.seudominio.com.br MV_RELACNT: contato@seudominio.com.br MV_RELPSW: senha da conta (MV_RELACNT) Depois de configurar, para ver e copiar o fonte , clique aqui (Google Groups, link seguro).

Impressão com imagens no Protheus

Muitas vezes é necessário incluir uma imagem num relatório (uma logomarca por exemplo). Uma das maneiras de se fazer isto, é usar a classe TMSPRINTER() . O programa exemplo abaixo, ilustra bem como fazer. Este usa também a classe TFONT() (o tamanho do fonte leva o sinal de menos) : # include "PROTHEUS.CH" # include "RWMAKE.CH" user function fImprimeG() local oFont08 := tfont():New( 'Courier new' ,, -8, .t.),,; oFont09 := tfont():New( 'Courier new' ,, -9, .t.),,; oFont10 := tfont():New( 'Courier new' ,,-10, .t.) oPrint:=tmsprinter():new( "Impressao Grafica" ) oPrint:setportrait() oPrint:SetpaperSize(9) // PAPEL A4 if .not. oPrint:Setup() // MOSTRA JANELA DE CONFIGURAÇÃO DE IMPRESSAO msgalert( "IMPRESSAO CANCELADA." ) return nil endif // ESTE BLOCO PODE FICAR EM LOOP (DO WHILE, FOR..., ETC.) oPrint:StartPage() // oPrint:sayBitmap(linha, coluna, "C:\SUAPASTA\SUAIMAGEM.BMP", largura, al

Criando Listbox no Protheus

Se você precisa criar uma list box, o ADVPL possui a classe tComboBox. O exemplo abaixo mostra seu funcionamento. Não esqueça de incluir a chamada da função em seu menu ( na imagem ). Segue o código: #include "rwmake.ch" user function fComboCli()   local aCodCli:={},;   cQuery,;   oCombo, oFont := tfont():new( "lucida console" ,,-11,.t.), oDiag1   cQuery := "SELECT A1_COD FROM SA1010 WHERE A1_NOME LIKE 'JOAO%'"   cQuery := changequery(cQuery)   dbusearea(.t., "TOPCONN" , tcgenqry(,,cQuery), "SA1TMP" , .f., .t.)   if .not. SA1TMP->( eof ())      SA1TMP->( dbgotop ())       do while .not. SA1TMP->(eof())         aadd(aCodCli, SA1TMP->A1_COD)         SA1TMP->( dbskip ())       enddo   else      msgalert( "Nenhum cliente encontrado para o criterio informado." )       return nil   endif   SA1TMP->(dbclosearea())   @ 200, 1 to 350, 400 dialog oDiag1 title "COMBO CLIENTES"   cCo

Quando e quais tabelas customizadas SZ eu criei ?

Para saber, é simples. Você pode montar no Proteus (ou em sua intranet) uma tela que mostre o resultado da query abaixo: SELECT name, crdate FROM sysobjects WHERE xtype='U' AND name LIKE 'SZ%' ORDER BY crdate desc :)

Campos memo do Protheus com ASP e SQL Server

Se você trabalha com intranet e MS-SQL Server , acessando tabelas do Protheus via Web, já deve ter tido a necessidade de acessar campos tipo MEMO. O que ocorre é que apesar de você criar o campo como tipo MEMO, o Protheus (Configurador) cria este no SQL Server como tipo IMAGE. Se você armazenar a frase "Teste observacao", no momento que você mostrar em sua página, vai aparecer um bocado de interrogações. Isto porque a frase fica gravada como: 0x5465737465206F62736572766163616F2E. O conteúdo gravado no campo é binário. Para apresentá-lo, você pode usar a seguinte query (considerando que por exemplo uma tabela chamada SZT010 e um campo com o nome ZT_OBS): SELECT CONVERT (VARCHAR( 8000 ), CONVERT (BINARY( 8000 ), ZT_OBS )) AS cZTOBS FROM SZT010 WHERE ZT_DATA = '20100106' AND ZT_FILIAL = '02' Ou seja, quando você mostrar cZTOBS, a frase será mostrada normalmente. •  Quem viu este post, também viu:     Listar campos das tabelas     Cri