Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

rci 09-11-2022 11:10:01

Cita:

Empezado por Irreo (Mensaje 549067)
¿Pero ese error lo has obtenido desde el servicio KONTSULTA, o fue lo que te devolvieron al enviar la factura a Alta?

Yo mirando la respuesta XML que tuvimos, tengo esto:

00 - Recibido - ALTA PREP
1153
El NIF del destinatario tiene un formato erróneo

Es decir, el estado es "00", recibido, pero con errores.

Esto fue en Gipuzkoa.


Fué al enviar una Alta de factura. El nif es correcto pero se nos pasó y venía un un guión. Y la factura se rechaza, código de error 002
Fichero no cumple el esquema XSD. Detalle del error: cvc-pattern-valid: Value 'NIFOKAQI-R' is not facet-valid with respect to pattern '(([a-z|A-Z]{1}\d{7}[a-z|A-Z]{1})|(\d{8}[a-z|A-Z]{1})|([a-z|A-Z]{1}\d{8}))' for type 'NIFType'.


En nuestro caso el estado es 01 Rechazada


Gracias

sexxxwax 09-11-2022 13:09:39

bloqueado con el xml
 
Buenas a tod@s, estoy migrando un programa de D6 a D10 con todo lo que supone d incompatibilidades (componentes bde, informes qr, ...) y ahora encima esto del ticketbai; estoy leyendo el foro d ticketbai (voy x la página 60) y me imagino las horas y roturas d cabeza que llevais, la cantidad d errores que habeis solucionado entre todos, así que os felicito.

Yo necesitaría algo d ayuda, así que pondré varias cosas x si alguno tiene tiempo o ganas d ayudarme, d todas formas gracias x anticipado.

Estoy montando el xml insertando datos d las tablas del tpv y al hacer el bucle para recorrer las líneas d la venta actual añadiendolas como iddetalleventa sólo me carga la última línea. Os pego el código x si me podeis ayudar.

Código Delphi [-]
DATOSFACTURA.FechaOperacion:=TPVH.FIELDBYNAME('FECHA').ASSTRING; 
DATOSFACTURA.DescripcionFactura:='TPV1-'+FIELDBYNAME('N_VENTA').ASSTRING; 
TPV.FIRST; 
while NOT TPV.EOF do BEGIN 
    with DATOSFACTURA.DetallesFactura.IDDetalleFactura do begin 
        DescripcionDetalle:=FIELDBYNAME('ARTICULO').ASSTRING; 
        Cantidad:=FIELDBYNAME('CTDAD').ASSTRING; 
        ImporteUnitario:=FLOATTOSTR(ROUNDTO(FIELDBYNAME('PVP_E U').VALUE,-2)); 
        Descuento:=FIELDBYNAME('DTO').ASSTRING; 
        ImporteTotal:=FLOATTOSTR(ROUNDTO(FIELDBYNAME('IMPORTE_ EU').VALUE,-2)); 
    end; 
    TPV.NEXT; 
END; 
DATOSFACTURA.IMPORTETOTALFACTURA:=FLOATTOSTR(ROUNDTO(TPVH.FIELDBYNAME('TOTAL_EU').VALUE,-2));

Irreo 09-11-2022 13:25:57

Cita:

Empezado por sexxxwax (Mensaje 549074)
sólo me carga la última línea. Os pego el código x si me podeis ayudar.

De DELPHI no tengo ni idea, pero mirando ese bucle, no veo ningún código que me sugiera que estás agregando líneas de factura.
Veo por un lado asignaciones a Cantidad, Descuento, etc...
Y por otro lado veo que a cada vuelta entras en "IDDetalleFactura" con un With.
Si en Delphi con ese "with" inicial ya estás creando una nueva línea, entonces no me hagas caso, pero si ese lenguaje es parecido a otros que he usado, diría que estás asignando los valores todo el rato a la misma fila.

Neftali [Germán.Estévez] 09-11-2022 13:26:23

Cita:

Empezado por sexxxwax (Mensaje 549074)
Estoy montando el xml insertando datos d las tablas del tpv y al hacer el bucle para recorrer las líneas d la venta actual añadiendolas como iddetalleventa sólo me carga la última línea.

Es posible que para añadir cada línea debas hacer antes un Add:

Código Delphi [-]
var
   Detalle: IXMLIDDetalleFacturaType;
begin
   ...
   Detalle := ...DatosFactura.DetallesFactura.Add;
   // rellenar los valores
   Detalle.DescripcionDetalle := ...;
   Detalle.Cantidad := ...;
   Detalle.ImporteUnitario := ...;
   Detalle.Descuento := ...;
   Detalle.ImporteTotal := ...;

sexxxwax 09-11-2022 13:27:53

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 549060)
Bienvenido.
Si das el modelo de impresora será más fácil poder ayudarte.




si, lo siento, el modelo es una iguual TP8002 compatible con ESC/POS

sexxxwax 09-11-2022 14:09:14

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 549078)
Es posible que para añadir cada línea debas hacer antes un Add:
Código Delphi [-]
var
   Detalle: IXMLIDDetalleFacturaType;
begin
   ...
   Detalle := ...DatosFactura.DetallesFactura.Add;
   // rellenar los valores
   Detalle.DescripcionDetalle := ...;
   Detalle.Cantidad := ...;
   Detalle.ImporteUnitario := ...;
   Detalle.Descuento := ...;
   Detalle.ImporteTotal := ...;

Gracias pero el add no lo reconoce, esto tira sin error:

Código Delphi [-]
  while NOT TPV.EOF do
  BEGIN
    DATOSFACTURA.DetallesFactura.addchild('IDDetalleFactura');
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.addchild('DescripcionDetalle');
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.DescripcionDetalle := FIELDBYNAME('ARTICULO').ASSTRING;
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.addchild('Cantidad');
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.Cantidad := FIELDBYNAME('CTDAD').ASSTRING;
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.addchild('ImporteUnitario');
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.ImporteUnitario := FLOATTOSTR(ROUNDTO(FIELDBYNAME('PVP_E U').VALUE, -2));
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.addchild('Descuento');
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.Descuento := FIELDBYNAME('DTO').ASSTRING;
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.addchild('ImporteTotal');
    DATOSFACTURA.DetallesFactura.IDDetalleFactura.ImporteTotal := FLOATTOSTR(ROUNDTO(FIELDBYNAME('IMPORTE_ EU').VALUE, -2));
    TPV.NEXT;
  END;

pero obtengo esta salida:

Cita:

DetallesFactura
IDDetalleFactura
DescripcionDetalle = CORREO ALAVA
Cantidad = 4
ImporteUnitario = 2,3
Descuento = 0
ImporteTotal = 9,2
DescripcionDetalle
Cantidad
ImporteUnitario
Descuento
ImporteTotal
IDDetalleFactura
ImporteTotalFactura = 11,7

intento poner el formato d código delphi y en previsualizar se ve bien pero luego sale todo sin formato, sorry. Puede ser x este aviso??? 'Aún no tienes permitido poner enlaces ni imágenes'

sexxxwax 09-11-2022 14:34:20

Much@s a lo mejor os estareis partiendo la caja flipando conmigo, que no soy capaz d mandar un post en condiciones, no es mi intención dar curro al admin editando mis post, pero intento hacerlo bien.

Desarrollé una aplicación en los años 90, D1, D2... d unas 89.000 líneas de código, además dl schema d la bbdd que entre sp y triggers andará x las 2.500. Pero todo esto me supera, en todos los grupos hay un amigo patoso, tener paciencia conmigo.

Si alguien necesita código de lectura d cod d barras, facturación, etc..... estoy encantado d aportar mi granito d arena.

Un saludo a tod@s y gracias x la comprensión

Neftali [Germán.Estévez] 09-11-2022 15:12:07

Cita:

Empezado por sexxxwax (Mensaje 549080)
intento poner el formato d código delphi y en previsualizar se ve bien pero luego sale todo sin formato, sorry. Puede ser x este aviso??? 'Aún no tienes permitido poner enlaces ni imágenes'

Es posible que sea problema del previsualizador o del navegador (o de ambas cosas).
Prueba a no usar la previsualización.

Neftali [Germán.Estévez] 09-11-2022 15:31:05

Cita:

Empezado por sexxxwax (Mensaje 549080)
Gracias pero el add no lo reconoce, esto tira sin error:

Sí que funciona el Add.
Te pongo algo de código para trabajar en las facturas de TBAI, simplemente para que veas.

Un código como este (revisa sobre todo la parte del Add para las líneas):

Código Delphi [-]
uses
  ticketBaiV12, XMLDoc, XMLIntf;

procedure TForm3.Button1Click(Sender: TObject);
var
  TicketBAI: IXMLTicketBai;
  detalleFactura: IXMLIDDetalleFacturaType;
begin
  TicketBAI := NewTicketBai;

  TicketBAI.Cabecera.IDVersionTBAI := '1.2';
  //  ...
  detalleFactura := TicketBAI.Factura.DatosFactura.DetallesFactura.Add;
  detalleFactura.DescripcionDetalle := 'primera linea';
  detalleFactura.Cantidad := '1';
  detalleFactura.ImporteUnitario:= '100';
  detalleFactura.DescripcionDetalle := '10';
  detalleFactura.ImporteTotal := '90';
  detalleFactura := TicketBAI.Factura.DatosFactura.DetallesFactura.Add;
  detalleFactura.DescripcionDetalle := 'segunda linea';
  detalleFactura.Cantidad := '2';
  detalleFactura.ImporteUnitario:= '200';
  detalleFactura.DescripcionDetalle := '10';
  detalleFactura.ImporteTotal := '180';
  //...
  Memo1.Text := TicketBAI.XML;

  Memo1.Text := xmlDoc.FormatXMLData(TicketBAI.OwnerDocument.XML.Text);

end;

Genera una salida como esta (con 2 detalles de líneas):

Código:

<?xml version="1.0"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision">
  <Cabecera>
    <IDVersionTBAI>1.2</IDVersionTBAI>
  </Cabecera>
  <Sujetos/>
  <Factura>
    <DatosFactura>
      <DetallesFactura>
        <IDDetalleFactura>
          <DescripcionDetalle>10</DescripcionDetalle>
          <Cantidad>1</Cantidad>
          <ImporteUnitario>100</ImporteUnitario>
          <ImporteTotal>90</ImporteTotal>
        </IDDetalleFactura>
        <IDDetalleFactura>
          <DescripcionDetalle>10</DescripcionDetalle>
          <Cantidad>2</Cantidad>
          <ImporteUnitario>200</ImporteUnitario>
          <ImporteTotal>180</ImporteTotal>
        </IDDetalleFactura>
      </DetallesFactura>
    </DatosFactura>
  </Factura>
  <HuellaTBAI/>
</T:TicketBai>


josevalle 09-11-2022 19:54:33

Hash
 
Hola. El Hash te lo dan ellos. El que pones es el actual que lo cambiaron en mayo. Yo lo dejo modificable por si lo vuelven a cambiar.

Sanduzelai 10-11-2022 14:09:33

NIF Emisor incorrecto
 
Hola,
hoy he realizado mi primer envío de pruebas a la hacienda alavesa y he recibido lo siguiente:

Código PHP:

<FechaRecepcion>10-11-2022 13:29:39</FechaRecepcion>
    <
Estado>00</Estado>
    <
Descripcion>Recibido</Descripcion>
    <
Azalpena>Jasota</Azalpena>
    <
ResultadosValidacion>
      <
Codigo>015</Codigo>
      <
Descripcion>AVISONIF emisor no es correctono es contribuyente alavés o no está registrado en IAE</Descripcion>
      <
Azalpena>OHARRAJaulkitzailearen IFZ ez da zuzenaez da Arabako zergaduna edo ez dago JEZean erregistratuta</Azalpena>
    </
ResultadosValidacion

Me registre en su día como empresa desarrolladora para enviar a la hacienda de Gipuzkoa y ahora me he dado de alta para el entorno de test de Álava. No he hecho nada más.

¿Tengo que registrarme en algún otro lado para corregir este aviso?

En el entorno de PRO de Gipuzkoa estoy funcionando bien con el mismo NIF Emisor.
No se si se me esta escapando algo para Alava...

Sanduzelai 10-11-2022 15:00:23

NIF Emisor incorrecto
 
Revisando la Guía del entorno de pruebas veo:

Cita:

En el caso de que no se cumplan esas condiciones en el entorno de pruebas, se dará un aviso: “AVISO: NIF emisor no es correcto, no es contribuyente alavés o no está registrado en IAE”.
Este aviso no es bloqueante para hacer las pruebas. Pero si le sucede, podrá evitarlo enviando un mail a [email protected], indicando en el asunto del correo el texto “Pruebas TicketBAI: Nombre Empresa / Categoría: NIF Emisor” y aportando la siguiente información:
- NIF emisor
- Nombre y apellidos/Razón social
He mandado el correo con los datos tal y como indica para evitar que aparezca el aviso en mis pruebas, pero ahora me surge la duda:
Cuando pase al entorno de PRO, ¿me volverá a aparecer el AVISO?

Yo siempre realizo envíos de clientes:
Código PHP:

<EmitidaPorTercerosODestinatario>T</EmitidaPorTercerosODestinatario


Sanduzelai 10-11-2022 16:57:54

NIF Emisor incorrecto
 
Me respondo a mi mismo por si a alguien le viene bien.
Me han contestado esto:

Cita:

Ya hemos procedido a dar de alta el NIF en el entorno de pruebas.

El aviso es porque el NIF emisor no es alavés. En producción en principio el emisor debería ser alavés. Si no es así saldrá el aviso y para solucionarlo deberá pasarse por la hacienda alavesa.

Irreo 10-11-2022 18:35:32

Buenas,

Estaba repasando algunos envíos de facturas de hoy, y me he encontrado esto:



La numeración de facturas ya me dijeron los de Hacienda que "da igual" el orden en que se les envíen (aunque se recomienda que sean correlativos).

Lo que no me queda claro es si les va a gustar la hora....

¿Tenéis alguna experiencia con este tema? Es decir, si os haya pasado enviar alguna factura así y que no os hayan dicho nada.

Por el momento están como OK, y tampoco han llegado avisos de "posible error de encadenamiento".

Gracias.

edari 11-11-2022 02:00:08

Hacieenda Alava - Facturas a bares de chinos
 
Buenos días,


Tengo un problema con los típicos bares chinos


En la parte del IDOTRO ll grabo el código de país CN que lo saco de la lista de países de la Hacienda nacional ( https://sede.agenciatributaria.gob.e...rritorios.html ) porque de la de Alava no llegué a ella y me devuevlve 54-AVISO: Error en factura: Error en país del destinatario no nacional


Luego tengo un error 79-AVISO: Error validación de negocio [Importe total no coincide con el sumatorio de desglose


Le pongo causa de la exención E2 y en la base imponible pues eso.


Gracias de antemano

Neftali [Germán.Estévez] 11-11-2022 07:49:54

Cita:

Empezado por Irreo (Mensaje 549107)



La numeración de facturas ya me dijeron los de Hacienda que "da igual" el orden en que se les envíen (aunque se recomienda que sean correlativos).

¿Tenéis alguna experiencia con este tema? Es decir, si os haya pasado enviar alguna factura así y que no os hayan dicho nada.
Por el momento están como OK, y tampoco han llegado avisos de "posible error de encadenamiento".
Gracias.

Entiendo que el encadenamiento no es en el orden en que las estás viendo en pantalla, por lo tanto si las ordenaras por fecha/hora coincidiría con el orden del encadenamiento, por lo tanto entiendo que no hay problema.
No cuadra con el orden del primer ID de la tabla, pero sí cn la fecha/hora (no se si me explico).

Irreo 11-11-2022 08:17:50

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 549114)
Entiendo que el encadenamiento no es en el orden en que las estás viendo en pantalla, por lo tanto si las ordenaras por fecha/hora coincidiría con el orden del encadenamiento, por lo tanto entiendo que no hay problema.
No cuadra con el orden del primer ID de la tabla, pero sí cn la fecha/hora (no se si me explico).

El encadenamiento está en el orden de la imagen, sí, no por fecha:

1713 -> 1712 -> 1711

En nuestro caso por un lado tenemos una aplicación de Windows que está en los puntos de venta, que es la que genera una factura, asigna la fecha, etc.. y luego la envía a un API intermedio (PHP) que está en un servidor. Este API simplemente recibe facturas, las encola, y las envía, poniendo el encadenamiento según van entrando en cola.

La factura 1713 ha tardado 3 minutos en enviarse a la cola (desde Windows), y creo que es porque es una factura completa. Me da que la aplicación de Windows está generando la factura, con su fecha y todo, y después en tienda se han puesto a introducir datos de cliente.

El tema es que (aparte del API) en esta aplicación yo solo me he encargado de hacer una función que envía los datos al API (esta función recopila los datos de la factura, genera un objeto JSON, etc. y lo envía al API).

Pero el resto de funcionalidades ya existentes, más relacionadas con clientes/pedidos etc. están fuera de mi "jurisdicción".

Les voy a pedir que entren en la Sede Electrónica a ver si hay alguna alarma.

En cualquier caso, les voy a pedir que la fecha de expedición se guarde justo antes de llamar a mi función.

De todas formas, preguntaba por saber si alguien más envía facturas así y no pasa nada.

La numeración entiendo que da igual mientras haya encadenamiento correcto (1600 -> 1607 -> 1606...), pero que la fecha de emisión no siga el orden de la numeración ya lo veo más raro...

HerensugeBeltz 11-11-2022 11:17:50

Cita:

Empezado por Irreo (Mensaje 549115)
En nuestro caso por un lado tenemos una aplicación de Windows que está en los puntos de venta, que es la que genera una factura, asigna la fecha, etc.. y luego la envía a un API intermedio (PHP) que está en un servidor. Este API simplemente recibe facturas, las encola, y las envía, poniendo el encadenamiento según van entrando en cola.

A ver si lo he pillado:
El TPV1 encola la factura 1711 y, mientras el TPV2 prepara la factura 1712 (ya enlazada con la 1711), el TPV1 (o el 3) encola la factura 1713. Por último, el TPV2 encola la 1712.

¿no se puede enlazar y firmar la factura 1712 al final del proceso para evitar ese retraso?
Igual digo una chorrada, pero otra opción que puede que no sea viable sería asignar a cada TPV una serie diferente (por ej. T1, T2...). Entonces al servidor le llegarían las facturas T1-1711, T1-1712 (la 1713 anterior) y T2-17xx (la 1712 anterior).

Irreo 11-11-2022 12:10:03

Cita:

Empezado por HerensugeBeltz (Mensaje 549125)
A ver si lo he pillado:
El TPV1 encola la factura 1711 y, mientras el TPV2 prepara la factura 1712 (ya enlazada con la 1711), el TPV1 (o el 3) encola la factura 1713. Por último, el TPV2 encola la 1712.

¿no se puede enlazar y firmar la factura 1712 al final del proceso para evitar ese retraso?
Igual digo una chorrada, pero otra opción que puede que no sea viable sería asignar a cada TPV una serie diferente (por ej. T1, T2...). Entonces al servidor le llegarían las facturas T1-1711, T1-1712 (la 1713 anterior) y T2-17xx (la 1712 anterior).

No vas mal encaminado, aunque no ha sido justamente así :)

Antes de nada, por ampliar información: Las TPV llaman a una función "EmitirFactura(Codigo)". Aquí es donde entro yo: A partir del identificador interno (Código) obtengo serie, número factura, fecha, así como las cabeceras, líneas, etc...
Una vez hecho esto, envío el JSON al API.

Es decir, esta función es lo último que se llama cuando en la base de datos de la oficina central ya está la factura creada, de cara a obtener el QR.

En el lado del API, en servidor, tengo unas bases de datos ya 100% relacionadas con TicketBAI, donde guardo las facturas recibidas, logs de envíos, etc...

Cuando me llega el JSON de una factura, agrego el registro como "Pendiente", la encadeno a la anterior, firmo, y devuelvo el QR. Un tercer proceso que se ejecuta cada 10 segundos, enviará la factura después, pero la TPV ya ha recibido su QR.

Es decir, en el momento que se llama a "EmitirFactura" ya está asignada la fecha y numeración.

Ahora, al lío:
Primero, es la factura 1713 la que han tardado en enviar, al ser completa.

Viendo los números, lo que creo que ha pasado es esto:

- TPV-1 emite la factura 1711 a las 17:56 (el API la pone en cola, encadena 1710)
- TPV-2 genera (NO emite) la factura a las 17:57 con los datos del pedido, pero no le asigna numeración (asumo que están rellenando datos de cliente) (no se envía al API ni encola nada)
- TPV-3 emite la factura 1712 a las 18:00 (el API la pone en cola, encadena 1711)
- TPV-2 termina de meter los datos del cliente, y al emitir la factura le asigna la numeración 1713 (el API la pone en cola, encadena 1712)

Lo voy a confirmar con la persona que se ha encargado de implementar esto en las TPV. De todas formas la fecha se debería asignar en el momento de pulsar el botón de cerrar el pedido para emitir el ticket. De este modo, la factura 1713 habría sido por ejemplo a las 18:01

Y justo ahora según escribo esto, estoy viendo que la factura 1714 está marcada como emitida a las 17:59.

Así que no me extrañaría si los de Hacienda nos den algún tirón de orejas...

APO 11-11-2022 13:14:45

Cita:

Empezado por sexxxwax (Mensaje 549074)
Buenas a tod@s, estoy migrando un programa de D6 a D10 con todo lo que supone d incompatibilidades (componentes bde, informes qr, ...) y ahora encima esto del ticketbai; estoy leyendo el foro d ticketbai (voy x la página 60) y me imagino las horas y roturas d cabeza que llevais, la cantidad d errores que habeis solucionado entre todos, así que os felicito.

Yo necesitaría algo d ayuda, así que pondré varias cosas x si alguno tiene tiempo o ganas d ayudarme, d todas formas gracias x anticipado.

Estoy montando el xml insertando datos d las tablas del tpv y al hacer el bucle para recorrer las líneas d la venta actual añadiendolas como iddetalleventa sólo me carga la última línea. Os pego el código x si me podeis ayudar.

Código Delphi [-]
DATOSFACTURA.FechaOperacion:=TPVH.FIELDBYNAME('FECHA').ASSTRING; 
DATOSFACTURA.DescripcionFactura:='TPV1-'+FIELDBYNAME('N_VENTA').ASSTRING; 
TPV.FIRST; 
while NOT TPV.EOF do BEGIN 
    with DATOSFACTURA.DetallesFactura.IDDetalleFactura do begin 
        DescripcionDetalle:=FIELDBYNAME('ARTICULO').ASSTRING; 
        Cantidad:=FIELDBYNAME('CTDAD').ASSTRING; 
        ImporteUnitario:=FLOATTOSTR(ROUNDTO(FIELDBYNAME('PVP_E U').VALUE,-2)); 
        Descuento:=FIELDBYNAME('DTO').ASSTRING; 
        ImporteTotal:=FLOATTOSTR(ROUNDTO(FIELDBYNAME('IMPORTE_ EU').VALUE,-2)); 
    end; 
    TPV.NEXT; 
END; 
DATOSFACTURA.IMPORTETOTALFACTURA:=FLOATTOSTR(ROUNDTO(TPVH.FIELDBYNAME('TOTAL_EU').VALUE,-2));


Yo lo hago de la siguiente manera:

Código Delphi [-]
var
   FicheroXML: IXMLTicketBai;

...

            with FicheroXML.Factura.DatosFactura do
            begin
               FechaOperacion:=FormatDateTime('dd-mm-yyyy',qExec.FieldByName('FECHA').AsDateTime);
               DescripcionFactura:='VENTAS AL POR MENOR EESS';
               //Detalle factura
               qExec.First;
               i:=0;
               while not qExec.Eof do
               begin
                  DetallesFactura.Add;
                  DetallesFactura.IDDetalleFactura[i].DescripcionDetalle:=trim(qExec.FieldByName('DESCRIPCION_PRODUCTO').AsString);
                  DetallesFactura.IDDetalleFactura[i].Cantidad:=TransFloat(qExec.FieldByName('UNIDADES').AsFloat,2);
                  DetallesFactura.IDDetalleFactura[i].ImporteUnitario:=TransFloat(qExec.FieldByName('PRECIO_VENTA').AsFloat,8); //Importe unitario SIN  IVA
                  if Redondeo(qExec.FieldByName('PRECIO_VENTA').AsFloat,2)<>Redondeo(qExec.FieldByName('PRECIO').AsFloat,  2) then
                  begin
                     //Importe en euros del descuento de la línea de factura (el importe de descuento ha de ir siempre en positivo).
                     DetallesFactura.IDDetalleFactura[i].Descuento:=TransFloat((qExec.FieldByName('PRECIO_VENTA').AsFloat-qExec.FieldByName('PRECIO').AsFloat) *
                                                                                Redondeo(qExec.FieldByName('UNIDADES').AsFloat,2),2);
                  end
                  else
                  begin
                     DetallesFactura.IDDetalleFactura[i].Descuento:='0.00';
                  end;
                  DetallesFactura.IDDetalleFactura[i].ImporteTotal:=TransFloat(qExec.FieldByName('IMPORTE_IVA').AsFloat,2); //Importe total CON IVA
                  qExec.Next;
                  i:=i+1;
               end;
               ImporteTotalFactura:=TransFloat(qExec.FieldByName('TOTAL').AsFloat,2); //Importe total de la factura simplificada
               //Claves
               Claves.Add;
               Claves.IDClave[0].ClaveRegimenIvaOpTrascendencia:='01'; //Operación de régimen general
            end;


La franja horaria es GMT +2. Ahora son las 01:38:16.

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