Erro ao listar Notas pelo SDK Delphi em SandBox

Boa noite, não consigo listar RPS enviados, erro ‘access violation’ no método ListarNfse
usando o Demo pois não retorna todos os dados, somente o ID.

Estou enviando o RPS em SandBox assim:

PedidoEmissao := TNfseDpsPedidoEmissao.Create;
try
PedidoEmissao.ambiente := cbAmbiente.Text;
PedidoEmissao.infDPS.tpAmb := 2;
PedidoEmissao.infDPS.dhEmi := Now;
PedidoEmissao.infDPS.verAplic := ‘1.0’;
PedidoEmissao.infDPS.dCompet := Date;

PedidoEmissao.infDPS.prest := TInfoPrestador.Create;
PedidoEmissao.infDPS.prest.CNPJ := edPrestadorCpfCnpj.Text;

PedidoEmissao.infDPS.toma := TInfoTomador.create;
PedidoEmissao.infDPS.toma.CPF := edTomadorCpfCnpj.Text;
PedidoEmissao.infDPS.toma.xNome := edTomadorNomeRazaoSocial.Text;

PedidoEmissao.infDPS.toma.&end := TEndereco.Create;
PedidoEmissao.infDPS.toma.&end.xLgr := 'RUA APARECEID';
PedidoEmissao.infDPS.toma.&end.nro := '2232';
PedidoEmissao.infDPS.toma.&end.xBairro := 'JARDIM 1';

PedidoEmissao.infDPS.toma.&end.endNac := TEnderNac.Create;
PedidoEmissao.infDPS.toma.&end.endNac.cMun := '3549805';
PedidoEmissao.infDPS.toma.&end.endNac.CEP := '15043260';

PedidoEmissao.infDPS.serv.locPrest := TLocPrest.Create;
PedidoEmissao.infDPS.serv.locPrest.cLocPrestacao := '3549805';
PedidoEmissao.infDPS.serv.locPrest.cPaisPrestacao := 'BR';

PedidoEmissao.infDPS.serv.cServ := TCServ.Create;
PedidoEmissao.infDPS.serv.cServ.cTribNac := '1402';
PedidoEmissao.infDPS.serv.cServ.cTribMun := '140200';
PedidoEmissao.infDPS.serv.cServ.CNAE := '4530703';
PedidoEmissao.infDPS.serv.cServ.xDescServ := edServicoDiscriminacao.Text;

PedidoEmissao.infDPS.valores := TInfoValores.Create;
PedidoEmissao.infDPS.valores.vServPrest.vServ := StrToFloat(edServicoValorUnitario.Text);

PedidoEmissao.infDPS.valores.trib := TInfoTributacao.Create;
PedidoEmissao.infDPS.valores.trib.tribMun.tribISSQN := 1;
PedidoEmissao.infDPS.valores.trib.tribMun.cLocIncid := '3549805';
PedidoEmissao.infDPS.valores.trib.tribMun.pAliq :=  3;
PedidoEmissao.infDPS.valores.trib.tribMun.tpRetISSQN := 2;

try
  Nfse := Client.Nfse.EmitirNfseDps(PedidoEmissao);

O pedido fica em processamento e retorna o ID mas depois não sei se foi transmitido.

Bom dia @leandro. Seja bem-vindo à Nuvem Fiscal!

Você está reportando um erro no método ListarNfse, porém não postou o código onde ele está sendo utilizado. Poderia colar o código inteiro aqui, por favor?

Segue:

TfmMain.btListaNfsesClick(Sender: TObject);
var
Notas: TNfseListagem;
Nota: TNfse;
Item: TListItem;
begin

Notas := Client.Nfse.ListarNfse(30, 0, False, edNfseCnpj.Text, ‘’, AmbienteNfse, ‘’);
try
lvNfses.Clear;
for Nota in Notas.data do
begin
Item := lvNfses.Items.Add;
Item.Caption := Nota.id;
Item.SubItems.Add(Nota.numero);
Item.SubItems.Add(Nota.declaracao_prestacao_servico.rps.identificacao_rps.numero);
Item.SubItems.Add(Nota.status);
if Nota.data_emissaoHasValue then
Item.SubItems.Add(FormatDateTime(‘dd/mm/yyyy HH:nn:ss’, Nota.data_emissao))
else
Item.SubItems.Add(‘’);
Item.SubItems.Add(Nota.declaracao_prestacao_servico.tomador.nome_razao_social);
Item.SubItems.Add(FormatFloat(‘“R$” #,0.00’, TfmDetalhesNfse.GetValorTotal(Nota)));
end;
finally
Notas.Free;
end;
end;

Erro na linha em negrito, só retorna o ID.

A propriedade declaracao_prestacao_servico está descontinuada, estando disponível apenas para envios que foram feitos pelo endpoint POST /nfse, que também foi descontinuado. Assim, o valor da propriedade fica igual a nil, não sendo possível acessar qualquer subpropriedade dela (por isso o erro de access violation ocorre).

OK, tirei essa propriedade e retornou os testes, mas todos com erros, porém agora não sei identificar onde estou errando.

Tem alguma dica?

Olá @leandro,

Existe a propriedade mensagens onde você pode pegar a relação de erros ou rejeições:

Segue a documentação de todos os campos: API Nuvem Fiscal | Nuvem Fiscal

OK, a msg. de erro é essa:
X800
Erro de Validação: → 1832 - Element ‘{http://www.ginfes.com.br/tipos_v03.xsd}ItemListaServico’: [facet ‘maxLength’] The value has a length of ‘6’; this exceeds the allowed maximum length of ‘5’.

Acredito a propriedade ItemListaServico seja uma dessas 2 olhando na documentação:
PedidoEmissao.infDPS.serv.cServ.cTribNac := ‘140200’;
PedidoEmissao.infDPS.serv.cServ.cTribMun := ‘1402’;

Eu já inverti os valores mas retorna a mesma msg. de erro.

A propriedade ItemListaServico do provedor Ginfes refere-se à propriedade infDPS.serv.cServ.cTribNac.

Como a mensagem de erro indica que o tamanho máximo é 5, então você pode tentar da seguinte forma:

PedidoEmissao.infDPS.serv.cServ.cTribNac := ‘14.02’;

mais essa, aff
E16
A data da emissão do RPS não poderá ser superior a data de hoje
Informe uma data de emissão de RPS válida

Estou enviando assim agora:
infDPS.dhEmi := TTimeZone.Local.ToUniversalTime(Now)
mas já tentei de várias formas.

@leandro

Informe as datas em fuso local mesmo, pois a SDK já transforma os campos datetime para UTC:

infDPS.dhEmi := Now;

Mesmo assim retorna o mesmo erro!

Enviei dessa forma:
infDPS.dhEmi := Now;
infDPS.dCompet := Int(Now)

Tente assim:

infDPS.dhEmi := Now;
infDPS.dCompet := Now;

Caso não dê certo, favor informar o id da nota para verificarmos o que está ocorrendo.

segue:
nfs_3a09350ac62c4eaea01ee82f4d128ca6

Eu já tinha tentado dessa forma tb.

@leandro

Teremos que fazer uma alteração específica para o provedor dessa prefeitura. Favor aguardar.

@leandro

Fizemos a alteração no Sandbox. Favor testar novamente com o último código sugerido.

Por enquanto está com erro:
ServerError
Internal server error: WT-fpWCCGn-hkpKil5AizQ

Certo, já detectamos aqui.

Vamos analisar e em breve retornamos.

Olá @leandro,

Creio que agora esteja tudo resolvido.

Favor testar novamente.

Mudou a msg. de erro agora:

E15
Data da emissão do RPS inválida
Informe a Data da emissão do RPS no formato Date

ID:
nfs_3a0935f51c7a4992b8b11bb42c72f1bd

Boa tarde, agora a msg. de erro mudou:

E16
A data da emissão do RPS não poderá ser superior a data de hoje
Informe uma data de emissão de RPS válida