Club Delphi  
    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

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 14-12-2024
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 292
Poder: 9
seccion_31 Va por buen camino
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.
Responder Con Cita
 



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 07:45:40.


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