sexta-feira, 6 de agosto de 2010

Dicas de Javascript

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

quinta-feira, 29 de julho de 2010

Dicas de JQuery

Diversos demos utilizando JQuery
http://interface.eyecon.ro/demos/

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.

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

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

    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)...

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.

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.

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

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.

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.

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.

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

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.

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.

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

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()
...

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

- 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