Boa tarde!
Ao enviar uma RPS para a prefeitura de Cachoeirinha/RS que tem como provedor Thema, recebi uma falha com a mensagem "Erro! Nao foi possivel converter os dados do XML enviado.".
Depois de bater a cabeça tentando entender o que tinha dado errado, percebi que o motivo que estava levando ao problema era que o campo da Razão Social do Tomador tinha o caracter "&". Quando retirei para fazer um teste, a RPS foi processada com sucesso.
Então sugiro aplicar um tratamento um pouquinho mais elaborado na montagem do Envelope SOAP dos métodos Web-Services. Exemplo:
No método TProvedorThema.GeraEnvelopeRecepcionarLoteRPS temos:
result := '<?xml version="1.0" encoding="UTF-8"?>' +
'<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
'<S:Body>' +
'<' + FMetodoRecepcionar + ' xmlns="' + URLNS + '">' +
'<xml>' +
'<?xml version="1.0" encoding="UTF-8"?>' +
StringReplace(StringReplace(DadosMsg, '<', '<', [rfReplaceAll]), '>', '>', [rfReplaceAll]) +
'</xml>' +
'</' + FMetodoRecepcionar + '>' +
'</S:Body>' +
'</S:Envelope>';
Sugiro utilizar a função ACBrUtil.ParseText no lugar dos StringReplace, ficando assim:
result := '<?xml version="1.0" encoding="UTF-8"?>' +
'<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
'<S:Body>' +
'<' + FMetodoRecepcionar + ' xmlns="' + URLNS + '">' +
'<xml>' +
'<?xml version="1.0" encoding="UTF-8"?>' +
ParseText(DadosMsg, False) +
'</xml>' +
'</' + FMetodoRecepcionar + '>' +
'</S:Body>' +
'</S:Envelope>';
Com isso não haverá mais o problema dos "&" nos XML.
Acredito que isso poderia se extender para todos os provedores, o que acham?