Leaderboard


Popular Content

Showing most liked content since 27-03-2017 in all areas

  1. 17 likes
    Olá pessoal, Com o intuito de acabar com a dependência da CAPICOM, nos fontes do Projeto ACBr, apliquei um amplo refactoring, nas Units de ACBrDFeSSL e suas derivadas... O que é CAPICOM ? https://en.wikipedia.org/wiki/CAPICOM Porque usávamos a CAPICOM ? Usar diretamente as APIs do Windows não é uma tarefa simples.... A CAPICOM, facilita um pouco, as tarefas que podem ser feitas com a WinCrypt (ou MS Crypto), para acesso a certificados digitais instalados no Windows Quais as desvantagens da CAPICOM ? A Microsoft condenou a mesma como obsoleta. (esse é o principal motivo) Ela precisa ser registrada no Windows para funcionar Não suporta 64 bits O que será usado no lugar da CAPICOM ? Usaremos diretamente as APIs do Windows, ou seja, a WinCrypt (também conhecida como "MS Crypto" ou "CAPI"). Ou seja, encaramos o desafio e agora usamos apenas métodos da WinCrypt para acessos a Certificados Digitais no Windows. Para facilitar o acesso a API WinCrypt, estamos usando as Units do diretório: "Fontes\Terceiros\CodeGear\", mas especificamente a Unit "ACBr_WinCrypt.pas". Quais as vantagens da WinCrypt ? Ela está presente de forma nativa, em todas as versões do Windows (desde o Windows XP), ou seja, não requer instalação. Possui versões 32 e 64 bits Não requer registro da DLL Não requer a instalação de pacotes .NET ou Java Onde posso encontrar a WinCrypt ? Ela já está instalada, de forma nativa, no seu Windows... com o nome: "crypt32.dll" Se o seu Windows é 64 bits, você encontrará a mesma em: 32 bits: "C:\Windows\SysWOW64" 64 bits "C:\Windows\System32" Se o seu Windows é 32 bits, você encontrará a mesma em: "C:\Windows\System32" O suporte a Delphi7 será mantido ? SIM. Apesar de já anunciarmos o fim do Suporte a D7, tivemos o cuidado de testar as alterações no D7. Para isso, adaptamos as units da pasta "Fontes\Terceiros\CodeGear\" para o suporte a D7... Como configurar para usar a WinCrypt e não a CAPICOM ? A maneira mais simples é configurar a seguinte propriedade: ACBrNFe1.Configuracoes.Geral.SSLLib := libWinCrypt; Na verdade, a propriedade ACBrDFe.Configuracoes.Geral.SSLLib passou a ser virtual... ou seja, ela configurará de forma indireta, as 3 novas bibliotecas de TDFeSSL... Se você ler os fontes, quando rodamos o código acima, o seguinte código será executado. procedure TGeralConf.SetSSLLib(AValue: TSSLLib); case AValue of ..... libWinCrypt: begin SSLCryptLib := cryWinCrypt; SSLHttpLib := httpWinHttp; SSLXmlSignLib := xsMsXml; end; end; Se você deseja uma configuração diferenciada, poderá configurar as bibliotecas individualmente...Exemplo: ACBrNFe1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt; ACBrNFe1.Configuracoes.Geral.SSLHttpLib := httpWinINet; ACBrNFe1.Configuracoes.Geral.SSLXmlSignLib := xsXmlSec; Como remover completamente, as Units da CAPICOM dos meus fontes ? Abra o arquivo \ACBr\Fontes\ACBrComum\ACBr.inc e altere a seguinte linha: {.$DEFINE DFE_SEM_CAPICOM} para: {$DEFINE DFE_SEM_CAPICOM} Ou seja, remova o "." do inicio O que mudou em ACBrDFeSSL ? Muita coisa.... (veja abaixo o trecho do "Change-Log").. Estudar os fontes do projeto Demo "\ACBr\Exemplos\ACBrDFe\ACBrNFe\Delphi", é a melhor maneira de conhecer as modificações. Veja abaixo, um resumo ilustrado: 1 - Agora você pode criar a sua própria janela de escolha de Certificado Veja esse exemplo de código, extraído de ACBrNFe_Demo. onde usamos o método "ACBrNFe1.SSL.LerCertificadosStore", para carregar todos os certificados da Store, definida em "ACBrNFe1.SSL.StoreName", após isso, as informações dos certificados podem ser obtidas em "ACBrNFe1.SSL.ListaCertificados" ACBrNFe1.SSL.LerCertificadosStore; For I := 0 to ACBrNFe1.SSL.ListaCertificados.Count-1 do begin with ACBrNFe1.SSL.ListaCertificados[I] do begin 2 - Agora você pode selecionar as bibliotecas de TDFeSSL, individualmente CryptLib: Permite definir qual será a biblioteca de Criptografia. Ela possui métodos como:"SelecionarCertificado", "CarregarCertificado", "CalcHash". além de propriedades como "DadosCertificado" e "ListaCertificados". TSSLCryptLib = (cryNone, cryOpenSSL, cryCapicom, cryWinCrypt) HttpLib: Usada para acesso HTTP e HTTPs, permitindo informar o Certificado na conexão. Possui métodos como: "Enviar" e propriedades como: "HTTPResultCode" e "InternalErrorCode" TSSLHttpLib = (httpNone, httpWinINet, httpWinHttp, httpOpenSSL, httpIndy); XMLSignLib: Usada para validar XMLs (contra um Schema), assinar um XML, Validar a assinatura existente em um XML. Possui métodos como: "Assinar", "Validar" e "VerificarAssinatura" TSSLXmlSignLib = (xsNone, xsXmlSec, xsMsXml, xsMsXmlCapicom); 3 - Independência das configurações de segurança do I.E. Isso pode ser obtido, se você utilizar SSLHttpLib = "httpWinHttp" ou "httpOpenSSL" Você poderá definir nos seus fontes, independente das configurações do Internet Explorer, configurações como o Tipo de segurança e TimeOut da tentativa de conexão. Essa funcionalidade já estava presente nas Units de acesso que utilizavam o OpenSSL a algum tempo. e agora com a nova Unit que faz acesso a HTTPS, usando a API do Windows chamada "WinHTTP", isso também será possível. O modelo: "httpWinINet" irá usar a API do Windows, chamada "WinINet", a qual já utilizávamos, e ela depende de configurações do I.E. 4 - Carregar o certificado por ArquivoPFX ou DadosPFX, com a WinCrypt ou CAPICOM Essa funcionalidade já estava presente, quando SSLCryptLib = cryOpenSSL. e não estava disponível para CAPICOM. Mas agora isso é possível, com a SSLCryptLib = cryCapicom ou cryWinCrypt. Ou seja, Se você tem um certificado A1, você não precisa instalar o certificado no Windows. Isso pode parecer pouco importante em uma primeira impressão... Mas veja as possibilidades: O certificado A1 poderia estar em um Banco de dados, ou em um Servidor Web, e ser carregado de forma dinâmica pela sua aplicação, independente de ser instalado manualmente no Windows. 5 - Compilar seu Executável em 64 bits Lembre-se que quando você compila o seu programa em 64 bits, todas as DLLs externas de qual ele necessitar, também devem ser de 64 bits. Portanto para isso, você não poderá usar a XMLSignLib = xsMsXml, pois a biblioteca da Microsoft para assinatura de XMLs "MSXML" não possui versão 64 bits. Mas observe que agora você pode usar a biblioteca WinCrypt com a XmlSec, basta configurar corretamente as bibliotecas de criptografia. Nota: Ainda não conseguimos, fazer com que a XMLSec possa usar certificados A3, mas isso deverá ser possível no futuro, pois a XMLSec tem suporte a "MSCrypto" Diagrama de Classes Como posso ajudar ? (Tarefas a serem efetuadas) 1 - Fazer a XmlSec funcionar usando a "mscrypto" Ainda não conseguimos fazer a XMLSec, usar a MSCrypto, atualmente ele apenas usa a "openssl". Porque isso é importante ? Temos vários problemas, com a msxml, como por exemplo: A Microsoft não distribui a mesma, de forma nativa, com o Windows (arquivo msxml5.dll) Ela não suporta 64 bits A licença de uso dassa biblioteca, é valida apenas para quem tem o Office instalado... Portanto, seria ótimo se pudéssemos ficar livres da MSXML, mas para isso, precisamos fazer o ACBr conseguir usar a XMLSec com suporte a MSCrypto (hoje ele só suporta OpenSSL)... Na verdade, já podemos usar WinCrypt + XmlSec, mas apenas para certificados A1, pois o ACBr é capaz de exportar o certificado A1 do Windows, para que o mesmo seja usado pelo OpenSSL. (ele fará isso internamente, e de forma transparente para o usuário) Quando conseguirmos fazer a XmlSec usar a MSCrypto (ou WinCrypt), conseguiremos compilar a aplicação em 64 bits, e com suporte a certificados A3 2 - Compilar os fontes da XMLSec no Windows, em 32 e 64 bits Hoje o único site que distribui a XMLSec já compilada para Windows é https://www.zlatkovic.com/libxml.en.html (Thanks Igor). Entretanto, podemos notar que os binários estão defasados, e não há uma versão 64 bits, com suporte a "mscrypto" Veja como ficou o "Change-Log" do refactoring em ACBrDFeSSL -- ACBrDFeSSL -- [*] Amplo refactoring promovido, separando a classe "TDFeSSLClass" em 3 novas classes: "TDFeSSLCryptClass" - para Carregar certificados e efetuar criptografia "TDFeSSLHttpClass" - para comunicação HTTP/HTTPS com suporte a Certificados "TDFeSSLXmlSignClass" - Para Validar XMLs, validar assinaturas e Assinar XML com Certificados [+] "TSSLLib", adicionado os tipos "libWinCrypt, libCustom" [+] Criada nova classe "TDadosCertificado", para conter os dados do certificado carregado [+] Criada nova classe "TListaCertificados",para conter uma lista de Objetos do tipo TDadosCertificado, com todos os certificados de uma "Store", e após a chamada do método "TDFeSSL.LerCertificadosStore" [+] Adicionada propriedade "TDFeSSL.StoreName: String", usada apenas no Windows. Nome da Store a ser aberta, padrão "MY" [+] Adicionada propriedade "TDFeSSL.StoreLocation: TSSLStoreLocation", usada apenas no Windows. Default "slCurrentUser". TSSLStoreLocation = (slMemory, slLocalMachine, slCurrentUser, slActiveDirectory, slSmartCard); [+] Adicionado o método: "TDFeSSL.LerCertificadosStore", apenas Windows, para carregar todos os Certifcados de "TDFeSSL.StoreName" para a lista de Objetos: "TDFeSSL.ListaCertificados" [+] Adicionado a propriedade "TDFeSSL.DadosCertificado", para permitir acesso aos dados do certificado carregado [+] Adicionada a propriedade "TDFeSSL.SSLCryptLib: TSSLCryptLib" default cryNone; para definir a classe de criptografia TSSLCryptLib = (cryNone, cryOpenSSL, cryCapicom, cryWinCrypt); [+] Adicionada a propriedade "TDFeSSL.SSLHttpLib: TSSLHttpLib" default httpNone; para definir a classe de comunicação HTTP/HTTPS TSSLHttpLib = (httpNone, httpWinINet, httpWinHttp, httpOpenSSL, httpIndy); [+] Adicionada a propriedade "TDFeSSL.SSLXmlSignLib: TSSLXmlSignLib" default xsNone; para definir a classe de assinatura de validação de XML TSSLXmlSignLib = (xsNone, xsXmlSec, xsMsXml, xsMsXmlCapicom); [+] Adicionada a propriedades "TDFeSSL"SSLType: TSSLType" default LT_all; para permitir definir o tipo de criptografia em HTTPS sendo: TSSLType = (LT_all, LT_SSLv2, LT_SSLv3, LT_TLSv1, LT_TLSv1_1, LT_TLSv1_2, LT_SSHv2) suportado apenas em TDFeHttpOpenSSL e TDFeHttpWinHttp -- ACBrDFeConfiguracoes -- [+] Adicionada as propriedades: property SSLCryptLib: TSSLCryptLib property SSLHttpLib: TSSLHttpLib property SSLXmlSignLib: TSSLXmlSignLib [*] Propriedade "SSLLib: TSSLLib" passou a ser virtual, e mantida por compatibilidade. Ajusta-la irá produzir ajustes em "SSLCryptLib", "SSLHttpLib" e "SSLXmlSignLib". Exemplo: if SSLLib = libOpenSSL then begin SSLCryptLib := cryOpenSSL; SSLHttpLib := httpOpenSSL; SSLXmlSignLib := xsXmlSec; end; -- ACBrDFe -- [+] Adicionado suporte a configurações de "SSLCryptLib", "SSLHttpLib", "SSLXmlSignLib" -- ACBrDFeOpenSSL -- [*] Amplo refactoring. Removido código referente a comunicação HTTP/HTTPs que foi migrado para "ACBrDFeHttpOpenSSL" [*] Removido código referente a assinatura digital e Validação de XML, que foi migrado para "ACBrDFeXsXmlSec" -- ACBRDFeWinCrypt -- [+] Nova Unit, para manipular Certificados do Windows e efetuar assinatura digital, usando a Win API WinCrypt (MSCrypto/CAPI) -- ACBrDFeCapicom -- [*] Refactoring, para usar boa parte do código de "ACBRDFeWinCrypt" -- ACBrDFeHttpOpenSSL -- [+] Adicionada nova Unit, derivada de ACBrDFeOpenSSL, criando implementação da classe de TDFeSSLHttpClass para comunicação http e https, usando a Synapse e OpenSSL -- ACBrDFeHttpWinApi -- [+] Adicionada nova Unit, derivada de ACBrDFeCapicom, criando implementação da classe de TDFeSSLHttpClass para comunicação http e https, usando as APIs do Windows WinHttp ou WinINet -- ACBrDFeHttpIndy, ACBrDFeCapicomDelphiSoap -- [*] Unit renomeada de "ACBrDFeCapicomDelphiSoap" para "ACBrDFeHttpIndy", e refatorada para não depender da CAPICOM -- ACBrDFeXsXmlSec -- [+] Adicionada nova Unit, derivada de ACBrDFeOpenSSL, criando implementação da classe de TDFeSSLXmlSignClass usando a Lib XMLSEC -- ACBrDFeXsMsXml -- [+] Adicionada nova Unit, derivada de ACBrDFeCapicom, criando implementação da classe de TDFeSSLXmlSignClass usando a Lib MSXML -- ACBrDFeXsMsXmlCapicom -- [+] Adicionada nova Unit, derivada de ACBrDFeCapicom, criando implementação da classe de TDFeSSLXmlSignMsXml usando a Lib MSXML e CAPICOM -- ACBrDFeException -- [+] Adicionado o exception "EACBrDFeExceptionNoPrivateKey" -- ACBrDFeUtil -- [+] Adicionado o método "SignatureElement: String" (por DSA) Obrigado... e considere nos ajudar, contratando o SAC, por pelo menos 1 mês http://www.projetoacbr.com.br/forum/sacv2/sobre/ http://www.projetoacbr.com.br/forum/sacv2/questoes_importantes/ http://www.projetoacbr.com.br/forum/sacv2/cadastro/ Fique atento.... Em breve, organizaremos um Webinar sobre essas modificações
  2. 7 likes
    Acabei de comitar as alterações para compatibilizar o ACBrSAT com o MFe, tive tempo de testar apenas os comandos compatíveis com o SAT, os comandos de pagamento ainda serão desenvolvidos. Abaixo um passo-a-passo para utilizar o integrador fiscal fornecido pela SEFAZ do Ceará com o ACBrSAT: Baixe o instalador em https://integrador.blob.core.windows.net/releases/Integrador Setup 1.5.86.exe Faça a instalação do mesmo e ao executar pela primeira vez utilize os seguintes dados na tela de configuração/opções: CNPJ do Estabelecimento: 30146465000116 Inscrição Estadual do Estabelecimento: 065911482 CNPJ da Software House: 98155757000159 Código de Validação do Aplicativo Comercial: MD2Nof/O0tQMPKiYeeAydSjYt7YV9kU0nWKZGXHVdYIzR2W9Z6tgXni/Y5bnjmUAk8MkqlBJIiOOIskKCjJ086k7vAP0EU5cBRYj/nzHUiRdu9AVD7WRfVs00BDyb5fsnnKg7gAXXH6SBgCxG9yjAkxJ0l2E2idsWBAJ5peQEBZqtHytRUC+FLaSfd3+66QNxIBlDwQIRzUGPaU6fvErVDSfMUf8WpkwnPz36fCQnyLypqe/5mbox9pt3RCbbXcYqnR/4poYGr9M9Kymj4/PyX9xGeiXwbgzOOHNIU5M/aAs0rulXz948bZla0eXABgEcp6mDkTzweLPZTbmOhX+eA== Selecione o checkbox "Servidor" (Talvez seja necessário alterar o campo IsServer para True no arquivo Integrador.cnf - Use o SQLiteStudio -http://sqlitestudio.pl/) Atualize seu fontes do ACBr e no demo do ACBrSAT para Lazarus(E:\delphi\ACBr\trunk2\Exemplos\ACBrSAT\Lazarus) configure a nova aba MFE, escolha o modelo "MFe_Integrador_XML" e clique em inicializar. Para o MDK da TANCA use os seguinte dados na criação do XML de Venda: Código de Ativação: 12345678 CNPJ do Contribuinte: 08.723.218/0001-86 IE do Contribuinte: 562.377.111.111 CNPJ da Software House: 16.716.114/0001-72 Assinatura da Software House: SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT Pontos de atenção: Como tratar um comando com erro? Em todos os comandos existe o campo IDENTIFICADOR, mas ao enviar um comando com erro, a resposta não vem com este campo, então fica difícil saber se o XML que está na pasta se refere ao último comando enviado. Exemplo do arquivo de resposta a um comando com erro: 7b96d469f63c4973af180a991804f0ec20170425220009.xml
  3. 7 likes
    Apliquei algumas correções nos fontes:
  4. 5 likes
    Prezados, por favor atualizem os fontes... apliquei várias correções na ACBrDFeWinCrypt 13/04/2017 -- ACBrDFeWinCrypt -- [-] Correção para não atribuir Senha para certificados A3, de uma segunda instância do ACBrNFe, que utilize o mesmo certificado. (por: DSA) 12/04/2017 -- ACBrDFeWinCrypt -- [*] Ajuste para compilação com a diretiva "DFE_SEM_NCRYPT", para permitir o suporte a Windows XP (por: DSA) -- ACBr_NCrypt -- [*] Ajuste para efetuara carga da DLL com "Delayed", caso a diretiva "USE_DELAYED" esteja ligada, e o compilador suporte carga tardia.. (por: Waldir Paim) http://www.projetoacbr.com.br/forum/topic/36219-ncryptdll-faltando-no-xp/?do=findComment&comment=237206 10/04/2017 -- ACBrDFeWinCrypt -- [-] Ajustes para possível correção de Certificados compatível apenas com "CNG" que causavam o erro "NTE_BAD_PROV_TYPE - 0x80090014", durante a carga do Certificado. http://www.projetoacbr.com.br/forum/topic/36017-provedor-de-criptografia/?do=findComment&comment=236710 (por: DSA) 04/04/2017 -- ACBrDFeCapicom -- [-] Correção no método "GetCNPJFromExtensions", onde ocorria o erro: "Parâmetro Incorreto" (por: DSA) 03/04/2017 -- ACBrDFeCapicom, ACBrDFeWinCrypt -- [-] Possível correção para o erro "Erro Thread da crypt32", quando usando "cryCapicom" -- ACBrDFeWinCrypt -- [*] Ajuste no método "GetCNPJFromExtensions", quebrando-o em vários, para permitir a leitura de diferentes extensões -- ACBrDFeOpenSSL -- [-] Correção na interpretação do conteúdo das extensões do certificado, corrigndo problemas de leitura de CPF/CNPJ de alguns certificados (por: DSA) 27/03/2017 -- ACBrDFeXsXmlSec -- [*] Remoção da dependencia de "libxslt". (por Waldir Paim) http://www.projetoacbr.com.br/forum/topic/35775-sugest%C3%A3o-limpeza-dos-uses-de-algumas-units/?do=findComment&comment=234842 25/03/2017 -- ACBrDFeHttpOpenSSL, ACBrDFeHttpIndy -- [*] Ajuste para usar a definição MimeType, comforme recebido pela rotina chamadora -- ACBrDFeHttpWinApi -- [*] Ajuste para disparar exceptions, caso o HTTPResultCode não seja 200,201,202 -- ACBrDFeSSL -- [*] Ajuste para que o MimeType padrão, caso nenhum tenha sido informado contenha instrução de UTF8 'application/soap+xml; charset=utf-8' 24/03/2017 -- ACBRDFeWinCrypt -- [-] Correção em "PFXDataToCertContextWinApi", que é usada por "CarregarCertificado", quando informado o certificado por: "ArquivoPFX" ou "DadosPFX". Para que seja possível carregar Certificados com número de série, menor do que 16 (por: DSA) http://www.projetoacbr.com.br/forum/index.php?showtopic=35805 22/03/2017 -- ACBrDFeSSL -- [*] Ajustes em "Clear", para evitar problemas quando ocorre a troca de SSLCryptLib via código. -- ACBRDFeWinCrypt -- [*] Ajustes em "CarregarCertificado", para priorizar a busca do certificado por "DadosPFX" seguido de "ArquivoPFX" e depois "NumeroSerie" (por: DSA)
  5. 5 likes
    Olá Pessoal, Foi aprovado pelo Congresso Nacional no último dia 04/10/2016 a nova lei do Simples Nacional, que tramitava no Congresso desde 2015. Ainda não foi sancionada pelo Presidente que pode sancionar na íntegra, vetar na íntegra, ou vetar parcialmente, e tem prazo até 31/12/2017 para fazê-lo, e mesmo que sancionada antes, entra em vigor a partir de 01/01/2018. Mesmo ainda não Sancionada, já está deixando muitos contribuintes apreensivos, pois muitos casos deixarão de ser interessante continuar no Simples, e passarão para o Lucro Presumido. Vou destacar apenas 2 coisas: 1-As tabelas dos anexos I a V passam a ter apenas 6 faixas, e não mais 20 faixas. 2-A metodologia dos cálculos mudaram e radicalmente, isso é que pode fazer a diferença. Veja como será o cálculo para o Simples Nacional a partir de 01/01/2018 para saber qual alíquota aplicar sobre o faturamento, conforme artigo 18 da nova lei: (RBT12 x Aliq - PD / RBT12 = Percentual Alíquota) Onde: RBT12: receita bruta acumulada nos doze meses anteriores ao período de apuração Aliq: alíquota nominal constante dos Anexos I a V desta Lei Complementar PD: parcela a deduzir constante dos Anexos I a V desta Lei Complementar Fonte: Lei do Novo Simples Nacional Exemplo da Nova Tabela do Anexo I - Comércio:
  6. 5 likes
    Estamos programando um Webinar para falar sobre o MFe, possivelmente teremos a participação de um fabricante, assim que tiver a data irei divulgar no fórum.
  7. 4 likes
  8. 4 likes
    Sinceramente Janio, prefiro não me envolver. Enquanto não existir um manual e versão oficial do Integrador(funcionando) disponível no site do SEFAZ do Ceará irei congelar o desenvolvimento no ACBr referente ao MFE. Não podemos ficar nessa de tentativa e erro em algo que vai afetar gravemente os contribuintes do Ceará.
  9. 4 likes
    O erro estava sendo causado devido a um comportamento inesperado dos ultimos refactorings, onde o monitor estava sempre fazendo a consulta usando a chave do endereço, mesmo que fosse passado o path completo. Quando se consulta usando a chave o XML não é atualizado. Acabo de fazer a correção e disponibilizei a mesma para download. Favor testar e postar possíveis problemas.
  10. 4 likes
    NF-e - SCHEMAS VERSÃO 4.0 http://www.spedbrasil.net/forum/topics/nf-e-schemas-versao-4-0 Pessoal, Foram publicados os SCHEMAS da VERSÃO 4.0. Lembrando que esta versão, 4.0, está com os seguintes prazos: 1.3. Sobre o Prazo de Implantação O prazo previsto para a implementação das mudanças é: - Ambiente de Homologação (ambiente de teste das empresas): 01/06/2017; - Ambiente de Produção: 01/08/17. - Desativação da versão anterior: 02/04/18. https://goo.gl/bFkExh
  11. 4 likes
    Show, é que estou fazendo coisas que são de ajuda a todos e postando em forum de programadores a princípio, já para poderem usar sem esquentar muito a cabeça, mais breve quero fazer um site com tudo centralizado nele e somente OpenSRC mesmo inclusive os meus projetos OpenSRC, muitos precisam mais não sabem fazer, o mesmo que fiz com os outros projetos quero sempre fazer, ajudar aos que precisam sem ganhar por isso, pois já tenho meu emprego mesmo e não custa nada compartilhar o conhecimento que me sobra sobre certas coisas, ajudo a muitos e eles podem ter algo que lhes ajudem a melhorar seus programas sem custo.
  12. 4 likes
    Boa tarde, iniciei os estudos para implementar a emissão do MDF-e, e uma das regras que mais me chamou atenção foi sobre as informações do percurso do manifesto, nas viagens intermunicipais. Gostaria de compartilhar um pequeno projeto desenvolvido em Lazarus, (meu objetivo é montar um cadastro de percursos, a fim de evitar a rejeição de "Percurso inválido") considerando as seguintes validações verificadas na documentação do MDF-e: Validações SEM percurso: 1) UF ini e UF fim são iguais -> não deve selecionar nenhuma UF de percurso 2) UF ini e UF fim são diferentes e fazem divisa -> não deve selecionar nenhuma UF de percurso Validações COM percurso: 3) nem UF ini nem UF fim devem estar selecionadas no percurso. 4) a primeira UF da lista deve fazer divisa com a UF inicial (carregamento) 5) entre as UF selecionadas, cada UF deve fazer divisa com a UF seguinte, na ordem de cima para baixo. 6) a ultima UF da lista deve fazer divisa com a UF final (descarregamento) Basicamente, foi montada uma classe TUF (uufclass.pas), onde para cada objeto de UF criado, ele cria num vetor a lista das outras UF que fazem divisa com esta. Também tem um Form mostrando como o usuário informaria as UF inicial e final, assim como selecionar (TCheckListBox) as UFs do percurso. Também é possível ordenar as UFs (TListBox). Por último, foi feito uma "perfumaria", desenhando o percurso selecionado, no mapa do Brasil (TImage). Espero que seja útil, qualquer sugestão é bem vinda. Att Ricardo valida_percurso_lazarus.zip
  13. 4 likes
    At revision: 13103 -- ACBrNFeDANFeRL, ACBrNFeDANFeRLRetrato, ACBrNFeDANFeRLPaisagem -- [+] Ajuste para mostrar documentos referenciados em informações adicionais. http://www.projetoacbr.com.br/forum/topic/35910-mostrar-chave-da-nota-fiscal-eletronica-em-notas-de-devolução/ [*] Refatoração de informações adicionais, com o desenvolvimento de funções para eliminação de código duplicado nas danfe retrato e paisagem Por : RicardoVoigt/Henrique Leonardo
  14. 3 likes
    por vezes já tive este problema, já ajustei com a opção PrintMode := pmSplit; no entanto parou de funcionar de uma hora pra outra (possivelmente na alteração informada a cima), ai nessa época atualizamos o fast report, ai voltou a funcionar normalmente, por um tempo, depois atualizei o ACBR e voltou a imprimir novamente apenas 30 cm. Na última atualização do ACBr eu reinstalei o FAST junto, não sei se isso tem algo a ver, mas funcionou está imprimindo normalmente. Ainda estou buscando um motivo plausível para isso estar acontecendo no entanto em vários debugs de componente não tive sucesso nenhum.
  15. 3 likes
    Boa tarde a todos, Recebemos o email abaixo da SEFAZ MS, indicando que no estado o ambiente de homologação está na versão 4.00 De: "naoresponda@fazenda.ms.gov.br" <naoresponda@fazenda.ms.gov.br> Responder para: "naoresponda@fazenda.ms.gov.br" <naoresponda@fazenda.ms.gov.br> Data: segunda-feira, 17 de abril de 2017 14:40 Assunto: (NFE@FAZENDA.MS) Nota Técnica (NT) 2016.002, que trata da alteração do leiaute da NF-e, da versão “3.10” para a versão “4.00” =============================================================================================== Nota Técnica (NT) 2016.002: alteração do leiaute da NF-e, da versão “3.10” para a versão “4.00” =============================================================================================== *** Favor NÃO responder este e-mail, quaisquer dúvidas, encaminhar um Fale Conosco pelo endereço www.nfe.ms.gov.br *** *** ou contatar a equipe de atendimento da SEFAZ-MS pelo telefone (67) 3318-3600 *** Prezado emissor de Nota Fiscal Eletrônica, A Secretaria de Estado de Fazenda de Mato Grosso do Sul já liberou, desde 17/04/2017, em ambiente de HOMOLOGAÇÃO (ambiente de testes), a possibilidade para aquelas empresas emissoras de NF-e transmitirem os arquivos XML na versão “4.00”. Antecipando a data de liberação em ambiente de homologação prevista, que será 01/06/2017, na NT 2016.002, versão 1.10. As necessidades de alteração de leiaute da NF-e são agrupadas durante um tempo e acabam compondo uma versão nacional anual, ou a cada dois anos. O objetivo é evitar alterações frequentes do leiaute da NF-e, de maneira a diminuir a necessidade de manutenção nos sistemas de emissão de NF-e para as empresas e para as SEFAZ. A exceção a esta regra é motivada pelas adaptações necessárias na mudança de legislação, que normalmente têm um porte menor, mas que também devem cumprir um cronograma capaz de ser observado pelas empresas e pelas SEFAZ autorizadoras. A última revisão de leiaute foi feita em 2014. Atualmente o leiaute da NF-e está na versão “3.10” e a NT 2016.002 tem o objetivo de divulgar: – Alterações necessárias para a migração da versão “3.10” para a versão “4.00” do leiaute da NF-e; – Alterações em regras de validação, principalmente aquelas vinculadas aos novos campos ou a novos controles, melhorando a qualidade da informação prestada pelas empresas e mantida pelas SEFAZ. – Definição do protocolo TLS 1.2 ou superior como padrão de comunicação. – Será eliminado o uso de variáveis no SOAP Header (eliminada a “Área de Cabeçalho”) na requisição enviada para todos os Web Services previstos no Sistema NFE. Os prazos previstos para a implementação das mudanças são: – Ambiente de Homologação (ambiente de teste das empresas): 01/06/2017 – Ambiente de Produção (ambiente com validade jurídica): 01/08/2017 – Desativação da versão 3.10: 02/04/2018 O Download da NT 2016.002, versão 1.10, pode ser realizado pelo link: http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=c4S6yXTKpXY= Seguem as URL’s para a realização dos teste: https://homologacao.nfe.ms.gov.br/ws/NFeAutorizacao4 https://homologacao.nfe.ms.gov.br/ws/NFeRetAutorizacao4 https://homologacao.nfe.ms.gov.br/ws/NFeConsultaProtocolo4 https://homologacao.nfe.ms.gov.br/ws/NFeStatusServico4 https://homologacao.nfe.ms.gov.br/ws/NFeInutilizacao4 Secretaria de Estado de Fazenda de Mato Grosso do Sul Equipe NF-e
  16. 3 likes
    A recompilação do ACBrInstall_trunk2 resolveu, grata!
  17. 3 likes
    Já está na fila para analise... Obrigado pela contribuição Marcelo...
  18. 3 likes
    A NFe 4.0 ainda não está em vigor. Segundo a NT 2016.002 (https://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=c4S6yXTKpXY=) O ACBr já gera o XML na versão 4.0, basta configurar a propriedade ACBrNFe1.Configuracoes.Geral.VersaoDF := ve400, entretanto, ainda não foram liberados os Schemas para validação do XML, então você terá um erro ao tentar enviar a nota no layout novo. Os novos webservices também terão segurança maior, exigindo protocolo TLS 1.2, portanto, leia os seguintes tópicos:
  19. 3 likes
    Olá pessoal, Acabei de enviar para o SVN, modificações para que o ACBrDFe e ACBrDFeOpenSSL suportem comunicação segura usando TLS 1.2 O componente ACBrNFe, já irá tentar ajustar a comunicação para TLS 1.2, se detectar que a versão é superior a 3.1 Atualizando o OpenSSL Para usar TLS 1.2, é necessário ter a versão do OpenSSL superior a 1.0.1, normalmente a versão usada é a 0.9.8.14, e portanto ela precisa ser substituída. Se você tentar utilizar uma versão inferior, o ACBrDFeOpenSSL acusará o seguinte erro: Porém não basta apenas baixar e copiar uma nova versão das DLLs do OpenSSL (libeay32.dll e ssleay32.dll). O problema, é que a libxmlsec, que se encontra na pasta: "ACBr\DLLs\XMLSec", não é compatível com OpenSSL superior a 0.9.8... e se você simplesmente atualizar as Libs do OpenSSL no seu sistema, provavelmente o ACBrNFe, passará a acusar Exceptions no momento de assinar o XML A solução, é utilizar um novo conjunto de DLLs, da OpenSSL e libXmlSec, libXML, e demais... você pode achar essas DLLs em: ftp://ftp.zlatkovic.com/libxml/ Essas DLLs foram compiladas com "MinGW", e portanto elas precisarão das DLLs de RunTime, da MinGW. Para sua conveniência, copiamos todas as DLLs necessárias para a pasta: \ACBr\\DLLs\XMLSec\MinGW. Observe que temos a versão 32 e 64 bits dessas DLLs... quais eu devo usar ? Em resumo, use 32 se o seu Compilador é 32 bits, e 64 apenas se você estiver usando um Compilador que gere .EXE em 64 bits... Leia esse tópico, para compreender melhor: Copie TODAS as DLLs (e não somente algumas) da pasta "\ACBr\DLLs\XMLSec\MinGW\32" ou "\ACBr\trunk2\DLLs\XMLSec\MinGW\64" (conforme o seu compilador), para o seu diretório de DLLs... (se não tem certeza para onde você deve copiar as DLLS, leia com atenção o Post indicado anteriormente) Outro problema, é que a MinGW, gera as DLLs com uma nomenclatura ligeiramente diferente do VisualC, exemplo: libxmlsec1.dll com MinGW, e "libxmlsec.dll" com VisualC. Portanto, o ACBr teria dificuldades em encontrar essas DLLs e carrega-las de forma dinâmica. Precisamos portanto, informar ao ACBr, que usaremos o conjunto de DLLs no formato da MinGW... Isso é feito, editando o arquivo: ACBr.inc. Repare que lá no final do ACBr.inc, temos a seguinte linha: {.$DEFINE USE_MINGW} Apenas remova o ".", alterando para: {$DEFINE USE_MINGW} Pronto... com isso você estará pronto para usar o ACBr com OpenSSL e TLS 1.2, seja em 32 ou 64 bits... Obrigado... e considere nos ajudar, contratando o SAC ocasionalmente: http://www.projetoacbr.com.br/forum/sacv2/sobre/ http://www.projetoacbr.com.br/forum/sacv2/questoes_importantes/ http://www.projetoacbr.com.br/forum/sacv2/cadastro/
  20. 2 likes
    A assinatura desse método da forma que foi implementada compila apenas em Lazarus, não em Delphi. Substituam o arquivo a seguir e façam a instalação do ACBr novamente. Testei em Lazarus e Delphi XE5. pcnGerador.pas
  21. 2 likes
    Realmente haviam problemas nos fontes... Já no SVN...
  22. 2 likes
    Bom dia Kiko. Realmente se colocar o caminho do certificado sem apertar o botão resolve o problema. Valeu pela dica. Daniel imaginei mesmo que o problema seria na maquina. Inclusive esses dias eu estava com problemas para abrir uma NF-e em PDF utilizando o adobe em um windows server 2008 e dava erro (somente nessa maquina). Então mudei a propriedade dos arquivos pdf para abrir no browser dessa maquina e pronto... problema solucionado. Mas é cada uma que aparece né.
  23. 2 likes
    Bom dia! Testado e funcionando. Obrigado. Marcos
  24. 2 likes
    Disponibilizada nova versão para usuários do SAC.
  25. 2 likes
    A título de colaboração, segue mais um detalhe sobre a abrangência da NT 2016/002. Ela trata da atualização de leiaute XML para documentos Fiscais, modelo 55 e modelo 65, NFe e NFCe respectivamente. Há uma confusão com outra questão relacionada especificamente a leiaute DANFE NFCe 4.0, este assunto é tratado em outra NT, e diz a respeito tão somente nos ajustes quanto a impressão da Nota Fiscal Consumidor Eletrônica. Quanto aos prazos, ontem foi publicada uma atualização da NT em questão, prorrogando a desativação do XML atual (versão 3.10), para 02/04/2018.
  26. 2 likes
    O texto do email que utilizamos por aqui é o seguinte: **************** inicio ****************************** Correspondencia gerada automaticamente, favor nao responder. Segue anexo arquivo XML de nota fiscal eletrônica: Dados do Emitente: [EmitNome] [EmitFantasia] CNPJ: [EmitCNPJCPF] IE: [EmitIE] Dados do Destinatário: [DestNome] CNPJ: [DestCNPJCPF] IE: [DestIE] Dados da NF-e: Chave de Acesso: [ChaveNFe] Numero da Nota Fiscal: [NumeroNF] Valor da Nota Fiscal: R$ [ValorNF] Data de Emissão: [dtEmissao] A autenticidade dessa nota fiscal pode ser verificada em http://www.nfe.fazenda.gov.br/ **************** final ****************************** e o assunto: NF-e no. [NumeroNF] emitida por [EmitNome] fica a sugestão . . .
  27. 2 likes
    OK, enviei as modificações para o SVN
  28. 2 likes
    Pelo que pesquisei, o problema " NTE_BAD_PROV_TYPE - 0x80090014L", pode estar relacionado ao tipo de certificado CNG - "Cryptography API: Next Generation". O código escrito na ACBrDFeWinCrypt.pas previa apenas certificados CSP - "Cryptographic Service Providers" Fiz algumas modificações na Unit... por favor teste com a Unit em anexo ACBrDFeWinCrypt.pas
  29. 2 likes
    Veja ainda, o Log do ACBrSAT.. nele há o XML que foi enviado, e o número da sessão... abaixo no Log, estará a resposta do SAT, compare o número da sessão, e o XML devolvido pelo SAT. Você pode usar o site: https://www.base64decode.org/ para decodificar a resposta do SAT, que está em Base64
  30. 2 likes
    Olá Thiago, Na pasta ACBrMonitorPlus tem um arquivo chamado ACBrMonitor.chm. Abra esse arquivo e depois a opção Comandos do Objeto SAT. Veja o exemplo em SAT.CancelarCFe. A forma de envio pode ser a mesma que você está usando, sem problemas.
  31. 2 likes
    Bom dia. Atualizamos um cliente com essa nova versão do ACBrNFe e também é apresentado o erro Parâmetro incorreto. Estou acompanhando o tópico. Obrigado!!!
  32. 2 likes
    So uma coisa este for for I := 0 to anexos.Count-1 do begin ACBrMail1.AddAttachment(anexos); end; Não deveria ser assim for I := 0 to anexos.Count-1 do begin ACBrMail1.AddAttachment(anexos.Strings[I]); end;
  33. 2 likes
    Boa tarde, não está gerando a TAG ICMS: [ICMS001] Orig=0 CST=49 --> ERRADO Se for Simples Nacional: [ICMS001] Orig=0 CSOSN=101, 102, 201, 202, 300, 400, 500, 900 --> Um destes, você precisa saber qual usar. Se for Regime Normal: [ICMS001] Orig=0 CST=00, 10, 20, 40, 41, 60, 90 --> Um deste, você precisa saber qual usar. Leia o Manual de Especificação: https://portal.fazenda.sp.gov.br/servicos/sat/Downloads/Especificacao_SAT_v_ER_2_20_06.pdf Sds, Ricardo.
  34. 2 likes
  35. 2 likes
    Notei que sua Unit está um pouco desatualizada.. Mas efetuando uma comparação notei que a sua sugestão, seria implementar um bloco Try/Except na chamada de "GetCNPJFromExtensions"... Seria isso ? try if CNPJ = '' then CNPJ := GetCNPJFromExtensions(FCertificado); except end;
  36. 2 likes
    Windows UI Dialog to show existing certificates is problematic... Now you can built your own Window, to select the certificate, using ACBrNFe1.SSL.LerCertificadosStore and ACBrNFe1.SSL.ListaCertificados[] ... Check this code in Demo: procedure TForm1.sbtnGetCert1Click(Sender: TObject); var I: Integer; begin frSelecionarCertificado := TfrSelecionarCertificado.Create(Self); try ACBrNFe1.SSL.LerCertificadosStore; For I := 0 to ACBrNFe1.SSL.ListaCertificados.Count-1 do begin with ACBrNFe1.SSL.ListaCertificados[I] do begin if (CNPJ <> '') then begin with frSelecionarCertificado.StringGrid1 do begin RowCount := RowCount + 1; Cells[ 0, RowCount-1] := NumeroSerie; Cells[ 1, RowCount-1] := RazaoSocial; Cells[ 2, RowCount-1] := CNPJ; Cells[ 3, RowCount-1] := FormatDateBr(DataVenc); Cells[ 4, RowCount-1] := Certificadora; end; end; end; end; frSelecionarCertificado.ShowModal; if frSelecionarCertificado.ModalResult = mrOK then edtNumSerie.Text := frSelecionarCertificado.StringGrid1.Cells[ 0, frSelecionarCertificado.StringGrid1.Row]; finally frSelecionarCertificado.Free; end; end;
  37. 2 likes
    Caro Fabrício vá ate a propriedade Gera > ExibirErroSchema do componente ACBRNFe coloque false. se não ele não vai cair na exeção nunca. Dai você pode criar uma variável para guardar o estado do retorno do webservice para poder tratar o erro de acordo com o número do erro retornado. try cChaveNFCe := Copy( dm.ACBrNFe.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44 ); dm.ACBrNFe.Enviar( pNumNota, True, False ); except vNFCeStatus := DM.ACBrNFe.WebServices.Retorno.cStat; case vNFCeStatus of 100 ://nota fiscal autorizada dentro do prazo de 24 horas begin // NOTA FISCAL AUTORIZADA PARA USO end; 150 ://nota fiscal autorizada fora do prazo de 24 horas begin end; 204, 539 : //duplicidade da nfce begin end; end; end; Mensagem := Trim( Format('Chave:%s'#13'Protocolo: %s'#13'Recibo: %s'#13'Nº Nota: %d ', [ dm.acbrnfe.NotasFiscais.Items[0].NFe.procNFe.chNFe, dm.acbrnfe.NotasFiscais.Items[0].NFe.procNFe.nProt, formatdatetime('dd/mm/yyyy hh:mm:ss', dm.acbrnfe.NotasFiscais.Items[0].NFe.procNFe.dhRecbto ), dm.acbrnfe.NotasFiscais.Items[0].NFe.Ide.cNF ] ) ); Dependendo do erro você poderá tratar de acordo o mesmo. Espero que tenha ajudado. Contribuir de verdade tem que ser nosso lema
  38. 2 likes
    Boa noite Ricardo, Parabéns pelo trabalho e por compartilhar. Quando compartilhamos conhecimento todos aprendem inclusive quem compartilha.
  39. 2 likes
    Pessoal, boa tarde Depois de muito bater a cabeça a rotina de Distribuição do CTe está funcionando perfeitamente. Atentar-se ao ambiente colocado no componente e principalmente os parâmetros gerais SSL, porque ao alterar a SSL, os demais parâmetros não estão sendo alterado. Segue abaixo o código para distribuição. CTE := TACBrCTe.Create( nil ); CTE.Configuracoes.Geral.Salvar := true; CTE.Configuracoes.Arquivos.PathSalvar := ExtractFilePath(Application.ExeName) + '\Log'; CTE.Configuracoes.Arquivos.PathSchemas := ExtractFilePath(Application.ExeName) + '\Schemas\CTe'; CTE.Configuracoes.Geral.ModeloDF := moCTe; CTE.Configuracoes.Geral.VersaoDF := StrToVersaoCTe(b_ok, '3.00'); CTE.Configuracoes.WebServices.Ambiente := taProducao; CTE.Conhecimentos.Clear; CTE.Configuracoes.Certificados.ArquivoPFX := qAux.FieldByName('CERTIFICADOSSL').asString; CTE.Configuracoes.Certificados.Senha := qAux.FieldByName('SENHACERTIFICADOSSL').asString; CTE.Configuracoes.Geral.SSLLib := libOpenSSL; CTE.Configuracoes.Geral.SSLCryptLib := cryOpenSSL; CTE.Configuracoes.Geral.SSLHttpLib := httpOpenSSL; CTE.Configuracoes.Geral.SSLXmlSignLib := xsXmlSec; CTE.DistribuicaoDFePorUltNSU(i_codUf, RetiraCaracter(s_cgccfo), qAux.FieldByName('ULTIMONSUCTE').asString); for I := 0 to CTE.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count-1 do begin if CTE.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resCTe.chCTe <> '' then begin CTE.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.XML; end; end; Espero ter ajudado.
  40. 2 likes
    At revision: 13106 -- ACBrNFeDANFeRL -- [*] Refatoração de ManterDocReferenciados para retornar a informações sem quebra de linha. [*] Refatoração de ManterInfContr, ManterObsFisco, ManterProcreferenciado. Por : Henrique Leonardo
  41. 2 likes
  42. 2 likes
    Obrigado pelo bugreport... correção já está no SVN
  43. 2 likes
    Boa Tarde. Reabrindo esse tópico, acabei de encontrar um problema semelhante com o destacado aqui, no meu caso o erro ocorre já quando tento selecionar o certificado, já instalamos em outra máquina e ocorre o mesmo erro, um detalhe é que tentamos em uma versão mais antiga do sistema (bem antiga) e ai ele funcionou perfeitamente, verifiquei que ocorre erro em: AExtension := IInterface(Cert.Extensions.Item) as IExtension; do arquivo ACBrDFECapcom, aqui está na linha 242, meu ACBr foi atualizado a alguns dias, apenas fiz o tratamento da exceção e ai funcionou perfeitamente, inclusive autorizou NFe, segue para análise caso interesse: try if CNPJ = '' then CNPJ := GetCNPJFromExtensions(FCertificado); except end; Estou usando Delphi XE2 testei com Capcom e CapcomDelphiSoap Grato
  44. 2 likes
    Pessoal o problema é bem simples, em alguns equipamentos tivemos este mesmo problema, existe dois passos que revolve isso. Deu muito trabalho descobrir porque em alguns equipamentos funcionava muito bem, mas em outros perdia a comunicação. Isto acontece porque em alguns computadores as USB tem velocidades não compatível com a impressora e você tem que colocar alguns parâmetros para que possa compatibilizar a velocidade com a impressora. Primeiro tente mudar o time-out de 100 para 1000 e o intervalo de 10 para 15. Esses parâmetros eu peguei no próprio software da Bematech e resolveu o problema. Se Persistir mude na ACBR o Componente ControlePorta=True e depois DEVICE e vai no Componente HANDSHAKE Coloque hsDTR_DSR no Controle da Porta.
  45. 2 likes
    Boa tarde Ronaldo, Muito obrigado pela colaboração, ainda hoje estarei enviando para o repositório.
  46. 2 likes
    Bom dia. A função "MontarCampoNossoNumero" tem como retorno, a string do "Nosso número" montada, conforme é impressa no boleto. Ex: CdsBoletonossonumero.value := ACBrBoleto.Banco.MontarCampoNossoNumero(Titulo); att.
  47. 2 likes
    Pessoal, só para registro, consegui resolver o problema do access violation quando acionado o ACBrNFe1.NotasFiscais.Validar. No meu caso o problema estava na dll libxml2.dll, Essa dll não tem informação de versão em suas propriedades, mas a versão que estava na minha máquina tinha 953 kb, e a dll que é distribuida com o ACBr tem 964 kb, eu substitui a minha pela versão distribuida pelo ACBr, e o problema foi resolvido.
  48. 2 likes
    Bom dia! Para funcionar deve ser mantida a regra anterior que era essa: Copy(Cedente.Conta,Length(Cedente.Conta),1) + // 384 a 384 Cedente.ContaDigito + Space(6) + // 385 a 391 No fonte atual desprezaram a regra que mencionei acima. Segue o fonte atual: Cedente.ContaDigito + Space(6) + // 384 a 391
  49. 2 likes
    Boa tarde. Conforme pode ser percebido pelo texto da ocorrência, a mesma irá cancelar somente o abatimento, acredito que a correta seja a RemessaBaixar. Att.
  50. 2 likes
    Existe uma tag no XML da NF-e/NFC-e a cNF, conforme nota técnica e manual, ela DEVE ser um um número aleatório, porque? Ela faz parte da geração da chave da NF-e, ela traz segurança não permitindo esse tipo de prática, já que fica muito complicado alguém gerar uma chave desconhecendo o número aleatório gerado no momento da criação da chave. Muitas empresas adotam a prática de utilizar um número fixo ou o próprio número da NF-e/NFC-e, isso leva a este tipo de problema. A tag XMLAut não serve para isso, ela serve para restringir o download, veja, um usuário de posse da chave pode consultar a NF-e/NFC-e e fazer parsing da página de consulta gerando um XML ou lendo os dados que necessitar, o correto é utilizar a tag que foi criada para isso, ou seja, cNF, basta gerá-la corretamente como manda o manual e a seguranças será incrementada e dificultará em muito o acesso aos dados.