Jump to content

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 09/04/2016 in all areas

  1. 92 points
    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. 37 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.
  3. 37 points
    É com prazer que anunciamos que o Dia do ACBr já tem data para acontecer. Em virtude das eleições que deverão ocorrer em outubro, sendo o primeiro turno no dia 07/10 e o segundo no dia 28/10, foi decidido que nosso encontro passará a ocorrer no dia 10/11/2018, desta forma todos poderão realizar seu voto e participar de nosso evento. O Dia do ACBr será realizado nas dependências do Parque Tecnológico de Sorocaba (PTS) situado na cidade de Sorocaba-SP, o qual conta com um amplo e moderno espaço. Vocês não podem perder, reserve esta data na sua agenda. O Evento Contaremos com palestras e workshops com diversos assuntos relacionados aos componentes ACBr, Object Pascal(Delphi/Lazarus), além do ACBrMonitorPlus e nossa novidade, a ACBrLib, entre outros temas relacionados ao nosso universo. Abaixo estão relacionados os palestrantes já confirmados: Daniel S. de Almeida (Fundador do Projeto ACBr) Italo Jurisato Jr (Responsável pelos componentes ACBrNFSe, ACBrBPe, ACBrCTe e ACBrMDFe) Rafael Teno Dias (Responsável pelo ACBrFramework e ACBr libs) José M. S. Junior (Responsável pelo ACBrBoleto e atual mantenedor do ACBrMonitorPlus) Juliomar Marchetti (MVP Embarcadero) Régys Borges da Silveira (MVP Embarcadero) Marcos Douglas B. Santos, responsável pelo blog Object Pascal Programming. Um momento que deverá ser bastante interessante é o Pergunte ao Desenvolvedor, no qual os participantes terão a oportunidade de realizar perguntas diretamente a vários moderadores do projeto ACBr. Além da oportunidade de um dia focado no universo ACBr, será uma grande oportunidade para conhecer os principais mantenedores do projeto, além de ampliar ainda mais seu Networking e conhecer casos de sucesso com o projeto ACBr. Sugestões de Palestras e Palestrantes Os usuários do fórum podem se candidatar para realizar palestras ou sugerir temas que gostariam que fossem abordados durante o evento, assim como indicação de palestrantes. Para se candidatar a palestras você deverá: Enviar resumo do assunto da palestra Descrever a relevância do tema proposto para a comunidade Opcionalmente enviar vídeo e outros materiais sobre o tema proposto Breve Currículo pessoal Para sugerir um tema/palestrante você deverá: Descrever a relevância do tema para a comunidade. Indicar o palestrante que gostaria que realizasse a palestra* (opcional). *Nota: As sugestões de palestrantes não garantem que os mesmos estarão palestrando no evento, somente sinaliza a equipe de organização o interesse da comunidade em ouvir o mesmo. Fique atento, em breve lançaremos nossa página para inscrições e noticias do Dia do ACBr.
  4. 31 points
    Para evitarmos diversos tópicos sobre o mesmo assunto, as alterações relativas a versão 4.00 da NFe/NFCe deverão ser concentradas neste tópico. Os fontes do componente já foram atualizados para permitir gerar os XMLs para essa nova versão. Também já foram ajustados para não gerar o SOAP Header quando configurado para a versão 4.0(ve400). Assim que os schemas e webservices forem disponibilizados pelo SEFAZ, iniciaremos os testes com o componente. Mais informações sobre as mudanças podem ser obtidas na NT 2016.002 - http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=c4S6yXTKpXY= Apenas como informação, neste manual fiquei com dúvida em dois campos: descANP - Campo numérico com tamanho de 2 - 95? O campo tem a seguinte descrição: Descrição do produto conforme ANP, então provavelmente deve ser do tipo carácter e não numérico. O campo vBCFCPSTRet possui o mesmo ID de outro campo na versão 3.10 - N27a - V3.10 vICMSDeson / V4.00 vBCFCPSTRet
  5. 30 points
    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/
  6. 25 points
    Terça, 07/05/2019 Se você está atento as notícias que enviamos periodicamente em nossos Boletins e publicamos aqui nessa área de Notícias do Fórum, já deve ter se preparado e atualizado seus sistemas... mas se ainda não o fez, por favor leia esse artigo, para evitar a parada da emissão de NFe/NFCe em seus clientes finais. Nas versões 1.00 a 1.10 da NT 2018.005, ficou estabelecido que no dia 07/05/2019 entrarão em vigor a exigência de novas validações relativas a NFe/NFCe. (Você pode achar todas as NTs na Biblioteca de nosso SVN) Porém, essas novas regras foram publicas com alguns complicadores, que podem ocasionar a paralisação da emissão de NFe/NFCe. Algumas Tags, somente podem ser enviadas em Produção, a partir do 07/05/19, porém são obrigatórias a partir dessa data. Hora, isso complica tudo.... Ou seja, se enviarmos a Tag em Produção antes de 07/05, o documento será rejeitado, mas se deixarmos de enviar a Tag após 07/05, o documento igualmente será rejeitado... Então, em outras palavras, o ENCAT espera que você aplique uma parametrização ou faça rollout, em TODOS os seus clientes finais, de um dia para outro!!! Afinal, não é uma boa prática de programação, inserir uma constante Hardcoded, como uma Data (07/05/19), na compilação do sistema final. Sem falar no fato de que não é incomum, algumas UFs não aplicarem a exigência na mesma Data publicada... O ENCAT agiu corretamente quando definiu a exigência das novas Tags, em homologação, em uma data anterior... Isso é ótimo, pois dá tempo para as Sw.Houses se ajustarem e testarem as modificações. Porém, o ENCAT poderia definir que as novas Tags são opcionais em Produção, até a data efetiva da exigência (07/05), quando então, passariam a ser obrigatórias... Isso daria tempo necessário, para as Sw.Houses aplicarem a atualização dos sistemas nos clientes finais, a fim de garantir que a emissão de documentos em produção já esteja funcionando Algumas Tags são exigidas ou não a critério da unidade Federativa Afinal o projeto NFe é ou não nacional ? É extremamente complicado para uma Sw.House saber o que pensa cada UF individualmente... A título de exemplo, a equipe do Projeto ACBr, efetuou uma pesquisa para saber se UFs exigiriam o Grupo de Responsável Técnico e se elas iriam ou não criar um portal para cadastro e identificação das Sw.Houses (idCSRT). Consultamos TODAS as SEFAZ, usando os canais (nem sempre) disponíveis, para submeter uma consulta... O resultado pode ser conferido em nosso Mapa Fiscal mas reparem em quantas UFs não conseguimos obter uma resposta clara... Conforme pode ser acompanhado ao longos das últimas versões da NT 2018.005, a exigência do Grupo Responsável Técnico sofreu diversas alterações, culminando na prorrogação indefinida para as informações relativas IDCSRT, e para as demais informações somente as UFs de AM, MS, PE, PR, SC e TO exigirão em 03/06, as demais UFs ou optaram por não exigir ou também deixaram para data futura.* Se para cada Grupo ou Tag novo, o ENCAT continuar adicionando o famigerado texto "A critério da UF", isso é receita para o CAOS na NFe... Um projeto que até então é o orgulho dos SEFAZ, e exemplo para o mundo todo, pode se perder em um emaranhado confuso de condições, que muitas vezes não são claras... Como eu posso me prevenir ? É necessário manter os fontes do Projeto ACBr atualizados em sua máquina, e permitir que a sua aplicação tenha flexibilidade de configuração da parametrização. Ou seja, permitir que o seu Suporte Técnico possa parametrizar de maneira rápida, a geração (ou não) de novas Tags, conforme o exigido pela UF do usuário final... Já pensou por exemplo, em "descer"para o PC do cliente final, uma parametrização da "nuvem"? Mas a final, quais são as modificações ? Ok.. vamos falar um pouco sobre cada uma delas... Grupo Responsável Técnico Este grupo teve algumas prorrogações ao longo das últimas versões da NT 2018.005, porém as UFs do AM, MS, PE, PR, SC e TO optaram por manter em 03/06/19* a exigência das informações deste grupo (exceto os dados relativos ao idCSRT). Para mais detalhes sobre o assunto acesse em nossa base de conhecimento, o tópico dedicado ao assunto escrito por nosso consultor @Italo Jurisato Junior Veja também, o nosso já citado, Mapa Fiscal ICMS Substituto Estas tags vem trazendo uma série de complicações aos desenvolvedores, desde que passou a ser aplicada já em ambiente de homologação. Com a entrada em produção, será necessário a atualização dos clientes, seja com uma nova versão das aplicações ou de forma mais simples, a parametrização para gerar as tags conforme a UF do mesmo. No tópico a seguir, o consultor @EMBarbosa dá orientações valiosas para minimizar o impacto em seus clientes. Identificação do Local de Retirada e Entrega Para mais detalhes sobre o assunto acesse em nossa base de conhecimento, o tópico dedicado ao assunto, escrito por nosso consultor @Italo Jurisato Junior Ainda não acabou... dia 20/05/19 tem mais mudanças... Fique atento as mudanças previstas para o dia 20/05, que podem impactar na autorização de NFCe... O ENCAT modificou a URL de consulta do QRCode, de praticamente todos os estados, e essas novas URL já são exigidas em homologação e deverão ser obrigatórios em Produção a partir de 20/05 Leia mais sobre esse assunto, no tópico abaixo, criado pela consultora @Juliana Tamizou. *Importante: Somente a exigência do Responsável Técnico será em 03/06/19, todos os demais itens permanecem em 07/05/19, por isso não deixe de se preparar
  7. 23 points
    Desabafo do Menino Ney do TI "Configurar TLS, servidor fora, erro de schemas XML. Você pode achar que eu te acho exagerada, e, às vezes, você exagera mesmo. Mas a real é que eu sofro com essas suas Notas Técnicas e Manuais. Agora, na boa, você não imagina o que eu passo quando atendo o telefone às 22:00hrs só porque o caminhão tem q sair. Quando eu não faço as alterações de layout, não é porque eu sou preguiçoso, mas porque apenas não quero mexer no que está funcionando. Quando eu pareço nervoso, não é porque eu sou um moleque mimado. Mas é porque eu ainda não encontrei uma maneira de resolver os problemas que você vive criando. Dentro de mim ainda existe um menino do TI. Às vezes, ele encanta o mundo (consertando a impressora). E, às vezes, ele irrita todo mundo (quando esquece de atualizar os schemas). E minha luta é para manter esse menino do TI vivo. Mas dentro de mim, e não dentro do código. Você pode achar que o seu server SEFAZ não cai. Mas a verdade é que ele cai pra c****. Apenas está fora do ar, Direi ao usuário. Isso dói muito mais que bater o dedinho no pé da mesa. Eu demorei para corrigir as rejeições. Eu demorei para alterar o layout e adaptei o software para 4.0. Mas hoje eu tô aqui, de cara limpa, de peito aberto. Você caiu novamente. Mas foi eu que tive que explicar o porque ao usuário. Você pode continuar criando NTs. Ou pode parar de inventa-las e me ajudar a ter tempo para terminar o relatório do cliente. Porque quando compila, parça, o Brasil inteiro comemora comigo".
  8. 22 points
    Boa tarde, Conforme pôde ser observado por um grande número de membros da comunidade, desde os últimos dias de abril vinha ocorrendo na maioria das UFs a rejeição Endereço do site da UF de Consulta por chave de acesso diverge do previsto ao tentar enviar a NFCe em ambiente de homologação. Motivo da Rejeição Conforme foi divulgado posteriormente pela SEFAZ, de forma não oficial, ou seja, sem a publicação de NTs ou outras informações nos portais relativos a NFCe, esta rejeição passou a ocorrer devido a implementação da regra ZX03-20 existente na NT 2016.002 versão 1.61, a qual determina a validação da URL de Consulta por Chave de Acesso conforme tabela disponibilizada no portal do ENCAT. Estas validações entraram em vigor em ambiente de homologação no dia 22/04/2019 e em produção entrarão em 20/05/2019. Solução Os fontes do ACBr e por consequência o ACBrMonitorPlus SAC, foram atualizados com as URLs corretas conforme documentação disponível na página do ENCAT. Porém, em alguns casos, os endereços indicados pelo ENCAT ainda sim estavam incorretos. Com base no feedback de diversos usuários de nossa comunidade, novos ajustes foram enviados para o SVN do ACBr, no arquivo ACBrNFeServicos.ini Dicas para Minimizar o Impacto em seus clientes Se você utiliza o componente ACBrNFe para emissão da NFCe, procure sempre disponibilizar na mesma pasta do seu binário (executável) o arquivo ACBrNFeServicos.ini. Desta forma, o componente ACBrNFe, irá fazer uso do arquivo ACBrNFeServicos.ini existente no diretório, ao invés de usar as URLs internas, que são compiladas como "Resource", e anexadas ao componente... Isso é extremamente vantajoso, pois lhe confere grande agilidade na resolução de problemas de URLs... Caso sejam detectadas novas alterações de URLs, basta realizar a substituição do arquivo ACBrNFeServicos.ini, evitando portanto a necessidade de atualizar toda a aplicação. Eu não distribuo o ACBrNFeServicos.ini em meus instaladores? Preciso recompilar e atualizar meus clientes para que as novas URLs entrem em vigor ? Se você não quer ou não pode distribuir o ACBrNFeServicos.ini, na mesma pasta da sua aplicação, então não há outra maneira a não ser disponibilizar um novo binário para o seu cliente... Porém antes , faça um teste, é simples e rápido... Apenas copie o arquivo ACBrNFeServicos.ini no mesmo diretório de sua aplicação, e observe que as novas URLs serão utilizadas, pois o componente ACBrNFe irá priorizar o arquivo em disco. Ainda tem Dúvidas? Acesse os sub-fóruns sobre NFCe e crie um novo tópico relatando seu questionamento. Lembre-se que se for usuário do SAC Anual você também pode falar conosco pelo chat ACBr.
  9. 22 points
    Após uma atualização do Windows Update nos sistemas operacionais Windows 8 a 10, vários usuários começaram a ter problemas na conexão segura com o SEFAZ.... Onde geralmente foram exibidos os erros abaixo: Erro: 12175 - Um ou mais erros foram encontrados no certificado Secure Sockets Layer (SSL) enviado pelo servidor Erro: 12169 - O certificado SSL é inválido Erro: 12186 - Falha ao obter a Chave Privada do Certificado para comunicação segura Estes erros indicam uma falha na validação do certificado do servidor da SEFAZ, e entre as diversas causas que podem disparar este erro, podemos citar: Falta da cadeia de certificados instalado no cliente. Cadeia de certificados desatualizados. Erro no componente de validação do Windows. Erro no certificado da SEFAZ. SEFAZ enviou um certificado invalido. O problema foi confirmado pelo SEFAZ do PR, no comunicado abaixo: Para os usuários do Projeto ACBr, esse problema afetou apenas quem utiliza os componentes configurados com as bibliotecas Wincrypt ou CAPICOM pois os mesmo utilizam o sistema de validação do Windows. O problema não afetou usuários que usam a biblioteca OpenSSL. Em decorrência do problema, aplicamos um ajuste nos fontes da ACBrDFeSSL, visando ignorar erros na validação do certificado. Com isso a comunicação Segura ocorrerá normalmente... Os fontes alterados já se encontram no SVN... e excepcionalmente, efetuamos uma nova compilação do ACBrMonitorPLUS v 1.2.0.52, para os usuários do SAC Saiba mais sobre comunicação Segura do ACBr
  10. 19 points
    Boa tarde Pessoal, Primeiro foi o CT-e e o MDF-e a ter o seu layout alterado para contemplar um novo grupo: <infRespTec> Informações do Responsável Técnico, agora esta chegando a vez da NF-e. Os 3 componentes já estão preparados para gerar esse grupo. Alguns desenvolvedores já estão gerando o grupo <infRespTec> para o CT-e e MDF-e, tanto em homologação quanto em produção. No caso da NF-e as datas previstas são: para o ambiente de homologação é 25/02/2019 e para produção é 29/04/2019 alterado para 03/06/2019 (conforme consta na versão 1.30 da NT 2018/005). Quero deixar claro que essas datas se referem ao prazo para que as SEFAZ finalizem a implementação em seus webservices, portanto somente a partir dessas datas é que poderemos enviar o XML da NF-e com esse grupo. Portanto, a partir do dia 25/02/2019 teremos um prazo de 3 meses para realizar os testes em ambiente de homologação. Outra coisa importante a ser dita é que esse grupo é opcional, mas vai ficar a critério de cada UF torna-lo obrigatório ou não. Quais são as informações que compõe esse grupo? O grupo <infRespTec> é composto pelos campos: CNPJ da empresa que desenvolveu o software, xContato é o nome da pessoa responsável pelo software, email e fone dessa pessoa ou da empresa. Caso você opte por gerar esse grupo independente da UF exigir ou não, as 4 informações acima deveram constar. Como dito acima os componentes ACBrNFe, ACBrCTe e ACBrMDFe já estão preparados para gerar o grupo <infRespTec>, para que isso ocorra basta acrescentar na sua rotina que alimenta o componente com os dados que vão fazer parte do XML as seguintes linhas... O exemplo abaixo é para a NF-e: with ACBrNFe.NotasFiscais.Add.NFe do begin (...) infRespTec.CNPJ := xCNPJ_RespTec; // CNPJ da Empresa infRespTec.xContato := xContato_RespTec; // Nome do Contato infRespTec.email := xEmail_RespTec; // email do Contato ou Empresa infRespTec.fone := xFone_RespTec; // fone do Contato ou Empresa end; As linhas em negrito acima são exatamente iguais para o CT-e e MDF-e. Nas Notas Técnicas da NF-e, CT-e e MDF-e que se refere a esse grupo tempos ainda mais dois campos: idCSRT e hashCSRT que vão ficar para uma segunda etapa. O CSRT - Código de Segurança do Responsável Técnico, trata-se de um código alfa numérico que será fornecido pela SEFAZ através de uma página própria ou por um webservice, conforme consta na Nota Técnica. Sendo assim, enquanto a SEFAZ não criar essa página ou webservice não temos como solicitar o CSRT e portanto não podemos incluir no XML o idCSRT que é um numero sequencial e o hashCSRT que é o resultado do hash (SHA1 - Base64) da concatenação do CSRT mais a chave do documento. Os componentes já possuem no rol de configurações, as propriedades idCSRT (Integer) e CSRT (String), nessa primeira etapa devemos atribuir o valor zero a idCSRT e uma string vazia para o CSRT, para que os campos: idCSRT e hashCSRT não sejam gerados. Os valores padrões estabelecidos pelo componente são: idCSRT = 0 e CSRT = '' (string vazia). Reforço que o preenchimento dessas propriedades só devem ser feitas a partir do momento que a SEFAZ lhe fornecer o idCSRT e o CSRT. Vamos supor que as UF: x, y e z venham a exigir o grupo <infRespTec> e criem uma pagina ou webservice para fornecer o CSRT, caso você tenha clientes usando ou seu software para emitir NF-e ou CT-e ou MDF-e será necessário solicitar o CSRT em cada uma das UF. Resumindo o CSRT fornecido pela UF x só é valida para os seus clientes dessa UF que usam o seu software. Quais são as UF que vão exigir o grupo <infRespTec> não sabemos, logo devemos ficar atentos. A minha sugestão é que o seu software gere esse grupo independente da UF exigir ou não, pois o dia que ela resolver exigir você não vai precisar fazer nada, pois já consta no XML o grupo. A questão agora é quanto ao CSRT, como dito anteriormente, vai ficar para uma segunda etapa visto que, se faz necessário a SEFAZ criar a página ou webservice. O meu conselho é que no seu software na tela de configuração tenha os campos: idCSRT e CSRT para que você possa informa-los assim que obter. Detalhe importante, os campos idCSRT e hashCSRT só serão gerados no XML e de forma automática dentro do grupo <infRespTec> a partir do momento que as propriedades de configuração: idCSRT e CSRT passarem a ter valores validos. O texto ficou longo, mas espero ter passado todas as informações necessárias para que vocês possam fazer as alterações em seus softwares e desta forma ficarem em conformidade com as nas Notas Técnicas. Para quem não leu as NT, por favor leiam. NT 2018/005 versão 1.20 - Alteração do layout da NF-e https://sourceforge.net/p/acbr/code/HEAD/tree/tools/DFe/NFe/NT/2018/ NT 2018/002 versão 1.01 - Alteração do layout do CT-e https://sourceforge.net/p/acbr/code/HEAD/tree/tools/DFe/CTe/NT/2018/ NT 2018/002 versão 1.02 - Alteração do layout do MDF-e https://sourceforge.net/p/acbr/code/HEAD/tree/tools/DFe/MDFe/NT/2018/
  11. 19 points
    Olá amigos, depois de mais um cliente ter perdido o certificado resolvi que ia tentar descobrir oque estava causando isso, e depois de muita peleja(são 4:00 da manhã ), acho que consegui chegar ao causador do problema, pelo menos tive sucesso em excluir um certificado por diversas vezes assinando um XML. E como muito se falava, não é diretamente o ACBR que está excluindo o certificado, pelo que constatei é a MSXML que está "reiniciando" o certificado e somando isso a mais algum problema está causando a exclusão. Se você assinar um XML e deixar o administrador do token aberto, verá que no momento da assinatura, no trecho "xmldsig.sign(dsigKey, CERTIFICATES);" o token muda de: Operacional >> Ausente >> Presente >> Operacional, como se o cartão fosse removido e inserido novamente. Pensei aí tem coisa! Tentei remover o cartão durante a assinatura mas não consegui simular a exclusão do certificado, imaginei que não estava sendo rápido o suficiente. Então coloquei um loop no trecho do ACBR que pega a chave privada do certificado, antes de executar a assinatura, percebi que até aí o PIN do certificado não era solicitado, somente mais a frente quando ocorre a assinatura com "xmldsig.sign(dsigKey, CERTIFICATES);". Porém quando removi o certificado da leitora e inseri novamente dentro do loop(o mesmo que a MSXML faz durante a assinatura) foi me solicitado o PIN e logo depois veio a mensagem: "O conjunto de chaves não está definido", olhando no administrador do token que estava aberto pude ver o certificado sendo excluído: O PIN que ele me solicitou foi para excluir o certificado! O que imagino que esteja acontecendo é que se você chamar o método Assinar repetidamente, antes de dar tempo do cartão ficar operacional novamente, o certificado pode ser excluído. Isso explicaria o porque da exclusão ser esporádica e também não acontecer com todos os sistemas, pois dependeria da lógica usada por cada um para assinar, como assinaturas em sequência ou mesmo mais de uma thread acessando o certificado. Fiz um vídeo mostrando o momento da exclusão, note que não consegui excluir na primeira tentativa, porque demorei muito pra inserir o cartão, estava com uma mão ocupada filmando, ia editar isso mas tô com muito sono. MODERAÇÃO: vídeo removido a pedido do usuário Vou dormir um pouco e amanha ver se me aprofundo no problema.
  12. 17 points
    Olá pessoal, Com a NT 2018.005 foi introduzida uma nova rejeição para NFe: 938 - Rejeição: Não informada vBCSTRet, pST, vICMSSubstituto e vICMSSTRet. Os detalhes dessa rejeição foram alterados nas várias versões da NT, mas infelizmente isso já está causando algum problema (como podem ver nesse tópico aqui). Como é uma rejeição facultativa e cada UF tem uma legislação tivemos que adicionar uma nova propriedade no componente ACBrNFe para lidar com a situação. A nova propriedade se chama ForcarGerarTagRejeicao938. Após atualizar os componentes, não esqueça de reinstalar. O problema Como a descrição da rejeição explica, algumas UFs podem exigir a informação de algumas tags, como vICMSSubsituto, isso mesmo quando o valor da tag for zero. Por padrão o ACBrNFe não gera tags facultativas que são informadas com valor zero. E esse é o caso da tag vICMSSubstituto. Mas como essa é uma tag facultativa, não devia ser obrigatório para algumas UFs informá-la. E por isso, não podemos obrigar o ACBrNFe informar sempre. Assim a ideia é termos uma configuração que você possa alterar. Poderemos com essa propriedade forçar gerar a tag de acordo com a necessidade de seu cliente ou da UF dele. A solução A propriedade (ou configuração) criada ForcarGerarTagRejeicao938 foi adicionada no ACBrNFe de modo que pode ser acessada como no código abaixo: ACBrNFe1.Configuracoes.Geral.ForcarGerarTagRejeicao938:= fgtNunca; Ou talvez no Object Inspector como abaixo: Importante: Embora a propriedade esteja disponível para ser alterada no Object Inspector, você provavelmente vai querer parametrizar isso no seu aplicativo. Afinal, talvez você precise alterar essa propriedade de um cliente para outro, ou de uma data para outra. As opções são: fgtNunca -> Se o valor for zero, não vai forçar a geração da tag nunca; fgtSomenteProducao -> Força a tag ser gerada no ambiente de produção mesmo que o valor seja zero; fgtSomenteHomologacao -> Força a tag ser gerada no ambiente de homologação mesmo que o valor seja zero; fgtSempre -> mesmo que o valor seja zero, a tag será gerada sempre; A configuração padrão é fgtNunca conforme o comportamento do componente antes dessas alterações. Qual opção eu devo escolher? Como explicado, essa configuração foi necessária por causa de problemas em certas UFs. Então para escolher a melhor opção você precisa saber o que está sendo exigido no Webservice que você está acessando. Por exemplo, se você não está recebendo a rejeição, não há necessidade de alterar a configuração. Mas se está recebendo somente em homologação, quer dizer, a tag está sendo exigida somente em homologação, use a opção fgtSomenteHomologacao. E assim por diante.
  13. 17 points
    Sempre acreditei que a informação deve ser algo democrático e acessível... Pensando nisso, tornei pública a nossa área de Base de Conhecimentos Nela você encontrará excelentes artigos, escritos pelos nossos experientes Consultores, e que tornarão o uso dos os componentes ACBr algo mais simples e funcional... Espero que gostem... e fiquem a vontade para sugerir novos artigos...
  14. 16 points
    PERGUNTA: Eu uso o ACBr. Posso colocar o ACBr como Reponsável Técnico na emissão de algum documento fiscal eletrônico (ou DF-e, isto é, NF-e, NFC-e, CT-e, MDF-e, etc...) ? Mesmo que você use o ACBrMonitor Plus, a ACBrLib, os componente ACBr, algum programa exemplo que disponibilizamos, a resposta simples é NÃO. Não entenda mal. Reafirmamos nosso compromisso em ajudar os usuários do ACBr a resolver seus problemas no uso dos componentes, bibliotecas ou aplicativos que disponibilizamos na medida do possível. E claro, damos prioridades aos casos reportados por usuários que fazem uso do SAC ACBr. Mas não somos o responsável técnico pelo seu sistema, mesmo que ele use qualquer ferramenta que provemos. Talvez você queira entender um pouco mais, então vamos a uma resposta longa sobre isso. Vamos usar como exemplo a NF-e e NFC-e que são de longe os DF-es mais utilizados. Se você ler a nota técnica 2018.005 da NF-e/NFC-e vai encontrar o item "2 Sobre a Identificação do Responsável Técnico". Nesse item há a seguinte frase no parágrafo que explica o que é essa informação (grifo é meu): Veja que a primeira frase menciona que o "responsável técnico" não é simplesmente o desenvolvedor, mas a empresa responsável tecnicamente pelo sistema de emissão. O que neste caso é vocês. Vocês respondem perante seu cliente e perante as autoridades pela emissão do documento fiscal. O ACBr (seja o monitor, lib ou algum componente) nesse processo é apenas uma ferramenta. É como se fosse um framework/biblioteca/componente que ajuda seu sistema e sua empresa a emitir os documentos. Veja, não disponibilizamos sistemas para emissão, apenas ferramentas. Isso fica mais claro quando lemos o restante do parágrafo, porque ele explica não só o que é o "responsável técnico", mas também o objetivo dessa informação. Veja: A ideia é a SEFAZ poder entrar em contato com o responsável pelo emissor em caso de dúvidas ou problemas na emissão. Em caso de anomalias na emissão, com quem a SEFAZ teria que entrar em contato? Por exemplo: Em uma das reuniões do ENCAT, um sistema tentou retransmitir uma nota com erros no XML, por 70.000 vezes... ou seja, mesmo recebendo o erro de rejeição por XML inválido, a aplicação ficou em algum Loop, tentando retransmitir o XML que já sabia era rejeitado... Isso é praticamente um ataque de DDOS, nos servidores do SEFAZ... Quem a SEFAZ teria que contatar se essa empresa fosse seu cliente? É evidente que em caso de dúvidas ou problemas sobre o uso nas empresas que são seus clientes eles deverão entrar em contato com a sua empresa. Afinal de contas, nós não sabemos como seu sistema funciona, nem conhecemos os seus clientes. Ainda mais, o ACBr, (quero dizer ACBrMonitor, ACBrLib, ou qualquer componente ou biblioteca que fornecemos), por si só nunca faz uso de um WebService. Ele é acionado por sua aplicação. Ela, a sua aplicação, é responsável pela emissão. Chamar o ACBr de responsável seria basicamente o mesmo que colocar como responsável a Microsoft porque você usa o Windows nos seus clientes, ou a biblioteca OpenSSL porque você a usa pra assinar os documentos. Existe mais um detalhe, o item "2.1 Código de Segurança do Responsável Técnico - CSRT" que nos ajuda a entender. Esse item fala do credenciamento do software emissor de DF-e na SEFAZ da UF e da empresa responsável. Se sua UF já tem esse cadastro, ou algum cadastro similar como era o caso do PAF-ECF, sem dúvida você entende que é sua empresa e seu software que deve ser cadastrado, independente de usar ou não alguma ferramenta de terceiros em seu sistema. Peraí! Tem mais! No terceiro parágrafo há a seguinte explicação sobre o CSRT, que pode ser exigido em formato de hash: Mais uma vez, se essa é uma informação conhecida somente entre a empresa desenvolvedora e Fisco, não teria como ser disponibilizada por nós. Senão, poderíamos nos passar por você. Seria como você dar seu RG ou Passaporte para outra pessoa se passar por você. Então para pra deixar isso claro pra qualquer pessoa com dúvida no futuro: O projeto ACBr não se responsabiliza por mal uso de nenhum dos programas, bibliotecas, componentes, ou códigos fontes disponibilizados. Usar qualquer um desses, incluindo o ACBrMonitor Plus, não dá direito a ninguém colocar a DJ System ou o Projeto ACBr como responsável técnico, ou de qualquer outra forma responsável perante clientes ou autoridades. Se alguém pensar diferente, informamos que não tem licença para utilizar o que provemos. Pedimos o favor de ler com cuidado as licenças LGPL e GPL que usamos.
  15. 16 points
    Boa tarde a todos, Foi publicado no Portal Nacional da NF-e a Nota Técnica 2018/004 versão 1.00 que trata sobre um novo tipo de evento que é o de Cancelamento por Substituição. A liberação do ambiente de homologação para iniciarmos os testes esta prevista para 25/02/2019. A principio esse evento só poderá ser utilizado com a NFC-e. Para mais detalhes favor baixar a NT do Portal e boa leitura (são apenas 12 paginas). Estamos finalizando as alterações no componente ACBrNFe para ser enviando para o repositório.
  16. 16 points
    Foto por David Siglin em Unsplash. Olá pessoal, É bom quando encontramos uma ferramenta que facilita ou melhora nosso trabalho, não? Todos devem ter notado que ultimamente temos enviado vários commits ao SVN de remoção de warnings e hints, muitas vezes mencionando a ferramenta FixInsight. Para quem não conhece, essa ferramenta faz uma análise do seu código e aponta possíveis erros e sugere otimizações. Ela é uma ferramenta muito boa, tanto que foi comprada pela TMS e se tornou TMS FixInsight. Já tem um tempo que conheço a ferramenta e sempre tive o desejo de rodá-la em todo o código do ACBr. Mas devido ao tempo não tinha sido possível. Depois de um incentivo (valeu @Waldir Paim), eu resolvi baixar a versão trial e fazer isso. E que bom que fiz. Gostaríamos de compartilhar com vocês algumas coisas que encontramos no nosso código com a ajuda dessa ferramenta. Encontrando pequenos problemas num código gigante Vamos começar por um código que estava no ACBrValidador. Vejam esse código, onde a função ValidarCEP de baixo chama a função ValidarCEP de cima, e tente encontrar um problema: function ValidarCEP(const ACEP, AUF: String): String; begin Result := ValidarDocumento( docCEP, ACEP, AUF); end; function ValidarCEP(const ACEP: Integer; AUF: String): String; begin ValidarCEP( FormatarCEP(ACEP), AUF ); end; Conseguiu ver o problema? Essa função nunca retornaria que um CEP é inválido se você passasse o CEP como inteiro. Precisava de um “Result := ” no início. Simples? Nem tanto quando lembramos do tamanho do projeto ACBr. Temos mais de 200 componentes e mais de 779 mil linhas de código, contribuídos por dezenas ou talvez centenas de programadores, embora a nossa equipe de commiters seja realmente pequena. Só a unit ACBrValidador.pas em questão tem atualmente cerca de 2070 linhas. Não fica muito mais fácil quando uma ferramenta aponta pra você? [FixInsight Warning] ACBrValidador.pas(294): W521 Return value of function 'ValidarCEP' might be undefined Vamos a outro exemplo no pacote ACBrSerial, componente ACBrECF: [FixInsight Warning] ACBrECFDaruma.pas(4638): W503 Assignment right hand side is equal to its left hand side Veja o código (só a parte interessante): else if StrToIntDef(fsNumVersao, -1) >= 345 then begin RetCmd := EnviaComando( ESC + #240 ); RetCmd := Copy(RetCmd, 92, Length(RetCmd)); RetCmd := RetCmd; //<--- Viu aqui??? for A := 0 to fpAliquotas.Count-1 do begin fpAliquotas[A].Total := RoundTo( StrToFloatDef(Copy(RetCmd,(A*14)+1,14),0) / 100, -2 ); end; end; end; Uma linha que não faz absolutamente nada a não ser gastar espaço, memória e CPU. Uma linha desnecessária a menos no código. E você consegue encontrar um no seu aplicativo código que nunca será executado? Ainda no mesmo pacote, veja esse exemplo:  [FixInsight Warning] ACBrECFDataRegis.pas(1838): W509 Unreachable code Nesse código: if (fsArqPrgBcoTXT <> '') and (not FileExists( fsArqPrgBcoTXT )) then begin Msg := ACBrStr( 'Arquivo '+fsArqPrgBcoTXT+' não encontrado. '+ 'Valores padrões serão utilizados.' ) ; raise EACBrECFErro.Create( Msg ); fsArqPrgBcoTXT := '' ; //Essa linha nunca vai ser executada porque tem um raise acima. end ; Mais uma vez, tente imaginar procurar esse problema num projeto tão grande. Não é facilmente percebido se você não tiver olhos treinados e estiver procurando problemas. Vamos a outro exemplo ainda no componente ACBrECF:  [FixInsight Warning] ACBrECFEscECF.pas(1222): W517 Variable 'CHK' hides a class field, method or property Veja esse código: procedure TACBrECFEscECFResposta.SetResposta(const AValue: AnsiString); Var Soma, I, F, LenCmd : Integer ; CHK : Byte ; begin O problema desse código é que ele confunde uma variável local (CHK) com uma propriedade da classe (TACBrECFEscECFResposta.CHK). É preciso analisar todo código em cada lugar que isso acontece para ter certeza quando você está se referindo a propriedade e quando é a variável. Imagine se você confunde uma com a outra. Uma hora você pensa que sua variável está recebendo valores estranhos. Outra hora você pensa que sua propriedade não está sendo atualizada. Nesse caso específico, a variável foi renomeada para vCHK evitando a confusão com a propriedade CHK. O importante é que quando você for ler o código, não precise ficar pensando “Isso aqui é uma variável ou uma propriedade?”. Veja outro exemplo, agora no ACBrSMS: [FixInsight Warning] ACBrSMSClass.pas(192): W511 Object 'ListaSMS' created in TRY block begin try Self.Clear; if not FileExists(APath) then raise EACBrSMSException.CreateFmt('Arquivo "%s" não encontrado.', [APath]); ListaSMS := TStringList.Create; ListaSMS.LoadFromFile(APath); if ListaSMS.Count = 0 then Exit; //(bla bla bla...) finally FreeAndNil(ListaSMS); end; Não é apropriado esse código. O correto é mover a criação do objeto para fora do try..finally. Pense bem, se o objeto não for construído, você não quer que ele seja destruído. A mensagem ajudou a perceber também que esse bloco poderia ser escrito de outra maneira. Aquele raise não precisava estar dentro do try..finally. Evitando problemas futuros Rodando no pacote ACBrOpenSSL tivemos a seguinte mensagem no componente ACBrEAD: [FixInsight Optimization] ACBrEAD.pas(268): O804 Method parameter 'AChavePublicaOpenSSL' is declared but never used Quer dizer, parâmetro ‘AchavePublicaOpenSSL’ declarado mas não utilizado. Veja abaixo a a parte importante da função: function TACBrEAD.ConverteChavePublicaParaOpenSSH( const AChavePublicaOpenSSL: String): String; Var Buffer, Modulo, Expoente: AnsiString; {...} begin // https://www.netmeister.org/blog/ssh2pkcs8.html CalcularModuloeExpoente(Modulo, Expoente); Buffer := EncodeBufferSSH('ssh-rsa') + EncodeHexaSSH(Expoente) + EncodeHexaSSH('00'+Modulo); Result := 'ssh-rsa '+ EncodeBase64(Buffer); end; É estranho esse método ConverteChavePublicaParaOpenSSH não utilizar o parâmetro da chavePública. Qualquer pessoa que visse o método e tentasse chamar passando a chave pública não teria o resultado desejado. Analisando o código melhor vemos que o componente lê a chave pública por meio do método “LerChavePublica”. Nesse caso o correto seria remover o parâmetro para que não haja nenhuma confusão. E essa mensagem no TACBrBALToledo2090: [FixInsight Warning] ACBrBALToledo2090.pas(107): W508 Variable is assigned twice successively if (Length(wStrListDados[1]) = 16) then wDecimais := 1000; {APENAS BLOCO PROCESSADO} wResposta := wStrListDados[1]; //<---- sobreposto pela linha seguinte wResposta := Copy(wStrListDados[1], 5, 7); if (Length(wResposta) <= 0) then Exit; Veja que os dados de uma linha é sobreposta pela outra. O compilador nunca daria um aviso sobre isso. Mais dois exemplos de mensagens e o código a seguir: [FixInsight Warning] ACBrEscEpsonP2.pas(97): W514 Loop iterator could be out of range (missing -1?) [FixInsight Warning] ACBrEscEpsonP2.pas(100): W514 Loop iterator could be out of range (missing -1?) For I := 0 to Length(cTAGS_BARRAS) do TagsNaoSuportadas.Add( cTAGS_BARRAS[I] ); For I := 0 to Length(cTAGS_ALINHAMENTO) do TagsNaoSuportadas.Add( cTAGS_ALINHAMENTO[I] ); Essa eu não sei como não foi detectada antes. Por algum motivo não está sendo emitida a mensagem estouro quando o valor de I chega a 16 no primeiro caso e 3 no segundo. Encontrando erros gerados por Ctrl+C..Ctrl+V No pacote ACBrPAF veja a mensagem gerada: [FixInsight Optimization] ACBrPAF_T_Class.pas(137): O804 Method parameter 'ACampo2' is declared but never used function OrdenarT2(const ACampo1, ACampo2: Pointer): Integer; var Campo1, Campo2: String; begin Campo1 := FormatDateTime('YYYYMMDD', TRegistroT2(ACampo1).DT_MOV) + TRegistroT2(ACampo1).TP_DOCTO + TRegistroT2(ACampo1).SERIE + TRegistroT2(ACampo1).NUM_ECF; Campo2 := FormatDateTime('YYYYMMDD', TRegistroT2(ACampo1).DT_MOV) + TRegistroT2(ACampo1).TP_DOCTO + TRegistroT2(ACampo1).SERIE + TRegistroT2(ACampo1).NUM_ECF; Result := AnsiCompareText(Campo1, Campo2); end; Essa função é utilizada para ordenar os registros T2 do PAF. Mas veja que ela compara o registro “ACampo1” com ele mesmo. Suspeita: Ctrl+C e Ctrl+V... Quem nunca??... Outra situação diferente, mas relacionada com ordenação apareceu no ACBrSintegra. Na verdade 4 situações no ACBrSintegra, semelhantes entre si. Vou mostrar apenas uma, mas dessa vez a mensagem do FixInsight fica pra depois. Vamos a um jogo dos sete erros entre os ifs e else no código abaixo: function Sort60A(Item1, Item2: Pointer): Integer; var witem1, witem2 : TRegistro60A; begin witem1 := TRegistro60A(Item1); witem2 := TRegistro60A(Item2); if witem1.Emissao>witem2.Emissao then begin if witem1.NumSerie>witem2.NumSerie then Result:=1 else if witem1.NumSerie=witem2.NumSerie then Result:=0 else Result:=-1; end else if witem1.Emissao = witem2.Emissao then begin if witem1.NumSerie>witem2.NumSerie then Result:=1 else if witem1.NumSerie=witem2.NumSerie then Result:=0 else Result:=-1; end else begin if witem1.NumSerie>witem2.NumSerie then Result:=1 else if witem1.NumSerie=witem2.NumSerie then Result:=0 else Result:=-1; end; end; Conseguiu encontrar os erros? Bem, se você procurou diferenças, não deve ter encontrado nada. E não existe mesmo. Veja a mensagem da ferramenta: [FixInsight Warning] ACBrSintegra.pas(3410): W507 THEN statement is equal to ELSE statement São dois if e um else pra fazer a mesma coisa... A correção foi remover o IFs e ELSE.  Agora vamos ao pacote ACBrSPED. Depois de remover muitos e muitos parâmetros desnecessários apontados pelo FixInsight, veja esse código: function CodAjToStr(const AValue: TACBrCodAj): string; begin if AValue = codAjAcaoJudicial then Result := '01' else if AValue = codAjAcaoJudicial then Result := '02' else if AValue = codAjLegTributaria then Result := '03' else if AValue = codAjEspRTI then Result := '04' else if AValue = codAjOutrasSituacaoes then Result := '05' else if AValue = codAjEstorno then Result := '06'; end; A mensagem é a seguinte: [FixInsight Warning] ACBrEPCBlocos.pas(2071): W512 Odd ELSE-IF condition (review lines 2071 and 2073) Viu lá? Os dois primeiros ifs estão comparando AValue com o mesmo valor, "codAjAcaoJudicial". O segundo deveria ser "codAjProAdministrativo". Provavelmente mais um Ctrl+C..Ctrl+V. Mensagens para otimização de código Nem todas as mensagens geradas são de erros. Algumas são mensagens de otimização. Muitos dos commits que temos feito estão relacionados a uma mensagem como estas abaixo: [FixInsight Optimization] ACBrSATClass.pas(776): O801 CONST missing for unmodified string parameter 'CNPJvalue' [FixInsight Optimization] ACBrSATClass.pas(776): O801 CONST missing for unmodified string parameter 'assinaturaCNPJs' Ela pode ser gerada numa função como essa: function TACBrSATClass.AssociarAssinatura( CNPJvalue, assinaturaCNPJs : AnsiString) : String ; begin ...// um código que não altera nenhum dos parâmetros citados end; Essas mensagens estão dizendo que os parâmetros 'CNPJvalue' e ‘assinaturaCNPJs’ do tipo string não estão sendo alterados dentro da função a que eles pertencem. Nesse caso é bem provável que os parâmetros devessem ter um prefixo CONST na sua declaração, como abaixo: function TACBrSATClass.AssociarAssinatura(const CNPJvalue, assinaturaCNPJs : AnsiString) : String ; begin ...// um código que não altera nenhum dos parâmetros citados end; Não vou entrar em muitos detalhes sobre isso, mas usar CONST tem alguns benefícios, principalmente em caso de strings: A execução é mais rápida, porque o compilador pode otimizar o código. No caso de strings, não tem contagem de referências; O compilador garante que você não vai alterar os parâmetros passados gerando um efeito colateral indesejado em quem chamou as funções; O código fica mais legível, porque você pode ler que a intenção é não alterar o parâmetro passado; Como os parâmetros são imutáveis, pode tornar o código mais ThreadSafe; Se quer saber um pouco mais sobre isso, recomendo os seguintes links: All hail the “const” parameters! Is the use of ‘const’ dogmatic or rational? Concluindo... Bom pessoal, ainda temos bastante pra fazer. Contudo, queremos dizer que o FixInsight tem nos ajudado melhorar nosso código. Ficamos tão satisfeitos que entramos em contato com a TMS e eles generosamente nos cederam uma licença da versão Pro pra continuar nosso trabalho. Muito obrigado TMS. Agora, se você quer nossa opinião, essa é uma ferramenta altamente recomendada e está disponível pra toda versão do Delphi a partir do Delphi 2006. Se você tem alguma dúvida, baixe a versão trial e comece agora mesmo a usar no seu código. A versão trial limita as mensagens a 5 por units e funciona por 30 dias. Mas é o suficiente pra se perceber como é muito útil, como aconteceu com a gente. Quer um passo a passo em como utilizá-la? Veja o próximo post logo abaixo.
  17. 16 points
    Olá pessoal, Compartilho com vocês, os Planos de Expansão do Projeto ACBr. Em anexo, está o PDF da apresentação Apresentação - ACBr - Planos de Expansão.pdf
  18. 16 points
    Sabemos que o assunto é sério e que muitas aplicações ainda não estão prontas... (mas não foi por falta de tempo... pois como podemos ver foram 20 meses após a publicação da primeira NT da 4.0) Alguns estados ainda estão fazendo o dever de casa... e é possível notar que vários estão com problemas no ambiente de homologação: http://hom.nfe.fazenda.gov.br/portal/disponibilidade.aspx?versao=0.00&amp;tipoConteudo=Skeuqr8PQBY= 31/07/2017 - 17:11 30/07/2017 - 18:16 O CONFAZ aproveitou a ocasião para criar ainda mais regras de validação, e novas Tags em um XML que atualmente é quase impossível de compreender o significado de todos os campos... Com isso inúmeros problemas foram criados nos WebServices e alguns persistem até hoje... Temos vários relatos aqui no fórum de exemplos de SEFAZ que não seguem a risca as próprias orientações das Notas Técnicas, ou ainda informações conflitantes, e passíveis de dupla interpretação... Isso obrigou a todos a criação de remendos e IFs, para suportar todas as SEFAZ... A grande pergunta é se realmente o SEFAZ irá ter a coragem (ou a irresponsabilidade) de desativar a 3.10 e causar o caos em um sistema tributário que já um dos mais infernais do mundo...
  19. 15 points
    Olá pessoal, Para quem ainda não conhece, o Lazarus/FPC é uma poderosa IDE e compilador da Linguagem Object Pascal, muito semelhante ao Delphi, e desenvolvido totalmente em Código Aberto... ( Saiba mais em: https://www.lazarus-ide.org/index.php?page=about ) Hoje ocorreu o lançamento da versão 2.0.0 do Lazarus... O anúncio oficial, pode ser lido no fórum do Lazarus: http://forum.lazarus-ide.org/index.php/topic,44161.0.html Essa versão ainda usa o FPC (Free Pascal Compiler), na versão 3.0.4, então não devemos ter mudanças brusca na compilação dos projetos existentes... Você pode baixar o Lazarus 2.0, na página oficial do Projeto: https://www.lazarus-ide.org/ (Observe porém, que o Download sugerido, provavelmente será de um Compilador para Windows 64... O que muitas vezes não é o desejado, para manter a compatibilidade com as diferentes versões de Windows e as DLLs existentes) Portanto, recomendo selecionar a versão 32 Bits, conforme destacado, na imagem abaixo... Se você quer realmente gerar aplicações 64 bits, ainda poderá fazer um Cross-compiling , baixando um instalador complementar em: https://sourceforge.net/projects/lazarus/files/Lazarus Windows 32 bits/Lazarus 2.0.0/ O ACBr tem um ótimo suporte ao Lazarus/FPC, isso porque a maioria dos Consultores do Projeto ACBr, usam Lazarus/FPC como principal IDE para Desenvolvimento, e todos os nosso projetos, como: ACBrMonitorPLUS, e ACBrLib, são desenvolvidos em Lazarus/FPC. Abaixo segue um Screen Shot da minha IDE de trabalho (clique para aumentar) Quer conhecer mais aplicações desenvolvidas em Lazarus ? Veja esse Link: http://wiki.freepascal.org/Lazarus_Application_Gallery
  20. 15 points
    Instalando o FixInsight para utilizar no seu projeto Para utilizar o TMS FixInsight no seu projeto, primeiro faça o download da versão trial no site oficial. O FixInsight está disponível para todas as versões do Delphi a partir do Delphi 2006. A versão pro possui linha de comando, permitindo você executar a ferramenta mesmo quando o Delphi não está aberto. Isso permite você integrar com seu sistema de Build ou sistema de integração contínua. A instalação é muito simples, bastando escolher em qual versão do Delphi você quer instalar. Após a instalação as seguintes entradas vão aparecer no menu Project: E também no "Project Manager" (clique com botão direito no projeto): A entrada "FixInsight Settings..." configura a ferramenta e pode habilitar ou desabilitar as mensagens geradas. Ela abre uma tela como essa: Na imagem acima você pode observar que a mensagem "C101 Method '%s' is too long (%d lines)" está selecionada e permite a configuração de quantas linhas para você um método, function ou procedure não deve exceder. Dá pra ver também que as mensagens C102 e C103 estão desabilitadas e assim não geram avisos. A entrada "Run FixInsight for unit1.pas" executa a ferramenta para a unit aberta atualmente (neste caso Unit1.pas). A entrada "Run FixInsight" executa a ferramenta no projeto atual inteiro. Rodando o FixInsight no seu projeto Como mencionado, é por meio da entrada 'Run FixInsight" que você executa a ferramenta no seu projeto. Então basta abrir o seu projeto e executar por meio do menu Project -> Run FixInsight. Ele vai ser executado e abrir uma aba na janela de mensagens como na imagem abaixo. Dois cliques te jogam na unit e linha relacionada a mensagem: Agora é com você. Você analisa a mensagem o código e verifica se algo pode ser feito.
  21. 15 points
    Boa tarde a todos! Gostaria de parabenizar o trabalho e a dedicação de toda a equipe, patrocinadores e empresas envolvidas, foi uma grande oportunidade e privilegio participar com todos vocês...Pena que foi só um dia!? Agradeço a todos que estiveram envolvidos nesse grande projeto. Essa equipe é sensacional:
  22. 15 points
    Olá Pessoal, Agradeço do fundo do meu coração, a todos que participaram do 1o Dia do ACBr. Esperamos que sua experiência tenha sido tão boa quanto foi a nossa. Foi um dia muito especial, para o Projeto ACBr, pois somos uma comunidade de Desenvolvedores espalhada por todo o Brasil, e muitos de nós, nunca havíamos conversado pessoalmente… Há muito tempo eu idealizava a execução desse evento, mas sabia que não seria uma tarefa fácil… E realmente, projetar e executar um evento para mais de 400 participantes, se mostrou um desafio e tanto... Mas quando podemos contar com uma Equipe de colaboradores nota 10, os obstáculos são vencidos com mais facilidade. O ambiente estava descontraído, e como podemos ver pelas fotos, o riso rolava solto…. Creio ter sido um dia produtivo para os Congressistas, que além das Palestras, puderam conhecer de perto os Desenvolvedores, e os principais Fabricantes de Equipamentos para automação Comercial que estavam exibindo em primeira mão, produtos que ainda serão lançados em 2019. O Parque Tecnológico de Sorocaba, se mostrou um ótimo espaço… Com um amplo auditório, e 2 salas bem equipadas, conseguimos distribuir as palestras, baseado nas informações das inscrições. O amplo hall, todo envidraçado, e cercado por uma bela paisagem, foi o lugar perfeito para Networking, onde todos puderam conversar e ficar bem à vontade, durante os dois coffee break servidos… Tivemos um show de prêmios no final: Elgin 10 Kits SAT SDK + Impressora I9 Tanca 3 leitores TL-20 Dimep 2 SAT SDK Control iD: 1 Leitor Biométrico Bio, para cada CNPJ inscrito 4 Impressoras Print iD Embarcadero 1 kit Brindes Bematech 1 SAT Go (novo) Firebase 2 Livros, Guia de Migração para o Firebird 3 ACBr: Kit completo dos Produtos ACBr: 1a inscrição: Sebastião Donizete Ramos Usuário mais antigo do SAC: Geraldo José Rodrigues Usuário mais assíduo do SAC: Antonio Paulo Mangili Usuários mais distantes ao Norte/Nordeste: André Luiz Gurgel-RN e José Valber Aguiar-MA Usuários mais distantes ao Sul: Lucas Rebelato-RS e Dirlenio Batista-SC Já estamos subindo o material das Palestras, que foram apresentadas, nesse Link. Eles ficarão disponíveis para Download, para todos os membros que estiveram presentes no evento e para os usuários do SAC do ACBr. Você já pode encontrar algumas fotos do evento, nesse link. (só de ver as fotos, já dá saudades) Todas as palestras foram Filmadas, porém ainda estamos editando os vídeos, e pretendemos liberar até 4 palestras por mês… Sendo assim, se você perdeu alguma palestra, ou deseja recordar algum tópico, o vídeo será de grande ajuda… O acesso aos vídeos, será permitido a todos os participantes do Evento e usuários do SAC, através desse link Peço desculpas por algumas de nossas falhas, como por exemplo, o atraso de quase 30 min, no último bloco, antes do sorteio (justamente quando todos já estavam muito cansados) Sua opinião é muito importante para nós… Queremos aprender com nossos erros, para fazermos um evento cada vez melhor… Portanto, por favor preencha a nossa pesquisa de satisfação, clicando aqui nesse link. Se você precisa de um Certificado de Presença, poderá emitir o mesmo, clicando nesse link. As ideias já estão fervilhando para a 2a edição… Pretendemos abrir inscrições no início do próximo ano… Obrigado mais uma vez, e nos vemos na 2a edição do Dia do ACBr em 2019
  23. 15 points
    Boa tarde a todos, Teremos mudanças no layout do MDF-e, basicamente são quatro, a primeira é que agora será possível uma pessoa física desde de tenha Inscrição estadual emitir o MDF-e, sendo assim a propriedade CNPJ do emitente vai passar a se chamar CNPJCPF, a segunda se refere a consulta a Manifestos não encerrados que também vai aceitar o CPF sendo assim o campo passa a ser CNPJCPF, a terceira se refere ao modal aéreo que passa a ter um novo grupo <infEntregaParcial> e a quarta é o novo grupo chamado <infEmpresaSoft>. Este último grupo em um primeiro momento é opcional, ou seja, ele não precisa constar no XML, mas futuramente vai ficar a cargo de cada UF determinar a sua obrigatoriedade. Nesse grupo deveremos informar o CNPJ ou CPF do desenvolvedor, bem como o nome da empresa ou desenvolvedor, e-mail e telefone. O componente ACBrMDFe já foi alterado visando a geração desses grupos, estou apenas aguardando a liberação do ambiente de homologação para enviar para o repositório. Favor baixar e ler com atenção a Nota Técnica 2018/002 que se encontra no Portal Nacional do MDF-e. O Ambiente de Homologação vai ser liberado em 10/09/2018 e o de Produção em 15/10/2018.
  24. 15 points
    A NFe 3.10 deve continuar pq depois que surgiu a 4.00 o Daniel Simões virou hipocondríaco. O louco da tarja vermelha. Foi mal, mas não resisti.
  25. 14 points
    Responsável Técnico - Como fica o XML na prática? Com tantas alterações, ficou um pouco confuso entender quando e quais tags do grupo Responsável Técnico deverão ser enviadas. Segue então um resumo. Até 02/06/2019 Os XMLs deverão ser enviados sem este grupo, como tem sido feito até então. A partir de 03/06/2019 Para as UFs do AM, MS, PE, PR, SC e TO deverá ser incluído o grupo Responsável Técnico, porém sem as tags relativas ao idCSRT. Veja imagem a seguir. Após definição de data para exigência do idCSRT Quando as SEFAZ publicarem as datas para exigência destas tags, as mesmas passarão a ser exigidas no XML, caso contrário os mesmos passaram a ser rejeitados. A seguir, exemplo de XML com o grupo Responsável Técnico completo. Importante Até o presente momento nenhuma SEFAZ disponibilizou os mecanismos para geração do idCSRT, logo mesmo em homologação não é possível enviar estas tags. A partir de 07/05/2019 as UFs que optaram pela exigência do Grupo do Responsável Técnico ( AM, MS, PE, PR, SC e TO ), já aceitaram as tags de identificação também em ambiente de produção, porém rejeitarão os XMLs sem estas tags somente em 03/06/2019.
  26. 14 points
    Atenção: Há atualizações das informações desta homologação nas respostas deste tópico. Revisão: 1 --- Através dos exemplos do ACBr efetivamos testes utilizando as impressoras térmicas não fiscais Elgin i9 e Elgin i7, e com bases nos resultados obtidos irei detalhar todo procedimento realizado. Todos os procedimentos de testes tomaram como foco a impressora Elgin i9, onde que a i7 foi utilizada para fins comparativos entre ambos modelos. *OBS: Manuais, Drivers, aplicativos e outros utilitários da impressora devem ser baixados através no site do fabricante acessando o link: http://www.elgin.com.br/institucional/produto.php?prod=NjEy&sessao=auto (imagem 1) Sobre a instalação: Os testes foram realizados utilizando o sistema operacional Windows 8.1 Pro com interface 64bits, onde este após a conexão como o cabo USB da impressora já ligada e com bobina, instalou seus drivers deixando a impressora pronta para o uso. De acordo com o fabricante, a impressora é disponibilizada com a interface de comunicação USB habilitada. É possível alterar a interface de comunicação para “Porta Serial Virtual”, seguindo os passos no aplicativo Utility: (Ver imagem 2) Selecionar a impressora na “Lista de Impressoras”; Ir em "Configurações Avançadas..."; Ir em "Configurações Porta USB"; Selecionar agora qual interface será utilizada e clicar em "Configurações". (imagem 2) Após isso foi necessário reiniciar a impressora, para assim instalar o driver de acordo com a comunicação selecionada. Concluída a instalação, podemos verificar o driver da impressora no gerenciador de dispositivos do Windows. A emulação da porta serial virtual trabalha com uma baud rate em 115200. Com o objetivo de outras interfaces de comunicação (USB, COM, LPT ou TCP/IP), é necessário instalar o driver disponibilizado no site do fabricante. Para utilização com o SAT Teste, é necessário que a impressora esteja instalada no Windows. Para utilização da impressora no PosPrinterTestes, é necessário que esta esteja com sua porta Virtual Serial emulada, ou caso sua comunicação seja por USB ou TCP/IP, a mesma precisa ser instalada e compartilhada no Windows. A comunicação TCP/IP também pode ser realizada através da porta TCP:IP:Porta. Nos testes utilizando o cabo Ethernet, foi necessário utilizar a versão 1.0.5.2 do driver (esta versão foi adquirida através do contato com o suporte técnico Elgin). Antes da instalação, é necessário fixar a configuração de rede na impressora, tal procedimento pode ser feito em duas maneiras distintas, sendo estas: A primeira forma de configurar a rede é através de um navegador de internet, seguindo os passos: (Ver imagem 3) O IP de fábrica da impressora utilizada é o 192.168.0.31, portanto, acessar o painel de configurações informando este IP em um navegador de internet; Em "Configuration" > "TCP/IP" colocar o IP e o Gateway na mesma faixa da rede interna utilizada; Após isso clicar em "Submit" e depois em "Reset". (imagem 3) Outra forma de configurar a rede é através do aplicativo Utility, indo em: (Ver imagem 4) Configurações Avançadas; Configurações Ethernet; Informar os dados necessários conforme sua rede interna e clicar em Escrever. (imagem 4) A instalação foi realizada seguindo os seguintes passos: (Ver imagem 5) Executar o driver; Selecionar o "Nome do Driver"; Clicar em "Criar porta ..."; Informar o IP fixado na impressora eclicar em "ESTÁ BEM"; (imagem 5) A instalação do modelo i7, que utiliza apenas comunicação via USB ou Serial Virtual, foi semelhante à instalação do modelo i9, utilizando assim o mesmo driver. Para a configuração do logotipo na impressora, seguir os passos: Utilizando o aplicativo Utility, selecionar a impressora na Lista de Impressoras e clicar em “Gerenciar Imagens”; Clicar em “Download”. (Ver imagem 6) (imagem 6) Clicar em “Adicionar” e localizar a imagem que será utilizada; Clicar em “Modo download de G”. (Ver imagem 7) (imagem 7) Após a confirmação do download, a imagem será exibida em “Lista de imagens”, sendo os dois números exibidos o KeyCode1 e KeyCode2. (Ver imagem ? (imagem ? Sobre a utilização: ACBrPosPrinter Os resultados informados abaixo foram adquiridos, em testes, utilizando o componente ACBrPosPrinter e o seu Demo PosPrinterTestes.exe. As configurações utilizadas foram: Modelo: ppEscPosEpson (o protocolo ppEscElgin não deve ser utilizado para esta impressora, pois ele é específico para o modelo Elgin VOX). Porta: Informar a COMxx emulada, ou Compartilhamento do Windows (ex: \\localhost\elgin), ou Para comunicação TCP/IP, informar TCP:IP:Porta. (ex: TCP:192.168.93.31:9100). Ajustar a Baud Rate em 38400 ou 115200. (Padrão de fábrica 115200, porém de acordo com o fabricante, ao utilizar a porta 38400, automaticamente é convertido para 115200, sendo assim funcional com ambas) Colunas: 48. Espaços: A tag 0 deixou o espaçamento entre as linhas adequado, porém foi possível aumentar o mesmo sem verificar problemas, deixando o espaçamento menor e, consequentemente, diminuindo o tamanho da impressão. Linhas a Pular: 2 (ao deixar com 0 a guilhotina foi acionada antes do término da impressão). Pag.Codigo: pc850 (a impressora é compatível com as páginas de códigos pc437, pc850, pc852, pc860, pc1252, dentre outras que podem ser verificadas no manual do usuário). Cod.Barras: Largura - 0, Altura - 0, tag Exibe Numero ativa. Logotipo: KC1 - 48, KC2 - 48 (o keycode do logotipo configurado é o 0 0, assim informar seu valor corresponde de acordo com a tabela ASCII), Fator x - 1 para logotipo reduzido ou 2 para expandido na largura, Fator y é semelhante ao Fator x, porém utilizado regular a altura. Gaveta: Gaveta - 1, On - 50, Off - 200. Resultados apresentados nas Tags de impressão: Tags de Formatação de Caracter: A impressão funcionou corretamente, com exceção da fonte itálico (não encontrado nenhuma especificação informando os tipos de fontes utilizados). (Ver imagem 9) (imagem 9) Tags de Alinhamento: Todos os três alinhamentos (esquerda, centralizado e direita) foram impressos corretamente. (Ver imagem 10) (imagem 10) Teste de Código de Barras: Os códigos EAN 8, EAN 13, CODE 39, CODE 93, CODE 128 e UPC-A foram impressos corretamente, conforme informados no manual, os códigos INT 25 e CODABAR também foram impressos, porém estes não se encontram no manual, os códigos STD 25, CODE 11 e MSI não foram impressos pois não são compatíveis. (Ver imagem 11) (imagem 11) Tags de QRCode: A impressão dos QRCodes funcionou corretamente, ajustando os alinhamentos e tamanhos. A leitura é funcional. (Ver imagem 12) (imagem 12) Tags de Logotipo: O logotipo foi impresso corretamente. (Ver imagem 13) (imagem 13) Tag de Gaveta: A comunicação com a gaveta foi efetuada corretamente. Leitura de Status: Retornos apresentados (utilizando as três formas distintas de configuração de porta): Impressora pronta para o uso, retornou a mensagem: “Nenhum Erro encontrado”. Impressora com tampa aberta, retornou a mensagem: “stOffLine, stTampaAberta”. Impressora com a bobina perto do fim, retornou a mensagem: “stPoucoPapel”. Impressora sem bobina, retornou a mensagem: “stPoucoPapel, stSemPapel, stOffLine”. SAT Teste Os resultados relatados abaixo foram levantados através do componente Fortes Report, utilizando o SATTeste.exe. As configurações de impressão utilizadas foram as seguintes: Largura: 280. Topo: 5. Fundo: 400. Esquerda: 0. Direita: 2. Resultados apresentados após as impressões: Durante os testes foram impressos extratos e extratos resumidos de cupons fiscais eletrônicos, contendo as seguintes informações descriminadas: Logotipo; Dados do consumidor; 6 itens distintos; Totalizadores; Dados para entrega; Observações do contribuinte; Valor aproximado dos tributos dos itens; Numeração do SAT; Código de barras; QRCode. Todos os campos saíram corretamente seguindo as tags de formatação de caracteres, o logotipo saiu centralizado, as quebras de linha foram acionadas no momento certo como também a guilhotina. As impressões dos extratos de vendas do SAT foram realizadas com uma média de, aproximadamente, 250 milissegundos. Os extratos resumidos de vendas do SAT foram impressos com uma média de, aproximadamente, 220 milissegundos. (imagem 14) Comparativo i9 vs i7: A impressora térmica i7 é um modelo mais simples do modelo i9, com alguns aspectos notáveis de diferença, sendo estes: Em questões físicas, o modelo i7 é menor visando sua largura e altura. O modelo i7 não possui guilhotina, BIPs informativos e nivelamento para o aviso de pouco papel. Sua comunicação é realizada apenas via USB ou Serial Virtual. A impressora i7 imprimiu extratos de vendas com uma velocidade média de, aproximadamente, 250 milissegundos, e os extratos resumidos em, aproximadamente, 230 milissegundos, mostrando que, em questões de velocidade, ambas são semelhantes, porém o modelo i9 é alguns milésimos de segundo mais rápido. Utilizando o PosPrinterTeste todas as tags obtiveram os mesmos resultados com ambas impressoras. Conclusões: A impressora térmica não fiscal Elgin i9 é uma ótima escolha, além de possuir uma boa apresentação física, os seus avisos sonoros auxiliam o usuário a se precaver, evitando transtornos durante a sua utilização. Em ambas impressoras, a troca de bobina é realizada de forma simples, possuindo uma imagem de auxílio. O procedimento de instalação é simples de ser realizado, porém este pode se tornar um pouco complicado quando feito por usuários sem familiaridade no ramo, devido à necessidade em alterar o tipo de comunicação entre Virtual Serial ou USB (dependendo da forma de utilização), e caso a utilização seja feita via TCP/IP, o driver utilizado para instalação direta deve ser solicitado junto ao suporte técnico de automação Elgin, não sendo disponibilizado para download no site (em testes, foi possível realizar a comunicação adicionando a porta TCP/IP diretamente pelo Windows, porém tal procedimento requer um conhecimento básico sobre como manusear as impressoras instaladas). Foi atualizado o Firmware de ambas as impressoras sem encontrar problemas durante o procedimento. No modelo i7, a atualização foi necessária para impressão do QRCode “Exemplo de QRCode para SAT” (imagem 12), o procedimento realizado em ambas impressoras é descrito no anexo Atualização do Firmware no término deste tópico. Ambos os modelo são rápidos e trabalham perfeitamente em ambientes de produção, porém a guilhotina existente na i9 é um diferencial notório, devido a grande agilidade pós impressão em um ambiente de grande movimentação. *Anexo Atualização do Firmware. Modelo i9: Para atualização do firmware foi utilizado o aplicativo Elgin Utility na versão 1.2.2.10, e o arquivo DFU na versão 1.3.24. (Aplicativo e DFU disponíveis para download no site). Os procedimentos executados durante a atualização foram realizados seguindo os passos descritos no arquivo “Procedimento gravação de Fw - i9_Ver 1.2.pdf”, localizado dentro do arquivo compactado “FW – i9_V1.3.24.rar”, que pode ser encontrado no site. Todo procedimento foi realizado sem localizar problemas. Modelo i7: Para atualização do firmware foi utilizado o aplicativo Elgin Utility na versão 1.2.2.10, e o arquivo DFU na versão 1.00.08. (DFU coletado diretamente com o suporte automação Elgin). A atualização procedeu seguindo os passos: Em lista de impressoras, selecionar o modelo que será atualizado (se necessário configurar o mesmo em “Adicionar Impressora”); Após a conexão ser funcional, clicar em “Atualizar FW. (Ver imagem 15) (imagem 15) Clicar em “Selecione Arquivo DFU...” Após abrir o arquivo ELGIN_i7_V1.00.08.dfu clicar em “Update”; Ao confirmar a mensagem é necessário reiniciar a impressora. (Ver imagem 16) (imagem 16) Elgin i9 x Elgin i7
  27. 14 points
    Caros companheiros de fórum : Hoje tomei conhecimento da Nota Técnica 2016.002 Alteração Leiaute da NF-e , baixei e dei uma rápida analise. Muitas dúvidas e é claro que será necessário muito esforço do grupo do ACBr para atender. Pretendo na próxima reunião da empresa que trabalho propor a eles retornar o pagamento do SAC como forma de ajuda e de reconhecimento ao esforço do team ACBr. Gostaria de fazer um apelo a todos os demais que ajudássemos também desta forma, pois vai tomar tempo fazer muitas dessas mudanças. Abraço a todos.
  28. 13 points
    O que é o ACBrPosPrinter e Esc/Pos ? Para quem ainda não conhece, o ACBrPosPrinter é o nosso componente para acesso a Impressoras de Bobinas, Não fiscais... Essas impressoras, denominadas Impressoras POS (Point of Sale), contemplam uma linguagem de impressão de linha, interna, onde podemos realizar tarefas como: Modificar os atributos de impressão Imprimir códigos de barras 1D e 2D (QRCode) Acionar dispositivos ligados a Impressora, como Gaveta de Dinheiro, Guilhotina Ler status da Impressora (Tampa aberta, pouco ou sem papel, etc) No mercado brasileiro, há vários modelos, que contemplam várias linguagens, como por exemplo: EscPos, EscBema, EscDaruma, etc... As linguagens são chamadas de "Esc", pois os comandos geralmente iniciam com o caractere não imprimível, ESC ou #27... Exemplo: se enviarmos para a Impressora a String: chr(27) + 'E' + chr(01), ligaremos o modo Negrito A grande maioria dos fabricantes, procurou seguir o padrão Epson, que é a marca mundialmente líder nesse segmento, e a sua linguagem Epson Esc/Pos... O componente ACBrPosPrinter suporta a grande maioria das linguagens e modelos existentes no mercado brasileiro... mas nem todos os recursos, estão disponíveis em todas as linguagens... Usar o ACBrPosPrinter é extremamente simples, e não requer o conhecimento de Esc/Pos... Através de suas Tags, você pode construir ricos relatórios, com várias formatações de fontes, alinhamento, Imagens, códigos de barra e QRCode... A título de Exemplo, usamos o próprio componente ACBrPosPrinter, para criar o Extrato do SAT, Unit ACBrSATExtratoESCPOS.pas e o DANFCe, unit ACBrNFeDANFeESCPOS.pas Se você usa o ACBrMonitorPLUS, poderá acessar o ACBrPosPrinter pelo objeto ESCPOS... Veja no manual: https://acbr.sourceforge.io/ACBrMonitor/ESCPOSImprimirTags.html Você pode baixar um Demo compilado do ACBrPosPrinter em: Você pode baixar uma Apresentação sobre o ACBrPosPrinter em: Se você não programa em ObjectPascal (Delphi/Lazarus), pode baixar a biblioteca (DLL) ACBrLibPosPrinter em: https://www.projetoacbr.com.br/forum/files/category/35-acbrlibposprinter/ Sobre a Impressão de Imagens no ACBrPosPrinter A muito tempo eu sentia falta dos seguintes recursos, no componente ACBrPosPrinter Impressão de Imagens Gravação e manipulação de Logos na memória da Impressora... Agora isso já é possível... Após muita pesquisa, e com a ajuda de vários outros artigos que encontrei na Internet (veja referência nos fontes), consegui implementar a Impressão de Imagens no modo "Raster Image"... Devido a característica desses equipamentos, apenas a impressão de Imagens monocromáticas é suportada. Existem vários sites de conversão de Imagem, para BMP Monocromático, on-line, como por exemplo: https://online-converting.com/image/convert2bmp/ Novos métodos no componente ACBrPosPrinter procedure ImprimirImagemStream(ABMPStream: TStream); // Permite Imprimir uma Imagem, no formato BMP Monocromático, de um Stream procedure ImprimirImagemArquivo(ArquivoBMP: String); // Carrega e imprime uma Imagem de um Arquivo. Em aplicações visuais (não console) será usado o Objeto TPicture, que permite carregar vários formatos de Imagem, podendo ser Colorida ou em Escala de cinza. A Imagem será convertida para BMP Monocromática. Entretanto, procure sempre usar Imagens BMP Moncromáticas, para evitar processamento desnecessário procedure ImprimirImagemRasterStr(const ARasterStr: AnsiString; AWidth, AHeight: Integer); // Imprime uma Imagem a partir de uma String no formato "Raster Image" (veja abaixo) procedure ImprimirLogo(AKC1: Integer = -1; AKC2: Integer = -1; AFatorX: Integer = -1; AFatorY: Integer = -1); // Imprime um Logo préviamente gravado na memória da Impressora. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure GravarLogoStream(ABMPStream: TStream; AKC1: Integer = -1; AKC2: Integer = -1); // Grava uma Imagem de Logo, no formato BMP Monocromático, a partir de um Stream, nas posições informadas. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure GravarLogoArquivo(ArquivoBMP: String; AKC1: Integer = -1; AKC2: Integer = -1); // Grava uma Imagem de Logo, a partir de um arquivo em Disco, nas posições informadas. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure ApagarLogo(AKC1: Integer = -1; AKC2: Integer = -1); // Remove um Logo da memória da Impressora. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo Nova Tag de Bloco <bmp> - Imprime Imagem BMP monocromática. Conteúdo pode ser: Path da Imagem, Stream em Base64 ou AscII Art (0 e 1) Veja alguns exemplos de uso: Inicializa </zera>, define o alinhamento no centro </ce>, e efetua a impressão da Imagem em disco, no Path "C:\temp\acbrmono.bmp" </zera></ce><bmp>C:\temp\acbrmono.bmp</bmp> Imprimir uma Imagem de BMP Mono, codificada em Base64 <bmp> Qk3eDQAAAAAAAD4AAAAoAAAA+gAAAG0AAAABAAEAAAAAAKANAAAAAAAAAAAAAAIAAAAAAAAAAAAAAP///wD/////////////////////////////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D/////////////////////////////////////////wP4AAAAAAAAAAAAAAA8A8AAAAAAAAAAAAAAAAAAAAD/A/AAAAAAAAAAAAAAADwD4AAAAAAAAAAAAAAAAAAAAD8D4AAAAAAAAAAAAAAAPAHwAAAAAAAAAAAAAAAAAAAAHwOAAAAAAAAAAAAAAAA8APgAAAAAAAAAgAAAAAAAAAAHAwAAAAAAAAAAAAAAADwAfAAAAAAAAAcAAAAAAAAAAAcDAAAAAAAAAAAAAAAAPAA+AAAAAAAAfgAAAAAAAAAAAwIAAAAAAAAAAAAADgAQAB8AAAAAAAH+AAAAAAAAAAABAgAAAAAAAAAAAAACAAAABAAAAAAAAAAAAAAAAAAAAAEAAAAAADDvjnnNn489ngHw4zM+cPM/MD8w7PO4AAAAAAAAAAAAMN+e/c2fn7+/A/nzMz9x+z8wP7Hd27gAAAAAAAAAAAA/2ZnNzZ2YO7ODGxszf3ODOzAxsdx7uAAAAAAAAAAAABmZmc3Nj7gfs4cDGzN/c4MfMDO4ffu4AAAAAAAAAAAAH5mYzd2BmYOzBwObuzNzmxMwPzgdg7gAAAAAAAAAAAAfGb55+5+fHx4HAfP/Pn3zHzAzvvz7uAAAAAAAAAAAAA8AGAAAAAAAAAO4AAAAAAAAMDOAAAA4AAAAAAIAAAAADwAIAAAAAB4AA/AAAMAAAwAwPwAAA7gAAAABAgAAAAAAAAAAAAAAADwA4A+H/4AADwAAAAAAAAAAAAEDAAAAAAAAAAAAAAAAPAAAB//4AAAfAAAAAAAAAAAAAwOAAAAAAAAAAAAAAAA8AAAD/8AAAB4AAAAAAAAAAAAHA8AAAAAAAAAAAAAAADwAAAH/AAAAHAAAAAAAAAAAAA8D4AAAAAAAAAAAAAAAPAAAAPAAAAA4AAAAAAAAAAAAHwP4AAAAAAAAAAAAAAA8AAAAAAAAAHgAAAAAAAAAAAB/A/////////////////////////////////////////8D/////////////////////////////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D///////gAP///Af////gA//////+Af//4B///////wP///+AAeAB4AB4D+AAB/ADwAAAAf+B4AHgH///////A////4AA4AHgAHgfgAAB+APAAAAAH8HgAeAf//////8D////wADgAeAAeD4AAAB8A8AAAAAHweAB4B///////wP////AAPABwABw+AAAAB4DwAAAAAHx4AHgH///////A////+AA///AAPD4AAAAHwPAAAAAAPHgAeAf//////8D////4AB//8AA4eAAAAAHg8AAAAAAeeAB4B///////wP////wAH//wAHj4AAAAAeDwAAAAAB54AHgH///////A/////AAf/+AAePAAAAAA8PAAAAAADngAeAf//////8D////8AAAAAADx4AAAAAD48AAAAAAPeAB4D///////wP////wAAAAAAPHAAAAAAHjwAAAAAA94AHgP///////A/////gAAAAAA48AAP8AAOPAAP/gAB3gAeA///////8D////+AAAAAADjwAB/4AA48AA//AAH+AB4D///////wP////8AAAAAAe+AAP/wADzwAD/+AAf4AHgf///////A/////wAAAAAB/4AB8PgAPPAAOf4AB/gAeB///////8D/////AAAAAAP/AAHgfAAc8AA7zgAH+AB4H///////wP////+AAAAAA/8AA8A8AP7wAD/+AAd4AHg////////A/////4AAAAAD5wADgBwH/vAAP/4AD3gAeD///////8D/////wAH/AAePAAOAHB/+8AA//AAPeAA4P///////wP/////AAf8ABw8AA4Af/8DwAD/gAA54ADg////////A/////8AB/gAPDwAHgB//APAAAAAAHngAPH///////8D/////4AH+AA8PAAeAD+AA8AAAAAA+eAAf////////wP/////gAf4ADw8AB4APgADwAAAAAHx4AB/////////A/////+AA/gAf7wAHgAwAAPAAAAAA+HgAH////////8D/////8AD8AB//AAeAAAAA8AAAAAfweAAHP///////wP/////wAHwAH/8AB4AAAADwAAAAB+B4AAAf///////A//////gAfAA8fwAHgA4AAPAAAAAB8HgAAA///////8D/////+AB4ADwPAAOAH+AA8AAAAADweAAAD///////wP/////4ADgAeA8AA4Af/gDwAAAAAHh4AAAP///////A//////wAMAB4BwADgB//+PAAP/AAPHgAgAf//////8D//////AAwAHAHAAPAHP/+8AA/+AA8eACAB///////wP/////+ADAA8AcAAfx8A/7wAD/4ADx4AMAD///////A//////4AEADgB4AB//gAPPAAODgAHHgA4AP//////8D//////gAQAOAHgAD/+AA88AA8+AAeeADwB///////wP//////AAAB4AOAAH/gADjwAD/4AB5////////////A//////8AAAHgA8AAP8AAOPAAP/gAHn///////////8D//////wAAA8ABwAAAAAB48AA/wAAef///////////wP//////gAADwAHgAAAAAPDwAAAAABwAAH/////////A//////+AAAOAAOAAAAAA8PAAAAAAPAAAf////////8D//////8AAB4AA+AAAAAHg8AAAAAA8AAD/////////wP//////wAAHgAB4AAAAA8DwAAAAADgAAf/////////A///////AAA8AAD4AAAAHwPAAAAAA/AAD/////////8D//////8AADwAAPgAAAA+A8AAAAAD+AAP/////////wP//////4AAPAAAfgAAAHwDwAAAAAf4AB//////////A///////gAA4AAAfgAAB+APAAAAAHzwAP/////////8D///////AAHgAAA/gAAfwA8AAAAD/PgA//////////wP/////////8AAAB////8AD//////wfAH//////////A//////////wAAAB////gAP//////88A//////////8D//////////gAAAB///4AB////////4H//////////wP//////////AAAAAP/wAAHgAAAAB//w///////////A//////////+AAAAAAHAAA8AAAAAAf/n//////////8D//////////8AAAAAAcAAHwAAAAAAB////////////wP//////////4AAAAABwAAeAAAAAAAAf///////////A///////////wAAAAAHAADwAAAAAAAA///////////8D///////////gAAAAAcAAeAAAAAAAAH///////////wP///////////AAAAABwAD4AAAAAAAA////////////A////////////AAAAAHAAeAAAAAAAAH///////////8D///////////8AAAAAeAD4AAAAAAAA////////////wP///////////4AAAAB4APAAAAAAAAH////////////A////////////4AAAAHgB4AAAAAAAB////////////8D////////////wAAAAeAPAAAAAAAAP////////////wP////////////wAAAB4B8AAAAAAAD/////////////A/////////////gAAAHgHgAAAAAAAf////////////8D/////////////AAAAOA8AAAAAAAD/////////////wP/////////////AAAA4HwAAAAAAA//////////////A//////////////AAADgeAAAAAAAP/////////////8D//////////////AAAPHwAAAAAAD//////////////wP//////////////AAA8eAAAAAAA///////////////A///////////////AADz4AAAAAAH//////////////8D///////////////AAPeAAAAAAD///////////////wP///////////////gA/4AAAAAA////////////////A////////////////wD/AAAAAA////////////////8D////////////////wH4AAAAAP////////////////wP////////////////4fAAAAAH/////////////////A//////////////////8AAAAP/////////////////8D//////////////////8AAA///////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D/////////////////////////////////////////wA== </bmp> Imprimir uma Imagem, baseado em ASCII ART Na Unit ACBrImage.pas, do pacote ACBrComum, é onde a mágica acontece... essa Unit implementa os seguintes métodos function IsPCX(S: TStream; CheckIsMono: Boolean = True): Boolean; // Retorna True se o Stream contém uma Imagem em PCX function IsBMP(S: TStream; CheckIsMono: Boolean = True): Boolean; // Retorna True se o Stream contém uma Imagem em BMP procedure RasterStrToAscII(const ARasterStr: AnsiString; AWidth: Integer; InvertImg: Boolean; AscIIArtLines: TStrings); // Converte uma String codificada em "Raster Image", para ASCII ART procedure AscIIToRasterStr(AscIIArtLines: TStrings; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString); // Converte uma String codificada em ASCII ART para "Raster Image" procedure BMPMonoToRasterStr(ABMPStream: TStream; InvertImg: Boolean; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString); // Converte uma Imagem no formato BMP Monocromático, gravada em um Stream, para uma String codificada em "Raster Image" procedure RasterStrToBMPMono(ARasterStr: AnsiString; AWidth: Integer; InvertImg: Boolean; ABMPStream: TStream); // Converte uma String codificada e "Raster Image", para uma Imagem no formato BMP Monocromático, gravando-a em um Stream {$IfNDef NOGUI} procedure BitmapToRasterStr(ABmpSrc: TBitmap; InvertImg: Boolean; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString; LuminosityThreshold: Byte = C_LUMINOSITY_THRESHOLD); // Apenas disponível se a aplicação não for console. converte uma Imagem de um TBitMap, para uma String codificada e "Raster Image" {$EndIf} Use a força, leia os fontes Não deixe de estudar os fontes do Projeto Demo, PosPrinterTeste, na pasta: \ACBr\Exemplos\ACBrSerial\ACBrPosPrinter\Delphi Nesse projeto há vários exemplos de como Imprimir Imagens, e manipular Logotipos, usando as Tags e Métodos do componente ACBrPosPrinter O que é o modo "Raster Image" ? O Modo Raster é um fluxo de Bytes que representam os Pixels da Imagem... https://pt.wikipedia.org/wiki/Raster Exemplo: Imagine a Seguinte imagem, de 16 x 16 Pixels... Se fôssemos representá-la em ASCII ART, teríamos: 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 Para transformá-la em Raster, agrupamos os Bits, em Bytes (8 bits)... portanto a primeira linha ficaria: Em Binário: 10101010 + 10101010 Em Hexa: AA + AA Em Decimal: 170 + 170 Então a String em Raster Image, da Imagem acima seria o equivalente a: #170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170 Para imprimir uma String em Raster, é fundamental sabermos qual a largura em Pixels, da imagem A Epson disponibiliza utilitário, para converter imagens para o formato Raster: Epson BmpToRaster (o estudo do conteúdo do arquivo gerado por esse Utilitário, foi essencial na implementação dos métodos de ACBrImage)
  29. 13 points
    Vão em um pc que está FUNCIONANDO, vá em executar e digitem certlm.msc depois vão na aba (Autoridades Certificação Raiz Confiável) depois em certificado, da um CTRL A clica com o botão direito, TODAS AS TAREFAS e EXPORTAR, avança ate pedir a senha. Põe num pendrive, depois vá no pc com problemas e faz a mesma coisa, vá em executar e digitem certlm.msc depois vão na aba (Autoridades Certificação Raiz Confiável) depois em certificado, da um CTRL A e deleta tudo, depois de deletar é só clicar com o direito de novo na parte que ficou em branco e importar o certificado que você exportou da maquina que estava boa na hora de escolher o local para armazenar não esqueçam de colocar ele no repositório (Autoridades Certificação Raiz Confiável) e pronto, tudo funcionando de novo, testei em vários windows, 7, 10, e 2012, todos funcionaram perfeito em mais de 10 clientes diferentes. coloquei a minha Cadeia de certificados boa aí. Cadeia de Certificado, senha 123.pfx Vão em um pc que está FUNCIONANDO, vá em executar e digitem certlm.msc depois vão na aba (Autoridades Certificação Raiz Confiável) depois em certificado, da um CTRL A clica com o botão direito, TODAS AS TAREFAS e EXPORTAR, avança ate pedir a senha. Põe num pendrive, depois vá no pc com problemas e faz a mesma coisa, vá em executar e digitem certlm.msc depois vão na aba (Autoridades Certificação Raiz Confiável) depois em certificado, da um CTRL A e deleta tudo, depois de deletar é só clicar com o direito de novo na parte que ficou em branco e importar o certificado que você exportou da maquina que estava boa na hora de escolher o local para armazenar não esqueçam de colocar ele no repositório (Autoridades Certificação Raiz Confiável) e pronto, tudo funcionando de novo, testei em vários windows, 7, 10, e 2012, todos funcionaram perfeito em mais de 10 clientes diferentes. coloquei a minha Cadeia de certificados boa aí. Cadeia de Certificado, senha 123.pfx
  30. 13 points
    Para atender a nova regra de validação Y01-20 foi adicionado a seguinte propriedade ao componente ACBrNFe: ACBrNFe1.Configuracoes.Geral.CamposFatObrigatorios Esta nova propriedade virá com valor default TRUE, ou seja, os campos nFat, vOrig, vDesc e vLiq sempre serão gerados mesmo com valores zerados caso existe algum campo do grupo FAT preenchido. Esta propriedade foi criada pois a NT 2016.002 - V 1.60 introduziu a regra Y01-20 e nem todos os estados ja adotaram a mesma. Alguns já estão validando em ambiente de produção, pois a NT previa inicialmente como data de entrada em produção dia 09/07/2018 e depois a data foi adiada para 23/07/2018. Caso você receba o erro abaixo significa que sua pasta schemas está desatualizada. Atualize sua pasta schemas. 1824 - Element '{http://www.portalfiscal.inf.br/nfe}vDesc': '0.00' is not a valid value of the atomic type '{http://www.portalfiscal.inf.br/nfe}TDec_1302Opc' Caso receba como retorno do envio "Falha no Schema XML" seu estado ainda não está aplicando a regra acima, neste caso a propriedade CamposFatObrigatorios deverá receber o valor FALSE. Disponível na revisão 15438 do SVN.
  31. 12 points
    COMUNICADO IMPORTANTE Gostaríamos de comunicar que assinamos em 08/05/2019 um contrato que prevê a compra da operação de hardware da Bematech no Brasil pela empresa Elgin. Sujeito à aprovação pelo CADE (Conselho Administrativo de Defesa Econômica), o resultado da junção dessas operações ampliará de forma significativa a competitividade do mercado brasileiro no segmento de automação comercial. A operação Elgin-Bematech amplia a capacidade de inovação e entrega de valor aos clientes por meio da otimização do portfólio de hardware, geração de valor no ecossistema de distribuidores, revendas e assistências técnicas e liderança estratégica com foco na inovação de equipamentos e dispositivos inteligentes. Estamos bastante otimistas com o resultado dessa operação para todos e com os benefícios que em conjunto a nova companhia poderá levar aos seus stakeholders. A TOTVS segue com seu foco no mercado de software, bem como no desenvolvimento de novos negócios, conforme anunciado recentemente, na busca pelo crescimento esperado para esse e os próximos anos. Fonte: https://www.bematech.com.br/sobre-nos/
  32. 12 points
    Olá pessoal, Na postagem "Como obter o XML do Fornecedor" mostrei o uso do método DistribuicaoDFePorChaveNFe, nessa nova postagem vou mostrar mais dois métodos: DistribuicaoDFePorUltNSU e DistribuicaoDFePorNSU. Vamos a sintaxe, que por sinal é semelhante ao do DistribuicaoDFePorChaveNFe. DistribuicaoDFePorUltNSU( <código da UF do destinatário>, <CNPJ do destinatário>, <numero do ultimo NSU> ) DistribuicaoDFePorNSU( <código da UF do destinatário>, <CNPJ do destinatário>, <numero do NSU> ) Primeiramente vamos entender o que vem a ser esse tal de NSU. NSU - numero sequencial único, é um numero atribuído pelo Ambiente Nacional ao documento ora compartilhado pelas SEFAZ-Autorizadora. Exemplo: o emitente da nota é do Estado de São Paulo, logo a nota é enviada para a SEFAZ-SP esta por sua vez vai compartilhar com o Ambiente Nacional as notas que foram autorizadas, o Ambiente Nacional por sua vez atribui um NSU para cada nota que receber. Na verdade o Ambiente Nacional gera um resumo da nota e atribui o NSU a esse resumo primeiramente e não a nota propriamente dita. Um NSU só será atribuído a nota quando o destinatário enviar o evento de Manifestação do Destinatário. Lembre-se o NSU da nota será um numero diferente do NSU do resumo dela, e por ser gerado após o envio do evento de Manifestação do Destinatário, podemos concluir que o NSU da nota é maior que o NSU do resumo. Vamos agora entender como funciona os dois métodos mencionados acima. O método DistribuicaoDFePorNSU é o mais simples de entender, pois este simplesmente baixa o documento que possui o NSU informado. Note que usei o termo documento, pois o webservice DistribuicaoDFe pode retornar os seguintes tipos de documentos: Resumo de Nota, Nota Completa, Resumo de Evento e Evento Completo. Se o NSU informado no método DistribuicaoDFePorNSU for o NSU de um resumo, o que teremos como retorno será o XML do resumo e não o XML da Nota. Por outro lado o método DistribuicaoDFePorUltNSU nos retorna uma lista com até 50 documentos, cujos NSU são superiores ao NSU informado. Exemplo: DistribuicaoDFePorUltNSU( 35, 12345678000123, 450 ) ===> 450 é o valor do Ultimo NSU. Ao executar o método, como dito anteriormente poderá nos retornar uma lista com até 50 documentos, pois bem suponha que retorne 50, os NSU desse documentos retornados serão, 451, 452, 453, ...., 498, 499, 500. Lembre-se que nessa lista podemos ter Resumos de Notas, Notas Completas, Resumo de Eventos e Eventos Completos. Através de uma propriedade chamada Schema nos traz a informação do tipo de documento retornado. Temos também outras duas propriedades muito importantes, são elas: UltNSU e MaxNSU. A propriedade UltNSU nos informa o numero do NSU referente ao ultimo documento da lista, já a propriedade MaxNSU nos informar o maior NSU existente no Ambiente Nacional. Continuando o exemplo acima, vamos supor que após a execução os valores de UltNSU e MaxNSU são respectivamente 500 e 750. Era de se esperar mesmo que o valor de ultNSU seja 500 pois informamos 450 e foi retornado 50 documentos, logo o NSU do ultimo é 500. A próxima vez que formos executar o DistribuicaoDFePorUltNSU devemos informar o valor 500, para que ele retorne os documentos a partir de 501 que é o próximo da lista. E devemos repetir o procedimento até que o valor de ultNSU seja igual a maxNSU, desta forma vamos ter baixado todos os documentos disponibilizados pelo Ambiente Nacional. Lembre-se que o valor de MaxNSU tende sempre a crescer a medida que novas notas forem emitidas e compartilhadas com o Ambiente Nacional e a medida que o destinatário for enviando o evento de Manifestação do Destinatário. Entre uma execução e outra do DistribuicaoDFePorUltNSU você pode realizar a manifestação referente a cada resumo de nota obtido, ou seja, enviar o evento de Manifestação do Destinatário. Desta forma a medida que você vai avançando na lista o Ambiente Nacional já vai liberando a Nota Completa (notas manifestadas) e disponibilizando ela na lista. O DistribuicaoDFe não serve apenas para que possamos obter o XML do fornecedor, mas também descobrirmos se existe alguma empresa emitindo notas contra o nosso CNPJ sem no nosso consentimento. Você descobre isso através do DistribuicaoDFePorUltNSU e pode avisar a SEFAZ enviando o evento de Manifestação do Destinatário: Desconhecimento da Operação. Esse evento diz a SEFAZ que você não comprou desse fornecedor. Para saber mais sobre Manifestação do Destinatário vide a Nota Técnica 2012/002 versão 1.02 e para saber mais sobre o Distribuição DFe vide a Nota Técnica 2014/002 versão 1.02b, ambas estão disponíveis no Portal Nacional da NF-e.
  33. 12 points
    until
    Webinar ACBr - Como emitir boletos com o ACBrMonitor No dia 07/03 realizamos o primeiro Webinar do Projeto ACBr com o título "NFC-e e SAT - Como tratar a contingência". No dia 16/03 as 16:00 iremos realizar o segundo encontro com o tema "Como emitir boletos com o ACBrMonitor". Para participar, basta ser assinante do SAC do ACBr, no dia 16/03 pela manhã todos os usuários com conta ativa no SAC receberão um convite para o Webinar. Apresentado por @Celso Evento disponível para todos os membros do SAC do ACBr E no dia 21/03 iremos repetir o tema do primeiro webinar, se você não pode assistir ou ficou com dúvidas aproveite para participar, o tema será o mesmo mas o evento será ao vivo. Slides e exemplos podem ser baixados no link abaixo.
  34. 12 points
    Realizamos recentemente testes de homologação do SAT Tanca TS-1000 utilizando a aplicação do ACBr, SATTeste.exe e a aplicação do fabricante, SAT_Ativação.exe. Instalação do SAT: Drivers, manual e aplicativos do fabricante, podem ser facilmente encontrados em: http://www.tanca.com.br/drivers.php?cat=24&sub=43 A instalação do Driver do equipamento não requer nenhuma configuração específica. Em algumas máquinas, o equipamento é reconhecido e instalado automaticamente. Caso isso não ocorra, o driver encontra-se no CD que acompanha o equipamento ou no site do fabricante, já mencionado anteriormente, e para sua instalação, basta localizar o item “Gadget Serial V2.4” no gerenciador de dispositivos do computador, clicar com o botão direito sobre o mesmo e, em seguida em “Atualizar Driver”. Após isso, selecione a opção “Procurar software de driver no computador”, informe a pasta onde o driver encontra-se e clique em Avançar. O Driver do fabricante não é assinado digitalmente, e isso pode causar problemas na instalação em Sistemas Operacionais mais recentes, como o Windows 10, onde apenas drivers assinados são aceitos. No Windows 8.1, será exibida uma janela de segurança, onde será necessário clicar na opção “Instalar este software de driver mesmo assim”, em seguida, o driver já deverá estar instalado com o nome “SAT TANCA”, basta clicar em fechar para concluir. Ativação do SAT e Associação de Assinatura: Para realizar a Ativação do SAT e a Associação de Assinatura, existem duas maneiras: pelo aplicativo do fabricante ou pelo SATTeste.exe. Para realizar o processo utilizando o aplicativo do fabricante SAT_Ativação.exe, basta localizá-lo no CD que acompanha o equipamento ou no site do fabricante, e seguir o passo a passo do documento Manual SAT Tanca TS-1000. Após realizar o processo de ativação, ao consultar SAT, deverá ser retornada a mensagem “SAT em operação” Para realizar o processo de Ativação e Associação de Assinatura pela aplicação SATTeste.exe, basta executar o aplicativo e ir até a aba Ativação e, em seguida, clicar na opção a ser realizada. Para isso, os dados de Configuração devem estar devidamente preenchidos em todas as abas, da seguinte maneira: Inicialização Selecione a opção “satDinamico_stdcall” Dados do SAT Cfe Arq.Log: ACBrSAT.log (será salvo na mesma pasta do executável) Nome DLL: Diretório da DLL “sat.dll” do fabricante Ambiente: taHomologação Código de Ativação: 12345678 Página de Código: Marcar a opção UTF8 (65001) Versão: 0,07 As opções Formatar XML e Remover Acentos não são necessárias para esse modelo de SAT. As opções de Salvar XMLs deverão ser marcadas conforme necessidade. Dados Emitente CNPJ: 08723218000186 IE: 149626224113 Regime Tributário: RTRegimeNormal Regime Trib. ISSQN: RTISSNenhum Ind.Rat.ISSQN: irNao Dados Sw.House CNPJ: 16716114000172 Assinatura Sw.House: SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT Configuração de Rede: O SAT Tanca TS-1000 funciona corretamente tanto para redes com proxy como para redes sem proxy, basta realizar a configuração da rede no mesmo. A configuração de rede pode ser realizada no aplicativo do fabricante ou no SATTeste.exe. SAT_Ativação (Aplicativo do Fabricante) SATTeste.exe (Aplicativo ACBr) O Equipamento O equipamento é um aparelho compacto em plástico ABS anti-chama, fácil de realizar a instalação e configuração. O equipamento possui as seguintes características: - Processador Seguro de 400 MHz - Equipamento Exclusivo para Certificado AC-SAT - Memória de Armazenamento de 4GB - Dispositivo Visual com 9 indicadores - Botão de Reset protegido contra acionamento acidental - Dimensões de 110 x 90 x 26mm - Peso de 145 gramas TS-1000 Versão Sw.Básico 02.02.00 Layout XML Entrada 0.07 Fonte Externa Não Portas de Eth 2 Chave Liga/Desliga Não Wi-Fi Não Tipo Cabo USB USB 2.0 Tipo Gabinete Plástico ABS Anti-chama Fixação Gabinete Sim Trava Antifurto Não Sinalização Leds Ótimo Software de Ativação Bom Suporte a Windows 32/64 Suporte a Linux 32/64 Utilização do SAT Tanca TS-1000: O equipamento possui autodiagnóstico de rede, o que pode facilitar o processo de ativação e configuração do equipamento. Com relação ao consumo de energia, o equipamento funciona com um único Cabo USB. Apesar de o equipamento não possuir fonte externa, o mesmo tem um baixo consumo de energia, portanto, não apresenta problemas, mesmo quando conectado a USB de baixa potência. Quando detectado uma queda de energia, é finalizado o Software Básico do SAT antes do desligamento geral do SAT. Quando o equipamento está em uso, pode-se identificar facilmente o que está ocorrendo apenas observando os Leds de sinalização do equipamento, que possuem legenda de simples entendimento. O equipamento sinaliza para o contribuinte sobre os cupons não transmitidos para a Sefaz. Tal sinalização é realizada através do LED “CF-e SAT Pendente”, que pisca de acordo com o número de dias que os cupons estão na memória pendente de transmissão para a Sefaz. Nota: O tempo máximo para realizar o envio é de 10 dias, portanto, se o Led começar a piscar diversas vezes pode ser um sinal de problemas na rede. Foram realizadas diversas vendas com várias quantidades de itens, para verificar o tempo médio (em segundos) de envio e resposta utilizando SAT TS-1000. O resultado pode ser verificado na tabela abaixo: 03 Itens 93 Itens 150 Itens 249 Itens 321 Itens 498 Itens 501 Itens* 1 0,78 2,61 4,87 9,15 14,73 27,82 2,32 2 0,86 2,65 5,03 9,21 13,75 28,81 2,66 3 0,75 2,75 4,94 10,44 13,80 28,98 2,40 4 0,66 2,92 7,57 9,17 13,98 27,71 2,77 5 0,70 3,07 4,88 11,51 14,14 30,16 2,52 6 0,65 3,01 5,09 9,44 14,00 30,28 2,90 7 0,71 3,03 4,75 8,98 13,87 30,08 2,42 8 0,82 3,06 6,57 9,48 14,53 28,06 2,56 9 0,78 2,93 4,82 10,59 14,19 29,13 2,89 10 0,88 3,00 4,97 9,25 14,36 27,63 2,62 Média = 0,759 2,903 5,349 9,722 14,135 28,866 2,606 * A quantidade máxima permitida para venda com SAT é 500 itens, portanto os resultados para 501 itens, é o tempo de resposta de rejeição. Nota: O tempo que medimos nesse teste, é computado desde o início da transmissão do XML para o SAT, até a recepção do XML de Venda, gerado como resposta pelo SAT... Ou seja, é uma medição diferente do que a Especificação Técnica do SAT preconiza, onde apenas o tempo de Geração do XML da Venda é considerado. SuperLog TANCA: O SuperLog TANCA é um trecho do log onde ficam concentradas as principais configurações e informações sobre o estado do equipamento, que não são possíveis de serem encontradas via comandos do SAT. As informações contidas no SuperLog podem auxiliar desenvolvedores e facilitar o suporte. Para analisar o SuperLog Tanca, basta utilizar a opção “Extrair Logs” do SAT, a opção está pelo aplicativo do fabricante (necessário informar o código de ativação) ou pelo SATTeste (necessário informar o local onde será salvo o arquivo com o log). O SuperLog é gerado automaticamente após o equipamento ser ligado ou quando alguma informação de rede for alterada manualmente. Abaixo, será exibido um exemplo do SuperLog Tanca do equipamento utilizado nos testes: 20161024174206|SAT|info|================= SuperLog TANCA ================== 20161024174206|SAT|info| Versão do Software Básico: 02.02.00 (Rev. 74_020200a/2016) – Versão vigente do SB 20161024174206|SAT|info| Número de Série: 900007064-34 – Número de Série do equipamento 20161024174206|SAT|info| CNPJ do Contribuinte: 08.723.218/0001-86 – Dados do Contribuinte 20161024174206|SAT|info| IE do Contribuinte: 149.626.224.113 – Dados do Contribuinte 20161024174206|SAT|info| Razão Social: TANCA INFORMATICA EIRELI – Dados do Contribuinte 20161024174206|SAT|info| Endereco: RUA MARECHAL FLORIANO PEIXOTO, 166 – Dados do Contribuinte 20161024174206|SAT|info| VILA MARCONDES - PRESIDENTE PRUDENTE – Dados do Contribuinte 20161024174206|SAT|info| Cert. Digital válido até: 18/12/2020 – Validade do certificado digital do SAT 20161024174206|SAT|info| No. do próximo CFe: 000098 – Número do próximo CFe a ser emitido 20161024174206|SAT|info| DH último CFe transmitido: 24/10/2016-15:04:05 – Data e hora do último CFe transmitido à Sefaz 20161024174206|SAT|info| Último CFe transmitido: 35161008723218000186599000070640000977845102 – Chave do último CFe transmitido 20161024174206|SAT|info| DH última comunicação SEFAZ: 24/10/2016-17:40:00 – Data e hora da última comunicação com Sefaz 20161024174206|SAT|info| Último CFe emitido: 35161008723218000186599000070640000977845102 – Chave do último CFe emitido 20161024174207|SAT|info| Qde. de cupons a transmitir: 0 – Quantidade de cupons emitidos e não transmitidos 20161024174207|SAT|info| Tempo até Bloq. Autonomo: 416d16h36m – Tempo restante de operação sem comunicação com Sefaz 20161024174207|SAT|info| Horário de verão: Sim – Se o SAT está ou não no horário de verão 20161024174207|SAT|info|Configurações da rede: 20161024174207|SAT|info| Interface: ETHERNET – Tipo de Conexão de rede em que o SAT foi configurado 20161024174207|SAT|info| Tipo de Rede: DHCP 20161024174207|SAT|info| Proxy: COM CONFIGURACAO 20161024174207|SAT|info| IP do Proxy: 192.168.92.1 20161024174207|SAT|info| Porta do Proxy: 3128 20161024174207|SAT|info| Usuario do Proxy: leticia 20161024174207|SAT|info| Senha do Proxy: possui 11 caracter(es) 20161024174207|SAT|info|Diagnosticos de rede (Testes executados em 24/10/2016-17:27:41): Diagnóstico na Rede do contribuinte baseado nas portas requeridas pela Sefaz para comunicação 20161024174207|SAT|info| Comunicação com o gateway: OK 20161024174207|SAT|info| Porta 43-UDP (DNS): OK 20161024174207|SAT|info| Porta 123-UDP (NTP): OK 20161024174207|SAT|info| Porta 443-TCP (HTTPS): OK (Proxy) 20161024174207|SAT|info|Parametrizações de Uso em vigor (Recebidas em: 19/10/2016): Parametrização do SAT enviada pela Sefaz no momento da ativação, sem este recurso do Log o contribuinte somente tem acesso a estas informações no portal da Sefaz acessando com seu certificado digital. 20161024174207|SAT|info| Nível do Log: [2] 20161024174207|SAT|info| transmissao: [tempo|00h06m00s] – Intervalo de tempo para transmissão dos cupons à Sefaz 20161024174207|SAT|info| verificacao: [tempo|00h01m00s|0001m] 20161024174207|SAT|info| comandos: [tempo|00h06m00s] – Tempo que o SAT acessa o WebService para transmitir ou receber informações 20161024174207|SAT|info| autoBloqueio: [conexao|9999h99m] – Tempo máximo parametrizado para operar offline sem bloqueio 20161024174207|SAT|info|Estado atual: Ativado e desbloqueado – Status atual deste SAT 20161024174207|SAT|info| SAT associado a Software House - CNPJ: 16.716.114/0001-72 – CNPJ do Desenvolvedor do Software 20161024174207|SAT|info|=================================================== Visão geral sobre a experiência de uso do SAT Tanca TS-1000: De maneira geral, a utilização do SAT Tanca TS-1000 foi uma boa experiência, pois o mesmo foi instalado e configurado facilmente seguindo as instruções do Manual do Fabricante. Durante a utilização realizando vendas, não houve problemas ou falhas, tornando-o um SAT com boa performance. O equipamento possui gabinete constituído de material ABS anti-chama, o que faz com que o mesmo embora seja de plástico, não aparente ser frágil. O equipamento possui ótima sinalização dos Leds, identificando de maneira prática o que está ocorrendo com o mesmo. Outro ponto interessante do modelo TS-1000 é o tamanho e peso, o mesmo é bastante compacto e leve (apenas 145 gramas), sendo assim possível fixá-lo facilmente em pequenos espaços, ou mesmo utilizá-lo em cima da mesa sem perda de espaço. Outro fator bastante positivo, é o fato do mesmo sinalizar o tempo (em dias) que possui cupons pendentes de transmissão à Sefaz, piscando o LED “CFe SAT Pendente”, isso facilita muito para o próprio contribuinte se atentar para não ultrapassar o limite de dias permitido pela Sefaz (máximo 10 dias). E por último, não posso deixar de citar o SuperLog TANCA, que é uma ótima funcionalidade de ajuda aos desenvolvedores e principalmente, ao suporte para prestar possíveis atendimentos ao cliente futuramente. Ferramenta InteliSAT A Tanca disponibiliza uma ferramenta de auxílio aos desenvolvedores, chamada InteliSAT. A aplicação é bastante simples e prática de utilizar. Nela, é possível selecionar a versão do layout e o comando a ser verificado. Ao selecionar um comando, serão exibidas três abas: Comando, Resposta e Descrição. Comando: exibe um modelo de como o comando deverá ser acionado. É possível preencher os parâmetros e realizar testes, ao clicar em mostrar para exibir o comando preenchido. É possível ainda, analisar se os dados preenchidos estão OK e Executar o comando exibido. Resposta: Exibe a resposta do comando executado. Descrição: Explicação detalhada do comando com exemplos e possíveis retornos da Sefaz. Cupom de venda gerado pelo SAT Cupom de cancelamento gerado pelo SAT Xml de envio e xml de retorno da venda e do cancelamento anexos abaixo: XML de Envio (Venda): AD20161025112403-379493-env.xml XML de Retorno (Venda): AD35161008723218000186599000070640001585366570.xml XML de Envio (Cancelamento): ADC35161008723218000186599000070640001585366570-env.xml XML de Retorno (Cancelamento): ADC35161008723218000186599000070640001599414512.xml SDK Tanca TS-1000 SAT Tanca ACBr TS-1000 Exemplo de SAT com cupons pendentes há dois dias
  35. 12 points
    Depois de muita conversa interna e requisição de uma parte dos usuários ACBr, resolvemos estender o suporte ao Delphi 7 até Janeiro de 2017. Por que? Nossa principal motivação foi porque muita gente está pensando que quando chegasse o fim de agosto a compatibilidade com o Delphi 7 será simplesmente removida e seus aplicativos vão parar de funcionar. Infelizmente, algumas pessoas estão usando isso com um oportunismo, fazendo "terrorismo" nos usuários do projeto ACBr. Queremos que entendam que não é fácil manter a compatibilidade do projeto em tantas versões diferentes. E não estamos recebendo muita ajuda nessa área. É difícil manter compatibilidade com versões UNICODE quando nós mesmos não usamos. Mas então em janeiro meu aplicativo Delphi 7 deixará de funcionar com o ACBr? Não!!!! Seu aplicativo vai continuar funcionando. Isso é mentira, falácia, balela, uma grande prosopopéia para acalentar bovinos (conversa pra boi dormir). Então o ACBr não vai mais enviar alterações e correções de acordo com a legislação? Claro que vamos continuar enviando alterações e correções. Então não entendi... Pois é... Isso é o que a gente está tentando esclarecer... Deixa eu tentar... Como é o processo atualmente: Sempre que antes de enviar uma correção, alteração ou inclusão de nova característica, precisamos avaliar se vai funcionar no Delphi 7. Mas a maioria de nós não utiliza mais o Delphi 7. Então depois fazemos a correção, testamos na versão que utilizamos. Daí precisamos, por exemplo disparar uma máquina virtual, esperar ela carregar, copiar o novo código para a VM, fazer os testes no Delphi 7, voltar a máquina normal e só depois enviar ao SVN. Como queremos que seja o processo após janeiro de 2017: Fazemos a correção que precisamos, testamos nas versões que suportamos, e enviamos ao SVN. Mas e o Delphi 7? Os componentes até essa data vão continuar funcionando no seu Delphi 7. Mas a partir dessa data você deverá ter cautela para atualizar via SVN. Eventualmente, sem intenção, uma quebra de compatibilidade pode acontecer. Neste caso você sempre terá a opção de voltar para uma revisão que esteja funcionando. Mas se preferir poderá fazer algo: Corrigir você mesmo o problema; Encontrar algum voluntário para corrigir; Atualizar para uma IDE suportada; Quais as IDE suportadas? Lazarus ou Delphi 2009 ou posterior.
  36. 11 points
    Bom dia pessoal, O Projeto ACBr também é Agente de Vendas Embarcadero. Para receber um orçamento, entre em contato com nossos consultores pelo email: [email protected] ou ainda fone (15) 2105-0750 ou pelo WhatsApp (15) 99790-2976. Atualmente o Delphi se divide 3 edições pagas, sendo elas Professional, Entrerprise e Architect além da edição Commmunity que é gratuita*. E agora qual edição devo escolher? Veja nossas dicas a seguir: Professional O Delphi® Professional é a maneira mais rápida para desenvolver e atualizar aplicativos hiperconectados, com muitos dados e visualmente interessantes para Windows, Mac, aparelhos móveis, IoT e muito mais usando Object Pascal. Restrições Suporta somente conexão local e somente para MySQL, Interbase e SQLite. Não permite desenvolver aplicações Linux Não faz modelagem UML Não faz aplicações multicamadas usando DataSnap O ponto forte do Delphi Professional, é o seu preço. Custando quase um terço do Delphi Enterprise, ele cabe no bolso de qualquer Desenvolvedor Micro Empreendedor. O Delphi Professional ainda pode ser pra você... Se seu único Empecilho é conexão com o banco de dados, esta questão pode ser contornada adotando-se componentes de terceiros, como por exemplo a Zeos Lib, que é Open Source, ou ainda comprar um componente como o DAC, da DevArt Enterprise A edição Enterprise inclui todos os recursos da edição Professional, além de uma licença de implantação do RAD Server para um único local (que vale US$ 5.000), bibliotecas de acesso de dados FireDAC, uma licença do InterBase ToGo e suporte para criação de aplicativos Linux no Delphi. Escolha a edição Enterprise se... Precisa utilizar os componentes de conexão com banco de dados local e remota nativos do Delphi, como o FireDAC, se seus sistemas também são criados para linux ou ainda se deseja obter os recursos adicionais desta edição. Architect O Delphi edição Architect inclui todos os recursos das edições Enterprise e Professional, além de uma licença de implantação em múltiplos locais do RAD Server, uma licença Sencha ExtJS Professional, licença do InterBase ToGo e design e modelagem de dados avançados. Receba ainda uma licença de Rad Server Multi Site (criação de serviços web. É usado para publicar suas próprias APIs/REST, como expor dados do banco de dados) + Aqua Data Studio (ferramenta para modelagem e arquitetura de banco de dados) + Sencha ExtJs Pro (framework para desenvolvimento JavaScript front-and) + Ranorex – 6 meses de trial (ferramenta para automação de testes funcionais em aplicações multiplataformas, como: mobile, desktop e web). Escolha a edição Acrchitect se... Se seu desenvolvimento requer uma das ferramentas exclusivas desta edição, o Delphi Architect deve ser sua escolha Quer saber mais detalhes sobre as diferentes edições, veja a a tabela a seguir...
  37. 11 points

    Version 1.2.0.60

    10,059 downloads

    ACBrMonitorPLUS - Última versão disponível apenas a usuários do SAC. - Versão oficial compilada pela equipe do ACBr. Assinada digitalmente com o certificado da DJSystem.
  38. 11 points
    Boa tarde a todos, Teremos mudanças no layout do CT-e, basicamente são duas, a primeira se refere ao CT-e OS, mais precisamente no transporte de pessoas, teremos um novo grupo chamado <infFretamento> e a segunda que se aplica tanto no CT-e quanto no CT-e OS é o novo grupo chamado <infEmpresaSoft>. Este último grupo em um primeiro momento é opcional, ou seja, ele não precisa constar no XML, mas futuramente vai ficar a cargo de cada UF determinar a sua obrigatoriedade. Nesse grupo deveremos informar o CNPJ ou CPF do desenvolvedor, bem como o nome da empresa ou desenvolvedor, e-mail e telefone. O componente ACBrCTe já foi alterado visando a geração desses grupos, estou apenas aguardando a liberação do ambiente de homologação para enviar para o repositório. Favor baixar e ler com atenção a Nota Técnica 2018/002 que se encontra no Portal Nacional do CT-e. O Ambiente de Homologação vai ser liberado em 10/09/2018 e o de Produção em 15/10/2018.
  39. 11 points
    Evolua, Use IDEs modernas, sem gastar muito Você ainda usa versões antigas de Delphi, como o Delphi 7 ou inferior ? Você sabia que o Delphi 7 foi lançado em 2002 !! Pois eh... ele está quase completando a maioridade... Usar uma IDE antiga traz muitos problemas, e você fica de fora de vários recursos novos, somente existentes nas IDEs modernas... Provavelmente o maior de todos os problemas, é que o código gerado por esse compilador antigo, não é muito bem aceito, nas versões modernas do Windows... Não será nada legal, se o Windows acusar um Alerta de incompatibilidade, quando o seu sistema for executado... Não deixe a decisão de evoluir sua IDE para Ad aeternum. No Dia do ACBr, teremos palestras exclusivas, sobre como criar um ambiente de programação completo, usando versões de modernas IDEs como: Lazarus/FPC (open source) Delphi Community Edition (gratuita) Lazarus/FPC, vou muito bem, obrigado... (10:50-11:50, Auditório) - Breve História do FPC/Lazarus - Componentes Nativos - Recursos úteis da IDE - Online Package Manager - Técnicas avançadas da Linguagem - Dicas para quem vem do mundo Delphi e quer testar o Lazarus - Casos reais de Sucesso no Brazil e exterior! Lazarus e fpWeb - Criando Servidor Web para Validação de NFe (15:10-16:10, Sala 2) Veja como usar Lazarus e fpWeb para criar um BackEnd (API Web) que recebe e valida um XML de NF-e, mostrando os dados do Certificado do XML do assinante. Marcos Douglas B. Santos Engenheiro de Software com mais de 16 anos de experiência em Análise, Arquitetura e Desenvolvimento de Sistemas utilizando Programação Orientada a Objetos. Especialista em Object Pascal e Microsoft SQL Server. CEO da Delfire. Consultor. Revisor Técnico. Blogger. Mini PDV-NFC-e, com ACBr, Delphi Community e ORMBr (17:00-18:00, Auditório) Apresentação do Delphi Communitty Edition, suas principais caracteristicas, suas limitações e como usar para empreender e dar início ao seu projeto. Montando um mini projeto de um PDV com NFC-e usando o ACBr e Delphi CE Mostraremos como instalar na IDE do Delphi CE: - ACBr - Fortes Report CE (gerador de relatórios) - ZeosLib (para acesso a múltiplos Banco de Dados) - Framework ORMBr (pesistência de dados e orientação a objeto nunca foi tão simples) Juliomar Marchetti Gerente de Desenvolvimento de Software na ControlSoft.Embarcadero MVP Moderador e Commiter do Projeto ACBr ,moderador Projeto ORMBr, mantenedor Projeto FRCE Participação nos projetos MVCBr, GMLib e outros OpenSource. Trabalha com Agronegócio, Automação Comercial, Fiscal, Business Intelligence, Gestão Comercial Programação Completa
  40. 11 points
    No dia de ontem, passamos por problemas técnicos com o nosso provedor de Hospedagem, a Locaweb... Inicialmente o problema afetava apenas a comunicação Segura de nosso servidor com Servidores externos a Locaweb... Isso afetou serviços como o Sistema de Licenciamento do Invision Power Board (este fórum), e também afetou a comunicação do nosso servidor com o PagSeguro, o que pode ter indisponibilizado a contratação do SAC do ACBr Como a Locaweb demorou a reconhecer o problema, perdemos muito tempo imaginando ser algo na configuração do nosso servidor... No período da tarde o problema na Locaweb se estendeu, e nosso servidor ficou literalmente inacessível.. A situação na Locaweb somente foi normalizada por volta das 22:00hs no dia de ontem Pedimos sinceras desculpas pelo ocorrido, e estamos fazendo planos para termos uma alternativa que nos permita subir o Projeto ACBr em outro Servidor, a fim de diminuir o Downtime, caso o problema volte a ocorrer.
  41. 11 points
    Comentário totalmente desnecessário... Acha que nós não estamos ocupados com outras atribuições ? Experimente fazer o seu próprio componente OpenSource para Boletos... e gerencie-o como acha que deve ser feito...
  42. 11 points
    Segue conforme solicitação a alguns amigos de como implementar ACBrTEFD em projetos sem o uso do ACBrECF @Italo Jurisato JuniorPor gentileza, poderia "comitar" esse exemplo no trunk? Considerações importantes Esse demo não é indicado para quem usa o ACBrECF, pois já existe o Demo ACBrECFTeste, onde explorar o conjunto (ps: aconselho verificar o demo feito em lazarus pois o mesmo está completo o exemplo, em relação ao demo em Delphi. Configurar o componente ACBrTEFD para [AutoFinalizarCupom = False] [MultiplosCartoes=True] [NumeroMaximoCartoes=3] Foi utilizada uma lógica em emular o estados possíveis do ECF. (Enumerado:tEstadoEcfSimulado) Estudar o evento ACBrTEFDComandaECF, ACBrTEFDInfoECF e ACBrTEFDComandaECFSubtotaliza onde os mesmo manipulam tEstadoEcfSimulado Assinar os Eventos ACBrTEFDComandaECFAbreVinculado, ACBrTEFDComandaECFImprimeVia e ACBrTEFD1ExibeMsg Ambiente de Teste Teste realizado no sistema modular SitDemo-Sitef(Software Express) Venda com múltiplos cartões Venda em 2 formas de pagamento(Dinheiro + Cartão) Extras Método finalizarCupomNFCe existe um tratamento para emissão em (OFF-LINE Contingência) caso houver qualquer erro na emissão da mesma Sequência na impressão(imprimer o NFCe > Posteriormente os Cupons Vinculados) Inicia Venda Informe o valor de pagamento e Selecione a forma de pagamento Armazena em Buffer as formas de pagamento Após a totalização das formas de pagamento haverá o enviar da NFCe ao SEFAZ Estadual imprime a NFCe e os Vinculados Finaliza a sequência com os EstadoEcfSimulado = Livre Delphi - TEF.rar
  43. 11 points
  44. 11 points
    Graças aos esforços do @edunucleo e @JoãoDJ, estamos agora operando em HTTPS... Estamos usando um Certificado com criptografia TLS, Gratuito, fornecido pela Let's Encrypt
  45. 11 points
    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 http://cfe.sefaz.ce.gov.br/mfe/informacoes/downloads#/ 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
  46. 11 points
    Adicionei os seguintes itens, no tópico anterior: Como configurar para usar a WinCrypt e não a CAPICOM ? Como remover completamente, as Units da CAPICOM dos meus fontes ? Como posso ajudar ? (Tarefas a serem efetuadas)
  47. 10 points
    Lembrei disso hoje... e decidi procurar se o Post n.1 ainda existe... SIM, ele ainda está no Fórum da DevMedia, o qual eu frequentei por um bom tempo, e foi o espírito de cooperação dos usuários do fórum, que me motivou a criação do Projeto ACBr... Reparem no Post, que ainda não há menção do nome ACBr, e a ideia inicial, era fazer uma classe de Suportes a ECF (Emissor de Cupom Fiscal)... https://www.devmedia.com.br/forum/classe-para-acesso-direto-a-ecf-em-linux-windows/229474 Na abertura do último Dia do ACBr, eu menciono um pouco sobre a criação do Projeto... Classe para acesso Direto a ECF em Linux/Windows 03/05/2004 Ola, para todos.... Estou desenvolvendo uma Classe Multiplataforma para acesso direto a diversas Impressoras Fiscais. Na verdade o projeto ainda está engatinhando, mas já tive sucesso em Comunicação com a Bematech em Windows e Linux. Entretanto, como muitos programadores também necessitam ou já fazem acesso a ECF, resolvi usar a ideia de tornar isso um projeto OpenSource. P1 - Porque fazer mais uma biblioteca de acesso a ECF ? A ideia é fazer uma Classe que possa rodar em Linux / Windows. algo que nao existe hoje.... Alem de não exigir nenhuma DLL ou SO, a fim de evitar o ´inferno das DLL´s´ P2 - Como fazer acesso aos ECFs ? Como a classe deve rodar em Linux, fica descartado o uso de DLL´s... Todas as impressoras fiscais (pelo menos as que já programei) possuem manuais descrevendo os codigos de comandos e protocolos seriais. Atualmente acesso as impressoras: Bematech, Daruma, Schalter, Sweda, Mecaf (e compativeis) de forma direta, em DOS, usando a linguagem CLIPPER 5.02e.+Clipper Tools... O Executável não depende de nenhum arquivo externo ou device driver no CONFIG.SYS. A ideia é migrar as funçoes de Clipper para Delphi, usando um componente de acesso a Serial. P3 - Qual componente fará acesso a serial ? Dos que testei, apenas a classe SynaSer http://www.ararat.cz/synapse/ é multiplataforma (Kylix) P4 - Porque rodar em Linux ? Já pensou oferecer para os seus clientes uma solução de Aplicacação Comercial totalmente legalizada ? e sem pagar uma fortuna por isso ? Sem falar na estabilidade e segurança do Linux.... Qual usuário consegue apagar o sistema ? (alem do Root é claro Caracteristicas do projeto: - Deve ser OpenSource e com a distribuição dos fontes: - Deve ser Multi-plataforma (Windows ( CLX / VCL ) / Linux) - Nao deve depender de nehuma DLL ou SO. - Deve suportar as diferença entre os diversos modelos de ECF - As Classes Filhas devem tratar de forma transparente as pequenas diferenças na programaçao de Versoes diferente do mesmo Modelo de ECF. Ex: A classe TECFBematech deve ser capaz de trabalhar com todas as versoes da Bematech FI Vantagens do Projeto: - Total controle da Aplicação: Já vi DLL´s que simplesmente param o processamento do programa (Quem já homologou TEF discado, sabe o que eu quero dizer...) - Facil distribuição: Não precisa distribuir e instalar nenhuma DLL - Livre-se do Inferno das DLL´s Quando o usuário instala outro programa que usa a mesma DLL que você usa, porém em uma versão antiga (causando Bugs no seu programa) - Multiplataforma: Linux / Windows - Programação Limpa e Clara. Basta criar uma classe TECF com o modelo apropriado. O Codigo fonte sempre se refere a Classe criada, sem se preocupar com o Modelo Desvantagens do Projeto: - Se o hardware mudar, ficamos dependendo de novas informaçoes do fabricante, ou até mesmo de um modelo do equipamento para testes... - Geralmente as DLL´s incorporam novos Hardwares do mesmo fabricante.... Aqui teremos que implementar um novo filho da classe TECF para cada Hardware novo (somente se o novo hardware nao for compativel com o antigo) Estou lançando a ideia para ver a aceitação... Existe algum disposto a colaborar ? Posso enviar os fontes por e-mail para que estiver interessado... Em breve farei uma pagina para download do projeto... (Ou se alguem estiver disposto a fazer... ) A ser desenvolvido: - Terminar a implementação da Classe TECFBematech - Implementar as demais Classes (Daruma, Schalter, Sweda, Mecaf) - Criar Classe para Manupilação de TEF Discado para interagir com TECF Na verdade, nunca fiz nenhum projeto OpenSource... Gostaria de sugestões... Duvidas: - Como / Onde hospedar o projeto ? - Como cordernar ?.... - Como fica a questão legal de OpenSource ? É preciso registrar isso em cartório ? Ps: Srs Moderadores, desculpe postar essa msg em 2 áreas, mas acredito que seja do interesse...
  48. 10 points
    Pessoal É com grande alegria que venho agradecer o meu presente por ter sido o primeiro a fazer a inscrição E parabenizar a todos pelo evento
  49. 10 points
    Como parte dos nossos esforços de melhoraria contínua da usabilidade de nossa comunidade, estamos aplicando várias melhorias... Recentemente inauguramos o nosso Novo Portal Aumentamos os recursos de nosso Servidor dedicado para 16gb x 6 processadores E agora estamos implementando um Novo Tema no fórum Esse Tema, se chama Infraskew e foi desenvolvido por TAMAN. Um experiente desenvolvedor de Temas para a plataforma que usamos, a Invision Power Board É um tema Moderno, Bonito, e funcional... Ele facilita muito a navegação no fórum, por manter o Menu Principal, sempre no topo da Tela. Reparem que nele também está a caixa de Busca no fórum... Esperamos que vocês gostem do novo Tema (e das novas cores)... Fiquem a vontade para nos enviar suas sugestões, elogios ou críticas sobre o novo tema... Caso você deseje continuar usando o Tema Tradicional do ACBr, basta selecionar o mesmo no final da Página...
  50. 10 points
    Algumas dicas para quem está utilizando o Integrador MFE: Onde encontrar os arquivos para download? O site oficial é http://cfe.sefaz.ce.gov.br/mfe/informacoes/downloads#/, mas nem sempre os links estão funcionando, atualmente as últimas versões foram disponibilizadas pelo @luiz renato da silva abade no seguinte link: https://drive.google.com/drive/folders/0B0H-Nn7Nqhd7QkNIWDFCeElSQzQ O que preciso instalar para que o Integrador funcione? Após instalar o integrador e executá-lo pela primeira vez, abra a pasta em que ele foi instalado(Geralmente %LOCALAPPDATA%\Programs\Integrador) e instale a última versão do Driver MFE(Atualmente DriverMFE_Instalador_01.04.01.exe). Após isto instale seu hardware MFE com os drivers específicos da marca do seu equipamento e configure o integrador com os dados abaixo. Quais os dados que devem ser usados na configuração do integrador? 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/) O XML enviado para o aparelho de teste deve usar os mesmos dados do Integrador? Não, no caso cada marca possui dados específicos que deverão ser informados no XML de venda. TANCA: 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 ELGIN: Código de Ativação: 123456789 CNPJ do Contribuinte: 14.200.166/0001-66 IE do Contribuinte: 1234567890 CNPJ da Software House: 08.490.295/0001-33 Assinatura da Software House: MD2Nof/O0tQMPKiYeeAydSjYt7YV9kU0nWKZGXHVdYIzR2W9Z6tgXni/Y5bnjmUAk8MkqlBJIiOOIskKCjJ086k7vAP0EU5cBRYj/nzHUiRdu9AVD7WRfVs00BDyb5fsnnKg7gAXXH6SBgCxG9yjAkxJ0l2E2idsWBAJ5peQEBZqtHytRUC+FLaSfd3+66QNxIBlDwQIRzUGPaU6fvErVDSfMUf8WpkwnPz36fCQnyLypqe/5mbox9pt3RCbbXcYqnR/4poYGr9M9Kymj4/PyX9xGeiXwbgzOOHNIU5M/aAs0rulXz948bZla0eXABgEcp6mDkTzweLPZTbmOhX+eA== * Caso receba o erro "Rejeicao: Emitente nao autorizado para uso do SAT", verifique se no XML informou os dados acima, lembrando que os dados do integrador serão diferentes dos dados enviados no XML. Onde obter suporte? O suporte atualmente é prestado através do email [email protected] ou por um grupo no WhatsApp que pode ser acessado pelo link https://chat.whatsapp.com/2OjHVks1Q3sGMTgeZityxm Atualizado em 30/04/2017 - Novo grupo de suporte: https://groups.google.com/forum/?hl=pt-BR#!forum/sefaz_integrador_fiscal Existem módulos para desenvolvedores? Sim, atualmente TANCA e Elgin possuem equipamentos disponíveis. Consigo testar o integrador sem um aparelho de desenvolvimento? Sim, para isso crie na pasta quem que o Integrador está instalado(%LOCALAPPDATA%\Programs\Integrador) um arquivo com o nome debug.dbg. (Funciona apenas até a versão 1.5.86 do Integrador) Como simular os comandos de pagamento? Para usar os métodos EnviarPagamento e VerificarStatusValidador é necessário o uso do Simulador POS. Para cada comando EnviarPagamento deve ser gerado um valor diferente para o campo SerialPOS(Em ambiente de produção esse número será único para cada POS do estabelecimento). Após o comando EnviarPagamento ser executado, guarde o valor do campo IDPagamento, abra o programa simulador_pos.exe e no campo TERMINAL SERIAL informe o mesmo valor que foi informado no campo SerialPOS do comando EnviarPagamento. Clique na opção 1-VFP-e e será exibido o valor do pagamento solicitado. Depois você deve efetuar o pagamento clicando na opção 2-PAGAR. Após estes passos, você pode usar o comando VerificarStatusValidador informando o IdPagamento no campo IdFila para receber a confirmação do pagamento. Caso vc use o comando VerificarStatusValidador antes de efetuar o pagamento no simulador o campo Codigo Autorização virá com o seguinte conteúdo: <CodigoAutorizacao>queue item XXX not complete</CodigoAutorizacao>, onde o XXX se refere ao IdPagamento. Todos os comandos já estão implementados no ACBr? Além dos comandos já existentes no SAT, foram implementados os seguintes comandos no componente ACBrSAT - EnviarPagamento, VerificarStatusValidador, RespostaFiscal e EnviarStatusPagamento.
×
×
  • Create New...