![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Cita:
|
|
#2
|
||||
|
||||
|
Este es mi código para consultar facturas emitidas, colocando sus resultados en una base de datos.
Código:
// memoErrores.lines.Clear;
if dbRespuesta.active then dbRespuesta.Active:=false;
dbRespuesta.FieldDefs.Clear;
dbRespuesta.FieldDefs.Add('numero',ftstring,30,false);
dbRespuesta.FieldDefs.Add('fecha',ftDate,0,false);
dbRespuesta.FieldDefs.Add('cliente',ftstring,100,false);
dbRespuesta.FieldDefs.Add('nif',ftstring,50,false);
dbRespuesta.FieldDefs.Add('tipo',ftstring,5,false);
dbRespuesta.FieldDefs.Add('exenta',ftstring,5,false);
dbRespuesta.FieldDefs.Add('tipostr',ftstring,50,false);
dbRespuesta.FieldDefs.Add('regimen',ftstring,5,false);
dbRespuesta.FieldDefs.Add('operacion',ftstring,200,false);
dbRespuesta.FieldDefs.Add('terceros',ftstring,5,false);
dbRespuesta.FieldDefs.Add('total',ftfloat,0,false);
dbRespuesta.FieldDefs.Add('cobros',ftstring,5,false);
dbRespuesta.FieldDefs.Add('noexenta',ftstring,5,false);
dbRespuesta.FieldDefs.Add('estado',ftstring,100,false);
dbRespuesta.FieldDefs.Add('descripcio',ftstring,300,false);
for h := 0 to 6 do
begin
dbRespuesta.FieldDefs.Add('iva'+inttostr(h),ftFloat,0,false);
dbRespuesta.FieldDefs.Add('impiva'+inttostr(h),ftFloat,0,false);
dbRespuesta.FieldDefs.Add('baseimp'+inttostr(h),ftFloat,0,false);
end;
dbRespuesta.CreateTable;
dbRespuesta.Active:=true;
//***CSY
CERTIFICADO := BUSCAR_CERTIFICADO(comboBox1.text); //<----- SELECCIONAR CERTIFICADO
if(CERTIFICADO = nil) then begin
ShowMessage('No encuento el certificado');
Exit();
end;
emitidas.HTTPWebNode.ClientCertificate.SerialNum := Buscar_Certificado_SERIAL(comboBox1.text);
//****
try
/////////////////////////////////////////////////////////////////////////////
//// PRESENTADOR OSEA -> NOSOTROS //////////////////////////////////////
// se crea el objeto que se va a enviar:
/////////////////////////////////////////////////////////////////////////////
aConsultaLRFacturasEmitidas := ConsultaLRFacturasEmitidas.Create;
aConsultaLRFacturasEmitidas.Cabecera:=CabeceraConsultaSii.Create;
// DATOS:
aConsultaLRFacturasEmitidas.Cabecera.IDVersionSii:=VersionSiiType(0); // 0.1
aConsultaLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaUnicaESType.Create;
aConsultaLRFacturasEmitidas.Cabecera.Titular.NombreRazon:=_PRESENTADOR; // NOMBRE DEL PRESENTADOR (CUALQUIERA VALE)
aConsultaLRFacturasEmitidas.Cabecera.Titular.NIF:=_NIF_EMISOR; // CIF del PRESENTADOR (DEBE COINCIDIR CON EL CERTIFICADO SELECCIONADO)
aConsultaLRFacturasEmitidas.FiltroConsulta:=LRFiltroEmitidasType.Create;
aConsultaLRFacturasEmitidas.FiltroConsulta.PeriodoImpositivo:=PeriodoImpositivo.Create;
aConsultaLRFacturasEmitidas.FiltroConsulta.PeriodoImpositivo.Ejercicio:=edit2.text;
aConsultaLRFacturasEmitidas.FiltroConsulta.PeriodoImpositivo.Periodo:=TipoPeriodoType( comboBox2.itemIndex );
try
// se hace la llamada a la funcion suministrada por el WS
result := GetsiiSOAP(true,'',emitidas).ConsultaLRFacturasEmitidas(aConsultaLRFacturasEmitidas);
memoComs.Lines.Add( getEnumName(typeInfo(ResultadoConsultaType), ord(result.resultadoConsulta) ) );
//mostrar los resultados devueltos por la llamada
for i := low(result.RegistroRespuestaConsultaLRFacturasEmitidas) to High(result.RegistroRespuestaConsultaLRFacturasEmitidas) do
begin
_noexenta:='';
_numero:='';
_fechaStr:='';
_tipo:='';
_tipoStr:='';
_regimen:='';
_operacion:='';
_exenta:='';
_terceros:='';
_cliente:='';
_nif:='';
_tipodesglose:='';
_cobros:='';
_estado:='';
_estadoFactura:='';
_ImporteTotal:=0;
_descripcion:='';
with result.RegistroRespuestaConsultaLRFacturasEmitidas[i] do
begin
try
if result.RegistroRespuestaConsultaLRFacturasEmitidas[i].datosfacturaemitida.tipodesglose.desglosetipooperacion<>nil then
_exenta:=GetEnumName( TypeInfo(CausaExencionType),ord(DatosFacturaEmitida.TipoDesglose.DesgloseTipoOperacion.Entrega.Sujeta.exenta.CausaExencion));
except
end;
_tipo:=GetEnumName(TypeInfo(clavetipoFacturaType), Ord(DatosFacturaEmitida.TipoFactura));
_tipoSTR:=tipoSTR( DatosFacturaEmitida.TipoFactura );
_regimen:=GetEnumName( TypeInfo(IdOperacionesTrascendenciaTributariaType), Ord(DatosFacturaEmitida.ClaveRegimenEspecialOTrascendencia) );
_ImporteTotal:=strToFloat( SII_Numero( DatosFacturaEmitida.ImporteTotal ) );
_operacion:=DatosFacturaEmitida.DescripcionOperacion;
_terceros:=GetEnumName(typeInfo( EmitidaPorTercerosType ), ord( DatosFacturaEmitida.EmitidaPorTerceros ) );
_numero:=IDFactura.NumSerieFacturaEmisor;
try
if DatosFacturaEmitida.contraparte<>nil then // POR SI NO LLEVA CONTRAPARTE:
begin
_cliente:=DatosFacturaEmitida.contraparte.NombreRazon;
_NIF:=DatosFacturaEmitida.contraparte.NIF;
if DatosFacturaEmitida.TipoDesglose.DesgloseFactura<>nil then
begin
_tipodesglose:=GetEnumName( typeInfo(TipoOperacionSujetaNoExentaType), ord(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.TipoNoExenta) );
_noexenta:=getEnumName(typeInfo( TipoOperacionSujetaNoExentaType ) , ord(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.TipoNoExenta ) );
end;
if DatosFacturaEmitida.contraparte.IDOtro<>nil then
begin
if _NIF='' then
_NIF:=DatosFacturaEmitida.contraparte.IDOtro.ID;
end;
end
else // POSIBLE ERROR:
BEGIN
_cliente:='SIN CLIENTE';
MemoComs.lines.add('factura: ' + IDFactura.NumSerieFacturaEmisor + ' SIN CLIENTE');
end;
if DatosFacturaEmitida.TipoDesglose.DesgloseFactura<>NIL then
begin
for h := low(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) to high( DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) do
begin
with DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA[h] do
begin
base[h]:= strTofloat( SII_numero( baseImponible ) );
tipo[h]:=strTofloat(SII_numero( tipoImpositivo ) );
cuota[h]:=strTofloat(SII_numero( cuotarepercutida ) );
end;
end;
end;
_cobros:=getEnumName( typeInfo(FacturaARType), ord(DatosFacturaEmitida.Cobros) );
_fechaStr:=copy(IDFactura.FechaExpedicionFacturaEmisor,1,10);
_fechaStr:=stringReplace(_fechaStr,'-','/',[rfReplaceAll]);
_fecha:=strTodate( _fechaStr );
_estado:=estadoFactura.EstadoRegistro;
_descripcion:=DatosFacturaEmitida.DescripcionOperacion;
MemoComs.lines.add('factura: ' + IDFactura.NumSerieFacturaEmisor + ' ' + IDFactura.NumSerieFacturaEmisorResumenFin + ' ' + IDFactura.FechaExpedicionFacturaEmisor);
// guardar en la base de datos:
dbRespuesta.Insert;
dbRespuesta.fieldbyName('numero').Text:=_numero;
dbRespuesta.fieldbyName('fecha').asdatetime:=_fecha;
dbRespuesta.fieldbyName('cliente').Text:=_cliente;
dbRespuesta.fieldbyName('nif').Text:=_nif;
dbRespuesta.fieldbyName('tipo').Text:=_tipo;
dbRespuesta.fieldbyName('tipostr').Text:=_tipostr;
dbRespuesta.fieldbyName('exenta').Text:=_exenta;
dbRespuesta.fieldbyName('regimen').Text:=_regimen;
dbRespuesta.fieldbyName('operacion').Text:=_operacion;
dbRespuesta.fieldbyName('terceros').Text:=_terceros;
dbRespuesta.fieldbyName('total').asfloat:=_ImporteTotal;
dbRespuesta.fieldbyName('cobros').text:=_cobros;
dbRespuesta.fieldbyName('fecha').asdatetime:=_fecha;
dbRespuesta.fieldbyName('estado').text:=_estado;
dbRespuesta.fieldbyName('descripcio').text:=_descripcion;
dbRespuesta.fieldbyName('Noexenta').text:=_noexenta;
if DatosFacturaEmitida.TipoDesglose.DesgloseFactura<>NIL then
begin
for h := low(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) to high( DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) do
begin
dbRespuesta.fieldbyName('iva'+inttostr(h)).asfloat:=tipo[h];
dbRespuesta.fieldbyName('impiva'+inttostr(h)).asfloat:=cuota[h];
dbRespuesta.fieldbyName('baseimp'+inttostr(h)).asfloat:=base[h];
end;
end;
dbRespuesta.Post;
except
On E:Exception do
begin
MemoErrores.lines.Add(_numero);
MemoErrores.lines.Add(E.Message);
MemoErrores.lines.Add('--------------------');
end;
end;
end;
end;
except
On E:Exception do
//El proceso de envio dio error
MemoErrores.lines.Add(E.Message);
end;
finally
// se eliminan los objetos creados
aConsultaLRFacturasEmitidas.Free;
result.Free;
dbRespuesta.Active:=true;
end;
end;
* Facturas recibidas intracomunitarias y autofactura.... * Factura a Canarias? Aunque lo estoy mirando ahora, ¿Por favor, podeis postear algún ejemplo? ... Saludos ! |
|
#3
|
||||
|
||||
|
Esta claro que hay facturas rectificativas por diferencias. Aunque no lo veo muy claro.
Pero ... ¿y los abonos? ¿Cómo se gestionan? Saludos ! |
|
#4
|
||||
|
||||
|
Cita:
Saludos
__________________
Be water my friend. |
|
#5
|
||||
|
||||
|
si nos fijamos en el ejemplo suministrador por la AEAT:
Código:
<sii:Exenta>
<sii:CausaExencion>E4</sii:CausaExencion>
<sii:BaseImponible>-50</sii:BaseImponible>
</sii:Exenta>
<sii:NoExenta>
<sii:TipoNoExenta>S2</sii:TipoNoExenta>
<sii:DesgloseIVA>
<sii:DetalleIVA>
<sii:TipoImpositivo>10</sii:TipoImpositivo>
<sii:BaseImponible>-45</sii:BaseImponible>
<sii:CuotaRepercutida>-5</sii:CuotaRepercutida>
si miramos, la línea señalada en negrita, eso NO es la base imponible. (o es la base Imponible de la factura rectificada?) (pero entonces que hace en negativo?) ¿alguna opinión? |
|
#6
|
||||
|
||||
|
Cita:
__________________
Be water my friend. |
|
#7
|
|||
|
|||
|
Cita:
Una factura rectificativa no necesariamente minora. Podría tener el mismo importe e incluso mayor. Las rectificativas substituyen a facturas normales que tienen alguna anomalía, sea el caso de un precio o cantidad erróneos, el NIF o domicilio fiscal incorrectos, el tipo de IVA impropio, etc. Se pueden (y creo que se deben) incluir también las devoluciones de género. Deben llevar una secuencia de numeración aparte. No parece normal que el importe total sea negativo, pues si has vendido 100 unidades y te devuelven 30, la rectificativa será por 70 unidades (positivas). Contablemente su importe se suma, al mismo tiempo que se resta el importe de la factura rectificada, para que todo cuadre. |
|
#8
|
||||
|
||||
|
Hola de nuevo.
Hasta ahora solo había probado con facturas emitidas sin grandes problemas. Estoy intentando implementar en la misma unidad facturas recibidas y estoy teniendo problemas. ¿Hay que importar todos los ficheros wsdl de los distintos tipos de facturas? porque a mi se me hace un lío al hacer la llamada de factura emitida o recibida si los tengo en la misma unidad. Saludos
__________________
Be water my friend. |
|
#9
|
||||
|
||||
|
Cita:
|
|
#10
|
||||
|
||||
|
Os recomiendo hacer formularios independientes.
Porque entonces se confunden los tipos de los distintos objetos. Y referenciar por "unit.tipo" es liarlo mas. saludos ! Código:
<sii:Exenta>
<sii:CausaExencion>E4</sii:CausaExencion>
<sii:BaseImponible>-50</sii:BaseImponible>
</sii:Exenta>
<sii:NoExenta>
<sii:TipoNoExenta>S2</sii:TipoNoExenta>
<sii:DesgloseIVA>
<sii:DetalleIVA>
<sii:TipoImpositivo>10</sii:TipoImpositivo>
<sii:BaseImponible>-45</sii:BaseImponible>
<sii:CuotaRepercutida>-5</sii:CuotaRepercutida>
He repasado el cuadernillo de la aeat y no dice nada al respecto. Eso si, el sistema traga con lo que le pongas. le da igual. Según he podido entender en una respuesta de la AEAT: En marzo parece que abrirán una web para comprobar. El formulario NO parece que sea para subir XMLs, será para teclear a mano la factura. Saludos ! |
|
#11
|
|||
|
|||
|
Cita:
|
|
#12
|
|||
|
|||
|
Buenas. Alguien sabe cómo convertir el tipo FacturaRespuestaExpedidaType en FacturaExpedidaType? Estoy comprobando la existencia de una factura y, aunque la llamada al método ConsultaLRFacturasEmitidas me devuelve ResultadoConsultaType.ConDatos, me gustaría poder hacer un Equals entre la factura nueva que intento introducir y la existente, para saber si son completamente iguales o hay algún campo que varía y, si varía algún campo de ella, subirla como A1.
|
|
#13
|
|||
|
|||
|
vamos a empezar con el desarrollo. ¿Alguien me puede decir si ya lo acabado y cuanto tiempo le ha llevado por ejemplo el codigo para solo enviar las facturas emitidas y recoger la respuesta en una tabla?.
|
|
#14
|
||||
|
||||
|
Cita:
Saludos
__________________
Be water my friend. |
|
#15
|
|||
|
|||
|
Entorno De Pruebas Sii
Buenos días, esta muy bien el foro la verdad y gracias a todos los que habéis aportado vuestro granito de arena para que esto avance y sea menos travesia del desierto, yo ya lo voy consiguiendo gracias a vuestra ayuda, estoy en el punto de comenzar a probar el envio y mi duda es de como hay que llamar a la función GetSiiSOAP y con que parámetros para enviar al entorno de pruebas de la Agencia Tributaria, trabajo con DelphiXe y si me podeis ayudar con un ejemplo de fuente se agradeceria mucho, después para volver a enviar al entorno real de producción, que hay que hacer?
Gracias. |
|
#16
|
||||
|
||||
|
Cita:
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco | keys | Internet | 4530 | 02-07-2026 14:09:59 |
| AEAT envio de datos vía Webservice problemas con WSDL | CelsoO | Internet | 11 | 09-10-2019 20:03:41 |
| webService Soap de la Administración Digital Española notific@ | apicito | Internet | 3 | 31-01-2017 11:25:28 |
| Error en Webservice funcion envio de sms | webmasterplc | Delphi para la web | 5 | 25-07-2013 20:10:29 |
| Problemas con envío de XML a un WebService | davidvamo | Internet | 1 | 13-02-2007 15:49:20 |
|