Pular para o conteúdo principal

Postagens

Mostrando postagens com o rótulo dica

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

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

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

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

Modo de edição

Desde a versão 8.11, ao clicar com o botão direito do mouse sobre o título de uma coluna do aCols, pode-se escolher editar os dados por linha ou por célula , ou seja, em formato de planilha ou formulário. O problema é que, os usuários, fazem esta alteração sem querer! Para parar com esta confusão, desative esta opção de escolha do modo de edição, configurando o parâmetro MV_GETDADL para .F. . • Veja também: Parâmetro MV_ENCHOLD

Retirando acentos

Às vezes, por exemplo quando vamos gravar contas de e-mail, não queremos que o usuário digite acentos. Para "estes momentos", use a função  FwNoAccent( ) . Veja o exemplo abaixo: user function fTiraAcent ()    cString := "Você não pôde tomar café hoje."    cString := FwNoAccent ( cString )    alert ( cString ) return •  Veja também: Função SplitPath()

SplitPath - Dividindo um path

Exemplo SplitPath Quando trabalhamos, acessando arquivos, as vezes precisamos de detalhes destes. A ADVPL, possui a função SplitPath que já divide um path em: drive, path, nome do arquivo e extensão. Segue um exemplo: user function fDividePath()     Local cPatharq := "C:\TEMP\DOC\DOCUMENTO.TXT"     Local cDrive, cDir, cArq, cExt    SplitPath( cPatharq, @cDrive, @cDir, @cArq, @cExt )    msgalert(cDrive +chr(10)+ cDir +chr(10)+ cArq +chr(10)+ cExt, "Função SplitPath " ) return • Veja também: Somando strings

Testar erro na execução de uma query

É importante testar erros, antes de executar uma query, para evitar erros de execução. Uma boa maneira é testar o retorno da função  TCSQLEXEC() . A query abaixo, tem um erro proposital, para que a janela com o erro apareça : user function fTestaQry ()     dbselectarea ( "SA1" )    cSql := "SELECT * FRO SA1010"    nQueryRet := TCSQLEXEC ( cSql )     if nQueryRet < 0       return msgstop ( "ERRO NA QUERY: "  + chr(10) + TCSQLError ())     endif return •  Veja também: Tabelas customizadas. Quantas?

Configurando o Totvs Smart Client na inicialização

Para ficar registrado, seguem os parâmetros para configurar a inicialização do TOTVS Smart Client : C(Connection) Nome da seção de conexão, que será usada, para a conexão ao Totvs Application Server(TotvsAppServer). E(Environment) Nome da seção do ambiente , no (INI do Server), que será utilizada para definições gerais. L(Log File) No diretório de execução do Totvs Smart Client, é gerado um arquivo de log para não conformidades que ocorram no Totvs Smart Client (antes que este se conecte com o Totvs Application Server). 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ão permite multiplas sessões. P(Main Program) Identifica o programa (APO) inicial. Q(Quiet) Indica que o Totvs Smart Client não deverá mostrar o Splash (imagem de Apresentação) e a tela de id...

O parâmetro MV_ENCHOLD

Nas versões anteriores do Protheus, as telas (ver Enchoice), usavam um layout com no máximo duas colunas de campos. Atualmente o layout exibe os campos com lado a lado, ocupando toda a tela. O responsável por estes dois tipos de layout, é o parâmetro MV_ENCHOLD . Veja na imagem abaixo, o resultado quando usamos este parâmetro com os valores 1 ou 2: Entre no configurador, localize o parâmetro MV_ENCHOLD , mude o valor e faça o teste. • Veja também: Modo de edição (célula / linha)

Usando TFolder

Usar janelas com abas, dependendo da situação, pode ser inevitável. Segue um exemplo, usando TFolder : #include "TOTVS.CH" user function fFuncao1()     define dialog oDialogo title "Exemplo de TFolder" from 180,180 to 550,700 pixel     // Cria a Folder        aTFolder := { "Aba 01" , "Aba 02" , "Aba 03" }    oTFolder := tfolder():new( 0,0,aTFolder,,oDialogo,,,,.t.,,260,184 )     // Insere dois tget na aba 1    oSay:= tsay():new(1,2,{|| "Campo: " }, oTFolder:aDialogs[1],,,,,,.t.,CLR_RED,CLR_WHITE,96,9)    cTGet1 := "Campo TGet 01"    oTGet1 := tget():new( 1,25,{||cTGet1},oTFolder:aDialogs[1],96,9,;               "" ,,0,,,.f.,,.t.,,.f.,,.f.,.f.,,.f.,.f.,,cTGet1,,,, )    cTGet2 := "Campo TGet 02"    oTGet2 := tget():new( 20,25,{||cTGet2},oTFolder:aDialogs[1],96,9,;             ...

Lendo arquivos XML

Mesmo antes, e desde que começamos a tratar notas fiscais eletrônicas(NFe) no Protheus, ocasionalmente, existe a necessidade de acessar dados, nos "nodes" de arquivos XML. No exemplo abaixo, foram lidos o conteúdo dos campos xNome (nome do destinatário) e dEmi (data de emissão), num .XML de uma nota fiscal eletrônica : # include "rwmake.ch" # include "xmlxfun.ch" user function fLexml ()     local cError := cWarning := cDestinatario := cDataEmissao := "" ,;          cNomearq := "\NFE\XML\nomearquivonotafiscal.xml" ,;            oNotaxml := xmlparserfile ( cNomearq, "" , @ cError, @ cWarning )     if cError # "" .or. cWarning # ""       alert ( "Erro: " + cError + "  -  Aviso: " + cWarning )     else       cDestinatario := alltrim( oNotaxml :_nfeProc:_NFe:_infNFe:_dest:_xNome:Text)       cDataEmissa...

Barras de progresso

Segue um exemplo de como fazer barra de progresso, para ilustrar processos mais longos. Para isto, use  as funções  Processa , Procregua e Incproc . O exemplo abaixo, funciona. É só testar: # include "rwmake.ch" user function fFuncao1()    cRBSFQSQL := changequery( "SELECT COUNT(A1_COD) AS NREGISTRO FROM SA1010 WHERE A1_NOME LIKE 'A%'" )    dbusearea(.t., 'TOPCONN' , tcgenqry(,,cRBSFQSQL), 'TMPSA1' , .f., .t.)     if .not. TMPSA1->( eof ())       processa ( {|| u_fFuncao2( TMPSA1->NREGISTRO ) }, "Titulo" , "Processando aguarde..." , .f.)     endif    dbclosearea( "TMPSA1" ) return nil user function fFuncao2(nRegistros)     local cRegistros := ""     procregua (nRegistros)    cRBSFQSQL := changequery( "SELECT A1_COD, A1_NOME FROM SA1010 WHERE A1_NOME LIKE 'A%'" )    dbusearea(.t., 'TOPCONN' , tcgenqry(,,cRBSFQSQL), 'TMPSA2' , .f., .t.)...

Impressão com imagens no Protheus

Muitas vezes é necessário incluir uma imagem num relatório (uma logomarca por exemplo). Uma das maneiras de se fazer isto, é usar a classe TMSPRINTER() . O programa exemplo abaixo, ilustra bem como fazer. Este usa também a classe TFONT() (o tamanho do fonte leva o sinal de menos) : # include "PROTHEUS.CH" # include "RWMAKE.CH" user function fImprimeG() local oFont08 := tfont():New( 'Courier new' ,, -8, .t.),,; oFont09 := tfont():New( 'Courier new' ,, -9, .t.),,; oFont10 := tfont():New( 'Courier new' ,,-10, .t.) oPrint:=tmsprinter():new( "Impressao Grafica" ) oPrint:setportrait() oPrint:SetpaperSize(9) // PAPEL A4 if .not. oPrint:Setup() // MOSTRA JANELA DE CONFIGURAÇÃO DE IMPRESSAO msgalert( "IMPRESSAO CANCELADA." ) return nil endif // ESTE BLOCO PODE FICAR EM LOOP (DO WHILE, FOR..., ETC.) oPrint:StartPage() // oPrint:sayBitmap(linha, coluna, "C:\SUAPASTA\SUAIMAGEM.BMP", largura, al...