diff options
author | Karl Berry <karl@freefriends.org> | 2020-11-16 22:14:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-11-16 22:14:32 +0000 |
commit | b0a10333088aacb507dc2370a5fa57f117417288 (patch) | |
tree | a58e68ee3af904dd5c4c5aab0b1bc23a917754ad /Master/texmf-dist/source/latex/factura/factura.dtx | |
parent | 95813d4e6ef2d9f8eb6f26893f2dab04ba89c5a1 (diff) |
factura (16nov20)
git-svn-id: svn://tug.org/texlive/trunk@56948 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/factura/factura.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/factura/factura.dtx | 896 |
1 files changed, 618 insertions, 278 deletions
diff --git a/Master/texmf-dist/source/latex/factura/factura.dtx b/Master/texmf-dist/source/latex/factura/factura.dtx index 58776779e2d..526d28d75ad 100644 --- a/Master/texmf-dist/source/latex/factura/factura.dtx +++ b/Master/texmf-dist/source/latex/factura/factura.dtx @@ -27,6 +27,7 @@ % factura-ejemplo-factura05.tex, factura-ejemplo-factura06.tex, % factura-ejemplo-factura07.tex, factura-ejemplo-factura08.tex, % factura-ejemplo-factura09.tex, factura-ejemplo-factura10.tex, +% factura-ejemplo-notadecredito.tex, factura-ejemplo-notadedebito.tex, % factura-ejemplo-reporte1.tex, factura-ejemplo-reporte2.tex, % factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<*internalbatchfile> @@ -66,6 +67,7 @@ factura-ejemplo-factura03.tex, factura-ejemplo-factura04.tex, factura-ejemplo-factura05.tex, factura-ejemplo-factura06.tex, factura-ejemplo-factura07.tex, factura-ejemplo-factura08.tex, factura-ejemplo-factura09.tex, factura-ejemplo-factura10.tex, +factura-ejemplo-notadecredito.tex, factura-ejemplo-notadedebito.tex, factura-ejemplo-reporte1.tex, factura-ejemplo-reporte2.tex, factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. @@ -102,6 +104,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \def\repdos{factura-ejemplo-reporte2.tex} \def\reptres{factura-ejemplo-reporte3.tex} \def\cotiza{factura-ejemplo-cotizacion.tex} +\def\notadecredito{factura-ejemplo-notadecredito.tex} +\def\notadedebito{factura-ejemplo-notadedebito.tex} \def\prefac{factura-ejemplo-prefactura.tex} \def\beispiel{factura-beispiel-rechnung.tex} \def\auxejemplo{factura-ejemplo-aux.tex} @@ -122,6 +126,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \generate{\file{\repdos}{\from{\jobname.dtx}{repdos}}} \generate{\file{\reptres}{\from{\jobname.dtx}{reptres}}} \generate{\file{\cotiza}{\from{\jobname.dtx}{cotiza}}} +\generate{\file{\notadecredito}{\from{\jobname.dtx}{notadecredito}}} +\generate{\file{\notadedebito}{\from{\jobname.dtx}{notadedebito}}} \generate{\file{\prefac}{\from{\jobname.dtx}{prefac}}} \generate{\file{\beispiel}{\from{\jobname.dtx}{beispiel}}} \generate{\file{\auxejemplo}{\from{\jobname.dtx}{aux}}} @@ -173,7 +179,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<class>\ProvidesClass{factura} %<def>\ProvidesFile{factura.def} %<*class|def> -[2020/04/18 v3.73 +[2020/11/15 v4.00 %<class>Clase para elaborar facturas legales %<class>en la Repu'blica Bolivariana de Venezuela. %<def>Archivo de valores iniciales y condiciones de borde para factura.cls @@ -343,8 +349,13 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. {\protect\ttfamily#1}\encapchar usage}\@esphack} \def\es@yearl{l año} +\def\DescribeMacro{\noindent\leavevmode\@bsphack + \begingroup\MakePrivateLetters\Describe@Macro} + +\def\PrintDescribeMacro#1{\setstretch{1}\strut \MacroFont \color{black}\string #1\ } + % Definimos el comando para describir opciones, que inexplicablemente falta en doc.sty: - \def\DescribeOption{\leavevmode\@bsphack\begingroup\MakePrivateLetters + \def\DescribeOption{\noindent\leavevmode\@bsphack\begingroup\MakePrivateLetters \Describe@Option} \def\Describe@Option#1{\endgroup \marginpar{\raggedleft\PrintDescribeOption{#1}}% @@ -354,7 +365,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. (opción)\encapchar usage}% \index{opciones:\levelchar#1\actualchar{\protect\ttfamily#1}\encapchar usage}\@esphack} - \def\PrintDescribeOption#1{\strut \MacroFont #1\ } + \def\PrintDescribeOption#1{\setstretch{1}\strut \MacroFont \color{black}#1\ } % Redefinimos el comando del encabezado del índice: \def\index@prologue{% @@ -399,7 +410,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \phantomsection \addcontentsline{toc}{section}{\todoname} \todos - \section*{Información específica de esta versión + Reconversión Monetaria} + \section*{Información específica de esta versión} % v2.82 Desde la versión v2.82 de esta clase, para poder compilar con \LuaLaTeX{} es necesaria la versión v2.26 del paquete |zref|, de fecha 2016/05/21, y la versión v1.18 de |atbegshi| de fecha 2016/06/09. % v2.82 -> Esta versión de |factura| se sacó principalmente para corregir un error introducido en la versión anterior v2.72 en cuanto a las referencias, para agregar la opción |numitem| que enumera los ítems en la factura y para que la línea diagonal (opción |linea|) funcione correctamente siempre. @@ -458,14 +469,23 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \begin{itemize} \item La tasa de IVA adicional se ajustó a su valor actualizado (31\%). - \item Los comandos \cs{NotaPrevia}. \cs{NotaInterna}. \cs{NotaExterna} y \cs{NotaFinal} aceptan uno o dos asteriscos. Sin asteriscos, una segunda invocación del comando para la nota hace que se sustituya la primera nota especificada; con un asterisco, agrega al final de la nota ya existente, y con dos asteriscos, agrega lo nuevo al principio de la nota ya existente. + \item Los comandos \cs{NotaPrevia}. \cs{NotaInterna}. \cs{NotaExterna} y \cs{NotaFinal} aceptan uno o dos asteriscos. Sin asteriscos, una segunda invocación del comando para la nota hace que se sustituya la primera nota especificada; con un asterisco, agrega al final de la nota ya existente ({\slshape append}), y con dos asteriscos, agrega lo nuevo al principio de la nota ya existente ({\slshape prepend}). + \item Desaparece la opción |denom| en favor de la nueva opción |sindenom|. Lo predeterminado ahora es que la clase escriba la denominación “FACTURA” del documento y su número, porque ese es el formato apropiado de las formas libres. + \item Corregidas las cajas hechas con \tikz para que no se superpusieran al fondo establecido con \cs{FondoFactura}. + \item Agregamos el texto “FORMA LIBRE” en las {\slshape prefacturas} en una posición ajustable con el comando correspondiente. + \item Corregido el número de dígitos de la numeración del documento. Estaba en 5 dígitos y son 6 dígitos según la legislación. + \item Se hizo un pequeño ajuste en el margen superior de la factura y en la posición del texto de la denominación y de la fecha. + \item Agregadas las opciones |sinencabezadofactura| y |sinencabezadoreporte| para no imprimir el encabezado de la factura con los datos del cliente, y para no imprimir el encabezado del reporte, respectivamente. + \item La macro \cs{EstiloPagReporte} fue renombrada a \cs{EstiloPagina} y permanecerá un tiempo funcionando también bajo \cs{EstiloPagReporte} de manera transicional. + \item Las macros relativas a las “condiciones” ya no son aceptadas mas; esto en favor de la “nota final”. A esta región de la hoja le cambiaron el nombre en la versión v3.70 del 2019/08/17 y dejamos un período de migración con la advertencia en la compilación si se usan las macros viejas. + \item Nuevas opciones |notadecredito| y |notadedebito| para producir notas de crédito y notas de débito. Las macros correspondientes a este nuevo modo son \cs{NotaNum} y \cs{NotaFecha} para hacer la referencia a la factura que la nota está corrigiendo. \end{itemize} \section*{Agradecimientos} Por pruebas y sugerencias que dieron lugar a mejoras agradezco a Ritguey% \ifmotorunicode\footnote{\setmainfont{Symbola}🐧}\else\message{^^J^^JLaTeX Warning: Compila con XeLaTeX.^^J}\fi{} - Flores Esteves y a Alberto Mijares. Por contribuciones a través de \texttt{StackExchange} agradezco a Alan Munn, cfr, David Carlisle, egreg, Gustavo Mezzetti, Heiko Oberdiek, jfbu, Joseph Wright, Werner y wipet. El motivo por el que se da cada agradecimiento está como comentario en el archivo |.cls| o en el |.dtx|. + Flores Esteves y a Alberto Mijares. Por contribuciones a través de \texttt{StackExchange} agradezco a Alan Munn, cfr, David Carlisle, egreg, Gustavo Mezzetti, Heiko Oberdiek, jfbu, Joseph Wright, Schrödinger's cat, Werner y wipet. El motivo por el que se da cada agradecimiento está como comentario en el archivo |.cls| o en el |.dtx|. \addcontentsline{toc}{section}{\changesname} {\makeatletter\def\pfill{\unskip\hfill\@gobble}\makeatother @@ -647,19 +667,25 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \changes{v3.73}{2020/04/18}{Corrección en la metadata luego de que el paquete \texttt{oberdiek} fuera actualizado.} % \changes{v3.73}{2020/04/18}{Corregido error en referencia a macro interna \cs{@TamFinalEncabezadoado} introducido en versión v3.11.} % \changes{v3.73}{2020/04/18}{Actualizada la tasa de IVA adicional correcta en 31\%.} -% +% \changes{v4.00}{2020/11/15}{Ahora lo predeterminado es que salga escrita la denominación y el número del documento factura, por lo que la opción \texttt{denom} ya no existe y se agregó \texttt{sindenom} para evitar que salga la denominación y el número; esto para los talonarios de formas libres más comunes que son aquellos que no tienen la denominación ni el número.} +% \changes{v4.00}{2020/11/15}{Se corrigieron las cajas hechas con \tikz para que no se superpusieran al fondo de factura establecido con \cs{FondoFactura}.} +% \changes{v4.00}{2020/11/15}{Ahora las {\slshape prefacturas} imprimen también el texto “FORMA LIBRE”, necesario según la legislación, y se agregaron los comando para ubicar su posición en la hoja y para cambiar la tipografía.} +% \changes{v4.00}{2020/11/15}{Lo hacemos otra vez compatible con Lua\LaTeX{} y la metadata vuelve a aparecer en pdf\LaTeX{} y en Lua\LaTeX{} luego de que \texttt{hyperref} la sobreescribiera.} +% \changes{v4.00}{2020/07/15}{Se corrigió la cantidad de dígitos en la numeración de 5 a 6 para estar de acuerdo a la legislación.} +% \changes{v4.00}{2020/11/15}{Nuevas opciones \texttt{sinencabezadofactura} y \texttt{sinencabezadoreporte} para evitar que el encabezado de la factura o del reporte se impriman.} +% \changes{v4.00}{2020/11/15}{Renombrada la macro \cs{EstiloPagReporte} a \cs{EstiloPagina}, y quedan funcionando ambas por un tiempo.} +% \changes{v4.00}{2020/11/15}{Ya no sirven las macros obsoletas \cs{Condiciones}, \cs{PosCondiciones}, \cs{SepCondiciones} ni \cs{LetraCondiciones} en favor de sus correspondientes para la nota final que es el nuevo nombre de esta parte de la página.} +% \changes{v4.00}{2020/11/15}{Agregada la macro \cs{@EstiloParrafoReporte} dentro del archivo \texttt{.def} para controlar las opciones de párrafo del reporte.} % % \tableofcontents % % +% \newpage % \section*{Brief description in english} % % |factura| is the spanish word for `invoice', so this is a \LaTeX{} class for typesetting and calculating invoices, made taking into account requirements of {\slshape SENIAT} legislation (tax collector entity on the Bolivarian Republic of Venezuela), but its use is not restricted to Venezuela because all variables and displayed text can be redefined by invoking commands or editing. % -% \newpage % \setstretch{1.4} -% -% % \section{Introducción} % % La clase de \LaTeX{} |factura| está diseñada para su uso en la República Bolivariana de Venezuela, conforme a los requerimientos fijados por las providencias del {\slshape SENIAT} 0591, 0257, 0071 y 0048, válidas éstas para abril del año 2020. @@ -717,7 +743,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \item {\color{RoyalBlue}|pdflatex factura-ejemplo-prefactura.tex|} % -% De esta forma como compilamos {\ttfamily factura-ejemplo-prefactura} compilamos todos los demás ejemplos: la cotización, las facturas del 1 hasta la última, el reporte del 1 hasta el último, y finalmente la factura para otra legislación.\footnote{Podemos también compilar con \LuaLaTeX{} o con \XeLaTeX{}.} +% De esta forma como compilamos {\ttfamily factura-ejemplo-prefactura} compilamos todos los demás ejemplos: la cotización, las facturas del 1 hasta la última, el reporte del 1 hasta el último, la nota de crédito, la nota de débito, y finalmente la factura para otra legislación.\footnote{Podemos también compilar con \LuaLaTeX{} o con \XeLaTeX{}.} % % Al tener todo esto hecho volvemos a compilar |factura.dtx| para producir esta documentación, puesto que el |.dtx| necesita ser compilado más de una vez para que la documentación quede correctamente elaborada: % @@ -743,12 +769,14 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % |factura.pdf| & Esta documentación, \\ % |README| & Archivo con la descripción corta, \\ % |factura-ejemplo-firma.tex| & Ejemplo de firma digitalizada, \\ -% |factura-ejemplo-fondo.tex| & Elemplo de una forma libre fiscal digitalizada, \\ +% |factura-ejemplo-fondo.tex| & Ejemplo de una forma libre fiscal digital, \\ % |factura-ejemplo-membrete.tex| & Ejemplo de membrete para los reportes, \\ % |factura-ejemplo-aux.tex| & Archivo auxiliar que se incluye en todos los ejemplos y \\ % & sirve para que cada ejemplo conste de su descripción, \\ % |factura-ejemplo-prefactura.tex| & Ejemplo de “{\slshape prefactura}”, \\ % |factura-ejemplo-cotizacion.tex| & Ejemplo de cotización, \\ +% |factura-ejemplo-notadecredito.tex| & Ejemplo de nota de crédito, \\ +% |factura-ejemplo-notadedebito.tex| & Ejemplo de nota de débito, \\ % |factura-ejemplo-factura*.tex| & Ejemplos de facturas, \\ % |factura-ejemplo-reporte*.tex| & Ejemplos de reportes, \\ % |factura-beispiel-rechnung.tex| & Un ejemplo de una factura adaptada a otra legislación. \\ \hline @@ -776,11 +804,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % El margen inferior de |geometry| empieza donde termina la descripción del servicio -o el fin del cuadro de la factura, en caso de que no se agregue un texto de descripción larga-, hasta el final del papel. % -% Para aclarar lo anterior es necesario decir que hay textos con posiciones fijas que están fuera de estos márgenes, como la fecha de emisión, la “denominación” del documento (que es “FACTURA”, “COTIZACIÓN” u otro especificable), el número de la factura, el número de control (cuando aplica), las nota final y los espacios para las firmas; todas estas partes del documento están fijas en posiciones arbitrarias fuera de los márgenes dejados por |geometry|. Estos textos son fijos para darles posiciones que no dependan del contenido particular de cada factura sino del diseño del talonario que ya tenemos impreso, que siempre será igual, y para el cual estamos adaptando esta clase |factura|. +% Para aclarar lo anterior es necesario decir que hay textos con posiciones fijas que están fuera de estos márgenes, como la fecha de emisión, la “denominación” del documento (que es “FACTURA”, “NOTA DE CRÉDITO”, “NOTA DE DÉBITO”, “COTIZACIÓN” u otro especificable), el número de la factura, el número de control (cuando aplica), las nota final y los espacios para las firmas; todas estas partes del documento están fijas en posiciones arbitrarias fuera de los márgenes dejados por |geometry|. Estos textos son fijos para darles posiciones que no dependan del contenido particular de cada factura sino del diseño del talonario que ya tenemos impreso, que siempre será igual, y para el cual estamos adaptando esta clase |factura|. % % Las ubicaciones de los textos fijos también tienen valores predefinidos dentro de |factura.def|. Cualquiera de esos valores puede cambiarse mediante comandos, tal como se fijan los valores predeterminados en dicho archivo |.def|; esto significa que se puede personalizar a cualquier diseño del talonario entregado por la imprenta, basta con entender qué hace cada comando (explicado en este documento), consultar el |.def| o ver los ejemplos. % -% En algunos casos las formas libres tienen impreso el número de la factura y no es controlable esto por el emisor (como ocurre con el número de control que la legislación obliga a que siempre venga impreso en cada hoja del talonario). En otros casos el emisor tiene la libertad de escribir el número de la factura y controlarlo él mismo. Se puede hacer funcionar la clase según cualquiera de estas dos formas con una opción en |\documentclass|, es decir, podemos imprimir el número de la factura donde queramos, o también podemos asumirlo impreso en el talonario, según sea el caso del talonario que tengamos. +% En algunos casos las formas libres tienen impreso el número de la factura y no es controlable esto por el emisor (como ocurre con el número de control que la legislación obliga a que siempre venga impreso en cada hoja del talonario). Se puede hacer funcionar la clase para imprimir el número de la factura donde queramos, o también podemos asumirlo impreso en el talonario, según sea el caso del talonario que tengamos. % % Al usarse esta clase se deben primero hacer medidas en las facturas que la imprenta nos entrega para fijar los márgenes y determinar dónde poner los textos fijos que se deseen cambiar de la posición que viene predeterminada. % @@ -801,13 +829,13 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % También el usuario tiene la posibilidad de producir una {\slshape “prefactura”}; así le llamamos a un documento sin validez legal pero que puede ser enviado por fax o por correo electrónico. Este documento tiene el mismo aspecto de la factura fiscal si se digitaliza la forma libre vacía\footnote{Quitándole las numeraciones obviamente. También puede diseñarse en un |.tex| una forma libre vacía idéntica a la que se tiene, así como se hace en el ejemplo incluído.}, se incluye la imagen como fondo de la página y se definen las posiciones fijas de las numeraciones impresas en el talonario, es decir el número de factura y el número de control, de los que hablamos previamente. % -% Con esta misma clase tiene se la posibilidad de imprimir un información en el reverso de la hoja de la factura que saldrá escrita utilizando toda la hoja (los márgenes son ajustables). Esa información se encierra en un ambiente destinado para ese fin (|\begin{reverso}...\end{reverso}|), +% Con esta misma clase tiene se la posibilidad de imprimir un información en el reverso de la hoja de la factura que saldrá escrita utilizando toda la hoja (los márgenes son ajustables). Esa información se encierra en un ambiente destinado para ese fin % \DescribeEnv{reverso} -% y al momento de la compilación puede decidirse si se imprime esa parte o no. +% (|\begin{reverso}...\end{reverso}|), y al momento de la compilación puede decidirse si se imprime esa parte o no. % -% Otra posibilidad que da esta clase es la de escribir un reporte largo asociado a la factura\footnote{Si lo hubiera, así como también se puede usar estar clase para elaborar un reporte sin asociarlo a una factura en particular.}. Tal reporte se escribe dentro de un ambiente en el mismo documento en el que se escribe la factura asociada a él (|\begin{reporte}...\end{reporte}|), +% Otra posibilidad que da esta clase es la de escribir un documento de reporte de varias páginas (no parte del documento fiscal) asociado a la factura\footnote{Si lo hubiera, así como también se puede usar estar clase para elaborar un reporte sin asociarlo a una factura en particular.}. Tal reporte se escribe dentro de un ambiente en el mismo documento en el que se escribe la factura asociada a él % \DescribeEnv{reporte} -% y con dar una opción al inicio se puede hacer que se impirma el reporte en las páginas siguientes a la factura, o también se puede hacer que se imprima sólo el reporte ignorando todo lo que no constituye el reporte, de la misma manera como también se puede hacer que se imprima sólo la factura ignorando el entorno |reporte|. Esto permite tener todo en un mismo documento e imprimir lo que se desee en el momento, o todo a la vez. +% (|\begin{reporte}...\end{reporte}|), y con dar una opción al inicio se puede hacer que se impirma el reporte en las páginas siguientes a la factura, o también se puede hacer que se imprima sólo el reporte ignorando todo lo que no constituye el reporte, de la misma manera como también se puede hacer que se imprima sólo la factura ignorando el entorno |reporte|. Esto permite tener todo en un mismo documento e imprimir lo que se desee en el momento, o todo a la vez. % % % \section{Compilación de un documento\label{sec:compila}} @@ -826,14 +854,20 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \subsection{Sobre el tipo de documento a producir} % -% {\setlength{\parindent}{0pt} +% { % % \DescribeOption{prefactura} -% La {\slshape “prefactura”} es un documento no legal, preliminar, que no se imprime sobre papel de factura sino que está concebido para enviarse por correo o fax. Para eso se define la imagen que contiene el diseño de la factura con el comando |\FondoFactura|, luego la clase escribe la denominación “FACTURA” con su número\footnote{Lo predeterminado cuando no es una {\slshape “prefactura”} sino una factura final es no escribir la denominación ni el número, ya que eso generalmente viene impreso en cada hoja del talonario.}. Esta opción implica la opción |sinfirmas|, ya que si es un documento preliminar sin validez legal, las firmas no son necesarias; sin embargo se puede cambiar este comportamiento con las opciones |dosfirmas| y |unafirma|. +% La {\slshape “prefactura”} es un documento no legal, preliminar, que no se imprime sobre papel de factura sino que está concebido para enviarse por correo o fax. Para eso se define la imagen que contiene el diseño de la factura con el comando |\FondoFactura|, luego la clase escribe la denominación “FACTURA” con su número. Esta opción implica la opción |sinfirmas|, ya que si es un documento preliminar sin validez legal, las firmas no son necesarias; sin embargo se puede cambiar este comportamiento con las opciones |dosfirmas| y |unafirma|. % % \DescribeOption{cotizacion} % La cotización es un documento similar a una factura pero no es un documento legal en el sentido de que no se imprime sobre talonario fiscal alguno, así que no lleva número de control y puede o no tener su propia numeración, que es cosa del emisor de la cotización. Esta opción implica la opción |unafirma|, para que firme el emisor de la factura, y si su nombre no se especifica saldrá “Por el emisor” debajo de la línea para firmar. También puede cambiarse esto con la opción |dosfirmas| o con |sinfirmas|. % +% \DescribeOption{notadecredito} +% Produce una nota de crédito para corregir alguna factura previamente hecha, dentro del mismo período fiscal. Hay que usar |\NotaNum| y |\NotaFecha| para especificar el número y la fecha de la factura a corregir; aparecerá escrito un texto en el que se hace referencia a la factura con el error dinerario que se está corrigiendo con la nota. +% +% \DescribeOption{notadedebito} +% Produce una nota de débito, también para corregir alguna factura previa con algún error. Aplican los mismos comentarios anteriores sobre la nota de crédito. +% % \DescribeOption{sinreverso} % No escribe la información -opcional- que se escribió dentro del entorno |reverso| a salir en el reverso de la factura. % @@ -916,6 +950,9 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \subsection{Elementos a mostrar o no mostrar en la factura} % +% \DescribeOption{sinencabezadofactura} +% Esta opción permite que el usuario escriba antes del entorno de la factura, la identificación de él como emisor y los datos del cliente en el formato que desee sin que aparezca el cuadro prediseñado con esta información. Para hacer eso, el usuario tendría que escribir su diseño tan pronto escriba |\begin{document}| antes de |\begin{factura}|. +% % \DescribeOption{sinmarcas} % Con |sinmarcas| evitamos que el carácter de fin de línea aparezca cuando la descripción ocupa más que una línea; ese carácter indica que la línea continúa abajo, y predeterminadamente es la flecha “\flechaCR”. También con esta opción no aparece el carácter “$\cdot$” en las celdas vacías en este mismo caso. % @@ -934,8 +971,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \DescribeOption{vencimiento} % Cuando establecemos los días del crédito de la factura, se imprime una línea también con la fecha de vencimiento de la factura. Con esta opción podemos pedir que la fecha de vencimiento salga siempre en la facturas, inclusive cuando no sean facturas a crédito. % -% \DescribeOption{denom} -% Con esta opción escribimos también el texto “FACTURA” con el número. La razón de esta opción es que hay formas libres que tienen la numeración de la factura y otras que solamente tienen el número de control; para las que tienen sólo el número de control existe esta opción que también escribe el número en cada factura impresa, en la posición que se defina. +% \DescribeOption{sindenom} +% Con esta opción no escribimos el texto “FACTURA” ni el número de la factura, suponiendo que venga escrito en el talonario. Las formas libres no deberían traer la denominación “FACTURA” ni el número, pero hay formas libres que sí tienen el texto y la numeración de la factura, cuando lo normal es que solamente tengan el número de control. Para los talonarios que tienen la numeración de cada factura existe esta opción. % % \DescribeOption{sinnumero} % Escribe el texto de la denominación del documento en su posición (e.g. “COTIZACIÓN”) pero sin escribir el número; por ejemplo para las cotizaciones que no son documentos que legalmente lleven número, aunque el número puede ser para control interno. Esta opción implica la opción anterior |denom|. @@ -970,6 +1007,9 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \subsection{Otras opciones} % +% \DescribeOption{sinencabezadoreporte} +% Con esta opción de la clase, el reporte no empieza con el texto indicativo del proveedor, el cliente y la persona de contacto. +% % \DescribeOption{nospanish} % No carga |babel| en castellano\footnote{Por ejemplo para cargar {\ttfamily polyglossia} en su lugar.}, ni la codificación |T1| de las letras en el caso de compilar con pdf\LaTeX. Si no se especifica esta opción se cargan ambos paquetes. % @@ -979,14 +1019,13 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \DescribeOption{csv} % Escribe un archivo csv con la información numérica de la factura. % +% % \subsection{Activación y desactivación de opciones desde comandos\label{subsec:condicionales}} % % Cualquiera de estas opciones también se puede activar o desactivar en el preámbulo y así poder incluirlas dentro de archivos que vayan a ser cargados con |\input| o |\include| como se explicará en la subsección \ref{subsec:aux}. Esto significa que podremos desactivar una opción que hayamos dado en |\documentclass| o activar alguna que no hayamos activado allí. % % Para hacer eso debemos usar el condicional que cada opción maneja y activarlo o desactivarlo de la forma como se hace en \TeX{}. El condicional de cada opción tiene el mismo nombre de la opción. Por ejemplo, para quitar las líneas verticales (|sinlineasv|) usaríamos |\sinlineasvtrue| en el preámbulo, o para desactivar la creación del archivo |.csv|, previamente activada en |\documentclass|, usaríamos |\csvfalse|. % -% } -% % % \section{Comandos que la clase provee\label{sec:comandos}} % @@ -998,8 +1037,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % Como explicamos en la sección \ref{sec:geohoja}, a la hoja de la factura se le deben establecer los márgenes apropiadamente, y esos márgenes no tienen en cuanta ciertos textos que llamamos “fijos”, para los cuales también debemos establecer sus posiciones en la hoja, y eso lo veremos en esta parte. % % -% {\setlength{\parindent}{0pt} -% % \DescribeMacro{\GeometriaFactura}{\macrooptcolor|\GeometriaFactura|\marg{geometría}} % % En el argumento de este comando van los parámetros relativos al paquete |geometry| que van a afectar la manera como la factura es generada. Como dijimos al principio, deberá especificarse el tipo de papel (e.g. |letterpaper|, |legalpaper|, |executive|, |a4paper|, ...) y los márgenes verticales y horizontales. @@ -1017,8 +1054,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % Lo que recomendamos es digitalizar la forma libre o pedir a la imprenta un archivo digital con el diseño y así incluir esa imagen con este comando cuando se vayan a producir “prefacturas” o cotizaciones, así las prefacturas tienen el mismo diseño que las facturas. Si se puede lograr el diseño en un código como se hace con el ejemplo del fondo, pues mejor aún. % % -% } -% % % \subsubsection{Elementos fijos y sus ubicaciones} % @@ -1028,7 +1063,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Por ejemplo, si queremos que la fecha aparezca desde el margen izquierdo y |5cm| contados desde arriba hacia abajo, haríamos: |\PosFecha{0cm}{5cm},| y si queremos que salga |1cm| desde la derecha y |4cm| contados desde abajo haríamos |\PosFecha{-1cm}{-4cm}|. A continuación todas las macros para fijar las posiciones en el papel: % -% {\setlength{\parindent}{0pt} % % \DescribeMacro{\PosFecha}{\macrooptcolor|\PosFecha|\marg{pos. x}\marg{pos. y}} % @@ -1036,7 +1070,17 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \DescribeMacro{\PosFecha*}{\macrooptcolor|\PosFecha*|\marg{pos. x}\marg{pos. y}} % -% Con esta variante con “*”, es decir, |\PosFecha*|, logramos que la caja de la fecha abra hacia arriba desde la posición especificada en el eje vertical, de manera que estaríamos especificando una coordenada “|y|” final del texto y no una posición inicial, esto significa que el texto se despliega hacia arriba desde la posición dada y no hacia abajo. Por ejemplo, sin “*”, si especificamos |\PosFecha{-0cm}{5cm}|, las fechas empiezan 5cm desde el tope superior de la hoja, y si especificamos |\PosFecha*{-0cm}{5cm}| ellas terminarán en los 5cm de la hoja. Esto es útil cuando se especifica también |\Credito| que produce una fecha de vencimiento que aparecerá abajo de la fecha de emisión; al ocupar las fechas más de una línea podemos querer que la última fecha (la de vencimiento) quede alineada en cierta posición vertical, la misma posición donde saldría la fecha de emisión en el caso en el que no haya fecha de vencimiento por no especificar la factura a crédito. +% Con esta variante con “|*|”, es decir, |\PosFecha*|, logramos que la caja de la fecha abra hacia arriba desde la posición especificada en el eje vertical, de manera que estaríamos especificando una coordenada “|y|” final del texto y no una posición inicial, esto significa que el texto se despliega hacia arriba desde la posición dada y no hacia abajo. +% +% Por ejemplo, sin “|*|”, si especificamos |\PosFecha{-0cm}{5cm}|, las fechas empiezan 5cm desde el tope superior de la hoja, y si especificamos |\PosFecha*{-0cm}{5cm}| ellas terminarán en los 5cm de la hoja. Esto es útil cuando se especifica también |\Credito| que produce una fecha de vencimiento que aparecerá abajo de la fecha de emisión; al ocupar las fechas más de una línea podemos querer que la última fecha (la de vencimiento) quede alineada en cierta posición vertical, la misma posición donde saldría la fecha de emisión en el caso en el que no haya fecha de vencimiento por no especificar la factura a crédito. +% +% \DescribeMacro{\PosFormalibre}{\macrooptcolor|\PosFormalibre|\marg{pos. x}\marg{pos. y}} +% +% El comando |\PosFormalibre| nos permite ubicar el texto “FORMA LIBRE” que viene impreso en las formas libres fiscales, de manera que sólo saldrá si se pide una {\slshape prefactura}. +% +% \DescribeMacro{\PosFormalibre*}{\macrooptcolor|\PosFormalibre*|\marg{pos. x}\marg{pos. y}} +% +% Al igual que con |\PosFecha*| podemos especificar la posición final en “|y|” de la caja para el texto “FORMA LIBRE”, así el texto se despliega hacia arriba y no hacia abajo. % % \DescribeMacro{\PosDenom}{\macrooptcolor|\PosDenom|\marg{pos. x}\marg{pos. y}} % @@ -1044,15 +1088,15 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \DescribeMacro{\PosDenom*}{\macrooptcolor|\PosDenom*|\marg{pos. x}\marg{pos. y}} % -% Al igual que con |\PosFecha*| podemos especificar la posición final en “|y|” de la caja para la denominación, así el texto se despliega hacia arriba y no hacia abajo. +% Al igual que con |\PosFecha*| y |\PosFormalibre*| podemos especificar la posición final en “|y|” de la caja para la denominación, así el texto se despliega hacia arriba y no hacia abajo. % % \DescribeMacro{\PosControl}{\macrooptcolor|\PosControl|\marg{pos. x}\marg{pos. y}} % -% Con |\PosControl| controlamos dónde se ubica la caja que imprime el número de control con la serie. +% Con |\PosControl| controlamos dónde se ubica la caja que imprime el número de control con la serie, sólo para {\slshape prefacturas} porque ese texto está impreso en las hojas fiscales. % % \DescribeMacro{\PosControl*}{\macrooptcolor|\PosControl*|\marg{pos. x}\marg{pos. y}} % -% También podemos pedir que la caja del número de control abra hacia arriba, es decir que la posición vertical sea tomada como la posición vertical final; para eso |\PosControl*|, igual que con |\PosFecha*| y |\PosDenom*|. +% También podemos pedir que la caja del número de control abra hacia arriba, es decir que la posición vertical sea tomada como la posición vertical final; para eso |\PosControl*|, igual que con |\PosFecha*|, |\PosFormalibre*| y |\PosDenom*|. % % \DescribeMacro{\PosNotaFinal}{\macrooptcolor|\PosNotaFinal|\marg{pos. x-inicial}\marg{pos x-final}\marg{pos. y}} % @@ -1072,18 +1116,15 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % En este caso, las coordenadas |X| tampoco aceptan valores negativos ni versión con asterisco |*|. % -% } -% % % \subsubsection{Espaciado entre distintas partes. Estilo de los recuadros\label{subsec:espacioslineas}} % % Podemos cambiar distintos valores del espaciado interno en la factura, así como también la estética de la línea para firmar y los recuadros que encierran los datos del cliente, la descripción, las “notas”, pudiendo ajustarle estos recuadros o cajas el grosor de la línea, la curvatura y la sombra. Los argumentos de todos estos comandos son dimensiones de \LaTeX{}: % -% {\setlength{\parindent}{0pt} % % \DescribeMacro{\SepVertical}{\macrooptcolor|\SepVertical|\marg{sep. vertical entre elementos}} % -% Las distintas partes de la factura (a saber: el encabezado con los datos, la -opcional- nota previa, el cuadro de la factura, la -opcional- nota externa y la -opcional- descripción) también están separadas entre sí una distancia que puede ser cambiada. +% Las distintas partes con posiciones no fijas de la factura (a saber: el encabezado con los datos, la -opcional- nota previa, el cuadro de la factura, la -opcional- nota externa y la -opcional- descripción) también están separadas entre sí una distancia que puede ser cambiada. % % La separación que se fija con este comando es la separación vertical mínima que queremos garantizar entre cada elemento a escribir en la factura, y puede ser ajustada automáticamente por la clase aumentándola cuando no hay relleno automático de espacios sobrantes (es decir, sin usar la opción |sinexpandir|). Cuando la descripción larga o el cuadro de la factura (usando la opción |expandecuadro|) toman su tamaño máximo, entonces la separación vertical entre cada elemento de la hoja es la dada con |\SepVertical|, o sea, la que queremos garantizar como la mínima separación entre esas partes. % @@ -1092,12 +1133,12 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % Esta macro nos proporciona una forma de cambiar la separación entre los recuadros o cajas donde van los datos del cliente y el resumen que sale a su lado. Naturalmente, si no se escribe un resumen saldría únicamente la caja de los datos del cliente, y esta separación no tendría efecto. % % \DescribeMacro{\SepEncabezado} +% {\macrooptcolor|\SepEncabezado|\marg{sep. interna texto}}\\ % \DescribeMacro{\SepNotaPrevia} +% {\macrooptcolor|\SepNotaPrevia|\marg{sep. interna texto}}\\ % \DescribeMacro{\SepDescripcion} +% {\macrooptcolor|\SepDescripcion|\marg{sep. interna texto}}\\ % \DescribeMacro{\SepNotaFinal} -% {\macrooptcolor|\SepEncabezado|\marg{sep. interna texto}}\newline -% {\macrooptcolor|\SepNotaPrevia|\marg{sep. interna texto}}\newline -% {\macrooptcolor|\SepDescripcion|\marg{sep. interna texto}}\newline % {\macrooptcolor|\SepNotaFinal|\marg{sep. interna texto}} % % Con estas macros podemos controlar la distancia entre la línea del recuadro y el texto que hay en el recuadro, es decir, un margen interno entre el contorno de la caja y el texto para que no salga pegado a la línea que lo encierra. Esto es parte del diseño de \tikz de estos recuadros. Como puede verse, dicho margen para los datos del cliente y para el resumen se cambia con |\SepEncabezado|, los de la nota previa con |\SepNotaPrevia|, los de la descripción larga con |\SepDescripcion|, y los de la nota final con |\SepNotaFinal|. @@ -1117,12 +1158,12 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % El segundo argumento de |\SepFilas| es la separación vertical entre las distintas líneas de la totalización en filas. % % \DescribeMacro{\LineaEncabezado} +% {\macrooptcolor|\LineaEncabezado|\marg{grosor}\marg{curvatura esquinas}\marg{tamaño sombra}}\\ % \DescribeMacro{\LineaNotaPrevia} +% {\macrooptcolor|\LineaNotaPrevia|\marg{grosor}\marg{curvatura esquinas}\marg{tamaño sombra}}\\ % \DescribeMacro{\LineaDescripcion} +% {\macrooptcolor|\LineaDescripcion|\marg{grosor}\marg{curvatura esquinas}\marg{tamaño sombra}}\\ % \DescribeMacro{\LineaNotaFinal} -% {\macrooptcolor|\LineaEncabezado|\marg{grosor}\marg{curvatura esquinas}\marg{tamaño sombra}}\newline -% {\macrooptcolor|\LineaNotaPrevia|\marg{grosor}\marg{curvatura esquinas}\marg{tamaño sombra}}\newline -% {\macrooptcolor|\LineaDescripcion|\marg{grosor}\marg{curvatura esquinas}\marg{tamaño sombra}}\newline % {\macrooptcolor|\LineaNotaFinal|\marg{grosor}\marg{curvatura esquinas}\marg{tamaño sombra}} % % La información del encabezado (datos del cliente y resumen), así como la nota previa, la descripción y la nota final puede o no tener el diseño \tikz, el cual viene prehecho en el archivo |.def| y consiste en una línea curva, en algunos casos sombreada a la derecha y abajo, y en otros casos no. Esa línea puede ser alterada en su grosor, el tamaño de la sombra, y la distancia entre la línea y la información, es decir un margen interno. Para eso estos comandos, que se comportan igual todos ellos. @@ -1259,14 +1300,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % La fecha calculada automáticamente se guarda en el identificador “\texttt{FechaVencimiento}” perteneciente al paquete \texttt{datetime2}, de manera que el usuario podrá hacer uso de esta fecha con los comandos que este paquete provee. % -% } -% % % \subsection{Descuentos en la totalización\label{subsec:dctototales}} % -% Podemos efectuar un descuento\footnote{Estas opciones de descuento en el subtotal no son compatibles con la opción de totalización en modo de |filas|, explicada en la sección \ref{sec:opciones}, y muy probablemente más adelante seguirán sin serlo.} sobre cualquiera de los subtotales; ese descuento puede ser porcentual (versión sin *) o dado en un monto fijo a sustraer del subtotal (variante con *). Podemos aplicar un descuento que aplique por igual a cualquier tipo de ítem con cualquier gravamen, o discriminado dependiendo del tipo de impuesto se aplica un descuento u otro. +% Podemos efectuar un descuento\footnote{Estas opciones de descuento en el subtotal no son compatibles con la opción de totalización en modo de |filas|, explicada en la sección \ref{sec:opciones}, y muy probablemente más adelante seguirán sin serlo.} sobre cualquiera de los subtotales; ese descuento puede ser porcentual (versión sin “|*|”) o dado en un monto fijo a sustraer del subtotal (variante con “|*|”). Podemos aplicar un descuento que aplique por igual a cualquier tipo de ítem con cualquier gravamen, o discriminado dependiendo del tipo de impuesto se aplica un descuento u otro. % -% {\setlength{\parindent}{0pt} % % \DescribeMacro{\Descuento}{\macrooptcolor|\Descuento|\marg{porcentaje}}\\ % \DescribeMacro{\Descuento*}{\macrooptcolor|\Descuento*|\marg{monto}} @@ -1301,37 +1339,37 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % Pone un resumen que va en una caja a la derecha de los datos del cliente, separado de esta en una distancia ajustable con el comando |\SepEncabezado|, que se describirá más adelante. Este resumen es opcional. % % \DescribeMacro{\NotaPrevia} -% \DescribeMacro{\NotaPrevia*} -% \DescribeMacro{\NotaPrevia**} % {\macrooptcolor|\NotaPrevia|\marg{texto}}\\ +% \DescribeMacro{\NotaPrevia*} % {\macrooptcolor|\NotaPrevia*|\marg{texto}}\\ +% \DescribeMacro{\NotaPrevia**} % {\macrooptcolor|\NotaPrevia**|\marg{texto}} % % La nota previa es una nota que puede ponerse antes del cuadro de la factura. Sin especificarla no sale nota alguna. Dicha nota va en un recuadro \tikz cuyo aspecto puede cambiarse, como ya se mencionó en la sección \ref{subsec:espacioslineas} donde se explican las líneas o contornos. % % \DescribeMacro{\NotaInterna} -% \DescribeMacro{\NotaInterna*} -% \DescribeMacro{\NotaInterna**} % {\macrooptcolor|\NotaInterna|\marg{texto}}\\ +% \DescribeMacro{\NotaInterna*} % {\macrooptcolor|\NotaInterna*|\marg{texto}}\\ +% \DescribeMacro{\NotaInterna**} % {\macrooptcolor|\NotaInterna**|\marg{texto}} % % La nota interna es una coletilla que aparece dentro del cuadro de la factura, por eso la llamamos interna (es interna al cuadro), por ejemplo si aplicamos un descuento podemos decir allí cerca de los totales a qué corresponde tal descuento, o para hacer alguna aclaratoria sobre lo que precede inmediatamente como algún ítem de la factura. % % \DescribeMacro{\NotaExterna} -% \DescribeMacro{\NotaExterna*} -% \DescribeMacro{\NotaExterna**} % {\macrooptcolor|\NotaExterna|\marg{texto}}\\ +% \DescribeMacro{\NotaExterna*} % {\macrooptcolor|\NotaExterna*|\marg{texto}}\\ +% \DescribeMacro{\NotaExterna**} % {\macrooptcolor|\NotaExterna**|\marg{texto}} % % La nota externa es otro texto opcional que el usuario puede introducir y saldrá al terminar el cuadro de la factura, antes de la opcional descripción larga (comando |\Descripcion|). {\itshape La nota externa no tiene formato \tikz.} % % \DescribeMacro{\NotaFinal} -% \DescribeMacro{\NotaFinal*} -% \DescribeMacro{\NotaFinal**} % {\macrooptcolor|\NotaFinal|\marg{texto}}\\ +% \DescribeMacro{\NotaFinal*} % {\macrooptcolor|\NotaFinal*|\marg{texto}}\\ +% \DescribeMacro{\NotaFinal**} % {\macrooptcolor|\NotaFinal**|\marg{texto}} % % Con este comando se establece el texto para la nota final\footnote{Antiguas condiciones de la factura, por ejemplo, para las condiciones de pago si se trata de una factura, o para las condiciones de una cotización.}. Es opcional; si no se define no sale texto alguno. También se puede destinar este espacio para un diseño (que haría el usuario) en el que se agreguen también algunas casillas para especificar la forma de pago. @@ -1357,7 +1395,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Esta variante de |\FondoReporte| es para que la imagen esté visible {\bfseries en todas las páginas} y no solamente en la primera como con el comando anterior. Usando esta variante del fondo del reporte no es necesario usar |\InicioReporte| sino solamente establecer los márgenes del reporte de acuerdo a dicho fondo. % -% \DescribeMacro{\EstiloPagReporte}{\macrooptcolor|\EstiloPagReporte|\oarg{estilo primera página}\marg{estilo páginas restantes}} +% \DescribeMacro{\EstiloPagina}{\macrooptcolor|\EstiloPagina|\oarg{estilo primera página}\marg{estilo páginas restantes}} % % Con este comando definimos el estilo de página para el reporte (véase el comando |\InfoPagina| y la subsección \ref{subsec:pagestyle}). El estilo de página es lo que cambiamos en \LaTeX{} con |\pagestyle|, o sea, lo relativo a las cabeceras y pies de página. % @@ -1369,7 +1407,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % La información que aparece como cabecera o como pie de página es la que damos con el comando |\InfoPagina|, explicado más adelante. % -% La clase provee varios estilos de página, que también se explicarán en la subsección \ref{subsec:pagestyle}. En los ejemplos de reportes se puede ver el comportamiento del comando |\EstiloPagReporte|. +% La clase provee varios estilos de página, que también se explicarán en la subsección \ref{subsec:pagestyle}. En los ejemplos de reportes se puede ver el comportamiento del comando |\EstiloPagina|. % % \DescribeMacro{\InicioReporte}{\macrooptcolor|\InicioReporte|\marg{longitud}} % @@ -1402,9 +1440,47 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Establece el texto que aparece en la cabecera o pie de página del reporte. % -% {\itshape Si se quiere usar esta opción debe hacerse luego de definir el título del reporte porque si no el comando |\TituloReporte*| establece de nuevo la variable que |\InfoPagina| cambia.} +% {\itshape Si se quiere usar esta opción debe hacerse luego de definir el título del reporte porque si no el comando |\TituloReporte*| establece de nuevo la variable que |\InfoPagina| cambia.} +% +% En |factura.def| hay dos definiciones relativas a la información que aparece en las cabeceras o pies de página: aquella que pone el título en la cabecera/pié y aquella que no lo hace. +% +% Recordemos que con |\TituloReporte| establecemos un título de un reporte, pero ese título de reporte sólo aparecerá centrado al principio sin ser parte de las cabeceras/piés de página, es decir, que al usar |\TituloReporte| o sin especificar un título de reporte, la información que aparece en las cabeceras y piés de página no referencia a un reporte sino a la factura asociada a él. Al usar |\TituloReporte*|, el título del reporte sí forma parte de estas regiones de la página. Cualquiera que sea la forma predeterminada según cuál variante se use para establecer el título del reporte, se puede cambiar la información de las cabeceras y piés de página con esta macro |\InfoPagina|, y se puede usar |\EstiloPagina| para fijarlo donde se quiera. +% +% Predeterminadamente, cuando no se tiene título en las cabeceras/piés, esta macro |\InfoPagina| toma la siguiente forma: +% +% \noindent\hfill{\footnotesize |\@LetraInfoPagina Reporte correspondiente a la factura número \@Num \space de fecha \@Fecha| \hfill\mbox{}} % -% En |factura.def| hay dos definiciones relativas a la información que aparece en las cabeceras o pies de página: aquella que escribe el título y aquella que no, es decir, la que aplica con |\TituloReporte*| y la que aplica con |\TituloReporte|, que también el usuario podrá redefinir si lo necesita, pero lo más práctico sería usar esta macro para fijar el texto que se desee, y |\EstiloPagReporte| para fijarlo donde se quiera. +% Y cuando se tiene título en las cabeceras o piés de página, la macro |\InfoPagina| toma la siguiente forma: +% +% \noindent\hfill{\footnotesize |\@LetraInfoPagina \@TituloReporte \space - \@Proveedor \space - \@Fecha| \hfill\mbox{}} +% +% +% \subsection{Estableciendo los parámetros relativos a la notas de crédito o débito} +% +% \DescribeMacro{\NotaNum}{\macrooptcolor|\NotaNum|\marg{núm}} +% +% Establece el número de la factura que la nota de crédito o débito está corrigiendo por errores que repercuten en los montos monetarios. Esta macro establece el número de esa factura (anterior) que se está corrigiendo\footnote{Debe hacerse dentro del mismo período impositivo.}. Es necesario usar esta macro porque las notas de crédito y débito tienen una leyenda que debe indicar cuál es la factura (y su fecha) sobre la cual se elabora una nota de crédito o de débito. Ese texto está alojado en la macro |\TextoNotaDeCredito| para la nota de crédito y |\TextoNotaDeDebito| para la nota de débito y aparece como “nota interna” en el documento fiscal. Más adelante en la explicación de estas dos macros hay indicaciones sobre cómo cambiar el texto y cómo cambiar su ubicación. +% +% \DescribeMacro{\NotaFecha}{\macrooptcolor|\NotaFecha|\marg{fecha}} +% +% Con esta macro establecemos la fecha de la factura a corregir con la nota de crédito o débito. Aplican los mismos comentarios que para el comando anterior |\NotaNum|. El formato en el que esta fecha se presenta en la leyenda será el mismo formato en el que se presenta la fecha de emisión del documento, que puede cambiarse con |\FormatoFecha|. Lo predeterminado es el formato venezolano |dd-mm-aaaa|. +% +% Esta fecha de la factura a corregir con la nota se guarda el identificador “\texttt{NotaFecha}” del paquete \texttt{datetime2} y podrá ser usado en cualquier parte del documento de la manera como se manipulan las fechas en este paquete. +% +% \DescribeMacro{\NotaFecha*}{\macrooptcolor|\NotaFecha*|\marg{aaaa}\marg{mm}\marg{dd}} +% +% Con |\NotaFecha*|, al igual que con |\Fecha*|, podemos dar la fecha en formato ISO: primero el año, luego el mes y luego el dia, gracias a la interfaz de \texttt{datetime2}. Esto no afecta la presentación de la fecha en el documento sino la forma como se la suministramos a la clase. +% +% \DescribeMacro{\TextoNotaDeCredito} +% \DescribeMacro{\TextoNotaDeDebito} +%% En las notas de crédito y débito, la leyenda aclaratoria de a cuál factura se hace referencia está alojada en estas macros, definidas en |factura.def|. Estas macros |\TextoNotaDeCredito| y |\TextoNotaDeDebito| están definidas de la siguiente forma: +% +% \begin{center} +% |Nota de crédito sobre la factura \NotaNum \space de fecha \NotaFecha.| \par +% |Nota de débito sobre la factura \NotaNum \space de fecha \NotaFecha.| +% \end{center} +% +% respectivamente. Se pueden redefinir con |\renewcommand| para cambiar el texto. Por otra parte, si se quiere que se imprima ese texto en otra ubicación y no como nota interna, habría que anular la nota interna con |\AtEndPreamble{\NotaInterna{}}| y luego establecer el texto en otra ubicación. Es necesario anular la nota interna con |\AtEndPreamble| por la forma como la leyenda se establece en la clase, y se puede fijar la leyenda en cualquier otra parte como la nota externa, la nota final, la nota previa o la descripción, por ejemplo así |\NotaExterna{\TextoNotaDeCredito}|. % % % \subsection{Definiciones en archivos separados \label{subsec:aux}} @@ -1415,8 +1491,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % La macro |\Cliente| incluye un archivo cuya extensión debe ser |.def| o |.tex|, de la misma forma como se hace con |\input|; es simplemente un atajo que además lee archivos |.def|. % -% } -% % % \section{La factura\label{sec:factura}} % @@ -1442,12 +1516,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \subsection{Agregando elementos a la factura} % -% \noindent -% {\macromandcolor|\Item|\marg{cantidad}\marg{descripción}\oarg{descripción para csv}\marg{precio unitario}\oarg{descripción sólo para \\ \mbox{}\hfill referencias}} % \DescribeMacro{\Item} % \DescribeMacro{\ItemR} % \DescribeMacro{\ItemA} % \DescribeMacro{\ItemE} +% {\macromandcolor|\Item|\marg{cantidad}\marg{descripción}\oarg{descripción para csv}\marg{precio unitario}\oarg{descripción \\ \mbox{}\hfill sólo para referencias}} % % Con estos comandos agregamos elementos a la factura propiamente dicha. Con |\Item| agregamos un elemento gravado con IVA general (actualmente 12\%); con |\ItemR| agregamos uno con IVA reducido (8\%), con |\ItemA| uno con IVA adicional (27\%), y con |\ItemE| agregamos un elemento exento de impuesto al valor agregado. % @@ -1457,25 +1530,22 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % También tenemos la posibilidad de agregar un ítem al que no le ponemos precio, por ejemplo por ser parte de un total, y sus argumentos son la cantidad y la descripción nada más. % -% \noindent % \DescribeMacro{\ItemX}{\macrooptcolor|\ItemX|\marg{cantidad}\marg{descripción}\oarg{descripción para csv}\oarg{descripción sólo para referencias}} % % % \subsubsection{Opción `{\ttfamily descuentos}'\label{subsec:descuentos}} % -% \noindent -% {\macromandcolor|\Item|\marg{cantidad}\marg{descripción}\oarg{descripción para csv}\marg{precio unitario}\marg{\% descuento} \\ \mbox{}\hfill \oarg{descripción sólo para referencias}} % \DescribeMacro{\Item} % \DescribeMacro{\ItemR} % \DescribeMacro{\ItemA} % \DescribeMacro{\ItemE} +% {\macromandcolor|\Item|\marg{cantidad}\marg{descripción}\oarg{descripción para csv}\marg{precio unitario}\marg{\% descuento} \\ \mbox{}\hfill \oarg{descripción sólo para referencias}} % % Cuando pedimos descuentos individuales (opción |descuentos| al cargar la clase), todas las macros |\Item| tienen un posible\footnote{Es un argumento opcional, aunque va entre llaves como todos los demás.} argumento más al final que es el descuento porcentual. No especificarlo da el mismo resultado que un descuento de 0\% sobre ese ítem: % % % \subsubsection{Opción `{\ttfamily sincantidad}'\label{subsec:sincantidad}} % -% \noindent % \DescribeMacro{\Item} % \DescribeMacro{\ItemR} % \DescribeMacro{\ItemA} @@ -1486,7 +1556,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Por otra parte, si se usa la opción |sincantidad| al cargar la clase, todos los comandos |\Item| aceptan un argumento menos, que es el de la cantidad; eso significa que sin usar la opción |descuentos|, la sintaxis de |\Item| queda como lo indica la primera línea, y usando |descuentos|, queda como lo indica la segunda línea. % -% \noindent % \DescribeMacro{\ItemX}{\macrooptcolor|\ItemX|\marg{descripción}\oarg{descripción para csv}\oarg{descripción sólo para referencias}} % % Puesto que |\ItemX| se usa para elementos sin precio, al usar |sincantidad| quedará aceptando sólo un argumento obligatorio que es la descripción y dos opcionales para la descripción en el archivo |.csv| y la descripción larga para referenciar luego. Cuando se activa la opción |descuentos|, |\ItemX| queda igual puesto que esta macro no lleva precio, entonces tampoco acepta descuentos. @@ -1498,7 +1567,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Una vez terminado el entorno de la factura se puede escribir una descripción larga que saldrá en una caja -cuyo estilo puede cambiarse-\footnote{El diseño de esta descripción consiste en su linea de contorno, cambiable como ya explicamos en la subsección \ref{subsec:espacioslineas}, específicamente con la macro \cs{LineaDescripcion}.} debajo del cuadro de la factura, esto va dentro de un |\parbox| en la implementación de la caja. Si esta descripción no se escribe, simplemente no va a aparecer nada debajo del cuadro de la factura. % -% \noindent \DescribeMacro{\Descripcion} +% \DescribeMacro{\Descripcion} % {\macrooptcolor|\Descripcion|\marg{texto en formato de párrafos}} % % {\itshape Como podemos ver, |\Descripcion| es otro de los pocos comandos que no se usan en el preámbulo sino dentro del documento, jústamente al terminar el ambiente} |factura|. @@ -1563,7 +1632,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \subsection{Estilos de página para el reporte\label{subsec:pagestyle}} % -% La clase define varios estilos de página\footnote{Usables en el reporte únicamente.} de \LaTeX{}, cambiables con los comandos usuales: |\pagestyle| y |\thispagestyle| dentro del entorno del reporte, pero es mejor definir el estilo de página en el preámbulo del documento, con |\EstiloPagReporte|. +% La clase define varios estilos de página\footnote{Usables en el reporte únicamente.} de \LaTeX{}, cambiables con los comandos usuales: |\pagestyle| y |\thispagestyle| dentro del entorno del reporte, pero es mejor definir el estilo de página en el preámbulo del documento, con |\EstiloPagina|. % % Estos estilos de página están definidos con el paquete |fancyhdr|, y son: \begin{inparaenum}[\bfseries i)]\item |plain|, \item |empty|, \item |soloarriba|, \item |soloabajo|, y \item |solonumpag|\end{inparaenum}. % @@ -1571,11 +1640,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % El formato con la información a poner en estas partes de las páginas del reporte es cambiable con |\InfoPagina|, descrito anteriormente. % -% Cuando se usa |\FondoReporte*|, como se supone que se usa para un membrete en todas las páginas, el estilo de página predeterminado del reporte será |soloabajo|, para todas las páginas, porque no tendría sentido tener un membrete en todas las páginas y una cabecera como la descrita anteriormente. Si el comando |\FondoReporte*| se está usando para algo distinto de un membrete, por ejemplo una marca de agua, entonces es probable querer cambiar los estilos de página con |\EstiloPagReporte|. +% Cuando se usa |\FondoReporte*|, como se supone que se usa para un membrete en todas las páginas, el estilo de página predeterminado del reporte será |soloabajo|, para todas las páginas, porque no tendría sentido tener un membrete en todas las páginas y una cabecera como la descrita anteriormente. Si el comando |\FondoReporte*| se está usando para algo distinto de un membrete, por ejemplo una marca de agua, entonces es probable querer cambiar los estilos de página con |\EstiloPagina|. % % Si se usa |\FondoReporte|, el estilo predeterminado para la primera página será |solonumpag|, y |plain| para el resto de las páginas, y si se no se especifica fondo alguno, entonces el estilo de página predeterminado para todas las páginas será |plain|. % -% El usuario podrá definir más estilos de página adicionales para colocar el texto que se quiera en el lugar que se quiera, y usar esos estilos de página con |\EstiloPagReporte|. Para eso puede leer la documentación del paquete |fancyhdr|, que es lo que esta clase usa para los estilos de página. También puede consultar |factura.def|, que es donde están predefinidos los estilos que trae la clase. +% El usuario podrá definir más estilos de página adicionales para colocar el texto que se quiera en el lugar que se quiera, y usar esos estilos de página con |\EstiloPagina|. Para eso puede leer la documentación del paquete |fancyhdr|, que es lo que esta clase usa para los estilos de página. También puede consultar |factura.def|, que es donde están predefinidos los estilos que trae la clase. % % El grosor de la línea decorativa que coloca el paquete |fancyhdr| está definido en el archivo |.def|, y es cambiable en la macro |\@GrosorLineaInfoPag| como podrá verse en dicho archivo; no definimos un comando para ello por no ser algo relevante pero igual podrá cambiarse con |\renewcommand| por ejemplo, como se hace en dicho |.def|. % @@ -1586,7 +1655,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Cuando en lo sucesivo nos referiremos a tipografía, tipo de letra, o letra, nos estaremos refiriendo a cualquier cambio en la tipografía que pueda significar el nombre de la letra, su tamaño o atributos como negritas, es decir, mediante cualquiera de estos comandos podemos cambiar cualquier aspecto de la tipografía. Mirando el archivo |.def| pueden verse todos los valores predeterminados, que la mayoría de ellos son simplemente cambios en el tamaño (macro |\fontsize| de \LaTeX{}), y en algunos casos negritas. % -% {\setlength{\parindent}{0pt} +% % \DescribeMacro{\LetraItems}{\macrooptcolor|\LetraItems|\marg{tipo de letra}} % % Con este comando cambiamos la tipografía utilizada en los ítems o elementos que están en el cuadro de la factura, de manera que {\itshape cambiar la longitud \cs{baselineskip} con el segundo argumento de \cs{fontsize} hará que la tabla tenga una altura distinta de las celdas.} @@ -1657,9 +1726,13 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Para cambiar la tipografía de la nota final se hace con este comando. (Aplica el mismo comentario que para la descripción y el resumen). % +% \DescribeMacro{\LetraFormalibre}{\macrooptcolor|\LetraFormalibre|\marg{tipo de letra}} +% +% Con este comando podemos cambiar la tipografía del texto “FORMA LIBRE” que debe salir solamente en las prefacturas puesto que ese texto va impreso en todas las hojas fiscales. +% % \DescribeMacro{\LetraDenom}{\macrooptcolor|\LetraDenom|\marg{tipo de letra}} % -% La tipografía asociada a la denominación del documento, es decir, al lado del número (e.g. “FACTURA” o “COTIZACIÓN”), y la asociada al texto “No. CONTROL” se cambia con |\LetraDenom|. +% La tipografía asociada a la denominación del documento, es decir, al lado del número (e.g. “FACTURA” o “COTIZACIÓN”), y la asociada al texto “No. CONTROL” (este último para prefacturas) se cambia con |\LetraDenom|. % % \DescribeMacro{\LetraNumeracion}{\macrooptcolor|\LetraNumeracion|\marg{tipo de letra}} % @@ -1685,14 +1758,12 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % Finalmente, para cambiar la tipografía con la que se inicia el reporte tenemos este comando. Obviamente también luego se puede hacer cualquier cambio dentro del ambiente |reporte|. % -% } -% % % \section{Etiquetas y referencias a ítems de la factura\label{sec:etiquetas}} % % Esta clase |factura| soporta agregar etiquetas a cada elemento de la factura que luego en el reporte o en casi cualquier otra parte queramos referenciar; {\slshape no se pueden referenciar etiquetas solamente en la nota previa ni en el resumen.} % -% \noindent \DescribeMacro{\label}{\macrooptcolor|\label|\marg{etiqueta}} +% \DescribeMacro{\label}{\macrooptcolor|\label|\marg{etiqueta}} % % Para ello usamos la conocida macro |\label| de \LaTeX{} justamente después del ítem que nos interese luego referenciar, por ejemplo (usando descuentos individuales): % @@ -1716,15 +1787,15 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % De esta forma creamos una etiqueta llamada “el-otro” para el segundo elemento, que luego podremos citar por ejemplo en la descripción larga o en el reporte con comandos similares a los que \LaTeX{} provee para referenciar etiquetas. % -% \noindent \DescribeMacro{\itemref}{\macrooptcolor|\itemref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\cantref}{\macrooptcolor|\cantref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\descref}{\macrooptcolor|\descref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\puref}{\macrooptcolor|\puref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\subtref}{\macrooptcolor|\subtref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\dctoref}{\macrooptcolor|\dctoref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\ivaref}{\macrooptcolor|\ivaref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\ptref}{\macrooptcolor|\ptref|\marg{etiqueta}}\\ -% \noindent \DescribeMacro{\ldescref}{\macrooptcolor|\ldescref|\marg{etiqueta}}\par +% \DescribeMacro{\itemref}{\macrooptcolor|\itemref|\marg{etiqueta}}\\ +% \DescribeMacro{\cantref}{\macrooptcolor|\cantref|\marg{etiqueta}}\\ +% \DescribeMacro{\descref}{\macrooptcolor|\descref|\marg{etiqueta}}\\ +% \DescribeMacro{\puref}{\macrooptcolor|\puref|\marg{etiqueta}}\\ +% \DescribeMacro{\subtref}{\macrooptcolor|\subtref|\marg{etiqueta}}\\ +% \DescribeMacro{\dctoref}{\macrooptcolor|\dctoref|\marg{etiqueta}}\\ +% \DescribeMacro{\ivaref}{\macrooptcolor|\ivaref|\marg{etiqueta}}\\ +% \DescribeMacro{\ptref}{\macrooptcolor|\ptref|\marg{etiqueta}}\\ +% \DescribeMacro{\ldescref}{\macrooptcolor|\ldescref|\marg{etiqueta}}\par % % Si se quiere mostrar el número de la línea que ocupa el ítem en la lista lo hacemos con |\itemref|, que en el ejemplo aparecería el número “|2|” indicando que es el segundo ítem de la factura\footnote{Cuando se usa \cs{itemref} conviene enumerar los ítems en la factura con la opción \texttt{numitem}.}. Con |\cantref| escribimos la cantidad del elemento citado mediante la etiqueta, en nuestro ejemplo sería “|3|”. Para la descripción del ítem usamos |\descref|, que en el caso del ejemplo sería el texto “|Otro artículo gravado con IVA general|”. Para el precio unitario usamos |\puref|, en el ejemplo “|1.500,00|”. El subtotal lo mostraríamos con |\subtref|; en nuestro caso “|4.500,00|”. Si se quiere mostrar el porcentaje del descuento del ítem citado usamos |\dctoref|, que para el ejemplo sería “|10|”. Para el porcentaje del IVA, usamos |\ivaref|, en nuestro caso escribiría “|12|”. Por último, para mostrar el precio total usamos |\ptref|, y en nuestro ejemplo eso escribiría “|4.050,00|” puesto que aplicamos un descuento del 10\%. % @@ -1736,12 +1807,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % Con la asignación de estas etiquetas y su uso mediante las referencias podemos de manera conveniente citar cualquier ítem que se haya facturado, de manera dinámica sin tener que reescribir en la descripción larga o en el reporte aquello que ya se escribió en el cuadro de la factura. Para estas referencias se escogieron nombres de las macros que terminan en “\texttt{ref}” por compatibilidad con comandos de \LaTeX{} como |\pageref|. % % -% % \section{Referenciar los valores establecidos en el preámbulo y los totales\label{sec:ref}} % -% En el preámbulo el usuario definió distintas macros, es decir, estableció la razón social del cliente, el R.I.F. y la dirección, entre otras cosas. Cualquiera de esas definiciones hechas en el preámbulo puede usarse luego en otra parte del documento con el mismo comando que se usó para su definición. Lo anterior significa que tenemos las siguientes macros posibles para usar dentro del cuerpo del documento (factura, reporte o reverso): |\Moneda|, |\RazonSocial|, |\RIF|, |\Direccion|, |\Telefono|, |\Email|, |\Contacto|, |\Emisor|, |\Conforme|, |\Proveedor|, |\Fecha|, |\FechaVencimiento|\footnote{La fecha de vencimiento no se establece en el preámbulo explícitamente sino a través de \cs{Credito} pero la clase dispone de esta interfaz para acceder a ella así como también con la interfaz dada por \texttt{datetime2}.}, |\Credito|, |\Num|, |\NumControl|, |\NumSerieControl|, |\Resumen|, |\NotaPrevia|, |\NotaInterna|, |\NotaExterna|, |\NotaFinal|, |\TituloReporte|. +% En el preámbulo el usuario definió distintas macros, es decir, estableció la razón social del cliente, el R.I.F. y la dirección, entre otras cosas. Cualquiera de esas definiciones hechas en el preámbulo puede usarse luego en otra parte del documento con el mismo comando que se usó para su definición. Lo anterior significa que tenemos las siguientes macros posibles: |\Moneda|, |\RazonSocial|, |\RIF|, |\Direccion|, |\Telefono|, |\Email|, |\Contacto|, |\Emisor|, |\Conforme|, |\Proveedor|, |\Fecha|, |\NotaFecha|, |\FechaVencimiento|\footnote{La fecha de vencimiento no se establece en el preámbulo explícitamente sino a través de \cs{Credito} pero la clase dispone de esta interfaz para acceder a ella así como también con la interfaz dada por \texttt{datetime2}.}, |\Credito|, |\Num|, |\NumControl|, |\NumSerieControl|, |\NotaNum|, |\Resumen|, |\NotaPrevia|, |\NotaInterna|, |\NotaExterna|, |\NotaFinal|, |\TituloReporte|. Cualquiera de estas macros se puede usar cualquier parte del documento, ya no con la misma función para definir valores como en el preámbulo. % -% Esas macros, en el preámbulo funcionan para definir valores y textos, pero si ya no estamos en el preámbulos sino dentro del cuerpo del documento y escribimos una de esas macros\footnote{Dentro del cuerpo del documento estas macros obviamente no aceptan argumentos.}, lo que nos va a escribir será lo que está definido bajo esa macro, así sea con macros que no llegamos a utilizar explícitamente pero que tienen un valor predefinido como |\Moneda|. +% Esas macros, en el preámbulo funcionan para definir valores y textos, pero si ya no estamos en el preámbulo sino dentro del cuerpo del documento y escribimos una de esas macros\footnote{Dentro del cuerpo del documento estas macros obviamente no aceptan argumentos.}, nos va a servir para escribir lo que se definió en el preámbulo bajo esa macro, así sea con macros que no llegamos a utilizar explícitamente pero que tienen un valor predefinido como |\Moneda|. % % Por otra parte, en el documento el usuario también podrá referirse a cualquiera de los totales de la siguiente tabla\footnote{Las macros de la tabla, para representarlas en el mismo formato que en la factura, debemos usar la macro \cs{numprint}.}: % @@ -1757,7 +1827,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \hline % \end{tabular} % -% También ya mencionamos que la fecha de emisión y vencimiento se pueden acceder con la interfaz dada por el paquete |datetime2|, por ejemplo, para mostrar la fecha de emisión, podremos usar tanto |\Fecha| como |\DTMusedate{FechaEmision}|, y para la fecha de vencimiento, tanto |\FechaVencimiento| como |\DTMusedate{FechaVencimiento}|. +% También ya mencionamos que la fecha de emisión y vencimiento se pueden acceder con la interfaz dada por el paquete |datetime2|, por ejemplo, para mostrar la fecha de emisión, podremos usar tanto |\Fecha| como |\DTMusedate{FechaEmision}|. Para la fecha de vencimiento, tanto |\FechaVencimiento| como |\DTMusedate{FechaVencimiento}|, y para la fecha de la factura a la que la nota de crédito/débito hace referencia, |\NotaFecha| o |\UDMusedate{NotaFecha}|. % % La cantidad de ítems en la factura la podemos acceder via el contador |NumItem|, por ejemplo así |\arabic{NumItem}|. % @@ -1766,7 +1836,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % \section{Más personalizaciones} % -% \DescribeMacro{\@BeforeEndPreamble} +% \DescribeMacro{\BeforeEndPreamble}{\macrooptcolor|\BeforeEndPreamble|\marg{código \TeX}} +% % La clase provee de un “gancho” llamado \cs{BeforeEndPreamble}. Lo que allí se agregue (es acumulativo, se puede ejecutar mas de una vez) será ejecutado por la clase |factura| luego de que hayan sido evaluadas las opciones de la clase y tomadas todas las decisiones en cuanto a opciones que impliquen otras opciones o que sean incompatibles con otras opciones; una vez que todas esas decisiones fueron tomadas y todo queda establecido, se ejecuta \cs{BeforeEndPreamble}, esto con el propósito de que el usuario pueda personalizar más el comportamiento de sus archivos |.tex|. Por ejemplo si el usuario hace lo siguiente, no funcionará: % % \iffalse @@ -1811,8 +1882,17 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % % De esta forma, el condicional se evaluará después de que se hayan establecido todas las opciones (en este caso, |cotizacion|) y el usuario podrá inclusive apagar opciones y encenderlas nuevamente usando los condicionales (como se explicó en la subsección \ref{subsec:condicionales} porque después de ejecutar este gancho, automáticamente se volverán a evaluar las opciones y a tomar todas las decisiones de implicaciones y compatibilidades. % -% \newpage +% \DescribeMacro{\BeforeEndPreamble*}{\macrooptcolor|\BeforeEndPreamble*|\marg{código \TeX}} +% +% Con esta versión de \cs{BeforeEndPreamble}, cualquier invocación previa de esta macro queda eliminada, deja de funcionar en modo “{\slshape append}”. +% +% \DescribeMacro{\BeforeEndPreamble**}{\macrooptcolor|\BeforeEndPreamble**|\marg{código \TeX}} +% +% Con esta versión de \cs{BeforeEndPreamble}, lo agregado pasa a ocupar el primer lugar, es decir, las invocaciones previas de esta macro quedan después, funcionando así en modo “{\slshape prepend}”. +% +% % \DescribeMacro{\@PosicionaFechas} +% \DescribeMacro{\@PosicionaFormalibre} % \DescribeMacro{\@PosicionaDenom} % \DescribeMacro{\@PosicionaNumControl} % \DescribeMacro{\@PosicionaNotaFinal} @@ -1823,38 +1903,39 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \DescribeMacro{\@EscribeNotaFinal} % \DescribeMacro{\@EscribeNotaPrevia} % \DescribeMacro{\@DibujaLinea} +% \indent También es posible darle aspecto distinto a muchas de las partes que conforman la factura. Internamente en la clase, cada parte es ubicada en la hoja con un comando y su contenido es escrito en el papel con otro comando. Los comandos que más probablemente son sujetos a ser cambiados por el usuario son los comandos que escriben el texto más que aquellos que lo ubican en la hoja, por tal razón, los comandos que posicionan aquello que va a escribirse lo definimos dentro del archivo |.cls|, y los que propiamente escriben cada parte de la hoja están definidos en el |.def|. Ambas fuentes las podrán consultar los usuarios para mayor comprensión, y para la total personalización. Recomendamos empezar por el archivo de definiciones |factura.def|. +% % \DescribeMacro{\@EscribeItemsEnCSV} % \DescribeMacro{\@EscribeTotalesEnCSV} % \DescribeMacro{\@EncabezadoFactura} % \DescribeMacro{\@EncabezadoReporte} -% También es posible darle aspecto distinto a muchas de las partes que conforman la factura. Internamente en la clase, cada parte es ubicada en la hoja con un comando y su contenido es escrito en el papel con otro comando. Los comandos que más probablemente son sujetos a ser cambiados por el usuario son los comandos que escriben el texto más que aquellos que lo ubican en la hoja, por tal razón, los comandos que posicionan aquello que va a escribirse lo definimos dentro del archivo |.cls|, y los que propiamente escriben cada parte de la hoja están definidos en el |.def|. Ambas fuentes las podrán consultar los usuarios para mayor comprensión, y para la total personalización. Recomendamos empezar por el archivo de definiciones |factura.def|. -% -% Estas macros son internas y sirven para, como dijimos antes, que \LaTeX{} se prepare para escribir el texto en la hoja; todas empiezan con |\@Posiciona| y no debe ser común necesitar cambiarlas. +% \indent Estas macros son internas y sirven para, como dijimos antes, que \LaTeX{} se prepare para escribir el texto en la hoja; todas empiezan con |\@Posiciona| y no debe ser común necesitar cambiarlas. % % Todas estas macros llaman a su correspondiente macro con el estilo del elemento a escribir, que comienza con |\@Estilo|, y con cambiar su contenido podemos cambiar la forma como es escrita esa parte de la factura en la hoja. % % \DescribeMacro{\@EstiloFechas} +% \DescribeMacro{\@EstiloFormalibre} % \DescribeMacro{\@EstiloDenom} % \DescribeMacro{\@EstiloNumControl} % \DescribeMacro{\@EstiloNotaPrevia} % \DescribeMacro{\@EstiloNotaFinal} % \DescribeMacro{\@EstiloFirmas} +% \DescribeMacro{\@EstiloParrafoReporte} +% \indent Estas últimas son las que están definidas dentro de |factura.def|, y que eventualmente puede desearse cambiarlas. +% +% Adicionalmente están las macros que se encargan de distintas partes de la factura y del reporte como los datos del cliente, el resumen, la nota previa, la nota final, los encabezados, la información en el archivo |.csv|, y la macro que dibuja la línea que inutiliza el espacio en blanco. Todas estas son macros internas que no deben ser llamadas por el usuario, y no consideramos que pueda sea necesario cambiarlas. +% % \DescribeMacro{\@DatosTIKZ} % \DescribeMacro{\@NotaPreviaTIKZ} % \DescribeMacro{\@DescripcionTIKZ} % \DescribeMacro{\@NotaFinalTIKZ} -% Estas últimas son las que están definidas dentro de |factura.def|, y que eventualmente puede desearse cambiarlas. -% -% Adicionalmente están las macros que se encargan de distintas partes de la factura y del reporte como los datos del cliente, el resumen, la nota previa, la nota final, los encabezados, la información en el archivo |.csv|, y la macro que dibuja la línea que inutiliza el espacio en blanco. Todas estas son macros internas que no deben ser llamadas por el usuario, y no consideramos que pueda sea necesario cambiarlas. -% -% Por último, las macros que alojan el diseño \tikz de los datos del cliente, la nota previa, la descripción larga y la nota final son |\@DatosTIKZ|, |\@NotaPreviaTIKZ|, |\@DescripcionTIKZ| y |\@NotaFinalTIKZ|; están definidas en el archivo |factura.def|. +% \indent Por último, las macros que alojan el diseño \tikz de los datos del cliente, la nota previa, la descripción larga y la nota final son |\@DatosTIKZ|, |\@NotaPreviaTIKZ|, |\@DescripcionTIKZ| y |\@NotaFinalTIKZ|; están también definidas en el archivo |factura.def|. % % Cualquiera de estas macros que se quiera redefinir habría que hacerlo en el preámbulo del |.tex| y encerrándolas entre |\makeatletter| y |\makeatother| para poder redefinir una macro que contiene un símbolo “|@|”. % % {\bfseries \itshape Finalmente, como dijimos en la sección \ref{subsec:aux}, una vez adecuada la clase al diseño que se quiere, se podrán escribir todos los comandos que hacen estos ajustes en un} |.tex| {\itshape o} |.def| {\itshape y cargarlo con} |\input|, |\include| {\itshape o con} |\Cliente|, pudiendo discriminar por clientes dicha personalización. % % -% % \newpage % \setstretch{1} % \section{Tabla con todas las opciones} @@ -1868,10 +1949,9 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % centrado & Centra los totales en el modo de filas. \\ % conlineasha & Dibuja una línea separando los artículos entre sí. \\ % conreporte & Produce la factura y el reporte. \\ -% cotización & Imprime una cotización. \\ +% cotizacion & Produce una cotización. \\ % csv & Genera un archivo |.csv| con la información numérica de la factura. \\ % dcu & Descripción, cantidad, precio unitario. \\ -% denom & Explicita la denominación del documento. \\ % descuentos & A cada artículo se le puede asignar un descuento individual. \\ % dosfirmas & Incluye los dos espacios para firmar. \\ % duc & Descripción, precio unitario, cantidad. \\ @@ -1883,9 +1963,19 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % iva & Expresa en otra columna el porcentaje de IVA para cada elemento a facturar. \\ % linea & Dibuja una línea que inutiliza el espacio en blanco en el cuadro de la factura. \\ % nospanish & No carga |babel| ni |fontenc|. \\ -% numitem & Enumera los ítems en la factura en otra columna extra al principio. \\ -% prefactura & Imprime una prefactura. \\ +% numitem & Enumera los ítems en la factura bajo otra columna extra al principio. \\ +% notadecredito & Produce una nota de crédito. \\ +% notadedebito & Produce una nota de débito. \\ +% prefactura & Produce una prefactura. \\ +% \end{tabular} +% \newpage +% \noindent \begin{tabular}{>{\ttfamily}ll} +% \rmfamily \bfseries Opción & \bfseries Significado \\ \hline % sincantidad & Los artículos van sin expresar su cantidad. \\ +% sindenom & No escribe la denominación del documento ni el número. \\ +% \footnotesize sinencabezadofactura & No escribe los datos del cliente al inicio de la factura. \\ +% \footnotesize sinencabezadoreporte & No escribe la identificación del cliente y el proveedor \\ +% & al inicio del reporte. \\ % sinexpandir & No expande elementos en la factura. \\ % sinfirmas & No incluye espacios para firmar. \\ % siniva & No incluye IVA, pero lo deja expresado. \\ @@ -1902,7 +1992,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % sinmarcas & No escribe el carácter de fin de línea ni el carácter en las celdas vacías \\ % & cuando la descripción ocupa más que una línea. \\ % sinmonedatotales & Quita el signo monetario de las totalizaciones. \\ -% sinnumero & No pone el número cuando se usa |denom|. \\ +% sinnumero & No pone el número del documento, cuando no se usa |sindenom|. \\ % sintotales & No escribe los totales al final del cuadro; para cotizaciones. \\ % sinreverso & No compila el reverso de la factura así se haya escrito. \\ % soloreporte & Produce únicamente el reporte. \\ @@ -1938,9 +2028,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % |\Direccion| & Dirección del cliente. \\ % |\Email| & E-mail del cliente. \\ % |\Emisor| & Nombre de quien emite la factura, para el espacio de la firma. \\ -% |\EstiloPagReporte| & Establece el estilo de página del reporte. \\ +% |\EstiloPagina| & Establece el estilo de página del reporte. \\ % |\Fecha| & Establece la fecha de emisión de la factura en formato predeterminado. \\ % |\Fecha*| & Establece la fecha de emisión de la factura en formato ISO. \\ +% |\NotaFecha| & Fecha de la factura a corregir con una nota de crédito o débito. \\ +% |\NotaFecha*| & Fecha (formato ISO) de la factura a corregir con una nota de crédito o débito. \\ % |\FirmaFactura| & Carga la imagen de la firma en la factura. \\ % |\FirmaReporte| & Carga la imagen de la firma en el reporte\footnote{El comando \cs{FirmaReporte} se escribe dentro del ambiente \texttt{reporte} y no en el preámbulo.}. \\ % |\FondoFactura| & Carga la imagen del fondo de la factura. \\ @@ -1967,6 +2059,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % |\LetraEncReporte| & Tipografía para la información del encabezado del reporte. \\ % |\LetraFecha| & Tipografía para la fecha de emisión. \\ % |\LetraFirmas| & Tipografía para los nombres de quienes firman la factura. \\ +% |\LetraFormalibre| & Tipografía para el texto “FORMA LIBRE”. \\ % |\LetraInfoPagina| & Tipografía para las cabeceras o pies de página del reporte. \\ % |\LetraItems| & Tipografía para los ítems en la factura. \\ % |\LetraNotaExterna| & Tipografía para la nota externa al cuadro de la factura. \\ @@ -2007,12 +2100,16 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % |\NotaInterna* **| & Con |*| agrega la nota interna después de la anterior; con |**|, al principio. \\ % |\NotaPrevia| & Escribe una nota antes del cuadro de la factura. \\ % |\NotaPrevia* **| & Con |*| agrega la nota previa después de la anterior; con |**|, al principio. \\ +% |\NotaNum| & Número de la factura a corregir con una nota de crédito o débito. \\ % |\Num| & Número de la factura. \\ % |\NumControl| & Número de control de la factura. \\ % |\NumSerieControl| & Número de serie de control de la factura. \\ % |\PosNotaFinal| & Posición $(x_o,x_f,y)$ del párrafo con la nota final. \\ % |\PosNotaFinal*| & Posición $(x_o,x_f,y)$ del párrafo con la nota final \\ % & (el texto se despliega hacia arriba). \\ +% |\PosFormalibre| & Posición $(x,y)$ del texto “FORMA LIBRE”. \\ +% |\PosFormalibre*| & Posición $(x,y)$ del texto “FORMA LIBRE”. \\ +% & (el texto se despliega hacia arriba). \\ % |\PosControl| & Posición $(x,y)$ del número de control. \\ % |\PosControl*| & Posición $(x,y)$ del número de control \\ % & (el texto se despliega hacia arriba). \\ @@ -2080,6 +2177,9 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \Ejemplo[0.49]{ejemplo-factura10}*{2} % \Ejemplo*{ejemplo-factura10}* % \newpage +% \Ejemplo{ejemplo-notadecredito} +% \Ejemplo{ejemplo-notadedebito} +% \newpage % \Ejemplo*[0.49]{ejemplo-reporte1} % \Ejemplo[0.49]{ejemplo-reporte1}*{2} % \Ejemplo[0.49]{ejemplo-reporte1}{4}[\slshape Por espacio se omitió la página 2 en esta representación.] @@ -2132,6 +2232,9 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \newbool{ControlXnegativo} \newbool{ControlYarriba} \newbool{ControlYnegativo} +\newbool{FormalibreXnegativo} +\newbool{FormalibreYarriba} +\newbool{FormalibreYnegativo} \newbool{DenomXnegativo} \newbool{DenomYarriba} \newbool{DenomYnegativo} @@ -2149,7 +2252,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \newif\ifcotizacion \newif\ifcsv \newif\ifdcu -\newif\ifdenom \newif\ifdescuentos \newif\ifdosfirmas \newif\ifduc @@ -2162,9 +2264,14 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \newif\ifiva \newif\iflinea \newif\ifnospanish +\newif\ifnotadecredito +\newif\ifnotadedebito \newif\ifnumitem \newif\ifprefactura \newif\ifsincantidad +\newif\ifsindenom +\newif\ifsinencabezadofactura +\newif\ifsinencabezadoreporte \newif\ifsinexpandir \newif\ifsinfirmas \newif\ifsiniva @@ -2262,6 +2369,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \newlength{\@PosNotaFinalY} \newlength{\@PosControlX} \newlength{\@PosControlY} +\newlength{\@PosFormalibreX} +\newlength{\@PosFormalibreY} \newlength{\@EspacioVacioInicial} \newlength{\@EspacioVacioFinal} \newlength{\@EspacioSignoMonetario} @@ -2299,6 +2408,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \newbox{\@CajaFecha} \newbox{\@CajaDenom} \newbox{\@CajaControl} +\newbox{\@CajaFormalibre} \newbox{\@CajaNotaFinal} \newbox{\@CajaEspacioVacio} \newbox{\@CajaPrueba} @@ -2325,7 +2435,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \DeclareOption{cotizacion}{\cotizaciontrue}% Cambia la denominación a 'COTIZACIÓN' y no 'FACTURA'. \DeclareOption{csv}{\csvtrue}% Para la salida en modo csv también. \DeclareOption{dcu}{\dcutrue}% Descripción, luego cantidad y luego precio unitario. -\DeclareOption{denom}{\denomtrue}% Agrega el texto con la denominación del documento, para las formas libres que no tienen el número de factura. +\DeclareOption{sindenom}{\sindenomtrue}% No agrega el texto con la denominación del documento, para las formas libres que tienen el número de la factura ya impreso. \DeclareOption{descuentos}{\descuentostrue}% Para los descuentos individuales. \DeclareOption{dosfirmas}{\dosfirmastrue}% Pone las dos firmas para firmar. \DeclareOption{duc}{\ductrue}% Descripción, luego precio unitario y luego cantidad. @@ -2337,9 +2447,13 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \DeclareOption{iva}{\ivatrue}% Para la columna del IVA. \DeclareOption{linea}{\lineatrue}% Para la línea que inutiliza el espacio en blanco. \DeclareOption{nospanish}{\nospanishtrue}% No carga babel en castellano ni la codificación T1 de las letras. +\DeclareOption{notadecredito}{\notadecreditotrue}% Produce una nota de crédito. +\DeclareOption{notadedebito}{\notadedebitotrue}% Produce una nota de débito. \DeclareOption{numitem}{\numitemtrue}% Para poner una columna extra al principio con el número del ítem. \DeclareOption{prefactura}{\prefacturatrue}% La prefactura; con el diseño de la forma libre... para enviar por correo electrónico, fax o imprimir preliminarmente. \DeclareOption{sincantidad}{\sincantidadtrue}% Para no poner el campo de la cantidad. +\DeclareOption{sinencabezadofactura}{\sinencabezadofacturatrue}% Para no poner los datos del cliente y que el emisor haga ese diseño. +\DeclareOption{sinencabezadoreporte}{\sinencabezadoreportetrue}% Para no poner el encabezado del reporte. \DeclareOption{sinexpandir}{\sinexpandirtrue}% No expande ninguna de las dos partes de la factura. \DeclareOption{sinfirmas}{\sinfirmastrue}% No agrega los espacios para firmar. \DeclareOption{sinivaexpresado}{\sinivaexpresadotrue}% Cuando no se cobra IVA y tampoco se quiere que aparezca la totalización del IVA. @@ -2379,6 +2493,10 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \RequirePackage{numprint}% Con 'numprint' expresamos los totales en el formato requerido. \RequirePackage{tikz}% Para los recuadros del encabezado de la factura, \usetikzlibrary{shadows}% y para el de la descripción. + \tikzset{reuse path/.code={\pgfsyssoftpath@setcurrentpath{#1}}} + \tikzset{even odd clip/.code={\pgfseteorule}, protect/.code={ + \clip[overlay,even odd clip,reuse path=#1] + (-2383.99999pt,-2383.99999pt) rectangle (2383.99999pt,2383.99999pt);}} \RequirePackage{tabularx}% Con 'tabularx' hacemos la tabla. \RequirePackage{environ}% Con 'environ' podemos usar tabularx dentro del ambiente de la factura y escribir texto en el enddef. \RequirePackage{fancyhdr}% Las cabeceras fancy; así se use solamente en reporte, hay que cargarlo siempre. @@ -2423,7 +2541,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \ifxetex \special{pdf: docinfo << /Subject (\@factura@ver) >>} \else - \AtEndDocument{ + \AfterEndDocument{% AfterEndDocument y no AtEndDocument porque si no hyperref sustituye la metadata. \ifluatex \pdfextension info{/Subject (\@factura@ver)} \else @@ -2431,21 +2549,47 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \fi} \fi +%% Lo hacemos compatible otra vez con LuaLaTeX +\ifluatex + \let\pdfsavepos\savepos + \let\pdflastypos\lastypos +\fi + \def\@EstableceOpciones{% % Establecemos los parámetros y macros relativas a la fecha. \DTMsetstyle{\@FormatoFecha}\DTMsetup{datesep=\@FechaSeparadores}\gdef\DTMinformat{\@FormatoFechaEntrada} % Tomamos las acciones pertinentes dependiendo de las opciones de la clase (o condicionales activados en el preámbulo que cambian las opciones de la clase) + \ifnotadedebito + \ifnotadecredito + \CLASSERROR{Las opciones 'notadedebito' y 'notadecredito' no son compatibles. Sin efecto ambas opciones} + \notadecreditofalse + \notadedebitofalse + \else + \ifcotizacion + \CLASSERROR{Las opciones 'notadedebito' y 'cotizacion' no son compatibles. Sin efecto ambas opciones} + \notadedebitofalse + \cotizacionfalse + \fi + \fi + \fi + \ifnotadecredito + \ifcotizacion + \CLASSERROR{Las opciones 'notadecredito' y 'cotizacion' no son compatibles. Sin efecto ambas opciones} + \notadecreditofalse + \cotizacionfalse + \fi + \fi \ifprefactura \ifcotizacion \prefacturafalse \cotizacionfalse \CLASSWARNING{Las opciones 'prefactura' y 'cotizacion' no son compatibles. Sin efecto ambas opciones} \else - \denomtrue\setcounter{@Firmas}{0} + \setcounter{@Firmas}{0} \fi \fi - \ifcotizacion\denomtrue\setcounter{@Firmas}{1}\fi + \ifcotizacion\setcounter{@Firmas}{1}\fi \ifsinlineasv\booltrue{SinLineasVertExt}\booltrue{SinLineasVertInt}\fi \ifsinlineasvi\booltrue{SinLineasVertInt}\fi @@ -2464,6 +2608,17 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \fi \ifsinlineashe\booltrue{SinLineasHoriExt}\fi + \ifsindenom + \else + \ifcotizacion + \else + \ifsinnumero + \CLASSERROR{La opcio'n para no poner el nu'mero so'lo es compatible con las cotizaciones. Sin efecto opcio'n 'sinnumero'}% + \sinnumerofalse + \fi + \fi + \fi + \ifdosfirmas \setcounter{@Firmas}{2} \ifunafirma @@ -2527,7 +2682,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \fi \fi - \ifsinnumero\denomtrue\fi \ifsintotales \iffilas \filasfalse @@ -2565,6 +2719,15 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \fi % \fi + % Se establece el texto de la nota de crédito o débito como nota interna. Para cambiarlo hay que anular el texto con \AtEndPreamble{\NotaInterna{}} + \ifnotadecredito + \NotaInterna{\TextoNotaDeCredito} + \CLASSINFO{Se establecio' el texto aclaratorio de la nota de cre'dito como 'nota interna'} + \fi + \ifnotadedebito + \NotaInterna{\TextoNotaDeDebito} + \CLASSINFO{Se establecio' el texto aclaratorio de la nota de de'bito como 'nota interna'} + \fi \iftodosiva \@BIRtrue \@BIAtrue \@Exentotrue \Gtrue \fi \ifsiniva\AtBeginDocument{\gdef\@ImpuestoG{0}\gdef\@ImpuestoR{0}\gdef\@ImpuestoA{0}}\fi \ifsinivaexpresado @@ -2633,11 +2796,13 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \@twosidefalse\@mparswitchfalse \fi} +%% Antes de que se acabe el preámbulo. Sin *, hace append, con un * sustituye, con **, hace prepend. \NewDocumentCommand{\BeforeEndPreamble}{s s +m}{ \IfBooleanTF{#2} {\gpreto{\@BeforeEndPreamble}{#3}} {\IfBooleanTF{#1}{\long\gdef\@BeforeEndPreamble{#3}}{\gappto{\@BeforeEndPreamble}{#3}}}} +%% Primer \AtEndPreamble: ejecuta \@EstableceOpciones, luego \@BeforeEndPreamble y luego otra vez \@EstableceOpciones. \AtEndPreamble{ \@EstableceOpciones \ifx\@undefined\@BeforeEndPreamble\else\@BeforeEndPreamble\@EstableceOpciones\fi @@ -2651,7 +2816,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \ifcotizacion \CLASSINFO{Opcio'n cargada: cotizacion}\fi \ifcsv \CLASSINFO{Opcio'n cargada: csv}\fi \ifdcu \CLASSINFO{Opcio'n cargada: dcu}\fi - \ifdenom \CLASSINFO{Opcio'n cargada: denom}\fi \ifdescuentos \CLASSINFO{Opcio'n cargada: descuentos}\fi \ifdosfirmas \CLASSINFO{Opcio'n cargada: dosfirmas}\fi \ifduc \CLASSINFO{Opcio'n cargada: duc}\fi @@ -2664,9 +2828,14 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \ifiva \CLASSINFO{Opcio'n cargada: iva}\fi \iflinea \CLASSINFO{Opcio'n cargada: linea}\fi \ifnospanish \CLASSINFO{Opcio'n cargada: nospanish}\fi + \ifnotadecredito \CLASSINFO{Opcio'n cargada: notadecredito}\fi + \ifnotadedebito \CLASSINFO{Opcio'n cargada: notadedebito}\fi \ifnumitem \CLASSINFO{Opcio'n cargada: numitem}\fi \ifprefactura \CLASSINFO{Opcio'n cargada: prefactura}\fi \ifsincantidad \CLASSINFO{Opcio'n cargada: sincantidad}\fi + \ifsindenom \CLASSINFO{Opcio'n cargada: sindenom}\fi + \ifsinencabezadofactura \CLASSINFO{Opcio'n cargada: sinencabezadofactura}\fi + \ifsinencabezadoreporte \CLASSINFO{Opcio'n cargada: sinencabezadoreporte}\fi \ifsinexpandir \CLASSINFO{Opcio'n cargada: sinexpandir}\fi \ifsinfirmas \CLASSINFO{Opcio'n cargada: sinfirmas}\fi \ifsiniva \CLASSINFO{Opcio'n cargada: siniva}\fi @@ -2697,6 +2866,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %% Escribimos el total como comentario en el .log. \AtEndDocument{% + \ifx\undefined\Total\else\immediate\write\@auxout{\gdef\noexpand\TotalX{\Total}}\fi \ifsintotales \else \if@factura\CLASSINFO{\@@Total: \space\space\space \Moneda \Total}\fi @@ -2711,7 +2881,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<class>\def\GeometriaFactura#1{\gdef\@GeometriaFactura{#1}} %<class>\def\GeometriaReverso#1{\gdef\@GeometriaReverso{#1}} %<class>\def\GeometriaReporte#1{\gdef\@GeometriaReporte{#1}} -%<def>\GeometriaFactura{letterpaper,vmargin={5.2cm,5.5cm},hmargin={1cm,1cm},footskip=0pt, headsep=0pt, headheight=0pt} +%<def>\GeometriaFactura{letterpaper,vmargin={4.7cm,5.5cm},hmargin={1cm,1cm},footskip=0pt, headsep=0pt, headheight=0pt} %<def>\GeometriaReverso{letterpaper,vmargin={1cm,1cm}, hmargin={1cm,1cm},footskip=0cm, headsep=0pt, headheight=0pt} %<def>\GeometriaReporte{letterpaper,vmargin={2.8cm,2.5cm},hmargin={3cm,2cm},footskip=1.2cm,headsep=0.777cm,headheight=1.5cm} @@ -2735,7 +2905,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \npdecimalsign{,} \def\@DigitosMoneda{2} \def\@DigitosPorc{2} -\def\@DigitosNumeracion{5} +\def\@DigitosNumeracion{6} \def\@FormatoFecha{ddmmyyyy} \def\@FormatoFechaEntrada{dd-mm-yyyy} \def\@FechaSeparadores{-} @@ -2759,18 +2929,17 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \def\@DenomAlicuotaA{A} \def\@DenomAlicuotaE{(E)} -%% (quitado por no vigente) -%% Texto predeterminado para la nota interna por el descuento presidencial. - % \def\@TextoDescuentoPresidencial{Se aplica un descuento del \@AlicuotaGDescPorc\% al IVA General seg\'un Decreto Presidencial 3.085 en Gaceta Oficial 41.239.} - %% Macros que guardan textos que corresponden a nombres de campos: \def\@@Fecha{Fecha de emisi\'on:} \def\@@FechaVencimiento{Fecha de vencimiento:} +\def\@@Formalibre{FORMA LIBRE} \def\@@Control{N\textordmasculine\space CONTROL} \def\@@Datos{Datos del cliente} \def\@@Resumen{Resumen del servicio} \def\@@DenomFactura{FACTURA} \def\@@DenomCotiza{COTIZACI\'ON} +\def\@@DenomNotaDeCredito{NOTA DE CR\'EDITO} +\def\@@DenomNotaDeDebito{NOTA DE D\'EBITO} \def\@@RazonSocial{Raz\'on social:} \def\@@Nombre{Nombre:} \def\@@RIF{R.I.F.:} @@ -2812,6 +2981,18 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \def\@@SubtotalA{Subtotal A} \def\@@SubtotalE{Subtotal E} +%% (quitado por no vigente) +%% Texto predeterminado para la nota interna por el descuento presidencial. + % \def\@TextoDescuentoPresidencial{Se aplica un descuento del \@AlicuotaGDescPorc\% al IVA General seg\'un Decreto Presidencial 3.085 en Gaceta Oficial 41.239.} + +%% Texto a mostrar en la nota de crédito o débito referenciando la factura a corregir. +\def\TextoNotaDeCredito{Nota de cr\'edito sobre la factura \NotaNum \space de fecha \NotaFecha.} +\def\TextoNotaDeDebito{Nota de d\'ebito sobre la factura \NotaNum \space de fecha \NotaFecha.} + +%% Texto a mostrar como cabecera o pie de página en los reportes, dependiente de si el reporte no tiene título declarado o sí lo tiene. +\def\@InfoPaginaNoTitulo{\@LetraInfoPagina Reporte correspondiente a la factura n\'umero \@Num \space de fecha \@Fecha} +\def\@InfoPaginaTitulo{\@LetraInfoPagina \@TituloReporte \space - \@Proveedor \space - \@Fecha} + %% i) carácter para separar el teléfono del e-mail del cliente, %% ii) carácter para los campos vacíos cuando se usa \ItemX, %% iii) carácter para las celdas vacías cuando la descripción del ítem ocupa más que una línea. @@ -2859,13 +3040,19 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \def\@DescuentoEnum{0} \FPset\PrecioUtempx{1} -%% \Fecha, \FormatoFecha, \Credito, \Moneda, \RazonSocial, \Nombre, \RIF, \CI, \Contacto, \Dirección, \Telefono, \Email, \Conforme, \Emisor, \Proveedor. +%% \Fecha, \NotaFecha, \FormatoFecha, \Credito, \Moneda, \RazonSocial, \Nombre, \RIF, \CI, \Contacto, \Dirección, \Telefono, \Email, \Conforme, \Emisor, \Proveedor. \NewDocumentCommand{\Fecha}{s m g g}{% \IfBooleanTF{#1} {\AtEndPreamble{\DTMsavedate{FechaEmision}{#2-#3-#4}}} {\AtEndPreamble{\DTMsavedatex{FechaEmision}{#2}}}} \def\@Fecha{\DTMusedate{FechaEmision}} +\NewDocumentCommand{\NotaFecha}{s m g g}{% + \IfBooleanTF{#1} + {\AtEndPreamble{\DTMsavedate{NotaFecha}{#2-#3-#4}}} + {\AtEndPreamble{\DTMsavedatex{NotaFecha}{#2}}}} +\def\@NotaFecha{\DTMusedate{NotaFecha}} + \NewDocumentCommand{\FormatoFecha}{o g g}{% \IfValueT{#1}{\gdef\@FormatoFechaEntrada{#1}}\IfValueT{#2}{\gdef\@FormatoFecha{#2}}\IfValueT{#3}{\gdef\@FechaSeparadores{#3}}} @@ -2908,19 +3095,19 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \IfBooleanTF{#1}{\@DescEnumtrue\gdef\@DescuentoEnum{#2}}{\@DescEnumfalse\gdef\@DescuentoEporc{#2}}% \@DescEtrue\@DescuentoTotaltrue} -\def\Denom#1{\gdef\@Denominacion{#1}}% La denominación puede ser 'FACTURA', 'COTIZACIÓN' u otra. Se predetermina una de estas dos según las opciones de la clase. +\def\Denom#1{\gdef\@Denominacion{#1}}% La denominación puede ser 'FACTURA', 'COTIZACIÓN', 'NOTA DE CRÉDITO', 'NOTA DE DÉBITO' u otra. Se predetermina alguna de estas opciones según las opciones con las que se carga la clase. %% Número de la factura con \Num, número de control con \NumControl, y número de serie de control \NumSerieControl. \def\Num#1{\gdef\@Num{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}} \def\NumControl#1{\gdef\@NumControl{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}}% Si el número de control no se especifica, toma el mismo que el de la factura \def\NumSerieControl#1{\gdef\@NumSerieControl{#1}}% Si el número de serie de control no se especifica, toma '00'. +% Número de la factura a la que en la nota de crédito o débito se hace referencia. +\def\NotaNum#1{\gdef\@NotaNum{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}} + %% Información de página: cabeceras de páginas o pies de página. \def\InfoPagina#1{\gdef\@InfoPagina{#1}} -%% Advertencia para la migración de cualquier comando de condiciones a nota final. -\def\@ClassWarningCondiciones{\CLASSWARNING{Ya no son condiciones sino nota final, debe hacerse la migración a los nuevos comandos}} - %% Resumen opcional que va a la derecha de los datos del cliente. \NewDocumentCommand{\Resumen}{+m}{\gdef\@Resumen{#1}} @@ -2944,7 +3131,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \IfBooleanTF{#2} {\gpreto{\@NotaFinal}{#3}} {\IfBooleanTF{#1}{\gappto{\@NotaFinal}{#3}}{\gdef\@NotaFinal{#3}}}} -\NewDocumentCommand{\Condiciones}{+m}{\gdef\@NotaFinal{#1}\@ClassWarningCondiciones} \AtBeginDocument{% % Si no se especificó fecha, tomamos la de hoy. Además, advertimos cuando el documento se está compilando en una fecha distinta de la fecha establecida en el encabezado. @@ -2980,43 +3166,75 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % \fi % \fi - % Efectuamos distintos chequeos para dar errores o advertencias si faltó algo. - \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razo'n social}}{}% + % Efectuamos distintos chequeos para dar errores o advertencias si faltó algún dato por especificar. \if@reporte - \ifdefvoid{\@Num}{\CLASSWARNING{No se especifico' el nu'mero de la factura. Puede dar error si el ti'tulo del reporte no se especifica que aparezca en las cabeceras}}{}% + \ifsinencabezadoreporte + \ifdefvoid{\@RazonSocial}{\CLASSWARNING{No se especifico' la razo'n social. Puede dar error}}{}% + \else + \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razo'n social}}{}% + \fi + \ifdefvoid{\@Num}{\CLASSWARNING{No se especifico' el nu'mero de la factura. Puede dar error}}{}% \ifdefvoid{\@Proveedor}{% \ifdefvoid{\@Emisor} - {\CLASSERROR{Hay que definir el nombre del proveedor cuando se emite un reporte}}% + {\ifsinencabezadoreporte + \CLASSWARNING{No se especifico' el proveedor. Puede dar error}% + \else + \CLASSERROR{Hay que definir el nombre del proveedor cuando se emite un reporte}% + \fi}% {\CLASSWARNING{Se toma el emisor como el proveedor por no haberse especificado este u'ltimo}% \let\@Proveedor=\@Emisor}} {}% \fi \if@factura - \ifdefvoid{\@RIF}{\CLASSERROR{Hay que definir el R.I.F}}{}% - \ifdefvoid{\@Direccion}{\CLASSERROR{Hay que definir la direccio'n fiscal}}{}% - \ifdefvoid{\@Telefono}{\CLASSWARNING{Pudiera definirse un nu'mero telefo'nico}}{}% + \ifnotadecredito + \ifdefvoid{\@NotaNum}{\CLASSERROR{Debe definirse el nu'mero de la factura a corregir con una nota de cre'dito}}{} + \DTMifsaveddate{NotaFecha}{}{\CLASSERROR{Debe definirse la fecha de la factura a corregir con una nota de cre'dito}} + \fi + \ifnotadedebito + \ifdefvoid{\@NotaNum}{\CLASSERROR{Debe definirse el nu'mero de la factura a corregir con una nota de de'bito}}{} + \DTMifsaveddate{NotaFecha}{}{\CLASSERROR{Debe definirse la fecha de la factura a corregir con una nota de de'bito}} + \fi + \ifsinencabezadofactura + \CLASSWARNING{Se pidio la opcio'n 'sinencabezadofactura'; no se esta' verificando si esta'n definidos algunos datos del cliente} + \else + \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razo'n social}}{}% + \ifdefvoid{\@RIF}{\CLASSERROR{Hay que definir el R.I.F}}{}% + \ifdefvoid{\@Direccion}{\CLASSERROR{Hay que definir la direccio'n fiscal}}{}% + \ifdefvoid{\@Telefono}{\CLASSWARNING{Pudiera definirse un nu'mero telefo'nico}}{}% + \fi + \ifdefvoid{\@Contacto}{\if@Nombre\else\CLASSWARNING{Pudiera definirse una persona de contacto}\fi}{}% \ifdefvoid{\@Email}{\CLASSWARNING{Pudiera definirse una direccio'n de correo electro'nico}}{}% \ifdefvoid{\@NotaFinal}{\CLASSWARNING{Pudiera definirse una nota final}}{}% - \ifcotizacion - \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opcio'n para cotizacion se recomienda agregar el fondo}}{}% - \fi \ifprefactura \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opcio'n para prefactura se recomienda agregar el fondo}}{}% \fi - \ifsinnumero + % Fijamos la denominación del documento paras las cotizaciones, facturas o notas de crédito o débito, que son casos particulares del modo 'factura'. + \ifdefvoid{\@Denominacion}{% \ifcotizacion + \Denom{\@@DenomCotiza}% \else - \CLASSERROR{La opcio'n para no poner el nu'mero so'lo es compatible con las cotizaciones}% - \fi - \fi - \ifdenom - \ifsinnumero + \ifnotadecredito + \Denom{\@@DenomNotaDeCredito}% + \else + \ifnotadedebito + \Denom{\@@DenomNotaDeDebito}% + \else + \Denom{\@@DenomFactura}% + \fi + \fi + \fi}{}% + \ifsindenom + \else + \ifcotizacion \else - \ifdefvoid{\@Num}{\CLASSERROR{Hay que definir el nu'mero de la factura}}{}% + \ifsinnumero + \CLASSERROR{La opcio'n para no poner el nu'mero so'lo es compatible con las cotizaciones}% + \else + \ifdefvoid{\@Num}{\CLASSERROR{Hay que definir el nu'mero del documento a producir}}{}% + \fi \fi \fi \fi - \ifdefvoid{\@Contacto}{\if@Nombre\else\CLASSWARNING{Pudiera definirse una persona de contacto}\fi}{}% % El cálculo de la fecha de vencimiento para cuando haya crédito o fecha de vencimiento explícita. \ifdefvoid{\@Credito} @@ -3056,10 +3274,12 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \def\Proveedor{\@Proveedor}% \def\Fecha{\@Fecha}% \def\FechaVencimiento{\@FechaVencimiento}% + \def\NotaFecha{\@NotaFecha}% \def\Credito{\@Credito}% \def\Num{\@Num}% \def\NumSerieControl{\@NumSerieControl}% \def\NumControl{\@NumControl}% + \def\NotaNum{\@NotaNum}% \def\NotaFinal{\@NotaFinal}% \def\Resumen{\@Resumen}% \def\NotaPrevia{\@NotaPrevia}% @@ -3069,7 +3289,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %</class> %<*class|def> -%% Posiciones (X,Y) de los objetos: i) fecha, ii) denominación, iii) nota final, iv) número de control, v) firmas. +%% Posiciones (X,Y) de los objetos: i) fecha, ii) forma libre, iii) número de control, vi) denominación, v) nota final, vi) firmas. %<*class> \NewDocumentCommand{\PosFecha}{s m m}{ \setlength{\@PosFechaX}{#2} @@ -3077,37 +3297,46 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \IfBooleanTF{#1}{\booltrue{FechaYarriba}}{\boolfalse{FechaYarriba}} \IfBeginWith{#2}{-}{\booltrue{FechaXnegativo}}{\boolfalse{FechaXnegativo}} \IfBeginWith{#3}{-}{\booltrue{FechaYnegativo}}{\boolfalse{FechaYnegativo}}} - %</class> -%<def>\PosFecha*{-0cm}{5cm} +%<def>\PosFecha*{-0cm}{4.5cm} %<*class> -\NewDocumentCommand{\PosDenom}{s m m}{ - \setlength{\@PosDenomX}{#2} - \setlength{\@PosDenomY}{#3} - \IfBooleanTF{#1}{\booltrue{DenomYarriba}}{\boolfalse{DenomYarriba}} - \IfBeginWith{#2}{-}{\booltrue{DenomXnegativo}}{\boolfalse{DenomXnegativo}} - \IfBeginWith{#3}{-}{\booltrue{DenomYnegativo}}{\boolfalse{DenomYnegativo}}} +\NewDocumentCommand{\PosFormalibre}{s m m}{ + \setlength{\@PosFormalibreX}{#2} + \setlength{\@PosFormalibreY}{#3} + \IfBooleanTF{#1}{\booltrue{FormalibreYarriba}}{\boolfalse{FormalibreYarriba}} + \IfBeginWith{#2}{-}{\booltrue{FormalibreXnegativo}}{\boolfalse{FormalibreXnegativo}} + \IfBeginWith{#3}{-}{\booltrue{FormalibreYnegativo}}{\boolfalse{FormalibreYnegativo}}} %</class> -%<def>\PosDenom*{0cm}{5cm} +%<def>\PosFormalibre*{0cm}{-3.5cm} %<*class> + \NewDocumentCommand{\PosControl}{s m m}{ \setlength{\@PosControlX}{#2} \setlength{\@PosControlY}{#3} \IfBooleanTF{#1}{\booltrue{ControlYarriba}}{\boolfalse{ControlYarriba}} \IfBeginWith{#2}{-}{\booltrue{ControlXnegativo}}{\boolfalse{ControlXnegativo}} \IfBeginWith{#3}{-}{\booltrue{ControlYnegativo}}{\boolfalse{ControlYnegativo}}} - %</class> %<def>\PosControl*{0cm}{-2.4cm} %<*class> + +\NewDocumentCommand{\PosDenom}{s m m}{ + \setlength{\@PosDenomX}{#2} + \setlength{\@PosDenomY}{#3} + \IfBooleanTF{#1}{\booltrue{DenomYarriba}}{\boolfalse{DenomYarriba}} + \IfBeginWith{#2}{-}{\booltrue{DenomXnegativo}}{\boolfalse{DenomXnegativo}} + \IfBeginWith{#3}{-}{\booltrue{DenomYnegativo}}{\boolfalse{DenomYnegativo}}} +%</class> +%<def>\PosDenom*{0cm}{4.5cm} +%<*class> + \NewDocumentCommand{\PosNotaFinal}{s m m m}{ \setlength{\@PosNotaFinalXuno}{#2} \setlength{\@PosNotaFinalXdos}{#3} \setlength{\@PosNotaFinalY}{#4} \IfBooleanTF{#1}{\booltrue{NotaFinalYarriba}}{\boolfalse{NotaFinalYarriba}} \IfBeginWith{#4}{-}{\booltrue{NotaFinalYnegativo}}{\boolfalse{NotaFinalYnegativo}}} -\let\PosCondiciones\PosNotaFinal %</class> %<def>\PosNotaFinal{0cm}{0cm}{-5.3cm} %% La nota final se define con un X_inicial, un X_final y un Y_inicial (Xo,Xf,Y) @@ -3159,7 +3388,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<def>\SepDescripcion{6pt} %<class>\def\SepNotaFinal#1{\setlength{\@SeparaInternaNotaFinal}{#1}} -%<class>\let\SepCondiciones\SepNotaFinal %<def>\SepNotaFinal{5pt} %% Grosor de la línea de las cajas del encabezado, curvatura de la esquina y sombra. @@ -3192,7 +3420,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<class> \setlength{\@GrosorLineaNotaFinal}{#1} %<class> \IfValueT{#2}{\setlength{\@EsquinaLineaNotaFinal}{#2}} %<class> \IfValueT{#3}{\setlength{\@SombraNotaFinal}{#3}}} -%<class>\let\LineaCondiciones\LineaNotaFinal %<def>\LineaNotaFinal{0pt}{0pt}{0pt} %% El espacio vertical que hay que avanzar sólo en la primera página del reporte antes de empezar a escribir sobre él. Usable cuando la primera página tiene un membrete y las demás no, es decir, cuando se usa \FondoReporte y no \FondoReporte*. @@ -3266,13 +3493,16 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %% Tipo de letra para la nota final. %<class>\def\LetraNotaFinal#1{\gdef\@LetraNotaFinal{#1\selectfont}} -%<class>\let\LetraCondiciones\LetraNotaFinal %<def>\LetraNotaFinal{\fontsize{12}{12}} -%% Letra para la denominación del documento ('FACTURA', 'COTIZACIÓN',...). +%% Letra para la denominación del documento ('FACTURA', 'NOTA DE CRÉDITO', 'NOTA DE DÉBITO', 'COTIZACIÓN',...). %<class>\def\LetraDenom#1{\gdef\@LetraDenom{#1\selectfont}} %<def>\LetraDenom{\fontsize{14}{14}\bfseries} +%% Letra para el texto 'FORMA LIBRE' +%<class>\def\LetraFormalibre#1{\gdef\@LetraFormalibre{#1\selectfont}} +%<def>\LetraFormalibre{\fontsize{14}{14}\bfseries\color{blue}} + %% Letra para la numeración de la factura. %<class>\def\LetraNumeracion#1{\gdef\@LetraNumeracion{#1\selectfont}} %<def>\LetraNumeracion{\fontsize{14}{14}\bfseries\color{red}} @@ -3379,9 +3609,10 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \fi}} %% Comando para establecer desde el preámbulo el estilo de página (\pagestyle) del reporte, tanto para la primera página como para las siguientes. -\NewDocumentCommand{\EstiloPagReporte}{o m}{ - \gdef\@EstiloPagReporteResto{#2} - \IfValueTF{#1}{\gdef\@EstiloPagReporteUno{#1}}{\gdef\@EstiloPagReporteUno{\@EstiloPagReporteResto}}} +\NewDocumentCommand{\EstiloPagina}{o m}{ + \gdef\@EstiloPaginaResto{#2} + \IfValueTF{#1}{\gdef\@EstiloPaginaUno{#1}}{\gdef\@EstiloPaginaUno{\@EstiloPaginaResto}}} +\let\EstiloPagReporte\EstiloPagina %% El título para el reporte. \NewDocumentCommand{\TituloReporte}{s m}{ @@ -3400,9 +3631,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %% Comando para escribir el encabezado en la factura. \newcommand\@EncabezadoFactura{% - \ifdefvoid{\@Resumen}{\@EscribeDatos}{\@EscribeDatosResumen}% - \vspace*{\@SeparaVertical}% - \ifexpandecuadro\else\vfill\fi} + \ifsinencabezadofactura + \ifdefvoid{\@Resumen}{}{\CLASSWARNING{La opcio'n 'sinencabezadofactura' no es compatible con escribir un resumen. No aparecera' el resumen.}} + \else + \ifdefvoid{\@Resumen}{\@EscribeDatos}{\@EscribeDatosResumen}% + \fi} %% Comando para escribir el encabezado en el reporte. \newcommand\@EncabezadoReporte{% @@ -3413,13 +3646,16 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \vspace*{\@InicioReporte}% \fi \fi - \@EscribeDatosReporte + \ifsinencabezadoreporte\else\@EscribeDatosReporte\vskip\baselineskip\fi \@LetraReporte} %% El ambiente 'factura', usando el paquete 'environ' para su definición, y el comando auxiliar \@FacturaAuxCmd. %% Gracias a Heiko Oberdiek y a David Carlisle (Thanks to Heiko Oberdiek and David Carlisle). %% http://tex.stackexchange.com/questions/108565/know-the-cell-width-with-tabular-or-include-a-paragraph-box-without-specifying \NewEnviron{factura}{% + \vspace*{\@SeparaVertical}% + \ifsinexpandir\vfill\fi + \@EscribeNotaPrevia \ifx\undefined\Total \expandafter\@FacturaAuxCmd\expandafter{\BODY}% \ifnum\value{page}=1\else\CLASSERROR{La factura ocupa mas que una pagina}\fi @@ -4187,7 +4423,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \iffilas \@LetraNumTotales \vspace*{\@SeparaVertical}\par - \ifexpandecuadro\else\vfill\fi + \ifsinexpandir\vfill\fi \@GeneraCajasTotalesFilas \newbox{\@CajaTotal}% \savebox{\@CajaTotal}{{\@LetraTitTotal\@@Total:} \@LetraNumTotal\@SignoMonetarioAux\numprint{\Total}}% @@ -4254,7 +4490,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \vfill \ifexpandecuadro\zsaveposy{EspacioVacioFinal}\fi \vspace*{\@SeparaVertical}\par - \ifdefvoid{\@NotaExterna}{}{\parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\par}} + \ifdefvoid{\@NotaExterna}{}{% + \parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\ifsinexpandir\vfill\fi}} \ifbool{SinCantidad} % Definamos todos los comandos \Item***. El descuento es opcional; por eso usamos G{0} en \NewDocumentCommand. @@ -4315,11 +4552,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \else \RenewEnviron{reverso}{} \fi - \ifcotizacion\def\@Denominacion{\@@DenomCotiza}\else\def\@Denominacion{\@@DenomFactura}\fi% Fijamos la denominación del documento paras las cotizaciones o facturas, que son casos particulares del modo 'factura'. \expandafter\geometry\expandafter{\@GeometriaFactura}% La geometría debe aplicarse aquí. \AfterEndPreamble{% \addtolength{\@PosFechaX}{\oddsidemargin+1in}% Le sumamos el margen izquierdo a las posiciones de las cosas; es importante que se haga en un \AfterEndPreamble antes de que empiecen a escribirse otras cosas en la página. \addtolength{\@PosDenomX}{\oddsidemargin+1in}% + \addtolength{\@PosFormalibreX}{\oddsidemargin+1in}% \addtolength{\@PosControlX}{\oddsidemargin+1in}% \addtolength{\@PosNotaFinalXuno}{\oddsidemargin+1in}% \addtolength{\@PosFirmasXuno}{\oddsidemargin+1in}% @@ -4329,13 +4566,12 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \expandafter\setlength{\@SepTotales}{\the\@SeparaMinTotales plus 1fill}% \@SeparaMinTotales es el mínimo espacio entre los totales en el modo 'filas', y SepTotales es una dimensión interna, estirable, con ese como su mínimo. \thispagestyle{empty}% \pagenumbering{roman}% - \@EncabezadoFactura - \@EscribeNotaPrevia} + \@EncabezadoFactura} \AtBeginShipoutNext{% Antes abría aquí un \AtBeginShipoutNext cuando había reporte y un \AtEndDocument cuando no. No es necesario eso. También lo modifiqué en \FirmaFactura. \@CargaFondoFactura \@PosicionaFechas - \ifdenom\@PosicionaDenom\fi - \ifprefactura\@PosicionaNumControl\fi + \ifsindenom\else\@PosicionaDenom\fi + \ifprefactura\@PosicionaNumControl\@PosicionaFormalibre\fi \ifnum\value{@Firmas}=0\else\@PosicionaFirmas\fi \ifdefvoid{\@NotaFinal}{}{\@PosicionaNotaFinal}} \iflinea @@ -4360,21 +4596,45 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \setlength{\@SeparaInternaDescripcion}{0pt}\setlength{\@EsquinaLineaDescripcion}{0pt}\setlength{\@SombraDescripcion}{0pt}% \renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}% \fi - \begin{tikzpicture} - % Expandimos después para poderle pasar el contenido de la macro como argumento opcional a \node. - \expandafter\node\expandafter[\@DescripcionTIKZ]{% - \ifbool{ExpAbajo} - {\parbox[t][\textheight-\pagetotal-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion] - {\textwidth-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion}}% - {\parbox[t]{\textwidth-\@SombraDescripcion-2\@SeparaInternaDescripcion-2\@GrosorLineaDescripcion}}% - {\setlength{\parindent}{0.5cm}% - \setlength{\parskip}{2pt plus 8pt}% - \ifbool{ExpAbajo}{\vfill}{}% - #1% - \ifbool{ExpAbajo}{\vfill}{}}}% - \ifdim\@GrosorLineaDescripcion=0pt\else ;\fi% El fin del nodo va cuando hay el entorno tikzpicture original. - \end{tikzpicture} + \@DibujaDescripcion{#1}% \par\vspace*{\@SombraDescripcion}}}% +%</class> +%<*def> +%% Diseño hecho en TikZ para la descripción, los datos del cliente, el resumen, la nota previa y la nota final. +\long\def\@DibujaDescripcion#1{% +%^^A Thanks to Schrödinger's cat for this hack on tikzpicture. +%^^A Gracias a Schrödinger's cat por este hack en tikzpicture. +%^^A (https://tex.stackexchange.com/questions/544594/tikz-copy-shadow-with-watermark-issue) + \begin{tikzpicture} + \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaDescripcion, line width=\@GrosorLineaDescripcion, rounded corners=\@EsquinaLineaDescripcion]{% + \ifbool{ExpAbajo} + {\parbox[t][\textheight-\pagetotal-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion] + {\textwidth-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion}}% + {\parbox[t]{\textwidth-\@SombraDescripcion-2\@SeparaInternaDescripcion-2\@GrosorLineaDescripcion}}% + {\setlength{\parindent}{0.5cm}% + \setlength{\parskip}{2pt plus 8pt}% + \ifbool{ExpAbajo}{\vfill}{}% + #1% + \ifbool{ExpAbajo}{\vfill}{}}}% + \ifdim\@GrosorLineaDescripcion=0pt% + \else + ; + \tikzset{protect=\tmprotect}% + \node[draw=black, fill=white, inner sep=\@SeparaInternaDescripcion, line width=\@GrosorLineaDescripcion, rounded corners=\@EsquinaLineaDescripcion, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraDescripcion, shadow yshift=-\@SombraDescripcion}]{% + \ifbool{ExpAbajo} + {\parbox[t][\textheight-\pagetotal-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion] + {\textwidth-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion}}% + {\parbox[t]{\textwidth-\@SombraDescripcion-2\@SeparaInternaDescripcion-2\@GrosorLineaDescripcion}}% + {\setlength{\parindent}{0.5cm}% + \setlength{\parskip}{2pt plus 8pt}% + \ifbool{ExpAbajo}{\vfill}{}% + #1% + \ifbool{ExpAbajo}{\vfill}{}}};% + \fi% El fin del nodo va cuando hay el entorno tikzpicture original. + \end{tikzpicture}\global\let\tmprotect\undefined} + +%</def> +%<*class> \else \RenewEnviron{factura}{% \@ZERO @@ -4399,25 +4659,23 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \let\headwidth\textwidth \@CargaFondoReporte \@EncabezadoReporte - \ifdefvoid{\@EstiloPagReporteResto}{% - \if@FondoReporteStar% Si no usamos \EstiloPagReporte entonces se fijará 'soloabajo' cuando se use \FondoReporte* para que sólo use marcas de pie de página, y si no se usó \FondoReporte* entonces se fijará 'plain' que usa cabeceras y pies de página. + \ifdefvoid{\@EstiloPaginaResto}{% + \if@FondoReporteStar% Si no usamos \EstiloPagina entonces se fijará 'soloabajo' cuando se use \FondoReporte* para que sólo use marcas de pie de página, y si no se usó \FondoReporte* entonces se fijará 'plain' que usa cabeceras y pies de página. \pagestyle{soloabajo}% \else \pagestyle{plain}% \fi} - {\pagestyle{\@EstiloPagReporteResto}}% Si usamos \EstiloPagReporte en su argumento obligatorio entonces fijamos ese estilo de página. - \ifdefvoid{\@EstiloPagReporteUno}{% - \if@FondoReporte% Si no le damos a \EstiloPagReporte su argumento opcional, entonces se fijará 'solonumpag' como el estilo de página para la primera página, pero solamente si usamos \FondoReporte, ya que el estilo de página predeterminado al usar \FondoReporte* ya se acaba de fijar y no necesita el caso especial de la primera hoja (\thispagestyle). + {\pagestyle{\@EstiloPaginaResto}}% Si usamos \EstiloPagina en su argumento obligatorio entonces fijamos ese estilo de página. + \ifdefvoid{\@EstiloPaginaUno}{% + \if@FondoReporte% Si no le damos a \EstiloPagina su argumento opcional, entonces se fijará 'solonumpag' como el estilo de página para la primera página, pero solamente si usamos \FondoReporte, ya que el estilo de página predeterminado al usar \FondoReporte* ya se acaba de fijar y no necesita el caso especial de la primera hoja (\thispagestyle). \if@FondoReporteStar \else \thispagestyle{solonumpag}% \fi \fi} - {\thispagestyle{\@EstiloPagReporteUno}}% Si usamoe el argumento opcional de \EstiloPagReporte establecemos ese estilo de página. + {\thispagestyle{\@EstiloPaginaUno}}% Si usamoe el argumento opcional de \EstiloPagina establecemos ese estilo de página. \pagenumbering{arabic}% - \setlength{\parindent}{0.666cm}% - \setlength{\parskip}{4pt plus 6pt minus 2pt}% separación entre párrafos en el reporte. - \vskip\baselineskip + \@EstiloParrafoReporte \BODY\clearpage}% espacio antes de empezar con el reporte, después del título -si lo hubiera-. \else \NewEnviron{reporte}{} @@ -4462,6 +4720,16 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \usebox{\@CajaNotaFinal}% \end{textblock*}} +%% Comando que coloca el texto 'FORMA LIBRE'. +\newcommand{\@PosicionaFormalibre}{% + \savebox{\@CajaFormalibre}{\@EstiloFormalibre}% + \ifbool{FormalibreXnegativo}{\addtolength{\@PosFormalibreX}{\textwidth-\wd\@CajaFormalibre}}{}% + \ifbool{FormalibreYnegativo}{\addtolength{\@PosFormalibreY}{\paperheight}}{}% + \ifbool{FormalibreYarriba}{\addtolength{\@PosFormalibreY}{-\ht\@CajaFormalibre-\dp\@CajaFormalibre}}{}% + \begin{textblock*}{\wd\@CajaFormalibre}(\@PosFormalibreX,\@PosFormalibreY)% + \usebox{\@CajaFormalibre}% + \end{textblock*}} + %% Comando que coloca el número de control. \newcommand{\@PosicionaNumControl}{% \savebox{\@CajaControl}{\@EstiloNumControl}% @@ -4508,13 +4776,26 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \setlength{\@SeparaInternaEncabezado}{0pt}\setlength{\@EsquinaLineaEncabezado}{0pt}\setlength{\@SombraEncabezado}{0pt}% \renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}% \fi - \begin{tikzpicture}% - \expandafter\node\expandafter[\@DatosTIKZ]{% - \parbox{\textwidth-\@SombraEncabezado-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado}{\@DatosAux}}% - \ifdim\@GrosorLineaEncabezado=0pt\else ;\fi - \end{tikzpicture}% + \@DibujaDatos \par\vspace*{\@SombraEncabezado}}}% Para que textblock* esté en modo vertical. +%</class> +%<*def> +\def\@DibujaDatos{% + \begin{tikzpicture} + \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado]{% + \parbox{\textwidth-\@SombraEncabezado-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado}{\@DatosAux}}% + \ifdim\@GrosorLineaEncabezado=0pt% + \else + ; + \tikzset{protect=\tmprotect}% + \node[draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}]{% + \parbox{\textwidth-\@SombraEncabezado-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado}{\@DatosAux}};% + \fi + \end{tikzpicture}\global\let\tmprotect\undefined} + +%</def> +%<*class> \newcommand{\@EscribeDatosResumen}{% {\@LetraEncFactura% Abrimos un nuevo grupo para que el cambio de tipografía y la redefinición del entorno 'tikzpicture' sean locales. \ifdim\@GrosorLineaEncabezado=0pt% @@ -4532,21 +4813,38 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \else \setlength{\@TamFinalEncabezado}{\@TamResumen}% \fi - \begin{tikzpicture}% - \expandafter\node\expandafter[\@DatosTIKZ]{% - \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{% - \@DatosAux*}}% - \ifdim\@GrosorLineaEncabezado=0pt\else ;\fi - \end{tikzpicture}% - \hspace*{\@SeparaDatosResumen}\hspace*{\@SombraEncabezado}% - \begin{tikzpicture}% - \expandafter\node\expandafter[\@ResumenTIKZ]{% - \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{% - \@ResumenAux}}% - \ifdim\@GrosorLineaEncabezado=0pt\else ;\fi - \end{tikzpicture}% + \@DibujaDatosResumen \par\vspace*{\@SombraEncabezado}}}% El \par es para que textblock* esté en modo vertical. +%</class> +%<*def> +\def\@DibujaDatosResumen{% + \begin{tikzpicture}% + \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado]{% + \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@DatosAux*}}% + \ifdim\@GrosorLineaEncabezado=0pt% + \else + ; + \tikzset{protect=\tmprotect}% + \node[draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}]{% + \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@DatosAux*}};% + \fi + \end{tikzpicture}% + \hspace*{\@SeparaDatosResumen}\hspace*{\@SombraEncabezado}% + \begin{tikzpicture}% + \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado]{% + \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@ResumenAux}}% + \ifdim\@GrosorLineaEncabezado=0pt% + \else + ; + \tikzset{protect=\tmprotect}% + \node[draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}]{% + \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@ResumenAux}};% + \fi + \end{tikzpicture}\global\let\tmprotect\undefined} + +%</def> +%<*class> %% Comando que coloca la caja para la nota previa, con la posibilidad de TikZ. \newcommand{\@EscribeNotaPrevia}{% {% Abrimos un nuevo grupo para que la redefinición del entorno 'tikzpicture' sea local. @@ -4556,14 +4854,27 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \setlength{\@SeparaInternaNotaPrevia}{0pt}\setlength{\@EsquinaLineaNotaPrevia}{0pt}\setlength{\@SombraNotaPrevia}{0pt}% \renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}% \fi - \begin{tikzpicture}% - \expandafter\node\expandafter[\@NotaPreviaTIKZ]{% - \parbox{\textwidth-\@SombraNotaPrevia-2\@SeparaInternaNotaPrevia-\@GrosorLineaNotaPrevia}{\@EstiloNotaPrevia}}% - \ifdim\@GrosorLineaNotaPrevia=0pt\else ;\fi - \end{tikzpicture}% + \@DibujaNotaPrevia \par\vspace*{\@SombraNotaPrevia}\vspace*{\@SeparaVertical}% - \ifexpandecuadro\else\vfill\fi}}} + \ifsinexpandir\vfill\fi}}} +%</class> +%<*def> +\def\@DibujaNotaPrevia{% + \begin{tikzpicture}% + \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaNotaPrevia, line width=\@GrosorLineaNotaPrevia, rounded corners=\@EsquinaLineaNotaPrevia]{% + \parbox{\textwidth-\@SombraNotaPrevia-2\@SeparaInternaNotaPrevia-\@GrosorLineaNotaPrevia}{\@EstiloNotaPrevia}}% + \ifdim\@GrosorLineaNotaPrevia=0pt% + \else + ; + \tikzset{protect=\tmprotect}% + \node[draw=black, fill=white, inner sep=\@SeparaInternaNotaPrevia, line width=\@GrosorLineaNotaPrevia, rounded corners=\@EsquinaLineaNotaPrevia, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaPrevia, shadow yshift=-\@SombraNotaPrevia}]{% + \parbox{\textwidth-\@SombraNotaPrevia-2\@SeparaInternaNotaPrevia-\@GrosorLineaNotaPrevia}{\@EstiloNotaPrevia}};% + \fi + \end{tikzpicture}\global\let\tmprotect\undefined} + +%</def> +%<*class> %% Comando que coloca la caja para la nota final, con la posibilidad de TikZ. \newcommand{\@EscribeNotaFinal}{% {% Abrimos un nuevo grupo para que la redefinición del entorno 'tikzpicture' sea local. @@ -4571,13 +4882,26 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \setlength{\@SeparaInternaNotaFinal}{0pt}\setlength{\@EsquinaLineaNotaFinal}{0pt}\setlength{\@SombraNotaFinal}{0pt}% \renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}% \fi - \begin{tikzpicture}% - \expandafter\node\expandafter[\@NotaFinalTIKZ]{% - \parbox{\textwidth-\@PosNotaFinalXuno-\@PosNotaFinalXdos+\oddsidemargin+1in-\@SombraNotaFinal-2\@SeparaInternaNotaFinal-\@GrosorLineaNotaFinal}{\@EstiloNotaFinal}}% - \ifdim\@GrosorLineaNotaFinal=0pt\else ;\fi - \end{tikzpicture}% + \@DibujaNotaFinal \par\vspace*{\@SombraNotaFinal}}} +%</class> +%<*def> +\def\@DibujaNotaFinal{% + \begin{tikzpicture} + \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaNotaFinal, line width=\@GrosorLineaNotaFinal, rounded corners=\@EsquinaLineaNotaFinal]{% + \parbox{\textwidth-\@PosNotaFinalXuno-\@PosNotaFinalXdos+\oddsidemargin+1in-\@SombraNotaFinal-2\@SeparaInternaNotaFinal-\@GrosorLineaNotaFinal}{\@EstiloNotaFinal}}% + \ifdim\@GrosorLineaNotaFinal=0pt% + \else + ; + \tikzset{protect=\tmprotect}% + \node[draw=black, fill=white, inner sep=\@SeparaInternaNotaFinal, line width=\@GrosorLineaNotaFinal, rounded corners=\@EsquinaLineaNotaFinal, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaFinal, shadow yshift=-\@SombraNotaFinal}]{% + \parbox{\textwidth-\@PosNotaFinalXuno-\@PosNotaFinalXdos+\oddsidemargin+1in-\@SombraNotaFinal-2\@SeparaInternaNotaFinal-\@GrosorLineaNotaFinal}{\@EstiloNotaFinal}};% + \fi + \end{tikzpicture}\global\let\tmprotect\undefined} + +%</def> +%<*class> %% Comandos auxiliares para los datos y el resumen. %% En el caso de los datos, la versión \@DatosAux se ejecuta cuando no hay resumen, y la versión \@DatosAux* se ejecuta cuando hay resumen. \NewDocumentCommand{\@DatosAux}{s}{% @@ -4691,20 +5015,11 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %</class> %<*def> -%% Diseño hecho en TikZ para los datos del cliente, el resumen, la nota previa, la descripción y la nota final. -\def\@DatosTIKZ{% - draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}} - -\let\@ResumenTIKZ\@DatosTIKZ - -\def\@NotaPreviaTIKZ{% - draw=black, fill=white, inner sep=\@SeparaInternaNotaPrevia, line width=\@GrosorLineaNotaPrevia, rounded corners=\@EsquinaLineaNotaPrevia, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaPrevia, shadow yshift=-\@SombraNotaPrevia}} - -\def\@DescripcionTIKZ{% - draw=black, fill=white, inner sep=\@SeparaInternaDescripcion, line width=\@GrosorLineaDescripcion, rounded corners=\@EsquinaLineaDescripcion, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraDescripcion, shadow yshift=-\@SombraDescripcion}} - -\def\@NotaFinalTIKZ{% - draw=black, fill=white, inner sep=\@SeparaInternaNotaFinal, line width=\@GrosorLineaNotaFinal, rounded corners=\@EsquinaLineaNotaFinal, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaFinal, shadow yshift=-\@SombraNotaFinal}} +%% Macro para el estilo de párrafo del reporte. +\newcommand{\@EstiloParrafoReporte}{% + \setlength{\parindent}{0.666cm}% sangría para el reporte. + \setlength{\parskip}{4pt plus 6pt minus 2pt}% separación entre párrafos en el reporte. +} %% El diseño de las distintas partes de la hoja. \newcommand{\@EstiloFirmas}{ @@ -4724,6 +5039,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \newcommand{\@EstiloNotaFinal}{\@LetraNotaFinal \@NotaFinal} +\newcommand{\@EstiloFormalibre}{\@LetraFormalibre \@@Formalibre} + \newcommand{\@EstiloNumControl}{% \renewcommand{\baselinestretch}{0}\selectfont \begin{tabular}{@{\extracolsep{0pt}}l} @@ -4746,10 +5063,6 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. \ifvencimiento \@@FechaVencimiento & \ttfamily\@FechaVencimiento \\ \else \vspace*{-.3em}\fi \end{tabular}} -\newcommand{\@InfoPaginaNoTitulo}{\@LetraInfoPagina Reporte correspondiente a la factura n\'umero \@Num \space de fecha \@Fecha} - -\newcommand{\@InfoPaginaTitulo}{\@LetraInfoPagina \@TituloReporte \space - \@Proveedor \space - \@Fecha} - %% Estilos de página: normal, sólo cabeceras, sólo pies de página y sólo número de página al pie. \fancypagestyle{plain}{% \expandafter\ps@fancy @@ -4797,6 +5110,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<factnueve|factdiez|repuno>%% Escribimos en el reverso de la factura %<prefac|beispiel>%% (prefactura) Escribimos una prefactura %<cotiza>%% (cotizacion) Escribimos una cotización +%<notadecredito>%% (notadecredito) Escribimos una nota de crédito +%<notadedebito>%% (notadedebito) Escribimos una nota de débito %<repuno|repdos|reptres>%% Escribimos un reporte %<repuno>%% (sinreverso) Escribimos el reverso de la factura pero sólo producimos su anverso %<repuno>%% (conreporte) Generamos factura y reporte @@ -4806,10 +5121,12 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % %<factdiez>%% Establecemos algunas opciones de la clase a través de comandos % -%<factuno>%% Hacemos una factura básica con todo en sus valores por omisión, no ajustamos nada +%<factuno|notadecredito|notadedebito>%% Hacemos una factura básica con todo en sus valores por omisión, no ajustamos nada % %<reptres>%% (twoside) El reporte se imprime en las dos caras del papel % +%<factnueve>%% (sinencabezadofactura) Pedimos que la factura no tenga encabezado +%<repdos>%% (sinencabezadoreporte) Pedimos que el reporte no tenga encabezado %<factcinco>%% (sincantidad) Cuadro de la factura sin la columna de cantidades %<factdos|factseis>%% (numitem) Con la columna para enumerar los ítems %<factdos|factseis>%% (descuentos) Con la columna para descuentos individuales @@ -4822,7 +5139,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. % %<factdos>%% (dcu) Primero la descripción, luego la cantidad, luego el precio unitario %<factcuatro>%% (duc) Primero la descripción, luego el precio unitario, luego la cantidad -%<factcinco|factseis|factsiete>%% (denom) Escribe la denominación (“FACTURA”) y el número +%<factcinco|factseis>%% (sindenom) No escribe la denominación (“FACTURA”) ni el número %<cotiza>%% (sinnumero) Escribe la denominación (“COTIZACIÓN”) pero sin número %<cotiza>%% (sintotales) No totaliza, para que el cliente tenga un presupuesto por distintos ítems que luego elegirá entre ellos, es decir, una lista de precios % @@ -4833,7 +5150,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<factcuatro>%% (sinlineahtit) Sin línea horizontal interna después del título de las columnas %<factseis>%% (sinlineashi) Sin líneas horizontales internas %<factsiete>%% (sinlineashe) Sin líneas horizontales externas -%<factnueve>%% (sinlineahni) Sin línea horizontal interna después de la nota interna. +%<factnueve>%% (sinlineahni) Sin línea horizontal interna que va antes de la nota interna %<factdiez>%% (sinlineash) Sin líneas horizontales %<facttres|factcinco>%% (conlineasha) Separado cada ítem con una línea horizontal % @@ -4864,9 +5181,9 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<repuno>%% Sin especificar el proveedor, así toma el emisor de la factura como el nombre del proveedor %<repdos|reptres>%% (\Proveedor) Especificando el nombre del proveedor para el encabezado del reporte % -%<facttres>%% Sin especificar fecha para que tome la fecha del día. -% %<factnueve>%% Con nota interna automática por el descuento en pagos electrónicos. -% %<factdiez>%% Con nota interna automática con el monto en Bs.F dada la fecha de emisión de la factura antes de que a la moneda se le quitara el adjetivo “soberano”. +%<facttres>%% Sin especificar fecha para que tome la fecha del día +% %<factnueve>%% Con nota interna automática por el descuento en pagos electrónicos +% %<factdiez>%% Con nota interna automática con el monto en Bs.F dada la fecha de emisión de la factura antes de que a la moneda se le quitara el adjetivo “soberano” % %<factcuatro>%% (\Fecha*) Suministrando la fecha según formato de datetime2 sin alterar cómo sale escrita %<facttres>%% (\FormatoFecha) Cambiando el separador de la fecha para que salga escrita dd/mm/yyyy @@ -4892,7 +5209,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<repuno|reptres>%% (\TituloReporte) Establecemos el título del reporte sin que salga en las cabeceras ni pies de página %<repdos>%% (\TituloReporte*) Establecemos el título del reporte para que salga en las cabeceras o pies de página %<reptres>%% (\InfoPagina) Personalizamos la información de la cabecera del reporte y mostramos el nombre del proveedor allí -%<reptres>%% (\EstiloPagReporte) Cambiamos el estilo de página para que la información del reporte aparezca como pie de página +%<reptres>%% (\EstiloPagina) Cambiamos el estilo de página para que la información del reporte aparezca como pie de página %<cotiza>%% (\FirmaFactura) Agregando la firma escaneada en la factura, es decir, en la cotización % %<factdos|facttres|factsiete>%% (\SepVertical) Alterando la separación mínima vertical entre los elementos @@ -4913,13 +5230,14 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<factcuatro|factocho>%% (\Letra***) Cambiando varias de las tipografías % %<!factcuatro&!reptres>%% (\NotaFinal) Con nota final -%<factnueve>%% Haciendo mención a las fechas y al crédito en la nota final %<factcuatro>%% Sin nota final %<factuno|factdos|factcinco|factocho>%% (\Resumen) Con resumen %<facttres|factcuatro|factseis|factsiete|prefac|cotiza|repuno|repdos>%% Sin resumen %<factcuatro|factnueve|factdiez>%% (\NotaPrevia) Con nota previa %<factnueve>%% (\NotaPrevia*) Con nota previa agregada al final de la nota previa anterior %<factocho|factnueve>%% (\NotaInterna) Con nota interna +%<notadedebito>%% Anulando la nota interna establecida de manera predeterminada por usar la opción de la nota de débito +%<notadedebito>%% (\NotaExterna) Con nota externa para el texto referencial de la factura a corregir, en lugar de colocarlo como nota interna %<factnueve>%% (\NotaExterna) Con nota externa %<factnueve>%% (\NotaExterna**) Con nota externa agregada al principio de la nota externa anterior % @@ -4931,6 +5249,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<facttres|reptres>%% Sin descripción larga % %<factseis|repdos>%% Con etiquetas y referencias +%<factseis|factnueve|notadecredito|notadedebito|repdos>%% Haciendo mención en el documento a valores establecidos en el preámbulo % %<repuno>%% (\FirmaReporte) Agregando en el reporte la línea para firmar a mano %<factocho|repdos|reptres>%% (\FirmaReporte) Agregando la firma escaneada en el reporte @@ -4943,11 +5262,15 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<!factuno>\documentclass[ %<prefac|beispiel>prefactura, %<cotiza>cotizacion, +%<notadecredito>notadecredito, +%<notadedebito>notadedebito, %<repuno>sinreverso, %<repuno>conreporte, %<repdos|reptres>soloreporte, %<beispiel>nospanish, %<reptres>twoside, +%<factnueve>sinencabezadofactura, +%<repdos>sinencabezadoreporte, %<factcinco>sincantidad, %<factdos|factseis>numitem, %<factdos|factseis>descuentos, @@ -4957,7 +5280,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<factdiez>filas, % luego queda sin efecto con \filasfalse en el preámbulo %<factsiete>centrado, %<facttres>agrupado, -%<factcinco|factseis|factsiete>denom, +%<factcinco|factseis>sindenom, %<cotiza>sinnumero, % sin esta opción aparecerá el número de la cotización. %<cotiza>sintotales, %<factdos>dcu, @@ -5035,30 +5358,34 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<beispiel> %<beispiel>\renewcommand{\@EstiloDenom}{\@LetraDenom\@Denominacion-\ifsinnumero\else\@LetraNumeracion Nr:\space\@Num\fi} %<beispiel>\renewcommand{\@EstiloNumControl}{} +%<beispiel>\renewcommand{\@EstiloFormalibre}{} %<beispiel>\makeatother -%<factcinco|factseis|factsiete|cotiza|prefac|repuno|repdos|beispiel>\Num{1} +%<!factcinco&!factseis&!reptres&!notadecredito&!notadedebito>\Num{1} +%<notadecredito|notadedebito>\Num{2} +%<notadecredito|notadedebito>\NotaNum{1} %<prefac>% \NumControl{1001} %<prefac>% \NumSerieControl{9} -%<!factdos&!factcuatro&!beispiel>\RazonSocial{Ayala San Vicente Usureros} +%<!factdos&!factcuatro&!factnueve&!beispiel>\RazonSocial{Ayala San Vicente Usureros} %<factdos|factcuatro|beispiel>\Nombre{Jacinto de Ayala y San Vicente} -%<!factdos&!factcuatro&!beispiel&!reptres>\RIF{Y-12.345.678-9} +%<!factdos&!factcuatro&!factnueve&!beispiel&!reptres>\RIF{Y-12.345.678-9} %<factdos|factcuatro|beispiel>\CI{V-987.654.321} -%<!factdos&!factcuatro&!reptres&!beispiel>\Contacto{Jacinto de Ayala} -%<!reptres>\Direccion{Av. Ayala, Galpón San Vicente, Sector Arauca, Apure, Venezuela} -%<!factcinco&!factseis&!reptres>\Telefono{+58 (987) 654.32.10} -%<!factcuatro&!factseis&!reptres>\Email{jacinto@ayala.sv} +%<!factdos&!factcuatro&!factnueve&!reptres&!beispiel>\Contacto{Jacinto de Ayala} +%<!factnueve&!reptres>\Direccion{Av. Ayala, Galpón San Vicente, Sector Arauca, Apure, Venezuela} +%<!factcinco&!factseis&!factnueve&!reptres>\Telefono{+58 (987) 654.32.10} +%<!factcuatro&!factseis&!factnueve&!reptres>\Email{jacinto@ayala.sv} %<factcinco|repuno>\Emisor{Lázaro de la Vega} %<factcinco>\Conforme{\Contacto} %<factseis>\Conforme{Ramela San Vicente} %<repdos|reptres>\Proveedor{Lázaro de la Vega y San Román} - +%<!factnueve> %<factcinco>\FormatoFecha[yyyymmdd]{ddmmyyyy}{.} %<facttres>\FormatoFecha{ddmmyyyy}{/} %<factseis>\FormatoFecha{default}{/} %<!facttres&!factcuatro&!factcinco>\Fecha{02-07-2020} %<factcuatro>\Fecha*{2020}{07}{02} %<factcinco>\Fecha{20200702} +%<notadecredito|notadedebito>\NotaFecha{01-07-2020} %<factsiete|factocho> %<factsiete|factocho>\makeatletter %<factocho> \renewcommand{\@@Fecha}{\slshape FECHA:} @@ -5082,19 +5409,19 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<repuno|reptres>\TituloReporte{El título del reporte} %<repdos>\TituloReporte*{El título del reporte} %<reptres>\InfoPagina{La cabecera o pie del reporte - \Proveedor} -%<repuno|reptres>% \EstiloPagReporte{soloabajo} -%<repuno|reptres>% \EstiloPagReporte[soloabajo]{plain} -%<repuno|reptres>% \EstiloPagReporte[empty]{plain} -%<repdos|reptres>% \EstiloPagReporte[empty]{soloabajo} -%<reptres>% \EstiloPagReporte{plain} -%<repuno|repdos|reptres>% \EstiloPagReporte{solonumpag} -%<repdos>% \EstiloPagReporte{soloabajo} -%<repuno|reptres>% \EstiloPagReporte[solonumpag]{plain} -%<repuno|reptres>% \EstiloPagReporte[solonumpag]{soloarriba} -%<reptres>\EstiloPagReporte[solonumpag]{soloabajo} -%<repuno>% \EstiloPagReporte[solonumpag]{soloabajo} -%<repuno|reptres>% \EstiloPagReporte[empty]{soloarriba} -%<repuno|reptres>% \EstiloPagReporte{soloarriba} +%<repuno|reptres>% \EstiloPagina{soloabajo} +%<repuno|reptres>% \EstiloPagina[soloabajo]{plain} +%<repuno|reptres>% \EstiloPagina[empty]{plain} +%<repdos|reptres>% \EstiloPagina[empty]{soloabajo} +%<reptres>% \EstiloPagina{plain} +%<repuno|repdos|reptres>% \EstiloPagina{solonumpag} +%<repdos>% \EstiloPagina{soloabajo} +%<repuno|reptres>% \EstiloPagina[solonumpag]{plain} +%<repuno|reptres>% \EstiloPagina[solonumpag]{soloarriba} +%<reptres>\EstiloPagina[solonumpag]{soloabajo} +%<repuno>% \EstiloPagina[solonumpag]{soloabajo} +%<repuno|reptres>% \EstiloPagina[empty]{soloarriba} +%<repuno|reptres>% \EstiloPagina{soloarriba} %<cotiza>\FirmaFactura{\includegraphics[width=4.5cm]{factura-ejemplo-firma}}[0pt][17pt] %<factdos|facttres|factsiete>\SepVertical{0.75cm} %<factdos|factcinco>\SepDatosResumen{1cm} @@ -5109,7 +5436,13 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<factdos|factsiete>\LineaDescripcion{1pt}{20pt}{3pt} %<factnueve>\LineaNotaFinal{0.4pt}{4pt}{3pt} %<factsiete>\LineaFirmas{6.5cm}{2pt} -%<factsiete>% Puede usarse \PosFecha* o \PosDenom*, \PosControl* o \PosNotaFinal* para que el texto se despliegue en la posición 'Y' dada pero hacia arriba y no hacia abajo. \PosFirmas no acepta eso. +%<prefac> +%<prefac>% Puede usarse \PosControl y \PosFormalibre para cambiar la posición del número de control y del texto “FORMA LIBRE”, y sus versiones con “*” para que el texto se despliegue en la posición 'Y' dada pero hacia arriba y no hacia abajo. +%<prefac>% \PosControl{}{} +%<prefac>% \PosFirmalibre{}{} +%<prefac> +%<factsiete>% Puede usarse \PosFecha* o \PosDenom* para que el texto se despliegue en la posición 'Y' dada pero hacia arriba y no hacia abajo. \PosFirmas no acepta eso. +%<factnueve>% Puede usarse \PosNotaFinal* para que el texto se despliegue en la posición 'Y' dada pero hacia arriba y no hacia abajo. %<factnueve>\PosNotaFinal{.9cm}{.9cm}{-5.3cm} %<factsiete>\PosFecha{-0cm}{-1.5cm} %<factsiete>\PosFirmas{1cm}{1cm}{-3cm} @@ -5127,7 +5460,7 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<factocho>\LetraTitTotal{\fontsize{20}{30}\bfseries\slshape} %<factocho>\LetraNumTotal{\fontsize{20}{30}\bfseries} %<factocho>\tabcolsep7pt -%<!factuno&!factcinco&!prefac&!reptres> +%<!factuno&!factcinco&!notadecredito&!notadedebito&!prefac&!reptres> %<cotiza>% \Denom{PRESUPUESTO} % También podemos cambiar el nombre del documento. %<!factcuatro&!factnueve&!beispiel&!reptres>\NotaFinal{La nota final...} %<factnueve>\NotaFinal{La factura se emitió el \Fecha{} con crédito de \Credito{} dias, siendo su vencimiento el \FechaVencimiento.} @@ -5140,11 +5473,17 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<factocho|factnueve>\NotaInterna{LA NOTA INTERNA} %<factnueve>\NotaExterna{LA NOTA EXTERNA} %<factnueve>\NotaExterna**{PRIMERA PARTE DE LA NOTA EXTERNA - } +%<notadedebito>\AtEndPreamble{\NotaInterna{}} +%<notadedebito>\NotaExterna{\TextoNotaDeDebito} \begin{document} %<!reptres> +%<factnueve>\noindent \framebox{\parbox{\linewidth-2\fboxsep-2\fboxrule}{\hfill Aquí el usuario puede diseñar su encabezado de la factura \hfill\mbox{}}} +%<factnueve> %<!reptres>\begin{factura} -%<!factdos&!factcinco&!factseis&!repdos&!reptres&!beispiel> \Item{1}{ítem con IVA general}{1000} +%<!notadecredito&!notadedebito&!factdos&!factcinco&!factseis&!repdos&!reptres&!beispiel> \Item{1}{ítem con IVA general}{1000} +%<notadecredito> \Item{1}{Diferencia por error en factura}{1000} +%<notadedebito> \Item{1}{Diferencia por error en factura}{1000} %<factseis|repdos> \Item{2}{ítem con IVA general, viene con descuento}{1000}{8}[Un ítem que ofrecemos a precio de costo y que está gravado con IVA general]\label{primeritem} %<factuno|factcuatro|repdos> \Item{4}{otro ítem con IVA general}{100} %<cotiza> \Item{1}{otro ítem con IVA general}{1100} @@ -5166,7 +5505,8 @@ factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %<beispiel> \ItemE{1}{Artikel mit kein MwSt}{100} %<!reptres>\end{factura} %<!facttres&!reptres> -%<!facttres&!factseis&!reptres&!beispiel>\Descripcion{La descripción larga} +%<!facttres&!factseis&!reptres&!notadecredito&!notadedebito&!beispiel>\Descripcion{La descripción larga} +%<notadecredito|notadedebito>\Descripcion{Con esta nota queda saldado el error cometido en la factura número \NotaNum{} de fecha \NotaFecha.} %<factseis>\Descripcion{ %<factseis> %<beispiel>\Descripcion{Lange Beschreibung.} |