Ir para conteúdo
  • Cadastre-se

Danilo MSI Soluções

Membros
  • Total de ítens

    8
  • Registro em

  • Última visita

Danilo MSI Soluções's Achievements

Rookie

Rookie (2/14)

  • Reacting Well Rare
  • First Post
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

5

Reputação

  1. Olá novamente, @Italo Giurizzato Junior! A sua solução deu certo e, ao meu parecer, faz mais sentido que a nossa uma vez que o parâmetro se torna desnecessário a partir do momento que o WebService passa a exigir essa tag em algumas situações (quando retido). Já a nossa solução tem como objetivo justamente "burlar" o parâmetro. Então já descartamos a nossa e vamos usar a sua como oficial daqui em diante, tudo bem? Se me permitir, só faça um ajuste ali onde o NrOcorrValorIss recebe os valores. Está recebendo 1 nos dois casos (com e sem retenção). O correto, ao meu ver, seria 1 para retenção (gerar) e -1 para não retenção (não gerar). Mas já ajustei o meu aqui: function TNFSeW_DeISS203.GerarXml: Boolean; begin if NFSe.Servico.Valores.IssRetido = stRetencao then NrOcorrValorIss := 1 else NrOcorrValorIss := -1; Result := inherited GerarXml; end; No mais, pode encerrar. Muito obrigado pela ajuda!
  2. Olá @Italo Giurizzato Junior, boa tarde! Farei os testes agora mesmo. Em paralelo, nós conseguimos alterar o parâmetro em tempo de execução através da nossa Unit, sendo necessário apenas a limpeza da TStringList "fSL" do ACBr (TACBrNFSeXConfigParams) que armazena os parâmetros. Isso porque ela somente os adiciona, então quando eu tento substituir o valor, o valor original acaba ficando deixando o parâmetro sempre ativo. Talvez seja intencional, mas segue abaixo para caso achem interessante essa saída também: // Nossa Unit. Entra aqui somente quando for caso de retenção: // Controle do parâmetro "NaoGerarTag:ValorIss" para o provedor "proDeISS": // Quando tem retenção, precisa da tag <ValorIss>. Portanto, precisa remover o parâmetro para passar a gerá-la (caso tenha): // OBS: O controle não precisa ser desfeito caso não tenha retenção pois na próxima nota acontece nova leitura do .ini, recriando o parâmetro. if ACBrNFSe.Configuracoes.Geral.Provedor = proDeISS then if ACBrNFSe.Provider.ConfigGeral.Params.ParamTemValor('NaoGerarTag', 'ValorIss') then begin vParametroAlterado := ACBrNFSe.Provider.ConfigGeral.Params.AsString; if Pos(vParametroAlterado, 'NaoGerarTag:ValorIss') > 0 then begin vParametroAlterado := ReplaceText(vParametroAlterado, 'NaoGerarTag:ValorIss', ''); ACBrNFSe.Provider.ConfigGeral.Params.AsString := vParametroAlterado; end; end; Aqui o ajuste que foi necessário no ACBr para funcionar: procedure TACBrNFSeXConfigParams.SetAsString(const AValue: String); var s: String; begin if FAsString = AValue then Exit; FAsString := Trim(AValue); s := StringReplace(FAsString, ':', '=', [rfReplaceAll]); fSL.clear(); // * Linha adicionada AddDelimitedTextToList(s, '|', fSL, #0); end; Vou desfazer os ajustes e implementar a sua solução e já lhe dou um retorno sobre o resultado. Muito obrigado pela atenção!
  3. Olá pessoal, boa tarde! Estamos implementando o novo componente ACBrNFSeX para um cliente na cidade de Indaiatuba/SP (provedor DeISS). Porém, estamos enfrentando um problema quando ao controle da tag <ValorIss>: Se a NFSe é emitida a um cliente que retém ISS, acontece o seguinte erro na transmissão: --------- Código : X999 Mensagem: Erro de Conexão: soap:Server - javax.xml.ws.WebServiceException: Verifique sua mensagem SOAP e a passagem desses parâmetros necessários. Não conseguiu obter a mensagem XML do cabeçalho ou dos dados. Verifique a passagem desses parâmetros pela mensagem SOAP. --------- Segundo suporte do WebService, foi nos dito que, nesses casos, é necessário passar o valor do ISS através da tag <ValorIss>. Por padrão, essa tag não é gerada para esse provedor pois, no arquivo "ACBrNFSeXServicos.ini", tem o seguinte parâmetro ativo: Params=NaoGerarTag:ValorIss Ao removermos manualmente esse parâmetro, a NFSe para cliente que retém ISS passa a ser transmitida com sucesso. Porém, se emitirmos daí para um cliente que não retém ISS, caímos no seguinte erro: -------- Código : E220 Mensagem: Valor do ISSQN informado indevidamente. Correção: O valor do ISSQN será calculado pela Prefeitura e não deve ser informado pelo contribuinte. --------- Em resumo, temos: - Se o cliente Retém ISS, tem que ter valor de ISS (parâmetro "Params=NaoGerarTag:ValorIss" desativado). Senão, erro X999 - Se o cliente não Retém ISS, não pode haver valor de ISS (parâmetro "Params=NaoGerarTag:ValorIss" ativado). Senão, erro E220 (e também o E221 caso seja informada alguma alíquota) @Juliomar Marchetti, através do Discord, nos orientou a procurarmos por alguma opção que controlasse a impressão ou não da referida TAG, mas nós não encontramos. Também nos orientou a não passar a TAG e assim já tínhamos feito, mas também sem sucesso. A TAG aparece com o valor padrão 0. Acredito que o preenchimento, inclusive, se dê nesse trecho (Unit "ACBrNFSeXLerXml_ABRASFv2", procedure "TNFSeR_ABRASFv2.LerServicos", linha 938): if Valores.IssRetido = stRetencao then begin Valores.ValorIssRetido := Valores.ValorIss; Valores.ValorIss := 0; end else Valores.ValorIssRetido := 0; Notem que sempre que for caso de retenção, o valor 0 é atribuído ao "ValorIss", o que impede a emissão para cliente que não retém ISS neste provedor (mesmo removendo o parâmetro do .ini). Então, até o presente momento, estamos sem saber como tratar a referida situação. Muito obrigado, em antecipado, pela atenção!
  4. Olá amigos, boa tarde! Como a solução não precisou ajustar nenhuma Unit do ACBr, creio que podemos encerrar este fórum e manter o controle internamente pelo Ticket de vocês. Muito obrigado pela ajuda!
  5. Opa, bom dia @Italo Giurizzato Junior! Entendi. No meu caso, por hora, controlei pelo valor de retenção. Se for 0, então eu não coloco nenhum responsável (rtNenhum). Caso haja, coloquei para trazer o valor do campo "responsavelretencao" da view que criamos para abastecer os dados da NFSe, dessa forma: { ISS Retido } if MeuDataSet.FieldByName('vrissretido').AsExtended > 0 then begin IssRetido := stRetencao; ResponsavelRetencao := ACBrNFSe.Provider.StrToResponsavelRetencao(OK, MeuDataSet.FieldByName('responsavel_retencao').AsString); end else begin IssRetido := stNormal; ResponsavelRetencao := rtNenhum; end; Sei que não é o ideal, mas estamos validando essa versão por enquanto em um único cliente que vai ser atendido pelo ajuste.
  6. Olá @Italo Giurizzato Junior, boa tarde! Sim, tem razão. Desconsidere então a função "TACBrNFSeXProvider.ResponsavelRetencaoToStr", por favor. Muito obrigado pela atenção!
  7. Olá, bom dia! Conforme relatado no grupo do Discord (https://discord.com/channels/798697718800318484/801796941813907456/1370377955242672279) as funções supracitadas não estão permitindo a escolha da opção "rtNenhum" pois, para tal, é necessário passar o valor '', porém, já existe outra opção que corresponde ao valor citado. Vide abaixo: function TACBrNFSeXProvider.ResponsavelRetencaoToStr( const t: TnfseResponsavelRetencao): string; begin Result := EnumeradoToStr(t, ['1', '', '2', ''], [rtTomador, rtPrestador, rtIntermediario, rtNenhum]); end; function TACBrNFSeXProvider.StrToResponsavelRetencao(out ok: boolean; const s: string): TnfseResponsavelRetencao; begin Result := StrToEnumerado(ok, s, ['1', '', '2', ''], [rtTomador, rtPrestador, rtIntermediario, rtNenhum]); end; Por hora, contornei aqui no meu fonte passando rtNenhum diretamente quando não for caso de Retenção de ISS. Muito obrigado!
×
×
  • 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.

The popup will be closed in 10 segundos...