Pular para o conteúdo principal

Postagens

Procurando campos nas enormes tabelas do Protheus...

Quando estamos programando, de vez em quando precisamos localizar um campo para saber seu tipo e tamanho e declararmos corretamente variáveis e outros que receberão seus valores. Com a quantidade de campos cada vez maior nas tabelas do Protheus, é necessário usar artifícios para se ter agilidade nesta busca. Segue então, um script que ajuda a localização de um, neste "mar" de campos. Por exemplo, para localizar rapidamente o campo E2_NUM e ver suas propriedades: 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 = 'SE2010' AND COLUNAS.NAME = 'E2_NUM' Obs.: Post complementar à outro feito neste blog: SQL para Listar os campos das tabelas

Mais uma de NFe - Consultando inutilização

Verifique se realmente suas notas fiscais foram inutilizadas consultando-as no link: Consultando inutilização

Portal da NFe. Verificando disponibilidade de serviços

Consultando a disponibilidade de serviços. Durante sua finalização de vendas, caso precise ver a disponibilidade dos serviços de Nota Fiscal eletrônica, consulte pelo link: http://www.nfe.fazenda.gov.br/portal/disponibilidade.aspx

Path Relativo X Absoluto !

Documentando, para quando ainda houver dúvida: Em diversas funções do Protheus, como FCREATE(), temos que mencionar o path alvo. No caso de FCREATE(), o alvo será onde o arquivo será criado. Este path pode ser absoluto ou relativo. Mas qual a diferença? Quando informado um path relativo, sem a unidade de disco (exemplo: "\temp\teste"), o diretório alvo, será o servidor, abaixo do RootPath*. Para apontar para um diretório na máquina cliente (onde o SmartClient está sendo executado), é necessário informar um path absoluto, com unidade de disco (exemplo: "c:\trabalho\teste"). * RoothPath = tag no arquivo appserver.ini, que identifica o diretório raiz do Sistema (ERP), a partir do qual todos os diretórios utilizados pelo Sistema serão criados.

Barras de título ocupando espaço?

Precisando ganhar alguns centímetros de tela? Usando as propriedades WS_VISIBLE e WS_POPUP, neste caso, é possível remover a barra de títulos em janelas. Veja os exemplos: define msdialog oDialog title "Sem barra de titulo" from 0,0 to 800,100 pixel style nOR( WS_VISIBLE, WS_POPUP ) oDialog:lMaximized := .t.   // maximiza janela. * No construtor construtor MsDialog:New, use deste modo: oDialog := msdialog ():new(0,0,800, 1000, "Sem barra de titulo" ,,,,nOr(WS_VISIBLE,WS_POPUP),CLR_BLACK,CLR_WHITE,,,.t.,,,,.t.) oDialog:lMaximized := .t.   // maximiza janela. * No construtor TDialog:New, use deste modo: oDialog := tdialog():New(0,0,800,1000, "Sem barra de titulo" ,,,,nOr(WS_VISIBLE,WS_POPUP),CLR_BLACK,CLR_WHITE,,,.t.,,,,,,.f.) oDialog:lMaximized := .t.   // maximiza janela.

Zeros à esquerda automaticamente

Uma dica simples para que no momento de digitar um código (ex.:000034), você e seus usuários não fiquem contando os zeros à esquerda deste. Configurador Com o pequeno código abaixo (no campo Regra ) num gatilho*, você não terá mais este trabalho. O teste foi feito com o campo RA_REGISTR : Os campos obrigatórios (em azul) devem ser preenchidos. Confirme, saia do Configurador e teste o campo que você configurou o gatilho. Após preencher o campo e clicar TAB (ou ENTER), os zeros à esquerda completam o tamanho do campo : * Se você não sabe onde e como criar gatilhos, acesse o link:   Criando gatilhos no Protheus

Status das tabelas: SPED050 e SPED052

STATUS DA TABELA SPED050: Status NFe (campo STATUS) :  1 = NFe Recebida.  2  =  NFe Assinada.  3  =  NFe com falha no schema XML.  4  =  NFe transmitida.  5  =  NFe com problemas.  6  =  NFe autorizada.  7  =  Cancelamento. Status Cancelamento/inutilização (campo STATUSCANC) :  1  =  NFe Recebida.  2  =  NFe Cancelada.  3  =  NFe com falha de cancelamento/inutilização. Status Mail (campo STATUSMAIL) :  1  =  A transmitir.  2  =  Transmitido.  3  =  Bloqueio de transmissão – cancelamento/inutilização. STATUS DO SPED052:  1  =  Lote transmitido.  2  =  Lote recebido com sucesso.  3  =  Lote com erro.

Cores usadas no Protheus

• Segue uma tabela com as cores mais usadas no Protheus: Preto CLR_BLACK Azul Claro CLR_HBLUE Azul CLR_BLUE Verde Claro CLR_HGREEN Verde CLR_GREEN Ciano CLR_HCYAN Ciano CLR_CYAN Vermelho Claro CLR_HRED Vermellho CLR_RED Magenta Claro CLR_HMAGENTA Magenta CLR_MAGENTA Amarelo CLR_YELLOW Marrom CLR_BROWN Cinza Claro CLR_HGRAY Cinza CLR_GRAY Branco CLR_WHITE • Estas podem ser usadas por exemplo,  numa grid : @ 0, 0 to 300,795 dialog oDlg01 title "Exemplo" @ 1, 1 to 110,400 browse "TABTEMP" fields aCampos object _oBrowseCor // COR DA FONTE _oBrowseCor:obrowse:acolumns[1]:BCLRFORE := {|SETVAL| fTrocaCor(1)} // COR DA LINHA _oBrowseCor:obrowse:acolumns[1]:BCLRBACK := {|SETVAL| fTrocaCor(2)} @ 125, 10 bmpbutton type 02 action close(oDlg01) act...

Carregar suas funções após o login

Precisa carregar uma função logo após o login?  Então a função AfterLogin pode ser o que você precisa. Veja o exemplo: #include "protheus.ch" user function  AfterLogin ()     local cId := ParamIXB [ 1 ] , cNome := ParamIXB [ 2 ]    msgalert ( "Hora que o usuário "  + cId + " - " + alltrim(cNome) + " efetuou login = " + time ()) return nil O exemplo usou somente um msgalert, mas você pode executar suas próprias funções executando as tarefas que deseja executar no sistema, antes de qualquer módulo ser chamado. Bom uso!

Mudar a logo do Protheus

Segue uma dica que a maioria já deve conhecer, mas fica registrado para aqueles que estão iniciando ou ainda não testaram. Para mudar a logo de identidade do cliente, você tem que criar uma imagem PNG (Portable Network Graphics), e disponibilizar no diretório STARTPATH (\system) do Sistema, com a seguinte nomenclatura: LGMID.PNG   - Para logo utilizado por todos os grupo de empresas. LGMID##.PNG - Para logo utilizado para um grupo de empresas específico. No lugar de ##, informe o código do grupo de empresas. Ex .: LGMID01.PNG . Obs.: A dimensão recomendada para a imagem de identidade do cliente é de 110x110 pixels. Detectar idioma Africâner Albanês Alemão Arabe Armênio Azerbaijano Basco Bengali Bielo-russo Birmanês Bósnio Búlgaro Catalão Cazaque Cebuano Chichewa Chinês (Simp) Chinês (Trad) Cingalês Coreano Crioulo haitiano Croata Dinamarquês Eslovaco Esloveno Espanhol Esperanto Estoniano Finlandês Francês Galego Galês Georgiano Grego Gujarat...

Janela sem botão Fechar [X]

Mais uma sobre janelas Muitas vezes não queremos que o usuário feche a janela no botão [X], padrão nos formulários. Tem como tirar este botão? Sim! Veja na figura ao lado. Para tirar, na linha do comando msdialog , inclua o parâmetro style 128 . Exemplo: define msdialog oRBSFd00 from 0,0 to 8,20 title "Mes/Ano a receber" style 128 Detectar idioma Africâner Albanês Alemão Arabe Armênio Azerbaijano Basco Bengali Bielo-russo Birmanês Bósnio Búlgaro Catalão Cazaque Cebuano Chichewa Chinês (Simp) Chinês (Trad) Cingalês Coreano Crioulo haitiano Croata Dinamarquês Eslovaco Esloveno Espanhol Esperanto Estoniano Finlandês Francês Galego Galês Georgiano Grego Gujarati Hauça Hebraico Hindi Hmong Holandês Húngaro Igbo Indonésio Inglês Ioruba Irlandês Islandês Italiano Japonês Javanês Kannada Khmer Laosiano Latim Letão Lituano Macedônico Malaiala Malaio Malgaxe Maltês Maori Marathi Mongol Nepalês Norueguês Persa Polonês Português Punjabi Romeno Russo Sérvio ...

Criando janelas sem borda

Ás vezes, por uma questão de estética, não queremos janelas com borda. Para isso, podemos definir estilo usando a função: NOR(WS_VISIBLE,WS_POPUP). Veja o exemplo: user function fJanSemB() define msdialog ojan01 title "Janela sem borda" pixel from 180,180 to 550,700 style nor(WS_VISIBLE,WS_POPUP) cTGet := space(20) oTGet := tget():new( 1,1,{||cTGet}, oJan01, 80, 5,"@!",,0,,,.f.,,.t.,,.f.,,.f.,.f.,,.f.,.f.,,cTGet,,,,) @ 8, 5 button "Sair" action oJan01:end() activate dialog ojan01 centered return Já testamos, agora, é só usar!

Protheus integrado ao Active Directory (Single SignOn)

Usando a integração do usuário do Protheus com o Active Directory (AD): 1) O ambiente deve estar atualizado (RPO, Update, LIB e Binário). 2) Entre no Configurador / Usuários / Senhas / Política. 3) Na primeira aba, em Parâmetros, defina no como "Habilitar single sign-on" se a integração será obrigatória ou opcional. 4) No combo "Modalidade de Single Sign-on", defina como "Active Directory". Clique em Confirmar. 5) Agora vá ao cadastro do usuário (Usuário / Senhas / Usuários), clique sobre o usuário e clique em Alterar. Na primeira aba (Usuário), selecione a aba Active Directory. 6) Clique duas vezes sobre o campo abaixo de "Domínio", e preencha o domínio da rede.  Clique duas vezes sobre o campo abaixo de "Usuário", e preencha o nome de usuário da rede que ficará vinculado a este usuário do Protheus. Clique em Confirmar. Ao entrar no Protheus, já irá aparecer por padrão o dom...

Entrar no Protheus sem usuário e sem senha

Os procedimentos de alterar programas, compilar e logar no Protheus, às vezes são repetidos dezenas de vezes, até que o programador chegue ao resultado desejado. Que tal então pular pelo menos a etapa de digitar Usuário e Senha, para agilizar os testes com programas? Bom, p ara entrar no Protheus sem digitar nem o Usuário, nem a Senha, siga os passos abaixo : 1 - Entre no Configurador. 2 - Clique em U suário, Senhas e Política . 3 - Na janela que se abre (abaixo), mude o listbox Habilitar single sign-on para Opcional e mude o listbox Modalidade de Single S ign-on para Sistema Operacional (conforme abaixo) : 4 - Saia do Configurador e entre no smartcliente (sigaadv por exemplo). Após a configuração acima, surge um campo checkbox na tela de login (ver abaixo) : 5 - Marque este checkbox e entre no Protheus. 6 - Agora, saia do Protheus. 7 - Entre no Protheus novamente e verá que este não pedirá mais o Usuário nem a Senha. Obs. 1: Para que o Protheus volte ...

Teclas de Atalhos TOTVS Developer Studio (Eclipse)

Seguem os atalhos para o TOTVS Developer Studio  (Eclipse)  : CTRL+H Localizar vários locais CTRL+F Localizar / substituir CTRL+K Localizar proximo resultado abaixo CTRL+SHIFT+K Localizar proximo resultado acima F11 Depurar F5 Percorre linha F6 Pula linha CTRL+F8 Trocar perspectiva CTRL+F7 Mudar visualização CTRL+F6 Navegar entre os fontes abertos CTRL+M Maximiza / miniminiza fonte CTRL+N Novo (wizard) CTRL+L Ir para linha CTRL+D Deleta toda linha CTRL+ALT+DOWN Duplica linha para baixo CTRL+ALT+UP Duplica linha para cima CTRL+SHIFT+L Apresenta lista de atalhos ALT+UP Move linha para cima ALT+DOWN Move linha para baixo CTRL+SHIFT+I Indenta o fonte CTRL+F9 Compilar CTRL+ESPAÇO...

Datas por extenso

Já precisou escrever datas por extenso? A pequena função  fDatExt(),  abaixo pode resolver o problema. O resultado pode ser visto nas imagens abaixo: No fonte abaixo, substitua dDatabase , por sua variável (do tipo data): #include "protheus.ch" user function fDataExt() msgalert(u_fDatExt( dDataBase , .t.)) msgalert(u_fDatExt( dDataBase , .f.)) return user function fDatExt (dParDat, lParAbr) local cRetDat := "" if lParAbr cRetDat += cValToChar(day(dParDat)) cRetDat += " de " cRetDat += mesextenso(dParDat) cRetDat += " de " cRetDat += cValToChar(year(dParDat)) else cRetDat += capital(extenso(day(dParDat), .t.)) cRetDat += " de " cRetDat += mesextenso(dParDat) cRetDat += " de " cRetDat += capital(extenso(year(dParDat), .t.)) endif return cRetDat Veja também: Extenso  e Funções de Data