Pular para o conteúdo principal

Postagens

Mostrando postagens com o rótulo função

Datas por extenso

Já precisou escrever datas por extenso? A pequena função  fDatExt(),  abaixo pode resolver o problema. O resultado pode ser visto nas imagens abaixo: No fonte abaixo, substitua dDatabase , por sua variável (do tipo data): #include "protheus.ch" user function fDataExt() msgalert(u_fDatExt( dDataBase , .t.)) msgalert(u_fDatExt( dDataBase , .f.)) return user function fDatExt (dParDat, lParAbr) local cRetDat := "" if lParAbr cRetDat += cValToChar(day(dParDat)) cRetDat += " de " cRetDat += mesextenso(dParDat) cRetDat += " de " cRetDat += cValToChar(year(dParDat)) else cRetDat += capital(extenso(day(dParDat), .t.)) cRetDat += " de " cRetDat += mesextenso(dParDat) cRetDat += " de " cRetDat += capital(extenso(year(dParDat), .t.)) endif return cRetDat Veja também: Extenso  e Funções de Data

Converter PDF para JPG no Protheus

Você pode converter PDF para JPG no Protheus, usando ADVPL, com a ajuda de dois utilitários (free) externos: ImageMagick e Ghostscript . Baixe-os e instale-os. IMPORTANTE: se você instalar em seu servidor, todos seus usuários do Protheus na rede poderão usar seu programa ADVPL.   Segue o programa ADVPL: static function fConvPDFJPG(cNomPDF, cNomJPG)    local lRet := .f.,;          cPathImgMgk := "C:\PROGRA~1\IMAGEM~1.9-Q\" ,;          cPathProth := "C:\PROTHEUS\PROTHE~1\TEMP\"    // ATENCAO: OS COMANDOS ABAIXO DEVEM FICAR EM MINUSCULO.    // OS PATHs DEVEM TER 8 DIGITOS (USE DIR /X NO CMD PARA VER O PATH REDUZIDO)    if waitrunsrv( cPathImgMgk + "convert -density 300 " + cPathProth + cNomPDF + " -quality 80 " + cPathProth + cNomJPG, .t., cPathImgMgk )       lRet := .t.    endif return lRet Observações: 1 - O programa ADVPL usa a fu...

Retirando acentos

Às vezes, por exemplo quando vamos gravar contas de e-mail, não queremos que o usuário digite acentos. Para "estes momentos", use a função  FwNoAccent( ) . Veja o exemplo abaixo: user function fTiraAcent ()    cString := "Você não pôde tomar café hoje."    cString := FwNoAccent ( cString )    alert ( cString ) return •  Veja também: Função SplitPath()

SplitPath - Dividindo um path

Exemplo SplitPath Quando trabalhamos, acessando arquivos, as vezes precisamos de detalhes destes. A ADVPL, possui a função SplitPath que já divide um path em: drive, path, nome do arquivo e extensão. Segue um exemplo: user function fDividePath()     Local cPatharq := "C:\TEMP\DOC\DOCUMENTO.TXT"     Local cDrive, cDir, cArq, cExt    SplitPath( cPatharq, @cDrive, @cDir, @cArq, @cExt )    msgalert(cDrive +chr(10)+ cDir +chr(10)+ cArq +chr(10)+ cExt, "Função SplitPath " ) return • Veja também: Somando strings

Somando Strings

Se houver necessidade de somar strings sem ter que convertê-las, use a função somastr() . Para usar, a sintaxe é a seguinte: somastr(cVal1 , cVal2 ) , onde cVal1 e cVal2 são string's numéricas que você quer somar. Segue um exemplo: cStr1 := "500" cStr2 := "800" cSoma := somastr ( cStr1, cStr2 ) O resultado, guardado em cSoma será "1300" .

String para Vetor

A função split do vbscript , tem uma função equivalente em ADVPL: strtokarr ( expressao, delimitador ). É extremamente útil quando concatenamos uma série de strings e depois queremos organizar num vetor.  Teste o exemplo: cString := "02,03,04,05,06,07,08,09,10,11,12,13" aString := strtokarr (cString, "," ) for nString := 1 to len(aString)     msgalert(aString[nString]) next Veja também: Valores em extenso.

Verificar senhas usando PSWSEEK

A função abaixo é muito útil quando se deseja que durante a execução do Protheus num determinado momento, se deseje verificar a senha de um administrador ou gerente, para liberar uma rotina. Esta verifica se uma senha (informada num campo, por exemplo) está cadastrada no arquivo de senhas do Protheus. Esta usa as funções PSWORDER, PSWSEEK e PSWRET : static function SENHA (cParSenha) aDaduser := {} cOperador := space(15) __cNivel := space(1) if empty(cParSenha) msgalert("Senha nao informada!") return .f. endif psworder(3) if pswseek(cParSenha, .t.) aDaduser := pswret(nil) cOperador := left (aDaduser[1,2],15) __cNivel := substr(aDaduser[3,6],3,3) lRetorno := .t. else msgalert("Senha invalida ou nao informada!") lRetorno := .f. endif return lRetorno

Extenso

1) Função MesExtenso Retorna o nome do mês por extenso. Sintaxe: MesExtenso(nMes) Parâmetros: nMes – Número do mês (1 a 12). Se "nMes" não for informado, é assumido o mês da data base do sistema. Esta variável também pode ser caracter ("1" ou "2") ou do tipo data. Retorna: cNome – Nome do mês por extenso. Exemplo: msgalert ("Volta Redonda, " + strzero(day(dDataBase),2) +" de " + mesextenso(dDataBase) +" de "+ strzero(year(dDataBase),4)) 2) Função Extenso Gera o extenso de um valor numérico. Esta função retorna um valor, dinheiro ou quantidade, por extenso. Sintaxe: Extenso(nValor, lQtd, nMoeda) Parametros: nValor – Valor a ser gerado o extenso. lQtd – Verdadeiro (.T.) indica que o valor representa uma quantidade.Falso (.F.) indica que o valor representa dinheiro. Se não for especificado, o default é falso (.F.). nMoeda - Qual moeda do sistema deve ser o extenso. Retorna: cValor – Retorna o valor p...

Criando arquivos de trabalho temporários

Função CriaTrab Usada para cria arquivos de trabalho. Caso lDbf = .T., a função criará um arquivo DBF com o nome e a estrutura definida em aArray. Caso lDbf = .F., a função não criará arquivo de nenhum tipo, apenas fornecerá um nome válido. Sintaxe: CriaTrab (aArray, lDbf) Parâmetros: aArray – Array multidimensional contendo os campos a criar {Nome, Tipo, Tamanho, Decimal} lDbf – Determina se o arquivo de trabalho deve ser criado (.T.) ou não (.F.) Retorna: ExpC1 – Nome do Arquivo gerado pela função. Exemplo: aRBSFest := {{"COD" , "C", 6, 0}, {"NOME", "C", 50, 0}} cRBSFtrb := criatrab(aRBSFest, .t.) dbusearea(.t., , cRBSFtrb, "ARQRBSF", .f.) cRBSFchv := "COD" index on &cRBSFchv to &cRBSFtrb

Gerando números aleatórios

Função Aleatorio Gera um número aleatório de acordo com a semente passada. Retorna um número aleatório menor ou igual ao primeiro parâmetro informado, usando como semente o segundo parâmetro. É recomendado que esta semente seja sempre o último número aleatório gerado por esta função. Sintaxe: Aleatorio(nMax, nSeed) Parâmetros nMax – Número máximo para a geração do número aleatório nSeed – Semente para a geração do número aleatório Retorna nRet – Número aleatório retornado Exemplo: nSeed := 0 For i := 1 to 100 nSeed := aleatorio(100,nSeed) ? str(i,3) + " numero aleatorio gerado: " + str(nSeed,3) Next i