Newsgroup: it.comp.lang.delphi
Titolo: [D7] Accesso WebService

Ciao a tutti,
 
premessa : prima o poi taglio le manine a mio cognato.
 
Fine premessa.
 
La nuova richiesta di mio cognato, complice il suo commercialista, è quella che l'anagrafica deve essere più precisa perchè il commercialista gli sta facendo ( giustamente ) le pulci sui codici fiscali errati.
A questo punto mio cognato mi richiede un implementazione nell'anagrafica dicendo che vuole i campi che determinano il codice fiscale, a parte disquisizioni tipo inserimento errato sia per il codice fiscale sia per i nuovi campi, abbiamo ( lui ) deciso di procedere con le modifiche.
 
1° Step
Scaricato i comuni aggiornati dal sito delle finanze.
 
2° Step
Scaricati i vari sorgenti ( diversi ) da questo ng, e a breve testarli.
 
3° Step
Ho visto che in rete c'e' un bellissimo servizio ( sembra affidabile ) dove, dato i campi necessari ritorna il codice fiscale.
 
Per il momento sarei propenso per lo Step 3.
 
Premetto che è la prima volta in vita mia che utilizzo un web service, mi sono dato da fare in rete per capire come fare ad integrarlo in D7, con qualche difficoltà ( non lo nego ) sono riuscito alla fine a compilare il primo progettino di prova.
 
Andando però in RUN, una volta inseriti i dati e, successivamente richiamando il servizio, questo mi ritorna la stringa "Error" senza nessuna altra info.
 
Mettendo l'indirizzo del WS su Internet Explorer accedo correttamente al servizio e una volta inseriti i dati mi ritorna correttamente il codice fiscale.
 
Se non trasgredisco a qualche regola posto qui di seguito il .PAS relativo all'importazione del WSDL e del mio programmino di test.
 
Per il momento lo Step2 è congelato dato che vi sono varie varianti di funzioni scritte da alcuni componenti del ng, sperando che uno vale l'altro, chiaramente se qualcuno ha una funzione per la costruzione del codice fiscale che è testata ed affidabile e che la volesse condividere sarei molto felice ( richiesta trita e ritrita all'interno del ng, perdonatemi ).
 
.PAS del WS
 
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : 
http://webservices.dotnethell.it/codicefiscale.asmx?WSDL
 
// Encoding : utf-8
// Version  : 1.0
// (06/03/2020 13.44.30 - 1.33.2.5)
// ************************************************************************ //
 
unit codicefiscale;
 
interface
 
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
 
type
 
  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Borland types; however, they could also 
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:string          - "
http://www.w3.org/2001/XMLSchema
"
 
 
 
  // ************************************************************************ //
  // Namespace : 
http://webservices.dotnethell.it/CodiceFiscale
 
  // soapAction: 
http://webservices.dotnethell.it/CodiceFiscale/%operationName%
 
  // transport : 
http://schemas.xmlsoap.org/soap/http
 
  // binding   : CodiceFiscaleSoap
  // service   : CodiceFiscale
  // port      : CodiceFiscaleSoap
  // URL       : 
http://webservices.dotnethell.it/codicefiscale.asmx
 
  // ************************************************************************ //
  CodiceFiscaleSoap = interface(IInvokable)
  ['{B74A5067-925C-E90A-E0DE-3E988643AC7A}']
    function  CalcolaCodiceFiscale(const Nome: WideString; const Cognome: WideString; const ComuneNascita: WideString; const DataNascita: WideString; const Sesso: WideString): WideString; stdcall;
    function  CodiceComune(const NomeComune: WideString): WideString; stdcall;
    function  NomeComune(const CodiceComune: WideString): WideString; stdcall;
    function  ControllaCodiceFiscale(const CodiceFiscale: WideString): WideString; stdcall;
  end;
 
function GetCodiceFiscaleSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): CodiceFiscaleSoap;
 
 
implementation
 
function GetCodiceFiscaleSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): CodiceFiscaleSoap;
const
  defWSDL = '
http://webservices.dotnethell.it/codicefiscale.asmx?WSDL
';
  defURL  = '
http://webservices.dotnethell.it/codicefiscale.asmx
';
  defSvc  = 'CodiceFiscale';
  defPrt  = 'CodiceFiscaleSoap';
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 CodiceFiscaleSoap);
    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;
 
 
initialization
  InvRegistry.RegisterInterface(TypeInfo(CodiceFiscaleSoap), '
http://webservices.dotnethell.it/CodiceFiscale
', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(CodiceFiscaleSoap), '
http://webservices.dotnethell.it/CodiceFiscale/%operationName%'
);
 
end. 
 
.PAS del mio programmino.
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Txt_Nome: TEdit;
    Txt_Cognome: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Txt_Comune: TEdit;
    Txt_DataNascita: TEdit;
    Txt_Sesso: TEdit;
    Label6: TLabel;
    CF: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses codicefiscale;
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    CF.Text := GetCodiceFiscaleSoap().CalcolaCodiceFiscale(Txt_Nome.Text,Txt_Cognome.Text,Txt_Comune.Text,Txt_DataNascita.Text,Txt_Sesso.Text);
end;
 
end.
 
Un sentito ringraziamento a tutti.
 
Ciao da Enrico Giudici c/o Anthelios.

 
Ciao, Enrico! Spero tutto ok..
 
 
Un algoritmo standard per il calcolo del codice fiscale non può esistere.
IL CF, di fatto, è un hash e tutti gli hash, per definizione hanno dei conflitti.
Anni fa vidi un servizio in tv...
Si parlava di un piccolo comune del Veneto dove nomi e cognomi si ripetono spesso.
Risultato: a parità di cognome, nome, data di nascita e, ovviamente, questo specifico comune, i codici fiscali risultavano spesso identici.
 
Ergo, se il webservice di cui stai parlando è dell'agenzia delle entrate, allora fare sto lavoro potrebbe aver senso, altrimenti devi mettere in conto che l'affidabilità non è al 100%.
Qualora ti trovassi nella seconda situazione, sta a te (e a tuo cognato) decidere se ne vale la pena.
A parte ciò, l'unica cosa che mi viene in mente è il valore della data di nascita: in che formato la stai passando?
 
A.
 
 
 

 
Attenzione, i software che generano il codice fiscale in italia sono 
vietati e, sopratutto, sono fonte di "sbagli" di persona. E' 
estremamente opportuno che il codice fiscale venga richiesto al cliente 
e che da questo venga fornito perché il software non può conoscere 
eventuali "collisioni" che sono più frequenti di quanto non si possa 
immaginare.
 
Per fare un esempio con il tuo nome e cognome, il codice fiscale di 
Enrico Giudici inizia per "GDCNRC" ma è lo stesso per Ennio Riccardo 
Giadocco e se per caso entrambi sono nati il 20/09/2001 a Milano 
(possibilissimo dato il numero elevato di nascite in un grande ospedale) 
ma è lo stesso se sono nati a distanza di 100 anni il codice fiscale 
continua "01P20F205" per finire con la stessa lettera che funge da 
contro codice. Avreste, pertanto lo stesso codice fiscale: 
"GDCNRC01O20F205." Come farebbe a sapere il tuo software a risolvere la 
collisione? In questi casi è previsto, dall'agenzia delle entrate, che 
alla prima richiesta venga assegnato il codice fiscale corrispondente ai 
propri dati anagrafici mentre alla seconda richiesta venga assegnato un 
codice fiscale leggermente "storpiato". Per entrambi la lettera 
assegnata in posizione 16 della stringa che funge da verifica conferma 
le prime 15 lettere oppure rivela un codice fiscale errato.
 
IMHO è utile farsi consegnare il codice fiscale dal cliente e 
verificarne la correttezza mediante l'algoritmo apposito che confronta 
il 16° carattere.
 
Ciao.

 Ergo, se il webservice di cui stai parlando è dell'agenzia delle entrate, allora fare sto lavoro potrebbe aver senso, altrimenti devi mettere in conto che l'affidabilità non è al 100%.
 
Neanche, l'affidabilità dell'ade, in questo caso ha già fatto cilecca 
diverse volte assegnando anche questo lo stesso codice fiscale a più 
persone diverse.
 
L'unica è verificare la correttezza delle prime 15 posizioni con la 16ma 
mediante l'algoritmo di controllo dopo averlo richiesto al cliente.
 
Ciao.

Ciao Enrico,
   non so come dirtelo .... ma funziona tutto ....
 
Ho avuto qualche difficolta' nell'importare il file WSDL, ma dopo un 
paio di modifiche al volo su un paio di tag il file e' stato importato 
correttamente.
Form di prova con una sola label ed inserito i miei dati persomnali e 
mettendo nell'onshow i calcolo del cf ha restituito il valore corretto.
 
Per prima cosa ti ringrazio per aver condiviso questo web service che, 
da oggi, posso implementarlo in un paio di progetti ...
 
Come seconda cosa in calce la unit importata con delphi 10.3.3 (essendo 
un file .WSDL non docresti avere problemi (non ho controllato i due 
sorgenti ... ma e' molto probabile che siano uguali. A memoria ricordo 
che qualche versione di delphi aveva dei problemi con l'importazione ... 
non ricordo quali versioni ...)
 
----- CODICE ON -----
 
// 
************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : C:\Progetti Delphi\Progetti\Progetti Vari 
Test\WSDL\CodiceFiscale.wsdl
//  >Import : C:\Progetti Delphi\Progetti\Progetti Vari 
Test\WSDL\CodiceFiscale.wsdl>0
// (10/03/2020 12:50:54 - - $Rev: 96726 $)
// 
************************************************************************ //
 
unit CodiceFiscale;
 
interface
 
uses Soap.InvokeRegistry, Soap.SOAPHTTPClient, System.Types, 
Soap.XSBuiltIns;
 
const
   IS_OPTN = $0001;
   IS_REF  = $0080;
 
 
type
 
   // 
************************************************************************ //
   // The following types, referred to in the WSDL document are not 
being represented
   // in this file. They are either aliases[@] of other types 
represented or were referred
   // to but never[!] declared in the document. The types from the 
latter category
   // typically map to predefined/known XML or Embarcadero types; 
however, they could also
   // indicate incorrect WSDL documents that failed to declare or import 
a schema type.
   // 
************************************************************************ //
   // !:string          - "
http://www.w3.org/2001/XMLSchema
"[Gbl]
 
 
   string_         =  type string;      { 
"
http://webservices.dotnethell.it/CodiceFiscale
"[GblElm] }
 
   // 
************************************************************************ //
   // Namespace : 
http://webservices.dotnethell.it/CodiceFiscale
 
   // soapAction: 
http://webservices.dotnethell.it/CodiceFiscale/%operationName%
 
   // transport : 
http://schemas.xmlsoap.org/soap/http
 
   // style     : document
   // use       : literal
   // binding   : CodiceFiscaleSoap
   // service   : CodiceFiscale
   // port      : CodiceFiscaleSoap
   // URL       : 
http://webservices.dotnethell.it/codicefiscale.asmx
 
   // 
************************************************************************ //
   CodiceFiscaleSoap = interface(IInvokable)
   ['{B74A5067-925C-E90A-E0DE-3E988643AC7A}']
     function  CalcolaCodiceFiscale(const Nome: string; const Cognome: 
string; const ComuneNascita: string; const DataNascita: string; const 
Sesso: string): string; stdcall;
     function  CodiceComune(const NomeComune: string): string; stdcall;
     function  NomeComune(const CodiceComune: string): string; stdcall;
     function  ControllaCodiceFiscale(const CodiceFiscale: string): 
string; stdcall;
   end;
 
 
   // 
************************************************************************ //
   // Namespace : 
http://webservices.dotnethell.it/CodiceFiscale
 
   // style     : ????
   // use       : ????
   // binding   : CodiceFiscaleHttpGet
   // service   : CodiceFiscale
   // port      : CodiceFiscaleHttpGet
   // 
************************************************************************ //
   CodiceFiscaleHttpGet = interface(IInvokable)
   ['{832A6EA3-7629-76E5-2AAE-B6BA62939B67}']
     function  CalcolaCodiceFiscale(const Nome: string; const Cognome: 
string; const ComuneNascita: string; const DataNascita: string; const 
Sesso: string): string_; stdcall;
     function  CodiceComune(const NomeComune: string): string_; stdcall;
     function  NomeComune(const CodiceComune: string): string_; stdcall;
     function  ControllaCodiceFiscale(const CodiceFiscale: string): 
string_; stdcall;
   end;
 
 
   // 
************************************************************************ //
   // Namespace : 
http://webservices.dotnethell.it/CodiceFiscale
 
   // style     : ????
   // use       : ????
   // binding   : CodiceFiscaleHttpPost
   // service   : CodiceFiscale
   // port      : CodiceFiscaleHttpPost
   // 
************************************************************************ //
   CodiceFiscaleHttpPost = interface(IInvokable)
   ['{2D128ECE-FD90-ABF2-1B7A-BD829CB89D68}']
     function  CalcolaCodiceFiscale(const Nome: string; const Cognome: 
string; const ComuneNascita: string; const DataNascita: string; const 
Sesso: string): string_; stdcall;
     function  CodiceComune(const NomeComune: string): string_; stdcall;
     function  NomeComune(const CodiceComune: string): string_; stdcall;
     function  ControllaCodiceFiscale(const CodiceFiscale: string): 
string_; stdcall;
   end;
 
function GetCodiceFiscaleSoap(UseWSDL: Boolean=System.False; Addr: 
string=''; HTTPRIO: THTTPRIO = nil): CodiceFiscaleSoap;
function GetCodiceFiscaleHttpGet(UseWSDL: Boolean=System.False; Addr: 
string=''; HTTPRIO: THTTPRIO = nil): CodiceFiscaleHttpGet;
function GetCodiceFiscaleHttpPost(UseWSDL: Boolean=System.False; Addr: 
string=''; HTTPRIO: THTTPRIO = nil): CodiceFiscaleHttpPost;
 
 
implementation
   uses System.SysUtils;
 
function GetCodiceFiscaleSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: 
THTTPRIO): CodiceFiscaleSoap;
const
   defWSDL = 'C:\Progetti Delphi\Progetti\Progetti Vari 
Test\WSDL\CodiceFiscale.wsdl';

function GetCodiceFiscaleHttpGet(UseWSDL: Boolean; Addr: string; 
HTTPRIO: THTTPRIO): CodiceFiscaleHttpGet;
const
   defWSDL = 'C:\Progetti Delphi\Progetti\Progetti Vari 
Test\WSDL\CodiceFiscale.wsdl';
   defURL  = '';
   defSvc  = 'CodiceFiscale';
   defPrt  = 'CodiceFiscaleHttpGet';
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 CodiceFiscaleHttpGet);
     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;
 
 
function GetCodiceFiscaleHttpPost(UseWSDL: Boolean; Addr: string; 
HTTPRIO: THTTPRIO): CodiceFiscaleHttpPost;
const
   defWSDL = 'C:\Progetti Delphi\Progetti\Progetti Vari 
Test\WSDL\CodiceFiscale.wsdl';
   defURL  = '';
   defSvc  = 'CodiceFiscale';
   defPrt  = 'CodiceFiscaleHttpPost';
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 CodiceFiscaleHttpPost);
     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;
 
 
initialization
   { CodiceFiscaleSoap }
   InvRegistry.RegisterInterface(TypeInfo(CodiceFiscaleSoap), 
'
http://webservices.dotnethell.it/CodiceFiscale
', '');
   InvRegistry.RegisterDefaultSOAPAction(TypeInfo(CodiceFiscaleSoap), 
'
http://webservices.dotnethell.it/CodiceFiscale/%operationName%'
);
   InvRegistry.RegisterInvokeOptions(TypeInfo(CodiceFiscaleSoap), 
ioDocument);
   { CodiceFiscaleSoap.CalcolaCodiceFiscale }
   InvRegistry.RegisterMethodInfo(TypeInfo(CodiceFiscaleSoap), 
'CalcolaCodiceFiscale', '',
 
'[ReturnName="CalcolaCodiceFiscaleResult"]', IS_OPTN);
   { CodiceFiscaleSoap.CodiceComune }
   InvRegistry.RegisterMethodInfo(TypeInfo(CodiceFiscaleSoap), 
'CodiceComune', '',
                                  '[ReturnName="CodiceComuneResult"]', 
IS_OPTN);
   { CodiceFiscaleSoap.NomeComune }
   InvRegistry.RegisterMethodInfo(TypeInfo(CodiceFiscaleSoap), 
'NomeComune', '',
                                  '[ReturnName="NomeComuneResult"]', 
IS_OPTN);
   { CodiceFiscaleSoap.ControllaCodiceFiscale }
   InvRegistry.RegisterMethodInfo(TypeInfo(CodiceFiscaleSoap), 
'ControllaCodiceFiscale', '',
 
'[ReturnName="ControllaCodiceFiscaleResult"]', IS_OPTN);
   { CodiceFiscaleHttpGet }
   InvRegistry.RegisterInterface(TypeInfo(CodiceFiscaleHttpGet), 
'
http://webservices.dotnethell.it/CodiceFiscale
', '');
   InvRegistry.RegisterDefaultSOAPAction(TypeInfo(CodiceFiscaleHttpGet), 
'');
   { CodiceFiscaleHttpPost }
   InvRegistry.RegisterInterface(TypeInfo(CodiceFiscaleHttpPost), 
'
http://webservices.dotnethell.it/CodiceFiscale
', '');
 
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(CodiceFiscaleHttpPost), '');
   RemClassRegistry.RegisterXSInfo(TypeInfo(string_), 
'
http://webservices.dotnethell.it/CodiceFiscale
', 'string_', 'string');
 
end.
 
--- CODICE OFF ---
 
Spero possa risolvere ...
 
Ciao
 
Daniele
 

 il 16° carattere.
 
Credo, sbagliando, che il calcolo del cf sia per motivi di anagrafica 
passiva. Nel senso che e' probabile che questo dato sia necessario per 
chiudere una scheda e che non venga utilizzato da nessuna altra parte.
Per esempio non e' raro che quando si va a fare una spesa o altro possa 
capitare di fare una tessera a punti a nome di un familiare.
Se invece il cf e' usato per l'emissione di documenti fiscali ... allora 
la situazione cambia e la prudenza insegna ad evitare queste soluzioni e 
a farsi consegnare la tesserina sanitaria (che ha il cf).
 
Ciao
 
Daniele
 
 
 

 A parte ciò, l'unica cosa che mi viene in mente è il valore della data di nascita: in che formato la stai passando?
 
La data di nascita la passo come da documentazione ( dd/mm/aaaa ), infatti provando su IE funziona tutto correttamente.
 
Ciao e grazie ancora Alberto.

 il 16° carattere.
 
Quello che gli ho detto io, però mio cognato ( lo strapossino ) si fa dare anche le info sul comune/data di nascita e qui io dovrei calcolare queste info per verificare che il codice fiscale sia congruente.
 
Ciao e grazie 1000 da Enrico Giudici c/o Anthelios.

 Spero possa risolvere ...
 
Spero vivamente anche perchè le funzioni trovate su questo ng sono una diversa dall'altra e non saprei qual'è quella più affidabile.
 
Puoi sempre mandarmi a quel paese ti capisco ma se eventualmente ho dei problemini con il tuo codice posso avere un tuo supporto ?
 
Ciao e grazie 1000 da Enrico Giudici c/o Anthelios.
 

 
 
Verificare che sia congruente ci sta. Io, però, per congruente intendo 
verificare se il codice fiscale corrisponde alle specifiche del codice 
fiscale:
- primi tre caratteri siano quelli che ti aspetti rispetto al valore 
inserito nel campo cognome;
- 456 carattere siano quelli che ti aspetti rispetto al valore inserito 
nel campo nome;
 
Perché, qualche volta si digita "Enrico" nel campo nome ma i 
corrispondenti caratteri (456) immessi nel codice fiscale sono "LGU" che 
sono quelli che ti aspetti per il nome "Luigi". In pratica ho inserito 
l'anagrafica del cliente "Enrico" ma ho messo il codice fiscale del 
cliente "Luigi".
 
Questo tipo di verifica è utile.
 
Ciao.

 Questo tipo di verifica è utile.
 
Infatti tale verifica è già insita nel programma, però mio cognato ( sempre lo strapossino ) vorrebbe un controllo del tipo, gli passano in qualche modo un CF che ha data 22C84 e poi come data 22/04/1984, il CF risulta corretto mentre la data di nascita no, qual'è il valore corretto ?
 
Ciao e grazie da Enrico Giudici c/o Anthelios.

 ma se eventualmente ho dei problemini con il tuo codice posso avere un tuo supporto ?
Non e' il mio codice .... ma quello generato da delphi.
Tra l'altro potrebbe essere UGUALE al tuo ... non l'ho verificato!!
Ho preferito prelevare il file, convertirlo in .pas e fare il test!!
 
Alla prossima
 
Ciao
Daniele
 

 Sono certo che troverai la tua soluzione.
 
Speriamo bene.
 
Ciao e granzie ancora per la tua disponibilità.
 
Giudici Enrico c/o Anthelios

 
 
"22C84" non è corretto perché:
- L'anno di nascita è il 1922=22
- Il mese di nascita è marzo=C
- il giorno=84 è sbagliato!! il valore del giorno va da 1 a 31 per i 
maschi e da 40 a 71 per le femmine: 84 è un valore impossibile.
 
la data di nascita 22/04/1984 nel codice fiscale è "84D22" se maschio 
oppure "84d62" se femmina.
 
Ciao.

 oppure "84d62" se femmina.
 
hai perfettamente ragione, sono io che erroneamente ho invertito i numeri, ma quello che volevo far passare era il concetto.
 
Ciao e grazie ancora per il tuo prezioso supporto.
 
Enrico Giudici c/o Anthelios

Ciao Daniele,
 
purtroppo niente da fare, nonostante i meri sforzi non ci sono riuscito nonostante il tuo codice, ho copiato il tutto, ma il problema l'ho da in fase di compilazione la funzione InvRegistry.RegisterMethodInfo dicendo che è inesistente.
 
Guardando in rete sembra che sia un bug di delphi 7 nell'importare i WSDL, nei
vari post dicono di scaricare da embarcadero la patch ID: 24535, Delphi SOAP Runtime and Importer Update.
 
Purtroppo visto gli anni passati non credo proprio che mio cognato abbia ancora le credenziali per accedere all'account di embarcadero per scaricare la patch 
https://cc.embarcadero.com/Item/24535
 sperando poi che alla fine serva a qualcosa.
 
A questo punto proviamo con una delle funzioni trovate su questo ng, peccato perchè questo WS mi sembrava perfetto per lo scopo.
 
Ciao e grazie ancora per tutto da Enrico Giudici c/o Anthelios.

 
 
Prova a registrarlo nuovamente e se l'account esiste richiedi il reset 
delle credenziali (quest'ultimo l'ho fatto circa un anno e mezzo fa circa).
 
Ciao.
 

 delle credenziali (quest'ultimo l'ho fatto circa un anno e mezzo fa circa).
 
già fatto, mi arriva la mail di reset ma quando clicco sul link mi riporta alla pagina precedente senza la possibilità di inserire la password nuova.
 
A questo punto ci rinuncio, proverò le funzioni trovate su questo ng.
 
Grazie ancora, ciao da Enrico Giudici c/o Anthelios.

Ciao Enrico ...
   l'ho fatto ioi per te ...
Ti sta arrivando...
 
Spero possa apprezzare :-))))
 
Ciao
 
Daniele


Cio Enrico,
   per il file ho bisogno di un indirizzo email valido ....
 
Ciao
Daniele

    per il file ho bisogno di un indirizzo email valido ....
 
intanto non so proprio come ringraziarti e neanche come sdebitarmi, mi sento in imbarazzo per la tua disponibilità e gentilezza.
 
La mia mail ufficiale è 
mionome.m...@gmail.com
 
 
Ciao e grazie ancora Enrico Giudici c/o Anthelios.
 

 Spero possa apprezzare :-))))
 
grazie, grazie, grazie ed infinitesimamente GRAZIE !!!!
 
Dopo aver fatto un pò di tentativi a vuoto ero sfiduciato, nonostante avessi letto attentamente le info su come installare la patch di update a mia insaputa, si ancora adesso non ho capito bene cosa ho fatto, ci sono riuscito.
 
Allora :
 
1) backup dell'utility WSDLImp.exe e dei sorgenti indicati nello zip
2) copiato l'utility WSDLImp.exe aggiornata nella cartella BIN
3) copiati i sorgenti nella cartella Source\Soap
4) generato il .PAS del file WSDL con il comando WSDLImp -p c:\nomeWSDL
 
Ad una prima visione del file .PAS mi sembrava identico a quello non funzionante, invece provandolo ha funzionato perfettamente ed il servizio è molto veloce.
 
Beh cosa dire, Daniele non so come sdebitarmi, se passi da Cesate hai una pizza pagata da mio cognato ( che lo strapossino ).
 
Ciao da Enrico Giudici c/o Anthelios.