Ver Mensaje Individual
  #2403  
Antiguo 31-08-2017
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 19
Reputación: 0
razorxxx Va por buen camino
Cita:
Empezado por razorxxx Ver Mensaje
Muy buenas!
Estoy tratando de generar desde Delphi un archivo XML de tipo Libro Cobros Emitidas. Utilizando el XML Data Binding generé la unit necesaria desde SuministroLR.xsd
El caso es que en una parte del código me lanza el error EIntfCastError: "interface not supported", pero no veo el fallo. Mi código es el siguiente (los datos fiscales son ficticios):

Código Delphi [-]
var
   Libro: SuministroLR.IXMLSuministroLRCobrosEmitidas;
   Cobro: SuministroLR.IXMLDatosPagoCobroType_sii;
   Document: IXMLDocument;
   FichEntrada: TextFile;
   NumSerieFacturaAnterior: String;
   Linea: WideString;
   I, J: Integer;
begin
     // Creamos documento XML en blanco, sólo con los namespaces necesarios
     try
        Document := TXMLDocument.Create(nil);
        Document.ParseOptions := [poResolveExternals, poValidateOnParse];
        Document.Options := Document.Options + [doNodeAutoIndent];
        Document.NodeIndentStr := '    ';
        Document.XML.Text := ' +
                             'xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">';
        Document.Active := True;
     except
           SWERROR := 1;
           EXIT;
     end;
     try
        Libro := GetSuministroLRCobrosEmitidas(Document);
        Libro.AddChild('sii:Cabecera');
        Libro.Cabecera.IDVersionSii := VERSION_SII;
        Libro.Cabecera.AddChild('sii:Titular');
        Libro.Cabecera.Titular.NombreRazon := 'Prueba'
        Libro.Cabecera.Titular.NIF := 'A12345678';
        Libro.AddChild('siiLR:RegistroLRCobros');
        Libro.RegistroLRCobros[i].AddChild('siiLR:IDFactura');
        Libro.RegistroLRCobros[i].IDFactura.AddChild('sii:IDEmisorFactura');
        Libro.RegistroLRCobros[i].IDFactura.IDEmisorFactura.NIF := 'A12345678';
        Libro.RegistroLRCobros[i].IDFactura.NumSerieFacturaEmisor := '170001';
        Libro.RegistroLRCobros[i].IDFactura.FechaExpedicionFacturaEmisor := '20-08-2017';
        Libro.RegistroLRCobros[i].AddChild('siiLR:Cobros');
        Cobro := Libro.RegistroLRCobros[i].Cobros.Add;   // Aquí es donde me tira el error!

Si muestro el XML mediante ShowMessage(Libro.XML) me va mostrando el árbol correctamente:

Código:
<siiLR:SuministroLRCobrosEmitidas xmlns:siiLR="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd" xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
    <sii:Cabecera>
        <sii:IDVersionSii>1.0</sii:IDVersionSii>
        <sii:Titular>
            <sii:NombreRazon>Prueba</sii:NombreRazon>
            <sii:NIF>A12345678</sii:NIF>
        </sii:Titular>
    </sii:Cabecera>
    <siiLR:RegistroLRCobros>
        <siiLR:IDFactura>
            <sii:IDEmisorFactura>
                <sii:NIF>A12345678</sii:NIF>
            </sii:IDEmisorFactura>
            <sii:NumSerieFacturaEmisor>170001</sii:NumSerieFacturaEmisor>
            <sii:FechaExpedicionFacturaEmisor>20-08-2017</sii:FechaExpedicionFacturaEmisor>
        </siiLR:IDFactura>
        <siiLR:Cobros/>
    </siiLR:RegistroLRCobros>
</siiLR:SuministroLRCobrosEmitidas>
¿A alguien se le ocurre dónde puede estar fallando? Gracias de antemano.
Me respondo a mi mismo. Al final he conseguido hacer un apaño tratando el nodo como IXMLNode y no como IXMLDatosPagoCobroType_sii. Entonces ya podemos trabajar con las funciones AddChild y ChildNodes. Por ejemplo:

Cobro := Libro.RegistroLRCobros[i].Cobros.AddChild('sii:Cobro');
Cobro.AddChild('sii:Fecha');
Cobro.ChildNodes['Fecha'].NodeValue := '20-08-2017';
Cobro.AddChild('sii:Importe');
Cobro.ChildNodes['Importe'].NodeValue := '1500.00';
Cobro.AddChild('sii:Medio');
Cobro.ChildNodes['Medio'].NodeValue := '01';

No sé si será porque el .xsd está mal definido o qué, pero al menos ya funciona!
Responder Con Cita