Sites com dicas diversas inclusive sobre Javascript
http://www.mspc.eng.br/mapa.shtml
Validação de formulários HTML com JavaScript
http://www.mhavila.com.br/topicos/web/valform.html
Neste blog teremos dicas do universo Totvs relacionado mais especificamente ao Protheus e sua linguagem proprietária o ADVPL. Também abordarei ferramentas de apoio para o desenvolvedor para facilitar o seu dia a dia. Esse blog será voltado a apoiar quem esteja ingressando nesta carreira de desenvolvimento em ADVPL.
sexta-feira, 6 de agosto de 2010
quinta-feira, 29 de julho de 2010
quarta-feira, 7 de julho de 2010
Criando módulos do menu Protheus
A Totvs disponibiliza até 3 possíbilidades de criar novos módulos e para tanto vc deve criar 3 funções conforme abaixo.
O retorno será o nome do módulo que será gerado.
User function EspNome()
Return " Módulo Especifíco 1"
User function Esp1Nome()
Return " Módulo Especifíco 2"
User function Esp2Nome()
Return " Módulo Especifíco 3"
O retorno será o nome do módulo que será gerado.
terça-feira, 22 de junho de 2010
Cursos férias da USP
Sites que disponibilizam cursos de férias bem mais acessíveis ao público.
http://www.ime.usp.br/~imejr/cursos.php
-Inglês, Espanhol, C# e ASP.NET
http://www.fflch.usp.br/sce/
- Línguas entre outros
http://www.ime.usp.br/~imejr/cursos.php
-Inglês, Espanhol, C# e ASP.NET
http://www.fflch.usp.br/sce/
- Línguas entre outros
quarta-feira, 9 de junho de 2010
Localizando um caracter dentro de uma string
Um modo fácil de encontrar um caracter dentro de uma string é executar a validação abaixo:
cDate := '05-2010'
If '/' $ cDate
Alert('Falso')
Else If '-' $ cDate
Alert('Verdadeiro')
EndIf
segunda-feira, 7 de junho de 2010
Utilizando condições no Oracle e Mysql
Oracle 9i, Oracle 10g, Oracle 11g
No oracle não utilizamos a condicional "IF", no lugar deste devemos utilizar:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
Vamos aos exemplos
ou
Já no MYSQL poderíamos exemplicar da seguinte maneira
No oracle não utilizamos a condicional "IF", no lugar deste devemos utilizar:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
Vamos aos exemplos
SELECT CASE F4_INCSOL
WHEN 'S' THEN SUM(d1.D1_ICMSRET)
ELSE 0
END
FROM SD1060 d1
INNER JOIN SF4
ON f4.F4_CODIGO = d1.D1_TES (cont)...
ou
SELECT CASE
WHEN F4_INCSOL = 'S' THEN SUM(d1.D1_ICMSRET)
ELSE 0
END
FROM SD1060 d1
INNER JOIN SF4
ON f4.F4_CODIGO = d1.D1_TES (cont)...
Já no MYSQL poderíamos exemplicar da seguinte maneira
SELECT IF(F4_INCSOL = 'S', SUM(d1.D1_ICMSRET), 0)
FROM SD1060 d1
INNER JOIN SF4
ON f4.F4_CODIGO = d1.D1_TES (cont)...
terça-feira, 18 de maio de 2010
quinta-feira, 13 de maio de 2010
Importação de tabelas Excel para DBF
Em mais uma postagem sobre dicas "vivendo e aprendendo ADVPL" hoje falarei sobre importação de tabelas em Excel para DBF
Recursos utilizados:- Protheus 10
- Microsoft Office Excel 2003
Vamos iniciar montando uma tabela qualquer em excel para podermos importa-la para DBF.
Selecione os itens que deseja importar, porém se vc esqueceu de selecionar e importar inteiro o DBF conterá todas as linhas em branco que tiver no Excel e isso te complicará no indexamento do arquivo.
Ao final do post farei explicarei sobre como apagar os registros em branco.
Salvando a planilha excel no formato .dbf
Utilize o Salva Como do Excel 2003 e na opção "Salvar como tipo:" selecione a opção:
DBF 4(dBASE IV)(*.dbf)
Salve o arquivo direto na estrutura de pastas do Protheus. Sugiro salvar na pasta data para que possamos abri-lo pelo APSDU.
A primeira mensagem se refere a não termos removido as abas 2 e 3 do excel, se as mesmas foram removidas só a segunda mensagem aparece, para este caso basta selecionar OK e depois Sim.
Observação pertinente a qual não foi aplicada aqui para gerar justamente esse erro.
Vejam que na próxima imagem no campo Cidade Porto Alegr e Florianopol estão incorretos pois na importação o tamanho do campo foi criado inferior a necessidade.
Para resolver isto basta abrir a celula no excel no tamanho que vc deseja que o campo tenha. Exemplo: Para um campo de 30 caracteres extenda a célula em largura para:
Largura: 30,00 (215 pixels) .
Criando o índice via APSDU para este novo arquivo:
Índice / Criar / Chave (selecione o construtor de chaves de índice) adicionar a chave desejada e Confirmar
Obs.: O Índice pode ser criado também via código.
Segue um exemplo de código para leitura tanto em .dbf quanto .cdx ou até mesmo em TopConnect
Conforme comentado anteriormente se por acaso for importado a planilha do excel completa e aparecer n linhas em branco, basta apagarmos via APSDU nas opções Utilitário / Delete / Para (construtor de expressão) / Selecione um campo qualquer e insira na expressão como por exemplo:
CLUBE Igual a ' '
Os campos vázios ficaram assinalados em cinza como deletados, depois vá em Utilitário / Pack ou Ctrl + P e clique em Sim.
Todos os campos deletados serão removidos.
Obs.: A diferença entre o Pack e o Zap é que o Pack remove todos os campos deletados e o Zap remove todos os campos.
Espero ter ajudado com este post, abraços a todos.
Recursos utilizados:- Protheus 10
- Microsoft Office Excel 2003
Vamos iniciar montando uma tabela qualquer em excel para podermos importa-la para DBF.
Selecione os itens que deseja importar, porém se vc esqueceu de selecionar e importar inteiro o DBF conterá todas as linhas em branco que tiver no Excel e isso te complicará no indexamento do arquivo.
Ao final do post farei explicarei sobre como apagar os registros em branco.
Salvando a planilha excel no formato .dbf
Utilize o Salva Como do Excel 2003 e na opção "Salvar como tipo:" selecione a opção:
DBF 4(dBASE IV)(*.dbf)
Salve o arquivo direto na estrutura de pastas do Protheus. Sugiro salvar na pasta data para que possamos abri-lo pelo APSDU.
A primeira mensagem se refere a não termos removido as abas 2 e 3 do excel, se as mesmas foram removidas só a segunda mensagem aparece, para este caso basta selecionar OK e depois Sim.
Observação pertinente a qual não foi aplicada aqui para gerar justamente esse erro.
Vejam que na próxima imagem no campo Cidade Porto Alegr e Florianopol estão incorretos pois na importação o tamanho do campo foi criado inferior a necessidade.
Para resolver isto basta abrir a celula no excel no tamanho que vc deseja que o campo tenha. Exemplo: Para um campo de 30 caracteres extenda a célula em largura para:
Largura: 30,00 (215 pixels) .
Criando o índice via APSDU para este novo arquivo:
Índice / Criar / Chave (selecione o construtor de chaves de índice) adicionar a chave desejada e Confirmar
Obs.: O Índice pode ser criado também via código.
Segue um exemplo de código para leitura tanto em .dbf quanto .cdx ou até mesmo em TopConnect
Conforme comentado anteriormente se por acaso for importado a planilha do excel completa e aparecer n linhas em branco, basta apagarmos via APSDU nas opções Utilitário / Delete / Para (construtor de expressão) / Selecione um campo qualquer e insira na expressão como por exemplo:
CLUBE Igual a ' '
Os campos vázios ficaram assinalados em cinza como deletados, depois vá em Utilitário / Pack ou Ctrl + P e clique em Sim.
Todos os campos deletados serão removidos.
Obs.: A diferença entre o Pack e o Zap é que o Pack remove todos os campos deletados e o Zap remove todos os campos.
Espero ter ajudado com este post, abraços a todos.
quinta-feira, 6 de maio de 2010
PLSQuery e TcSqlExec
PLSQuery e TcSqlExec são duas opções, dentre as várias que temos em ADVPL, para executar uma instrução SQL.
A diferença básica entre as duas é a finalidade da instrução.
Exemplo:
Local cAlias := GetNextAlias()
Local cSql
cSql := "select * from SB1"
PLSQuery(cSql, cAlias)
E em cAlias nós temos todos os registros da tabela SB1
Próximo exemplo:
Local cSql
cSql := "create table SB1_BKP as ( select * from SB1)"
TcSqlExec(cSql)
E foi criada uma cópia de backup da tabela SB1.
O código a seguir retona um erro: "Existe um erro na fórmula digitada. TOP Error - 19 - Invalid Select / Query Statement"
Local cAlias := GetNextAlias()
Local cSql
cSql := "create table SB1_BKP as ( select * from SB1)"
PLSQuery(cSql, cAlias)
Enquanto PLSQuery é usado para consultar dados, o TcSqlExec é utilizado pra alterações, seja para alterar o valor de um campo como alterar o nome de tabela ou coluna de uma tabela da base de dados.
A diferença básica entre as duas é a finalidade da instrução.
Exemplo:
Local cAlias := GetNextAlias()
Local cSql
cSql := "select * from SB1"
PLSQuery(cSql, cAlias)
E em cAlias nós temos todos os registros da tabela SB1
Próximo exemplo:
Local cSql
cSql := "create table SB1_BKP as ( select * from SB1)"
TcSqlExec(cSql)
E foi criada uma cópia de backup da tabela SB1.
O código a seguir retona um erro: "Existe um erro na fórmula digitada. TOP Error - 19 - Invalid Select / Query Statement"
Local cAlias := GetNextAlias()
Local cSql
cSql := "create table SB1_BKP as ( select * from SB1)"
PLSQuery(cSql, cAlias)
Enquanto PLSQuery é usado para consultar dados, o TcSqlExec é utilizado pra alterações, seja para alterar o valor de um campo como alterar o nome de tabela ou coluna de uma tabela da base de dados.
Resolvendo problema de impressão devido atualização de Build
Existe um problema de impressão de relatórios no protheus com a nova build, para resolver é necessário colocar as linhas abaixo no totvssmartclient.ini
bin/totsmartclient/totvssmartclient.ini
[CONFIG]
Language=1
BrowserEnabled=0
gdiPrintEnabled=0
quinta-feira, 15 de abril de 2010
Atualizando as empresas cadastradas
Para atulizar as empresas substitua o arquivo SIGAMAT.EMP atualizado na pasta \system\.
Obs. Necessário deletar o arquivo SIGAMAT.IND
Obs. Necessário deletar o arquivo SIGAMAT.IND
sexta-feira, 9 de abril de 2010
Script em MySQl para gerar juros compostos
Script em MySQl para gerar juros compostos
SELECT idPagamentoDet
, idProposta
, nroParcela
, dataPrevistaPagto
, valor
, dataPagamento
, IF(DateDiff(NOW(), dataPrevistaPagto) > 0, DateDiff(NOW(), dataPrevistaPagto), 0) AS DiasAtraso
, IF(DateDiff(NOW(), dataPrevistaPagto) > 0, ROUND(valor * ((taxaJurosNeg/100)+1),2),valor) AS valorTotal
FROM pfiPagamentoDet
WHERE idProposta = 93683
ORDER BY idProposta ASC;
Em PHP o calculo de juros compostos seria assim
$pfiPagamentoDetVO->juros = $pfiPagamentoDetVO->valorParcela * pow(1 + ($pfiPagamentoDetVO->taxaJurosNeg / 100), self::totalMesesEmAtraso($pfiPagamentoDetVO->dataPrevistaPagto, $pfiPagamentoDetVO->dataPagamento));
Somente o juros:
$pfiPagamentoDetVO->juros = ($pfiPagamentoDetVO->valorParcela * pow(1 + ($pfiPagamentoDetVO->taxaJurosNeg / 100), self::totalMesesEmAtraso($pfiPagamentoDetVO->dataPrevistaPagto, $pfiPagamentoDetVO->dataPagamento))) - $pfiPagamentoDetVO->valorParcela;
sábado, 27 de março de 2010
Nomenclaturas do Protheus 10
As principais monenclaturas do Protheus 10 são:
Build - Versão completa do sistema com seus executáveis. O 'Build' pode ser identificado por meio das seguintes opções "Ajuda" + "Sobre", dentro de qualquer módulo do sistema, ou na tela de console do Totvs Application Server.
Repositórios RPO - Arquivos binários compilados, os quais contém instruções de funcionamento, como funções e aplicações de todos os módulos do ERP.
Patch - Arquivos de correção para o 'RPO'. Sua finalidade é a correção do arquivo binário, afim de que não seja necessário atualizar o 'RPO' por completo.
ADVPL - É a linguagem de programação proprietária da Microsiga no que diz respeito a customizações de funções.
Atualização de Build - A atualização de 'Build' consiste em atualizar toas as alterações realizadas dentro da estrutura do Protheus, como por exemplo dll's, executáveis, correções, aplicativos, etc.
É recomendável atualizar à cada 3 meses, período este que a Microsiga custuma disponibilizar em seu FTP, com excessão do Patch que pode ser necessário a qualquer momento.
Build - Versão completa do sistema com seus executáveis. O 'Build' pode ser identificado por meio das seguintes opções "Ajuda" + "Sobre", dentro de qualquer módulo do sistema, ou na tela de console do Totvs Application Server.
Repositórios RPO - Arquivos binários compilados, os quais contém instruções de funcionamento, como funções e aplicações de todos os módulos do ERP.
Patch - Arquivos de correção para o 'RPO'. Sua finalidade é a correção do arquivo binário, afim de que não seja necessário atualizar o 'RPO' por completo.
ADVPL - É a linguagem de programação proprietária da Microsiga no que diz respeito a customizações de funções.
Atualização de Build - A atualização de 'Build' consiste em atualizar toas as alterações realizadas dentro da estrutura do Protheus, como por exemplo dll's, executáveis, correções, aplicativos, etc.
É recomendável atualizar à cada 3 meses, período este que a Microsiga custuma disponibilizar em seu FTP, com excessão do Patch que pode ser necessário a qualquer momento.
Parametros do atalho do Totvs Smart Client
Este parametros servem para configurarmos o Totvs Smart Client em sua inicialização.
- Q(Quiet) Indica que o Totvs Smart Client não deverá mostrar o Splash(imagem de Apresentação) e a tela de identificação de parâmetros iniciais, necessita ser acompanhada da cláusula -P;
- P(Main Program) Identifica o programa(APO) inicial;
- E(Environment) nome da seção do ambiente , no (INI do Server), que será utilizada para definições gerais;
- C(Connection) nome da seção de conexão, que será utilizada, para a conexão ao Totvs Application Server(TotvsAppServer)
- L(Log File) Para não conformidades que ocorram no Totvs Smart Client, antes que esse possa se conectar com o Totvs Application Server, é gerado um arquivo de log , no diretório de execução do Totvs Smart Client.
Este arquivo é gerado com o nome de Totvs Smart Client_
- M(AllowMultiSession) permite múltiplas instâncias cópias do Totvs Smart Client na mesma máquina. No modo default nçao permite multiplas sessões.
Exemplo:
C:PROTHEUS 10\BIN\SMARTCLIENT\TOTVSSMARTCLIENT.EXE -Q -P=Sigacom -E=Environment
Sigacom= Módulo de compras
Environment = Ambiente
segunda-feira, 22 de março de 2010
Lista de tabelas para uso no Protheus
Segue uma breve lista de tabelas que podem ser utilizadas em customizações:
- SZA à SZZ e SZ0 à SZ9
- SZA à SZZ e SZ0 à SZ9
- PAA à PAZ e PA0 à PA9
- PBA à PBZ e PB0 à PB9
- ...
- PZA à PZZ e PZ0 à PZ9
terça-feira, 16 de março de 2010
Atualizando e/ou recuperando o seu Protheus
Atualizando os produtos
Baixe os arquivos atualizados do site Portal do Cliente da Microsiga os arquivos:
Obs. Estes arquivos correspondem a maio/2010, confiram os mais atuais na hora de executar.
- Binário TOTVSTec.zip
- Repositório de Objetos.zip
- TOP Connect 4.zip
- Includes.zip
Entres outras opções disponíveis, estas são as principais para o ambiente de desenvolvimento.
Alterando os DBF
Sempre que substituir os arquivos DBF's se faz necessário deletar os arquivos .cdx, .idx, .ntx e .ind pois os mesmos se referem aos DBF's antigos e então deveram ser refeitos para os novos DBF's.
Vá no DOS e execute o comando
CD C:\Protheus10\Protheus_data\System\
Del *.cdx
Del *.idx
Del *.ntx
Del *.ind
Alterar o sigamat.emp
Ao substituir a pasta system, se faz necessário substituir o arquivo sigamat.emp que consta o registro das empresas cadastradas.
Não esqueça de apagar o arquivo sigamat.ind
Vá no DOS e execute o comando
CD C:\Protheus10\Protheus_data\System\
Del sigamat.ind
Obs.: Quando se importa um "sigamat.emp" de um ambiente .dtc e vai usa-lo em um ambiente .dbf mesmo sendo um arquivo do tipo .emp é necessário importa-lo via apsdu e converter o mesmo para .dbf, o processo inverso também é necessário a conversão.
Obs. 2: Ao ser alterado o "sigamat.emp" que possuem as mesmas empresas em ambos, é necessário apagar os arquivos SX4, SXQ e SXV das empresas que estão em ambos "sigamat.emp".
Alterar o sigapss.spf
Este arquivo deve ser copiado manualmente da pasta system, ele esta criptografado e contém o cadasro de usuários do Protheus.
sexta-feira, 12 de março de 2010
ProcessMessages
ProcessMessages é uma função que solicita ao Windows que todas as mensagens pendentes sejam executadas antes que qualquer outra coisa seja feita.
Exemplo:
@ 000,000 Button "Processar" Size 40,10 Action (CursorWait(), Processo(), CursorArrow())
A intenção é de mudar o ícone do cursor para o ícone de espera antes que um processo longo seja executado, informando ao usuário que espere. Ao fim da execução retornamos o ícone do cursor ao normal.
Neste caso se o "Processo()" for muito pesado, pode ser que ele "domine" o processador antes que "CursorWait()" seja executado. Desse modo, o processo é executado sem que a solicitação de mudança do cursor seja processada. Ao fim da execução, a solicitação de mudança do cursor é feita, e imediatamente após, "CursorArrow()" é executado, dando a impressão de que o ícone do cursor nunca tenha mudado.
Para solucionar esse problema, pedimos ao Windows que todas as mensagens sejam executadas antes que "Processo()" seja executado:
@ 000,000 Button "Processar" Size 40,10 Action (CursorWait(), ProcessMessages(), Processo(), CursorArrow())
Desse modo asseguramos a mudança do ícone do cursor para o ícone de espera antes que seja executado o "Processo()", garantindo o efeito desejado.
Exemplo:
@ 000,000 Button "Processar" Size 40,10 Action (CursorWait(), Processo(), CursorArrow())
A intenção é de mudar o ícone do cursor para o ícone de espera antes que um processo longo seja executado, informando ao usuário que espere. Ao fim da execução retornamos o ícone do cursor ao normal.
Neste caso se o "Processo()" for muito pesado, pode ser que ele "domine" o processador antes que "CursorWait()" seja executado. Desse modo, o processo é executado sem que a solicitação de mudança do cursor seja processada. Ao fim da execução, a solicitação de mudança do cursor é feita, e imediatamente após, "CursorArrow()" é executado, dando a impressão de que o ícone do cursor nunca tenha mudado.
Para solucionar esse problema, pedimos ao Windows que todas as mensagens sejam executadas antes que "Processo()" seja executado:
@ 000,000 Button "Processar" Size 40,10 Action (CursorWait(), ProcessMessages(), Processo(), CursorArrow())
Desse modo asseguramos a mudança do ícone do cursor para o ícone de espera antes que seja executado o "Processo()", garantindo o efeito desejado.
quinta-feira, 11 de março de 2010
Funcao para trabalhar com campos memo
MSMM - Funcao para trabalhar com campos memo na tabela SYP
Sintaxe:
cMemo := MSMM (cChave,nTam,nLin,cString,nOpc,nTabSize,lWrap,cAlias,cCpochave)
onde:
cMemo......: Conteudo retornado, quando leitura. Se o campo chave nao existir, retorna " ".
cChave.....: Chave de acesso ao SYP. Deve ser informada na alteracao e exclusao.
nTam.......: 'Largura' do campo memo.
nLin.......: Linha do SYP (YP_SEQ) a ser retornada na leitura. Se nao informado, retorna todas.
cString....: Conteudo a ser gravado na inclusao ou alteracao.
nOpc.......: 1=gravar (inc/alt); 2=excluir; 3=leitura (default).
nTabSize...: Nao usado.
lWrap......: Nao usado.
cAlias.....: Alias do arquivo onde encontra-se o campo chave. Deve ser informado na inclusao e alteracao.
cCpoChave..: Campo pertencente `a tabela cAlias e que vai conter a chave de acesso ao SYP.
Sintaxe:
cMemo := MSMM (cChave,nTam,nLin,cString,nOpc,nTabSize,lWrap,cAlias,cCpochave)
onde:
cMemo......: Conteudo retornado, quando leitura. Se o campo chave nao existir, retorna " ".
cChave.....: Chave de acesso ao SYP. Deve ser informada na alteracao e exclusao.
nTam.......: 'Largura' do campo memo.
nLin.......: Linha do SYP (YP_SEQ) a ser retornada na leitura. Se nao informado, retorna todas.
cString....: Conteudo a ser gravado na inclusao ou alteracao.
nOpc.......: 1=gravar (inc/alt); 2=excluir; 3=leitura (default).
nTabSize...: Nao usado.
lWrap......: Nao usado.
cAlias.....: Alias do arquivo onde encontra-se o campo chave. Deve ser informado na inclusao e alteracao.
cCpoChave..: Campo pertencente `a tabela cAlias e que vai conter a chave de acesso ao SYP.
segunda-feira, 8 de março de 2010
Exemplo barra para carregamento
#include 'protheus.ch'
STATIC lRunning:=.F., lStop:=.F.
User Function 32TMeter()
Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE 'Teste' Pixel
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)};
,100,oDlg,100,16,,.T.) // cria a régua
// botão para ativar andamento da régua
@ 30,10 BUTTON oBtn1 PROMPT 'Run ' OF oDlg PIXEL ACTION RunMeter(oMeter)
@ 50,10 BUTTON oBtn2 PROMPT 'Stop' OF oDlg PIXEL ACTION lStop:=.T.
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
STATIC Function RunMeter(oMeter)
If lRunning
Return
Endif
lRunning:= .T.
oMeter:Set(0)
// inicia a régua
While .T. .and. !lStop
Sleep(1000) // pára 1 segundo
ProcessMessages() // atualiza a pintura da janela, processa mensagens do windows
nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da régua
nCurrent+=10 // atualiza régua
oMeter:Set(nCurrent)
if nCurrent==oMeter:nTotal
Return
endif
Enddo
lRunning:= .F.
lStop:= .F.
Return
Exemplo de List em ADVPL
#include 'protheus.ch'
user function 21TcBrowse()
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
Local aList := {} // Vetor com elementos do Browse
Local nX
// Cria Vetor para teste
for nX := 1 to 100
aListAux := {.T., strzero(nX,10), 'Descrição do Produto '+;
strzero(nX,3), 1000.22+nX}
aadd(aList, aListAux)
next
DEFINE MSDIALOG oDlg FROM 0,0 TO 520,600 PIXEL TITLE 'Exemplo da TCBrowse'
// Cria objeto de fonte que sera usado na Browse
Define Font oFont Name 'Courier New' Size 0, -12
// Cria Browse
oList := TCBrowse():New( 01 , 01, 300, 200,,;
{'','Codigo','Descrição','Valor'},{20,50,50,50},;
oDlg,,,,,{||},,oFont,,,,,.F.,,.T.,,.F.,,, )
// Seta o vetor a ser utilizado
oList:SetArray(aList)
// Monta a linha a ser exibida no Browse
oList:bLine := {||{ If(aList[oList:nAt,01],oOK,oNO),;
aList[oList:nAt,02],;
aList[oList:nAt,03],;
Transform(aList[oList:nAT,04],'@E 99,999,999,999.99') } }
// Evento de DuploClick (troca o valor do primeiro elemento do Vetor)
oList:bLDblClick := {|| aList[oList:nAt][1] :=;
!aList[oList:nAt][1],oList:DrawSelect() }
// Principais commandos
oBtn := TButton():New( 210, 001,'GoUp()' , oDlg,{||oList:GoUp()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 001,'GoDown()', oDlg,{||oList:GoDown()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 001,'GoTop()' , oDlg,{||oList:GoTop()}, ;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 001,'GoBottom()', oDlg,{||oList:GoBottom()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 210, 060, 'nAt (Linha selecionada)' ,;
oDlg,{|| Alert(oList:nAt)},;
90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 060, 'nRowCount (Nr de linhas visiveis)', oDlg,;
{|| Alert(oList:nRowCount()) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oList:nLen) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aList,oList,'@!',3) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return
Exemplo Top Menu com BMP
#include 'protheus.ch'
//Exemplo de BtnBmp
User Function 18TBtnBmp()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. ) // Orig: 25,45
oTBtnBmp1 := TBtnBmp() :NewBar('RPMNEW',,,,'Msg 01',;
{||Alert('TBtnBmp 01')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
oTBtnBmp2 := TBtnBmp() :NewBar('copyuser',,,,'Msg 02',;
{||Alert('TBtnBmp 02')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
Exemplo de Menu
#include 'protheus.ch'
User Function 30TMenu()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMenu := TMenu():New( 0,0,0,0,.F.,'',oDlg,CLR_WHITE,CLR_BLACK)
// Adiciona Item ao Menu Principal
oMenuItem1 := TMenuItem():New2( oMenu:Owner(),'Item 001','Item 001',,,)
oMenu:Add( oMenuItem1 )
// Adiciona sub-Itens
oMenuItem2 := TMenuItem():New2( oMenu:Owner(),'Sub-Item 001',,,{||Alert('TMenuItem')})
oMenuItem3 := TMenuItem():New2( oMenu:Owner(),'Sub-Item 002',,,{||Alert('TMenuItem')})
oMenuItem4 := TMenuItem():New2( oMenu:Owner(),'Sub-Item 003',,,{||u_10BrGet()})
oMenuItem1:Add( oMenuItem2 )
oMenuItem1:Add( oMenuItem3 )
oMenuItem1:Add( oMenuItem4 )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
Exemplo de Menu Bar
#include 'protheus.ch'
User Function 31TMenuBar()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// Monta um Menu Suspenso
TMenuBar := TMenuBar():New(oDlg)
TMenuBar:nClrPane := RGB(183,208,248) // Cor de fundo do Menu
oTMenu1 := TMenu():New(0,0,0,0,.T.,,oDlg)
oTMenu2 := TMenu():New(0,0,0,0,.T.,,oDlg)
TMenuBar:AddItem('Arquivo' , oTMenu1, .T.)
TMenuBar:AddItem('Relatorio', oTMenu2, .T.)
//Cria Itens do Menu
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 01',,,,;
{||Alert('TMenuItem 01')},,'AVGLBPAR1',,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 02',,,,;
{||Alert('TMenuItem 02')},,,,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
segunda-feira, 1 de março de 2010
Link de Sites de Emprego, Consultorias e Empresas que contratam Analistas Microsiga
Sites de emprego para informática
APInfo
Ceviu
Links de consultorias que contratam Analistas Microsiga
Veti
Siga Services
Aliança Results
Akron
OnStart
Proton Consultoria
Agility Solutions
Links de empresas que contratam Analistas Microsiga
CTF
APInfo
Ceviu
Links de consultorias que contratam Analistas Microsiga
Veti
Siga Services
Aliança Results
Akron
OnStart
Proton Consultoria
Agility Solutions
Links de empresas que contratam Analistas Microsiga
CTF
Marcadores:
Link de Consultorias Microsiga,
Sites Emprego
sexta-feira, 26 de fevereiro de 2010
Site para salvar imagens na Web
Se você adora inserir imagens em postagem de serviços como o Orkut porém não tem aquela imagem salva na Internet, então conheça o http://imageshack.us.
Nele é possível executar o upload de uma imagem e ficar com a url que será inserida no Post.
Esse seriço por enquanto é gratuito.
Nele é possível executar o upload de uma imagem e ficar com a url que será inserida no Post.
Esse seriço por enquanto é gratuito.
Site para reduzir URL para inserir no Twitter
Se você é um apaixonado e adora dar várias Tuitadas por dia, então você já se deparou com aquela url enorme mas que você quer deixar com dica para os seus seguidores.
Mas como bem sabemos o Twitter só comporta 140 caracteres e como fazer neste momento? Para isto indico os serviços do http://tinyurl.com que pega a sua url e cria uma bem menor, mas que aponte para o mesmo local, pois eles se utilizam de redirecionamento de links.
Use esse serviço e boa tuitadas mas lembre-se:
Se Tuitar não dirija.
Mas como bem sabemos o Twitter só comporta 140 caracteres e como fazer neste momento? Para isto indico os serviços do http://tinyurl.com que pega a sua url e cria uma bem menor, mas que aponte para o mesmo local, pois eles se utilizam de redirecionamento de links.
Use esse serviço e boa tuitadas mas lembre-se:
Se Tuitar não dirija.
Site para edição de imagens
Se você gosta de manipular imagens mas não possui conhecimento suficiente para usar o Photoshop, Fireworks entre outras boas ferramentas paa este fim, então conheça este site com boas opções de mascáras para você fazer várias fotos bem criativas e se divertir bastante.
http://www.befunky.com
http://www.befunky.com
quinta-feira, 4 de fevereiro de 2010
Exemplo simples de um código de etiqueta para impressora zebra
...
Local nQtdeEtiq
Local cEndereco
Local cCodBar
Local cCodigo
Local cDescricao
Local cPorta := "LPT1:"
MSCBPrinter("ZEBRA",cPorta,,50,.F.,,,,10,)
MSCBCHKStatus(.f.)
MSCBBegin(nQtdeEtiq,4)
MSCBBox(003,003,097,048,003)
MSCBSay(10, 05, cEndereco, "N", "G", "90,50", .F.)
MSCBSayBar(10,18 ,AllTrim(cCodBar),"N","C",10)
MSCBSay(10, 32, cCodigo, "N", "E", "50,20", .F.)
MSCBSay(10, 41, cDescricao, "N", "E", "40,20", .F.)
MSCBEND()
...
Local nQtdeEtiq
Local cEndereco
Local cCodBar
Local cCodigo
Local cDescricao
Local cPorta := "LPT1:"
MSCBPrinter("ZEBRA",cPorta,,50,.F.,,,,10,)
MSCBCHKStatus(.f.)
MSCBBegin(nQtdeEtiq,4)
MSCBBox(003,003,097,048,003)
MSCBSay(10, 05, cEndereco, "N", "G", "90,50", .F.)
MSCBSayBar(10,18 ,AllTrim(cCodBar),"N","C",10)
MSCBSay(10, 32, cCodigo, "N", "E", "50,20", .F.)
MSCBSay(10, 41, cDescricao, "N", "E", "40,20", .F.)
MSCBEND()
...
Tabelas do ADVPL
Lista com as tabelas do ADVPL
SX1 - Perguntas e Respostas
Parametros de filtro tipo: De / Até
SX2 - Mapeamento de arquivos
Cadastro das tabelas
SX3 - Dicionário de dados
Parametros dos campos das telas e tabela (tamanho,tipo,etc)
SX4 - Agenda do Schedule de Processos
SX5 - Tabelas
Cadastro de tabelas fixas tipo: (UF, unid. de medidas, etc)
SX6 - Parametros
Cadastro das parametrizações do sistema
SX7 - Gatilhos
Cadastro dos disparos de eventos entre campos
SX9 - Relacionamento entre arquivos
Cadastro dos domínios e contra-domínios esses relacionamentos são criados independentes do banco
SXA - Pastas cadastrais
Cadastro das pasta que existem nas telas
SXB - Consulta padrão
Lupa de auxilio ao campo
SXC - Controle de usuário
SXD - Controle de schedule de Processos
SXE - Sequência de documentos
Controla o número sequência de uma tabela neste caso o próximo número disponível
SXF - Sequência de documentos (Próximo)
Controla o número sequência de uma tabela neste caso o último número utilizado
SXG - Tamanho padrão para campos
Altera o tamanho de um campo em todas as tabelas em que ele esteja, conforme previamente cadastrado no SX9
SXK - Controle de perguntas (SX1) usuários
Guarda os último parametros utilizado em uma pesquisa
SXM - Configuração do Scheduler
Cadastra as configurações
SXO - Controle de Log's por tabela
SXP - Controle de Log's por tabela
SIX - Índices dos arquivos (1)
SINDEX - Índices dos arquivos (2)
StrZero()
Função StrZero insere 0(zero) na frente de um número e mantém como string
StrZero( [nNumber], [nLength], [nDecimals] )
Parametro
[nNumber] - O número a ser convertido em String.
[nLength] - O tamanho da String contendo tamanho de zeros, casa decimais e ponto decimal.
[nDecimals] - Nro de decimais que retornaram no valor.
Valor Retorno
String.
Exemplo
idJust := 3
cIdJust := StrZero(Val(idJust), 6, 0)
Alert(cIdJust)
Resultado: '000003'
Fazer com que o servidor do Protheus inicialize com o Windows
O comando abaixo faz com que o servidor de Prtheus inicialize com Windows.
Obs.: o caminho abaixo deve ser adequado para o endereço em que se encontra o arquivo "TotvsAppServer.exe" conforme sua instalção.
Comando para inicializar com o Windows
Se desejar remover da inicialização execute o comando para remover da inicialização do Windows
Obs.: o caminho abaixo deve ser adequado para o endereço em que se encontra o arquivo "TotvsAppServer.exe" conforme sua instalção.
Comando para inicializar com o Windows
- Iniciar
- Executar [digite CMD] tecle [Enter]
- Digite o comando (altere o endereço conforme observação acima)
C:\Protheus10\bin\appserver\TotvsAppServer.exe -install
Se desejar remover da inicialização execute o comando para remover da inicialização do Windows
- Iniciar
- Executar [digite CMD] tecle [Enter]
- Digite o comando (altere o endereço conforme observação acima)
C:\Protheus10\bin\appserver\TotvsAppServer.exe -remove
Instalação do SQL Server e config. Top Conect
Em breve postarei manual passo a passo para instalação do SQL Server Express, configuração do Top Conect
Instalação Protheus 10 no Windows
Em breve postarei manual passo a passo para instalação do Photheus 10 no Windows
Assinar:
Postagens (Atom)