Pular para o conteúdo principal

Postagens

Mostrando postagens de novembro, 2008

Postagem em destaque

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu

Protheus :: Estudo de Caso I (Threads)

No artigo anterior: Protheus :: Variáveis Globais, Threads e outros bichos fiz referência à função StartJob(). É essa função que nos possibilita criar Threads no Protheus. Seus parâmetros são: cFunction -> Function ou Procedure a ser executada; cEnvironment -> Ambiente (configurado no .ini do server Protheus) que será utilizado para a execução da Function ou Procedure; lWait -> Se deverá aguardar ou não o retorno da Thread . True (.T.) faz com que StartJob desvie as instruções para a Function que está sendo passada como parâmetro e aguarde a Finalização da Thread . False (.F.) faz com que uma nova Thread seja criada, com a chamada à função ou Procedimento, mas não agurada o seu retorno. Os demais correspontem a lista de parâmetros a serem enviados para a Função ou Procedimento a ser executado. No nosso Estudo de Caso de hoje, mostrarei como importar tabelas usando várias Threads . O código surgiu de uma necessidade de transferir dados que estavam armazenados em Oracle

Protheus :: Variáveis Globais, Threads e outros bichos

Falarei hoje sobre Variáveis Globais (Global Variables) e Threads. Usarei como primeiro exemplo o programa u_sudoku.prg depois escreverei dois estudos de caso. Conhecemos as variáveis de escopo Public, Private, Static e Local. As variáveis Public e Private podem ser declaradas em qualquer parte do programa. As variáveis Static podem ser externas ou internas. Externas, quando declaradas fora de qualquer Function ou Procedure e no cabeçalho do programa em que estão sendo declaradas. E, internas, quando atreladas à uma Procedure ou Function e logo após a declaração das variáveis de escopo Local. Já as variáveis de escopo Local  apenas depois da declaração da Procedure ou Function e antes de qualquer procedimento. As variáveis Private tem um tratamento especial, elas podem ser declaradas de três formas: Explicitamente: Private nPrivateVar Implicitamente, atribuindo-se um valor a uma variável não declarada anteriormente, como por exemplo: IF ( Type("nPrivateNaoDeclarada") == "

Protheus IDE:: Compilação Condicional

Conforme prometi anteriormente, começarei a escrever à respeito de detalhes interessantes sobre o Protheus e que muita gente desconhece. Utilizarei como exemplo, desse e dos próximos artigos, o código fonte do game sudoku (outros, se necessário para o bom entendimento, poderão ser disponibilizados). Hoje falarei sobre a compilação condicional no Protheus IDE e, de lambuja , mostrarei como se faz para adicionar a opção de "Compilação de Versão" ao " Totvs Development Studio " (nome bonitinho que inventaram na versão 10 para o nosso conhecidíssimo IDE ). Vamos ao que interessa. Como a maioria dos bons compiladores, o Protheus IDE possui o recurso de "Compilação Condicional" que nada mais é do que " diretivas /parâmetros" que são passadas ao pré-processador (sim, o Protheus tem um pré-processador) de forma a verificar se um determinado trecho do código irá fazer parte ou não, da compilação. As diretivas de compilação condicional são

Sudoku :: Tutorial

A idéia de escrever esse "Tutorial" do Sudoku surgiu assim que resolvi publicar algumas dicas sobre o sistema Protheus da Totvs / Microsiga .   Considerando que a uns 3 anos atrás escrevi, usando Advpl ( Acrônimo de Advanced Protheus Language ), uma versão do "game" Sudoku , esse breve tutorial servirá como referência do programa que disponibilizarei para " download ".   Não quero aqui esgotar o assunto sobre o tema pois existem vários tutoriais disponíveis na web, mais interessantes e muito mais bem escritos, bastando digitar Sudoku no google que +ou- 53.600.000 de resultados aparecerão.   A idéia base é utilizar este como trampolim para os próximos artigos uma vez que o código fonte do sudoku possui várias características interessantes que são merecedoras de um novo artigo, por exemplo: Compilação Condicional, Threads, Variáveis Globais dentre outras. Vamos ao Tutorial. Para joga-lo faz-se necessário ter o protheus , versão 10 ou super

Protheus :: Desvendando o sigapss.spf III

Este é o último artigo da série "Protheus :: Desvendando o sigapss.spf". Antes, vale lembrar que os programas dos exemplos anteriores foram atualizados e recomendo sejam baixados novamente. Os artigos anteriores são: "Protheus :: Desvendando o sigapss.spf" e "Protheus :: Desvendando o sigapss.spf II" Neste último artigo vamos falar sobre como salvar e restaurar as informações dos usuários em/de disco. Isso pode ser útil se, ao invés de pegar um usuário base para a inclusão de novos usuários, desejar ter um modelo base salvo em disco. O Programa do primeiro artigo poderá ser modificado para usar as funções disponíveis nesse novo exemplo para a inclusão de usuários através de "User Function". Vamos ao Código: Salvando as Informações de usuário em Disco (clique na imagem para ampliá-la) Restaurando as Informações de usuário do Disco (clique na imagem para ampliá-la) Função para Salvar Informações de Array em Disco (clique na imagem para ampliá-la) F

Protheus :: Desvendando o sigapss.spf II

No artigo anterior vimos como incluir informações de usuário através da função spf_Insert(). Agora usaremos a função spf_Update() para efetuar alterações nas informações de um usuário previamente cadastrado. Esse artigo vai ser um pouco mais reduzido uma vez que informações complementares poderão ser obtidas no artigo anterior: leia-me Então vamos ao que interessa. Nesse exemplo iremos alterar algumas informações do usuário, sendo elas: A senha do usuário O Nome Completo do usuário O Departamento do usuário O Cargo do usuário O Endereço de e-mail do usuário O Vínculo Funcional do usuário O Diretório para gravação dos relatórios do usuário Mas lembrando que qualquer informação poderá ser alterada, bastando, para isso, mapeá-la. Eis o código: Definindo constantes com o Mapeamento das Informações do usuário (clique na imagem para ampliá-la) Alterando informações do usuário no sigapss.spf (clique na imagem para ampliá-la) Lembrando que para utilizar o código de exemplo faz-se necessár

Protheus :: Desvendando o sigapss.spf

Atendendo a uma reivindicação antiga, começarei a postar neste blog algumas dicas à respeito dos segredos do Protheus. E o primeiro artigo não poderia ser outro, senão sobre o misterioso sigapss.spf ( o arquivo de senhas do protheus ). O sigapss.spf é a tabela que armazena os usuários do protheus e suas configurações. Não é um a tabela comum e, em função dessa característica, não pode ser aberta com a função dbUseArea(). Ela é um ctree SuperFile e, para que seja possível manipula-la ( incluir, excluir, alterar ou pesquisar registros ) faz-se necessário utilizar funções específicas para esse fim. As funções a serem utilizadas são: Internal Functions (Funcões da API ): SPF_CanOpen(cSPFFile)->0||-1 SPF_Close(cSPFFile) SPF_CopyTo(cSPFSource,cSPFTarget) SPF_Delete(cSPFFile,nSPFRec) SPF_GetFields(cSPFFile,SPFRec,@SPFId,@cSPFName,@cSPFPwd,@SPFDet)->0||-1 SPF_GoTop(cPswFile,nSPFOrder) SPF_Insert(cSPFFile,cSPFId,cSPFuser,cSPFPassword,cSpFDet) SPF_RecCount(cSPFFile,nSPFOrder) SPF_Seek(cSPF

Warren Buffet

"Eu lhe direi como ficar rico. Feche as portas. Tenha medo quando os outros são gananciosos. Seja ganancioso quando os outros estão com medo." "O pessimismo é a causa mais comum de preços baixos. Queremos fazer negócios num ambiente assim não porque gostamos do pessimismo, mas porque gostamos dos preços gerados pelo pessimismo. O otimismo é o verdadeiro inimigo do comprador racional"