![]() |
![]() |
| 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
|
|||
|
|||
|
Tiene buena pinta, creo que ¿habría que agregarle un control de flujo según los errores recibidos por parte de la AEAT?
|
|
#2
|
||||
|
||||
|
buenos dias !
el servidor de mensajes en B10 funciona el componente en D7 funciona la demo que envía una excel D7 funciona Hay un componente en D7 que crea una sesion en el servidor B10 El componente D7 recoge los datos de la facturas y las envia al servidor B10 El componente D7 da orden de envio al servidor B10 El servidor B10 devuelve el resultado del envio al componente D7 Este es un trozo de código del ejemplo de la anterior demo programada en B10, AHORA reprogramada con el nuevo componente para D7 Código en D7 que hace uso del componente: Código:
// carga los datos de la rejilla en TVerifactu enviandolos a nuestro servidor
function TForm1.stringGrid_to_VerFactuD7( fila:integer ):TRegistroFactura;
var
actual, anterior:TRegistroFactura;
n:integer;
begin
// asignar datos de 1 factura a un record
actual.alta_baja :=copy(StringGridFacturas.Cells[ 0, fila ],1,1); // A o B
actual.numSerieFactura :=StringGridFacturas.Cells[ 1, fila ];
actual.fechafactura :=StringGridFacturas.Cells[ 2, fila ];
actual.descripcionOperacion:=StringGridFacturas.Cells[ 3, fila ];
actual.cliente :=StringGridFacturas.Cells[ 4, fila ];
actual.clienteNIF :=StringGridFacturas.Cells[ 5, fila ];
actual.clientetipoNIF :=StringGridFacturas.Cells[ 6, fila ];
actual.clienteCodPais :=StringGridFacturas.Cells[ 7, fila ];
// cargar 2 ivas
actual.nivas:=0;
if StringGridFacturas.Cells[10, fila]<>'' then // añadir iva 1
begin
actual.iva[0].iva :=value( StringGridFacturas.Cells[10, fila] );
actual.iva[0].req :=value( StringGridFacturas.Cells[11, fila] );
actual.iva[0].baseImp :=value( StringGridFacturas.Cells[12, fila] );
actual.iva[0].impIVA :=actual.iva[0].baseImp*actual.iva[0].iva / 100;
actual.iva[0].impREQ :=actual.iva[0].baseImp*actual.iva[0].req / 100;
inc(actual.nivas);
end;
if StringGridFacturas.Cells[13, fila]<>'' then // añadir iva 1
begin
actual.iva[1].iva :=value( StringGridFacturas.Cells[13, fila] );
actual.iva[1].req :=value( StringGridFacturas.Cells[14, fila] );
actual.iva[1].baseImp :=value( StringGridFacturas.Cells[15, fila] );
actual.iva[1].impIVA :=actual.iva[0].baseImp*actual.iva[0].iva / 100;
actual.iva[1].impREQ :=actual.iva[0].baseImp*actual.iva[0].req / 100;
inc(actual.nivas);
end;
// totales
actual.cuotatotal :=value( StringGridFacturas.Cells[ 8, fila ] );
actual.total :=value( StringGridFacturas.Cells[ 9, fila ] );
//
// localizar la factura anterior: (en nuestra base de datos XML)
//
anterior.numSerieFactura :='';
anterior.fechaFactura :='';
anterior.huella :='';
if FacturasEnviadas.locate('emisor;numSerieFactura',VarArrayOf([ VeriFactuD7.Emisor.nifEmisor, actual.numSerieFactura ]),[] ) then
begin
FacturasEnviadas.prior;
if not FacturasEnviadas.bof then
begin
anterior.numSerieFactura :=FacturasEnviadas.FieldByName('numSerieFactura').text;
anterior.fechaFactura :=FacturasEnviadas.FieldByName('fechaExpedicioFactura').text;
anterior.huella :=FacturasEnviadas.FieldByName('huella').text;
end;
end;
//
// enviarlo al servidor
//
n:=VeriFactuD7.addFactura( actual, anterior );
//
//
if n<=0 then
begin
showmessage('Error Añadiendo Factura '+factura+' Al Servidor');
abort;
end;
result:=actual;
end;
//
// enviar los datos cargados en la rejilla
//
procedure TForm1.enviarClick(Sender: TObject);
var
resultado : TResultadoEnvio; // Respuesta tras el envio
factura : TFacturas; // records con los datos de 1 factura la actual y anterior
actual : TRegistroFactura; // para almacenar en la BD
fila : integer; // fila de la rejilla
alta_baja : string; // estado de la fila, 'A' ó 'B'
begin
screen.Cursor:=crHourglass;
if sender=enviar then VerifactuD7.Simular:=false;
if sender=soloXML then VerifactuD7.Simular:=true;
// url EndPoint
VerifactuD7.urlEndPoint:=editURL.text;
// Datos de sistema Informatico:
VerifactuD7.SistemaInformatico.razonSocial :=editRazonSocial.Text;
VerifactuD7.SistemaInformatico.nif :=editNIF.Text;
VerifactuD7.SistemaInformatico.nombre :=editNombre.Text;
VerifactuD7.SistemaInformatico.ID :=editID.text;
VerifactuD7.SistemaInformatico.Version :=editVersion.text;
VerifactuD7.SistemaInformatico.NumeroInstalacion:=editInstalacion.text;
// Certificado:
VerifactuD7.Certificado :=comboCertificados.text;
// Emisor
VerifactuD7.Emisor.NombreRazonEmisor :=editEmisor.Text;
VerifactuD7.Emisor.nifEmisor :=editNIFEmisor.Text;
// Otros datos
VeriFactuD7.pathXML_Envio :=xmlEnvio; // siempre guardaremos una copia de la ultima transmision
VeriFactuD7.pathXML_Respuesta :=xmlRespuesta; // siempre guardaremos una copia del ultimo resultado
// Iniciamos Sesion !!
if not VeriFactuD7.inicio then
begin
showmessage('Error Iniciando Sesion');
exit;
end;
// recorrer las facturas de la rejilla
for fila:=1 to StringGridFacturas.RowCount do
begin
alta_baja:=StringGridFacturas.Cells[ 0, fila ]; // estado de la factura (ALTA, BAJA)
if alta_baja<>'' then
begin // SI ALTA ó BAJA:
actual:=stringGrid_to_VerFactuD7( fila ); // <---- envia al servidor la factura de la fila correspondiente
archivoFactura(actual);
end;
end;
// resultados:
PageControlVerifactu.TabIndex:=1; // nos preparamos para ver el resultado del envio en su tabulador
memoXML.lines.clear;
if VeriFactuD7.envio(resultado) then // enviarlo !!
procesarEnvio(resultado) // procesar el resultado (mostrar en pantalla, y guardarlo en xmlFacturas)
else
memoRes.lines.add('El Envio No Ha Podido Ser Realizado');
// Finalmente:
FacturasEnviadas.SaveToFile(xmlFacturas); // Guardamos el archivo propio de facturas ( para encadenamiento )
// cerrar sesion:
VeriFactuD7.final; // Liberamos la sesion
screen.Cursor:=crDefault;
end;
[/quote]
Hay varios temas preliminares Faltan mejorar y afinar algunos temas ¿hay alguien interesado en usarlo? Para publicarlo, necesito alguien que entienda BIEN la composicion de los mensajes de la AEAT segun cada tipo de factura para componerlo con la informacion basica de una factura y se encargue de ello. El resto de la logica de envio y recepcion como digo ya funciona. Seria tomar la funcion que hace la carga del objeto de la AEAT e indicarle los datos segun la factura suministrada. Ahi dejo este mensaje, a ver si alguien se anima. Última edición por seccion_31 fecha: 14-12-2024 a las 09:14:48. |
|
#3
|
||||
|
||||
|
Yo estoy interesado, aunque tampoco tengo mucha idea en este tipo de procesos.
Toda mi aplicación está programada en D7. Y tengo un problemón de narices. Ya que tiempo material para recodificar todo es imposible. Ya comenté que en lo que pueda ayudar y echar un cable, intento hacer lo que medigas. Tambien me gustaría tener más claro la metodología de uso del componente para no tener fallos a la hora de su uso y que todo vaya como la seda. Sigo sin entender porque no se trabajó en los foros orientado en este sentido. Muchos tendríamos la solución con un poquito de aporte de todos.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
|
#4
|
|||
|
|||
|
Yo podría echar una mano para convertir el código a delphi 12, intentando minimizar dependencias y encapsulando todo el código en una clase para evitar el uso de componentes no "nativos"
Cita:
Hay varios temas preliminares Faltan mejorar y afinar algunos temas ¿hay alguien interesado en usarlo? Para publicarlo, necesito alguien que entienda BIEN la composicion de los mensajes de la AEAT segun cada tipo de factura para componerlo con la informacion basica de una factura y se encargue de ello. El resto de la logica de envio y recepcion como digo ya funciona. Seria tomar la funcion que hace la carga del objeto de la AEAT e indicarle los datos segun la factura suministrada. Ahi dejo este mensaje, a ver si alguien se anima.[/quote] |
|
#5
|
||||
|
||||
|
¿De donde puedo descargar el componente D7 para intentar integrarlo y poder hacer pruebas?
¿cual sería el path para ubicar el servidor B10? Ya tengo los datos del sistema informático emisor implementados en la ficha de empresa y me faltaría desde donde emito las ordenes de envío y recojo las respuestas, que, imagino sería desde un grid de facturas emitidas gestionando las pendientes de envío. Soy un mar de dudas para empezar las pruebas
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
|
#6
|
|||
|
|||
|
Primero de nada, agradecer a "seccion_31" por la grandísima aportación que ha tenido para con este foro, al brindarnos la posibilidad de usar el código facilitado.
Yo personalmente lo he adaptado para, desde Delphi 10, hace una aplicación en segundo plano que se conecta a la base de datos MYSQL y va enviando la facturas simplificadas y ordinarias que se van generando en una aplicación en delphi 7. Estoy intentando desarrollarlo tanto para una application con MYSQL/MariaDB y otra con ficheros DBF de paradox. De momento consigo enviar con tu código y capturar la respuesta de la AEAT. Ahora estoy esperando a ver como actuar ante las repuestas de la AEAT. Si en algo puedo ayudar... aquí me tenéis. |
|
#7
|
||||
|
||||
|
Si pudieras enviar algo de codigo de esa aplicación que funciona en segundo plano para poder ver como estableces las conexiones entre el servidor B10 y tu base de datos, estaría genial y me ayudaría posiblemente a entender un poco más. Mi aplicación tambien funciona en Delphi 7 y uso tablas paradox db y voy perdido, no, lo siguiente
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
|
#8
|
|||
|
|||
|
Simplemente hago uso de los componentes de Devart unidac. Los demás es adaptar el ejemplo a mis tables, es fácil no te lleva mucho tiempo adaptarlos. Simplemente en vez de la rejilla del excell a enviar, tengo dos grid con las facturas simplificadas y las ordinarias, y para "envioFacturas" me he creado una tabla donde en lugar de un excell , voy guardando todos los registros que voy enviando.
Termino de depurar un poco y te paso el proyecto por si te ayuda. En mi caso para mis aplicaciones, es solo añadir 4 campos a las tablas y crear la tabla de envíos. |
|
#9
|
||||
|
||||
|
Cita:
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|