![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
ramherfer
sustituye esta funcion: uVerifactuFuncs y recompila el servidor B10 Código:
function consultar(sesion:integer; var resultado:TConsultaResultado):boolean;
var
consulta : ConsultaFactuSistemaFacturacion; // Objeto a enviar
res : RespuestaConsultaFactuSistemaFacturacionType; // Respuesta tras el envio
HTTPRIO1 : THTTPRIO;
j : integer;
direccion_envio, estado : string;
eventos : TEventosHttpPrio;
eventosWebNode: TEventosWebNode;
begin
consulta:=ConsultaFactuSistemaFacturacion.Create;
consulta.Cabecera:=CabeceraConsultaSf.Create;
consulta.Cabecera.ObligadoEmision:=ObligadoEmisionConsultaType.Create;
consulta.Cabecera.ObligadoEmision.NombreRazon:=sesiones[sesion].inicio.emisor.NombreRazonEmisor;
consulta.Cabecera.ObligadoEmision.NIF:=sesiones[sesion].inicio.emisor.nifEmisor;
consulta.FiltroConsulta:=LRFiltroRegFacturacionType.Create;
consulta.FiltroConsulta.PeriodoImputacion:=PeriodoImputacionType.Create;
consulta.FiltroConsulta.PeriodoImputacion.Ejercicio:=resultado.Cabecera.ejercicio;
consulta.FiltroConsulta.PeriodoImputacion.Periodo:=veriFactuPeriodo( resultado.Cabecera.periodo );
if resultado.Cabecera.NumSerieFactura='' then
begin
consulta.FiltroConsulta.FechaExpedicionFactura.RangoFechaExpedicion.Desde:=verifactuFecha(datetoStr(resultado.Cabecera.dfecha));
consulta.FiltroConsulta.FechaExpedicionFactura.RangoFechaExpedicion.Hasta:=verifactuFecha(datetoStr(resultado.Cabecera.hfecha));
end
else
begin
consulta.FiltroConsulta.NumSerieFactura:=resultado.Cabecera.NumSerieFactura;
end;
eventos:=TEventosHttpPrio.Create;
eventos.fileNameBefore :=sesiones[sesion].saveXMLenvio;
eventos.fileNameAfter :=sesiones[sesion].saveXMLResult;
eventosWebNode:=TEventosWebNode.Create;
eventosWebNode.sesion:=sesion;
HTTPRIO1:=THTTPRIO.create(nil);
HTTPRIO1.onBeforeExecute:=eventos.BeforeExecute;
HTTPRIO1.onAfterExecute :=eventos.AfterExecute;
// Cargar certificado del disco
if ( pos('.PFX',uppercase(sesiones[sesion].inicio.nombreCertificado))<>0) or
( pos('.P12',uppercase(sesiones[sesion].inicio.nombreCertificado))<>0) then
HTTPRIO1.HTTPWebNode.onBeforePost:=eventosWebNode.WebNodeBeforePost;
// --> envío pre-produccion: 'https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP';
try
// Cargar certificado del almacen
if ( pos('.PFX',uppercase(sesiones[sesion].inicio.nombreCertificado))=0) and
( pos('.P12',uppercase(sesiones[sesion].inicio.nombreCertificado))=0) then
HTTPRIO1.HTTPWebNode.ClientCertificate.SerialNum := Buscar_Certificado_SERIAL( sesiones[sesion].inicio.nombreCertificado ); // coloca el certificado
direccion_envio :=sesiones[sesion].inicio.direccion_envio;
res:= RespuestaConsultaFactuSistemaFacturacionType.Create;
res:= GetsfPortTypeVerifactu( false, direccion_envio , HTTPRIO1 ).ConsultaFactuSistemaFacturacion( consulta ); // Enviarlo !
// resultado del envio:
resultado.ConDatos:=(res.ResultadoConsulta=ResultadoConsultaType.ConDatos);
resultado.error :=false;
resultado.errorDes:='';
procesarConsulta(res,resultado );
except
on E:Exception do
begin
resultado.ConDatos:=false;
resultado.error:=true;
resultado.errorDes:=Format('(%s)-%s',[E.ClassName, E.Message]);
result:=false;
exit;
end;
// Finalmente:
// HTTPRIO1.free; //<- no puede ser destruido con NIL como constructor
//eventos.Free;
end;
result:=true;
end;
|
|
#2
|
||||
|
||||
|
Voy a incorporarle el tema de las facturas exentas
Con lo que ya hay programado, para el desglose del IVA necesito saber el texto de las diferentes leyes, para al menos ajustar la clave de exencion automatica para las de exportacion UE, fuera de UE, y canarias correctamente. E1 Exenta por el artículo 20 E2 Exenta por el artículo 21 (canarias, y fuera la UE) E3 Exenta por el artículo 22 E4 Exenta por los artículos 23 y 24 E5 Exenta por el artículo 25 (exportacion a la UE) E6 Exenta por otros Me gustaria saber un pequeño texto resumen de los articulos. A ver si alguien me puede aclarar este tema x favor. Slds ! |
|
#3
|
||||
|
||||
|
Cita:
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
|
#4
|
||||
|
||||
|
ya tengo implementado por decir algo las facturas exentas, añadiendo un campo al desglose de iva, con el identificador de la exencion, pero ...
hasta aqui llegamos, porque no me aclaro con el valor ClaveRegimen (mis conocimientos fiscales son muy limitados) Si no estoy equivocado: Si la exencion es la E2 ClaveRegimen va a 02. exportacion ¿pero siempre debe tomar ese valor? ¿la E2 solo se usa para exportacion fuera de la UE? (o canarias) Si la exencion es la E5 ClaveRegimen va a 01. factura UE ¿pero siempre debe tomar ese valor? ¿la E5 solo se usa para facturas UE? Con E6 (otra) puede ir a ClaveRegimen 01, pero ¿se puede calcular ClaveRegimen segun el valor de la exencion? ¿ E1 E3 E4 ? Y aqui me paro hasta ver x favor, quien nos puede aclarar este tema. Saludos ! |
|
#5
|
||||
|
||||
|
Cita:
Tabla de Claves de Régimen (ClaveRegimen) Este campo indica el régimen de IVA aplicable a la factura. ClaveRegimen Descripción 01 Régimen General 02 Régimen Especial de Recargo de Equivalencia 03 Régimen Especial de Agricultura, Ganadería y Pesca 04 Régimen Especial de Bienes Usados, Objetos de Arte, Antigüedades y Objetos de Colección 05 Régimen Especial de Agencias de Viaje 06 Régimen Especial del Criterio de Caja 07 Régimen Especial del Grupo de Entidades 08 Régimen Especial del Oro de Inversión 09 Régimen Especial de Agencias de Viajes que actúan como Mediadores en nombre y por cuenta ajena 10 Régimen de Comercio Intracomunitario 11 Régimen aplicable a las Ventas a Distancia y determinadas entregas de bienes y prestaciones de servicios 12 Régimen especial del IVA para Trabajadores Autónomos Extranjeros en España Por otro lado, tenemos los motivos de la excenxión. Tabla de Motivos de Exención (E1-E6) (Campo: CausaExencion) Código Descripción E1 Operaciones exentas por el artículo 20 de la Ley del IVA (ej. sanidad, educación, seguros, servicios financieros, alquiler de viviendas). E2 Operaciones no sujetas por reglas de localización (servicios prestados fuera de España según los artículos 69, 70 y 72 de la Ley del IVA). E3 Operaciones sujetas y exentas por el artículo 21 (exportaciones de bienes fuera de la UE). E4 Operaciones sujetas y exentas por el artículo 22 (zonas francas, depósitos aduaneros y otros regímenes especiales). E5 Operaciones sujetas y exentas por el artículo 23 (Régimen de viajeros, es decir, devoluciones de IVA a turistas no residentes en la UE). E6 Operaciones sujetas y exentas por los artículos 24 y 25 (entregas intracomunitarias de bienes y servicios). Ejemplo: Si vendes un producto a una empresa en Alemania (operación intracomunitaria), la configuración correcta sería: • ClaveRegimen = 10 (Comercio Intracomunitario) • Motivo de Exención = E6 (Entrega intracomunitaria exenta de IVA) Si emites una factura exenta de IVA por una exportación, usarías ClaveRegimen = 01 (régimen general) y motivo de exención = E3. En ambos casos al TipoImpositivo le meteríamos el 0. |
|
#6
|
||||
|
||||
|
Edito: Perdón por el mensaje anterior. El campo del motivo está en el SII pero no en el Verifactu… igual se podría añadir junto con la descripción en el detalle…. pero no parece quedar claro…
|
|
#7
|
||||
|
||||
|
Cita:
3.6. ¿Cómo se registra una Entrega Intracomunitaria de Bienes? Se anotará la factura emitida al cliente comunitario en el Libro registro de Facturas Expedidas procediendo a su identificación mediante la clave 2 en el campo de tipos de Identificación en el país de residencia “IDType” y su Número de Operador Intracomunitario en el campo "ID". El campo “CodigoPais” no será obligatorio. Por otra parte, la base imponible de la factura se incluirá en el campo de tipo de operación “Exenta” dentro del bloque “Entrega”. Como causa de exención se consignará la clave “E5: Exenta por el artículo 25”. 3.7. ¿Cómo se registra una Exportación? La operación se anota en el Libro Registro de Facturas Expedidas. -> En el campo “Clave Régimen especial o Trascendencia” se consignará el valor 2. Deberá identificarse al cliente – en caso de ser extranjero- mediante el “Código país” y las claves 3 “Pasaporte”, 4 “Documento oficial de identificación expedido por el país o territorio de residencia”, 5 “Certificado de residencia” ó 6 “Otro documento probatorio” del campo “IDType”. Por otra parte, la base imponible de la factura se incluirá en el campo de tipo de operación “Exenta” dentro del bloque “Entrega”. Como causa de exención se consignará la clave E2 “Exenta por el artículo 21 Fuente: https://sede.agenciatributaria.gob.e...5/FAQs_v05.pdf Entonces en verifactu tendriamos: Exportaciones: articulo 21, por tanto: E3 ¿aqui incluiriamos canarias? Intracomunitarias: articulo 25, por tanto E6 |
|
#8
|
||||
|
||||
|
entonces lo indicado por DarkDudae y lo que he correlacionado con el SII, en principio coinciden.
Eso, nos asegura las exenciones para canarias, UE, y fuera de UE, en una facturacion "normal". El problema viene con el resto de exenciones, por ejemplo facturar temas medicos, ongs, deportivos, educativos, culturales etc... ¿Podemos aclarar este tema? Saludos ! |
|
#9
|
||||
|
||||
|
Nueva sugerencia para el componente:
Obtener fechas de caducidad de los certificados. Para ello, bastaría con hacer una pequeña modificación en la función loadCertificados y en el tipo TCertificados.
|
|
#10
|
||||
|
||||
|
Buenas tardes.
¿Es posible que no me valide los nif's usando el pfx? Con el nombre de certificado, si lo hace aunque no devuelve el nombre registrado en la AEAT, en resultado venía IDENTIFICADO o NO IDENTIFICADO Un saludo,
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. Última edición por ramherfer fecha: 07-02-2025 a las 18:19:09. |
|
#11
|
||||
|
||||
|
Cita:
Tambien soportara exentas (por otros motivos a exportacion, ue, y canarias) , en un array distinto a la de ivas, e inversión del sujeto pasivo en facturas nacionales. (eso si, toda la factura bajo inv.suje.pasivo) La demo ha cambiado algo, y la excel para importar tambien. Ademas de otros cambios y pequeños errores. Creo que la semana que viene la subire Saludos |
|
#12
|
||||
|
||||
|
buenos dias DarkDudae !
¿ x favor, Puedes modificar el codigo para que directamente cargue SOOLO los certificados validos, evitando los caducados ? NO tengo ninguno caducado para provar, y evitar el segundo parametro, y mas cambios. Copiaria y pegaria tu codigo y ya, lo incorporo a la nueva version. Saludos ! |
|
#13
|
||||
|
||||
|
Buenos días ¡¡
Gracias a tod@s y sobretodo a Seccion31 por las aportaciones y por el enorme esfuerzo. De verdad que me dais la vida. ![]() Cita:
Código:
HTTPRIO1.HTTPWebNode.onBeforePost:=eventosWebNode.WebNodeBeforePost; y no la puedo recompilar (no se como corregir el error). Podría alguien enviar el fichero VerifactuD7.bpl y dcp recompilados con la nueva funcion (o si algún moderador pudiera subirla al área de descarga )? P.D. Las aplicaciones las tengo en Delphi 7, y el componente VerifactuD7 lo había compilado en Delphi12 perfectamente, el fallo me da ahora al cambiar la función "consultar". Muchas gracias¡¡
__________________
Inieeeesssstademiviiiiidaaaaa. |
|
#14
|
||||
|
||||
|
Perdonad¡¡¡
Pero creo que me he liado un "POCO". La corrección de la función consultar es del servidor de envíos (ese no lo había compilado antes en Delphi 12, lo utilice tal cual lo había descargado). O sea, que lo que necesitaría para poder seguir es el servidor (msgVerifactu.exe) con la corrección hecha. Gracias y mil disculpas de nuevo.
__________________
Inieeeesssstademiviiiiidaaaaa. |
|
#15
|
||||
|
||||
|
Conseguido enviar desde DLL
Buenos días compañeros/as:
He conseguido enviar facturas desde una dll creada en Delphi 10.2 con llamadas desde Delphi 7. Para hacer las pruebas, como primera aproximación simplemente he embebido el formulario de la demo 2 dentro de la dll para ver que pudiese enviar facturas, y efectivamente, puede, así como mantener el resto de funcionalidades. Luego a modo extra he implementado la carga de certificados también usando la dll desde Delphi 7. Con esto no sé si verdaderamente sería necesaria una "aplicación servidora" ejecutándose en segundo plano. Os paso el código: Código Delphi 7 DLL |
|
#16
|
||||
|
||||
|
Cita:
A ver si puedo descargarlo. |
|
#17
|
||||
|
||||
|
Cita:
![]() Voy a borrar el exe por si ese fuese el motivo. |
|
#18
|
||||
|
||||
|
Aquí lo tenéis:
DEMO LLAMADAS DESDE DLL El pass de descompresión es: "clubdelphi" Dentro tenéis los dos proyectos: "verifactu_multi.dproj" creada con Delphi 10.2 (dll) "Llamada_dll.dpr", con el código de un ejecutable desarrollado en Delphi 7 que interactua con la dll anterior. Última edición por DarkDudae fecha: 10-02-2025 a las 12:51:57. |
|
#19
|
||||
|
||||
|
Cita:
saludos ! |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Verifactu o por requerimiento (no-verifactu) ¿decisión del usuario? | Maska10 | Temas legales | 2 | 07-12-2024 12:34:47 |
| Demo de una applicación para una estación de enfermera con RAD Studio | AgustinOrtu | La Taberna | 1 | 21-07-2015 17:41:35 |
| Demo Delphi, EMail | Caral | Internet | 1 | 19-12-2006 00:37:56 |
| Demo de delphi 2005 | mazinger | Varios | 2 | 18-12-2004 09:23:09 |
| El Rave que viene con Delphi es una Demo? | apicito | Impresión | 0 | 04-06-2003 11:33:36 |
|