Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #141  
Antiguo 13-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Creo que hay varios mensajes donde está cómo hacerlo.
Por ejemplo este, genera el registro con SOAP y en un momento dado extrae el XML del registro de facturación.
https://www.clubdelphi.com/foros/sho...postcount=1428

Código Delphi [-]
...
 try
   newNode := Factura.RegistroFacturacion.ObjectToSOAP( ARootNode, ARootNode, MOPToSoapDomConvert, 'RegistroFacturacionType',
   Swdsl,'T',[ocoDontPrefixNode,ocoDontPutTypeAttr], RefId  ); //ocoDontPrefixNode

   XML.DocumentElement := ARootNode;
   XML.XML.SaveToFile('RegistroFacturacion.xml',TEncoding.UTF8);
   XML.Active := False;

 Except
   On E : Exception do Begin
    Showmessage(E.Message);
    XML.DocumentElement := ARootNode;
    XML.XML.SaveToFile('RegistroFacturacionError.xml',TEncoding.UTF8);
    XML.Active := False;
 End;
 ...
Perfecto, he visto el ejemplo de Delphier publicado al que agradezco su colaboracion, y ya funciona, a ver ahora como lo implemento en el componente. Pero esto ya esta. gracias !
  #142  
Antiguo 13-02-2025
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 190
Poder: 10
nincillo Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
¿podemos estar seguro?

¿ entonces bajo el regimen general 01, la E4 ? esta tarde lo probare.

Automatizacion:

podemos automatizar, UE, fuera de UE, y canarias. Eso ya esta automatizado , (hay que modificar los tipos de exenciones que hay en el codigo, pero ya esta)

podemos automatizar facilmente, el E4, colocandole el regimen general 01. (si funciona).


Mas allá de esto, ¿ya no se puede automatizar?:

¿Quizás habría que crear un array particular para exenciones y cubrir el resto de casos?
Yo por lo que he podido ver en algún otro programa, he querido entender que las exenciones pueden incluso ir a nivel de apunte.

Eso sería bueno que nos lo aclarara alguien que estuviera más "ducho" en temas contables/fiscales.

No es lo mismo productos al 0% de IVA que productos "exentos" de IVA, como en su momento creo que eran las mascarillas y cosas de "esas".
  #143  
Antiguo 13-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
en la nueva version DLL hay un array para procesar exenciones, sin la automatizacion del array de ivas, con lo que quedaria solucionado. Eso si, hay que saber de fiscalidad para que el programa lo coloque corectamente. La nueva implementacion supera con creces la anterior.

Pero ese es el problema, yo al menos no se tanto de fiscalidad como asegurar que se estan generando bien los xml.

seria necesario y esto es una llamada de auxilio XD

un juego de XMLs para los casos principales, automatizados por el componente para verificar.


y otro despues para los menos comunes.

Pero sin eso aunque tecnicamente el componente funcione, estamos vendidos.
  #144  
Antiguo 17-02-2025
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 162
Poder: 14
ramherfer Va por buen camino
Hola buenas tardes.
Al procesar la respuesta resultado.facturas[j].tipoOperacion me está devolviendo "SistemaFac" cuando la factura contiene algún error y es rechazada.
Si la factura es correcta y es admitida resultado.facturas[j].tipoOperacion devuelve "Alta".
Solo proceso una factura y utilizo este dato para identificar en el registroFacturación la operación de la factura a la que se refiere y actualizar su estado, movimiento.

En operaciones Baja declaradas en el registroFacturación obtengo un Access Violation en el módulo msgVerifactu.exe. He probado como fecha de factura la fecha actual y la propia fecha de la factura que se da de baja, pero no se, obtengo el mismo resultado. Voy a darle un vistazo a ver si soy capaz de encontrar el problema.

Al final creo que entiendo el sistema y tengo todo el tema de comunicaciones en una tabla independiente llamada RegistroSIF con las operaciones de cada una de las facturas (Alta, baja, modificacion, etc) que se relaciona con la tabla de cabeceras de facturas. Si genero una baja entra en RegistroSIF como baja y la cabecera de factura tambien la pone como baja. De esta forma puede tener una factura distintos movimientos o estados FR250056 ALTA y FR250056 BAJA. Gracias a los que me aclarasteis mi monumental lio mental.

Un saludo,
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
  #145  
Antiguo 18-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por ramherfer Ver Mensaje
Hola buenas tardes.
Al procesar la respuesta resultado.facturas[j].tipoOperacion me está devolviendo "SistemaFac" cuando la factura contiene algún error y es rechazada.
Si la factura es correcta y es admitida resultado.facturas[j].tipoOperacion devuelve "Alta".
Solo proceso una factura y utilizo este dato para identificar en el registroFacturación la operación de la factura a la que se refiere y actualizar su estado, movimiento.

En operaciones Baja declaradas en el registroFacturación obtengo un Access Violation en el módulo msgVerifactu.exe. He probado como fecha de factura la fecha actual y la propia fecha de la factura que se da de baja, pero no se, obtengo el mismo resultado. Voy a darle un vistazo a ver si soy capaz de encontrar el problema.

Al final creo que entiendo el sistema y tengo todo el tema de comunicaciones en una tabla independiente llamada RegistroSIF con las operaciones de cada una de las facturas (Alta, baja, modificacion, etc) que se relaciona con la tabla de cabeceras de facturas. Si genero una baja entra en RegistroSIF como baja y la cabecera de factura tambien la pone como baja. De esta forma puede tener una factura distintos movimientos o estados FR250056 ALTA y FR250056 BAJA. Gracias a los que me aclarasteis mi monumental lio mental.

Un saludo,
Esta pendiente el cambio a la version DLL, asi a bote pronto recuerdo que la baja daba error.

En cuanto lo publiquen en el FTP, que ya tienen el enlace, lo readaptas y vuelves a probar

Estos son los cambios de la nueva version , donde tambien ha colaborado el usuario darkdudae, a quien agradezco su trabajo.
(Algunos de ellos estan sin comprobar).

Cita:
> Nota general:
Ahora el servidor B10 ya no se suministra como aplicacion. Tenemos una DLL llamada veriFactu.dll


cuando se cambia un type (record). etc... en uTiposVeriFactu se deben recompilar verifactu.dll y aplicacion D7.
La compilacion de la DLL se guarda en la carpeta DEMO_D7 para facilitar las pruebas


Si ha utilizado la version anterior del componente, eliminarlo
Antes de registrar el componente copiar la DLL a syswow64
----------------------------------------------------------------------------------------------------------------------------


--------------------------------
---------------- version 1
--------------------------------
Se añade la funcion getCertificadosFecha para obtener no solo el nombre de los certificados si no su fecha de validez. En las funciones de certificados solo se devuelven certificados validos.

Aumentada longitud DescripcionError en el resultado de cada factura (array)

Se añade propiedad ultimo_error_verifactu con el texo de error al añadir una factura, de momento solo recoge algunos errores. Puede leerse si la funcion VeriFactuD7.addFactura retorna -1. (ver demo de ejemplo).


Se añaden en el componente las propiedades nsesion y nfacturas (numero de facturas altas y baja preparadas para enviar) como propiedades de solo lectura

Se eliminan del record TRegistroFactura nsesion y nfactura

En la DEMO se elimina del formulario el componente TVeriFactu pasando a ser creado al inicio del formulario, se incluye un ejemplo del nuevo evento OnRegFac, de esta forma ya no es necesario instalar el componente en Delphi y la DLL puede ser mantenida en el directorio de la Demo.

---> Se cambian las exenciones de operaciones EU a E5 y Export a E2, se automatiza el tipoNIF si NO esta indicado. Para EU 02 y para Export 06 (otro doc.probatorio).

Se incluye un array en la unidad uTiposVeriFactu llamado _AyudaExentas[1..6] que contiene un resumen textual de las exenciones a modo informativo.

Se añaden las funciones Paises PaisesEU PaisesExport Para obtener una lista de paises validos en un TStringList. ( ES: España se considera fuera de la lista en PaisesEU retornada )

Se añade la funcion validPais para validar el codigo de pais (ya con max. 3 digitos)

Automatizacion de facturas a España (canarias):
En codigoPais podemos enviar ahora el codigo postal de la provincia del cliente. Si se detecta valor numerico se procesara como españa, y ADEMAS si el codigo postal es 35 ó 38 se activara automaticamente el flag de canarias.

Se añade el evento OnRegFac que sera lanzado cuando se procese cada registro de facturacion, es decir, podemos dejar en blanco el pathXML_RegistroFacturacion y todavia guardar el archivo que nos ira enviando como un Stream al evento definido por el usuario: (o utilizar ambos, archivo y evento)

TRegistroFacEvent = procedure(Sender: TObject; numserieFactura:string; xml:TMemoryStream) of object;

Añadida busqueda por SIF en la funcion consulta(..... ) filtroSIF=true filtrara ademas por los datos del sistema informatico. Ver ejemplo en la Demo en consulta de periodo

Se añade refexterna en el dato de la factura, para indicar informacion libre, 60 digitos. tanto en alta/anulacion como en la consulta

Se añade el path para indicar donde guardar los registros de facturacion y una variable booleana para indicar si se guardan todos los registros o solo los aceptados, ATENCION: con una limitacion, podrian guardarse registros innecesarios de facturas con operaciones aceptadas y no aceptadas en la misma sesion de envio (si se da el caso).

pathXML_RegistroFacturacion (ruta a la carpeta, sin terminar en \)
Registro_soloAceptadas (true o false) (false= guardara todas los registros de facturacion)

Hay dos cambios de nombres en el archivo de XML:
Se cambian las variables de los xml de envio y de respuesta a: (para hacerlos mas consistentes)

filenameXML_Envio
filenameXML_Respuesta

Se corrije la consulta por fechas

La demo ha sido muy mejorada, con mas funciones y capacidad

Se añade el campo estadoderegistro en el array de la consulta para cotejar facturas (en cada factura) con los valores: Aceptada, Aceptada con errores, Anulada

Se corrigen las fechas devueltas por consulta a formato / /

Corregido fallo al dar de baja una factura, de momento solo se admiten bajas de facturas registradas en verifactu

-----------------------
Inversion del sujeto pasivo: Hay un nuevo flag que afecta todos los ivas llamado inversionSUjetoPasivo en el record de factura para facturas a ESPAÑA (no canarias):

"
- El proveedor o prestador del servicio registrará los datos de la factura en el Libro
registro de Facturas Expedidas consignando en el campo de tipo de operación la clave
“S2: Sujeta – No Exenta – Inv. Suj. Pasivo”. En los campos de tipo impositivo y cuota"
repercutida consignará “0”. -

"

> Toda la factura debe estar bajo ese regimen y utilizar el primer IVA para indicar unicamente la base imponible.
-----------------------

Corregido error al cotejar (consultar) una factura sin cliente, ni nif.

Eliminada variable situacion, por no usar

Si se suministra una fecha de factura en formato - - se convierte a / / que es el formato esperado

Se añade la extension .P12 para reconocer un certificado en disco al nombre del certificado: PFX y P12

Se añade el indicador primerRegistro para comprobar antes de enviar si no hay registro anterior en algun punto de las facturas a enviar.

Ahora hay dos indicadores: incidencia (lectura/escritura) y primerRegistro(lectura).

En la consulta a la AEAT, en desglose de iva ahora se carga la base imponible e incluye informacion sobre exencion,
revisar: TRegistroFacturaIVASConsulta

Cliente codpais pasa de 2 a 3 digitos

Se ha mejorado la limpieza de algunos records funciones clear_ internas del servidor B10 (ahora DLL)

Al validar el NIF ya se puede obtener el nombre validado (devuelto por la consulta)

EXENCIONES AUTOMATICAS : (en array iva)
------------------------
Las facturas con pais destino a la EU automaticamente se consideran tipoExenta E6 clave regimen 01 (ahora E5)

Las facturas con pais destino al resto del mundo (en clave regimen 02) y canarias (en clave regimen 01) automaticamente se consideran tipoExentas E3 (ahora E2)

Las facturas de inversion sujeto pasivo (para españa)


OTRAS EXENCIONES: (en array exenta)
-----------------
En el record de facturas hay un nuevo array para crear OTRAS exenciones:
Este array se procesa tal cual sin otro proceso generando el desglose equivalente.

Record Factura:

exenta: array[0..maxivas] of TRegistroFacturaExentas;


Array de:

TRegistroFacturaExentas=record
tipoExenta :string[2];
calificacionOperacion:string[2]; // ¿opcional?
claveRegimen :string[2];

baseImp :currency;
end;

Para indicar si la factura lleva alguna base imponible exenta, se hara de forma similar a la del iva, pero cambiando el array. (ver ejemplo en el importador de excel)

Asi mismo un record similar se encuentra en la consulta a la AEAT, para retornar informacion sobre las facturas exentas: (exenciones creadas automaticas, o manuales con el array).

Nota de uso: Cada sesion deberia limitarse a una serie de facturacion y por supuesto 1 solo objeto TVeriFactu

Saludos !

Última edición por seccion_31 fecha: 18-02-2025 a las 07:00:32.
  #146  
Antiguo 18-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por ramherfer Ver Mensaje
Hola buenas tardes.
Al procesar la respuesta resultado.facturas[j].tipoOperacion me está devolviendo "SistemaFac" cuando la factura contiene algún error y es rechazada.
Si la factura es correcta y es admitida resultado.facturas[j].tipoOperacion devuelve "Alta".
Solo proceso una factura y utilizo este dato para identificar en el registroFacturación la operación de la factura a la que se refiere y actualizar su estado, movimiento.

En operaciones Baja declaradas en el registroFacturación obtengo un Access Violation en el módulo msgVerifactu.exe. He probado como fecha de factura la fecha actual y la propia fecha de la factura que se da de baja, pero no se, obtengo el mismo resultado. Voy a darle un vistazo a ver si soy capaz de encontrar el problema.

Al final creo que entiendo el sistema y tengo todo el tema de comunicaciones en una tabla independiente llamada RegistroSIF con las operaciones de cada una de las facturas (Alta, baja, modificacion, etc) que se relaciona con la tabla de cabeceras de facturas. Si genero una baja entra en RegistroSIF como baja y la cabecera de factura tambien la pone como baja. De esta forma puede tener una factura distintos movimientos o estados FR250056 ALTA y FR250056 BAJA. Gracias a los que me aclarasteis mi monumental lio mental.

Un saludo,
Aun asi puedes (y deberias) procesar la factura con

resultado.facturas[j].OK
y una vez OK entonces mirar tambien: resultado.facturas[j].aceptadoConErrores

tipoOperacion: Probablemente cuando es procesada la factura delphi interpretara ese valor dentro de los enum de tipo de operacion, muy probablemente en el campo XML no venga indicado si quiera. Si quieres postea el XML de resultado cuando ocurre eso. Ya adeverti que hace cosas raras cuando no hay valor un campo enum. quizas sea el caso.

Ver ejemplo en la demo:


Código:
            if resultado.facturas[j].OK then   // Es correcto ó aceptado con errores
            begin
                // colocar el csv y huella en la factura
                if facturasEnviadas.locate('emisor;NumSerieFactura',vararrayof([emisor, factura ]),[]) then
                begin
                    FacturasEnviadas.edit;
                    FacturasEnviadas.fieldbyName('csv').text      :=resultado.CSV;
                    FacturasEnviadas.FieldByName('huella').text   :=resultado.facturas[j].huellaFactura;
                    FacturasEnviadas.fieldbyName('situacion').text:=estado;
                    FacturasEnviadas.post;
                end;
                if resultado.facturas[j].aceptadoConErrores then inc(_oke) else inc(_ok);
            end
            else
                inc(_err);                            // Es erronea
  #147  
Antiguo 18-02-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En el FTP del clubdelphi ya está la última versión del proyecto con códo el código fuente incluído y todo lo que necesita.
De nuevo, desde aquí agradecer a [seccion_31] la aportación y la colaboración y aportes de [darkdudae].
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
  #148  
Antiguo 18-02-2025
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 162
Poder: 14
ramherfer Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
Aun asi puedes (y deberias) procesar la factura con

resultado.facturas[j].OK
y una vez OK entonces mirar tambien: resultado.facturas[j].aceptadoConErrores

tipoOperacion: Probablemente cuando es procesada la factura delphi interpretara ese valor dentro de los enum de tipo de operacion, muy probablemente en el campo XML no venga indicado si quiera.
Si quieres postea el XML de resultado cuando ocurre eso. Ya adeverti que hace cosas raras cuando no hay valor un campo enum. quizas sea el caso.

Ver ejemplo en la demo:


Código:
            if resultado.facturas[j].OK then   // Es correcto ó aceptado con errores
            begin
                // colocar el csv y huella en la factura
                if facturasEnviadas.locate('emisor;NumSerieFactura',vararrayof([emisor, factura ]),[]) then
                begin
                    FacturasEnviadas.edit;
                    FacturasEnviadas.fieldbyName('csv').text      :=resultado.CSV;
                    FacturasEnviadas.FieldByName('huella').text   :=resultado.facturas[j].huellaFactura;
                    FacturasEnviadas.fieldbyName('situacion').text:=estado;
                    FacturasEnviadas.post;
                end;
                if resultado.facturas[j].aceptadoConErrores then inc(_oke) else inc(_ok);
            end
            else
                inc(_err);                            // Es erronea
Este es el XML del que intento localizar el tipoOperación de la factura para con ese dato y el numero de serie actualizar el RegistroSif para que indique que hay algo con error actualizando el codigo y la descripción del mismo para información del usuario (devuelve SistemaFac). Ojo los datos fiscales los he alterado en el nodo ObligadoEmision
Código:
<env:Header/>
<env:Body Id="Body">
<tikR:RespuestaRegFactuSistemaFacturacion xmlns:tikR="https://www2.agenciatributaria.gob.es/......" xmlns:tik="https://www2.agenciatributaria.gob.es/.....xsd">
<tikR:Cabecera>
<tik:ObligadoEmision>
<tik:NombreRazon>Nombre razon social del emisor</tik:NombreRazon>
<tik:NIF>00000000W</tik:NIF>
</tik:ObligadoEmision>
</tikR:Cabecera>
<tikR:TiempoEsperaEnvio>60</tikR:TiempoEsperaEnvio>
<tikR:EstadoEnvio>Incorrecto</tikR:EstadoEnvio>
<tikR:RespuestaLinea>
<tikR:IDFactura>
<tik:IDEmisorFactura>00000000W</tik:IDEmisorFactura>
<tik:NumSerieFactura>FR250056</tik:NumSerieFactura>
<tik:FechaExpedicionFactura>17-02-2025</tik:FechaExpedicionFactura>
</tikR:IDFactura>
<tikR:Operacion>
<tik:TipoOperacion>Alta</tik:TipoOperacion>
</tikR:Operacion>
<tikR:EstadoRegistro>Incorrecto</tikR:EstadoRegistro>
<tikR:CodigoErrorRegistro>1123</tikR:CodigoErrorRegistro>
<tikR:DescripcionErrorRegistro>El formato del NIF es incorrecto.. NIF:24369243S.</tikR:DescripcionErrorRegistro>
</tikR:RespuestaLinea>
</tikR:RespuestaRegFactuSistemaFacturacion>
</env:Body>
</env:Envelope>
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.

Última edición por ramherfer fecha: 18-02-2025 a las 10:16:10.
  #149  
Antiguo 18-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
en uVeriFactuFuncs

asi rapido

linea 1829 -31 aproximadamente, pone:

Código Delphi [-]
sesiones[sesion].resultado.facturas[n].tipoOperacion   :=getEnumName( TypeInfo(TipoOperacionType), ord(res.RespuestaLinea[ j ].EstadoRegistro ) );

y deberia poner:

Código Delphi [-]
            sesiones[sesion].resultado.facturas[n].tipoOperacion   :=getEnumName( TypeInfo(TipoOperacionType), ord(res.RespuestaLinea[ j ].Operacion.TipoOperacion ) );

Recompila la DLL y ya

Nota: no lo he probado. Cuando este confirmado que funciona, y haya pasado algo mas de tiempo volvere a publicar otra version.

Saludos !

Última edición por Neftali [Germán.Estévez] fecha: 18-02-2025 a las 11:10:47.
  #150  
Antiguo 18-02-2025
Avatar de DarkDudae
DarkDudae DarkDudae is offline
Miembro
 
Registrado: abr 2006
Posts: 177
Poder: 21
DarkDudae Va por buen camino
He encontrado un bug en el componente si el evento OnRegFac no está asignado antes de hacer un envío (lo cual causa una excepción).
En la demo este error no se muestra debido a que creamos el componente VeriFactuD7 en runtime, así como le asignamos dicha propiedad.

Para solucionarlo, debemos cambiar el código del componente (uVerifacu):

Debemos cambiar este código:

Código Delphi [-]
procedure _callbackRF(filehandleMap:longint);   stdcall;
var
  callback_RF_info:TFileHandledRecordCall;
begin
    try
      loadFileMappingData(@callback_RF_info, sizeof(callback_RF_info), filehandleMap);
      callBacksVeriFactus[callback_RF_info.sesion].FOnRegFac(callBacksVeriFactus[callback_RF_info.sesion]  ,callback_RF_info.numSerieFactura, callback_RF_info.streamXML );
   except
    ON E:Exception do
    begin
      ShowMessage('Error excepcion: '+E.Message);
    end;
   end;
end;

Por este otro en el que nos aseguramos que el evento esté asignado:
Código Delphi [-]
procedure _callbackRF(filehandleMap: longint); stdcall;
var
  callback_RF_info: TFileHandledRecordCall;
  callbackObj: TVeriFactu;
begin
  try
    loadFileMappingData(@callback_RF_info, sizeof(callback_RF_info), filehandleMap);
    
    callbackObj := callBacksVeriFactus[callback_RF_info.sesion];

    if Assigned(callbackObj) then
    begin
      // Verificar si el evento FOnRegFac está asignado antes de llamarlo
      if Assigned(callbackObj.FOnRegFac) then
        callbackObj.FOnRegFac(callbackObj, callback_RF_info.numSerieFactura, callback_RF_info.streamXML)
      else
        OutputDebugString(PAnsiChar('Advertencia: El evento FOnRegFac no está asignado.'));
    end
    else
      OutputDebugString(PAnsiChar('Error: callBacksVeriFactus[' + IntToStr(callback_RF_info.sesion) + '] es nil.'));
    
  except
    on E: Exception do
      ShowMessage('Error excepción en _callbackRF: ' + E.Message);
  end;
end;

Es posible que tengáis que desinstalar y volver a instalar el componente tras el cambio.

Un saludo
__________________
El recuerdo es la prisión en la que el alma sueña pasado, cuando no vive el presente, ni quiere un futuro.

Última edición por DarkDudae fecha: 18-02-2025 a las 17:27:51.
  #151  
Antiguo 18-02-2025
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 162
Poder: 14
ramherfer Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
en uVeriFactuFuncs

asi rapido

linea 1829 -31 aproximadamente, pone:

Código Delphi [-]
sesiones[sesion].resultado.facturas[n].tipoOperacion   :=getEnumName( TypeInfo(TipoOperacionType), ord(res.RespuestaLinea[ j ].EstadoRegistro ) );

y deberia poner:

Código Delphi [-]
            sesiones[sesion].resultado.facturas[n].tipoOperacion   :=getEnumName( TypeInfo(TipoOperacionType), ord(res.RespuestaLinea[ j ].Operacion.TipoOperacion ) );

Recompila la DLL y ya

Nota: no lo he probado. Cuando este confirmado que funciona, y haya pasado algo mas de tiempo volvere a publicar otra version.

Saludos !
La modificación funciona perfectamente. Las Bajas o Anulaciones que tambien tenía problemas funcionan tambien. Gracias seccion_31.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
  #152  
Antiguo 19-02-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Actualizada la última versión en el FTP del club.
Gracias a todos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
  #153  
Antiguo 19-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por ramherfer Ver Mensaje
La modificación funciona perfectamente. Las Bajas o Anulaciones que tambien tenía problemas funcionan tambien. Gracias seccion_31.
lo que falta por probar y creo que NO funciona, son las anulaciones de facturas que no tiene verifactu.

Saludos !

Y es una lastima que falten colaboraciones para depurar, ofrecer ideas, validar los XML y mejorar el codigo, este componente podria solucionar implantaciones "habituales" de verifactu sin mucho problema, en uno o tres dias de trabajo, puedes tener una instalacion verifactu funcional.

agradecer a darkdudae por su colaboracion.
  #154  
Antiguo 19-02-2025
CarlosMz CarlosMz is offline
Miembro
 
Registrado: jul 2020
Posts: 140
Poder: 6
CarlosMz Va por buen camino
Muchas gracias por los aportes,

Si me indicas en qué parte focalizar y puedo ayudar lo hago.

Yo trabajo con Delphi 12 y tengo problemas con los WDSL que vienen y necesito regenerarlos de nuevo con SOAP 1.2

Personalmente lo que estoy haciendo es modificar el código para quitar el componente y la DLL, dejando el sistema en solo código "plano" para poder usarlo en modo web y no en Windows
  #155  
Antiguo 19-02-2025
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.214
Poder: 24
newtron Va camino a la fama
Cita:
Empezado por seccion_31 Ver Mensaje
lo que falta por probar y creo que NO funciona, son las anulaciones de facturas que no tiene verifactu.

Saludos !

Y es una lastima que falten colaboraciones para depurar, ofrecer ideas, validar los XML y mejorar el codigo, este componente podria solucionar implantaciones "habituales" de verifactu sin mucho problema, en uno o tres dias de trabajo, puedes tener una instalacion verifactu funcional.

agradecer a darkdudae por su colaboracion.

Buenas compañero. Es posible que una factura rechazada no puedas anularla porque no exista en sus registros.


Saludos.
__________________
Be water my friend.
  #156  
Antiguo 19-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
hola carlos_mz

habria que tratar de subir una baja de factura, que no se encuentre en verifactu, y ver que pasa. en teoria puedes anular facturas que verifactu no ha almacenado. A mi no me funciono y lo deje aparcado.

verificar que en consulta, los datos que devuelve si son correctos para cada tipo de factura. en especial desgloses de iva, y exenciones.

por otro lado

generar un XML de cada tipo de factura, incluida canarias, quitas tus datos y vemos aqui en el foro si estan OK.

Eso se me ocurre como lo mas inmediato, si tienes tiempo miras lo que puedas.

Saludos !
  #157  
Antiguo 19-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Buenas compañero. Es posible que una factura rechazada no puedas anularla porque no exista en sus registros.


Saludos.
hola !

no es una factura rechazada, es una factura anterior a la implantacion de verifactu, digamos de unos dias antes de su entrada en vigor. que yo recuerde en la documentacion dice que se puede.

: )
  #158  
Antiguo 19-02-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por seccion_31 Ver Mensaje
lo que falta por probar y creo que NO funciona, son las anulaciones de facturas que no tiene verifactu.
Os adjunto cómo sería el registro enviado. Y que posteriormente me lo han aceptado.


Cita:
Empezado por newtron Ver Mensaje
Buenas compañero. Es posible que una factura rechazada no puedas anularla porque no exista en sus registros.
Pueden ser facturas antiguas, que modificas o borras (anteriorres a la activación). También una factura que se ha rechazado por algún motivo y que luego borras.

Cita:
Empezado por seccion_31 Ver Mensaje
habria que tratar de subir una baja de factura, que no se encuentre en verifactu, y ver que pasa. en teoria puedes anular facturas que verifactu no ha almacenado. A mi no me funciono y lo deje aparcado.
Cita:
Empezado por seccion_31 Ver Mensaje
no es una factura rechazada, es una factura anterior a la implantacion de verifactu, digamos de unos dias antes de su entrada en vigor. que yo recuerde en la documentacion dice que se puede.

Creo que pueden ser ambos casos; Se marca el registro de anulación como SinRegistroPrevio.

Código:
<sum:RegFactuSistemaFacturacion xmlns:xd="http://www.w3.org/2000/09/xmldsig#" 
xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" 
xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
  <sum:RegistroFactura>
    <sum1:RegistroAnulacion>
      <sum1:IDVersion>1.0</sum1:IDVersion>
      <sum1:IDFactura>
        <sum1:IDEmisorFacturaAnulada>ZZZZZZZZZ</sum1:IDEmisorFacturaAnulada>
        <sum1:NumSerieFacturaAnulada>RECT-3</sum1:NumSerieFacturaAnulada>
        <sum1:FechaExpedicionFacturaAnulada>23-10-2024</sum1:FechaExpedicionFacturaAnulada>
      </sum1:IDFactura>
      <sum1:SinRegistroPrevio>S</sum1:SinRegistroPrevio>
      <sum1:Encadenamiento>
        <sum1:RegistroAnterior>
          <sum1:IDEmisorFactura>ZZZZZZZ</sum1:IDEmisorFactura>
          <sum1:NumSerieFactura>-1</sum1:NumSerieFactura>
          <sum1:FechaExpedicionFactura>24-10-2024</sum1:FechaExpedicionFactura>
          <sum1:Huella>25E03B23C71B88D8337D5EB4DD7E1F3C031962C6550452D59D1841D7A9FE4444</sum1:Huella>
        </sum1:RegistroAnterior>
      </sum1:Encadenamiento>
      <sum1:SistemaInformatico>
        <sum1:NombreRazon>Empresa Conservas S.L.</sum1:NombreRazon>
        <sum1:NIF>ZZZZZZZZ</sum1:NIF>
        <sum1:NombreSistemaInformatico>MiERP</sum1:NombreSistemaInformatico>
        <sum1:IdSistemaInformatico>04</sum1:IdSistemaInformatico>
        <sum1:Version>1.0.0.0</sum1:Version>
        <sum1:NumeroInstalacion>12345678</sum1:NumeroInstalacion>
        <sum1:TipoUsoPosibleSoloVerifactu>N</sum1:TipoUsoPosibleSoloVerifactu>
        <sum1:TipoUsoPosibleMultiOT>S</sum1:TipoUsoPosibleMultiOT>
        <sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT>
      </sum1:SistemaInformatico>
      <sum1:FechaHoraHusoGenRegistro>2025-02-19T10:36:16Z</sum1:FechaHoraHusoGenRegistro>
      <sum1:TipoHuella>01</sum1:TipoHuella>
      <sum1:Huella>E0D84796EE72EB59B8ABC9A81C9715F1967839A1B3D2ACA043006ECCC9144444</sum1:Huella>
    </sum1:RegistroAnulacion>
  </sum:RegistroFactura>
</sum:RegFactuSistemaFacturacion>
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
  #159  
Antiguo 20-02-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
gracias Neftali

viendo el codigo me doy cuenta de que "creo" que lo tenia mal planteado el sinRegistroPrevio

hay un "if" por medio que creo no estaba bien situado lo he movido. No lo he probado todavia.

Quedara para la 1.2

Saludos !
  #160  
Antiguo 20-02-2025
CarlosMz CarlosMz is offline
Miembro
 
Registrado: jul 2020
Posts: 140
Poder: 6
CarlosMz Va por buen camino
Buenas, no sé si era esto lo que me pediste:

Respuesta envío factura normal con 21%
Código:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Body>
    <RegFactuSistemaFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
      <Cabecera>
        <ObligadoEmision xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
          <NombreRazon>INFORMATICA, S.L.</NombreRazon>
          <NIF>B1222222</NIF>
        </ObligadoEmision>
        <RemisionVoluntaria xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
          <Incidencia>S</Incidencia>
        </RemisionVoluntaria>
      </Cabecera>
      <RegistroFactura>
        <RegistroAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
          <IDVersion>1.0</IDVersion>
          <IDFactura>
            <IDEmisorFactura>B1222222</IDEmisorFactura>
            <NumSerieFactura>25F00001</NumSerieFactura>
            <FechaExpedicionFactura>01-01-2025</FechaExpedicionFactura>
          </IDFactura>
          <NombreRazonEmisor>INFORMATICA, S.L.</NombreRazonEmisor>
          <TipoFactura>F1</TipoFactura>
          <DescripcionOperacion>VENTAS MERCADERIAS</DescripcionOperacion>
          <Destinatarios>
            <IDDestinatario>
              <NombreRazon>CLIM S.L.</NombreRazon>
              <NIF>B22222</NIF>
            </IDDestinatario>
          </Destinatarios>
          <Desglose>
            <DetalleDesglose>
              <ClaveRegimen>01</ClaveRegimen>
              <CalificacionOperacion>S1</CalificacionOperacion>
              <TipoImpositivo>21.00</TipoImpositivo>
              <BaseImponibleOimporteNoSujeto>46.00</BaseImponibleOimporteNoSujeto>
              <CuotaRepercutida>9.66</CuotaRepercutida>
            </DetalleDesglose>
          </Desglose>
          <CuotaTotal>9.66</CuotaTotal>
          <ImporteTotal>55.66</ImporteTotal>
          <Encadenamiento>
            <PrimerRegistro>S</PrimerRegistro>
          </Encadenamiento>
          <SistemaInformatico>
            <NombreRazon>INFORMATICA SL</NombreRazon>
            <NIF>B1222222</NIF>
            <NombreSistemaInformatico>S</NombreSistemaInformatico>
            <IdSistemaInformatico>1</IdSistemaInformatico>
            <Version>2025.1</Version>
            <NumeroInstalacion>undetermined</NumeroInstalacion>
            <TipoUsoPosibleSoloVerifactu>S</TipoUsoPosibleSoloVerifactu>
            <TipoUsoPosibleMultiOT>N</TipoUsoPosibleMultiOT>
            <IndicadorMultiplesOT>S</IndicadorMultiplesOT>
          </SistemaInformatico>
          <FechaHoraHusoGenRegistro>2025-02-20T12:43:58+01:00</FechaHoraHusoGenRegistro>
          <TipoHuella>01</TipoHuella>
          <Huella>EDC14FF1DD7F3136FCBA1FB821D516DA7C0A38BCD7965146A04A73CC1388EC32</Huella>
        </RegistroAlta>
      </RegistroFactura>
    </RegFactuSistemaFacturacion>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta envío Canarias
Código:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<RegFactuSistemaFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<Cabecera>
<ObligadoEmision xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<NombreRazon>INFORMATICA, S.L.</NombreRazon>
<NIF>B1222222</NIF>
</ObligadoEmision>
<RemisionVoluntaria xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<Incidencia>S</Incidencia>
</RemisionVoluntaria>
</Cabecera>
<RegistroFactura>
<RegistroAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<IDVersion>1.0</IDVersion>
<IDFactura>
<IDEmisorFactura>B1222222</IDEmisorFactura>
<NumSerieFactura>25F00002</NumSerieFactura>
<FechaExpedicionFactura>01-01-2025</FechaExpedicionFactura>
</IDFactura>
<NombreRazonEmisor>INFORMATICA, S.L.</NombreRazonEmisor>
<TipoFactura>F1</TipoFactura>
<DescripcionOperacion>VENTAS MERCADERIAS</DescripcionOperacion>
<Destinatarios>
<IDDestinatario>
<NombreRazon>GUSTAVO </NombreRazon>
<NIF>1111111Z</NIF>
</IDDestinatario>
</Destinatarios>
<Desglose>
<DetalleDesglose>
<ClaveRegimen>01</ClaveRegimen>
<OperacionExenta>E4</OperacionExenta>
<BaseImponibleOimporteNoSujeto>19.95</BaseImponibleOimporteNoSujeto>
</DetalleDesglose>
</Desglose>
<CuotaTotal>0.00</CuotaTotal>
<ImporteTotal>19.95</ImporteTotal>
<Encadenamiento>
<PrimerRegistro>S</PrimerRegistro>
</Encadenamiento>
<SistemaInformatico>
<NombreRazon>INFORMATICA SL</NombreRazon>
<NIF>B1222222</NIF>
<NombreSistemaInformatico>S</NombreSistemaInformatico>
<IdSistemaInformatico>1</IdSistemaInformatico>
<Version>2025.1</Version>
<NumeroInstalacion>undetermined</NumeroInstalacion>
<TipoUsoPosibleSoloVerifactu>S</TipoUsoPosibleSoloVerifactu>
<TipoUsoPosibleMultiOT>N</TipoUsoPosibleMultiOT>
<IndicadorMultiplesOT>S</IndicadorMultiplesOT>
</SistemaInformatico>
<FechaHoraHusoGenRegistro>2025-02-20T12:32:22+01:00</FechaHoraHusoGenRegistro>
<TipoHuella>01</TipoHuella>
<Huella>67C220CD32CF94DADAE0273B9A53E947E8E44086B335E669E72D66666ACABA</Huella>
</RegistroAlta>
</RegistroFactura>
</RegFactuSistemaFacturacion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Tema Cerrado



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 05:53:33.


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