Ir para conteúdo
  • Cadastre-se

Diego Foliene

Consultores
  • Total de ítens

    5.312
  • Registro em

  • Última visita

  • Days Won

    155

Tudo que Diego Foliene postou

  1. Boa tarde. Em 29/03/2023, foi publicada a versão 10.1.2 do programa validador do SPED ECD - Escrituração Contábil Digital, trazendo as seguintes mudanças: Fonte: http://sped.rfb.gov.br/pagina/show/7190
  2. Boa tarde. Primeiro de tudo, muito obrigado pela contribuição! Toda colaboração é e sempre será mais do que bem vinda! Em sua contribuição, você adiciona uma função que faz o seguinte: Se conferirmos na unit ACBrNFSeXGravarXml_ABRASFv1(classe base para a BHISS.GravarXml), é possível observar que ela insere no XML a Razão Social assim: Result.AppendChild(AddNode(tcStr, '#38', 'RazaoSocial', 1, 115, 0, NFSe.Tomador.RazaoSocial, DSC_XNOME)); Conferindo dentro da estrutura de AddNode temos o seguinte trecho: // Grava a tag no arquivo - Quando existir algum conteúdo if ((ocorrencias = 1) or (not EstaVazio)) then begin Result := CreateElement(Tag); if ParseTextoXML then Result.Content := FiltrarTextoXML(FOpcoes.RetirarEspacos, ConteudoProcessado, FOpcoes.RetirarAcentos, True, FOpcoes.FQuebraLinha) else Result.Content := ConteudoProcessado; if (Atributo <> '') and (Result <> nil) then begin AttSplit := Split('=', Atributo); Result.SetAttribute(Trim(AttSplit[0]), Trim(AttSplit[1])); end; end; Pela forma com é feita a chamada da AddNode, o parâmetro ParseTextoXML é igual a True, então ele vai passar pela function FiltrarTextoXML. Dentro dela, temos o seguinte: function FiltrarTextoXML(const RetirarEspacos: boolean; aTexto: String; RetirarAcentos: boolean; SubstituirQuebrasLinha: Boolean; const QuebraLinha: String): String; begin if RetirarAcentos then aTexto := TiraAcentos(aTexto); aTexto := ParseText(AnsiString(aTexto), False ); if RetirarEspacos then begin while pos(' ', aTexto) > 0 do aTexto := FaststringReplace(aTexto, ' ', ' ', [rfReplaceAll]); end; if SubstituirQuebrasLinha then aTexto := ChangeLineBreak( aTexto, QuebraLinha); Result := Trim(aTexto); end; Conferindo o conteúdo da ParseText, a mesma já faz a substituição. if Decode then begin Astr := DecodeToString( Texto, IsUTF8 ) ; Astr := InternalStringReplace(AStr, '&amp;' , '&'); AStr := InternalStringReplace(AStr, '&lt;' , '<'); AStr := InternalStringReplace(AStr, '&gt;' , '>'); AStr := InternalStringReplace(AStr, '&quot;' , '"'); AStr := InternalStringReplace(AStr, '&#39;' , #39); AStr := InternalStringReplace(AStr, '&#45;' , '-'); AStr := InternalStringReplace(AStr, '&aacute;', 'á'); AStr := InternalStringReplace(AStr, '&Aacute;', 'Á'); AStr := InternalStringReplace(AStr, '&acirc;' , 'â'); AStr := InternalStringReplace(AStr, '&Acirc;' , 'Â'); AStr := InternalStringReplace(AStr, '&atilde;', 'ã'); AStr := InternalStringReplace(AStr, '&Atilde;', 'Ã'); AStr := InternalStringReplace(AStr, '&agrave;', 'à'); AStr := InternalStringReplace(AStr, '&Agrave;', 'À'); AStr := InternalStringReplace(AStr, '&eacute;', 'é'); AStr := InternalStringReplace(AStr, '&Eacute;', 'É'); AStr := InternalStringReplace(AStr, '&ecirc;' , 'ê'); AStr := InternalStringReplace(AStr, '&Ecirc;' , 'Ê'); AStr := InternalStringReplace(AStr, '&iacute;', 'í'); AStr := InternalStringReplace(AStr, '&Iacute;', 'Í'); AStr := InternalStringReplace(AStr, '&oacute;', 'ó'); AStr := InternalStringReplace(AStr, '&Oacute;', 'Ó'); AStr := InternalStringReplace(AStr, '&otilde;', 'õ'); AStr := InternalStringReplace(AStr, '&Otilde;', 'Õ'); AStr := InternalStringReplace(AStr, '&ocirc;' , 'ô'); AStr := InternalStringReplace(AStr, '&Ocirc;' , 'Ô'); AStr := InternalStringReplace(AStr, '&uacute;', 'ú'); AStr := InternalStringReplace(AStr, '&Uacute;', 'Ú'); AStr := InternalStringReplace(AStr, '&uuml;' , 'ü'); AStr := InternalStringReplace(AStr, '&Uuml;' , 'Ü'); AStr := InternalStringReplace(AStr, '&ccedil;', 'ç'); AStr := InternalStringReplace(AStr, '&Ccedil;', 'Ç'); AStr := InternalStringReplace(AStr, '&apos;' , ''''); end else begin AStr := string(Texto); AStr := StringReplace(AStr, '&', '&amp;' , [rfReplaceAll]); //Aqui ele substitui o "e" comercial; AStr := StringReplace(AStr, '<', '&lt;' , [rfReplaceAll]); AStr := StringReplace(AStr, '>', '&gt;' , [rfReplaceAll]); AStr := StringReplace(AStr, '"', '&quot;', [rfReplaceAll]); AStr := StringReplace(AStr, #39, '&#39;' , [rfReplaceAll]); AStr := StringReplace(AStr, '''','&apos;', [rfReplaceAll]); end; Result := AStr; Por favor, isso não está ocorrendo? É possível fazer um teste? Se abrir o XML gerado no navegador e também em um editor de texto como o bloco de notas ou notepad++ ele ainda tem o & ?
  3. Bom dia. Que bom que deu certo! Por favor, para ajudar outros que possam vir a ter o mesmo problema futuramente, pode compartilhar qual foi a solução?
  4. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
  5. Bom dia. Por favor, depois de atualizar os fontes você reinstalou o ACBr? Verifique se não tem nenhum arquivo defasado perdido dentro da pasta da aplicação.
  6. Bom dia. Foi criada a #TK-3790 para análise do caso e parecer do consultor responsável.
  7. Mas mesmo constando no ambiente nacional ao consultar ela devolve rejeição de que não consta quando você tenta transmitir?
  8. Bom dia. Pode ter sido alguma instabilidade na Sefaz ou demora no processo de sincronização. Consultei no ambiente nacional a chave de acesso desse XML e a nota está constando lá. Por favor faça um novo teste.
  9. Obrigado pela contribuição, em breve será validada para possível inclusão ao svn #TK-3789
  10. Bom dia. Mais uma vez, muito obrigado pela contribuição, a mesma foi enviada ao SVN na Rev-28933. Por favor, queira atualizar seus fontes, reinstalar o ACBr para fazer novos testes e reportar qualquer problema.
  11. Obrigado pela contribuição, em breve será validada para possível inclusão ao svn #TK-3786
  12. A rotina lê a ocorrência que vem no respectivo segmento no arquivo.
  13. Desculpe, esses dois erros mostram que minha orientação foi incorreta. Utilize a configuração que o Italo indicou. Isso deve resolver estes dois erros. Nem sempre o XML gerado pela prefeitura segue o mesmo padrão que o gerado pelo WebService. No XML gerado pelo ACBr a tag itemLei116 está com valor zero. Você está alimentando a propriedade ACBrNFSeX.NotasFiscais[Indice].NFSe.Servico.ItemServico[Indice].CodServ ?
  14. Boa tarde. Este erro da a entender que o valor informado na tag não foi um valor válido. Este da a entender que não deve enviar tag ItemLei116AtividadeEconomica. Se for possível, tente substituir no INI por CodigoCnaeAtividadeEconomica e fazer um novo teste. Informação de Série ou Tipo RPS não parecem estar corretas.
  15. Boa tarde. Fiz um teste com o programa exemplo e tag não foi gerada no XML. Se conferirmos a procedure GerarXML na unit pcesS1210 a mesma está assim: function TEvtPgtos.GerarXML: Boolean; begin try inherited GerarXML; Self.VersaoDF := TACBreSocial(FACBreSocial).Configuracoes.Geral.VersaoDF; Self.Id := GerarChaveEsocial(now, self.ideEmpregador.NrInsc, self.Sequencial); GerarCabecalho('evtPgtos'); Gerador.wGrupo('evtPgtos Id="' + Self.Id + '"'); if VersaoDF <= ve02_05_00 then GerarIdeEvento3(Self.ideEvento, True, True, False) else GerarIdeEvento3(Self.ideEvento, True, False, True); //Se você configurou corretamente o ACBreSocial, é nesse momento que ele gera o grupo ideEvento GerarIdeEmpregador(Self.ideEmpregador); GerarIdeBenef(Self.ideBenef); Gerador.wGrupo('/evtPgtos'); GerarRodape; FXML := Gerador.ArquivoFormatoXML; // XML := Assinar(Gerador.ArquivoFormatoXML, 'evtPgtos'); // Validar(schevtPgtos); except on e:exception do raise Exception.Create('ID: ' + Self.Id + sLineBreak + ' ' + e.Message); end; Result := (Gerador.ArquivoFormatoXML <> '') end; Repare que ele faz a chamada a procedure GerarIdeEnvento3 da seguinte maneira. GerarIdeEvento3(Self.ideEvento, True, False, True); Agora vamos conferir como é a procedure GerarIdeEvento3: procedure TeSocialEvento.GerarIdeEvento3(pEvt: TIdeEvento3; GeraIndRetif: Boolean=True; GeraIndApuracao: Boolean=True; GeraIndGuia: Boolean=True); begin Gerador.wGrupo('ideEvento'); GerarIdeEvento2(pEvt, false, GeraIndRetif, false); if (GeraIndApuracao) then Gerador.wCampo(tcStr, '', 'indApuracao', 1, 1, 1, eSIndApuracaoToStr(pEvt.IndApuracao)); Gerador.wCampo(tcStr, '', 'perApur', 7, 7, 1, pEvt.perApur); if (GeraIndGuia) and (VersaoDF >= veS01_00_00) and (pEvt.indGuia <> '') then Gerador.wCampo(tcStr, '', 'indGuia', 1, 1, 0, pEvt.indGuia); GerarIdeEvento(pEvt, false); Gerador.wGrupo('/ideEvento'); end; Repare que o parâmetro GerarIndApuracao é passado como False na chamada e por isso não é gerado. Se seus fontes estiverem diferente disso eles estão desatualizados. Importante lembrar que não basta apenas fazer o update no SVN para atualizar, é preciso reinstalar o ACBr rodando o instalador, de preferência marcando a opção "Apagar Arquivos Antigos".
  16. Boa tarde. Por favor, pode disponibilizar os arquivos de envelope para análise? Para gerar os mesmos é preciso definir a propriedade ACBrNFSeX.Configuracoes.WebService.Salvar := True;
  17. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
  18. Foi enviado ao SVN na Rev-28924 alteração visando corrigir o problema. Por favor, queira atualizar seus fontes, reinstalar o ACBr para realizar novos testes e reportar qualquer problema.
  19. Criada a #TK-3784 para análise do caso e parecer do consultor responsável.
  20. Por favor, atualize, reinstale e faça novos testes.
  21. Obrigado pela contribuição, em breve será validada para possível inclusão ao svn #TK-3782
  22. Obrigado pela contribuição, em breve será validada para possível inclusão ao svn #TK-3781. Por favor, é possível disponibilizar o manual do banco para que possamos usar na análise?
  23. Contribuição enviada ao SVN na Rev-28921. Por favor, queira atualizar seus fontes, reinstalar o ACBr para realizar novos testes e reportar qualquer problema.
  24. Obrigado pela contribuição, em breve será validada para possível inclusão ao svn #TK-3779
  25. Alteração enviada ao SVN na Rev-28920. Por favor, queira atualizar seus fontes, reinstalar o ACBr para realizar novos testes e reportar qualquer problema.
×
×
  • 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.