Ir para conteúdo
  • Cadastre-se

Recommended Posts

Postado

Boa tarde, implementei o código para Servidor próprio IPM para Guaibá/RS mas segue mensagem quando envio a nota e não sei o que pode ser:

Modo de Envio : Enviar Lote
Numero do Lote: 101
Data de Envio : 30/12/1899
Numero do Prot: 
Sucesso       : True
 
Erro(s):
Código  : X201
Mensagem: WebService retornou um XML vazio.
Correção: 

Alexandre

Postado

Boa tarde, o problema do WebService resolveu, consegui enviar mas tive que fazer duas alterações, peço aos administradores para por favor verificar e atualizar no trunk

Tive que alterar o arquivo ACBrNFSeXServicos.ini 

[4309308]
Nome=Guaiba
UF=RS
Provedor=IPM
Versao=1.01
Params=GerarTag:codigo_atividade|ServicosPadraoNacional:ObterDANFSE
ProRecepcionar=https://guaiba.atende.net/?pg=rest&service=WNERestServiceNFSe
HomRecepcionar=https://guaiba.atende.net/?pg=rest&service=WNERestServiceNFSe

Pois é obrigatório a tag codigo_atividade, adicionei GerarTag:codigo_atividade|

e Identificamos um comportamento inconsistente na geração do XML de NFSe para o provedor IPM (versão 1.01), especificamente no método TNFSeW_IPM.GerarLista da unit IPM.GravarXml.

Atualmente, o ACBr está gerando automaticamente a tag <unidade_codigo>, mesmo quando os campos relacionados à unidade de serviço não estão efetivamente informados (quantidade e valor unitário). Isso resulta em XMLs incompletos do ponto de vista do provedor, causando rejeição com a seguinte mensagem:

Código 00166: "Para utilizar Unidade de Serviço nos ítens dos serviços é necessário informar os campos unidade_codigo, unidade_quantidade e unidade_valor_unitario."

Conforme validado:

O provedor IPM não exige o uso de unidade de serviço;

Porém, quando a tag <unidade_codigo> é enviada, torna-se obrigatório informar também:

<unidade_quantidade>

<unidade_valor_unitario>

O problema ocorre porque o ACBr inclui <unidade_codigo> mesmo quando Quantidade e ValorUnitario estão zerados ou não informados, gerando um XML inconsistente com as regras do provedor.

Corriji da seguinte forma que esta em IPM.GravarXml; :

function TNFSeW_IPM.GerarLista: TACBrXmlNodeArray;
var
  i: Integer;
  xDescr: string;
  xUnidade: string;
  lGerarUnidade: Boolean;
begin
  Result := nil;
  SetLength(Result, NFSe.Servico.ItemServico.Count);

  for i := 0 to NFSe.Servico.ItemServico.Count - 1 do
  begin
    Result[i] := CreateElement('lista');

    Result[i].AppendChild(AddNode(tcStr, '#', 'tributa_municipio_prestador', 1, 1, 1,
      FpAOwner.SimNaoToStr(NFSe.Servico.ItemServico[i].TribMunPrestador), ''));

    Result[i].AppendChild(AddNode(tcStr, '#', 'codigo_local_prestacao_servico', 1, 9, 1,
      CodIBGEToCodTOM(StrToIntDef(NFSe.Servico.ItemServico[i].CodMunPrestacao, 0)), ''));

    xUnidade := Trim(UnidadeToStr(NFSe.Servico.ItemServico[i].TipoUnidade));
    lGerarUnidade := (xUnidade <> '') and
                     (NFSe.Servico.ItemServico[i].Quantidade > 0) and
                     (NFSe.Servico.ItemServico[i].ValorUnitario > 0);

    if lGerarUnidade then
    begin
      Result[i].AppendChild(AddNode(tcStr, '#', 'unidade_codigo', 1, 9, 0,
        xUnidade, ''));

      Result[i].AppendChild(AddNode(tcDe10, '#', 'unidade_quantidade', 1, 15, 0,
        NFSe.Servico.ItemServico[i].Quantidade, ''));

      Result[i].AppendChild(AddNode(tcDe10, '#', 'unidade_valor_unitario', 1, 15, 0,
        NFSe.Servico.ItemServico[i].ValorUnitario, ''));
    end;

    Result[i].AppendChild(AddNode(tcStr, '#', 'codigo_item_lista_servico', 1, 9, 1,
      OnlyNumber(NFSe.Servico.ItemServico[i].ItemListaServico), ''));

    Result[i].AppendChild(AddNode(tcStr, '#', 'codigo_nbs', 1, 9, 0,
      OnlyNumber(NFSe.Servico.CodigoNBS), ''));

    Result[i].AppendChild(AddNode(tcStr, '#', 'codigo_atividade', 1, 9, FpNrOcorrCodigoAtividade,
      OnlyNumber(NFSe.Servico.ItemServico[i].CodigoCnae), ''));

    if NFSe.Servico.ItemServico[i].Descricao = '' then
      xDescr := NFSe.Servico.Discriminacao
    else
      xDescr := NFSe.Servico.ItemServico[i].Descricao;

    xDescr := StringReplace(xDescr, Opcoes.QuebraLinha,
      FpAOwner.ConfigGeral.QuebradeLinha, [rfReplaceAll]);

    Result[i].AppendChild(AddNode(tcStr, '#', 'descritivo', 1, 1000, 1,
      xDescr, ''));

    if NFSe.Servico.ItemServico[i].Aliquota = 0 then
      Result[i].AppendChild(AddNode(tcDe4, '#', 'aliquota_item_lista_servico', 1, 15, 1,
        NFSe.Servico.Valores.Aliquota, ''))
    else
      Result[i].AppendChild(AddNode(tcDe4, '#', 'aliquota_item_lista_servico', 1, 15, 1,
        NFSe.Servico.ItemServico[i].Aliquota, ''));

    Result[i].AppendChild(AddNode(tcInt, '#', 'situacao_tributaria', 1, 4, 1,
      NFSe.Servico.ItemServico[i].SituacaoTributaria, ''));

    Result[i].AppendChild(AddNode(tcDe2, '#', 'valor_tributavel', 1, 15, 0,
      NFSe.Servico.ItemServico[i].ValorTributavel, ''));

    Result[i].AppendChild(AddNode(tcDe2, '#', 'valor_deducao', 1, 15, 0,
      NFSe.Servico.ItemServico[i].ValorDeducoes, ''));

    Result[i].AppendChild(AddNode(tcDe2, '#', 'valor_desconto_incondicional', 1, 15, 0,
      NFSe.Servico.ItemServico[i].DescontoIncondicionado, ''));

    if NFSe.Servico.ItemServico[i].SituacaoTributaria in [3, 4] then
      Result[i].AppendChild(AddNode(tcDe2, '#', 'valor_issrf', 1, 15, 1,
        NFSe.Servico.ItemServico[i].ValorISSRetido, DSC_VISS))
    else
      Result[i].AppendChild(AddNode(tcDe2, '#', 'valor_issrf', 1, 15, 0,
        NFSe.Servico.ItemServico[i].ValorISSRetido, DSC_VISS));

    Result[i].AppendChild(AddNode(tcStr, '#', 'cno', 1, 15, 0,
      NFSe.Servico.ItemServico[i].CodCNO, ''));
  end;

  if NFSe.Servico.ItemServico.Count > 10 then
    wAlerta('#', 'lista', '', ERR_MSG_MAIOR_MAXIMO + '10');
end;

Se possivel avaliar e fazer as devidas atualizações, pois meu cliente já está usando a minha versão bpl aqui em ambiente de produção, amanhã vou tentar resolver a questão do tópico: 

 meu cliente esta a alguns dias precisando urgente dessa informação na impressão, se alguém tiver uma solução eu agradeço, tentarei achar e corrigir daqui enquanto isso.

Alexandre.

  • 4 semanas depois ...
Postado

boa tarde amigos,

ao atualizar o acbr o problema do cliente continuou , adicionei a correção acima, recompilei o acbrnfsex.bpl e voltou a funcionar, se possivel atualizar a correção no Trunk seria interessante pois assim não vai dar problema quando atualizar o acbr da próxima vez, e buscar a versão sem a correção, obrigado!

Alexandre

  • Consultores
Postado

Favor anexar a unit ou units modificadas

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.