Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice (https://www.clubdelphi.com/foros/showthread.php?t=91252)

juabero 07-04-2017 12:04:40

Ayuda por Favor
 
Cita:

Empezado por javi_valencia44 (Mensaje 515336)
Yo esta parte no la tengo puesta:

<customBinding>
<binding name="siiBinding">
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport />
</binding>
</customBinding>

Lo he intentado de todas formas.
A ti te funciona, si es asi pasame un ejemplo por favor

javi_valencia44 07-04-2017 12:17:31

Cita:

Empezado por juabero (Mensaje 515337)
Lo he intentado de todas formas.
A ti te funciona, si es asi pasame un ejemplo por favor

Yo lo hago deserializando el XML en un objeto

Por ejemplo para hacer el suministro de una factura emitida:

Ws = New SII.siiSOAPClient
Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
Ws.ClientCredentials.UseIdentityConfiguration = True
facturas = New SuministroLRFacturasEmitidas
ser = New System.Xml.Serialization.XmlSerializer(facturas.GetType())
facturas = CType(ser.Deserialize(reader), SuministroLRFacturasEmitidas)
resul = New SII.RespuestaLRFEmitidasType
resul = Ws.SuministroLRFacturasEmitidas(facturas)

Dim serializer As New XmlSerializer(resul.GetType())
Dim writer As New StreamWriter(rutaXMLdestino)

serializer.Serialize(writer, resul)
writer.Close()

Has probado que tu certificado es correcto?

javi_valencia44 07-04-2017 12:20:46

Cita:

Empezado por Virman (Mensaje 515335)
El objeto a usar es: LRConsultaEmitidasType y te devuelve RespuestaConsultaLRFacturasEmitidasType.
Con respecto a esto, habría alguna forma de convertir el tipo RegistroRespuestaConsultaLRFacturasEmitidas a LRfacturasEmitidasType, es para comprobar si una factura ya existe, emitir esa factura como A1 en tipo de comunicación.

Sólo se me ocurre que crees un objeto del tipo LRfacturasEmitidasType y le pases uno a uno cada dato del otro objeto que ya tienes.

Sobre la consulta de facturas emitidas me sigue dando el mismo error, creo que es por algo que pongo mal en el XML de entrada. Le pongo un formato así:

<ConsultaLRFacturasEmitidas>
<!--Datos de contexto de un suministro sin especificar el timpo de comunicacion-->
<Cabecera xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
<IDVersionSii>[string]</IDVersionSii>
<!--Titular de los libros de registro que suministra la información
Datos de una persona física o jurídica Española con un NIF asociado-->
<Titular>
<NombreRazon>[string]</NombreRazon>
<NIF>[string]</NIF>
</Titular>
</Cabecera>
<FiltroConsulta>
<!--Período al que corresponden los apuntes. todos los apuntes deben corresponder al mismo período impositivo-->
<PeriodoImpositivo xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
<Ejercicio>[string]</Ejercicio>
<Periodo>[string]</Periodo>
</PeriodoImpositivo>
<!--Datos de identificación de factura expedida para operaciones de baja y consulta-->
<!-- Optional -->
<ClavePaginacion>
<IDEmisorFactura xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
<NIF>[string]</NIF>
</IDEmisorFactura>
<!--Número y serie de la Factura del Emisor.-->
<NumSerieFacturaEmisor xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">[string]</NumSerieFacturaEmisor>
<!--Fecha de emisión de la factura-->
<FechaExpedicionFacturaEmisor xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">[string]</FechaExpedicionFacturaEmisor>
</ClavePaginacion>
</FiltroConsulta>
</ConsultaLRFacturasEmitidas>

juabero 07-04-2017 12:28:45

Cita:

Empezado por javi_valencia44 (Mensaje 515338)
Yo lo hago deserializando el XML en un objeto

Por ejemplo para hacer el suministro de una factura emitida:

Ws = New SII.siiSOAPClient
Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
Ws.ClientCredentials.UseIdentityConfiguration = True
facturas = New SuministroLRFacturasEmitidas
ser = New System.Xml.Serialization.XmlSerializer(facturas.GetType())
facturas = CType(ser.Deserialize(reader), SuministroLRFacturasEmitidas)
resul = New SII.RespuestaLRFEmitidasType
resul = Ws.SuministroLRFacturasEmitidas(facturas)

Dim serializer As New XmlSerializer(resul.GetType())
Dim writer As New StreamWriter(rutaXMLdestino)

serializer.Serialize(writer, resul)
writer.Close()

Has probado que tu certificado es correcto?


Parece ser que tu lo estas haciendo con la version 5 y yo con la version 6
la version 6 no tiene "Ws.ClientCredentials.UseIdentityConfiguration = True"

Además he generado el xml y le he puesto a mano en el envelop y lo he mandado por web y funciona

Dime con que visual studio estas desarrollando y la versin de FrameWork

javi_valencia44 07-04-2017 12:44:41

Cita:

Empezado por juabero (Mensaje 515341)
Parece ser que tu lo estas haciendo con la version 5 y yo con la version 6
la version 6 no tiene "Ws.ClientCredentials.UseIdentityConfiguration = True"

Además he generado el xml y le he puesto a mano en el envelop y lo he mandado por web y funciona

Dime con que visual studio estas desarrollando y la versin de FrameWork

Estoy con la versión 6, solo que antes estaba con la 5 y dejé ese código puesto

LoKeD 07-04-2017 13:20:47

Buenos días a todos!
He aquí uno mas liado con el dichoso SII!

Estoy teniendo el mismo problema que algunos a la hora de conectar: Recibo una contestación de tipo text/html...
Tengo cargado el certificado, he probado a poner los app.config como decís pero no hay forma..
Os paso unos trozos del código en cuestión:
Código:

X509Store store = new X509Store("My", StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly);
X509Certificate2 CertificadoCorrecto = new X509Certificate2();
X509Certificate2Collection busqueda = new X509Certificate2Collection();
busqueda = store.Certificates.Find(X509FindType.FindByIssuerName, "FNMT Clase 2 CA", false);
CertificadoCorrecto = busqueda[0];
ConexionFacturas.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto;
ConexionFacturas.ClientCredentials.UseIdentityConfiguration = true;
RespuestaFacturas = ConexionFacturas.SuministroLRFacturasEmitidas(suministroFacturas);
csvRespuesta = RespuestaFacturas.CSV;
ListaRespuestaFacturas = RespuestaFacturas.RespuestaLinea.ToList<FactEmitidas.RespuestaExpedidaType>();

Código:

<binding name="siiBinding8">
  <security mode="Transport">
      <transport clientCredentialType="Certificate" />
  </security>
</binding>

Llevo toda la mañana probando y no hay manera de conectar, a ver si alguno de los que tenemos el error damos con la solución!
Un saludo a todos, y encantado de estar por aquí!

newtron 08-04-2017 11:20:08

Hola de nuevo.

Estoy intentando enviar una factura recibida del tipo "Inversión del sujeto pasivo" y me da el error "Error no: 1144 Los campos IDEmisorfactura y Contraparte de la factura son distintos"

Seguro que es alguna tontería pero no doy con el problema así que he pensado en echar un vistazo al XML pero no sé cómo :o porque no he necesitado hasta ahora verlo. ¿Alguien me puede decir cómo generar el XML después de crear el objeto? ¿Alguien tiene un ejemplo XML de facturas recibidas del tipo "Inversión del sujeto pasivo"?

Gracias

CMB 08-04-2017 11:30:37

Cita:

Empezado por newtron (Mensaje 515389)
Hola de nuevo.
Estoy intentando enviar una factura recibida del tipo "Inversión del sujeto pasivo" y me da el error "Error no: 1144 Los campos IDEmisorfactura y Contraparte de la factura son distintos"
Seguro que es alguna tontería pero no doy con el problema así que he pensado en echar un vistazo al XML pero no sé cómo :o porque no he necesitado hasta ahora verlo. ¿Alguien me puede decir cómo generar el XML después de crear el objeto? ¿Alguien tiene un ejemplo XML de facturas recibidas del tipo "Inversión del sujeto pasivo"?
Gracias

Buenos días newtron

En el documento SII_Descripcion_ServicioWeb_v0.6.pdf, pág. 157, tienes un ejemplo de mensaje con el desglose de la inversión del sujeto pasivo.

Échalo un vistazo.

Saludos,

newtron 08-04-2017 11:54:44

Cita:

Empezado por CMB (Mensaje 515390)
Buenos días newtron

En el documento SII_Descripcion_ServicioWeb_v0.6.pdf, pág. 157, tienes un ejemplo de mensaje con el desglose de la inversión del sujeto pasivo.

Échalo un vistazo.

Saludos,

Gracias CMB, ¿tú sabes cómo genero el XML a partir del objeto creado?

CMB 08-04-2017 12:00:50

Cita:

Empezado por newtron (Mensaje 515391)
Gracias CMB, ¿tú sabes cómo genero el XML a partir del objeto creado?

Es que yo escribo el XML línea a línea mediante Delphi. Nada de funciones externas. Y una vez creado y escrito en disco, lo mando a la AEAT y recojo la respuesta. Sugiero copiar y pegar el ejemplo oficial e intentar su envío (previa substitución de los datos ficticios). En mi modesta opinión, y en contra de la mayoría, creo que es más claro y sencillo.

Saludos,

newtron 08-04-2017 12:07:08

Cita:

Empezado por CMB (Mensaje 515392)
Es que yo escribo el XML línea a línea mediante Delphi. Nada de funciones externas. Y una vez creado y escrito en disco, lo mando a la AEAT y recojo la respuesta. Sugiero copiar y pegar el ejemplo oficial e intentar su envío (previa substitución de los datos ficticios). En mi modesta opinión, y en contra de la mayoría, creo que es más claro y sencillo.

Saludos,

Bueno, todo tiene sus ventajas y sus inconvenientes. Yo la ventaja que le veo al otro sistema es que es más fácil adaptar a los cambios del webservice porque el mismo compilador te va diciendo lo que tienes que cambiar.

Gracias y un saludo

nuevo1234 09-04-2017 11:00:50

Sii
 
Parece que Hacienda ya ha colgado los formularios para dar de alta facturas.

PepCat 10-04-2017 08:55:32

Cita:

Empezado por newtron (Mensaje 515389)
Hola de nuevo.

Estoy intentando enviar una factura recibida del tipo "Inversión del sujeto pasivo" y me da el error "Error no: 1144 Los campos IDEmisorfactura y Contraparte de la factura son distintos"

Seguro que es alguna tontería pero no doy con el problema así que he pensado en echar un vistazo al XML pero no sé cómo :o porque no he necesitado hasta ahora verlo. ¿Alguien me puede decir cómo generar el XML después de crear el objeto? ¿Alguien tiene un ejemplo XML de facturas recibidas del tipo "Inversión del sujeto pasivo"?

Gracias

¿El NIF del IDEmisorfactura y de la Contraparte que envias son iguales?
En las facturas recibidas tienen que ser iguales.

PepCat 10-04-2017 09:01:42

Cita:

Empezado por newtron (Mensaje 515389)
Hola de nuevo.

Estoy intentando enviar una factura recibida del tipo "Inversión del sujeto pasivo" y me da el error "Error no: 1144 Los campos IDEmisorfactura y Contraparte de la factura son distintos"

Seguro que es alguna tontería pero no doy con el problema así que he pensado en echar un vistazo al XML pero no sé cómo :o porque no he necesitado hasta ahora verlo. ¿Alguien me puede decir cómo generar el XML después de crear el objeto? ¿Alguien tiene un ejemplo XML de facturas recibidas del tipo "Inversión del sujeto pasivo"?

Gracias

En el post #87 de este tema hay un ejemplo de como generar el XML.

newtron 10-04-2017 09:07:26

Cita:

Empezado por PepCat (Mensaje 515420)
¿El NIF del IDEmisorfactura y de la Contraparte que envias son iguales?
En las facturas recibidas tienen que ser iguales.

Al final lo he resuelto quitando totalmente todo lo relativo a la "contraparte".

Cita:

Empezado por PepCat (Mensaje 515421)
En el post #87 de este tema hay un ejemplo de como generar el XML.

Maemía... gracias. Mira que he revisado todo el hilo y se me ha pasado por alto ese post. Vamos a tener que preparar un índice. :D:D:D

inyu 10-04-2017 16:31:10

¿Alguien tiene un ejemplo del desglose de una factura recibida? Pensé que no me costaria nada adaptar el de una factura emitida pero tengo problemas creando el desglose de la factura e IVAs, gracias.

PD: Me refiero al código en C, .net, delphi o lo que sea, el XML ya lo tengo claro.

newtron 10-04-2017 16:45:37

Cita:

Empezado por inyu (Mensaje 515433)
¿Alguien tiene un ejemplo del desglose de una factura recibida? Pensé que no me costaria nada adaptar el de una factura emitida pero tengo problemas creando el desglose de la factura e IVAs, gracias.

PD: Me refiero al código en C, .net, delphi o lo que sea, el XML ya lo tengo claro.

Hola.

No tengo ningún ejemplo de facturas recibidas pero te paso mi parte del código que las envía, imagino que te servirá de ejemplo aunque todavía no está cerrado con todos los tipos de facturas y eso.

Código Delphi [-]
  try
    ASuministroLRFacturasRecibidas := SuministroLRFacturasRecibidas.Create;
    ASuministroLRFacturasRecibidas.Cabecera := CabeceraSii.Create;

    // DATOS:
    ASuministroLRFacturasRecibidas.Cabecera.IDVersionSii:=VersionSiiType(0);       // 0.1
    ASuministroLRFacturasRecibidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;
    ASuministroLRFacturasRecibidas.Cabecera.Titular.NombreRazon:=Bd.BuscaValor('DATOSEMPRESA','NOMBRE','  ','');    // NOMBRE DEL PRESENTADOR
    ASuministroLRFacturasRecibidas.Cabecera.Titular.NIF:=Bd.BuscaValor('DATOSEMPRESA','MNIF','','');              // CIF del PRESENTADOR (DEBE COINCIDIR CON EL CERTIFICADO SELECCIONADO)
    // (0) A0 - ALTA
    // (1) A1-  MODIFICACION
    // (2) A4-  MODIFICACION REGIMEN VIAJEROS
    if FormSii.RadioButton1.Checked then begin
      ASuministroLRFacturasRecibidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(0);
    end else if FormSii.RadioButton2.Checked then begin
      ASuministroLRFacturasRecibidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(1);
    end;

    //Se crean todas las estructuras de datos de la consulta
    SetLength(ARegistroLRFacturasRecibidas, M);

    for N := 0 to M do begin
      FormSII.PBProceso.Position := FormSII.PBProceso.Position+1;
      If Grid.ValorCeldaPorCampoYFila('ENVIAR',N+1)='X' then begin
        FormSII.Label5.Caption := 'Factura: '+Grid.ValorCeldaPorCampoYFila('FACTURA',N+1);
        Application.ProcessMessages;
        // Busco registro en tabla de iva
        Tabla.FindKey([Grid.ValorCeldaPorCampoYFila('CODIGO',N+1)]);
        // Busco registro en tabla de cuentas
        TablaCuentas.FindKey([Tabla.FieldByName('CUENTA').AsString]);
        ARegistroLRFacturasRecibidas[N]:=LRfacturasRecibidasType.Create;
        ARegistroLRFacturasRecibidas[N].IDFactura:=IDFacturaRecibidaType.create;
        ARegistroLRFacturasRecibidas[N].FacturaRecibida:=FacturaRecibidaType.create;               // <- clase para tipo de factura
        ARegistroLRFacturasRecibidas[N].PeriodoImpositivo:=PeriodoImpositivo.Create;

        ARegistroLRFacturasRecibidas[N].PeriodoImpositivo.Ejercicio:=Bd.BuscaValor('DATOSEMPRESA','MEJERCICIO','','');  //  AÑO
        // Periodo
        P:=StrToInt(FormatDateTime('MM',StrToDate(Grid.ValorCeldaPorCampoYFila('FECHA',N+1))));
        ARegistroLRFacturasRecibidas[N].PeriodoImpositivo.periodo  :=TipoPeriodoType(P-1);          //  PERIODO 01- ENERO ... 12-DICIEMBRE  (0A - ANUAL )
        ARegistroLRFacturasRecibidas[N].IDFactura.IDEmisorFactura:= IDEmisorFactura4.Create;
        ARegistroLRFacturasRecibidas[N].IDFactura.IDEmisorFactura.NIF  := Tabla.FieldByName('CIF').AsString;                         // NUESTRO NIF, COMO EMISOR = TITULAR LIBRO REGISTRO = CERTIFICADO DIGITAL
        if FormSII.CheckBox1.Checked then
          ARegistroLRFacturasRecibidas[N].IDFactura.NumSerieFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FACTURA',N+1)+'/'+FormatDateTime('YYYYMMDDHHMMSS'+IntToStr(N),now)
        else
          ARegistroLRFacturasRecibidas[N].IDFactura.NumSerieFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FACTURA',N+1); // Numero de factura

        ARegistroLRFacturasRecibidas[N].IDFactura.FechaExpedicionFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FECHA',N+1);                 // FECHA DE EXPEDICION FACTURA    (dd-mm-yyyy)
        if Tabla.FieldByName('TOTAL').AsCurrency<0 then begin
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.tipofactura:=ClaveTipoFacturaType(2);      //  RECTIFICATIVA
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.TipoRectificativa := ClaveTipoRectificativaType(1);
        end else begin
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.tipofactura:=ClaveTipoFacturaType(0);      //  F1- FACTURA / F2 TICKET / ...
        end;

        ARegistroLRFacturasRecibidas[N].FacturaRecibida.FechaRegContable := Tabla.FieldByName('FECHAE').AsString;
        cAux:=Tabla.FieldByName('BASE1').AsCurrency+Tabla.FieldByName('BASE2').AsCurrency+Tabla.FieldByName(  'BASE3').AsCurrency;
        sAux:=CurrToStr(cAux);
        AregistroLRFacturasRecibidas[N].FacturaRecibida.CuotaDeducible := StrTran(sAux,',','.');

        if Tabla.FieldByName('TIPOSII').AsString<>'' then begin
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.ClaveRegimenEspecialOTrascendencia:=IdOperacionesTrascendenciaTributariaType(Tabla.  FieldByName('TIPOSII').AsInteger-1);  // 01-REGIMEN COMUN / 02-BIENES USADOS... 15-EXPORTACION
        end else begin
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.ClaveRegimenEspecialOTrascendencia:=IdOperacionesTrascendenciaTributariaType(0);  // 01-REGIMEN COMUN / 02-BIENES USADOS... 15-EXPORTACION
        end;

        ARegistroLRFacturasRecibidas[N].FacturaRecibida.ImporteTotal:=StrTran(Tabla.FieldByName('TOTAL').AsString,',','.');                       //  TOTAL (opcional)
        ARegistroLRFacturasRecibidas[N].FacturaRecibida.descripcionOperacion:='Su Factura';   //  DESCRIPCION FACTURA (LIBRE)

        ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte:=PersonaFisicaJuridicaType.Create;  // CREAR PROVEEDOR:
        ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NombreRazon:=Tabla.FieldByName('NOMBRE').AsString;           // NOMBRE DEL PROVEEDOR

        try
          iAux:=Tabla.FieldByName('TIPOSII').AsInteger;
        except
          iAux:=1;
        end;


        if (Tabla.FieldByName('TIPO').AsString='9') or (Tabla.FieldByName('TIPO').AsString='7') or (Tabla.FieldByName('TIPO').AsString='A') then begin
          If Tabla.FieldByName('TIPO').AsString='7' then begin   // Inversion Sujeto pasivo
            ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NIF:=Tabla.FieldByName('CIF').AsString;                      // NIF DEL PROVEEDOR
          end;
        end else begin
          // CONTRAPARTE:
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NIFRepresentante:='';
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.Contraparte.NIF:=Tabla.FieldByName('CIF').AsString;                      // NIF DEL PROVEEDOR
        end;
       // EMPEZAMOS CON LOS DESGLOSES (IVAs)
        if (Tabla.FieldByName('IVA1').AsCurrency<>0) and (Tabla.FieldByName('IVA2').AsCurrency<>0) and (Tabla.FieldByName('IVA3').AsCurrency<>0) then begin
          nIvas:=3;
        end else if (Tabla.FieldByName('IVA1').AsCurrency<>0) and (Tabla.FieldByName('IVA2').AsCurrency<>0) then begin
          nIvas:=2;
        end else if (Tabla.FieldByName('IVA1').AsCurrency<>0) then begin
          nIvas:=1;
        end else begin
          nIvas:=0;
        end;
        if nIvas>0 then begin
          setLength(IVAS,nIvas);                       // numeros de iVAs en factura
          Z:=0;
          for zz := 0 to nIvas-1 do begin
            if Tabla.FieldByName('IVA'+IntToStr(ZZ+1)).AsCurrency<>0 then begin
              IVAS[zz]:=DetalleIVARecibidaType.create;             // CREAR primer IVA
              IVAS[zz].BaseImponible:=StrTran(Tabla.FieldByName('BASE'+IntToStr(ZZ+1)).AsString,',','.');            // BASE IMPONIBLE
              IVAS[zz].TipoImpositivo:=StrTran(Tabla.FieldByName('TIVA'+IntToStr(ZZ+1)).AsString,',','.');            // IVA %
              IVAS[zz].CuotaSoportada:=StrTran(Tabla.FieldByName('IVA'+IntToStr(ZZ+1)).AsString,',','.');          // IMPORTE IVA
            end;
          end;
        end;

        //   opcion 1
        if nIvas>0 then begin
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.desgloseFactura:=DesgloseFacturaRecibidasType.create;
          ARegistroLRFacturasRecibidas[N].FacturaRecibida.desglosefactura.desgloseIVA:=IVAS;
        end else begin

          if (Tabla.FieldByName('TIPO').AsString='7') then begin
            setLength(IVAS,1);                       // numeros de iVAs en factura
            IVAS[0]:=DetalleIVARecibidaType.create;             // CREAR primer IVA
            IVAS[0].BaseImponible:='0';
            IVAS[0].TipoImpositivo:='0';
            IVAS[0].CuotaSoportada:='0';
            ARegistroLRFacturasRecibidas[N].FacturaRecibida.DesgloseFactura :=DesgloseFacturaRecibidasType.create;
            ARegistroLRFacturasRecibidas[N].FacturaRecibida.DesgloseFactura.DesgloseIVA := IVAS;
          end else if (Tabla.FieldByName('TIPO').AsString='9') then begin

          end else if (Tabla.FieldByName('TIPO').AsString='7') or (Tabla.FieldByName('TIPO').AsString='A') then begin

          end else begin
          end;

        end;
      end;
    end;
    //se añade el array de facturas creado anteriormente
    ASuministroLRFacturasRecibidas.RegistroLRFacturasRecibidas:=ARegistroLRFacturasRecibidas;

   try

      FormSII.Label5.Caption := 'Enviando paquete de datos....';
      Application.ProcessMessages;
      // se hace la llamada a la funcion suministrada por el WS
      result := GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasRecibidas(ASuministroLRFacturasRecibidas);

      //mostrar los resultados devueltos por la llamada
      for i := low(result.RespuestaLinea) to High(result.RespuestaLinea) do begin
        with result.RespuestaLinea[i] do begin
//          sAux:='factura: ' + IDFactura.NumSerieFacturaEmisor + ' ' + IDFactura.NumSerieFacturaEmisorResumenFin + ' ' + IDFactura.FechaExpedicionFacturaEmisor;
          sAux:='Ok. Factura: '+IDFactura.NumSerieFacturaEmisor +' '+DateTimeToStr(now);
          //si el estado no es correcto, se muestran los errores
          if EstadoRegistro <> EstadoRegistroType(0) then begin
            sAux:='Error no.: ' + InttoStr(CodigoErrorRegistro);
            sAux:=sAux+' '+DescripcionErrorRegistro;
          end;
        end;
        Grid.ValorCeldaPorCampoYFila('RESULTADO',i+1, sAux);
        // Marco tabla y grid principal
        Tabla.FindKey([Grid.ValorCeldaPorCampoYFila('CODIGO',i+1)]);
        Bd.RegistroEdita(Tabla);
        // Resultados:
        if result.RespuestaLinea[i].EstadoRegistro=EstadoRegistroType(0) then begin
          Grid.ValorCeldaPorCampoYFila('RESULTII',i+1, '0');
          Tabla.FieldByName('RESULTII').AsString:='0';
        end else if result.RespuestaLinea[i].EstadoRegistro=EstadoRegistroType(2) then begin
          Grid.ValorCeldaPorCampoYFila('RESULTII',i+1, '1');
          if Tabla.FieldByName('RESULTII').AsString<>'2' then
            Tabla.FieldByName('RESULTII').AsString:='1';
        end else if result.RespuestaLinea[i].EstadoRegistro=EstadoRegistroType(1) then begin
          Grid.ValorCeldaPorCampoYFila('RESULTII',i+1, '2');
          Tabla.FieldByName('RESULTII').AsString:='2';
        end;
        Tabla.FieldByName('CSVII').AsString:=Result.csv;
        Tabla.FieldByName('RESULTADO').AsString:=sAux;
        Bd.RegistroGraba(Tabla);
      end;
    except
      On E:Exception do
        //El proceso de envio dio error
        MessageDlg(E.Message, mtError, [mbOK], 0);
    end;
  finally
    // se eliminan los objetos creados
    ASuministroLRFacturasRecibidas.Free;
    result.Free;
  end;

Saludos

inyu 10-04-2017 16:53:21

Gracias [newtron] pero las emitidas ya las tengo funcionando. Tengo problemas declarando el Detalle y Desglose de las facturas recibidas, y no doy en cómo adaptar esa parte de las emitidas porque no existe el "DesgloseFacturasRecibidas".

newtron 10-04-2017 16:55:26

Cita:

Empezado por inyu (Mensaje 515435)
Gracias [newtron] pero las emitidas ya las tengo funcionando. Tengo problemas declarando el Detalle y Desglose de las facturas recibidas, y no doy en cómo adaptar esa parte de las emitidas porque no existe el "DesgloseFacturasRecibidas".

¿Y qué te he enviado?

inyu 10-04-2017 17:01:18

Cita:

Empezado por newtron (Mensaje 515436)
¿Y qué te he enviado?

Perdona, intepreté mal tu frase "No tengo ningún ejemplo de facturas recibidas pero te paso mi parte del código que las envía", deduje que te referias a que no tenias recibidas y sólo tenias enviadas, y no era eso ><

Ya lo he logrado, gracias por el ejemplo! Tenia un lio mental con la declaración del array de IVAs, no lo estaba haciendo bien.

inyu 10-04-2017 17:33:34

Bueno ahora me devuelve un error estándar el WS con un mensaje "AEAT Errores técnicos" sin especificar qué está mal pero supongo que ya daré con ello :o

Edit: Ya está, se me olvidó añadir el "<transport clientCredentialType="Certificate" />" en el Config para el WS de facturas recibidas, sólo lo tenia en el de emitidas.

Virman 11-04-2017 08:06:14

Factura a varios destinatarios
 
Saludos comunidad! Alguien sabría decirme cómo puede venir diseñado un XML con varios destinatarios, sólo hay que modificar el campo varios destinatarios a "S"? No hay que indicar nada más?

Muchas gracias.

newtron 11-04-2017 09:39:19

Cita:

Empezado por Virman (Mensaje 515452)
Saludos comunidad! Alguien sabría decirme cómo puede venir diseñado un XML con varios destinatarios, sólo hay que modificar el campo varios destinatarios a "S"? No hay que indicar nada más?

Muchas gracias.

¿Qué es eso de varios destinatarios?

Virman 11-04-2017 10:02:08

Cita:

Empezado por newtron (Mensaje 515453)
¿Qué es eso de varios destinatarios?

Es un campo que aparece en datos de contraparte, al menos para facturas emitidas. En el formulario de alta de facturas emitidas de la página de la AEAT, aunque marques como SI este campo, no aparece nada nuevo, por lo que entiendo que sólo es informativo, y se debe poner la información de contraparte de una sóla persona.

Si alguien tiene más info, se agradece.

nuevo1234 11-04-2017 15:01:42

La FAQ 3.15 habla del tema de varios destinatarios. Se marca ese campo y se identifica uno de ellos.Solo existe en emitidas.

elguille 12-04-2017 09:31:05

Cita:

Empezado por keys (Mensaje 514865)
Hola a Todos. Ahora voy yo con una duda o problema por si le ha pasado a alguien.

Estomos desarrollando en delphi y a al hora de presentar mostramos todos los certificados disponibles en el equipo. En el equipo teníamos tres certificados, los cuales nos salian a la hora de obtenerlos. Uno de ellos estaba caducado y lo eliminamos del sistema, es decir ahora solo hay dos. Pero a la hora de obtener en delphi cuantos certificados hay me siguen saliendo tres, los dos que me quedan y uno en blanco.

A alguien le ha pasado esto o sabe por que es. La lista de certificados la estamos obteniendo de la siguiente forma.

Código Delphi [-]
   

function ObtenerCertificados(aList:TStringList):integer;
var
  hStore: HCERTSTORE;
  PrevContext, CurContext: PCERT_CONTEXT;
  cbSize: DWORD;
  sNombre: String;
begin
  aList.Clear;
  Result := 0;
  hStore := CertOpenSystemStore(0, PChar('MY'));
  if hStore <> nil then begin
     PrevContext := nil;
     CurContext := CertEnumCertificatesInStore(hStore, PrevContext);
     while CurContext <> nil do begin
       sNombre := '';
       cbSize := CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, nil, 0);
       if cbSize > 0 then
       begin
          SetLength(sNombre, cbSize-1);
          CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, PChar(sNombre), cbSize);
          aList.Add(sNombre);
       end;
       PrevContext := CurContext;
       CurContext  := CertEnumCertificatesInStore(hStore, PrevContext);
     end;
  end;
  result:=aList.count;
end;

Un Saludo.

Para eliminar del sistema certificados caducados
-Pincha en Inicio/Ejecutar.
-Escribe: mmc y pulse "Aceptar".
-En la consola pulse en el menú Archivo o Consola (depende del sistema operativo). Selecciona "agregar o quitar complemento".
-En la ventana que aparece pulsa el botón "Agregar". Pinche en "certificados".
Agregar.
-Selecciona "Mi cuenta de usuario" en caso de no estar marcada, ya que suele estar marcada por defecto.
-Finalizar.
-Pulsa "cerrar" en la ventana que tiene delante y "aceptar" en la que aparecerá a continuación. Volverá a la ventana de Raíz de Consola.
-Podrás comprobar que ahora en la parte izquierda de la ventana tienes una nueva opción que se llama "Certificados" y que se puede desplegar.
-Despliega la carpeta "Certificados" y entre en la que dice "Personal". En la parte derecha aparecerán tantos certificados como tenga instalados en el navegador, incluidos los que no vea o tenga caducados.
-Pulsa encima del que desee eliminar con el botón derecho del ratón y selecciona "Eliminar".

elguille 12-04-2017 10:54:15

Cita:

Empezado por keys (Mensaje 515268)
Hola A todos. Subo otra vez el ejemplo para poder enviar una factura emitida con la version 6 que es la que está operativa ahora mismo.

Me lo ha pedido alguno y si alguien tiene que empezar ahora es mejor que usen este ejemplo que los anteriores están desfasados.

Un Saludo

Hola he descargado el ejemplo y compilado con DELPHI XE2 sin hacer ninguna modificación, al enviar una factura de prueba con un certificado válido (puedo hacer consultas con el en hacienda) recibo el error "se requiere un certificado para completar la autentificacion del cliente". ¿el error puede ser por la versión de Delphi ? ¿en que versión funciona?

Gracias

newtron 12-04-2017 11:03:22

Cita:

Empezado por elguille (Mensaje 515482)
Hola he descargado el ejemplo y compilado con DELPHI XE2 sin hacer ninguna modificación, al enviar una factura de prueba con un certificado válido (puedo hacer consultas con el en hacienda) recibo el error "se requiere un certificado para completar la autentificacion del cliente". ¿el error puede ser por la versión de Delphi ? ¿en que versión funciona?

Gracias

Aquí creo que todos (los de Delphi) estamos usando la versión Berlin.

Saludos

vboloradito 12-04-2017 11:40:37

PAGOS criterio de CAJA
 
Hola:


Segun el documento de preguntas frecuentes , punto 8.1 , si un proveedor esta acogido al Criterio de CAJA (Que no paga el iva hasta que cobra la factura) , hay que envair la factura y el pago,)

el punto dice: " Para dar de alta una factura remitida por un proveedor que aplica el RECC, primero se dará de alta la factura A0 en el Libro de facturas recibidas y posteriormente se enviará otra petición con el suministro de pagos."

¿vosotros estais contemplando esto, saber si el proveedor esta acogido al criterio de caja para enviar el pago a la AEAT.?

newtron 12-04-2017 11:48:51

Cita:

Empezado por vboloradito (Mensaje 515485)
Hola:


Segun el documento de preguntas frecuentes , punto 8.1 , si un proveedor esta acogido al Criterio de CAJA (Que no paga el iva hasta que cobra la factura) , hay que envair la factura y el pago,)

el punto dice: " Para dar de alta una factura remitida por un proveedor que aplica el RECC, primero se dará de alta la factura A0 en el Libro de facturas recibidas y posteriormente se enviará otra petición con el suministro de pagos."

¿vosotros estais contemplando esto, saber si el proveedor esta acogido al criterio de caja para enviar el pago a la AEAT.?

:eek::eek::eek: Pues la verdad es que no me había percatado de ese detalle pero si lo dice habrá que resolverlo.

RafaSerMed 12-04-2017 16:31:39

El NIF no está identificado
 
Hola a todos.

A alguien le da recientemente el error 1117: EL Nif no está identificado......

Solo me ocurre en las facturas emitidas, cuando el cliente es un NIF y no un CIF

elguille 12-04-2017 16:57:47

Cita:

Empezado por newtron (Mensaje 515483)
Aquí creo que todos (los de Delphi) estamos usando la versión Berlin.

Saludos

Efectivamente con Berlin va perfectamente. Gracias

newtron 12-04-2017 17:59:18

Cita:

Empezado por RafaSerMed (Mensaje 515498)
Hola a todos.

A alguien le da recientemente el error 1117: EL Nif no está identificado......

Solo me ocurre en las facturas emitidas, cuando el cliente es un NIF y no un CIF

Acabo de probar con un NIF y no me ha dado problemas, eso me suena a que en el momento que tú hicieras la prueba el servidor de la AEAT no estuviera fino, prueba de nuevo a ver.

Nasca 12-04-2017 18:21:12

Cita:

Empezado por newtron (Mensaje 515502)
Acabo de probar con un NIF y no me ha dado problemas, eso me suena a que en el momento que tú hicieras la prueba el servidor de la AEAT no estuviera fino, prueba de nuevo a ver.

Revisa que el nombre asociado al NIF es correcto. Se verifica en el censo correspondencia Nombre asociado a NIF.

PASPAS 12-04-2017 19:55:11

Cita:

Empezado por elguille (Mensaje 515499)
Efectivamente con Berlin va perfectamente. Gracias

Yo lo estoy haciendo con delphi 7 y por ahora todo perfecto.

newtron 12-04-2017 19:58:48

Cita:

Empezado por PASPAS (Mensaje 515516)
Yo lo estoy haciendo con delphi 7 y por ahora todo perfecto.

¿Y con delphi 7 no tienes problema con el tema de los certificados?

PASPAS 12-04-2017 20:00:28

Cita:

Empezado por Nasca (Mensaje 515507)
Revisa que el nombre asociado al NIF es correcto. Se verifica en el censo correspondencia Nombre asociado a NIF.

Es correcto la Aeat comprueba en el censo el nif y nombre.
Lo que hay es un sitio para comprobarlo a pelo.
Lo que creo que haria falta es pedirles a la Aeat que habiliten un sevicio wdsl para comprobar estos datos. Porque sino nuestros clientes se mosquearan al tener que rectificar estos datos por cada petecion al Siisi Si alguien sabe una peticion para validar el dato que lo ponga en el foro.
Gracias y que paseis buenas pascuas....

PASPAS 12-04-2017 20:05:21

Cita:

Empezado por newtron (Mensaje 515517)
¿Y con delphi 7 no tienes problema con el tema de los certificados?

No ningun problema por ahora solo cuando cambiaron a la version 0.6 tuve que ajustar los params de Eldos y ya esta por ahora va todo ok. Ademas funciona rapido....
delphi 7
Eldos
Nativexml
Con estos componentes funciona ok

Nasca 12-04-2017 23:31:41

Cita:

Empezado por PASPAS (Mensaje 515518)
Es correcto la Aeat comprueba en el censo el nif y nombre.
Lo que hay es un sitio para comprobarlo a pelo.
Lo que creo que haria falta es pedirles a la Aeat que habiliten un sevicio wdsl para comprobar estos datos. Porque sino nuestros clientes se mosquearan al tener que rectificar estos datos por cada petecion al Siisi Si alguien sabe una peticion para validar el dato que lo ponga en el foro.
Gracias y que paseis buenas pascuas....

Ya existe un webservice habilitado para ese tema.
En el portal del SII hay enlaces al tema.

PASPAS 13-04-2017 08:39:29

Cita:

Empezado por Nasca (Mensaje 515526)
Ya existe un webservice habilitado para ese tema.
En el portal del SII hay enlaces al tema.

Muchas gracias
Ahora lo he visto esta todo en:
http://www.agenciatributaria.es/stat...ificativos.pdf

Saludos


La franja horaria es GMT +2. Ahora son las 18:39:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi