Ir para conteúdo
  • Cadastre-se

rubenstz

Membros
  • Total de ítens

    53
  • Registro em

  • Última visita

2 Seguidores

Últimos Visitantes

1.473 visualizações

rubenstz's Achievements

Contributor

Contributor (5/14)

  • First Post
  • Collaborator Rare
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

5

Reputação

  1. Juliana, Não é necessária esta alteração, houve uma confusão na interpretação, a unit deve ser mantida como já estava, o banco informa que aceita alfanuméricos no campo DV ou seja: pode usar '0' ou 'X' de acordo com a própria configuração do cliente. Unit original esta inserida. ACBrBancoBrasil.pas
  2. Bom dia, Houveram mudanças para geração do arquivo de remessa do banco do brasil em relação ao arquivo de remessa, é exigido que quando for o DV = 0 deve informar a letra "X" em maiúsculo. Fiz alterações nas linhas: 332 e 335 372 e 375 622 e 625 Do anexo ACBrBancoBrasil.pas Também inseri o manual do BB de 2019 que tomei por base para a alteração. Att, ACBrBancoBrasil.pas LayoutCNAB_240.pdf
  3. Boa tarde, também achei que poderia ser isto, mas não fez diferença quando mandamos com a assinatura feita no C#, tanto que os dois lotes que estão no anexo acima são validos para a prefeitura. O problema esta na assinatura do bloco <rps> dentro de cada arquivo XML de RPS, como tem que assinar cada RPS e depois o LOTE com estes RPSs isto gera diferença e o erro de HASH INVÁLIDO. Se eu fizer a assinatura de um arquivo xml de RPS apenas, ele será validado, porém ao gerar o lote com todos estes arquivos RPSs assinados e ao assinar o lote ficará inválido. Se somente o lote for assinado sem os RPSs ele também ficará válido. Em outro post, vou tentar ser mais claro e explicar o que fizemos para assinar corretamente com a validação por outro programa.
  4. Olá a todos, Vou colocar abaixo a solução (passo a passo) utilizando um programa em C# (anexo AssinaPIL.sln) que fizemos (em parceria com o colega de trabalho Sandecki) para fazer o envio para o Município de Salvador. A princípio geramos um .EXE que faz a assinatura, mas uma DLL para este fim é mais interessante, se alguém se habilitar por favor compartilhe no grupo. O IDEAL é que um dia funcione apenas com o ACBr e seus próprios métodos de assinatura. 1. A versão do .NET deve ser a .NETFramework,Version=v4.6.2 ou superior; 2. Foram utilizados os mesmos SCHEMAS do ACBr para montagem dos arquivos XML de RPS e LOTE de envio; 3. Arquivo salvador.ini deve estar da seguinte maneira: [Assinar] RPS=1 Lote=1 URI=1 4. DELPHI - no seu componente visual ACBrNFSe é necessário atribuir o evento OnAntesDeAssinar ou se utiliza em runtime faça a atribuição do método: ACBrNFSe.OnAntesDeAssinar := ACBrNFSeAntesDeAssinar; 5. DELPHI - Cole o seguinte código e adapte para seu uso o método OnAntesDeAssinar: // Método para assinar pelo executável externo procedure TFormNFS.ACBrNFSeAntesDeAssinar( var ConteudoXML: String; const docElement, infElement, SignatureNode, SelectionNamespaces, IdSignature: String); var xml: TStringList; pathNFSe, pathRPS, pathGeral, assinaPIL, xmlFileName, cmdLine: String; begin // Somente para o provedor de SALVADOR if ACBrNFSe.Configuracoes.Geral.Provedor = proSalvador then begin try xml := TStringList.Create; // caminho e nome do executável assinaPIL := ExtractFilePath(ParamStr(0))+'assinaPIL.exe'; // Verifica se o assinador existe if not FileExists(assinaPIL) then raise Exception.Create('O arquivo para assinatura digital não foi encontrado!'+#13+assinaPIL); // Caminho onde salva o XML pathGeral := ACBrNFSe.Configuracoes.Arquivos.GetPathGer(Date, ACBrNFSe.Configuracoes.Geral.Emitente.CNPJ); // Descobre se é RPS ou LOTE, pois esta rotina sempre é executada antes de assinar if AnsiLowerCase(docElement) = 'rps' then begin xmlFileName := pathGeral + '\assinar.xml'; xml.Add(ConteudoXML); xml.SaveToFile(xmlFileName); cmdLine := xmlFileName+' InfRps'; end else if AnsiLowerCase(docElement) = 'enviarloterpsenvio' then begin xmlFileName := pathGeral + '\assinar.xml'; xml.Add(ConteudoXML); xml.SaveToFile(xmlFileName); cmdLine := xmlFileName+' LoteRps'; end; // Cria o comando de assinatura cmdLine := assinaPIL+' '+cmdLine; if (not ExecAndWait(PChar(cmdLine)) > 0) then raise Exception.Create('Não foi possível assinar o arquivo:'+#13+xmlFileName) else begin xml.LoadFromFile(xmlFileName); conteudoXML := xml.GetText; // Apaga o arquivo temporario de assinatura if FileExists(xmlFileName) then DeleteFile(xmlFileName); end; // Continua o envio pelo ACBr finally xml.Free; end; end; end; 6. DELPHI - crie a função para executar o aplicativo externo de assinatura que é chamado no método acima: function ExecAndWait(ExecFile:PChar): Integer; var STARTUPINFO: TStartupInfo; PROCESSINFO : TProcessInformation; Status : Cardinal; begin with STARTUPINFO do begin cb := SizeOf(STARTUPINFO); lpReserved := nil; lpDesktop := nil; lpTitle := nil; dwFlags := STARTF_USESHOWWINDOW; // não motra o cursor de load lpReserved := nil; cbReserved2 := 0; lpReserved2 := nil; //wShowWindow := SW_HIDE; // HIDE não funciona em WINDOWS 8, W10 não houve problema wShowWindow := SW_SHOW; end; Result:=0; if CreateProcess(nil,ExecFile,nil,nil,False,NORMAL_PRIORITY_CLASS,nil,nil, STARTUPINFO,PROCESSINFO) then begin try Status:=WaitForSingleObject(PROCESSINFO.hProcess,1000 * 5 * 60); if Status=WAIT_TIMEOUT then begin TerminateProcess(PROCESSINFO.hProcess,0); end else if Status=WAIT_FAILED then Result:=GetLastError else begin GetExitCodeProcess(PROCESSINFO.hProcess,Status); Result := Status * -1; end; finally CloseHandle(PROCESSINFO.hProcess); CloseHandle(PROCESSINFO.hThread); end; end else Result:=GetLastError; end; A maneira de envio é a de sempre ACBrNFSe.Enviar(numero_lote); Quem utilizar por favor manda um feedback do resultado, hoje utilizamos desta maneira para alguns clientes. Abs, AssinaPIL.zip
  5. Boa tarde, Anexo lote de envio assinado que a prefeitura de Salvador aceita (1-env-lot.xml) o outro foi assinado com componente de terceiros. Pode usar este site para validar o lote de NFSe produzido: http://validator.doctrails.net/default.aspx (na prefeitura de Salvador me indicaram este para validar nossas requisições). 1-env-lot.xml lote_assinado_outro_componente.xml
  6. Boa tarde Hugo, Onde trabalho fizemos um .exe (solução paleativa) em C# e conseguimos fazer a transmissão, estamos providenciando uma DLL para isto agora, mas o ideal seria que o ACBr conseguisse fazer isto independente de qqer outra app externa. Você, através das informações que postou, já conseguiu transmitir totalmente com o ACBr?
  7. Também passei por algo parecido. Não sei se é a mesma situação, eu hoje não uso openSSL e deixei ativa e NÃO comentada a diretiva {$DEFINE DFE_SEM_OPENSSL} no arquivo ACBR.inc. Esta opção comentada faz com o que o seu executável carregue de maneira implícita as dlls da OPENSSL e se não estiverem no diretório do Windows (SYSWOW64 ou SYSTEM32) ou no próprio diretório do executável causa erro. Faço isto devido a algumas regras de negócio e de atualização do diretório da APP e como é software legado em D7 a diretiva {$DEFINE USE_DELAYED} não funciona.
  8. Boa tarde, Este problema esta acontecendo com a cidade de PORTO ALEGRE que também utiliza o BHISS. Resolvi colocando uma versão antiga do arquivo BHISS.INI da versão de produção de um de nossos clientes. Criei um tópico com este título mas existe um outro muito parecido mas aconteceu na hora de CANCELAR (esta fechado), este que estou tendo é no momento de enviar: A versão atual do ACBr que não esta funcionando esta anexo o arquivo de inicialização e sua revisão (BHISS_v15404.INI - não assina corretamenete) e juntamente a versão antiga que tive de usar para que funcionasse (BHISS.INI). Se alguém passar por este problema seria bom relatar pois não sei se isto afeta BELO HORIZONTE e PORTO ALEGRE da mesma maneira. Att, BHISS_v15404.ini BHISS.ini
  9. Italo, Esta inválido a ultima assinatura no arquivo de envio do LOTE. Estou usando LIBWINCRYPT, tentei assinar com libCapicom mas recebo a mensagem: "Erro durante a transmissão! Erro não especificado" e não assina, até achei que fosse problema de configuração com as dlls CAPICOM mas não é pois ela funciona bem para CURITIBA e PORTO ALEGRE no mesmo ambiente de teste ou produção. Vlw
  10. Italo, Acredito que o problema não seja o TRANSFORMS, voltei ao normal e o RPS continua válido com assinatura e o lote dá erro. Anexando novamente gerado da maneira normal com o grupo <transforms> padrão ICP. acbr_1-env-lot_HASH_INVALIDO.xml acbr_1NF-rps_HASH_VALIDO.xml
  11. Bom dia Italo, Removi comentando na unit: // ACBrDFeUtil.pas // function SignatureElement( ... '<Reference URI="' + IfThen(URI = '', '', '#' + URI) + '">' + // '<Transforms>' + // '<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />' + // '<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />' + // '</Transforms>' + '<DigestMethod Algorithm="'+DigestAlgorithm+'" />' + '<DigestValue></DigestValue>' + '</Reference>' + ... Mas fiz isto apenas para tentar deixar igual ao componente pago, pois vi que ele não utiliza, mas acredito que isto não vá fazer diferença pois o arquivo somente do RPS assinado fica VALIDO com ou sem esta TAG, o problema mesmo esta na assinatura do lote todo com os RPS. Achei até que poderia estar assinando o lote antes de montar todos os RPS dentro dele, mas não parece ser o caso. Estou trabalhando para que funcione com esta prefeitura pois é uma das poucas grandes que não temos o ACBr funcionando nela. Aos amigos que puderem ajudar vamos trocar mensagens. Abs,
  12. Bom dia Italo, Demorei um pouco pois estava simulando alguns testes também com um trial de um outro componente de envio (pago). Em anexo estão dois arquivos gerados ACBR, RPS e lote de envio. acbr_1-env-lot.xml acbr_1NF-rps.xml E também junto o arquivo de lote gerado com o outro componente assinado também, tentei deixar os dois arquivos iguais para bater a assinatura do certificado mas tem algum caracter ou texto do arquivo gerado pelo outro componente que não identifiquei, como não tenho fonte dele não mexi muito. Arquivo: lote_assinado_outro_componente.xml O principal problema, de conhecimento de vários aqui, para SALVADOR é o que mostra "ASSINATURA DO HASH NÃO CONFERE", conversando com o suporte da prefeitura me disseram que eu poderia testar os xmls assinados a partir do seguinte link: http://validator.doctrails.net/default.aspx . Verificando com este site o arquivo de RPS somente gerado pelo ACBr, me retorna como VÁLIDO. Verificando o arquivo de lote assinado pelo outro componente também me retorna também como VÁLIDO. Verificando o arquivo com o lote do ACBr com o RPS assinado dentro dele, me retorna INVÁLIDO. É este hash inválido que o sistema da prefeitura de Salvador acusa no momento do envio. OBS.: durante os testes para gerar o arquivo igual ao componente de terceiros (vejam que ele não usa) comentei nos meus fontes do ACBr para gerar a assinautra sem a tag <TRANSFORMS> na unit ACBrDFeUtil.pas na função SignatureElement, mas com ela ou sem ela o RPS continua válido e o LOTE inválido da mesma maneira. Vlw acbr_1NF-rps.xml lote_assinado_outro_componente.xml acbr_1-env-lot.xml
  13. Solucionou aqui tbm, desinstalei o WARSAW e funcionou, instalei a versão mais recente do WARSAW e o problema aparece (versão do warsaw 2.5.0.54). Este problema só ocorre para seleção de certificados, consegui fazer normalmente o envio de NFSe com este plugin instalado.
  14. Boa tarde, Mesmo problema a selecionar CERTIFICADO no windows com a mensagem: Também fecha o sistema abruptamente. Atualizei o ACBr recentemente e esta apresentando este problema em versão beta. Na versão anterior do ACBr com o sistema compilado e atualmente em produção este problema não ocorre e seleciona normalmente a lista de certificados mesmo estando nas máquinas com o último update do windows. Att,
  15. Bom dia a todos, Existe algum desenvolvedor que conseguiu gerar a NFSe para SALVADOR? Também tenho acompanhado e cheguei há algum tempo na mesma situação do rogerioxsandro mostrando que a assinatura do HASH não funciona. Me responderam a respeito da assinatura com o "id" em minúsculo: "Conforme uma atualização do FrameWork.NET que realiza a validação do XML, a tag “id” passou a ser minúscula, depois de nova atualização o resultado passou a ser obrigatório ser alfanumérico (letra e número), estas atualizações não modelo ABRASF, e sim de forma mundial feitas pela Microsoft, com o intuito de aumentar a segurança do arquivo XML. Com o aumento de ataques virtuais, os servidores da SEFAZ são atualizados constantemente, tendo assim estas atualização do FrameWork.NET causado um impacto na montagem do arquivo. Assim, a assinatura do arquivo deve ser com letras minúsculas e com resultado alfanumérica como arquivo exemplo anexo." Se alguém já estiver assinando pelo ACBr por gentileza ajude postando no forum.
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.