Cita:
Empezado por seccion_31
Que yo sepa debe quedarse como 01.
En uveriFactuFuncs.
La variable Condatos en la consulta se quedaba siempre a false, al menos en la version que yo tengo.
Si os ocurre esto, cambiar esta funcion asi:
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:=FechaExpedicionConsultaType.Create;
if resultado.Cabecera.dfecha=resultado.Cabecera.hfecha then
begin
consulta.FiltroConsulta.FechaExpedicionFactura.FechaExpedicionFactura:=verifactuFecha(datetostr(resultado.Cabecera.dfecha));
end else
begin
consulta.FiltroConsulta.FechaExpedicionFactura.RangoFechaExpedicion:=RangoFechaExpedicionType.Create;
consulta.FiltroConsulta.FechaExpedicionFactura.RangoFechaExpedicion.Desde:=verifactuFecha(datetoStr(resultado.Cabecera.dfecha));
consulta.FiltroConsulta.FechaExpedicionFactura.RangoFechaExpedicion.Hasta:=verifactuFecha(datetoStr(resultado.Cabecera.hfecha));
end;
end
else
begin
consulta.FiltroConsulta.NumSerieFactura:=resultado.Cabecera.NumSerieFactura;
end;
If resultado.Cabecera.filtroSIF then
Begin
//Vamos a establecer un filtro por sistema informático (opcional)
consulta.FiltroConsulta.SistemaInformatico:=SistemaInformaticoType.Create;
consulta.FiltroConsulta.SistemaInformatico.NombreRazon := sesiones[sesion].inicio.sistemaInformatico.razonSocial;
consulta.FiltroConsulta.SistemaInformatico.NIF := sesiones[sesion].inicio.sistemaInformatico.nif;
consulta.FiltroConsulta.SistemaInformatico.NombreSistemaInformatico := sesiones[sesion].inicio.sistemaInformatico.nombre;
consulta.FiltroConsulta.SistemaInformatico.IdSistemaInformatico := sesiones[sesion].inicio.sistemaInformatico.ID;
consulta.FiltroConsulta.SistemaInformatico.Version := sesiones[sesion].inicio.sistemaInformatico.Version;
consulta.FiltroConsulta.SistemaInformatico.NumeroInstalacion := sesiones[sesion].inicio.sistemaInformatico.NumeroInstalacion;
consulta.FiltroConsulta.SistemaInformatico.TipoUsoPosibleSoloVerifactu := SiNoType.S;
if sesiones[sesion].inicio.sistemaInformatico.multiplesOT then
consulta.FiltroConsulta.SistemaInformatico.TipoUsoPosibleMultiOT := SiNoType.S
else
consulta.FiltroConsulta.SistemaInformatico.TipoUsoPosibleMultiOT := SiNoType.N;
End;
eventos:=TEventosHttpPrio.Create;
eventos.fileNameBefore :=sesiones[sesion].inicio.saveXMLenvio;
eventos.fileNameAfter :=sesiones[sesion].inicio.saveXMLResultado;
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 !
// limpiar resultado antes de procesarlo
clear_consulta(resultado);
// 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;
|
No el código no lo he alterado. Digo que si emitimos una factura a un cliente con recargo de equivalencia, la clave de regimen pone 01 y debiera ser clave 18, ya que
no es una operación del Régimen General (01), se trata de una operación del Régimen de Recargo de Equivalencia (18). O por lo menos eso es lo que tengo entendido, corregirme si me equivoco.
Lo mismo que ocurriría si es una operación REBU 03 (Régimen de bienes usados), no la puedo calificar con el Régimen General (01).