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)

vboloradito 29-04-2017 13:19:09

Cita:

Empezado por newtron (Mensaje 516115)
Hola.

Échale un vistazo a este código a ver si te aclara algo:

Código Delphi [-]
    ASuministroLRFacturasRecibidas := BajaLRFacturasRecibidas.Create;
    ASuministroLRFacturasRecibidas.Cabecera := CabeceraSiiBaja.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)

    //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]:=LRBajaRecibidasType.Create;
        ARegistroLRFacturasRecibidas[N].IDFactura:=IDFacturaRecibidaNombreBCType.create;
        ARegistroLRFacturasRecibidas[N].IDFactura.NumSerieFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FACTURA',N+1); // Numero de factura
        ARegistroLRFacturasRecibidas[N].PeriodoImpositivo:=PeriodoImpositivo.Create;
        ARegistroLRFacturasRecibidas[N].PeriodoImpositivo.Ejercicio:=Bd.BuscaValor('DATOSEMPRESA','MEJERCICIO','','');  //  AÑO
        ARegistroLRFacturasRecibidas[N].IDFactura.FechaExpedicionFacturaEmisor:=Grid.ValorCeldaPorCampoYFila('FECHA',N+1);                 // FECHA DE EXPEDICION FACTURA    (dd-mm-yyyy)
        ARegistroLRFacturasRecibidas[N].IDFactura.IDEmisorFactura:= IDEmisorFactura.Create;
        ARegistroLRFacturasRecibidas[N].IDFactura.IDEmisorFactura.NombreRazon := Tabla.FieldByName('NOMBRE').AsString;
        ARegistroLRFacturasRecibidas[N].IDFactura.IDEmisorFactura.NIF  := Tabla.FieldByName('CIF').AsString;

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


Saludos

GRACIAS pero sigo sin ver el error. ¿me podrias pasar el xml final que construye tu codigo?

newtron 29-04-2017 18:51:29

1 Archivos Adjunto(s)
Ok. Ahí lo tienes.

Saludos

CMB 29-04-2017 19:08:11

Responsabilidad civil por bugs
 
Cita:

Empezado por newtron (Mensaje 515954)
Lógicamente al titular del libro que ha cometido la infracción, es decir, a tu cliente. Bueno, esto no es un asunto nuevo y la verdad es que es peliagudo. Normalmente en el contrato que firmas al adquirir una licencia de software hay una coletilla de las que nadie lee (yo la tengo) que dice básicamente que la empresa que ha desarrollado el programa no tendrá responsabilidad por problemas de cualquier tipo con el uso del programa, otra cosa es que eso llevado a juicio decante la cosa para un lado u otro, la verdad es que no lo sé porque nunca he tenido problemas hasta ahora y me temo que ni un abogado sabría darte tajamentemente una respuesta a eso.

Comentado con otro abogado.

Imagina que tienes una citación judicial, y tomas tu coche (que está en garantía). Por el camino tiene una avería y llegas tarde al juicio. Y te sancionan. ¿Puedes exigir que el fabricante del automóvil pague la multa? Pues no, en modo alguno. El fabricante ya reconoce que su producto no es perfecto y se hará cargo de la reparación. Pero no correrá con los demás gastos, pues el conductor muy probablemente tenía otros medios para desplazarse.

Paralelamente, tú vendes una licencia de software advirtiendo (en el contrato) que puede tener errores y estás dispuesto a subsanarlos, y el usuario, aun pudiendo mandar las facturas manualmente por el website de la AEAT, elige usar tu programa y le surgen problemas. Y es sancionado. La única obligación que tienes es reparar esos bugs lo antes posible pero, repito, el usuario tenía otro medio para cumplir con sus obligaciones fiscales. Y si se encuentra al final del plazo y tiene mucha prisa, es como si el conductor de antes hubiera salido justo de tiempo.

Ya entiendo que algunos jueces lo pueden interpretar de otra manera, pero en cualquier caso no está nada claro que la responsabilidad sea del autor del programa.

newtron 29-04-2017 19:14:59

Cita:

Empezado por CMB (Mensaje 516124)
Comentado con otro abogado.

Imagina que tienes una citación judicial, y tomas tu coche (que está en garantía). Por el camino tiene una avería y llegas tarde al juicio. Y te sancionan. ¿Puedes exigir que el fabricante del automóvil pague la multa? Pues no, en modo alguno. El fabricante ya reconoce que su producto no es perfecto y se hará cargo de la reparación. Pero no correrá con los demás gastos, pues el conductor muy probablemente tenía otros medios para desplazarse.

Paralelamente, tú vendes una licencia de software advirtiendo (en el contrato) que puede tener errores y estás dispuesto a subsanarlos, y el usuario, aun pudiendo mandar las facturas manualmente por el website de la AEAT, elige usar tu programa y le surgen problemas. Y es sancionado. La única obligación que tienes es reparar esos bugs lo antes posible pero, repito, el usuario tenía otro medio para cumplir con sus obligaciones fiscales. Y si se encuentra al final del plazo y tiene mucha prisa, es como si el conductor de antes hubiera salido justo de tiempo.

Ya entiendo que algunos jueces lo pueden interpretar de otra manera, pero en cualquier caso no está nada claro que la responsabilidad sea del autor del programa.

Ese argumento tiene su lógica pero lo que yo digo es que no hay nada que tajantemente decante la cosa por un lado o por otro, o sea, imagino que dependerá de lo que pase en un hipotético juicio.

De todas formas mañana saldré a correr con mi abogada, a ver si me acuerdo y le pregunto.

Saludos

CMB 29-04-2017 19:22:50

Cita:

Empezado por newtron (Mensaje 516123)
Ok. Ahí lo tienes.Saludos

Disculpa mi ignorancia pero ese URL tan repetido en tu XML yo diría que no es necesario. He mandado cientos de peticiones y jamás lo he puesto, y han sido todas aceptadas, y en los ejemplos del manual oficial tampoco los ponen. Dificultan la lectura y hacen la transmisión más lenta. ¿Existe alguna poderosa razón para ello? ¿Es obligatorio?

URL citado: xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">

newtron 29-04-2017 19:35:55

Cita:

Empezado por CMB (Mensaje 516128)
Disculpa mi ignorancia pero ese URL tan repetido en tu XML yo diría que no es necesario. He mandado cientos de peticiones y jamás lo he puesto, y han sido todas aceptadas, y en los ejemplos del manual oficial tampoco los ponen. Dificultan la lectura y hacen la transmisión más lenta. ¿Existe alguna poderosa razón para ello? ¿Es obligatorio?

URL citado: xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">

Claro que existe una razón. Yo no creo el XML a pelo así que lo que hago cuando lo necesito es grabar el que genera de forma automática el componente HTTPRIO una vez rellenos los objetos del mismo para poder ojear cómo queda o, como en este caso, si alguien me pide un ejemplo.

Saludos

Edito: Ese url lo mete el componente de forma automática.

newtron 29-04-2017 19:41:08

Por cierto....46.483 visitas... si esto fuera youtube ya casi estaríamos ganando pasta. :D:D:D

CMB 30-04-2017 16:01:50

Cita:

Empezado por newtron (Mensaje 516129)
Ese url lo mete el componente de forma automática.

Pues creo que el HTTPRIO no debería cargar tanto la petición sin ninguna utilidad. Además, provoca que la respuesta venga también así de cargada, con lo que las transmisiones van mucho más lentas. Y si en algún momento hubiera que analizar visualmente esos ficheros el lío puede ser fenomenal (a menos que hagas un search & replace).

Pero cada cual lo hace como puede o como le apetece. Nada que objetar.

Saludos.

newtron 01-05-2017 10:21:26

Cita:

Empezado por CMB (Mensaje 516137)
Pero cada cual lo hace como puede o como le apetece. Nada que objetar.

No me explico o no me entiendes. Yo no preparo el XML y lo envío, yo relleno los objetos de HTTPRIO y luego hago la llamada al webservice. Ese XML lo he capturado cuando se hace la llamada y lo he generado solo para que el colega vboloradito pueda echarle un vistazo con lo cual no entro en si pone esa cadena o no, así es como lo genera. Yo no uso XML y no entro en cómo lo maneja internamente el componente.

Por otro lado he estado comentando el asunto de las posibles responsabilidades judiciales en caso de "cagada" y me comentan que si se puede demostrar que la responsabilidad es del software por su mal funcionamiento si que pueden ir en contra de la empresa desarrolladora. Pero como ya he comentado alguna vez, imagino que en caso de "movida" todo dependerá de la circunstancia particular de cada caso y de como se interprete.

Saludos

CMB 01-05-2017 15:05:43

Cita:

Empezado por newtron (Mensaje 516145)
No me explico o no me entiendes. Yo no preparo el XML y lo envío, yo relleno los objetos de HTTPRIO y luego hago la llamada al webservice. Ese XML lo he capturado cuando se hace la llamada y lo he generado solo para que el colega vboloradito pueda echarle un vistazo con lo cual no entro en si pone esa cadena o no, así es como lo genera. Yo no uso XML y no entro en cómo lo maneja internamente el componente.

newtron, te explicas bien y conozco el procedimiento que usas, que es muy diferente al mío, pues yo construyo el XML línea a línea y a mi gusto con el mismo Delphi, y luego lo mando. Siempre lo he hecho así, con las normas SEPA, con la Factura-e, y con la comprobación censal, y me ha ido muy bien. Lo que no comprendo es por qué motivo HTTPRIO incluye tanta información redundante que no sirve para nada. Pero la respuesta probablemente no me la puedes dar tú, sino los desarrolladores del compilador, y como que no la van a dar, pues lo dejamos correr.

Cita:

Empezado por newtron (Mensaje 516145)
Por otro lado he estado comentando el asunto de las posibles responsabilidades judiciales en caso de "cagada" y me comentan que si se puede demostrar que la responsabilidad es del software por su mal funcionamiento si que pueden ir en contra de la empresa desarrolladora. Pero como ya he comentado alguna vez, imagino que en caso de "movida" todo dependerá de la circunstancia particular de cada caso y de como se interprete.

Muchas gracias. Esperemos no llegar a esa situación.

Saludos,

javi_valencia44 02-05-2017 10:13:35

Cita:

Empezado por vboloradito (Mensaje 516072)
EStoy intentando mandar una baja de factura recibida y me da error (cogi el ejemplo de este foro).

LA he construido de manera similar a la baja de una emitida.

<faultstring>Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: NombreRazon</faultstring>
<detail>
<callstack>El XML no cumple el esquema. Falta informar campo obligatorio.: NombreRazon

lo he comparado con el de baja de emitida y la información es la misma.
¿Teneis algun ejemplo completo que funcione?

Código:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 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">
    <soapenv:Header/>
    <soapenv:Body>
        <siiLR:BajaLRFacturasRecibidas>
            <sii:Cabecera>
                <sii:IDVersionSii>0.6</sii:IDVersionSii>
                <sii:Titular>
                                <sii:NIF>mi nif</sii:NIF>
                    <sii:NombreRazon>mi empresa</sii:NombreRazon>
                </sii:Titular>
            </sii:Cabecera>
            <siiLR:RegistroLRBajaRecibidas>
                <sii:PeriodoImpositivo>
                    <sii:Ejercicio>2017</sii:Ejercicio>
                    <sii:Periodo>03</sii:Periodo>
                </sii:PeriodoImpositivo>
                <siiLR:IDFactura>
                    <sii:IDEmisorFactura>
                        <sii:NIF>A78928371</sii:NIF>
                                                <sii:NombreRazon>BBVA RENTING, S.A.</sii:NombreRazon>
                    </sii:IDEmisorFactura>
                    <sii:NumSerieFacturaEmisor>11/17/052</sii:NumSerieFacturaEmisor>
                    <sii:FechaExpedicionFacturaEmisor>21-02-2017</sii:FechaExpedicionFacturaEmisor>
                </siiLR:IDFactura>
            </siiLR:RegistroLRBajaRecibidas>
        </siiLR:BajaLRFacturasRecibidas>
    </soapenv:Body>
</soapenv:Envelope>


Ya lo has solucionado?

Creo que tienes que cambiar el orden NIF y NombreRazon, pon primero el NombreRazon

PASPAS 02-05-2017 10:44:23

Buen@s...
Una duda alguién tiene un ejemplo de como hacer una factura emitida de este tipo.
// F3 - Factura emitida en sustitución de facturas simplificadas facturadas y declaradas

Muchas gracias...

vboloradito 03-05-2017 11:20:58

Cita:

Empezado por javi_valencia44 (Mensaje 516171)
Ya lo has solucionado?

Creo que tienes que cambiar el orden NIF y NombreRazon, pon primero el NombreRazon

si era eso, cambiar el orden de nif y nombrerazon, lo vi con el ejemplo que me paso newtron, gracias.
lo que no entiendo es porque no me pasaba con el borrado de facturas emitidas, parti de ese ejemplo.
Bueno problema solucionado, gracias

vboloradito 03-05-2017 11:25:54

anticipos
 
¿hay que hacer alguna gestion especial con los anticipos?
En teoria todo anticipo se debe emitir factura con IVA.
Y al final la factura final tiene que tener descontado de la base imponible los anticipos.
De manera que la suma de todos los anticipos y la factura real sume el valor final de la operación.
Hay que reflejar en los anticipos la factura a la que hace referencia, entiendo que no al emitirse antes de la factura.

newtron 03-05-2017 11:36:29

Cita:

Empezado por vboloradito (Mensaje 516204)
¿hay que hacer alguna gestion especial con los anticipos?
En teoria todo anticipo se debe emitir factura con IVA.
Y al final la factura final tiene que tener descontado de la base imponible los anticipos.
De manera que la suma de todos los anticipos y la factura real sume el valor final de la operación.
Hay que reflejar en los anticipos la factura a la que hace referencia, entiendo que no al emitirse antes de la factura.

Yo dudo de que haya que emitir factura de los anticipos.

mrobles 03-05-2017 12:32:56

Ya se que no es un foro de PHP, y ya leí todas las paginas y vi que hay gente que esta trabajando en java y php también, por lo que comento mi duda por si alguien puede solventarla.

Estoy trabajando en PHP (mas en concreto laravel 5.3), e intento conectarme con SOAP al servidor y de primeras al tirar un "__getFunctions" me da las funciones disponibles, pero una vez las tengo las intento llamar y de parámetros solo me acepta un array el cual no se como rellenar para poder enviar el xml (ya intente pasar el xml en formato de array) (al mandar el array vació también da un "Wrong Version").
Si alguien tiene un ejemplo o alguna manera de hacerlo en php me vendría de lujo algún ejemplo.

Gracias de antemano.

vboloradito 03-05-2017 12:54:11

Cita:

Empezado por newtron (Mensaje 516205)
Yo dudo de que haya que emitir factura de los anticipos.

En teoria un anticipo tiene que ir con factura y enviarse a hacienda.

http://www.agenciatributaria.es/AEAT...facturar.shtml

"También deben expedir factura en los supuestos de pagos anticipados, excepto en las entregas intracomunitarias de bienes exentas."

PASPAS 03-05-2017 13:24:54

Cita:

Empezado por newtron (Mensaje 516205)
Yo dudo de que haya que emitir factura de los anticipos.

Esto mismo estabamos debatiendo ahora en desarrollo. Qué hacer?
Supongo que se debe informar con la factura que se reciba del proveedor con valor total a cero. Ya que se ha sido completamente compensada deberia ser informada. Sino que pasa con el proveedor se supone que tendra que informar de esa factura no?
El sistema SII ademas deja informar con importe total 0. Luego si que es verdad que en el modelo 340 no se informaban de los anticipos totalmente compensados.
De momento lo voy a informar consultare con el asesor.
Saludos

Jaketon 03-05-2017 16:16:16

la etiqueta <EstadoRegistro>
 
Buenas, hace poco que encontré este foro y he seguido alguno de vuestros consejos. Más a nivel de consulta dado que mi lenguaje de programación es otro. Quiero aportar mi granito de arena con una respuesta que me parece interesante sobre el estado de los registros tanto en consulta como en altas/bajas/modificaciones. Me lo han remitido de catentidades@correo.aeat.es y como veis incorpora una tabla la L24 que en la version 0.6 en su documentación no existe y que yo utilizo para contrastar la información que poseo en contabilidad con la ya entregada. Espero sea de ayuda.


la etiqueta <EstadoRegistro> (con diferentes namespace) se envia como respuesta en dos operaciones diferentes:
1. Como respuesta al suministro de información (indicando en la respuesta del alta, baja o modificación si se valida correctamente y es registrado en el sistema)
2. Como respuesta a la consulta de facturas.

Envío los estados y lo incluiremos en la próxima versión:

L14 Estado global del envío (Respuesta al suministro)

Correcto -->Todas las facturas de la petición tienen estado “Correcto”.
ParcialmenteCorrecto --> Algunas facturas de la petición tienen estado “Incorrecto”. Ver detalle de errores (L16).
Incorrecto --> Todas las facturas de la petición tienen estado “INCORRECTO”.

L15 Estado del envío de la factura (Respuesta al suministro)
Campo <EstadoRegistro> de la respuesta al suministro de alta, baja, modificación. Especifica si el registro enviado se valida correctamente y es registrado en el sistema

Correcto --> La factura enviada es totalmente correcta y se registra en el sistema
AceptadoConErrores --> La factura enviada tiene algunos errores que no provocan su rechazo y se registra en el sistema. Ver detalle del error (L16).
Incorrecto -->La factura enviada tiene errores que provocan su rechazo. No se registra en el sistema


L24 Estado de la factura registrada (Respuesta a una consulta de registros presentados previamente)
Campo <EstadoRegistro> de la respuesta a una consulta de registros. Especifica el estado del registro en el sistema

Correcta -->La factura registrada es totalmente correcta.
AceptadaConErrores -->La factura registrada tiene algunos errores. Ver detalle del error (L16).
Anulada --> La factura registrada ha sido anulada mediante una operación de baja

vboloradito 03-05-2017 17:02:33

Facturas Recibidas rectificativas
 
En teoria si recibes una factura rectificativa de corrección tienes que hacer referencia a la factura original.
¿Pero que haces si tienes una factura recibida-recitificativa de google que te llega como un abono sin referencia a la factura que rectifica?
¿alguien me puede pasar un xml de factura recibida-rectificativa por diferencia?


La franja horaria es GMT +2. Ahora son las 15:02:51.

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