Este framework de relatórios é muito bom, principalmente para quem usa ACBr.
Vou mostrar como instalar o framework "Fortes report".
/* Vou considerar que você já tem algum SVN Client instalado em seu computador (TortoiseSVN, por exemplo) */
1º Passo: Crie um diretório em local da sua preferência, porém o nome do diretório tem que remeter ao Fortes reporte, exemplo: "FORTES" ou "Fortes_report" e etc...
2º Passo: Clique com o botão direito do mouse sobre o diretório recém criado, e então será exibido um pop up, nele você deve clicar em "SVN checkout" (no caso do TortoiseSVN) ;
3º Passo: Na janela "Checkout" que foi exibida, clique no campo "URL of repository:" e insira o seguinte endereço:
https://github.com/fortesinformatica/fortesreport-ce.git
e então clique em "OK" ;
Automaticamente será inicializado o processo de download dos arquivos referentes ao projeto "Fortes". Ao fim, clique em "OK" ;
4º Passo: Acesse o seguinte diretório: <Diretório "Fortes"> \ trunk; Execute o seguinte programa "frceInstall.exe".
Será exibida a janela "Instalador FortesReport Community Edition"
Clique em "Próximo"
Confira se a versão do Delphi está correta, próximo, clique novamente em próximo, clique em "Próximo" e novamente em "Próximo" ;
Clique em "Instalar" ;
Após algum tempo, se tudo estiver correto será exibida a janela informando "Pacotes compilados e instalados com sucesso! Clique em "Próximo" para finalizar a instalação", clique em "OK"
Após clicar em "Próximo", clique em "Finalizar"
Pronto, o Fortes está instalado em seu computador!
Até+
terça-feira, 6 de fevereiro de 2018
Como evitar produtos de compilação com nomes redundantes
Um exemplo clássico!!!!
Você criar um projeto server COM+, e no final o arquivo gerado fica com o seguinte nome:
"empresa.nomeprojeto.dll.dll"
esquisito né! ".dll.dll"
Para resolver isto é necessário fazer o seguinte:
Com o Delphi aberto, e seu projeto ou grupo de projetos, aberto, clique sobre o ícone do projeto que ao ser compilado gerado a '.dll' ou '.exe' de nome redundante.
Pressione simultaneamente as teclas CTRL + V.
Será exibida a janela do projeto.
Após a diretiva "{$R *.RES}", digite o seguinte "{$E ''}" // são dois apóstrofos, sem espaço.
Compile o projeto, e ao abrir o diretório configurado para receber o produto de compilação, verá que um novo produto foi gerado, desta vez com o nome alterado para:
"empresa.nomeprojeto.dll"
Obs: A diretiva $E tem como finalidade alterar a extensão do produto gerado no processo de compilação.
Até+
Você criar um projeto server COM+, e no final o arquivo gerado fica com o seguinte nome:
"empresa.nomeprojeto.dll.dll"
esquisito né! ".dll.dll"
Para resolver isto é necessário fazer o seguinte:
Com o Delphi aberto, e seu projeto ou grupo de projetos, aberto, clique sobre o ícone do projeto que ao ser compilado gerado a '.dll' ou '.exe' de nome redundante.
Pressione simultaneamente as teclas CTRL + V.
Será exibida a janela do projeto.
Após a diretiva "{$R *.RES}", digite o seguinte "{$E ''}" // são dois apóstrofos, sem espaço.
Compile o projeto, e ao abrir o diretório configurado para receber o produto de compilação, verá que um novo produto foi gerado, desta vez com o nome alterado para:
"empresa.nomeprojeto.dll"
Obs: A diretiva $E tem como finalidade alterar a extensão do produto gerado no processo de compilação.
Até+
quinta-feira, 1 de fevereiro de 2018
Incompatibilidade do TWebBrownser
Seu componente TWebBrownser não está exibindo o reCaptcha do Google no site da SEFAZ?
Para resolver este problema é necessário seguir estes passos:
* abra o regedit do Windows ;
* Vá até o seguinte caminho:
* Crie um DWORD com o nome exato do seu projeto, exemplo: "meuprojeto.exe" e atribua o valor hexadecimal ou decimal igual à '0' (zero):
Espero que seja útil para muitas pessoas.
Fonte: https://pt.stackoverflow.com/questions/81186/como-fa%C3%A7o-para-instalar-o-pacote-chromium-em-delphi
Até a próxima!
Para resolver este problema é necessário seguir estes passos:
* abra o regedit do Windows ;
* Vá até o seguinte caminho:
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
* Crie um DWORD com o nome exato do seu projeto, exemplo: "meuprojeto.exe" e atribua o valor hexadecimal ou decimal igual à '0' (zero):
Espero que seja útil para muitas pessoas.
Fonte: https://pt.stackoverflow.com/questions/81186/como-fa%C3%A7o-para-instalar-o-pacote-chromium-em-delphi
Até a próxima!
terça-feira, 30 de janeiro de 2018
Uma breve explicação sobre a estrutura do arquivo "VCard"
O que é o "VCard" e como ele é constituído?
O "VCard" nada mais é do que uma das formas de se exportar os contatos que você tenha em suas agendas por ai: Gmail, Whatsapp, Outlock e etc.
* O arquivo tem a extensão ".vcf" (abreviação de 'Virtual Contact File') ;
* Nele existem vários registros de contatos ;
* Os contatos são separados pelo seguintes divisores:
"BEGIN:VCARD"
Indica o início do bloco ;
"END:VCARD"
Indica o fim do bloco ;
* Dentro dos blocos, referentes a cada contato, no arquivo "VCard", existem outros campos
que indicam as propriedades dos contatos, vou listar os que encontrei até agora:
"VERSION:"
Indica a versão do padrão "VCard" gerado. A 3.0 é a mais utilizada (segundo wikipedia, kkkkkk) ;
"FN:"
Indica o nome da pessoa ;
"EMAIL;TYPE=INTERNET:"
Indica o email do contato ;
"TEL;TYPE=CELL:"
Indica o número do celular ;
Por hoje é isso pessoal.
Até mais!
quinta-feira, 4 de janeiro de 2018
Onde encontrar o projeto "CodeGear Socket Server"
Olá,
nesta breve postagem, tentando ajudar os companheiros de programação, venho informar o local onde está armazenado o projeto "CodeGear Socket Server", utilizado quando se trabalha com o socket no Delphi.
O projeto está no seguinte diretório:
<DRIVE> \ program files \ embarcadero \ Rad Studio \ x.x \ source \ win32 \ db.
Espero que tenha sido útil.
T+
nesta breve postagem, tentando ajudar os companheiros de programação, venho informar o local onde está armazenado o projeto "CodeGear Socket Server", utilizado quando se trabalha com o socket no Delphi.
O projeto está no seguinte diretório:
<DRIVE> \ program files \ embarcadero \ Rad Studio \ x.x \ source \ win32 \ db.
Espero que tenha sido útil.
T+
quarta-feira, 13 de dezembro de 2017
Hi there, this is an AXIS service!
O que fazer quando ocorre a esta mensagem "Hi there, this is an AXIS service!" ao tentar conexão com uma Web Service?
Normalmente quando esta mensagem ocorre é devido a falta de um determinado prefixo, comum quando é criada uma URL de WS.
A mensagem em si, retornada no brownser é esta:
<h1>NFeAutorizacao4</h1>
<p>Hi there, this is an AXIS service!</p>
<i>Perhaps there will be a form for invoking the service here...</i>
um exemplo de endereço que ocasiona esta mensagem:
https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4
para resolver é necessário incluir no final do endereço ws o seguinte prefixo: ?wsdl
ou seja, o endereço citado acima, após ser corrigido, ficará da seguinte forma:
https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4?wsdl
Até+
Normalmente quando esta mensagem ocorre é devido a falta de um determinado prefixo, comum quando é criada uma URL de WS.
A mensagem em si, retornada no brownser é esta:
<h1>NFeAutorizacao4</h1>
<p>Hi there, this is an AXIS service!</p>
<i>Perhaps there will be a form for invoking the service here...</i>
um exemplo de endereço que ocasiona esta mensagem:
https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4
para resolver é necessário incluir no final do endereço ws o seguinte prefixo: ?wsdl
ou seja, o endereço citado acima, após ser corrigido, ficará da seguinte forma:
https://nfehomolog.sefaz.pe.gov.br/nfe-service/services/NFeAutorizacao4?wsdl
Até
domingo, 19 de novembro de 2017
Transformando um "Enter" em "Tab"
Para que o efeito do evento "Enter" seja transformado no efeito da tecla "Tab", muitas vezes necessário, utilize o seguinte código:
if key = #13 then
begin
key := #0;
PostMessage ( handle, WM_KEYDOWN, VK_TAB, 1 );
end
Até a próxima!!!!
if key = #13 then
begin
key := #0;
PostMessage ( handle, WM_KEYDOWN, VK_TAB, 1 );
end
Até a próxima!!!!
terça-feira, 23 de maio de 2017
Como é constituída a chave de acesso de um CF-e-Sat
Como é constituída a chave de acesso de um CF-e-Sat
Olá amigos, neste post venho trazer pra vocês uma informação que pra mim foi muito útil, e acredito que poderá ser útil para outras pessoas.
Para quem atua no setor de automação comercial, já deve ter ouvido falar do S@t que é um meio fiscal para controlar as vendas ao consumidor final.
Após emitir um CF-e (Cupom Fiscal Eletrônico), será gerado um arquivo '.xml', e este será enviado para a SEFAZ. Posteriormente para que o cliente (que obteve o Extrato do CF-e) possa consultar a venda realizada, é necessário ter em mãos o QR-Code ou a Chave de acesso, que também é impressa no Extrato.
A chave de acesso é constituída por 44 dígitos, onde:
2 = Código da UF do emitente do CF-e-Sat ;
4 (AAMM) = Ano e Mês de emissão do CF-e-Sat ;
14 = CNPJ do emitente do CF-e-Sat ;
2 = Modelo do documento fiscal ;
9 = Nº de série do SAT ;
6 = Número do CF-e-SAT ;
6 = Código Número Aleatório ;
1 = Dígito verificador ;
para maiores informações da construção do CF-e-SAT, acesse este link:
https://portal.fazenda.sp.gov.br/servicos/sat/Downloads/Especificacao_SAT_v_ER_2_21_08.pdf
até a próxima.
quinta-feira, 6 de abril de 2017
Nova tabela de NCM
Olá,
Visto que atuo no desenvolvimento de soluções no ambiente de automação comercial, ou seja, automatizando processos dentro de empresa, através de software, implementamos também aplicações voltadas para emissão de documentos fiscais eletrônicos (famosos "-e").
Recentemente nossos clientes passaram a reclamar que ao tentar emitir notas fiscais, era exibida a seguinte mensagem de rejeição:
e os argumentos são, em grande parte, os mesmos:
"Sempre utilizei este NCM, nunca teve problema", ou "Este é NCM que estava na NF-e que o fornecedor me mandou" e etc.
Bom, venho hoje fazer um alerta: Na Nota Técnica 2016/003, que entrou em vigência a partir de 01/01/2017, o assunto é exatamente este "Nova Tabela de NCM – Vigência 01-01-2017".
Para resumir este post, venho esclarecer que uma quantidade significante de NCM's foi eliminada, e o período de adequação por parte das empresas findou em 31/03/2017, conforme está descrito no documento mencionado acima:
"
Divulgar que está disponível a nova tabela de NCM publicada na Resolução Camex nº 125/16 no Portal da NF-e, endereço, no menu “Documentos”, opção “Diversos”,
“NCM 8 Dígitos - vigência a partir de 01/01/2017 – Ref. Nota Técnica 2016.003”.
Os novos códigos incluídos na tabela de NCM estão realçados em verde com a informação de início
de vigência em 01/01/2017.
Os códigos NCM extintos pela Resolução Camex estão realçados em vermelho com informação fim
de vigência 31/03/2017.
"
Concluindo este post, esclareço que a rejeição mencionada acima realmente ocorrerá por algum tempo, para os casos em que as soluções em software não automatizam a sincronia de NCM's. Também observo que nem tudo que é dito por nossos "clientes" poderá ser considerado verdade, porém no mínimo duvidoso.
grato!
Visto que atuo no desenvolvimento de soluções no ambiente de automação comercial, ou seja, automatizando processos dentro de empresa, através de software, implementamos também aplicações voltadas para emissão de documentos fiscais eletrônicos (famosos "-e").
Recentemente nossos clientes passaram a reclamar que ao tentar emitir notas fiscais, era exibida a seguinte mensagem de rejeição:
Rejeição 778: Informado NCM inexistente
e os argumentos são, em grande parte, os mesmos:
"Sempre utilizei este NCM, nunca teve problema", ou "Este é NCM que estava na NF-e que o fornecedor me mandou" e etc.
Bom, venho hoje fazer um alerta: Na Nota Técnica 2016/003, que entrou em vigência a partir de 01/01/2017, o assunto é exatamente este "Nova Tabela de NCM – Vigência 01-01-2017".
Para resumir este post, venho esclarecer que uma quantidade significante de NCM's foi eliminada, e o período de adequação por parte das empresas findou em 31/03/2017, conforme está descrito no documento mencionado acima:
"
Divulgar que está disponível a nova tabela de NCM publicada na Resolução Camex nº 125/16 no Portal da NF-e, endereço
"
Concluindo este post, esclareço que a rejeição mencionada acima realmente ocorrerá por algum tempo, para os casos em que as soluções em software não automatizam a sincronia de NCM's. Também observo que nem tudo que é dito por nossos "clientes" poderá ser considerado verdade, porém no mínimo duvidoso.
grato!
segunda-feira, 3 de abril de 2017
Função StringReplace
Olá,
Hoje venho trazer mais uma função que utilizo muito no dia a dia aqui no trabalho. O método que apresento neste dia é a StringReplace:
Ela é útil quando se faz necessário a edição de uma grande string, algo que tomaria muito tempo em meio a loop's demorados.
Este é o cabeçalho da função:
StringReplace(const S, OldPattern, NewPattern: string;
Flags: TReplaceFlags): string;
onde:
const = string a ser verificada ;
OldPattern = caracteres que se deseja substituir ;
NewPattern = caracteres substitutos (em relação aos antigos) ;
Flags:
Este é um tipo, que aguarda como parâmetros as seguintes opções: (rfReplaceAll, rfIgnoreCase) ;
Exemplo de uso:
palavra = '10.50' ;
showmessage( palavra, '.', ',', [rfReplaceAll, rfIgnoreCase] );
resultado
conclusão: Veja que a função substituiu a string '.' (ponto) por ',' (vírgula). Nesta situação existia apenas uma ocorrência, mas é importante salientar que não existe "limite" desde que a opção "rfReplaceAll" esteja especificada, caso contrário apenas a primeira ocorrência atenderá a substituição.
obs:
rfReplaceAll indica que TODAS as ocorrências deverão atender a substituição solicitada ;
rfIgnoreCase indica que não existe diferenciação entre minusculas e maiúsculas.
até a próxima.
Hoje venho trazer mais uma função que utilizo muito no dia a dia aqui no trabalho. O método que apresento neste dia é a StringReplace:
Ela é útil quando se faz necessário a edição de uma grande string, algo que tomaria muito tempo em meio a loop's demorados.
Este é o cabeçalho da função:
StringReplace(const S, OldPattern, NewPattern: string;
Flags: TReplaceFlags): string;
onde:
const = string a ser verificada ;
OldPattern = caracteres que se deseja substituir ;
NewPattern = caracteres substitutos (em relação aos antigos) ;
Flags:
Este é um tipo, que aguarda como parâmetros as seguintes opções: (rfReplaceAll, rfIgnoreCase) ;
Exemplo de uso:
palavra = '10.50' ;
showmessage( palavra, '.', ',', [rfReplaceAll, rfIgnoreCase] );
resultado
conclusão: Veja que a função substituiu a string '.' (ponto) por ',' (vírgula). Nesta situação existia apenas uma ocorrência, mas é importante salientar que não existe "limite" desde que a opção "rfReplaceAll" esteja especificada, caso contrário apenas a primeira ocorrência atenderá a substituição.
obs:
rfReplaceAll indica que TODAS as ocorrências deverão atender a substituição solicitada ;
rfIgnoreCase indica que não existe diferenciação entre minusculas e maiúsculas.
até a próxima.
Assinar:
Postagens (Atom)
-
Este framework de relatórios é muito bom, principalmente para quem usa ACBr. Vou mostrar como instalar o framework "Fortes report...
-
Olá, Recentemente passei a utilizar com certa frequência a função 'posEx' então decidi fazer uma postagem sobre esta função que é ...
