Cita:
Empezado por ramherfer
Buenas tardes.
Si se le factura a un cliente con recargo de equivalencia no se si está asignando la clave de régimen 01 (Operación de Régimen General).
Creo que en este caso debería de asignar la clave de regimen 18 (Recargo de equivalencia).
Por favor corregirme si me equivoco.
|
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;