Fórum Envio de parâmetro do tipo Double #523710
22/06/2015
0
estou enfrentando um problema para consumir um serviço via WSDL, mas especificadamente, com relação à alguns procedimentos que possuem parâmetros do tipo DOUBLE, no Delphi 7.
Abaixo segue um dos procedimentos, cujo estou tendo problemas:
GetHostaHostPortType(true, '', HTTPRIO2).consultarMargem('AAAA', 'AAAA-BBBBBBBBB', 'aaaa_xml', '12345', '10057900', '123.456.789-00',
'001', '001', **valor, 'abc12345', '', '', '420', '420', false,
s, retorno, mensagem, serv, se, info);
Obs.: O campo **valor é do tipo double;
Quando realizo a execução desse procedimento, me é retornado o seguinte erro:
"no valid a floating point value";
Existe alguma maneira de passar o valor double para uma procedure para que este erro não seja retornado???
Grato.
Rafael Santos
Curtir tópico
+ 0Post mais votado
22/06/2015
posta o codigo dessa funcao que fica mais facil ter uma ideia
Dorivan Sousa
Gostei + 1
Mais Posts
22/06/2015
Dorivan Sousa
qual o valor q vc ta passando?
Gostei + 0
22/06/2015
Rafael Santos
1ª - 1.00
2ª - 1,00
Obs.: Na onde esta o parâmetro **valor, já experimentei passar o valor direto, ou seja, 1.00. Porém percebi que o decimal separator do delphi é ',' ao invés de '.';
Obrigado
Gostei + 0
22/06/2015
Dorivan Sousa
colocou sem as casas decimais, somente 1?
Gostei + 0
22/06/2015
Rafael Santos
GetHostaHostPortType(true, '', HTTPRIO2).consultarMargem('AAAA', 'AAAA-BBBBBB', 'aaa_xml', '12345', '10057900', '123.456.789-00',
'001', '001', 1, 'abc12345', '', '', '420', '420', false,
s, retorno, mensagem, serv, se, info);
E fiz um teste passando 0(Zero) também, dessa forma ele envio os dados para o webservice e o erro foi retornado pelo próprio webservice acusando que o valor é obrigatório.
Já tentei passar 1,25 para não deixar zeros após a vírgula.
Porém nada de dar certo.
Gostei + 0
22/06/2015
Rafael Santos
procedure consultarMargem(const cliente: WideString; const convenio: WideString; const usuario: WideString; const senha: WideString; const matricula: WideString; const cpf: WideString; const orgaoCodigo: WideString; const estabelecimentoCodigo: WideString; const valorParcela: Double; const senhaServidor: WideString; const tokenAutServidor: WideString; const loginServidor: WideString; const codVerba: WideString; const servicoCodigo: WideString; const matriculaMultipla: Boolean; out sucesso: Boolean; out codRetorno: WideString; out mensagem: WideString; out servidores: Servidor; out servicos: Servico; out infoMargem: InfoMargem); stdcall;
const valorParcela: Double, representa o parâmetro que estou passando naquela chamada.
Gostei + 0
22/06/2015
Dorivan Sousa
voce tentou debugar?
Gostei + 1
22/06/2015
Dorivan Sousa
http://www.activedelphi.com.br/forum/viewtopic.php?t=57184
aqui fala justamente do decimal separator
http://www.tecnospeed.com.br/forum/componente-nfe/componente-soap-do-delphi7-altera-o-decimalseparator/
vc ja fez esse procedimento?
Gostei + 1
22/06/2015
Rafael Santos
function GetHostaHostPortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): HostaHostPortType;
const
defWSDL = 'https://www.econsig.com.br/central_homologa/services/HostaHostService?wsdl';
defURL = 'https://www.econsig.com.br/central_homologa/services/HostaHostService/';
defSvc = 'HostaHostService';
defPrt = 'HostaHostHttpPort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as HostaHostPortType);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end
else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
Acima esta a função GetHostaHostPortType
Gostei + 0
22/06/2015
Rafael Santos
Qualquer eventualidade eu posto aqui novamente.
Muito obrigado pela atenção Dorivan.
Abraços
Gostei + 0
22/06/2015
Rafael Santos
GetHostaHostPortType(true, '', HTTPRIO).consultarMargem('AAAA', 'AAAA-BBBBBB', 'aaa_xml', '12345', '10057900', '123.456.789-00',
'001', '001', 1.00, 'abc12345', '', '', '420', '420', false,
s, retorno, mensagem, serv, se, info);
Esto tendo o seguinte erro:
[img]http://arquivo.devmedia.com.br/forum/imagem/438187-20150622-180753.png[/img]
Obs.: Já tentei reimportar o WSDL novamente.
Desde já agradeço pela atenção.
Gostei + 0
23/06/2015
Dorivan Sousa
Gostei + 1
23/06/2015
Rafael Santos
Muito obrigado pela dicas!
Gostei + 0
23/06/2015
Rafael Santos
Olha muito obrigado pela dica deu certo! Acredito que eu estava cometendo algum erro na verdade de implementação. Na qual havia um try para tratar o campo valor.
Após remover esta codificação passou a dar certo!
Muito Obrigado pela sua atenção.
Abraços
Gostei + 0
23/06/2015
Dorivan Sousa
resolveu no delphi 7 ou no xe?
se foi no delphi 7 resolveu com a atualizacao do SOAP?
Gostei + 1
23/06/2015
Rafael Santos
Seguindo os passos descritos no link abaixo:
http://www.tecnospeed.com.br/forum/componente-nfe/componente-soap-do-delphi7-altera-o-decimalseparator/
Abraços
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)