Impresión Venta
<!--:
F.MetaData_Set('titulo',F.Concat('Factura nº',v.Factura.NumeroDeFacturaCompleto,' - ',v.Factura.DenominacionRazonSocialCliente))
F.MetaData_Set('email_asunto',F.Concat('Factura de ',D.EmpresaActual.TextoPrincipal,', Nº',v.Factura.NumeroDeFacturaCompleto))
if V.Factura.ReferenciaCliente.EmailStripe <> ''
F.MetaData_Set('email_destino1',v.Factura.ReferenciaCliente.EmailStripe)
else
F.MetaData_Set('email_destino1',v.Factura.ReferenciaCliente.IdentificadorAcceso)
end if
@ ---- Tabla Conceptos ----
txt col_Concepto = 'Concepto'
txt col_ConceptoDtosConfig = 'Dtos'
txt col_PrecioUnidad = 'P. Unidad'
txt col_Unidades = 'Unidades'
txt col_Descuentos = 'Descuentos'
txt col_Total = 'Total'
num TablaID = F.DataTable_New(v.col_Concepto,v.col_PrecioUnidad,v.col_Unidades,v.col_ConceptoDtosConfig,v.col_Descuentos,v.col_Total)
@ Ejemplo - Cotizaciones
F.DataListLoad(S.Secciones.VentasIngresosLista.ID,1,100000)
F.DataListLoadAddFilter(S.Secciones.VentasIngresosLista.ID,S.Campos.VentasIngresosLista.RelacionElementoContenedorListador.id,'=',V.Factura)
F.ProcessDataList_Ini(S.Secciones.VentasIngresosLista.ID)
F.DataTable_AddRow(v.TablaID)
F.DataTable_SetValueText(v.TablaID,v.col_Concepto,I.VentasIngresosLista.TextoPrincipal)
F.DataTable_SetValueMoney(v.TablaID,v.col_PrecioUnidad,I.VentasIngresosLista.ImportePrecioUnidad)
F.DataTable_SetValueNum(v.TablaID,v.col_Unidades,I.VentasIngresosLista.CantidadUnidades)
txt DtoFijo = F.FormatMoney(I.VentasIngresosLista.ImporteDescuentoFijoUnidad)
txt DtosPorciento = F.FormatPercentage(I.VentasIngresosLista.SumaDescuentosPorcientoPorciento)
if I.VentasIngresosLista.ImporteDescuentoFijoUnidad <> 0 y I.VentasIngresosLista.SumaDescuentosPorcientoPorciento<>0
F.DataTable_SetValue(v.TablaID,v.col_ConceptoDtosConfig,F.Concat(v.DtoFijo,'+',v.DtosPorciento))
elseif I.VentasIngresosLista.ImporteDescuentoFijoUnidad <> 0
F.DataTable_SetValue(v.TablaID,v.col_ConceptoDtosConfig,F.Concat(v.DtoFijo))
elseif I.VentasIngresosLista.SumaDescuentosPorcientoPorciento <> 0
F.DataTable_SetValue(v.TablaID,v.col_ConceptoDtosConfig,F.Concat(v.DtosPorciento))
end if
F.DataTable_SetValueMoney(v.TablaID,v.col_Descuentos,I.VentasIngresosLista.ImporteTotalDescuentos)
F.DataTable_SetValueMoney(v.TablaID,v.col_Total,I.VentasIngresosLista.ImporteTotalConcepto)
F.ProcessDataList_End
F.DataTable_ColumnDeleteIfIsEmpty(v.TablaID,v.col_ConceptoDtosConfig)
F.DataTable_ColumnDeleteIfIsEmpty(v.TablaID,v.col_Descuentos)
@ ---- BASE IMPONIBLE ----
txt col_bi = 'Base Imponibe'
txt col_bi_IVA = 'IVA %'
txt col_bi_IVACuota = 'Cuota IVA'
txt col_bi_RE= 'R.E %'
txt col_bi_RECuota= 'Cuota R.E'
num TablaBIID = F.DataTable_New(v.col_bi,v.col_bi_IVA,v.col_bi_IVACuota,v.col_bi_RE,v.col_bi_RECuota)
if v.Factura.ImporteBaseImponible1 <> 0
@ Base imponible -> 1
F.DataTable_AddRow(v.TablaBIID)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi,v.Factura.ImporteBaseImponible1)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_IVA,v.Factura.ReferenciaImpuesto1.ValorPorciento)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_IVACuota,v.Factura.ImporteBaseImponible1CuotaIVA)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_RE,v.Factura.ReferenciaImpuesto1.RecargoEquivalenciaPorciento)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_RECuota,v.Factura.ImporteBaseImponible1CuotaRE)
end if
if v.Factura.ImporteBaseImponible2 <> 0
@ Base imponible -> 2
F.DataTable_AddRow(v.TablaBIID)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi,v.Factura.ImporteBaseImponible2)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_IVA,v.Factura.ReferenciaImpuesto2.ValorPorciento)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_IVACuota,v.Factura.ImporteBaseImponible2CuotaIVA)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_RE,v.Factura.ReferenciaImpuesto2.RecargoEquivalenciaPorciento)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_RECuota,v.Factura.ImporteBaseImponible2CuotaRE)
end if
if v.Factura.ImporteBaseImponible3 <> 0
@ Base imponible -> 3
F.DataTable_AddRow(v.TablaBIID)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi,v.Factura.ImporteBaseImponible3)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_IVA,v.Factura.ReferenciaImpuesto3.ValorPorciento)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_IVACuota,v.Factura.ImporteBaseImponible3CuotaIVA)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_RE,v.Factura.ReferenciaImpuesto3.RecargoEquivalenciaPorciento)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_RECuota,v.Factura.ImporteBaseImponible3CuotaRE)
end if
if v.Factura.ImporteBaseImponibleExenta <> 0
@ Base imponible -> Exenta
F.DataTable_AddRow(v.TablaBIID)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi,v.Factura.ImporteBaseImponibleExenta)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_IVA,0)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_IVACuota,0)
F.DataTable_SetValuePercentage(v.TablaBIID,v.col_bi_RE,0)
F.DataTable_SetValueMoney(v.TablaBIID,v.col_bi_RECuota,0)
end if
if V.Factura.AplicarRecagoDeEquivalencia = 0
F.DataTable_ColumnDelete(v.TablaBIID,v.col_bi_RE)
F.DataTable_ColumnDelete(v.TablaBIID,v.col_bi_RECuota)
end if
@ ---- TOTAL ----
num TotalReCargoDeEquivalencia = V.Factura.ImporteBaseImponible1CuotaRE + V.Factura.ImporteBaseImponible2CuotaRE + V.Factura.ImporteBaseImponible3CuotaRE
num TotalCuota = V.Factura.ImporteBaseImponible1CuotaIVA + V.Factura.ImporteBaseImponible2CuotaIVA + V.Factura.ImporteBaseImponible3CuotaIVA
txt c_Concepto = 'Concepto'
txt c_Importe = 'Importe'
num TablaTotales= F.DataTable_New(v.c_Concepto,v.c_Importe)
F.DataTable_AddRow(v.TablaTotales)
F.DataTable_SetValue(v.TablaTotales,v.c_Concepto,'Subtotal')
F.DataTable_SetValueMoney(v.TablaTotales,v.c_Importe,v.Factura.ImporteSubtotal)
if V.TotalCuota <> 0
F.DataTable_AddRow(v.TablaTotales)
F.DataTable_SetValue(v.TablaTotales,v.c_Concepto,'IVA')
F.DataTable_SetValueMoney(v.TablaTotales,v.c_Importe,v.TotalCuota)
end if
if V.TotalReCargoDeEquivalencia <> 0
F.DataTable_AddRow(v.TablaTotales)
F.DataTable_SetValue(v.TablaTotales,v.c_Concepto,'R.E')
F.DataTable_SetValueMoney(v.TablaTotales,v.c_Importe,v.TotalReCargoDeEquivalencia)
end if
if v.Factura.ImporteTotalRetencion <> 0
F.DataTable_AddRow(v.TablaTotales)
F.DataTable_SetValue(v.TablaTotales,v.c_Concepto,'Retención')
F.DataTable_SetValueMoney(v.TablaTotales,v.c_Importe,v.Factura.ImporteTotalRetencion * -1)
end if
if v.Factura.ImporteTotalSuplidos <> 0
F.DataTable_AddRow(v.TablaTotales)
F.DataTable_SetValue(v.TablaTotales,v.c_Concepto,'Suplidos')
F.DataTable_SetValueMoney(v.TablaTotales,v.c_Importe,v.Factura.ImporteTotalSuplidos)
end if
F.DataTable_AddRow(v.TablaTotales)
F.DataTable_SetValue(v.TablaTotales,v.c_Concepto,'Total')
F.DataTable_SetValueMoney(v.TablaTotales,v.c_Importe,v.Factura.ImporteTotal)
@ ---- Detalles ----
txt c_NumeroDeFactura = 'Factura'
txt c_Fecha = 'Fecha'
txt c_Cliente = 'Cliente'
num TablaResumen = F.DataTable_New(v.c_NumeroDeFactura,v.c_Fecha,v.c_Cliente)
F.DataTable_AddRow(v.TablaResumen)
F.DataTable_SetValue(v.TablaResumen,v.c_NumeroDeFactura,v.Factura.NumeroDeFacturaCompleto)
F.DataTable_SetValue(v.TablaResumen,v.c_Fecha,F.Cast_DateToText(v.Factura.FechaExpedicion,S.Enumeraciones.formatofecha.diamesaño))
F.DataTable_SetValue(v.TablaResumen,v.c_Cliente,F.Concat('<span style="font-size:12px"><b>',v.Factura.DenominacionRazonSocialCliente,'</b> - ',v.Factura.NIFCliente,'<br>',v.Factura.DireccionCliente,'</span>'))
:-->
<!doctype html>
<html class="h-100">
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.dinaup.com/dinaup/link/bootstrap.min.css">
<style>
@page {
size: A4;
margin: 4mm;
}
table {
border-collapse: collapse;
border-radius: 4px;
overflow: hidden;
}
.tabla_totales tbody tr:last-child {
font-size: 19px;
font-weight: bold;
background: #f1f1f1;
}
.ico_email {
opacity: 0.8;
position: relative;
top: 3px;
display: inline-block;
width: 14px;
height: 14px;
background-size: 14px;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAZlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwbJTWAAAAIXRSTlMA2QXz68/3RiYTqXgeGgvixby2oJuain5wY1I5Mi7crXHmGKyrAAAAnklEQVQoz62RSQ7DIBAE22AweN93J5n/fzITJxJy4Og6oKYaIY0Gd5JnKvpDZTlgYwoQWwwUZMBRh3x9AFhi76OF9VjC9lffW5QjqFqBTTmtNmCtCBxbAzHLr5azgGk5gBg9CRTpJ6UFyknTr2CiBEii83zw1RXnWyGQPzleC5IvITJJrnDEPJBXeECGvUQTLhrsOuT1DpjOX1RncCNvhLUpMwj6/RgAAAAASUVORK5CYII=')
}
.ico_telefono {
opacity: 0.8;
position: relative;
top: 3px;
display: inline-block;
width: 14px;
height: 14px;
background-size: 14px;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAXVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5BxTwAAAAHnRSTlMAUfDnG/vtbkQpCgT34t3AupaKPC0UDvShjHJYST7dSqqiAAAAgklEQVQoz63Q1w6EQAgFUJim61jWtsXC/3+motFE4dH7eE/CDMDTcdirPeZUOKX/GCJ6KzARJ5EwbhAktBtYCdmX+xlkfitUUYGXX6UBJTU/MmiblCyJNiywNLEtwo1Tz1JZvoG7iqEjtr9IV56Ctz3/fu9zJ75Q8zyDIBM7TDN4OAuTGAuqZXOqHwAAAABJRU5ErkJggg==')
}
.bloquesaldo {
background: #f2f2f2;
padding: 10px;
display: inline-block;
}
* {
font-family: 'Roboto', 'Segoe UI', 'Ubuntu', 'Cantarell', 'Noto Sans', 'Liberation Sans', sans-serif;
}
body {
color: #535b61;
font-size: 14px;
line-height: 22px;
line-height: 15px;
-webkit-print-color-adjust: exact !important
}
th {
font-style: regular;
font-weight: 300;
padding: 6px
}
thead,
thead th {
border-bottom: 2px solid rgb(212, 212, 212);
color: #080606;
font-weight: bold;
text-transform: uppercase;
font-size: 11px;
text-align: left;
}
thead th[data-f='3'] {
text-align: right;
}
table.rnd {
border-collapse: collapse;
border-radius: 4px;
overflow: hidden;
}
.right,
.r {
text-align: right
}
.left,
.l {
text-align: left
}
.center,
.c {
text-align: center
}
td {
padding: 4px;
vertical-align: top;
}
tr { page-break-inside: avoid;}
td[data-f='3'],
td[data-f='2'] {
text-align: right;
font-family: 'Courier New', monospace
}
.right,
.r {
text-align: right;
}
.left,
.l {
text-align: left;
}
.center,
.c {
text-align: center;
}
html {
margin: 0px;
padding: 0px
}
</style>
<meta charset="UTF-8">
</head>
<body style="min-height:calc(100% - 10px)" class="d-flex flex-column justify-content-between ">
<div>
<div class="d-flex justify-content-around">
<div class="col-auto">
<div class="row m-4">
<div class="col-auto align-self-center">
<img src="<!--: F.Write(D.EmpresaActual.URLLogoFactura) :-->" width="60" />
</div>
<div class="col-auto align-self-center">
<div><b><!--: F.Write(v.Factura.DenominacionRazonSocialEmpresa) :--></b>.
</div>
<div><!--: F.Write(v.Factura.NIFEmpresa) :-->.
<!--: F.Write(v.Factura.DireccionEmpresa) :--><br>
<!--: if v.Factura.ReferenciaDatosFiscalesEmpresa.EmailCliente <> '' :-->
<div class="ico_email"></div>
<!--: F.Write(v.Factura.ReferenciaDatosFiscalesEmpresa.EmailCliente) :-->
<!--: end if :-->
<!--: if v.Factura.ReferenciaDatosFiscalesEmpresa.Telefono <> '' :-->
<div class="ico_telefono"></div>
<!--: F.Write(v.Factura.ReferenciaDatosFiscalesEmpresa.Telefono) :-->
<!--: end if :-->
</div>
</div>
</div>
</div>
</div>
<div style="min-height:30px"></div>
<div class="w-100">
<div>
<!--: F.Write(F.DataTable_Build(v.TablaResumen,'html| class=" w-100 rnd"')) :-->
</div>
<div class="col-6">
</div>
</div>
<div style="min-height:30px"></div>
<!--* Base imponible -->
<!--: F.Write(F.DataTable_Build(v.TablaID,'html|class="w-100" class="rnd"')) :-->
<div style="min-height:50px"></div>
<div class="w-100 d-flex">
<div class="w-50">
<!--: F.Write(F.DataTable_Build(v.TablaBIID,'html|class="rnd" ')) :-->
</div>
<div class="w-50">
<!--: F.Write(F.DataTable_Build(v.TablaTotales,'html|class="rnd tabla_totales" style="width:100%" ')) :-->
</div>
</div>
<!--# -->
<!--* Forma de Pago -->
<!--: if v.Factura.CondicionesDePago <> '' o v.Factura.FechaDeVencimiento <> '' :-->
<hr>
<table class="w-100" cellpadding="0" cellspacing="0" border="0">
<tr>
<!--: if v.Factura.CondicionesDePago <> '' :-->
<td align="left">
<b>Condiciones de pago:</b><br />
<!--: F.WriteText(v.Factura.CondicionesDePago) :-->
</td>
<!--: end if :-->
<!--: if v.Factura.FechaDeVencimiento <> '' :-->
<td align="right">
<b>Vencimiento:</b><br />
<!--: F.WriteText(F.Cast_DateToText(v.Factura.FechaDeVencimiento,S.Enumeraciones.formatofecha.diamesaño)) :-->
</td>
<!--: end if :-->
</tr>
</table>
<!--: end if :-->
<!--# -->
<!--: if v.Factura.NotasAIncluirEnLaFactura <> '' :-->
<hr>
<div class="d-flex justify-content-center">
<!--: F.Write(v.Factura.NotasAIncluirEnLaFactura) :-->
</div>
<!--: end if :-->
<!--: if v.Factura.ImporteSaldoEmitido > 0 :-->
<hr>
<div class="d-flex justify-content-center">
<div class="bloquesaldo c">
<b>SALDO</b><br>
¡Ha acumulado
<b><!--: F.WriteMoney(v.Factura.ImporteSaldoEmitido,2) :--></b>
de saldo promocional con esta compra! <br>
</div>
</div>
<!--: end if :-->
<!--: if v.Factura.ImporteSaldoEmitido <> 0 o v.Factura.ImporteSaldoAplicado <> 0 :-->
<hr>
* A fecha
<!--: F.WriteDateTime(D.DatosEspeciales.FechaYHoraActual,S.Enumeraciones.formatofecha.diamesañohm) :-->
dispone de
<!--: F.WriteMoney(v.Factura.ReferenciaCliente.ImporteSaldoAcumulado,2) :-->
de saldo promocional que puede aplicar como descuentos en compras futuras.
<!--: end if :-->
</div>
<!--: if v.Factura.empresa.RegistroMercantilDe <> '' :-->
<div>
<hr>
<!--: F.WriteText(F.Concat2(F.Texto_Unir6('Registro mercantil de ',v.Factura.empresa.RegistroMercantilDe,', Tomo ',v.Factura.empresa.RegistroMercantilTomo,', Folio ',v.Factura.empresa.RegistroMercantilFolio),F.Concat4(', Hoja ',v.Factura.empresa.RegistroMercantilHoja,', Inscripción ',v.Factura.empresa.RegistroMercantilInscripcion))) :-->
</div>
<!--: end if :-->
</body>
</html>
Última actualización
¿Te fue útil?