Perguntas – Função PutSX1

Eu sei que essa todos sabem e, além disso, ouvi dizer que será continuada. Não sei se é boato. Mas por enquanto ainda funciona no Protheus 12. Então vou deixar registrado aqui esse exemplo para consulta de referência com campos Data De, Data Até, Código de Produto e uma Combobox.

// Função para validar se a pergunta existe, caso contrario o sistema irá cria-lá
*****************************************
Static Function fPergunta(cPerg)
*****************************************

//PutSx1(cGrupo,cOrdem,cPergunt         ,cPerSpa,cPerEng,cVar     ,cTipo,nTamanho,nDecimal,nPresel,cGSC,cValid    ,cF3  ,cGrpSxg    ,cPyme,cVar01    ,cDef01      ,cDefSpa1,cDefEng1,cCnt01,cDef02     ,cDefSpa2,cDefEng2,cDef03      ,cDefSpa3    ,cDefEng3    ,cDef04   ,cDefSpa4,cDefEng4,cDef05,cDefSpa5,cDefEng5,aHelpPor,aHelpEng,aHelpSpa,cHelp)
  PutSx1(cPerg ,"01"  ,"Data Inicial  ?",""     ,""     ,"mv_ch1" ,"D"  ,08      ,00      ,0      ,"G" ,""        ,""   ,""         ,""   ,"mv_par01",""          ,""      ,""      ,""    ,""         ,""      ,""      ,""          ,""          ,""          ,""       ,""      ,""      ,""    ,""      ,""      ,""      ,""      ,""      ,"")
  PutSx1(cPerg ,"02"  ,"Data Final    ?",""     ,""     ,"mv_ch2" ,"D"  ,08      ,00      ,0      ,"G" ,"NaoVazio",""   ,""         ,""   ,"mv_par02",""          ,""      ,""      ,""    ,""         ,""      ,""      ,""          ,""          ,""          ,""       ,""      ,""      ,""    ,""      ,""      ,""      ,""      ,""      ,"")
  PutSx1(cPerg ,"03"  ,"Produto	      ?",""     ,""     ,"mv_ch3" ,"D"  ,08      ,00      ,0      ,"G" ,"NaoVazio","SB1",""         ,""   ,"mv_par03",""          ,""      ,""      ,""    ,""         ,""      ,""      ,""          ,""          ,""          ,""       ,""      ,""      ,""    ,""      ,""      ,""      ,""      ,""      ,"")
  PutSx1(cPerg ,"04"  ,"Bloqueados    ?",""     ,""     ,"mv_ch4" ,"N"  ,01      ,00      ,0      ,"C" ,""        ,""   ,""         ,""   ,"mv_par04","Todos"     ,"Todos" ,"Todos" ,""    ,"Ativos"   ,"Ativos","Ativos","Bloqueados","Bloqueados","Bloqueados",""       ,""      ,""      ,""    ,""      ,""      ,""      ,""      ,""      ,"")

Return
Anúncios

TDS, AutoComplete e Perfomance

Pessoal,

Não sei vocês, mas o AutoComplete do TDS está me deixando louco. Toda hora o TDS fica lento e/ou trava e finalmente descobri que o vilão era realmente o AutoComplete que fica olhando no RPO todas as funções compiladas.

Olha, é um recurso muito legal, mas pra mim não tá dando não rsrs

Então segue dica rápida pra desabilitar, caso você também esteja tendo problemas.

No TDS acesse Janela / Preferências depois em Developer Studio na barra lateral e enfim AutoComplete. Pronto, desabilite e perceba se vai melhorar pra você também.

TDS-autocomplete

Forte abraço e até a próxima dica 😉

Atualizações Protheus 12

Fala pessoal. Eu estava enfrentando muitos problemas com a quantidade gigantesca de patches disponíveis desde o último RPO do P12, seja 12.1.7 ou 12.1.14. Para aplicar é impraticável, na 12.1.7 são mais de 2000 patchs desde 01/08/2016 (último RPO disponível).

Outro problema sério que ocorre é que quando filtramos os patchs de programa por banco de dados/idioma (ex. Top Connect Português), vêm um número muito pequeno de patchs. E quando filtramos apenas o release sem distinção de banco de dados e idioma aparecem milhares. Dentro delas, após descompactar, verificamos que todas as variações de PTM estão lá dentro (TTTP, TTTS, TTTE, TTDP, TTDS, etc. etc.).

Então o filtro está “escondendo” muita coisa. Por isso já faz um bom tempo que recomendo não filtrar por banco dados e idioma. Isso realmente está um pouco confuso. Acho que o portal pode estar sofrendo uma manutenção grande nos últimos meses.

Mas tenho uma boa notícia. Agora a TOTVS criou uma nova categoria chamada “Patches Acumulados” que salvou a pátria! Esses acumulados já existiam, mas se perdiam entre tantos patches na lista.

Cursor_e_TOTVS_S_A_-_Downloads_e_Atualizações

 

Enfim, agora não precisamos aplicar os inúmeros patches. Essa categoria nova praticamente substitui a “Patch de Programa”. Mas não totalmente, porque a categoria “Patch de Programa” ainda continuará servindo para baixarmos patches recentes que ainda não saíram em um acumulado ou então alguma bem específica pra atender a uma demanda num ambiente que ainda não está pronto pra ser totalmente atualizado.

Bom, essa informação não é oficial. Estou compartilhando com vocês a minha experiência nos últimos meses, e essa novidade que surgiu semana passada que vai ajudar bastante nas atualizações e migrações.

Forte abraço e até a próxima dica 😉

Codificação de arquivos do TDS no Mac

Pessoal, continuando com a série sobre Totvs Developer Studio e Protheus no Mac, venho ensina-los a configurar corretamente o TDS para que salve arquivos no formato Latin1 (ou ISO-8859-1; 100% compatível com Windows) e também quebras de linha do tipo Windows (CR+LF) para que tenhamos total compatibilidade nos projetos que, sabemos, são muito mais acessados via Windows do que Mac.

8859-03O Mac identifica e lê corretamente todos os formatos e codificações de forma nativa, utilizando a UTF-8 como padrão para gravação (esse padrão também é usado por todos os sistema operacionais do mercado, exceto o Windows).

No Windows, frequentemente encontramos problemas com quebras de linha e caracteres especiais quando estes foram criados por outros sistemas operacionais. Infelizmente é assim desde as primeiras versões, e no Windows 10 não está sendo diferente.

Enfim, vamos ao que interessa. Abra seu TDS no MAC e siga as instruções abaixo:

1) Acesse o menu do aplicativo, em seguida “Preferências…”

captura-de-tela-2017-03-02-as-11-43-23

2) Expanda o item “Gerais” e clique em “Espaço de Trabalho” sem expandi-lo.

Preferências.png

4) Altere “Codificação de Arquivo de Texto” e “Novo delimitador de linha do arquivo de texto”conforme a imagem acima. Assim estamos padronizando o TDS para gravar em Latin1 com quebras de linha CRLF (padrões no Windows).

Problema resolvido 😉 Forte abraço!

Codificação de arquivo na compilação usando TDS no Mac

apple-logo_318-40184Amigos. Recentemente migrei meu TDS para um macOS e estou me adaptando bem.

Contudo, existem alguns pulos de gato para acelerar a sua adaptação.

Vou te passar todos que aprendi. Assim você levará menos tempo que eu para solucionar os problemas de compatibilidade.

Um dos problemas que podem ocorrer com você ao compilar um fonte, pode ser que o Developer Studio interrompa o procedimento e apresente a seguinte mensagem de erro:

Input Length = 1

Esse erro ocorre quando caracteres especiais do arquivo editado não estão sendo devidamente convertidos para a codificação correta durante a compilação. Já percebi que nem sempre esse erro ocorre, e também não identifiquei um padrão do erro pois já ocorreu comigo tanto em arquivos UFT-8 quanto em Latin1. Contudo, faça a configuração abaixo pra se ver totalmente livre disso.

  1. Acesse a pasta da instalação do TDS
  2. Clique com o botão direito em “developerStudio.app” (pode ser que esteja sem a extensão dependendo da configuração do seu macOS).
  3. Selecione a opção “Mostrar Conteúdo do Pacote”.
  4. Entre em “Contents”, em seguida “macOS”.
  5. Edite o arquivo “developerStudio.ini” e inclua ao final do arquivo a seguinte linha:
-Dfile.encoding=CP1252

Pronto. Feche seu TDS e abra novamente. Problema resolvido.

Vou postar uma série de dicas sobre TDS de modo geral e TDS no Mac. Até breve 😉

Dividir licenças entre DBAccess

O ambiente ideal para testes na empresa deve ser totalmente apartado, inclusive com DBAccess próprio. Para apontar dois DBAccess para um mesmo License Server é preciso definir quantas licenças cada um irá consumir pois, senão, o primeiro que se conectar ganha todas e o outro fica apenas com as 2 de demonstração. Isso é bem ruim quando o primeiro a se conectar é o de testes, ficamos sem licenças suficientes para a produção.

A solução é bem simples. Após instalar e configurar os dois DBAccess, faça a divisão através da cláusula LicenseLimit no DBAccess.ini. Os dois DBAccess devem ter essa configuração, senão não adianta.

Digamos que você tenha 50 licenças Top Connect, veja o exemplo de configuração abaixo para que reservemos 15 licenças para teste e o restante (35 licenças) para a produção.

DBAccess de Produção:

[General]
LicenseServer=10.20.20.28
LicensePort=5555
ByYouProc=0
...
LicenseLimit=35 <-- Olha ela aqui

DBAccess de Teste:

[General]
LicenseServer=10.20.20.28
LicensePort=5555
ByYouProc=0
...
LicenseLimit=15 <-- Olha ela aqui

IMPORTANTE: após configurar, desligue os dois DBAccess e inicie-os novamente.

Semáforo no License Server

p_semaforo-repetidor-14Rotinas que utilizam semáforo, como por exemplo, as da contabilidade. Internamente fazem uso das funções LockByName e UnlockByName já explicadas aqui neste blog.

De um tempo pra cá, essas funções, por padrão, passaram a controlar o semáforo através do License Server.

Mas quando sua base de testes e sua base de produção utilizam o mesmo License Server (o que acontece em quase todo lugar), um processamento num ambiente acaba travando o outro ambiente via semáforo.

Para solucionar esse problema inclua a cláusula SpecialKey no ambiente do AppServer.ini do Protheus de testes. Segue um exemplo:

[TESTE]
SourcePath=D:\TOTVS12Teste\Protheus\apo
RootPath=D:\TOTVS12Teste\Protheus_Data
StartPath=\system\
x2_path=
RpoDb=Top
RpoLanguage=portuguese
RpoVersion=120
LocalFiles=CTREE
Trace=0
localdbextension=.dtc
PictFormat=DEFAULT
DateFormat=DEFAULT
RegionalLanguage=BRA
TopMemoMega=1
HelpServer=192.168.10.247:8079
SpecialKey=BaseDeTestes <--- Olha ela aí

Pictures (máscaras) de campos

As máscaras começam sempre com @

Use @R para gravar apenas números (excluir caracteres ex. ponto, vírgula, barras) no banco.

Exemplo para um campo de CPF:

@R 999.999.999-99 // Onde 9 significa qualquer caractere numérico.

Segue a tabela com todos os parâmetros possíveis (retirada do TDN):

Caractere Descrição

A

Permite somente caracteres  alfa.

N

Permite somente caracteres  alfa e número.

X

Permite qualquer caractere

9

Permite dígitos de qualquer tipo incluído sinal

#

Permite dígitos, sinais e espaços para qualquer tipo de dado

L

Permite apenas Y,N, T e F

Y

Permite apenas Y,N

!

Converte caracteres alfa em maiúscula

$

Exibe o sinal de dólar

.

Exibe um ponto decimal

,

Exibe uma virgula

R

Insere caracteres  mais não salva no campo de dado.

Para campos numéricos que contenham decimal, é obrigatório o uso do @E seguido da máscara com pontos e vírgulas invertidos (padrão americano), exemplo:

@E 99,999,999.99 // os pontos e as vírgulas serão invertidos na visualização

Os separadores de milhar são opcionais. E lembre-se de casar o número de caracteres numéricos da máscara com o tamanho real do campo quando estiver criando ou alterando no configurador.

 

Informações retiradas do TDN: https://goo.gl/EPs2Ro