Pular para o conteúdo principal

Postagens

Mostrando postagens de maio, 2009

SQL para Listar os campos das tabelas

Usando SQL para listar os campos das tabelas desejadas: Este script é prático caso você tenha necessidade de listar campos (e outras propriedades) de uma ou mais tabelas do Protheus.  Neste exemplo o script mostra os campos da SA1010: SELECT TABELAS.NAME, COLUNAS.NAME AS COLUNA, TIPOS.NAME AS TIPO, COLUNAS. LENGTH AS TAMANHO, COLUNAS.ISNULLABLE AS EH_NULO FROM sysobjects AS TABELAS , syscolumns AS COLUNAS , systypes AS TIPOS WHERE -- JOINS TABELAS.ID = COLUNAS.ID AND COLUNAS.USERTYPE = TIPOS.USERTYPE AND TABELAS.NAME = 'SA1010' •  Veja também: Usando ADVPL com SQL

Variáveis públicas do Protheus

Variáveis Públicas Disponíveis no Protheus: Nome Tipo Tamanho Descrição aEmpresas (A) Array contendo tantos elementos quanto forem as empresas e filiais cadastradas no sistema sendo que cada elemento se encontra no formato “EEFF” (Empresa + Filial) Ex.: “5501”. cAcesso (C, 128) Permissões de Acesso do Usuário. cEmpAnt (C, 2) Número da Empresa que está em uso no momento. Ex.: "55". cModulo (C, 3) Sigla do Módulo que está em uso no momento. Ex.: "EST" para o Módulo de Estoque. cNivel (N, 1) Nível de Acesso do Usuário podendo variar de 0 a 9 sendo que 9 indica um Administrador. cNumEmp (C, 4) Número da Empresa + Filial que está em uso no momento. Ex.: "9901". cSenha (C, 6) Senha do Usuário. cUserName (C, 15) Nome do Usuário sem brancos a direita. cUsuario (C, 533) Informações do usuário:de 001 a 006 – Senha do Usuário (6 dígitos)de 007 a 021 – Nome do Usuário (15 dígitos)de 022 a 533 – Permissões de Acesso (512 dígitos) dDataBa

Criando arquivos Texto no Protheus

Um pequeno fonte para servir de referência para quando você precisar criar arquivos texto usando ADVPL:  aLinha := {} aadd(aLinha, "Primeira linha do arquivo" ) aadd(aLinha, "Segunda linha do arquivo" ) aadd(aLinha, "Terceira linha do arquivo" ) nArquivo := fcreate( "\temp\ARQUIVO.TXT" , FC_NORMAL) if ferror() # 0    msgalert ( "ERRO AO CRIAR O ARQUIVO, ERRO: " + str ( ferror ()))    lFalha := .t. else    for nLinha := 1 to len(aLinha)        fwrite(nArquivo, aLinha[nLinha] + chr(13) + chr(10))         if ferror() # 0           msgalert ("ERRO GRAVANDO ARQUIVO, ERRO: " + str(ferror ()))           lFalha := .t.         endif    next endif fclose(nArquivo) • E Lembre-se de incluir no topo de seu fonte: #Include 'FILEIO.CH' • Observação: Valor Fileio.ch Atributo Descrição 0 FC_NORMAL Normal Permite a leitura e a gravação do arquivo

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

Usando ADVPL com SQL

Segue uma das maneiras de usar ADVPL com SQL : user function mostrasql    oRBSFFont := tfont():new( "lucida console" ,, -10, .t.)    cQuery := "SELECT B1_COD, B1_DESC FROM SB1010 WHERE D_E_L_E_T_=''"    cQuery := changequery(cQuery)    dbusearea(.t., "TOPCONN" , tcgenqry(,,cQuery), "TMP" , .f., .t.)    cProduto := ""    do while ! eof ()       cProduto := cProduto + (TMP->B1_COD +  " " + B1_DESC + chr(10))       dbskip()    enddo    dbclosearea()    @ 0, 0 to 420, 550 dialog odJanela title "RESULTADO"    oRBSFMemo := tmultiget():new(92, 5,{uif( pcount ()>0, cProduto:=u, cProduto)}, odJanela, 265, 100, oRBSFFont,,,,,.t.,,,,,,.t.)    @ 195, 241 bmpbutton type 1 action close(odJanela) activate dialog odJanela centered return nil •  Veja também: Campos memo Protheus com ASP.

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

Mudando as Cores de Textos em Caixas de Diálogo

Programa muito útil quando se deseja mudar cores num dialog: user function dialogovtc  local oTitulo1, oArial18 := tfont():new( "arial" ,,18, .t., .t.),;  @ 0,0 to 250,530 dialog oDlgTanq title "TITULO"  aAviso := {}  aadd(aAviso,{ 2,8, "MENSAGEM 1" , 0, 0, "" , 155 }) // 155 codigo de cor  aadd(aAviso,{30,8, "MENSAGEM 2" , 0, 0, "" , 8388608}) // 8388608 codigo de cor  OTitulo1 := tsay():new(aAviso[1,1],aAviso[1,2],{aAviso[1,3]},,,oArial18,,,,.t.,  aAviso[1,7])  OTitulo1 := tsay():new(aAviso[2,1],aAviso[2,2],{aAviso[2,3] },,,oArial18,,,,.t.,  aAviso[2, 7])  @ 108, 195 bmpbutton type 2 action fecha() activate dialog oDlgTanq centered return nil