Jump to content

2 Dia do ACBr

Visite Stands dos Patrocinadores
Control iD, CS Devices, Elgin, Gertec, Bematech, Jetway, PlugMobile, Epson, Custom e Sweda
Inscreva-se

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Leaderboard


Popular Content

Showing content with the highest reputation since 08/16/2019 in all areas

  1. 2 points
    Boa tarde a todos, Para quem utiliza o componente ACBrCTe e estava com dificuldades de gerar o Hash de Entrega, poderá se utiliza de uma das duas funções que acabam de ser disponibilizadas na unit ACBrDFeUtil. São elas: function CalcularHashDados(const ADados: TStream; AChave: String): string; Devemos utilizar a função acima quando a imagem esta armazenada no banco de dados, neste caso o conteúdo da mesma é passado como Stream no primeiro parâmetro da função, já o segundo é a chave do CT-e. A função retorna uma string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega Exemplo: infEvento.detEvento.hashEntrega := CalcularHashDados(xStreamImagem, xChaveCTe); e function CalcularHashArquivo(const APathArquivo: String; AChave: String): string; Devemos utilizar a função acima quando a imagem esta salva em disco, neste caso o primeiro parâmetro da função é o path com o nome do arquivo (imagem) e o segundo é a chave do CT-e. A função retorna a string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega Exemplo: infEvento.detEvento.hashEntrega := CalcularHashArquivo(xPathImagem, xChaveCTe);
  2. 2 points
    Daniel, funcionou perfeitamente. Muito obrigado pela atenção.
  3. 2 points
    A partir da versão 1.2.0.70 a tag QRCode será adicionada automaticamente. Basta atualiza o mesmo para ultima versão.
  4. 2 points
    Bom dia Maikon, Na unit pgnreGNREW.pas a alteração abaixo não resolveria o problema? Gerador.wCampo(tcStr, '', 'documentoOrigem ', 01, 18, 1, GNRE.c04_docOrigem, '', True, 'tipo="' + FormatFloat('00', GNRE.c28_tipoDocOrigem) + '"'); Desta forma não seria necessário alterar o tipo do campo c28_tipoDocOrigem de Integer para String.
  5. 2 points
    Não creio que compilação em 64 bits irá lhe trazer performance nesse quesito... Me parece que você precisa rever suas Querys ou maneira que acessa o BD, e duração das transações
  6. 2 points
    Bom dia. Neste caso se desejar contribuir com este ajuste, basta realizar as alterações nos arquivos cidades.ini , webISS.ini e WebISSv2.ini e então realizar os testes. Se tiver dúvidas, nosso colega @Italo Jurisato Junior, mestre do ACBrNFSe poderá lhe auxiliar. Att.
  7. 2 points
    Já consegui resolver olhando o tópico. https://quality.embarcadero.com/browse/RSP-20780?jql=text ~ "GetIt Internal Error" no meu \ Users \ Documents \ Embarcadero \ Studio \ 20.0 \ CatalogRepository. Eu removi a pasta do Fast Report e seu conteúdo e ai consegui instalar.
  8. 2 points
    Tente LarguraBobina=250 e vá fazendo um ajuste fino, aumentando o valor...
  9. 2 points
    Boa tarde a todos, Já esta disponível em nossa biblioteca a Nota Técnica 2019/001 que trata sobre novas regras de validação. Resumo da NT: · Dificultar utilização de código de segurança fraco · Melhorar o controle de documentos referenciados e da identificação do destinatário · Descrever benefícios fiscais e informações da tributação do ICMS com mais precisão · Criação de valor máximo para a base de cálculo do ICMS, por unidade federada · Melhor gerenciamento de informações sobre o destinatário, tanto no serviço de autorização de NF-e quanto no serviço de registro de EPEC Datas previstas para entrada em vigor: 01/07/2019 - Ambiente de Homologação; 02/09/2019 - Ambiente de Produção. Alterações no componente: Nenhuma, visto que essa NT trata de novas regras de validação a serem implementadas pelas SEFAZ-Autorizadoras. Novas Regras de Validação: Criada a Regra de Validação B03-10, para dificultar a utilização de um código de segurança fraco, ou seja, o valor de cNF não vai poder ser igual ao valor de nNF e sim um numero aleatório. Criadas regras de validação a documentos referenciados:  Regra de Validação BA10-40 foi alterada, possibilitando a utilização do CNPJ 8 (somente os 8 primeiros dígitos) com o objetivo de identificar que a nota foi emitida pelo mesmo contribuinte, a critério da unidade federada. Criada a Regra de Validação BA10-50, exigindo que uma contranota de produtor rural somente possa referenciar uma nota emitida por outro produtor rural, a critério da unidade federada. Criada a Regra de Validação BA20-20, impedindo que seja referenciado um documento fiscal de uso exclusivo para operações internas em uma operação destinada a outra unidade federada ou para o exterior. Criada a Regra de Validação BA20-30, impedindo referência a um Cupom Fiscal, a critério da unidade federada. Criadas regras de identificação do destinatário: Criada a Regra de Validação E03a-30, impedindo o uso simultâneo de IE e de identificação de estrangeiro para o destinatário. Criada a Regra de Validação E14-30, impedindo informação de país de destino “Brasil” em operações destinadas ao estrangeiro. Criada a Regra de Validação E16a-40, exigindo a indicação de “operação com consumidor final” quando se indica que a operação é destinada a não contribuinte. Criadas regras de validação tornando obrigatória a informação do Motivo da Desoneração e do Valor do ICMS desonerado, caso seja informado o Código do Benefício Fiscal: Criada a Regra de Validação I05f-10, impedindo a informação de um código de benefício fiscal juntamente com um CST que não prevê benefício fiscal, a critério da unidade federada. Criada a Regra de Validação I05f-20, impedindo a informação de um código de benefício fiscal que não corresponda ao CST utilizado, a critério da unidade federada. Criada a Regra de Validação I05f-30, exigindo que seja informado o valor do ICMS desonerado ou o motivo de desoneração quando se utiliza um código de benefício fiscal, a critério da unidade federada. Criada a Regra de Validação N07-10, exigindo informações sobre o diferimento quando se utiliza um CST de diferimento, a critério da unidade federada. Criada a Regra de Validação N12-84, exigindo o código de benefício fiscal quando se utiliza um CST de benefício fiscal, a critério da unidade federada. Criada a Regra de Validação N12-88, exigindo que o CST corresponda ao tipo de código de benefício fiscal informado, a critério da unidade federada. Criada a Regra de Validação N12-90, exigindo valor do ICMS desonerado e o motivo da desoneração, a critério da unidade federada. Criada a Regra de Validação N18-10, exigindo a informação do percentual da margem de valor Adicionado do ICMS ST Informada caso a modalidade de determinação da BC da ST seja MVA, a critério da unidade federada. Criada a Regra de Validação N18-20, não permitindo informação do percentual da margem de valor Adicionado do ICMS ST Informada caso a modalidade de determinação da BC da ST não for MVA, a critério da unidade federada. Criada a Regra de Validação W03-20, impedindo a informação de um valor de Base de Cálculo superior ao valor máximo estabelecido pela respectiva SEFAZ. Emitente: Criada a Regra de Validação 1C03-10, impedindo a informação de Razão Social do emitente diferente da existente no cadastro da SEFAZ. Destinatário: Criadas as Regras de Validação 5E17-10, 5E17-20, 5E1730, 5E17-40, 5E17-43, 5E17-46, 5E17-50, 5E17-60, 5E17-63, 5E17-70 e 5E17-80, para verificar se o destinatário está sendo informado corretamente ou se está em situação que o impeça de constar na NF-e como destinatário na operação com mercadoria ou prestação de serviços.  Serviço Autorização EPEC: Criadas as Regras de Validação 6P31-10, 6P31-20, 6P31-30, 6P31-40, 6P31-43, 6P31-46, 6P31-50, 6P31-60 e 6P31-63, para verificar se o destinatário está sendo informado corretamente ou se está em situação que o impeça de constar na NF-e como destinatário na operação com mercadoria ou prestação de serviços.
  10. 1 point
    Essa Semana me deparei com problemas dos famosos GERTEC MT720 antigos, onde há o problema de perder a conexão, o que acontece é o seguinte se não houver comunicação em 30 segundos ele reinicia, isso é do próprio software dele, com a DLL da GERTEC funciona porque deve comunicar de tempo em tempo, então para sanar o problema tem quer enviar algo de 30 em 30 segundos, coloquei um timer e estou enviando MTer.VerificarOnline('x.x.x.x'); e resolveu o problema. 20/08/2019 16:47:33: Desconectou IP: 192.168.25.42 - Erro: 10054 - Connection reset by peer 20/08/2019 16:47:35: Conectou IP: 192.168.25.42 20/08/2019 16:48:05: Desconectou IP: 192.168.25.42 - Erro: 10054 - Connection reset by peer 20/08/2019 16:48:07: Conectou IP: 192.168.25.42 20/08/2019 16:48:37: Desconectou IP: 192.168.25.42 - Erro: 10054 - Connection reset by peer 20/08/2019 16:48:39: Conectou IP: 192.168.25.42 Terminal: 192.168.25.42 - On Line Resposta: OnLine Terminal: 192.168.25.42 - On Line Resposta: OnLine Terminal: 192.168.25.42 - On Line Resposta: OnLine
  11. 1 point
    Temos o sistema instalado em cada micro, mas o atalho do sistema chama um "atualizador", que verifica se tem uma versão nova do sistema no servidor, se tiver, baixa o executável compactado, descompacta e depois abre o sistema; Se não tem atualização nova só abre o sistema.
  12. 1 point
    Na verdade é uma String... mas você pode passar o INI com as quebras de linha... Seria equivalente a um TStringList.Text
  13. 1 point
  14. 1 point
    Olá, Tente esse comando: PostMessage(frm_pdv.Handle, WM_CLOSE, 0, 0); Abraço
  15. 1 point
    Bom dia Luciano. Conforme pode ser acompanhado nas postagens anteriores, houveram questões importantes que ficaram pendentes, as quais impedem a inclusão destes fontes ao Projeto ACBr. Att.
  16. 1 point
    Bom dia, Daniel, realizei o procedimento indicado, estou acompanhando diariamente o cliente e até o presente momento o problema não voltou a ocorrer. Grato Luciano
  17. 1 point
  18. 1 point
    Liberação do ambiente de Produção. Vide noticia sobre essa nova versão da Nota Técnica em: Nota Técnica 2019/001 versão 1.20
  19. 1 point
    Atualizei o Monitor e Realmente Resolveu. Pode Fechar Topico Obrigado.
  20. 1 point
    Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
  21. 1 point
    Boa tarde Maikon, Muito obrigado pela colaboração, vamos analisar e se estiver tudo OK, vamos enviar para o repositório.
  22. 1 point
    Bom, eu coloquei aqui a mesma informação no campo 133 e 135 na procedure ConteudoToProperty e ambos retornaram as informações. Quando for crédito irá ler o campo 135 e quando for débito o campo 133. Se deixar apenas no campo 135 não irá retornar o CodigoAutorizacaoTransacao! Se puderem analisar... ACBrTEFDCliSiTef.pas
  23. 1 point
    Resolvido. O cliente tinha a inscrição estadual , problema era só esse.
  24. 1 point
    Wagner, nesse caso deve-se encerrar o mdfe e fazer um novo, no meu entendimento, como origem a UF que ele está no momento até o destino final,Pede pra ele te mandar, uma chave de acesso de um mdfe que consta isso, provavelmente esse outro sistema realiza alguma impressão, ou algo que é fora dos padrões aceitos pela sefaz, pois no Encerramento não há como informar isso.
  25. 1 point
    Olhem no site da NF-e acabou de ser publicada versão 1.20 da Nota técnica.
  26. 1 point
    Bom dia Marcio, Esse provedor na verdade não esta implementado 100% pelo simples fato de usar uma forma de assinar totalmente diferente dos demais.
  27. 1 point
    Bom dia. Conforme informação recebida da SEFAZ-SC, as novas validações listadas a seguir estão disponível no ambiente de homologação e, em estarão em produção apartir de 21/10/2019. 4008 - Verifica se a quantidade do produto é negativa: a fim de equiparar os critérios de validação do Bloco X à EFD, será recusado estoque com quantidade negativa. 3026 e 4021 - Verifica se o código CEST informado é válido para o NCM/SH do produto: NCMs 34011190, 34011900, 34011900, 34012010 e 34013000 aceitarão somente os CESTs 2003400, 2003500, 2003501, 2003600, 2003700, 2802000, 2802100, 2802200 e 2802300. Att.
  28. 1 point
    Guardo os xmls em uma pasta, e o numero de recibo guardo no banco de dados apenas...
  29. 1 point
  30. 1 point
    Boa tarde. Veja esta sessão do manual do ACBrMonitorPlus https://acbr.sourceforge.io/ACBrMonitor/SwHouse.html Att.
  31. 1 point
    Boa tarde, Para gerar a Linha Digitável nesse formato, basta obter o código de Barras chamando o método MontarCodigoBarras e posteriormente chamar o o método: MontarCodigoBarras passando o código de barras e o objeto Título como parâmetro. ex: ACBrBoleto1.Banco.MontarLinhaDigitavel(ABarras, ACBrBoleto1.ListadeBoletos[0] );
  32. 1 point
    Hoje não existe webservice que retorne o estado atual da manifestação de uma NFe, exceto fazendo algumas gambiarras usando os Schemas do aplicativo gratuito de manifestação. Mas se você está recebendo apenas o resumo ao executar o método DistribuicaoDFePorChaveNFe, é quase certo que a NFe não foi manifestada, ou se foi manifestada ainda não processou essa manifestação a fim de devolver o XML completo. Se a sua aplicação faz a manifestação ela pode controlar qual nota foi manifestada ou não, e qual manifestação foi enviada. Pela Nota Técnica o destinatário da NFe não vai receber o XML completo até que faça a manifestação (Ciência ou Confirmação de operação). Algum tempo atrás foi reportado um bug no webservice que também não retornava o XML completo caso a manifestação tenha sido Operação não realizada. Manifestação como Desconhecimento da operação também não retornam o XML completo, de acordo com a NT. Já outros interessados na NFe, como o transportador com CNPJ informado na nota, ou terceiros com CPF ou CNPJ informados na tag <autXML> recebem a nota completa, independentemente de haver manifestação pelo destinatário.
  33. 1 point
    Bom dia pessoal, tudo certo? Gostaria de sugerir uma alteração na tag "c28_tipoDocOrigem" dentro do GNRE visando alterar o tipo da propri edade de integer para string pois o manual da versão 2.0 pede que a tag contenha 2 caracteres e por ser integer quando eu escolho o tipo de documento por exemplo 1 ao invés de ficar 01 está ficando 1 no xml e gerando uma rejeição do schemas. Abaixo estão os arquivos alterados. Caso eu esteja equivocado em alguma alteração por gentileza peço que me corrijam. Agradeço desde já. pgnreGNREW.pas pgnreGNRE.pas ACBrGNREGuias.pas
  34. 1 point
  35. 1 point
    Bom dia, marcio takano. O provedor já foi implementado, basta verificar se a cidade solicitada é atendida e se a mesma está no arquivo cidades.ini. Veja a pasta exemplos\ACBrDFe\ACBrNFSe\.
  36. 1 point
    Bom dia. Houve retorno do banco informando que o título foi registrado? Att.
  37. 1 point
    Verifique se copiou as DLLs para os locais corretos:
  38. 1 point
    Obrigado, Ítalo. Vou atualizar e posto o resultado. Muito obrigado, mais uma vez!
  39. 1 point
    Tente informar o CPF explicitamente como terceiro parâmetro no comando de cancelamento: NFE.CancelarNFe("31190800046756078615559200000000011100000016","ERRO DE EMISSAO DE NFE ","46756078615")
  40. 1 point
    Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
  41. 1 point
    bom dia, vou testar e coloco o resultado.
  42. 1 point
    Na relação de serviços web do portal nacional da NFe não consta o webservice para consulta de cadastro para a SVAN usada pelo PA. (O PA vai trocar pra SVRS a partir do dia 02/09/2019). http://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs= Nesse caso precisa ver no portal estadual se o estado tem um serviço próprio.
  43. 1 point
    Mudar a série permite reiniciar a numeração da nota fiscal. Se você usa a série 1 e atinge o número 999.999.999 pode alterar para série 2 e reiniciar a numeração do 1. Quando se é emitido nota fiscal por vários terminais simultaneamente, como no caso da NFCe em um supermercado, por exemplo, é recomendado usar séries distintas para cada emissor. Nunca tinha visto falar de "série virtual". Pesquisei e encontrei um ERP que usa esse conceito, com a mesma explicação dada pelo Felipe...
  44. 1 point
    No momento na SEFAZ RS não está mais exigindo nem cbenef e nem icms desonerado!
  45. 1 point
    Bom dia, este desenvolvimento está em andamento... Em breve já subiremos para o SVN as classes com a estrutura WebService para o componente boleto.
  46. 1 point
    16/07/2019 - ATENÇÃO: Publicada a versão 1.10 da NT 2019.001 Publicada a versão 1.10 da NT 2019.001, que divulga novas regras de validação e atualiza regras existentes da NF-e/NFC-e versão 4.0, com os seguintes objetivos: Criação/Alteração de regras de validação referentes a CST e a Código de Benefício Fiscal, corrigindo algumas regras da versão anterior. Criação de regra de validação correspondente à rejeição 927, para informar os números dos itens em ordem sequencial. Define que a regra de validação referente ao valor máximo da base de cálculo é por modelo de DF-e. Assinado por: Coordenação Técnica do ENCAT Link: http://www.nfe.fazenda.gov.br/portal/informe.aspx?ehCTG=false&Informe=ScmzxWjpJe8=
  47. 1 point
    Olá a todos, Para quem não sabe nas configurações do componente ACBrNFe, temos dentro do grupo Arquivos um subgrupo chamado DownloadNFe, que contem as propriedades PathDownload e SepararPorNome. Através dessas duas propriedades definimos o caminho onde os XML retornados pelo método DistribuicaoDFe vão ser salvos e se desejamos separar por nome ou não. A primeira alteração realizada foi a migração da definição dessas propriedades de configuração da unit ACBrNFeConfiguracoes para ACBrDFeConfiguracoes. A motivação para essa mudança é que a definição dessas propriedades também se encontravam nas units ACBrCTeConfiguracoes, ACBrMDFeConfiguracores e ACBrBPeConfiguracoes, agora temos em apenas um lugar, ou seja, na unit ACBrDFeConfiguracoes. Com essa mudança temos uma redução de código e caso futuramente tenhamos alguma correção ou melhoria, elas serão feitas em apenas um lugar, desta forma agilizando o tempo de manutenção do código. Como nem tudo são flores, quem tem em seu código as linhas para configurar o Download deverá fazer a seguinte alteração para que a aplicação seja compilada com sucesso (exemplo no caso da NF-e): Antes: ACBrNFe.Configuracoes.Arquivos.DownloadNFe.PathDownload Alteração: ACBrNFe.Configuracoes.Arquivos.DownloadDFe.PathDownload Falando em melhoria, antes tínhamos uma função chamada GetPathDownload que tem como finalidade gerar o Path final onde será gravado os XML referentes aos Resumos de Notas e Notas Completas. Agora além da função citada acima temos também a função GetPathDownloadEvento que tem como finalidade gerar o Path final onde será gravado os XML referentes aos Resumos de Eventos e Eventos Completos. O que motivou a criar essa nova função é que antes o DistribuicaoDFe ao salvar os XML referentes aos eventos estava usando o mesmo Path dos eventos enviados, ou seja, estava misturando os eventos enviados com os eventos baixados pelo DistribuicaoDFe. Resumindo, a primeira alteração visou a redução de código nos componentes ACBrNFe, ACBrCTe, ACBrMDFe e ACBrBPe e a segunda visou organização dos XML baixados pelo método DistribuicaoDFe. Qualquer duvida ou problemas, favor postar no fórum.
  48. 1 point
    Bom dia, Só para informar, conseguiram prorrogar o prazo para o início da obrigatoriedade do “Bloco X”. Set/2019 – Comércio Varejista – Farmácia; Jan/2020 – Comércio Varejista de Materiais de Construção; Mar/2020 – Bares, Restaurantes e Similares; Jun/2020 – demais setores. https://www.fecomercio-sc.com.br/noticias/prazo-do-bloco-x-e-prorrogado-apos-reivindicacao-de-entidades-empresarias-em-sc/
  49. 1 point
    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
  50. 1 point
    Boa Noite. Preciso de ajuda, no componente ACBrNFeDANFCeFortes, onde imprime o cupom fiscal, o sistema não está respeitando a impressora, somente imprime na impressora DEFAULT: //Define a Impressora ACBrNFeDANFCeFortes2.Impressora := 'hp LaserJet 3020 UPD PCL 5'; Antes de Imprimir seta a propriedade acima do componente porem só imprime na DEFAULT. Alguém tem alguma idéia do que possa está acontecendo? Verifiquei ainda que no próprio fonte do componente, sempre mostra a impressora DEFAULT, mesmo passando outro valor: if ACBrNFeDANFCeFortes.Impressora <> '' then RLPrinter.PrinterName := ACBrNFeDANFCeFortes.Impressora; Desde já Obrigado
×
×
  • Create New...