De Touch&Sale

Saltar a: navegación, buscar
(Métodos)
 
(No se muestran 303 ediciones intermedias de 5 usuarios)
Línea 1: Línea 1:
== Funciones propias==
+
== 1. Sintaxis de Plantilla (Tags) ==
  
*'''/'''    = imprime línea en blanco.
+
Delimitadores propios del motor de plantillas. Ninguno requiere el prefijo <code>format:</code>.
  
 +
{| class="wikitable" style="width:100%"
 +
! Tag !! Nombre !! Descripción
 +
|-
 +
| <code>/</code> || Línea en blanco || Imprime una línea en blanco.
 +
|-
 +
| <code>&lt;%= ... %&gt;</code> || OperacionValor || Devuelve el objeto <code>OperacionValor</code> a imprimir (tabla <code>operacion_valor</code>).
 +
|-
 +
| <code>&lt;%&amp; ... %&gt; #</code> || operacionesValor || Itera sobre <code>OperacionValor.operacion.operacionesValor</code> devolviendo objetos <code>OperacionValor</code> (tabla <code>operacion_valor</code>).
 +
|-
 +
| <code>&lt;%@ ... %&gt; #</code> || Operacion || Devuelve <code>OperacionValor.operacion</code>, clase <code>Operacion</code> (tabla <code>operacion</code>).
 +
|-
 +
| <code>&lt;%# ... %&gt; #</code> || itemsValor || Itera sobre <code>OperacionValor.valor.itemsValor</code> devolviendo objetos <code>ItemValor/ItemFactura/ItemConvenio/etc</code> (tabla <code>item_valor</code>).
 +
|-
 +
| <code>&lt;%$ ... %&gt; #</code> || valoresConcepto || Itera sobre <code>OperacionValor.valor.valoresConcepto</code> devolviendo objetos <code>ValorConcepto</code> (tabla <code>valor_conceptos</code>).
 +
|-
 +
| <code>&lt;%+ ... %&gt; #</code> || prototipos || Itera sobre la colección de Prototipos de los valores o de los ítems.
 +
|-
 +
| <code>&lt;%! ... %&gt; !</code> || comentarios || Los datos incluidos sirven para orientar al usuario de la plantilla, pero no salen impresos. Ej: <code>&lt;%! ** Modelo 2 ** %&gt;</code>
 +
|-
 +
| <code>&lt;&lt; ... &gt;&gt;</code> || Eliminación de renglón || Si la ausencia del dato a imprimir tiene que eliminar el renglón actual, se encierra la función entre <code>&lt;&lt;</code> y <code>&gt;&gt;</code>. Ej: <code>&lt;&lt;%=...%&gt;&gt;</code>
 +
|}
  
*'''<%= --------- %>'''
+
----
:'''OperacionValor''': Devuelve el objeto OperacionValor a imprimir (tabla operacion_valor).
+
  
 +
== 2. Funciones de Dispositivo ==
  
*'''<%& --------- %>''' #
+
Actúan solo si el dispositivo lo soporta. Se usan directamente, sin prefijo <code>format:</code>.
:'''operacionesValor''': Itera sobre la colección OperacionValor.operacion.operacionesValor devolviendo objetos OperacionValor (tabla operacion_valor).
+
Vuelven a las condiciones iniciales al finalizar la línea (salvo <code>inicializar</code>, <code>normalizar</code>, <code>cortepapel</code> y <code>cortetotalpapel</code>).
  
 +
{| class="wikitable" style="width:100%"
 +
! Función !! Descripción
 +
|-
 +
| <code>codigobarras(objeto)</code> || Envía los comandos de configuración previos e imprime el código de barras del valor recibido.
 +
|-
 +
| <code>condensado(objeto)</code> || Imprime con letra condensada.
 +
|-
 +
| <code>cortepapel()</code> || Envía un comando de corte '''parcial''' de la cinta de papel.
 +
|-
 +
| <code>cortetotalpapel()</code> || Envía un comando de corte '''total''' de la cinta de papel.
 +
|-
 +
| <code>cursiva(objeto)</code> || Imprime en cursiva (itálica).
 +
|-
 +
| <code>inicializar()</code> || Envía un comando de inicialización que configura la impresora a sus valores iniciales.
 +
|-
 +
| <code>negrita(objeto)</code> || Imprime en negrita (enfatizado).
 +
|-
 +
| <code>normalizar()</code> || Envía un comando de normalización de la letra a sus valores iniciales.
 +
|-
 +
| <code>subrayado(objeto)</code> || Imprime con letra subrayada.
 +
|-
 +
| <code>textodoblealto(objeto)</code> || Imprime con letra expandida en alto.
 +
|-
 +
| <code>textodobleancho(objeto)</code> || Imprime con letra expandida a lo ancho. Ver también <code>format:textodobleancho()</code>.
 +
|}
  
*'''<%@ --------- %>''' #
+
----
:'''Operacion''': Devuelve el objeto OperacionValor.operacion, clase Operacion (tabla operacion).
+
  
 +
== 3. Variables y Propiedades de Ítem ==
  
*'''<%# --------- %>''' #
+
Valores accesibles desde el contexto de la plantilla, sin prefijo <code>format:</code>.
:'''itemsValor''': Itera sobre la colección OperacionValor.valor.itemsValor devolviendo objetos ItemValor/ItemFactura/ItemConvenio/etc (tabla item_valor).
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Variable / Propiedad !! Contexto !! Descripción
 +
|-
 +
| <code>cantidadFilas</code> || <code>&lt;%=</code> / operacion || Cantidad de líneas de productos de un comprobante de venta.
 +
|-
 +
| <code>cantidadProductos</code> || <code>&lt;%=</code> / operacion || Total de productos de un comprobante de venta.
 +
|-
 +
| <code>cantidadTroqueles</code> || <code>&lt;%#</code> / item_valor || Cantidad de líneas con productos cubiertos en una receta. Se usa para calcular el espacio para pegar troqueles.
 +
|-
 +
| <code>espacioTroquel</code> || operacion/OS || Configuración de la Obra Social. Si imprime troqueles devuelve <code>1</code>, si no devuelve <code>0</code>.
 +
|-
 +
| <code>lineasEnBlancoXcm</code> || parámetro de nodo || Valor del parámetro <code>ESPACIOS_EN_BLANCO_POR_CENTIMETRO</code>. Si no existe, devuelve <code>2.5</code>.
 +
|}
  
*'''<%$ --------- %>''' #
+
=== Propiedades SinIvaPlantilla (en <%# item_valor %>) ===
:'''valoresConcepto''': Itera sobre la colección OperacionValor.valor.valoresConcepto devolviendo objetos ValorConcepto (tabla valor_conceptos).
+
  
 +
Estos atributos poseen la propiedad de que:
 +
* Si el comprobante '''discrimina IVA''' (Factura o N/C "A"): traen el valor '''sin''' el IVA incluido.
 +
* Si el comprobante '''no discrimina IVA''': devuelven el valor total, con el impuesto acumulado.
  
*'''<%! ** Modelo 2 ** %>''' !
+
{| class="wikitable"
:'''comentarios''': Los datos incluídos sirven para orientar al usuario de la plantilla, pero no salen impresos.
+
! Propiedad
 +
|-
 +
| <code>descuentoAfiliadoSinIVAPlantilla</code>
 +
|-
 +
| <code>descuentoAfiliadoTotalSinIVAPlantilla</code>
 +
|-
 +
| <code>descuentoConvenioSinIVAPlantilla</code>
 +
|-
 +
| <code>descuentoSinIvaPlantilla</code>
 +
|-
 +
| <code>precioUnitarioSinIvaPlantilla</code>
 +
|-
 +
| <code>recargoConvenioSinIVAPlantilla</code>
 +
|-
 +
| <code>totalSinIvaPlantilla</code>
 +
|}
  
 +
Métodos asociados:
  
*'''format: lpad / rpad / cpad''' (''texto a imprimir'', ''longitud a rellenar'', ''[caracter de relleno]'')
+
{| class="wikitable" style="width:100%"
:rellena a izquierda / derecha / centra texto.
+
! Método !! Descripción
:-si la ''longitud a rellenar'' es menor que la longitud del ''texto a imprimir'', entonces corta el texto.
+
|-
:-si no se especifica ningún ''caracter de relleno'', entonces completa con espacios.
+
| <code>obtTotalCubierto1raCoberturaSinIvaPlantilla()</code> || Importe cubierto por la 1ra. cobertura, sin IVA (condicional).
 +
|-
 +
| <code>obtTotalCubierto2daCoberturaSinIvaPlantilla()</code> || Importe cubierto por la 2da. cobertura, sin IVA (condicional).
 +
|}
  
 +
----
  
*'''format: alltrim''' (''texto a imprimir'')
+
== 4. Funciones format: ==
:-devuelve el texto indicado, borrando los espacios en blanco a izquierda y a derecha.
+
  
 +
Implementadas en <code>TemplateUtilVersion1</code>, <code>TemplateUtilVersion2</code>, ..., <code>TemplateUtilVersion5Pdf</code>.
 +
Se invocan con el prefijo <code>format:</code> dentro de las expresiones de plantilla.
  
*'''format: longDate''' (''fecha'')
+
=== format:abonaCon(montoEfectivo, abonaCon, n) ===
:-devuelve la fecha en el formato ''longDate'' definido en application.
+
Devuelve el primer parámetro mayor que cero, formateado a <code>n</code> decimales.
  
 +
=== format:alignRight(titulo, dato) / format:alignRight(titulo, dato, ancho) ===
 +
Si los valores no son nulos, devuelve la concatenación de los parámetros.
 +
Imprime <code>titulo</code> y ajusta <code>dato</code> a la derecha del ancho indicado o al del motor.
 +
<pre>
 +
alignRight("Total OSP", "50,12") => "Total OSP____________________50,12"
 +
</pre>
  
*'''format: shortDate''' (''fecha'')
+
=== format:alignRightDtoRgo(titulo, dato) / format:alignRightDtoRgo(template, titulo, dato) ===
:-devuelve la fecha en el formato ''shortDate'' definido en application.
+
* '''2 params:''' Actúa como <code>alignRight()</code>, pero si <code>dato &lt; 0</code> inserta un signo <code>"-"</code>.
 +
* '''3 params:''' Igual al anterior, pero agrega un <code>template</code> con términos de reemplazo según <code>reemplazarTexto()</code>.
  
 +
=== format:alltrim(texto) ===
 +
Devuelve el texto indicado, borrando los espacios en blanco a izquierda y a derecha.
  
*'''format: longDateTime''' (''fecha'')
+
=== format:anchopagina() ===
:-devuelve la fecha y la hora en el formato ''dd/mm/yyyy hh:mm:ss'', definido en application.
+
Devuelve la cantidad de caracteres del ancho de la página seteados en el motor.
 +
Se utiliza como complemento de otros métodos para alinear impresiones.
 +
<pre>
 +
<%@format:centerpad('--','- RECETA -',format:anchopagina())%>
 +
</pre>
  
 +
=== format:ascii(número) ===
 +
Devuelve el código ASCII del número ingresado, convertido en string.
  
*'''format: string''' (''objeto'')
+
=== format:avanzarLineas(value) / format:avanzarLineas(value, cantMaximaLineas) ===
:-convierte cualquier tipo de dato en ''string''.
+
Agrega la cantidad de líneas en blanco indicada por <code>value</code> (se toma la parte entera).
 +
El segundo parámetro limita la cantidad máxima de filas a avanzar.
 +
<pre>
 +
<%=format:avanzarLineas(cantidadTroqueles*3)%>
 +
<%=format:avanzarLineas(cantidadTroqueles*3, cantMaximaLineas)%>
 +
</pre>
  
 +
=== format:bigdecimal(value) ===
 +
Devuelve el <code>BigDecimal</code> correspondiente al parámetro indicado, contemplando iterables.
  
*'''format: integer''' (''número'')
+
=== format:cgoAfilCob(total, montoCobertura) ===
:-devuelve la parte entera del número ingresado, convertido en ''string''.
+
* Si existe la Cobertura (<code>montoCobertura &gt; 0</code>): devuelve <code>total - montoCobertura</code>.
 +
* Si no existe (<code>montoCobertura = 0</code>): devuelve cero (no se imprime ningún dato).
  
 +
=== format:coalesce(value1, value2) ===
 +
Devuelve como respuesta el primer parámetro '''no nulo'''.
  
*'''format: len''' (''objeto'')
+
=== format:coalesceNum(value1, value2) ===
:-devuelve la longitud del dato ingresado, convertido en ''string''.
+
Devuelve como respuesta el primer parámetro '''no nulo''', en formato numérico.
  
 +
=== format:concatenar(nroCampo, strDatos) — forma v1 ===
 +
Concatena los valores del string de datos separados por <code>|</code>, ajusta la longitud del campo indicado por el primer parámetro, hasta completar el Ancho Máximo del motor.
 +
<pre>
 +
format:concatenar(2, "  1|ADALAT 30|    44,00|  44,00")
 +
</pre>
  
*'''format: ascii''' (''número'')
+
=== format:concatenar(strDatos) — forma v2 ===
:-devuelve el código ASCii del número ingresado, convertido en ''string''.
+
Concatena valores separados por <code>|</code>, tomados de a 3, de la forma <code>ajuste&lt;d,i&gt;|longitud|campo</code>.
 +
<pre>
 +
format:concatenar("d|20|ADALAT 30|i|12|44,00|i|12|44,00")
 +
=> "ADALAT 30__________________44,00_______44,00"
 +
</pre>
  
 +
=== format:concatNoNull(value1, value2) ===
 +
Si '''ambos''' parámetros son no nulos, devuelve un String concatenándolos.
  
*'''format: stringNoVacio''' (''número'')
+
=== format:cortepapel() — plantillas v5 PDF ===
:-devuelve el número ingresado, convertido en ''string''.
+
Permite el corte de la impresión del PDF en mitad de la plantilla, tal como se produce en impresoras térmicas o matriciales comunes.
:-si el valor es nulo, devuelve el texto ''0,00''.
+
<pre>
 +
<%=format:cortepapel()%>
 +
</pre>
  
 +
=== format:cpad(texto, longitud [, caracter]) ===
 +
Ver <code>format:lpad / rpad / cpad</code>.
  
*'''format: stringNoVacioDto''' (''número'')
+
=== format:datoCondicional(condicion, dato) ===
:-devuelve el número ingresado, convertido en ''string''.
+
Si se cumple <code>condicion</code>, devuelve <code>dato</code>; sino, un string vacío.
:-si el valor es nulo, devuelve el texto ''-0,00''.
+
<pre>
 +
format:datoCondicional((valor/numeroAutorizacion="4"),'A.')  => "A." o ""
 +
</pre>
 +
Uso para detectar copia:
 +
<pre>
 +
<%=format:datoCondicional(format:obtNumeroCopia(parametro[1])!="1",'ES COPIA')%>
 +
</pre>
  
 +
=== format:enlazar(strDatos) — forma v1 ===
 +
Concatena los 2 valores del string separados por <code>|</code>, ajusta el 1er campo al Ancho Máximo del motor.
 +
<pre>
 +
format:enlazar("A c/Afil. d/aplicar Cob. 1a. :|    40,00")
 +
</pre>
  
*'''format: leftpad / rightpad / centerpad''' (''dato a imprimir'')
+
=== format:enlazar(valor1, valor2) — forma v2 ===
:-rellena por izquierda / derecha / centra el texto del dato ingresado,
+
Si los valores no son nulos, devuelve la concatenación de ambos parámetros ajustada al ancho de página.
::siempre con espacios en blanco,
+
<pre>
::hasta completar la cantidad de caracteres indicada como ''Ancho Máximo'' en el motor de impresión.
+
format:enlazar("A c/Afil. d/aplicar Cob. 1ra.: ","  40,00")
 +
</pre>
  
 +
=== format:esNulo(value) ===
 +
Similar al método <code>isNull()</code>, contemplando iterables.
  
*'''format: leftpad / rightpad / centerpad''' (''título'', ''dato'')
+
=== format:imprimirbarcode(valor [, alineacion]) — plantillas v5 PDF ===
:-si el valor de ''dato'' es nulo,
+
Imprime código de barras con fuente BarCode font. Alineación: <code>'L'</code>/<code>'I'</code> (izquierda, defecto), <code>'R'</code>/<code>'D'</code> (derecha), <code>'C'</code> (centro).
::-no imprime texto alguno.
+
:-si el valor de ''dato'' no es nulo,  
+
::-concatena los valores ''título y dato'',
+
::-rellena por izquierda / derecha / centra el texto completo,  
+
:::siempre con espacios en blanco,
+
:::hasta completar la cantidad de caracteres indicada como ''Ancho Máximo'' en el motor de impresión.
+
  
 +
=== format:imprimircode128(valor [, alineacion]) — plantillas v5 PDF ===
 +
Imprime código de barras Code128.
 +
<pre>
 +
<%@format:imprimircode128('1234567890','C')%>
 +
</pre>
  
*'''format: leftpad / rightpad''' (''título'', ''dato'', ''número'')
+
=== format:imprimircode39h(valor [, alineacion]) — plantillas v5 PDF ===
:-si el valor de ''dato'' es nulo,
+
Imprime código de barras Code39 Hoch.
::-no imprime texto alguno.
+
:-si el valor de ''dato'' no es nulo,
+
::-concatena los valores ''título y dato'',
+
::-rellena por izquierda / derecha el texto completo,
+
:::siempre con espacios en blanco,
+
:::hasta completar la cantidad de caracteres indicada como ''Ancho Máximo'' en el motor de impresión menos el valor indicado en el parámetro ''número''.
+
  
 +
=== format:imprimircode39l(valor [, alineacion]) — plantillas v5 PDF ===
 +
Imprime código de barras Code39 Logitogo.
  
*'''format: concatenar''' (''número de campo'', ''string de datos serializados'')
+
=== format:imprimirCodigoDeBarras(valor [, alineacion]) — plantillas v5 PDF ===
:-concatena los valores del string de datos separados por ''|'',
+
Selecciona el tipo de código de barras según el parámetro de nodo <code>CODIGO_BARRA_PLANTILLA</code>.
::ajusta la longitud del campo indicado por el primer parámetro,
+
Formato del parámetro: <code>CODE39H,R</code> (tipo, alineación). Código por defecto: <code>CODE128,C</code>.
::hasta completar la cantidad de caracteres indicada como ''Ancho Máximo'' en el motor de impresión.
+
:-por ejemplo:
+
::format:concatenar(2, "  1|ADALAT 30|    44,00|  44,00")
+
  
 +
=== format:imprimirEAN13(valor) — plantillas v5 PDF ===
 +
Imprime código EAN-13 (troqueles).
 +
<pre>
 +
<%#format:imprimirEAN13(obtCodigoBarraProducto())%>
 +
</pre>
  
*'''format: enlazar''' (''string de 2 datos serializados'')
+
=== format:imprimirfree3of9(valor [, alineacion]) — plantillas v5 PDF ===
:-concatena los 2 valores del string de datos separados por ''|'',
+
Imprime código de barras Code 3of9.
::ajusta la longitud del 1er. campo hasta completar la cantidad de caracteres
+
::indicada como ''Ancho Máximo'' en el motor de impresión.
+
:-por ejemplo:
+
::format:enlazar("A c/Afil. d/aplicar Cob. 1a. :|    40,00")
+
  
 +
=== format:integer(número) ===
 +
Devuelve la parte entera del número ingresado, convertida en string.
  
*'''format: separador''' ()
+
=== format:irLinea(número) ===
:-imprime una línea separadora formada por caracteres ''--------------''
+
Avanza la posición a imprimir hasta la línea indicada por el parámetro.
::hasta completar la cantidad de caracteres indicada como ''Ancho Máximo'' en el motor de impresión.
+
  
 +
=== format:leftpad / rightpad / centerpad(dato) — 1 parámetro ===
 +
Rellena por izquierda / derecha / centra el texto, siempre con espacios en blanco, hasta completar el '''Ancho Máximo''' del motor de impresión.
  
*'''format: separador''' (''dato'')
+
=== format:leftpad / rightpad / centerpad(titulo, dato) — 2 parámetros ===
:-imprime una línea separadora condicional,
+
* Si <code>dato</code> es nulo: no imprime nada.
:-formada por caracteres ''------------''
+
* Si <code>dato</code> no es nulo: concatena <code>titulo + dato</code> y rellena/centra hasta el '''Ancho Máximo''' del motor.
::hasta completar la cantidad de caracteres indicada como ''Ancho Máximo'' en el motor de impresión.
+
:-la condición viene dada por el valor contenido en ''dato'',
+
::si es nulo, el separador no se imprime.
+
:-por ejemplo:
+
::<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre)%>
+
::si existen bonos, imprime el separador --------------------------
+
  
 +
=== format:leftpad / rightpad(titulo, dato, número) — 3 parámetros ===
 +
* Si <code>dato</code> es nulo: no imprime nada.
 +
* Si <code>dato</code> no es nulo: concatena <code>titulo + dato</code> y rellena hasta '''Ancho Máximo menos <code>número</code>'''.
  
*'''format: separador''' (''dato'', ''título'')
+
=== format:lefttrim(value) ===
:-imprime una línea separadora condicional,
+
Si el valor no es nulo, recorta los espacios en blanco de la '''izquierda'''.
:-formada por caracteres ''------------'' con el valor indicado en ''título'', centrado
+
<pre>
::hasta completar la cantidad de caracteres indicada como ''Ancho Máximo'' en el motor de impresión.
+
format:lefttrim("    A cargo Afiliado")  =>  "A cargo Afiliado"
:-la condición viene dada por el valor contenido en ''dato'',
+
</pre>
::si es nulo, el separador no se imprime.
+
:-por ejemplo:
+
::<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre,'- BONO -')%>
+
::si existen bonos, imprime el separador ---------- BONO ----------
+
  
 +
=== format:len(objeto) ===
 +
Devuelve la longitud del dato ingresado, convertido en string.
  
*'''format: nonull''' (''objeto'')
+
=== format:longDate(fecha) ===
:-si el valor del dato recibido no es nulo, imprime su valor string
+
Devuelve la fecha en el formato <code>longDate</code> definido en application.
:-si el valor del dato recibido es nulo, imprime un string vacío: ""
+
  
 +
=== format:longDateTime(fecha) ===
 +
Devuelve la fecha y hora en el formato <code>dd/mm/yyyy hh:mm:ss</code>, definido en application.
  
*'''format: cgoAfilCob''' (''total'', ''montoCobertura'')
+
=== format:lowerCase(value) ===
:-si existe la Cobertura (montoCobertura > 0),
+
Devuelve un String con el lower-case del objeto.
::devuelve el importe que resta para el Afiliado: total - montoCobertura
+
<pre>
:-si no existe la Cobertura (montoCobertura = 0),
+
format:lowerCase('Valor para Cambiar')  =>  'valor para cambiar'
::devuelve cero, con lo que no se imprime ningún dato.
+
</pre>
  
 +
=== format:lpad(texto, longitud [, caracter]) / rpad / cpad ===
 +
Rellena a izquierda (<code>lpad</code>) / derecha (<code>rpad</code>) / centra (<code>cpad</code>) el texto, hasta la longitud indicada.
 +
* Si <code>longitud &lt; len(texto)</code>: corta el texto.
 +
* Si no se especifica <code>caracter</code>: rellena con espacios.
  
 +
=== format:nonull(objeto) ===
 +
* Si el valor no es nulo: imprime su valor string.
 +
* Si el valor es nulo: imprime un string vacío <code>""</code>.
  
*'''format: irLinea''' (''número'')
+
=== format:noRepetir(nombre, cantidadBase) ===
:-avanza la posición a imprimir hasta la línea indicada por el parámetro.
+
En ocasiones se recibe un nombre o descripción repetido varias veces y se desea mostrar uno solo.
 +
* <code>nombre</code>: el dato a mostrar.
 +
* <code>cantidadBase</code>: número mínimo de caracteres a mostrar sin repetición (ej: <code>5</code>).
  
 +
=== format:obtCaracterCopia(parametro[1]) ===
 +
Registra el carácter de Original/Duplicado/etc. del documento impreso dentro de la secuencia de copias.
 +
<pre>
 +
<%=format:rightpad('ES COMPROBANTE : ',format:obtCaracterCopia(parametro[1]))%>
 +
=> ES COMPROBANTE : ORIGINAL
 +
=> ES COMPROBANTE : DUPLICADO
 +
=> ES COMPROBANTE : TRIPLICADO
 +
</pre>
  
'''NOTA: SI LA AUSENCIA DEL DATO A IMPRIMIR TIENE QUE ELIMINAR EL RENGLÓN ACTUAL SE TIENE QUE ENCERRAR ENTRE MAYOR Y MENOR LA FUNCIÓN. EJ: <<%=....%>>'''
+
=== format:obtcodigo(objeto) ===
 +
Formatea el objeto (codificación del comprobante <code>0001-0001234</code>) para imprimir como Código de Barras.
  
== Funciones definidas para cada tipo de dispositivo (Plantillas v3) ==
+
=== format:obtcodigosinguion(objeto) ===
 +
Igual que <code>obtcodigo</code> pero sin el guión separador.
  
Estos comandos actúan sólo si el dispositivo lo permite.
+
=== format:obtNumeroCopia(parametro[1]) ===
 +
Registra el número de copia del documento impreso dentro de la secuencia de copias.
 +
<pre>
 +
<%=format:rightpad('COPIA NUMERO  : ',format:obtNumeroCopia(parametro[1]))%>
 +
=> COPIA NUMERO  : 1 / 2 / 3
 +
</pre>
  
*'''inicializar''' ()
+
=== format:obtTipoComprobante(tipoOperacion) ===
:-envía un comando de inicialización a la impresora que la configura a sus valores iniciales.
+
Dado el tipo de operación, devuelve un string con el respectivo tipo de comprobante.
 +
<pre>
 +
format:obtTipoComprobante(obtTipoOperacion())  =>  "FACTURA", "TICKET", etc.
 +
</pre>
  
 +
=== format:param(value) ===
 +
Devuelve un String con el valor de un '''parámetro general''', dado su nombre.
 +
<pre>
 +
format:param('IMPRIMIR_DATOS_PRESCRIPCION')  =>  'true' o 'false'
 +
</pre>
  
*'''normalizar''' ()
+
=== format:reemplazarParametro(linea, args[]) ===
:-envía un comando de normalización de la letra, a sus valores iniciales.
+
Reemplaza los parámetros de <code>linea</code> por los métodos indicados en <code>args</code>.
 +
El <code>render()</code> (v4 en adelante) puede recibir una lista de parámetros desde el programa.
 +
<pre>
 +
args[1] = "separador()";
 +
args[2] = "cortepapel()";
  
 +
<%=format:parametro[2]%>  =>  <%=format:separador()%>
 +
</pre>
  
*'''negrita''' (''objeto'')
+
=== format:reemplazarTexto(titulo, template) ===
:-imprime en negrita (o enfatizado) el valor string del dato recibido.
+
Devuelve un texto donde se reemplazó el <code>titulo</code> de acuerdo al patrón <code>template</code>.
::vuelve a las condiciones iniciales al finalizar la línea.
+
Los patrones se separan por <code>|</code> en pares <code>buscar|reemplazar</code>.
 +
<pre>
 +
titulo:   "RECARGO POR FORMA DE PAGO EFECTIVO POS"
 +
template: "DESC.||RECARGO|DIF.PRC.| POR|POR|FORMA||DE || PAGO|PAGO EN|POS||*|"
 +
resultado: "DIF.PRC.POR PAGO EN EFECTIVO"
 +
</pre>
  
 +
=== format:redondear(value, decimales, modo) ===
 +
Devuelve un String del parámetro <code>value</code>. Si es numérico, aplica el redondeo indicado.
 +
<pre>
 +
value=123.6977887, decimales=0, modo="up"
 +
format:redondear(value, 0, "up")  =>  "124"
 +
</pre>
  
*'''cursiva''' (''objeto'')
+
=== format:righttrim(value) ===
:-imprime en cursiva (o en itálica) el valor string del dato recibido.
+
Si el valor no es nulo, recorta los espacios en blanco de la '''derecha'''.
::vuelve a las condiciones iniciales al finalizar la línea.
+
<pre>
 +
format:righttrim("A cargo Afiliado      ") =>  "A cargo Afiliado"
 +
</pre>
  
 +
=== format:roundingUP(value) ===
 +
Devuelve un String del parámetro <code>value</code>. Si es numérico, devuelve el entero mayor (redondeo hacia arriba).
 +
<pre>
 +
value=5895.195741
 +
format:roundingUP(value)  =>  "5.896"
 +
</pre>
  
*'''subrayado''' (''objeto'')
+
=== format:semianchopagina() ===
:-imprime con letra subrayada el valor string del dato recibido.
+
Devuelve la '''mitad''' de los caracteres del ancho de página del motor.
::vuelve a las condiciones iniciales al finalizar la línea.
+
Se usa como complemento para alinear impresiones en doble ancho.
 +
<pre>
 +
<%@format:textodobleancho(format:separador(obtNombreObraSocial(),'- RECETA -',format:semianchopagina()))%>
 +
</pre>
  
 +
=== format:separador() — sin parámetros ===
 +
Imprime una línea separadora de caracteres <code>---...---</code> hasta el Ancho Máximo del motor.
  
*'''condensado''' (''objeto'')
+
=== format:separador(dato) — 1 parámetro ===
:-imprime con letra condensada el valor string del dato recibido.
+
Imprime el separador <code>---...---</code> solo si <code>dato</code> no es nulo.
::vuelve a las condiciones iniciales al finalizar la línea.
+
  
 +
=== format:separador(dato, titulo) — 2 parámetros ===
 +
Imprime el separador con <code>titulo</code> centrado, solo si <code>dato</code> no es nulo.
 +
<pre>
 +
<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre,'- BONO -')%>
 +
=>  ---------- BONO ----------
 +
</pre>
  
*'''textodobleancho''' (''objeto'')
+
=== format:separador(dato, titulo, anchoTexto) — 3 parámetros ===
:-imprime con letra expandida a lo ancho el valor string del dato recibido.
+
Igual al anterior, pero el ancho total lo define <code>anchoTexto</code> en lugar del motor.
::vuelve a las condiciones iniciales al finalizar la línea.
+
<pre>
 +
<%@format:separador(operacionesValor[valor/tipoValor/id=2]/valor/entidad/nombre,'- RECETA -',24)%>
 +
=>  -------- RECETA --------
 +
</pre>
  
 +
=== format:separadorDoble() ===
 +
Imprime una línea separadora de caracteres <code>===...===</code> hasta el Ancho Máximo del motor.
  
*'''textodoblealto''' (''objeto'')
+
=== format:shortDate(fecha) ===
:-imprime con letra expandida en alto el valor string del dato recibido.
+
Devuelve la fecha en el formato <code>shortDate</code> definido en application.
::vuelve a las condiciones iniciales al finalizar la línea.
+
  
 +
=== format:string(objeto) ===
 +
Convierte cualquier tipo de dato en string.
  
*'''cortepapel''' ()
+
=== format:stringData(value) ===
:-envía un comando de corte parcial de la cinta de papel.
+
Devuelve el parámetro sin puntos <code>"."</code>.
 +
<pre>
 +
format:stringData("1.235.459,78")  =>  "1235459,78"
 +
</pre>
  
 +
=== format:stringDataNoVacio(value) ===
 +
Devuelve el parámetro sin puntos <code>"."</code>. Si <code>value</code> es <code>null</code>, devuelve <code>"0,00"</code>.
  
*'''cortetotalpapel''' ()
+
=== format:stringNoVacio(número) ===
:-envía un comando de corte total de la cinta de papel.
+
Devuelve el número ingresado convertido en string. Si el valor es nulo, devuelve <code>"0,00"</code>.
  
 +
=== format:stringNoVacioDto(número) ===
 +
Devuelve el número ingresado convertido en string. Si el valor es nulo, devuelve <code>"-0,00"</code>.
  
*'''codigobarras''' (''objeto'')
+
=== format:stringtransf(objeto1, objeto2, objeto3) ===
:-envía los comandos de configuración previos para imprimir un código de barras.
+
Devuelve <code>objeto1</code>, donde las ocurrencias de <code>objeto2</code> son reemplazadas por <code>objeto3</code>.
::imprime el código de barras del valor del dato recibido.
+
Internamente usa <code>StringUtils.replace()</code>.
::vuelve a las condiciones iniciales al finalizar la línea.
+
  
== Funciones de jxpath==
+
=== format:textodobleancho(objeto) — plantillas v5 PDF ===
 +
Imprime con letra expandida a lo ancho. Equivalente al comando de dispositivo <code>textodobleancho()</code> pero usable como wrapper en plantillas PDF.
 +
<pre>
 +
<%@format:textodobleancho(format:separador(obtNombreObraSocial(),'- RECETA -',format:semianchopagina()))%>
 +
</pre>
  
*''string'' '''concat''' (''string'', ''string'', ''string'', ...)
+
=== format:unirtodo(titulo, subtitulo, dato) / format:unirtodo(titulo, subtitulo, dato, ancho) ===
::-devuelve la concatenación de sus argumentos.
+
Si los valores no son nulos, devuelve la concatenación de los parámetros.
 +
Ajusta <code>titulo + dato</code> al ancho indicado o al del motor.
  
 +
=== format:unirtodo(dato1, dato2) — 2 parámetros ===
 +
Devuelve la concatenación '''incondicional''' de ambos parámetros.
  
*''number'' '''sum''' (''node-set'')
+
=== format:upperCase(value) ===
::-devuelve la suma, para cada nodo del set de nodos del argumento, del resultado de convertir los valores string del nodo a números.
+
Devuelve un String con el upper-case del objeto.
 +
<pre>
 +
format:upperCase('Valor para Cambiar')  =>  'VALOR PARA CAMBIAR'
 +
</pre>
  
 +
=== format:vuelto(montoEfectivo, abonaCon, n) ===
 +
Devuelve <code>(abonaCon - montoEfectivo)</code> o cero, formateado a <code>n</code> decimales.
  
== Métodos ==
+
----
{| style="border-spacing:0;"
+
| style="background-color:#c90016;border-top:0.25pt solid #808080;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ''objeto''
+
| style="background-color:#c90016;border-top:0.25pt solid #808080;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ''atributo''
+
| style="background-color:#c90016;border-top:0.25pt solid #808080;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ''función''
+
| style="background-color:#c90016;border-top:0.25pt solid #808080;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ''tabla''
+
| style="background-color:#c90016;border:0.25pt solid #808080;padding:0.097cm;"| ''método''
+
| style="background-color:#c90016;border:0.25pt solid #808080;padding:0.097cm;"| ''nuevo método''
+
  
|-
+
== 5. Pseudo-métodos obt*() — TemplateUtil.java ==
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Razón Social
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/nodoCreacion/razonSocial
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtRazonSocialFarmacia()
+
|-
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Razón Social 2
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/nodoCreacion/razonSocialLinea2
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtRazonSocialFarmaciaLinea2()
+
  
|-
+
Organizados por entidad. La columna '''Función''' indica el tag de contexto, '''Tabla''' la tabla de origen y '''Atributo''' el XPath equivalente.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Dirección
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>valor/nodoCreacion/direcciones[1]</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtDireccion1Farmacia()
+
  
|-
+
=== Afiliado ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Tel.
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/nodoCreacion/telefonosConcatenados
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtTelefonoFarmacia()
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| <code>obtNombreAfiliado()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| C.U.I.T.
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/nodoCreacion/cuit
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtCuitFarmacia()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| <code>obtNumeroAfiliado()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| I.V.A.
+
|}
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/nodoCreacion/objSituacionIva/nombre
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtSituacionIvaFarmacia()
+
  
|-
+
=== Bono ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| I.Br.
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/nodoCreacion/ingresosBrutos
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtIngresosBrutosFarmacia()
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Cliente
+
| <code>obtAcumuladoBono()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=1]/valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Nombre
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/entidad/nombre
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtNombreCliente()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Cliente
+
| <code>obtNombreBono()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Apellido
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/entidad/apellido
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtApellidoCliente()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Cliente
+
| <code>obtPuntajeBono()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=1]/valor/valoresConcepto[subTipoValorCpto/concepto/id=500 and subTipoValorCpto/visiblePos=1]/monto</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Dirección
+
|}
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>valor/entidad/direcciones[1]</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtDireccion1Cliente()
+
  
|-
+
=== Cheque / CH Terceros ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Cliente
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Teléfono
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/entidad/telefonosConcatenados
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtTelefonoCliente()
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Afiliado
+
| <code>obtDescuentoChequeTerceros()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>operacionesValor[valor/tipoValor/id=5 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Nombre
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtNombreAfiliado()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Afiliado
+
| <code>obtImporteFormaPagoChequeTerceros()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Nro
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtNumeroAfiliado()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtImporteFormaPagoChequeTercerosVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>sum(valor[tipoValor/id=5 and anulacion!='A']/montoPrincipal)</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Fecha
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/fechaCreacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"|
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtNombreFormaPagoChequeTerceros()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=5]/entidad/nombre</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Número
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/codificacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtNumeroComprobante()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Producto
+
| <code>obtRecargoChequeTerceros()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>operacionesValor[valor/tipoValor/id=5 and valor/anulacion!='A']/valor/recargoFPPlantilla</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Nombre
+
|}
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%#</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| item_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| producto/nombreCorto
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"|
+
  
|-
+
=== Cliente ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Producto
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Descuento de ítem
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%#</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| item_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| descuento
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| * descuento *
+
 
+
|-
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Producto
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Descuento Automático/Forzado
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%#</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| item_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| descuentoAfiliado
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| * descuentoAfiliado *
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Producto
+
| <code>obtApellidoCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/apellido</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Descuento General (manual)
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%#</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| item_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| descuentoGeneral
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| * descuentoGeneral *
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Receta
+
| <code>obtCodigoCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/codigo</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| O. Social
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%#</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| item_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| sum(itemsReceta/montoTotalCubierto)
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"|
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtCuitCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/cuit</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| TOTAL
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtPrecioFinal()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtDireccion1Cliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/direcciones[1]</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| OBRAS SOCIALES
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"|
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtEntreCallesCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/entreCalle</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| CUENTA CORRIENTE
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtImporteFormaPagoCtaCte()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtNombreCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/nombre</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| CUOTA CUENTA CORRIENTE
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtImporteFormaPagoCuotaCteCte()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtObservacionCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacion</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| TARJETA
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtImporteFormaPagoTarjeta()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtObservacionesCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observaciones</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| CHEQUE TERCEROS
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtImporteFormaPagoChequeTerceros()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtObservacionesCliente1raLinea()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacionesCliente1raLinea</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| EFECTIVO
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| obtImporteFormaPagoEfectivo()
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtObservacionesCliente2daLinea()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacionesCliente2daLinea</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Exento
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto</nowiki>
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| <code>obtObservacionesCliente3raLinea()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacionesCliente3raLinea</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Gravado
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| <nowiki>valor/valoresConcepto[subtipoValorCpto/concepto/id=541]/monto</nowiki>
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Vendedor
+
| <code>obtRazonSocialCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/razonSocial</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Nombre
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| valor/objUsuarioCreacion/alias
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Puesto
+
| <code>obtSituacionIvaCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/objSituacionIVA/nombre</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Nombre
+
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
| <code>obtTelefonoCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/telefonosConcatenados</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| operacion/puestoVenta/nombre
+
 
+
 
|}
 
|}
  
== Caracteres ==
+
==== Cliente (eventual) ====
 
+
Para la obtención de la sintaxis de comandos se debe recurrir a los manuales de cada modelo de impresora fiscal.
+
 
+
A modo de ejemplo se transcriben algunos de los caracteres más usados:
+
 
+
{| style="border-spacing:0;"
+
| style="background-color:#dc2300;border-top:0.25pt solid #808080;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ''modelo impresora''
+
| style="background-color:#dc2300;border-top:0.25pt solid #808080;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ''HEXA''
+
| style="background-color:#dc2300;border-top:0.25pt solid #808080;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ''ASCII''
+
| style="background-color:#dc2300;border:0.25pt solid #808080;padding:0.097cm;"| ''descripción''
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtDocumentoClienteEven()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/documentoCliente</code>
 +
|-
 +
| <code>obtDomicilioClienteEven()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/domicilioCliente</code>
 +
|-
 +
| <code>obtNombreClienteEven()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nombreCliente</code>
 +
|}
  
Epson
+
==== Cliente (secundario) ====
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Por definición del protocolo, todo comando empieza con 1B
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtNombreClienteSecundario()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidadSecundaria/nombre</code>
 +
|}
  
Epson
+
==== Cliente Envío ====
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B@
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC @
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Inicializa la impresora
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtDireccionEnvio()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/direccionSeleccionada</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001Btn
+
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC t n
+
| <code>obtObservacionEnvio()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/observaciones</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona la página de código n:
+
|-
 
+
| <code>obtTelefonoEnvio()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/telefonoSeleccionado</code>
n = 2 (PÁGINA DE CÓDIGO 850 – Falla)
+
|}
  
n = 3 (PÁGINA DE CÓDIGO 437)
+
=== Convenio ===
 
+
n = 4 (PÁGINA DE CÓDIGO 860)
+
 
+
n = 5 (PÁGINA DE CÓDIGO 858)
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtDescuentoConvenio()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>operacionesValor[valor/tipoValor/id=211 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001Bln
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC l n
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Programa el margen izquierdo para la columna n
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
| <code>obtDtoGeneralConvenio()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=211]/valor/descuentoGeneral</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001Bl
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC l
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Posiciona margen izquierdo
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtImporteFormaPagoConvenio()</code> || <code>&lt;%=</code> || operacion_valor || <code>sum(valor[tipoValor/id=211]/montoPrincipal)</code>
 +
|-
 +
| <code>obtImporteFormaPagoConvenioVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>valor[tipoValor/id=211 and anulacion!='A']/montoPrincipal</code>
 +
|-
 +
| <code>obtNombreFormaPagoConvenio()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=211]/entidad/nombre</code>
 +
|-
 +
| <code>obtRecargoConvenio()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>operacionesValor[valor/tipoValor/id=211 and valor/anulacion!='A']/valor/recargoFPPlantilla</code>
 +
|}
  
Epson
+
=== Cuenta Corriente ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u000E
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| SO
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona expandido por una línea
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtDescuentoCtaCte()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=22 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u0014
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| DC4
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Cancela modo expandido de una línea
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtDtoGeneralCtaCte()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=22]/valor/descuentoGeneral</code>
 +
|-
 +
| <code>obtImporteFormaPagoCtaCte()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal</code>
 +
|-
 +
| <code>obtImporteFormaPagoCtaCteVenta()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=22 and valor/anulacion!='A']/valor/montoPrincipal</code>
 +
|-
 +
| <code>obtRecargoCtaCte()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=22 and valor/anulacion!='A']/valor/recargoFPPlantilla</code>
 +
|-
 +
| <code>obtSaldoActual()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor/saldoActualComprobante</code>
 +
|-
 +
| <code>obtSaldoActualMasVenta()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor/saldoActualMasVenta</code>
 +
|}
  
Epson
+
==== Cuota Cuenta Corriente ====
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u000F
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| SI
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona modo condensado
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtDescuentoCuotasCtaCte()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>valor[tipoValor/id=21 and anulacion!='A']/valor/descuentoFPPlantilla</code>
 +
|-
 +
| <code>obtDtoGeneralCuotaCtaCte()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=21]/valor/descuentoGeneral</code>
 +
|-
 +
| <code>obtImporteFormaPagoCuotaCteCte()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal</code>
 +
|-
 +
| <code>obtImporteFormaPagoCuotaCteCteVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>sum(valor[tipoValor/id=21 and anulacion!='A']/montoPrincipal)</code>
 +
|-
 +
| <code>obtNombreFormaPagoCuotaCteCte()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=21]/entidad/nombre</code>
 +
|-
 +
| <code>obtRecargoCuotasCtaCte()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>valor[tipoValor/id=21 and anulacion!='A']/valor/recargoFPPlantilla</code>
 +
|}
  
Epson
+
=== Efectivo ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u0012
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| DC2
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Cancela modo condensado
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtDescuentoEfectivo()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001BE
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC SO
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona expandido por una línea
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtImporteFormaPagoEfectivo()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001BF
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC SI
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona modo condensado
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
| <code>obtImporteFormaPagoEfectivoVenta()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/montoPrincipal</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001BF
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC F
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Cancela modo enfatizado
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
| <code>obtRecargoEfectivo()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/recargoFPPlantilla</code>
 +
|}
  
Epson
+
=== Factura Electrónica (Referencias Electrónicas) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001Bm
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC m
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Realiza un corte parcial de papel
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
| <code>obtFechaAdicional()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaAdicional</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001BM
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC M
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona el ancho elite
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
| <code>obtFechaReferenciaElectronica()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaAutorizacion</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B0
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC 0
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona 1/8 de pulgada de línea de espacio
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
| <code>obtFechaVencimiento()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaVencimiento</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B-
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC -
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona/cancela modo subrayado
+
 
+
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
| <code>obtFormaAutorizacionFE()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/formaAutorizacion</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001BW
+
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC W
+
| <code>obtMarcaCAEA()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/marcaCAEA</code>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:0.25pt solid #808080;padding:0.097cm;"| Selecciona/cancela el modo expandido
+
|-
 
+
| <code>obtReferenciaElectronica()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/numeroAutorizacion</code>
 
|}
 
|}
  
 +
Ejemplo de uso para C.A.E. / C.A.E.A.:
 +
<pre>
 +
<%=format:separador(obtReferenciaElectronica(),'--- REFERENCIA ELECTRONICA ---')%>
 +
<%=concat(format:enlazar(concat('C.A.E.',format:string(obtMarcaCAEA())),': ',
 +
          format:rpad(obtReferenciaElectronica(),15),25),
 +
          format:rightpad('Vto.:',format:rpad(format:shortDate(obtFechaAdicional()),11)))%>
 +
<%=format:separador()%>
 +
</pre>
  
==Ejemplo Modelo==
+
=== Farmacia (Nodo) ===
  
Hagamos un seguimiento, línea a línea, de la plantilla '''Factura Bematech MP4000 TH (45)''' cargada en zWeb:
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtCuitFarmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/cuit</code>
 +
|-
 +
| <code>obtDireccion0Farmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/direcciones[0]</code>
 +
|-
 +
| <code>obtDireccion1Farmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/direcciones[1]</code>
 +
|-
 +
| <code>obtFechaInicioActividades()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/inicioDeActividades</code>
 +
|-
 +
| <code>obtIngresosBrutosFarmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/ingresosBrutos</code>
 +
|-
 +
| <code>obtRazonSocialFarmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/razonSocial</code>
 +
|-
 +
| <code>obtRazonSocialFarmaciaLinea2()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/razonSocialLinea2</code>
 +
|-
 +
| <code>obtSituacionIvaFarmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/objSituacionIVA/nombre</code>
 +
|-
 +
| <code>obtTelefono0Farmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/telefonos[0]/numero</code>
 +
|-
 +
| <code>obtTelefono1Farmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/telefonos[1]/numero</code>
 +
|-
 +
| <code>obtTelefonoFarmacia()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/nodoCreacion/telefonosConcatenados</code>
 +
|}
  
 +
=== Producto / Ítem ===
  
1) <span style="color:#0000FF">\u001B@\u001Bt2\u001Bl\u0001</span>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtCodigoBarraProducto()</code> || <code>&lt;%#</code> || item_valor || <code>producto/codigoBarra</code>
 +
|-
 +
| <code>obtNombreProducto()</code> || <code>&lt;%#</code> || item_valor || <code>producto/nombreCorto</code>
 +
|}
  
:ESC @ = inicializa la impresora;
+
Descuentos de ítem (propiedades directas, sin método):
:ESC t 2 = selecciona la página de código 850;
+
:ESC l 1 = programa el margen iazquierdo para la columna 1.
+
  
 +
{| class="wikitable"
 +
! Propiedad !! Descripción
 +
|-
 +
| <code>descuento</code> || Descuento de ítem
 +
|-
 +
| <code>descuentoAfiliado</code> || Descuento Automático/Forzado
 +
|-
 +
| <code>descuentoGeneral</code> || Descuento General (manual)
 +
|}
  
2) <span style="color:#0000FF">\u000E</span><span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/nodoCreacion/razonSocial)</span>,19<span style="color:#6B8E23">)%></span>
+
=== Prototipos / Datos Adicionales ===
  
:SO = selecciona expandido por una línea;
+
{| class="wikitable" style="width:100%"
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
! Método / Propiedad !! Contexto !! Descripción
:Imprime 19 caracteres de la Razón Social del Nodo Creación de la Factura,
+
|-
::si tiene más de 19 caracteres: los corta,
+
| <code>obtCabeceraDatoCodificado()</code> || <code>&lt;%+</code> || Dato codificado de prototipos de cabecera
::si tiene menos: completa a derecha con espacios.
+
|-
 +
| <code>obtCabeceraNombreDatoCodificado()</code> || <code>&lt;%+</code> || Nombre del dato codificado de prototipos de cabecera
 +
|-
 +
| <code>obtDatoCodificado()</code> || <code>&lt;%+</code> || Dato codificado del prototipo (<code>dato</code>)
 +
|-
 +
| <code>obtNombreDatoCodificado()</code> || <code>&lt;%+</code> || <code>prototipoDetalle/datoCodificado/nombre</code>
 +
|-
 +
| <code>obtNombreDePrototipoDetalle()</code> || <code>&lt;%+</code> || <code>prototipoDetalle/nombre</code>
 +
|-
 +
| <code>obtNombrePrototipoDePrototipoDatoAdicional()</code> || <code>&lt;%+</code> || <code>prototipoDatoAdicional/prototipo/nombre</code>
 +
|-
 +
| <code>obtNombrePrototipoDePrototipoDetalle()</code> || <code>&lt;%+</code> || <code>prototipoDetalle/prototipo/nombre</code>
 +
|-
 +
| <code>obtNumeroLineaDePrototipoDatoAdicional()</code> || <code>&lt;%+</code> || <code>prototipoDatoAdicional/numeroLinea</code>
 +
|-
 +
| <code>obtPieDatoCodificado()</code> || <code>&lt;%+</code> || Dato codificado de prototipos de pie de página
 +
|-
 +
| <code>obtPieNombreDatoCodificado()</code> || <code>&lt;%+</code> || Nombre del dato codificado de prototipos de pie de página
 +
|}
  
 +
=== Puesto de Venta ===
  
3) <span style="color:#0000FF">\u0014\u000F</span><span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/nodoCreacion/razonSocialLinea2)</span>,42<span style="color:#6B8E23">)%></span>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtPuestoVenta()</code> || <code>&lt;%=</code> || operacion_valor || <code>operacion/puestoVenta/nombre</code>
 +
|}
  
DC4 = cancela modo expandido de una línea;
+
=== Receta / Cobertura / Obra Social ===
:SI = selecciona modo condensado;
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 42 caracteres de la Razón Social 2a línea del Nodo Creación de la Factura,
+
::si tiene más de 42 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtAutorizacionObraSocial()</code> || <code>&lt;%=</code> || operacion_valor || <code>operacionesValor[valor/tipoValor/id=2]/valor/numeroAutorizacion</code>
 +
|-
 +
| <code>obtCodigoFarmaciaOS()</code> || <code>&lt;%=</code> || operacion_valor || —
 +
|-
 +
| <code>obtCodigoFarmacia1raOS()</code> … <code>obtCodigoFarmacia7maOS()</code> || <code>&lt;%=</code> || operacion_valor || —
 +
|-
 +
| <code>obtDtoGeneralBono()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=1]/valor/descuentoGeneral</code>
 +
|-
 +
| <code>obtDtoGeneralReceta()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=2]/valor/descuentoGeneral</code>
 +
|-
 +
| <code>obtFechaReceta()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=2]/fechaEmision</code>
 +
|-
 +
| <code>obtImporteCobertura()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>valor[tipoValor/id=2 and anulacion!='A']/montoPrincipal</code>
 +
|-
 +
| <code>obtImporteFormaPagoObraSocial()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal</code>
 +
|-
 +
| <code>obtImporteReceta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>valor[tipoValor/id=2 and anulacion!='A']/itemsConvenio/descuentoAfiliado</code>
 +
|-
 +
| <code>obtNombre1raCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1raCobertura/convenio/entidad/nombre</code>
 +
|-
 +
| <code>obtNombre1raObraSocial()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1raCobertura/convenio/obraSocial/nombre</code>
 +
|-
 +
| <code>obtNombre2daCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio2daCobertura/convenio/entidad/nombre</code>
 +
|-
 +
| <code>obtNombre2daObraSocial()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio2daCobertura/convenio/obraSocial/nombre</code>
 +
|-
 +
| <code>obtNombre3raCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio3raCobertura/convenio/entidad/nombre</code>
 +
|-
 +
| <code>obtNombre3raObraSocial()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio3raCobertura/convenio/obraSocial/nombre</code>
 +
|-
 +
| <code>obtNombre4taObraSocial()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio4taCobertura/convenio/obraSocial/nombre</code>
 +
|-
 +
| <code>obtNombre5taObraSocial()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio5taCobertura/convenio/obraSocial/nombre</code>
 +
|-
 +
| <code>obtNombre6taObraSocial()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio6taCobertura/convenio/obraSocial/nombre</code>
 +
|-
 +
| <code>obtNombre7maObraSocial()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio7maCobertura/convenio/obraSocial/nombre</code>
 +
|-
 +
| <code>obtNombreCobertura()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=2]/entidad/obraSocial/nombreCorto</code>
 +
|-
 +
| <code>obtNombreLargoCobertura()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=2]/entidad/nombre</code>
 +
|-
 +
| <code>obtNombreObraSocial()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=2]/valor/entidad/nombre</code>
 +
|-
 +
| <code>obtNumeroCobertura()</code> || <code>&lt;%=</code> || operacion_valor || <code>.[valor/tipoValor/id=2]/numeroCobertura</code>
 +
|-
 +
| <code>obtNumeroCoberturaVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>.[valor/tipoValor/id=2 and valor/anulacion!='A']/numeroCobertura</code>
 +
|-
 +
| <code>obtNumeroReceta()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=2]/codificacion</code>
 +
|-
 +
| <code>obtPorcentaje1raCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1raCobertura/porcentajeCobertura</code>
 +
|-
 +
| <code>obtPorcentaje2daCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio2daCobertura/porcentajeCobertura</code>
 +
|-
 +
| <code>obtPorcentaje3raCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio3raCobertura/porcentajeCobertura</code>
 +
|-
 +
| <code>obtRecetaImporteDescuento()</code> || <code>&lt;%#</code> || item_valor || <code>itemsReceta/descuento</code>
 +
|-
 +
| <code>obtRecetaPorcentajeCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemsReceta/porcentajeCobertura</code>
 +
|-
 +
| <code>obtRecetaPrecioUnitario()</code> || <code>&lt;%#</code> || item_valor || <code>producto/codigoBarra</code>
 +
|-
 +
| <code>obtSaldoAfiliado()</code> || <code>&lt;%=</code> || operacion_valor || <code>.[valor/tipoValor/id=2]/saldoAfiliado</code>
 +
|-
 +
| <code>obtSaldoAfiliadoVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>.[valor/tipoValor/id=2 and valor/anulacion!='A']/saldoAfiliadoSinDto</code>
 +
|-
 +
| <code>obtSumaMontoTotalCubierto()</code> || <code>&lt;%#</code> || item_valor || <code>sum(itemsReceta/montoTotalCubierto)</code>
 +
|-
 +
| <code>obtTotalCubierto1raCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1raCobertura/montoTotalCubierto</code>
 +
|-
 +
| <code>obtTotalCubierto2daCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio2daCobertura/montoTotalCubierto</code>
 +
|-
 +
| <code>obtTotalCubierto3raCobertura()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio3raCobertura/montoTotalCubierto</code>
 +
|}
  
4) <span style="color:#0000FF">\u000F</span><span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080"><nowiki>(valor/nodoCreacion/direcciones[1])</nowiki></span>,42<span style="color:#6B8E23">)%></span>
+
==== Convenios de Ítem ====
  
:SI = selecciona modo condesado;
+
{| class="wikitable" style="width:100%"
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
! Método !! Función !! Tabla !! Atributo
:Imprime 42 caracteres de la 1er Dirección del Nodo Creación de la Factura,
+
|-
::si tiene más de 42 caracteres: los corta,
+
| <code>obtNombre1erConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1/valor/subTipoValor/nombre</code>
::si tiene menos: completa a derecha con espacios.
+
|-
 +
| <code>obtNombre2doConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio2/valor/subTipoValor/nombre</code>
 +
|-
 +
| <code>obtNombre3erConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio3/valor/subTipoValor/nombre</code>
 +
|-
 +
| <code>obtNombre4toConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio4/valor/subTipoValor/nombre</code>
 +
|-
 +
| <code>obtNombre5toConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio5/valor/subTipoValor/nombre</code>
 +
|-
 +
| <code>obtSumaDescuentos1erConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1/sumaDescuentosSinIvaPlantilla</code>
 +
|-
 +
| <code>obtSumaDescuentos2doConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio2/sumaDescuentosSinIvaPlantilla</code>
 +
|-
 +
| <code>obtSumaDescuentos3erConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio3/sumaDescuentosSinIvaPlantilla</code>
 +
|-
 +
| <code>obtSumaDescuentos4toConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio4/sumaDescuentosSinIvaPlantilla</code>
 +
|-
 +
| <code>obtSumaDescuentos5toConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio5/sumaDescuentosSinIvaPlantilla</code>
 +
|-
 +
| <code>obtSumaRecargos1erConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1/rgoConvenioSinIVAPlantilla</code>
 +
|-
 +
| <code>obtSumaRecargos2doConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio2/rgoConvenioSinIVAPlantilla</code>
 +
|-
 +
| <code>obtSumaRecargos3erConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio3/rgoConvenioSinIVAPlantilla</code>
 +
|-
 +
| <code>obtSumaRecargos4toConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio4/rgoConvenioSinIVAPlantilla</code>
 +
|-
 +
| <code>obtSumaRecargos5toConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio5/rgoConvenioSinIVAPlantilla</code>
 +
|}
  
 +
==== Receta Digital — Datos Originales de Prescripción ====
  
5) <span style="color:#0000FF">\u000F</span>Tel.: <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/nodoCreacion/telefonosConcatenados)</span>,42<span style="color:#6B8E23">)%></span>
+
{| class="wikitable" style="width:100%"
 +
! Propiedad / Método !! Contexto !! Descripción
 +
|-
 +
| <code>cantidadPrescripta</code> || <code>&lt;%#</code> item_valor || Cantidad prescripta por el profesional
 +
|-
 +
| <code>productoPrescrito/descripcion</code> || <code>&lt;%#</code> item_valor || Nombre del producto prescrito (Receta Digital)
 +
|-
 +
| <code>prescripcionMedica</code> || <code>&lt;%#</code> item_valor || Nombre de la droga prescrita
 +
|-
 +
| <code>descripcionRecetaDigital</code> || <code>&lt;%#</code> item_valor || Descripción combinada (alias de acceso)
 +
|}
  
:SI = selecciona modo condensado;
+
Ejemplo de uso con impresión opcional (controlada por parámetro):
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
<pre>
:Imprime 42 caracteres con los Teléfonos del Nodo Creación de la Factura,
+
<%#concat(
::si ocupan más de 42 caracteres: los corta,
+
  format:datoCondicional(
::si ocupan menos: completa a derecha con espacios.
+
    (format:param('IMPRIMIR_DATOS_PRESCRIPCION')='true') and
 +
    (format:coalesce(productoPrescrito/descripcion,prescripcionMedica)!=),
 +
    format:concatenar(2,concat(
 +
      format:rpad(format:integer(cantidadPrescripta),2),'|',
 +
      format:rpad(format:coalesce(productoPrescrito/descripcion,prescripcionMedica),30)
 +
    ))
 +
  )
 +
)%>
 +
</pre>
  
 +
=== Recargos y Descuentos de Tarjeta (DtoRgo) ===
  
6) <span style="color:#0000FF">\u000F</span>C.U.I.T. : <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/nodoCreacion/cuit)</span>,30<span style="color:#6B8E23">)%></span>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Descripción
 +
|-
 +
| <code>obtDescuentoTarjeta()</code> || Descuento por forma de pago Tarjeta en Venta
 +
|-
 +
| <code>obtEntidadDtoRgoTarjeta()</code> || Nombre de la entidad para Recargos/Descuentos de Tarjeta (v2)
 +
|-
 +
| <code>obtNombreDtoRgoTarjeta()</code> || Nombre descriptivo para Recargos/Descuentos de Tarjeta (v1)
 +
|-
 +
| <code>obtNombreFormaPagoTarjeta()</code> || Nombre de la forma de pago de la Tarjeta
 +
|-
 +
| <code>obtRecargoTarjeta()</code> || Recargo por forma de pago Tarjeta en Venta
 +
|}
  
:SI = selecciona modo condensado;
+
=== Tarjeta ===
:Imprime el texto 'C.U.I.T. : ';
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 30 caracteres del CUIT del Nodo Creación de la Factura,
+
::si tiene más de 30 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtDtoGeneralTarjeta()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=9]/valor/descuentoGeneral</code>
 +
|-
 +
| <code>obtImporteFormaPagoTarjeta()</code> || <code>&lt;%=</code> || operacion_valor || <code>sum(valor[tipoValor/id=9]/montoPrincipal)</code>
 +
|-
 +
| <code>obtImporteFormaPagoTarjetaVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>.[valor/tipoValor/id=9 and valor/anulacion!='A']/montoPrincipal</code>
 +
|-
 +
| <code>obtNombreFormaPagoTarjeta()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=9]/entidadSaldable/nombre</code>
 +
|-
 +
| <code>obtNombrePlanPagoTarjeta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>.[valor/tipoValor/id=9]/planPago/nombre</code>
 +
|}
  
7) <span style="color:#0000FF">\u000F</span>I.V.A. : <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/nodoCreacion/objSituacionIva/nombre)</span>,30<span style="color:#6B8E23">)%></span>
+
=== Valor / Comprobante ===
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Imprime el texto 'I.V.A. : ';
+
! Método !! Función !! Tabla !! Atributo
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
|-
:Imprime 30 caracteres del nombre de la Situación de IVA del Nodo Creación de la Factura,
+
| <code>obtDtoGeneral()</code> || <code>&lt;%@</code> || operacion || <code>comprobante/descuentoGeneral</code>
::si tiene más de 30 caracteres: los corta,
+
|-
::si tiene menos: completa a derecha con espacios.
+
| <code>obtDtoGeneralChequePropio()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=4]/valor/descuentoGeneral</code>
 +
|-
 +
| <code>obtFechaCreacion()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaCreacion</code>
 +
|-
 +
| <code>obtFechaEmision()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaEmision</code>
 +
|-
 +
| <code>obtImpuestosProductosExentos()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[contains('1703 1783',subTipoValorCpto/id) and valor/letraFactura='A']/monto</code>
 +
|-
 +
| <code>obtImpuestosProductosIVA1050()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[contains('1705 1785',subTipoValorCpto/id) and valor/letraFactura='A']/monto</code>
 +
|-
 +
| <code>obtImpuestosProductosIVA2100()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[contains('1706 1786',subTipoValorCpto/id) and valor/letraFactura='A']/monto</code>
 +
|-
 +
| <code>obtImpuestosProductosIVA2700()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[contains('2287 2284',subTipoValorCpto/id) and valor/letraFactura='A']/monto</code>
 +
|-
 +
| <code>obtLetraFactura()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/letraFactura</code>
 +
|-
 +
| <code>obtNumeroComprobante()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/codificacion</code>
 +
|-
 +
| <code>obtPercepcionesIngresosBrutos()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[subTipoValorCpto/concepto/id=516 and subTipoValorCpto/visiblePos=1]/monto</code>
 +
|-
 +
| <code>obtPrecioFinal()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto</code>
 +
|-
 +
| <code>obtPrecioFinalTodoCte()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto</code>
 +
|-
 +
| <code>obtTipoOperacion()</code> || <code>&lt;%=</code> || operacion_valor || <code>operacion/tipoOperacion</code>
 +
|-
 +
| <code>obtTotalExento()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto</code>
 +
|-
 +
| <code>obtTotalGravado()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[subTipoValorCpto/concepto/id=541]/monto</code>
 +
|-
 +
| <code>obtTotalPercepcionesIIBB()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/valoresConcepto[subTipoValorCpto/concepto/id=516 and subTipoValorCpto/visiblePos=1]/monto</code>
 +
|-
 +
| <code>obtValorCteFechaEmision()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/comprobante/fechaEmision</code>
 +
|-
 +
| <code>obtValorCteNumero()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/comprobante/codificacion</code>
 +
|-
 +
| <code>obtValorCteVendedor()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/comprobante/objusuariocreacion/alias</code>
 +
|-
 +
| <code>obtValorMontoPrincipal()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/montoPrincipal</code>
 +
|}
  
 +
=== Vendedor ===
  
8) <span style="color:#0000FF">\u000F</span>I.Br. : <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/nodoCreacion/ingresosBrutos)</span>,30<span style="color:#6B8E23">)%></span>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtVendedor()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/objUsuarioCreacion/alias</code>
 +
|}
  
:SI = selecciona modo condensado;
+
=== Liquidaciones (Plantillas v4) ===
:Imprime el texto 'I.Br. : ';
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 30 caracteres del nombre del nro. de Ingresos Brutos del Nodo Creación de la Factura,
+
::si tiene más de 30 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
  
 +
Sin método <code>obt*</code> definido — acceso directo por XPath.
  
9) <span style="color:#0000FF">/</span>
+
{| class="wikitable" style="width:100%"
 +
! Atributo !! Función !! Tabla !! Descripción
 +
|-
 +
| <code>entidadLiquidacion</code> || <code>&lt;%@</code> || operacion_valor || Nombre del cliente del recibo
 +
|-
 +
| <code>fechaLiquidacion</code> || <code>&lt;%@</code> || operacion_valor || Fecha de liquidación
 +
|-
 +
| <code>codificacion</code> || <code>&lt;%*</code> || item_liquidacion || Número del comprobante
 +
|-
 +
| <code>entidad</code> || <code>&lt;%*</code> || item_liquidacion || Nombre del cliente
 +
|-
 +
| <code>fechaEmision</code> || <code>&lt;%*</code> || item_liquidacion || Fecha de emisión del comprobante
 +
|-
 +
| <code>fechaVencimiento</code> || <code>&lt;%*</code> || item_liquidacion || Fecha de vencimiento de la cuota
 +
|-
 +
| <code>monto</code> || <code>&lt;%*</code> || item_liquidacion || Importe de la cuota
 +
|-
 +
| <code>subTipoValorCpto/nombre</code> || <code>&lt;%$</code> || conceptos || Concepto total de liquidación
 +
|-
 +
| <code>monto</code> || <code>&lt;%$</code> || conceptos || Importe total de liquidación
 +
|}
  
:Imprime una línea en blanco.
+
----
  
 +
== 6. Funciones JXPath ==
  
10) <span style="color:#0000FF">\u000F</span>Cliente : <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/entidad/nombre)</span>,30<span style="color:#6B8E23">)%></span>
+
Funciones XPath estándar disponibles en las expresiones de plantilla.
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Imprime el texto 'Cliente : ';
+
! Función !! Descripción
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
|-
:Imprime 30 caracteres del Nombre del Cliente asociado a la Factura,
+
| <code>abs(object)</code> || Devuelve el valor absoluto del argumento numérico. ''(Plantillas v4)''
::si tiene más de 30 caracteres: los corta,
+
|-
::si tiene menos: completa a derecha con espacios.
+
| <code>concat(string, string, ...)</code> || Devuelve la concatenación de sus argumentos.
 +
|-
 +
| <code>sum(node-set)</code> || Devuelve la suma de los valores de los nodos del set, convertidos a número.
 +
|}
  
 +
----
  
11) <span style="color:#0000FF">\u000F</span><span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/entidad/apellido)</span>,30<span style="color:#6B8E23">)%></span>
+
== 7. Tabla de Caracteres Especiales ==
  
:SI = selecciona modo condensado;
+
Para la obtención de la sintaxis completa de comandos, referirse a los manuales de cada modelo de impresora.
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 30 caracteres del Apellido del Cliente asociado a la Factura,
+
::si tiene más de 30 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
 
+
 
+
12) <span style="color:#0000FF">\u000F</span>Direccion: <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080"><nowiki>(valor/entidad/direcciones[1])</nowiki></span>,30<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Imprime el texto 'Direccion: ';
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 30 caracteres de la 1er Dirección del Cliente asociado a la Factura,
+
::si tiene más de 30 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
 
+
 
+
13) <span style="color:#0000FF">\u000F</span>Telefono.: <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/entidad/telefonosConcatenados)</span<,30<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 30 caracteres con los Teléfonos del Cliente asociado la Factura,
+
::si ocupan más de 30 caracteres: los corta,
+
::si ocupan menos: completa a derecha con espacios.
+
 
+
 
+
14) <span style="color:#0000FF">\u000F</span><span style="color:#6B8E23"><nowiki><%@</nowiki></span><span style="color:#FF4500">concat(</span><nowiki>'Afiliado: <',</nowiki><span style="color:#6B8E23">format:rpad(</span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado)</nowiki></span>,20<span style="color:#6B8E23">)</span>,'>
+
 
+
<span style="color:#0000FF">\u000F</span><nowiki>Nro. <',</nowiki><span style="color:#6B8E23">format:lpad(<span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado)</nowiki></span>,12<span style="color:#6B8E23">)</span>,'>'<span style="color:#FF4500">)</span><span style="color:#6B8E23">%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Busca en la tabla <tt>operacion</tt> la Receta;
+
:Imprime la concatenación de los textos:
+
::- 'Afiliado: '
+
::- 20 caracteres del Nombre del Afiliado de la Receta,
+
:::si tiene más de 20 caracteres: los corta,
+
:::si tiene menos: completa a derecha con espacios.
+
::- 'Nro. '
+
::- 12 caracteres del Número del Afiliado de la Receta,
+
:::si tiene más de 12 caracteres: los corta,
+
:::si tiene menos: completa a izquierda con espacios.
+
 
+
 
+
15) <span style="color:#0000FF">\u000F</span>Fecha : <span style="color:#6B8E23"><nowiki><%=format:rpad(format:longDate(</nowiki></span><span style="color:#800080">(valor/fechaCreacion)</span><span style="color:#6B8E23">)</span>,20<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Convierte la Fecha Creación de la Factura a '''longDate'''<nowiki>;</nowiki>
+
:Imprime 20 caracteres de la fecha obtenida,
+
::si tiene más de 20 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
 
+
 
+
16) <span style="color:#0000FF">\u0012\u001BE</span> FACTURA <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/letraFactura)</span>,1<span style="color:#6B8E23">)%></span> - <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/codificacion)</span>,13<span style="color:#6B8E23">)%></span><span style="color:#0000FF">\u001BF</span>
+
 
+
:DC2 = cancela modo condensado;
+
:ESC SO = selecciona expandido por una línea;
+
:Imprime el texto ' FACTURA ';
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime la Letra de la Factura (1 caracter);
+
:Imprime el texto ' - '
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 13 caracteres del Número de la Factura,
+
::si tiene más de 13 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
 
+
 
+
17) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
 
+
:DC2 = cancela el modo condensado;
+
:Imprime el texto '------------------------------------------'.
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Modelos !! Hex / Unicode !! ASCII !! Descripción
 +
|-
 +
| Bematech, Epson || <code>\u001B</code> || ESC || Inicio de comando (protocolo)
 +
|-
 +
| Bematech, Epson || <code>\u001B@</code> || ESC @ || Inicializa la impresora
 +
|-
 +
| Bematech || <code>\u001Btn</code> || ESC t n || Selecciona página de código: n=2 (850), n=3 (437), n=4 (860), n=5 (858)
 +
|-
 +
| Bematech || <code>\u001Bln</code> || ESC l n || Programa el margen izquierdo para la columna n
 +
|-
 +
| Epson || <code>\u001Bl</code> || ESC l || Posiciona margen izquierdo
 +
|-
 +
| Bematech, Epson || <code>\u000E</code> || SO || Selecciona expandido por una línea
 +
|-
 +
| Bematech || <code>\u0014</code> || DC4 || Cancela modo expandido de una línea
 +
|-
 +
| Bematech, Epson || <code>\u000F</code> || SI || Selecciona modo condensado
 +
|-
 +
| Bematech, Epson || <code>\u0012</code> || DC2 || Cancela modo condensado
 +
|-
 +
| Bematech || <code>\u001BE</code> || ESC SO || Selecciona expandido por una línea
 +
|-
 +
| Bematech || <code>\u001BF</code> || ESC SI || Selecciona modo condensado
 +
|-
 +
| Epson || <code>\u001BF</code> || ESC F || Cancela modo enfatizado
 +
|-
 +
| Bematech, Epson || <code>\u001Bm</code> || ESC m || Realiza un corte parcial de papel
 +
|-
 +
| Epson || <code>\u001BM</code> || ESC M || Selecciona el ancho elite
 +
|-
 +
| Epson || <code>\u001B0</code> || ESC 0 || Selecciona 1/8 de pulgada de espacio entre líneas
 +
|-
 +
| Epson || <code>\u001B-</code> || ESC - || Selecciona/cancela modo subrayado
 +
|-
 +
| Epson || <code>\u001BW</code> || ESC W || Selecciona/cancela el modo expandido
 +
|-
 +
| Hasar, Epson || <code>\u001B!\u0008</code> || ESC ! 8 || Selecciona modo enfatizado
 +
|}
  
18) <span style="color:#0000FF">\u000F</span> Cant Descripcion P Unit. P.Total
+
----
  
:SI = selecciona modo condensado;
+
== 8. Ejemplos y Prototipos ==
:Imprime el texto 'Cant Descripcion P Unit. P.Total'.
+
  
 +
=== Ajuste de renglones condicionales ===
  
19) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
Para que una línea no se imprima si el dato es nulo, colocar el contenido entre <code>&lt;&lt;</code> y <code>&gt;&gt;</code>:
  
:DC2 = cancela el modo condensado;
+
{| class="wikitable" style="width:100%"
:Imprime el texto '------------------------------------------'.
+
! Fuera del Concat !! Dentro del Concat
 
+
|-
 
+
| <code>&lt;&lt;%@concat('Afil.: &lt;', format:rpad(...,25), '&gt;')%&gt;&gt;</code> || <code>&lt;&lt;%@concat('--- Afil.: &lt;', format:rpad(...,25), '&gt;')%&gt;&gt;</code>
20) <span style="color:#0000FF">\u000F</span><span style="color:#6B8E23"><nowiki><%#</nowiki></span><span style="color:#FF4500">concat(</span><span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#800080">(cantidad)</span><span style="color:#6B8E23">)</span>,6<span style="color:#6B8E23">)</span>,' ',<span style="color:#6B8E23">format:rpad(</span><span style="color:#800080">(producto/nombreCorto)</span>,23<span style="color:#6B8E23">)</span>,' ',<span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#800080">(precioUnitario)</span><span style="color:#6B8E23">)</span>,12<span style="color:#6B8E23">)</span>,' ',<span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#800080">(total)</span><span style="color:#6B8E23">)</span>,12<span style="color:#6B8E23">)</span>,'
+
|}
 
+
<span style="color:#0000FF">\u000F</span> Descuento <nowiki><',</nowiki><span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#800080">(descuentoGeneral)</span><span style="color:#6B8E23">)</span>,12<span style="color:#6B8E23">)</span>,'>
+
 
+
<span style="color:#0000FF">\u000F</span> O. Social <nowiki><',</nowiki><span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#FF4500">sum(</span><span style="color:#800080">itemsReceta/precioUnitario</span><span style="color:#FF4500">)</span><span style="color:#6B8E23">)</span>,12<span style="color:#6B8E23">)</span>,'>'<span style="color:#FF4500">)</span><span style="color:#6B8E23">%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Comienza a iterar sobre la tabla <tt>item_valor</tt> y, para cada Ítem de la Factura, imprime la concatenación de los textos:
+
::- 6 caracteres (completados a izquierda con espacios) de la Cantidad convertida a texto.
+
::- espacio en blanco
+
::- 23 caracteres (completados a derecha con espacios) del Nombre Corto del Producto.
+
::- espacio en blanco
+
::- 12 caracteres (completados a izquierda con espacios) del Precio Unitario convertido a texto.
+
::- espacio en blanco
+
::- 12 caracteres (completados a izquierda con espacios) del Total convertido a texto.
+
::- 'Descuento '
+
::- 12 caracteres (completados a izquierda con espacios) del Descuento General convertido a texto.
+
::- 'O. Social '
+
::- 12 caraceteres (completados a izquierda con espacios) de la suma de los precios Unitarios de los Ítems de la Receta convertida a texto.
+
 
+
 
+
21) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
 
+
:DC2 = cancela el modo condensado;
+
:Imprime el texto '------------------------------------------'.
+
 
+
 
+
22) <span style="color:#0000FF">\u0012\u001BE</span> TOTAL <span style="color:#6B8E23"><nowiki><%=format:lpad(format:string(</nowiki></span><span style="color:#800080"><nowiki>(valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto)</nowiki></span><span style="color:#6B8E23">)</span>,12<span style="color:#6B8E23">)%></span><span style="color:#0000FF">\u001BF</span>
+
 
+
:DC2 = cancela modo condensado;
+
:ESC SO = selecciona expandido por una línea;
+
:Imprime el texto 'TOTAL ';
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 12 caracteres del Monto convertido a texto del subTipoValorConcepto tipo Total Neto de la Factura,
+
::si tiene más de 12 caracteres: los corta,
+
::si tiene menos: completa a izquierda con espacios;
+
:ESC SI = selecciona modo condensado.
+
 
+
 
+
23) <span style="color:#0000FF">\u000F</span>OBRAS SOCIALES <span style="color:#6B8E23"><nowiki><%@format:lpad(format:string(</nowiki></span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Imprime el texto 'OBRAS SOCIALES ';
+
:Busca en la tabla <tt>operacion</tt> la Receta;
+
:Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Receta,
+
::si tiene más de 10 caracteres: los corta,
+
::si tiene menos: completa a izquierda con espacios.
+
 
+
 
+
24) <span style="color:#0000FF">\u000F</span>CUENTA CORRIENTE <span style="color:#6B8E23"><nowiki><%@format:lpad(format:string(</nowiki></span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Imprime el texto 'CUENTA CORRIENTE ';
+
:Busca en la tabla <tt>operacion</tt> la Cuenta Corriente;
+
:Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Cuenta Corriente,
+
::si tiene más de 10 caracteres: los corta,
+
::si tiene menos: completa a izquierda con espacios.
+
 
+
 
+
25) <span style="color:#0000FF">\u000F</span>CUOTA CUENTA CORRIENTE <span style="color:#6B8E23"><nowiki><%@format:lpad(format:string(</nowiki></span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Imprime el texto 'CUOTA CUENTA CORRIENTE ';
+
:Busca en la tabla <tt>operacion</tt> la Cuota de Cuenta Corriente;
+
:Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Cuota de Cuenta Corriente,
+
::si tiene más de 10 caracteres: los corta,
+
::si tiene menos: completa a izquierda con espacios.
+
 
+
 
+
26) <span style="color:#0000FF">\u000F</span><span style="color:#6B8E23"><nowiki><%@</nowiki></span><span style="color:#FF4500">concat(</span><span style="color:#6B8E23">format:rpad(</span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=9]/valor/entidadSaldable/nombre)</nowiki></span>,33<span style="color:#6B8E23">)</span>,<span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)</span><span style="color:#FF4500">)</span><span style="color:#6B8E23">%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Busca en la tabla <tt>operacion</tt> la Cuota de Tarjeta;
+
:Imprime la concatenación de los textos:
+
::- 33 caracteres (completados a derecha con espacios) del Nombre de la Entidad Saldable de la Cuota de Tarjeta.
+
::- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto Principal de la Cuota de Tarjeta.
+
 
+
 
+
27) <span style="color:#0000FF">\u000F</span>CHEQUE TERCEROS <span style="color:#6B8E23"><nowiki><%@format:lpad(format:string(</nowiki></span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Imprime el texto 'CHEQUE TERCEROS ';
+
:Busca en la tabla <tt>operacion</tt> el Cheque de Terceros;
+
:Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal del Cheque de Terceros,
+
::si tiene más de 10 caracteres: los corta,
+
::si tiene menos: completa a izquierda con espacios.
+
 
+
 
+
28) <span style="color:#0000FF">\u000F</span>EFECTIVO <span style="color:#6B8E23"><nowiki><%@format:lpad(format:string(</nowiki></span><span style="color:#800080"><nowiki>(operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Imprime el texto 'EFECTIVO ';
+
Busca en la tabla <tt>operacion</tt> el Billete;
+
:Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal del Billete,
+
::si tiene más de 10 caracteres: los corta,
+
::si tiene menos: completa a izquierda con espacios.
+
 
+
 
+
29) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
 
+
:DC2 = cancela el modo condensado;
+
:Imprime el texto '------------------------------------------'.
+
 
+
 
+
30) <span style="color:#0000FF">\u000F</span>Exento : <span style="color:#6B8E23"><nowiki><%</nowiki><nowiki>=</nowiki></span>concat(<span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#800080"><nowiki>(valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)</span>,' Gravado: ',<span style="color:#6B8E23">format:lpad(format:string(</span><span style="color:#800080"><nowiki>(valor/valoresConcepto[subTipoValorCpto/concepto/id=541]/monto)</nowiki></span><span style="color:#6B8E23">)</span>,10<span style="color:#6B8E23">)</span>)<span style="color:#6B8E23">%></span>
+
 
+
:SI = selecciona modo condensado;
+
:Imprime el texto 'Exento : ';
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime la concatenación de los textos:
+
::- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto Visible en T&S de tipo Total Bruto No Gravado.
+
::- ' Gravado: '
+
::- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto de tipo Total Bruto Gravado POS.
+
 
+
 
+
31) <span style="color:#0000FF">\u000F</span>Vendedor : <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(valor/objUsuarioCreacion/alias)</span>,30<span style="color:#6B8E23">)%></span>
+
  
:SI = selecciona modo condensado;
+
=== Troqueles en Recetas ===
:Imprime el texto 'Vendedor : ';
+
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
:Imprime 30 caracteres del Alias del Usuario Creación de la Factura,
+
::si tiene más de 30 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
  
 +
<pre>
 +
<%=format:avanzarLineas(round(ceiling(cantidadProductos div 4) * espacioTroquel * lineasEnBlancoXcm * 5))%>
 +
</pre>
  
32) <span style="color:#0000FF">\u000F</span>Puesto : <span style="color:#6B8E23"><nowiki><%=format:rpad(</nowiki></span><span style="color:#800080">(operacion/puestoVenta/nombre)</span>,30<span style="color:#6B8E23">)%></span>
+
* <code>ceiling(cantidadProductos div 4)</code>: 1–4 productos → 1 fila, 5–8 → 2 filas, etc.
 +
* <code>espacioTroquel</code>: 1 si imprime troqueles, 0 si no.
 +
* <code>lineasEnBlancoXcm</code>: parámetro <code>ESPACIOS_EN_BLANCO_POR_CENTIMETRO</code> (defecto: 2.5).
 +
* <code>5</code>: los 5 cm que miden los troqueles.
  
:SI = selecciona modo condensado;
+
=== Códigos de Farmacia por Obra Social ===
:Imprime el texto 'Puesto : ';
+
:Busca en la tabla <tt>operacion_valor</tt> la operación de Venta;
+
:Imprime 30 caracteres del Nombre del Puesto de Venta,
+
::si tiene más de 30 caracteres: los corta,
+
::si tiene menos: completa a derecha con espacios.
+
  
 +
<pre>
 +
<%=format:rightpad('Código en la OSP    : ', operacionesValor[valor/tipoValor/id=2]/valor/codigoFarmaciaOS)%>
 +
<%=format:rightpad('Código s/Obra Social: ', obtCodigoFarmaciaOS())%>
 +
<%=format:rightpad('Código en la 1er OS : ', obtCodigoFarmacia1raOS())%>
 +
...
 +
<%=format:rightpad('Código en la 7ma OS : ', obtCodigoFarmacia7maOS())%>
 +
</pre>
  
33) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
=== Número de Autorización por Receta (múltiples tipos) ===
  
:DC2 = cancela el modo condensado;
+
<pre>
:Imprime el texto '------------------------------------------'.
+
<%=format:rightpad('AUTORIZACIO1: ', operacionesValor[valor/tipoValor/id=2 and valor/tipoReceta/id=1]/valor/numeroAutorizacion)%>
 +
<%=format:rightpad('AUTORIZACIO2: ', operacionesValor[valor/tipoValor/id=2 and valor/tipoReceta/id=2]/valor/numeroAutorizacion)%>
 +
<%=format:rightpad('AUTORIZACIO3: ', operacionesValor[valor/tipoValor/id=2 and valor/tipoReceta/id=3]/valor/numeroAutorizacion)%>
 +
</pre>
  
 +
=== Prototipos — Datos Adicionales ===
  
34) <span style="color:#0000FF">\u000F</span>(comprobante sin valor fiscal)
+
XPaths directos:
 +
<pre>
 +
<%=format:rpad(obtNumeroComprobante(),13)
 +
  <%+concat('-', format:string(prototipoDetalle/datoCodificado/nombre), ' : ',
 +
            format:string(dato), ' : ',
 +
            format:string(prototipoDetalle/nombre), ' : ',
 +
            format:string(prototipoDetalle/prototipo/nombre), ' : ',
 +
            format:string(prototipoDatoAdicional/prototipo/nombre), ' : ',
 +
            format:string(prototipoDatoAdicional/numeroLinea))%>%>
 +
</pre>
  
:DC2 = cancela el modo condensado;
+
Usando pseudo-funciones:
:Imprime el texto '(comprobante sin valor fiscal)'.
+
<pre>
 +
<%=format:rpad(obtNumeroComprobante(),13)
 +
  <%+concat('-', format:string(obtNombreDatoCodificado()), ' : ',
 +
            format:string(obtDatoCodificado()), ' : ',
 +
            format:string(obtNombreDePrototipoDetalle()), ' : ',
 +
            format:string(obtNombrePrototipoDePrototipoDetalle()), ' : ',
 +
            format:string(obtNombrePrototipoDePrototipoDatoAdicional()), ' : ',
 +
            format:string(obtNumeroLineaDePrototipoDatoAdicional()))%>%>
 +
</pre>
  
 +
=== Prototipos — Impresión de todos los imprimibles ===
  
35) <span style="color:#0000FF">\u001Bw</span>
+
NombreDato: Dato (cabecera, detalle, pie):
 +
<pre>
 +
<%=format:cpad('dummy',0)<%+concat(format:string(obtNombreDatoCodificado()),': ',format:string(obtDatoCodificado()))%>%>
 +
<%=format:cpad('dummy',0)<%+concat(format:concatNoNull(format:string(obtCabeceraNombreDatoCodificado()),': ',format:string(obtCabeceraDatoCodificado()))%>%>
 +
<%=format:cpad('dummy',0)<%+concat(format:concatNoNull(format:string(obtPieNombreDatoCodificado()),': ',format:string(obtPieDatoCodificado()))%>>
 +
</pre>
  
:ESC 119 = corte total.
+
Solo Dato:
 +
<pre>
 +
<%=format:cpad('dummy',0)<%+concat('',format:string(obtDatoCodificado()))%>%>
 +
<%=format:cpad('dummy',0)<%+concat('',format:string(obtCabeceraDatoCodificado()))%>%>
 +
<%=format:cpad('dummy',0)<%+concat('',format:string(obtPieDatoCodificado())%>%>
 +
</pre>

Revisión actual del 12:21 4 jun 2026

Contenido

1. Sintaxis de Plantilla (Tags)

Delimitadores propios del motor de plantillas. Ninguno requiere el prefijo format:.

Tag Nombre Descripción
/ Línea en blanco Imprime una línea en blanco.
<%= ... %> OperacionValor Devuelve el objeto OperacionValor a imprimir (tabla operacion_valor).
<%& ... %> # operacionesValor Itera sobre OperacionValor.operacion.operacionesValor devolviendo objetos OperacionValor (tabla operacion_valor).
<%@ ... %> # Operacion Devuelve OperacionValor.operacion, clase Operacion (tabla operacion).
<%# ... %> # itemsValor Itera sobre OperacionValor.valor.itemsValor devolviendo objetos ItemValor/ItemFactura/ItemConvenio/etc (tabla item_valor).
<%$ ... %> # valoresConcepto Itera sobre OperacionValor.valor.valoresConcepto devolviendo objetos ValorConcepto (tabla valor_conceptos).
<%+ ... %> # prototipos Itera sobre la colección de Prototipos de los valores o de los ítems.
<%! ... %> ! comentarios Los datos incluidos sirven para orientar al usuario de la plantilla, pero no salen impresos. Ej: <%! ** Modelo 2 ** %>
<< ... >> Eliminación de renglón Si la ausencia del dato a imprimir tiene que eliminar el renglón actual, se encierra la función entre << y >>. Ej: <<%=...%>>

2. Funciones de Dispositivo

Actúan solo si el dispositivo lo soporta. Se usan directamente, sin prefijo format:. Vuelven a las condiciones iniciales al finalizar la línea (salvo inicializar, normalizar, cortepapel y cortetotalpapel).

Función Descripción
codigobarras(objeto) Envía los comandos de configuración previos e imprime el código de barras del valor recibido.
condensado(objeto) Imprime con letra condensada.
cortepapel() Envía un comando de corte parcial de la cinta de papel.
cortetotalpapel() Envía un comando de corte total de la cinta de papel.
cursiva(objeto) Imprime en cursiva (itálica).
inicializar() Envía un comando de inicialización que configura la impresora a sus valores iniciales.
negrita(objeto) Imprime en negrita (enfatizado).
normalizar() Envía un comando de normalización de la letra a sus valores iniciales.
subrayado(objeto) Imprime con letra subrayada.
textodoblealto(objeto) Imprime con letra expandida en alto.
textodobleancho(objeto) Imprime con letra expandida a lo ancho. Ver también format:textodobleancho().

3. Variables y Propiedades de Ítem

Valores accesibles desde el contexto de la plantilla, sin prefijo format:.

Variable / Propiedad Contexto Descripción
cantidadFilas <%= / operacion Cantidad de líneas de productos de un comprobante de venta.
cantidadProductos <%= / operacion Total de productos de un comprobante de venta.
cantidadTroqueles <%# / item_valor Cantidad de líneas con productos cubiertos en una receta. Se usa para calcular el espacio para pegar troqueles.
espacioTroquel operacion/OS Configuración de la Obra Social. Si imprime troqueles devuelve 1, si no devuelve 0.
lineasEnBlancoXcm parámetro de nodo Valor del parámetro ESPACIOS_EN_BLANCO_POR_CENTIMETRO. Si no existe, devuelve 2.5.

Propiedades SinIvaPlantilla (en <%# item_valor %>)

Estos atributos poseen la propiedad de que:

  • Si el comprobante discrimina IVA (Factura o N/C "A"): traen el valor sin el IVA incluido.
  • Si el comprobante no discrimina IVA: devuelven el valor total, con el impuesto acumulado.
Propiedad
descuentoAfiliadoSinIVAPlantilla
descuentoAfiliadoTotalSinIVAPlantilla
descuentoConvenioSinIVAPlantilla
descuentoSinIvaPlantilla
precioUnitarioSinIvaPlantilla
recargoConvenioSinIVAPlantilla
totalSinIvaPlantilla

Métodos asociados:

Método Descripción
obtTotalCubierto1raCoberturaSinIvaPlantilla() Importe cubierto por la 1ra. cobertura, sin IVA (condicional).
obtTotalCubierto2daCoberturaSinIvaPlantilla() Importe cubierto por la 2da. cobertura, sin IVA (condicional).

4. Funciones format:

Implementadas en TemplateUtilVersion1, TemplateUtilVersion2, ..., TemplateUtilVersion5Pdf. Se invocan con el prefijo format: dentro de las expresiones de plantilla.

format:abonaCon(montoEfectivo, abonaCon, n)

Devuelve el primer parámetro mayor que cero, formateado a n decimales.

format:alignRight(titulo, dato) / format:alignRight(titulo, dato, ancho)

Si los valores no son nulos, devuelve la concatenación de los parámetros. Imprime titulo y ajusta dato a la derecha del ancho indicado o al del motor.

alignRight("Total OSP", "50,12") => "Total OSP____________________50,12"

format:alignRightDtoRgo(titulo, dato) / format:alignRightDtoRgo(template, titulo, dato)

  • 2 params: Actúa como alignRight(), pero si dato < 0 inserta un signo "-".
  • 3 params: Igual al anterior, pero agrega un template con términos de reemplazo según reemplazarTexto().

format:alltrim(texto)

Devuelve el texto indicado, borrando los espacios en blanco a izquierda y a derecha.

format:anchopagina()

Devuelve la cantidad de caracteres del ancho de la página seteados en el motor. Se utiliza como complemento de otros métodos para alinear impresiones.

<%@format:centerpad('--','- RECETA -',format:anchopagina())%>

format:ascii(número)

Devuelve el código ASCII del número ingresado, convertido en string.

format:avanzarLineas(value) / format:avanzarLineas(value, cantMaximaLineas)

Agrega la cantidad de líneas en blanco indicada por value (se toma la parte entera). El segundo parámetro limita la cantidad máxima de filas a avanzar.

<%=format:avanzarLineas(cantidadTroqueles*3)%>
<%=format:avanzarLineas(cantidadTroqueles*3, cantMaximaLineas)%>

format:bigdecimal(value)

Devuelve el BigDecimal correspondiente al parámetro indicado, contemplando iterables.

format:cgoAfilCob(total, montoCobertura)

  • Si existe la Cobertura (montoCobertura > 0): devuelve total - montoCobertura.
  • Si no existe (montoCobertura = 0): devuelve cero (no se imprime ningún dato).

format:coalesce(value1, value2)

Devuelve como respuesta el primer parámetro no nulo.

format:coalesceNum(value1, value2)

Devuelve como respuesta el primer parámetro no nulo, en formato numérico.

format:concatenar(nroCampo, strDatos) — forma v1

Concatena los valores del string de datos separados por |, ajusta la longitud del campo indicado por el primer parámetro, hasta completar el Ancho Máximo del motor.

format:concatenar(2, "  1|ADALAT 30|     44,00|   44,00")

format:concatenar(strDatos) — forma v2

Concatena valores separados por |, tomados de a 3, de la forma ajuste<d,i>|longitud|campo.

format:concatenar("d|20|ADALAT 30|i|12|44,00|i|12|44,00")
=> "ADALAT 30__________________44,00_______44,00"

format:concatNoNull(value1, value2)

Si ambos parámetros son no nulos, devuelve un String concatenándolos.

format:cortepapel() — plantillas v5 PDF

Permite el corte de la impresión del PDF en mitad de la plantilla, tal como se produce en impresoras térmicas o matriciales comunes.

<%=format:cortepapel()%>

format:cpad(texto, longitud [, caracter])

Ver format:lpad / rpad / cpad.

format:datoCondicional(condicion, dato)

Si se cumple condicion, devuelve dato; sino, un string vacío.

format:datoCondicional((valor/numeroAutorizacion="4"),'A.')  => "A." o ""

Uso para detectar copia:

<%=format:datoCondicional(format:obtNumeroCopia(parametro[1])!="1",'ES COPIA')%>

format:enlazar(strDatos) — forma v1

Concatena los 2 valores del string separados por |, ajusta el 1er campo al Ancho Máximo del motor.

format:enlazar("A c/Afil. d/aplicar Cob. 1a. :|    40,00")

format:enlazar(valor1, valor2) — forma v2

Si los valores no son nulos, devuelve la concatenación de ambos parámetros ajustada al ancho de página.

format:enlazar("A c/Afil. d/aplicar Cob. 1ra.: ","   40,00")

format:esNulo(value)

Similar al método isNull(), contemplando iterables.

format:imprimirbarcode(valor [, alineacion]) — plantillas v5 PDF

Imprime código de barras con fuente BarCode font. Alineación: 'L'/'I' (izquierda, defecto), 'R'/'D' (derecha), 'C' (centro).

format:imprimircode128(valor [, alineacion]) — plantillas v5 PDF

Imprime código de barras Code128.

<%@format:imprimircode128('1234567890','C')%>

format:imprimircode39h(valor [, alineacion]) — plantillas v5 PDF

Imprime código de barras Code39 Hoch.

format:imprimircode39l(valor [, alineacion]) — plantillas v5 PDF

Imprime código de barras Code39 Logitogo.

format:imprimirCodigoDeBarras(valor [, alineacion]) — plantillas v5 PDF

Selecciona el tipo de código de barras según el parámetro de nodo CODIGO_BARRA_PLANTILLA. Formato del parámetro: CODE39H,R (tipo, alineación). Código por defecto: CODE128,C.

format:imprimirEAN13(valor) — plantillas v5 PDF

Imprime código EAN-13 (troqueles).

<%#format:imprimirEAN13(obtCodigoBarraProducto())%>

format:imprimirfree3of9(valor [, alineacion]) — plantillas v5 PDF

Imprime código de barras Code 3of9.

format:integer(número)

Devuelve la parte entera del número ingresado, convertida en string.

format:irLinea(número)

Avanza la posición a imprimir hasta la línea indicada por el parámetro.

format:leftpad / rightpad / centerpad(dato) — 1 parámetro

Rellena por izquierda / derecha / centra el texto, siempre con espacios en blanco, hasta completar el Ancho Máximo del motor de impresión.

format:leftpad / rightpad / centerpad(titulo, dato) — 2 parámetros

  • Si dato es nulo: no imprime nada.
  • Si dato no es nulo: concatena titulo + dato y rellena/centra hasta el Ancho Máximo del motor.

format:leftpad / rightpad(titulo, dato, número) — 3 parámetros

  • Si dato es nulo: no imprime nada.
  • Si dato no es nulo: concatena titulo + dato y rellena hasta Ancho Máximo menos número.

format:lefttrim(value)

Si el valor no es nulo, recorta los espacios en blanco de la izquierda.

format:lefttrim("    A cargo Afiliado")  =>  "A cargo Afiliado"

format:len(objeto)

Devuelve la longitud del dato ingresado, convertido en string.

format:longDate(fecha)

Devuelve la fecha en el formato longDate definido en application.

format:longDateTime(fecha)

Devuelve la fecha y hora en el formato dd/mm/yyyy hh:mm:ss, definido en application.

format:lowerCase(value)

Devuelve un String con el lower-case del objeto.

format:lowerCase('Valor para Cambiar')  =>  'valor para cambiar'

format:lpad(texto, longitud [, caracter]) / rpad / cpad

Rellena a izquierda (lpad) / derecha (rpad) / centra (cpad) el texto, hasta la longitud indicada.

  • Si longitud < len(texto): corta el texto.
  • Si no se especifica caracter: rellena con espacios.

format:nonull(objeto)

  • Si el valor no es nulo: imprime su valor string.
  • Si el valor es nulo: imprime un string vacío "".

format:noRepetir(nombre, cantidadBase)

En ocasiones se recibe un nombre o descripción repetido varias veces y se desea mostrar uno solo.

  • nombre: el dato a mostrar.
  • cantidadBase: número mínimo de caracteres a mostrar sin repetición (ej: 5).

format:obtCaracterCopia(parametro[1])

Registra el carácter de Original/Duplicado/etc. del documento impreso dentro de la secuencia de copias.

<%=format:rightpad('ES COMPROBANTE : ',format:obtCaracterCopia(parametro[1]))%>
=> ES COMPROBANTE : ORIGINAL
=> ES COMPROBANTE : DUPLICADO
=> ES COMPROBANTE : TRIPLICADO

format:obtcodigo(objeto)

Formatea el objeto (codificación del comprobante 0001-0001234) para imprimir como Código de Barras.

format:obtcodigosinguion(objeto)

Igual que obtcodigo pero sin el guión separador.

format:obtNumeroCopia(parametro[1])

Registra el número de copia del documento impreso dentro de la secuencia de copias.

<%=format:rightpad('COPIA NUMERO   : ',format:obtNumeroCopia(parametro[1]))%>
=> COPIA NUMERO   : 1 / 2 / 3

format:obtTipoComprobante(tipoOperacion)

Dado el tipo de operación, devuelve un string con el respectivo tipo de comprobante.

format:obtTipoComprobante(obtTipoOperacion())  =>  "FACTURA", "TICKET", etc.

format:param(value)

Devuelve un String con el valor de un parámetro general, dado su nombre.

format:param('IMPRIMIR_DATOS_PRESCRIPCION')  =>  'true' o 'false'

format:reemplazarParametro(linea, args[])

Reemplaza los parámetros de linea por los métodos indicados en args. El render() (v4 en adelante) puede recibir una lista de parámetros desde el programa.

args[1] = "separador()";
args[2] = "cortepapel()";

<%=format:parametro[2]%>  =>  <%=format:separador()%>

format:reemplazarTexto(titulo, template)

Devuelve un texto donde se reemplazó el titulo de acuerdo al patrón template. Los patrones se separan por | en pares buscar|reemplazar.

titulo:   "RECARGO POR FORMA DE PAGO EFECTIVO POS"
template: "DESC.||RECARGO|DIF.PRC.| POR|POR|FORMA||DE || PAGO|PAGO EN|POS||*|"
resultado: "DIF.PRC.POR PAGO EN EFECTIVO"

format:redondear(value, decimales, modo)

Devuelve un String del parámetro value. Si es numérico, aplica el redondeo indicado.

value=123.6977887, decimales=0, modo="up"
format:redondear(value, 0, "up")  =>  "124"

format:righttrim(value)

Si el valor no es nulo, recorta los espacios en blanco de la derecha.

format:righttrim("A cargo Afiliado      ")  =>  "A cargo Afiliado"

format:roundingUP(value)

Devuelve un String del parámetro value. Si es numérico, devuelve el entero mayor (redondeo hacia arriba).

value=5895.195741
format:roundingUP(value)  =>  "5.896"

format:semianchopagina()

Devuelve la mitad de los caracteres del ancho de página del motor. Se usa como complemento para alinear impresiones en doble ancho.

<%@format:textodobleancho(format:separador(obtNombreObraSocial(),'- RECETA -',format:semianchopagina()))%>

format:separador() — sin parámetros

Imprime una línea separadora de caracteres ---...--- hasta el Ancho Máximo del motor.

format:separador(dato) — 1 parámetro

Imprime el separador ---...--- solo si dato no es nulo.

format:separador(dato, titulo) — 2 parámetros

Imprime el separador con titulo centrado, solo si dato no es nulo.

<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre,'- BONO -')%>
=>  ---------- BONO ----------

format:separador(dato, titulo, anchoTexto) — 3 parámetros

Igual al anterior, pero el ancho total lo define anchoTexto en lugar del motor.

<%@format:separador(operacionesValor[valor/tipoValor/id=2]/valor/entidad/nombre,'- RECETA -',24)%>
=>  -------- RECETA --------

format:separadorDoble()

Imprime una línea separadora de caracteres ===...=== hasta el Ancho Máximo del motor.

format:shortDate(fecha)

Devuelve la fecha en el formato shortDate definido en application.

format:string(objeto)

Convierte cualquier tipo de dato en string.

format:stringData(value)

Devuelve el parámetro sin puntos ".".

format:stringData("1.235.459,78")  =>  "1235459,78"

format:stringDataNoVacio(value)

Devuelve el parámetro sin puntos ".". Si value es null, devuelve "0,00".

format:stringNoVacio(número)

Devuelve el número ingresado convertido en string. Si el valor es nulo, devuelve "0,00".

format:stringNoVacioDto(número)

Devuelve el número ingresado convertido en string. Si el valor es nulo, devuelve "-0,00".

format:stringtransf(objeto1, objeto2, objeto3)

Devuelve objeto1, donde las ocurrencias de objeto2 son reemplazadas por objeto3. Internamente usa StringUtils.replace().

format:textodobleancho(objeto) — plantillas v5 PDF

Imprime con letra expandida a lo ancho. Equivalente al comando de dispositivo textodobleancho() pero usable como wrapper en plantillas PDF.

<%@format:textodobleancho(format:separador(obtNombreObraSocial(),'- RECETA -',format:semianchopagina()))%>

format:unirtodo(titulo, subtitulo, dato) / format:unirtodo(titulo, subtitulo, dato, ancho)

Si los valores no son nulos, devuelve la concatenación de los parámetros. Ajusta titulo + dato al ancho indicado o al del motor.

format:unirtodo(dato1, dato2) — 2 parámetros

Devuelve la concatenación incondicional de ambos parámetros.

format:upperCase(value)

Devuelve un String con el upper-case del objeto.

format:upperCase('Valor para Cambiar')  =>  'VALOR PARA CAMBIAR'

format:vuelto(montoEfectivo, abonaCon, n)

Devuelve (abonaCon - montoEfectivo) o cero, formateado a n decimales.


5. Pseudo-métodos obt*() — TemplateUtil.java

Organizados por entidad. La columna Función indica el tag de contexto, Tabla la tabla de origen y Atributo el XPath equivalente.

Afiliado

Método Función Tabla Atributo
obtNombreAfiliado() <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado
obtNumeroAfiliado() <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado

Bono

Método Función Tabla Atributo
obtAcumuladoBono() <%@ operacion operacionesValor[valor/tipoValor/id=1]/valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto
obtNombreBono() <%@ operacion operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre
obtPuntajeBono() <%@ operacion operacionesValor[valor/tipoValor/id=1]/valor/valoresConcepto[subTipoValorCpto/concepto/id=500 and subTipoValorCpto/visiblePos=1]/monto

Cheque / CH Terceros

Método Función Tabla Atributo
obtDescuentoChequeTerceros() <%& operacionesValor operacionesValor[valor/tipoValor/id=5 and valor/anulacion!='A']/valor/descuentoFPPlantilla
obtImporteFormaPagoChequeTerceros() <%@ operacion operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal
obtImporteFormaPagoChequeTercerosVenta() <%& operacionesValor sum(valor[tipoValor/id=5 and anulacion!='A']/montoPrincipal)
obtNombreFormaPagoChequeTerceros() <%= operacion_valor valor[tipoValor/id=5]/entidad/nombre
obtRecargoChequeTerceros() <%& operacionesValor operacionesValor[valor/tipoValor/id=5 and valor/anulacion!='A']/valor/recargoFPPlantilla

Cliente

Método Función Tabla Atributo
obtApellidoCliente() <%= operacion_valor valor/entidad/apellido
obtCodigoCliente() <%= operacion_valor valor/entidad/codigo
obtCuitCliente() <%= operacion_valor valor/entidad/cuit
obtDireccion1Cliente() <%= operacion_valor valor/entidad/direcciones[1]
obtEntreCallesCliente() <%= operacion_valor valor/entidad/entreCalle
obtNombreCliente() <%= operacion_valor valor/entidad/nombre
obtObservacionCliente() <%= operacion_valor valor/entidad/observacion
obtObservacionesCliente() <%= operacion_valor valor/entidad/observaciones
obtObservacionesCliente1raLinea() <%= operacion_valor valor/entidad/observacionesCliente1raLinea
obtObservacionesCliente2daLinea() <%= operacion_valor valor/entidad/observacionesCliente2daLinea
obtObservacionesCliente3raLinea() <%= operacion_valor valor/entidad/observacionesCliente3raLinea
obtRazonSocialCliente() <%= operacion_valor valor/entidad/razonSocial
obtSituacionIvaCliente() <%= operacion_valor valor/entidad/objSituacionIVA/nombre
obtTelefonoCliente() <%= operacion_valor valor/entidad/telefonosConcatenados

Cliente (eventual)

Método Función Tabla Atributo
obtDocumentoClienteEven() <%= operacion_valor valor/documentoCliente
obtDomicilioClienteEven() <%= operacion_valor valor/domicilioCliente
obtNombreClienteEven() <%= operacion_valor valor/nombreCliente

Cliente (secundario)

Método Función Tabla Atributo
obtNombreClienteSecundario() <%= operacion_valor valor/entidadSecundaria/nombre

Cliente Envío

Método Función Tabla Atributo
obtDireccionEnvio() <%= operacion_valor valor/direccionSeleccionada
obtObservacionEnvio() <%= operacion_valor valor/observaciones
obtTelefonoEnvio() <%= operacion_valor valor/telefonoSeleccionado

Convenio

Método Función Tabla Atributo
obtDescuentoConvenio() <%& operacionesValor operacionesValor[valor/tipoValor/id=211 and valor/anulacion!='A']/valor/descuentoFPPlantilla
obtDtoGeneralConvenio() <%@ operacion operacionesValor[valor/tipoValor/id=211]/valor/descuentoGeneral
obtImporteFormaPagoConvenio() <%= operacion_valor sum(valor[tipoValor/id=211]/montoPrincipal)
obtImporteFormaPagoConvenioVenta() <%& operacionesValor valor[tipoValor/id=211 and anulacion!='A']/montoPrincipal
obtNombreFormaPagoConvenio() <%= operacion_valor valor[tipoValor/id=211]/entidad/nombre
obtRecargoConvenio() <%& operacionesValor operacionesValor[valor/tipoValor/id=211 and valor/anulacion!='A']/valor/recargoFPPlantilla

Cuenta Corriente

Método Función Tabla Atributo
obtDescuentoCtaCte() <%@ operacion operacionesValor[valor/tipoValor/id=22 and valor/anulacion!='A']/valor/descuentoFPPlantilla
obtDtoGeneralCtaCte() <%@ operacion operacionesValor[valor/tipoValor/id=22]/valor/descuentoGeneral
obtImporteFormaPagoCtaCte() <%@ operacion operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal
obtImporteFormaPagoCtaCteVenta() <%@ operacion operacionesValor[valor/tipoValor/id=22 and valor/anulacion!='A']/valor/montoPrincipal
obtRecargoCtaCte() <%@ operacion operacionesValor[valor/tipoValor/id=22 and valor/anulacion!='A']/valor/recargoFPPlantilla
obtSaldoActual() <%@ operacion operacionesValor/saldoActualComprobante
obtSaldoActualMasVenta() <%@ operacion operacionesValor/saldoActualMasVenta

Cuota Cuenta Corriente

Método Función Tabla Atributo
obtDescuentoCuotasCtaCte() <%& operacionesValor valor[tipoValor/id=21 and anulacion!='A']/valor/descuentoFPPlantilla
obtDtoGeneralCuotaCtaCte() <%@ operacion operacionesValor[valor/tipoValor/id=21]/valor/descuentoGeneral
obtImporteFormaPagoCuotaCteCte() <%@ operacion operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal
obtImporteFormaPagoCuotaCteCteVenta() <%& operacionesValor sum(valor[tipoValor/id=21 and anulacion!='A']/montoPrincipal)
obtNombreFormaPagoCuotaCteCte() <%= operacion_valor valor[tipoValor/id=21]/entidad/nombre
obtRecargoCuotasCtaCte() <%& operacionesValor valor[tipoValor/id=21 and anulacion!='A']/valor/recargoFPPlantilla

Efectivo

Método Función Tabla Atributo
obtDescuentoEfectivo() <%@ operacion operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/descuentoFPPlantilla
obtImporteFormaPagoEfectivo() <%@ operacion operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal
obtImporteFormaPagoEfectivoVenta() <%@ operacion operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/montoPrincipal
obtRecargoEfectivo() <%@ operacion operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/recargoFPPlantilla

Factura Electrónica (Referencias Electrónicas)

Método Función Tabla Atributo
obtFechaAdicional() <%= operacion_valor valor/fechaAdicional
obtFechaReferenciaElectronica() <%= operacion_valor valor/fechaAutorizacion
obtFechaVencimiento() <%= operacion_valor valor/fechaVencimiento
obtFormaAutorizacionFE() <%= operacion_valor valor/formaAutorizacion
obtMarcaCAEA() <%= operacion_valor valor/marcaCAEA
obtReferenciaElectronica() <%= operacion_valor valor/numeroAutorizacion

Ejemplo de uso para C.A.E. / C.A.E.A.:

<%=format:separador(obtReferenciaElectronica(),'--- REFERENCIA ELECTRONICA ---')%>
<%=concat(format:enlazar(concat('C.A.E.',format:string(obtMarcaCAEA())),': ',
          format:rpad(obtReferenciaElectronica(),15),25),
          format:rightpad('Vto.:',format:rpad(format:shortDate(obtFechaAdicional()),11)))%>
<%=format:separador()%>

Farmacia (Nodo)

Método Función Tabla Atributo
obtCuitFarmacia() <%= operacion_valor valor/nodoCreacion/cuit
obtDireccion0Farmacia() <%= operacion_valor valor/nodoCreacion/direcciones[0]
obtDireccion1Farmacia() <%= operacion_valor valor/nodoCreacion/direcciones[1]
obtFechaInicioActividades() <%= operacion_valor valor/nodoCreacion/inicioDeActividades
obtIngresosBrutosFarmacia() <%= operacion_valor valor/nodoCreacion/ingresosBrutos
obtRazonSocialFarmacia() <%= operacion_valor valor/nodoCreacion/razonSocial
obtRazonSocialFarmaciaLinea2() <%= operacion_valor valor/nodoCreacion/razonSocialLinea2
obtSituacionIvaFarmacia() <%= operacion_valor valor/nodoCreacion/objSituacionIVA/nombre
obtTelefono0Farmacia() <%= operacion_valor valor/nodoCreacion/telefonos[0]/numero
obtTelefono1Farmacia() <%= operacion_valor valor/nodoCreacion/telefonos[1]/numero
obtTelefonoFarmacia() <%= operacion_valor valor/nodoCreacion/telefonosConcatenados

Producto / Ítem

Método Función Tabla Atributo
obtCodigoBarraProducto() <%# item_valor producto/codigoBarra
obtNombreProducto() <%# item_valor producto/nombreCorto

Descuentos de ítem (propiedades directas, sin método):

Propiedad Descripción
descuento Descuento de ítem
descuentoAfiliado Descuento Automático/Forzado
descuentoGeneral Descuento General (manual)

Prototipos / Datos Adicionales

Método / Propiedad Contexto Descripción
obtCabeceraDatoCodificado() <%+ Dato codificado de prototipos de cabecera
obtCabeceraNombreDatoCodificado() <%+ Nombre del dato codificado de prototipos de cabecera
obtDatoCodificado() <%+ Dato codificado del prototipo (dato)
obtNombreDatoCodificado() <%+ prototipoDetalle/datoCodificado/nombre
obtNombreDePrototipoDetalle() <%+ prototipoDetalle/nombre
obtNombrePrototipoDePrototipoDatoAdicional() <%+ prototipoDatoAdicional/prototipo/nombre
obtNombrePrototipoDePrototipoDetalle() <%+ prototipoDetalle/prototipo/nombre
obtNumeroLineaDePrototipoDatoAdicional() <%+ prototipoDatoAdicional/numeroLinea
obtPieDatoCodificado() <%+ Dato codificado de prototipos de pie de página
obtPieNombreDatoCodificado() <%+ Nombre del dato codificado de prototipos de pie de página

Puesto de Venta

Método Función Tabla Atributo
obtPuestoVenta() <%= operacion_valor operacion/puestoVenta/nombre

Receta / Cobertura / Obra Social

Método Función Tabla Atributo
obtAutorizacionObraSocial() <%= operacion_valor operacionesValor[valor/tipoValor/id=2]/valor/numeroAutorizacion
obtCodigoFarmaciaOS() <%= operacion_valor
obtCodigoFarmacia1raOS()obtCodigoFarmacia7maOS() <%= operacion_valor
obtDtoGeneralBono() <%@ operacion operacionesValor[valor/tipoValor/id=1]/valor/descuentoGeneral
obtDtoGeneralReceta() <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/descuentoGeneral
obtFechaReceta() <%= operacion_valor valor[tipoValor/id=2]/fechaEmision
obtImporteCobertura() <%& operacionesValor valor[tipoValor/id=2 and anulacion!='A']/montoPrincipal
obtImporteFormaPagoObraSocial() <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal
obtImporteReceta() <%& operacionesValor valor[tipoValor/id=2 and anulacion!='A']/itemsConvenio/descuentoAfiliado
obtNombre1raCobertura() <%# item_valor itemConvenio1raCobertura/convenio/entidad/nombre
obtNombre1raObraSocial() <%# item_valor itemConvenio1raCobertura/convenio/obraSocial/nombre
obtNombre2daCobertura() <%# item_valor itemConvenio2daCobertura/convenio/entidad/nombre
obtNombre2daObraSocial() <%# item_valor itemConvenio2daCobertura/convenio/obraSocial/nombre
obtNombre3raCobertura() <%# item_valor itemConvenio3raCobertura/convenio/entidad/nombre
obtNombre3raObraSocial() <%# item_valor itemConvenio3raCobertura/convenio/obraSocial/nombre
obtNombre4taObraSocial() <%# item_valor itemConvenio4taCobertura/convenio/obraSocial/nombre
obtNombre5taObraSocial() <%# item_valor itemConvenio5taCobertura/convenio/obraSocial/nombre
obtNombre6taObraSocial() <%# item_valor itemConvenio6taCobertura/convenio/obraSocial/nombre
obtNombre7maObraSocial() <%# item_valor itemConvenio7maCobertura/convenio/obraSocial/nombre
obtNombreCobertura() <%= operacion_valor valor[tipoValor/id=2]/entidad/obraSocial/nombreCorto
obtNombreLargoCobertura() <%= operacion_valor valor[tipoValor/id=2]/entidad/nombre
obtNombreObraSocial() <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/entidad/nombre
obtNumeroCobertura() <%= operacion_valor .[valor/tipoValor/id=2]/numeroCobertura
obtNumeroCoberturaVenta() <%& operacionesValor .[valor/tipoValor/id=2 and valor/anulacion!='A']/numeroCobertura
obtNumeroReceta() <%= operacion_valor valor[tipoValor/id=2]/codificacion
obtPorcentaje1raCobertura() <%# item_valor itemConvenio1raCobertura/porcentajeCobertura
obtPorcentaje2daCobertura() <%# item_valor itemConvenio2daCobertura/porcentajeCobertura
obtPorcentaje3raCobertura() <%# item_valor itemConvenio3raCobertura/porcentajeCobertura
obtRecetaImporteDescuento() <%# item_valor itemsReceta/descuento
obtRecetaPorcentajeCobertura() <%# item_valor itemsReceta/porcentajeCobertura
obtRecetaPrecioUnitario() <%# item_valor producto/codigoBarra
obtSaldoAfiliado() <%= operacion_valor .[valor/tipoValor/id=2]/saldoAfiliado
obtSaldoAfiliadoVenta() <%& operacionesValor .[valor/tipoValor/id=2 and valor/anulacion!='A']/saldoAfiliadoSinDto
obtSumaMontoTotalCubierto() <%# item_valor sum(itemsReceta/montoTotalCubierto)
obtTotalCubierto1raCobertura() <%# item_valor itemConvenio1raCobertura/montoTotalCubierto
obtTotalCubierto2daCobertura() <%# item_valor itemConvenio2daCobertura/montoTotalCubierto
obtTotalCubierto3raCobertura() <%# item_valor itemConvenio3raCobertura/montoTotalCubierto

Convenios de Ítem

Método Función Tabla Atributo
obtNombre1erConvenio() <%# item_valor itemConvenio1/valor/subTipoValor/nombre
obtNombre2doConvenio() <%# item_valor itemConvenio2/valor/subTipoValor/nombre
obtNombre3erConvenio() <%# item_valor itemConvenio3/valor/subTipoValor/nombre
obtNombre4toConvenio() <%# item_valor itemConvenio4/valor/subTipoValor/nombre
obtNombre5toConvenio() <%# item_valor itemConvenio5/valor/subTipoValor/nombre
obtSumaDescuentos1erConvenio() <%# item_valor itemConvenio1/sumaDescuentosSinIvaPlantilla
obtSumaDescuentos2doConvenio() <%# item_valor itemConvenio2/sumaDescuentosSinIvaPlantilla
obtSumaDescuentos3erConvenio() <%# item_valor itemConvenio3/sumaDescuentosSinIvaPlantilla
obtSumaDescuentos4toConvenio() <%# item_valor itemConvenio4/sumaDescuentosSinIvaPlantilla
obtSumaDescuentos5toConvenio() <%# item_valor itemConvenio5/sumaDescuentosSinIvaPlantilla
obtSumaRecargos1erConvenio() <%# item_valor itemConvenio1/rgoConvenioSinIVAPlantilla
obtSumaRecargos2doConvenio() <%# item_valor itemConvenio2/rgoConvenioSinIVAPlantilla
obtSumaRecargos3erConvenio() <%# item_valor itemConvenio3/rgoConvenioSinIVAPlantilla
obtSumaRecargos4toConvenio() <%# item_valor itemConvenio4/rgoConvenioSinIVAPlantilla
obtSumaRecargos5toConvenio() <%# item_valor itemConvenio5/rgoConvenioSinIVAPlantilla

Receta Digital — Datos Originales de Prescripción

Propiedad / Método Contexto Descripción
cantidadPrescripta <%# item_valor Cantidad prescripta por el profesional
productoPrescrito/descripcion <%# item_valor Nombre del producto prescrito (Receta Digital)
prescripcionMedica <%# item_valor Nombre de la droga prescrita
descripcionRecetaDigital <%# item_valor Descripción combinada (alias de acceso)

Ejemplo de uso con impresión opcional (controlada por parámetro):

<%#concat(
  format:datoCondicional(
    (format:param('IMPRIMIR_DATOS_PRESCRIPCION')='true') and
    (format:coalesce(productoPrescrito/descripcion,prescripcionMedica)!=),
    format:concatenar(2,concat(
      format:rpad(format:integer(cantidadPrescripta),2),'|',
      format:rpad(format:coalesce(productoPrescrito/descripcion,prescripcionMedica),30)
    ))
  )
)%>

Recargos y Descuentos de Tarjeta (DtoRgo)

Método Descripción
obtDescuentoTarjeta() Descuento por forma de pago Tarjeta en Venta
obtEntidadDtoRgoTarjeta() Nombre de la entidad para Recargos/Descuentos de Tarjeta (v2)
obtNombreDtoRgoTarjeta() Nombre descriptivo para Recargos/Descuentos de Tarjeta (v1)
obtNombreFormaPagoTarjeta() Nombre de la forma de pago de la Tarjeta
obtRecargoTarjeta() Recargo por forma de pago Tarjeta en Venta

Tarjeta

Método Función Tabla Atributo
obtDtoGeneralTarjeta() <%@ operacion operacionesValor[valor/tipoValor/id=9]/valor/descuentoGeneral
obtImporteFormaPagoTarjeta() <%= operacion_valor sum(valor[tipoValor/id=9]/montoPrincipal)
obtImporteFormaPagoTarjetaVenta() <%& operacionesValor .[valor/tipoValor/id=9 and valor/anulacion!='A']/montoPrincipal
obtNombreFormaPagoTarjeta() <%= operacion_valor valor[tipoValor/id=9]/entidadSaldable/nombre
obtNombrePlanPagoTarjeta() <%& operacionesValor .[valor/tipoValor/id=9]/planPago/nombre

Valor / Comprobante

Método Función Tabla Atributo
obtDtoGeneral() <%@ operacion comprobante/descuentoGeneral
obtDtoGeneralChequePropio() <%@ operacion operacionesValor[valor/tipoValor/id=4]/valor/descuentoGeneral
obtFechaCreacion() <%= operacion_valor valor/fechaCreacion
obtFechaEmision() <%= operacion_valor valor/fechaEmision
obtImpuestosProductosExentos() <%= operacion_valor valor/valoresConcepto[contains('1703 1783',subTipoValorCpto/id) and valor/letraFactura='A']/monto
obtImpuestosProductosIVA1050() <%= operacion_valor valor/valoresConcepto[contains('1705 1785',subTipoValorCpto/id) and valor/letraFactura='A']/monto
obtImpuestosProductosIVA2100() <%= operacion_valor valor/valoresConcepto[contains('1706 1786',subTipoValorCpto/id) and valor/letraFactura='A']/monto
obtImpuestosProductosIVA2700() <%= operacion_valor valor/valoresConcepto[contains('2287 2284',subTipoValorCpto/id) and valor/letraFactura='A']/monto
obtLetraFactura() <%= operacion_valor valor/letraFactura
obtNumeroComprobante() <%= operacion_valor valor/codificacion
obtPercepcionesIngresosBrutos() <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=516 and subTipoValorCpto/visiblePos=1]/monto
obtPrecioFinal() <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto
obtPrecioFinalTodoCte() <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto
obtTipoOperacion() <%= operacion_valor operacion/tipoOperacion
obtTotalExento() <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto
obtTotalGravado() <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=541]/monto
obtTotalPercepcionesIIBB() <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=516 and subTipoValorCpto/visiblePos=1]/monto
obtValorCteFechaEmision() <%= operacion_valor valor/comprobante/fechaEmision
obtValorCteNumero() <%= operacion_valor valor/comprobante/codificacion
obtValorCteVendedor() <%= operacion_valor valor/comprobante/objusuariocreacion/alias
obtValorMontoPrincipal() <%= operacion_valor valor/montoPrincipal

Vendedor

Método Función Tabla Atributo
obtVendedor() <%= operacion_valor valor/objUsuarioCreacion/alias

Liquidaciones (Plantillas v4)

Sin método obt* definido — acceso directo por XPath.

Atributo Función Tabla Descripción
entidadLiquidacion <%@ operacion_valor Nombre del cliente del recibo
fechaLiquidacion <%@ operacion_valor Fecha de liquidación
codificacion <%* item_liquidacion Número del comprobante
entidad <%* item_liquidacion Nombre del cliente
fechaEmision <%* item_liquidacion Fecha de emisión del comprobante
fechaVencimiento <%* item_liquidacion Fecha de vencimiento de la cuota
monto <%* item_liquidacion Importe de la cuota
subTipoValorCpto/nombre <%$ conceptos Concepto total de liquidación
monto <%$ conceptos Importe total de liquidación

6. Funciones JXPath

Funciones XPath estándar disponibles en las expresiones de plantilla.

Función Descripción
abs(object) Devuelve el valor absoluto del argumento numérico. (Plantillas v4)
concat(string, string, ...) Devuelve la concatenación de sus argumentos.
sum(node-set) Devuelve la suma de los valores de los nodos del set, convertidos a número.

7. Tabla de Caracteres Especiales

Para la obtención de la sintaxis completa de comandos, referirse a los manuales de cada modelo de impresora.

Modelos Hex / Unicode ASCII Descripción
Bematech, Epson \u001B ESC Inicio de comando (protocolo)
Bematech, Epson \u001B@ ESC @ Inicializa la impresora
Bematech \u001Btn ESC t n Selecciona página de código: n=2 (850), n=3 (437), n=4 (860), n=5 (858)
Bematech \u001Bln ESC l n Programa el margen izquierdo para la columna n
Epson \u001Bl ESC l Posiciona margen izquierdo
Bematech, Epson \u000E SO Selecciona expandido por una línea
Bematech \u0014 DC4 Cancela modo expandido de una línea
Bematech, Epson \u000F SI Selecciona modo condensado
Bematech, Epson \u0012 DC2 Cancela modo condensado
Bematech \u001BE ESC SO Selecciona expandido por una línea
Bematech \u001BF ESC SI Selecciona modo condensado
Epson \u001BF ESC F Cancela modo enfatizado
Bematech, Epson \u001Bm ESC m Realiza un corte parcial de papel
Epson \u001BM ESC M Selecciona el ancho elite
Epson \u001B0 ESC 0 Selecciona 1/8 de pulgada de espacio entre líneas
Epson \u001B- ESC - Selecciona/cancela modo subrayado
Epson \u001BW ESC W Selecciona/cancela el modo expandido
Hasar, Epson \u001B!\u0008 ESC ! 8 Selecciona modo enfatizado

8. Ejemplos y Prototipos

Ajuste de renglones condicionales

Para que una línea no se imprima si el dato es nulo, colocar el contenido entre << y >>:

Fuera del Concat Dentro del Concat
<<%@concat('Afil.: <', format:rpad(...,25), '>')%>> <<%@concat('--- Afil.: <', format:rpad(...,25), '>')%>>

Troqueles en Recetas

<%=format:avanzarLineas(round(ceiling(cantidadProductos div 4) * espacioTroquel * lineasEnBlancoXcm * 5))%>
  • ceiling(cantidadProductos div 4): 1–4 productos → 1 fila, 5–8 → 2 filas, etc.
  • espacioTroquel: 1 si imprime troqueles, 0 si no.
  • lineasEnBlancoXcm: parámetro ESPACIOS_EN_BLANCO_POR_CENTIMETRO (defecto: 2.5).
  • 5: los 5 cm que miden los troqueles.

Códigos de Farmacia por Obra Social

<%=format:rightpad('Código en la OSP    : ', operacionesValor[valor/tipoValor/id=2]/valor/codigoFarmaciaOS)%>
<%=format:rightpad('Código s/Obra Social: ', obtCodigoFarmaciaOS())%>
<%=format:rightpad('Código en la 1er OS : ', obtCodigoFarmacia1raOS())%>
...
<%=format:rightpad('Código en la 7ma OS : ', obtCodigoFarmacia7maOS())%>

Número de Autorización por Receta (múltiples tipos)

<%=format:rightpad('AUTORIZACIO1: ', operacionesValor[valor/tipoValor/id=2 and valor/tipoReceta/id=1]/valor/numeroAutorizacion)%>
<%=format:rightpad('AUTORIZACIO2: ', operacionesValor[valor/tipoValor/id=2 and valor/tipoReceta/id=2]/valor/numeroAutorizacion)%>
<%=format:rightpad('AUTORIZACIO3: ', operacionesValor[valor/tipoValor/id=2 and valor/tipoReceta/id=3]/valor/numeroAutorizacion)%>

Prototipos — Datos Adicionales

XPaths directos:

<%=format:rpad(obtNumeroComprobante(),13)
  <%+concat('-', format:string(prototipoDetalle/datoCodificado/nombre), ' : ',
            format:string(dato), ' : ',
            format:string(prototipoDetalle/nombre), ' : ',
            format:string(prototipoDetalle/prototipo/nombre), ' : ',
            format:string(prototipoDatoAdicional/prototipo/nombre), ' : ',
            format:string(prototipoDatoAdicional/numeroLinea))%>%>

Usando pseudo-funciones:

<%=format:rpad(obtNumeroComprobante(),13)
  <%+concat('-', format:string(obtNombreDatoCodificado()), ' : ',
            format:string(obtDatoCodificado()), ' : ',
            format:string(obtNombreDePrototipoDetalle()), ' : ',
            format:string(obtNombrePrototipoDePrototipoDetalle()), ' : ',
            format:string(obtNombrePrototipoDePrototipoDatoAdicional()), ' : ',
            format:string(obtNumeroLineaDePrototipoDatoAdicional()))%>%>

Prototipos — Impresión de todos los imprimibles

NombreDato: Dato (cabecera, detalle, pie):

<%=format:cpad('dummy',0)<%+concat(format:string(obtNombreDatoCodificado()),': ',format:string(obtDatoCodificado()))%>%>
<%=format:cpad('dummy',0)<%+concat(format:concatNoNull(format:string(obtCabeceraNombreDatoCodificado()),': ',format:string(obtCabeceraDatoCodificado()))%>%>
<%=format:cpad('dummy',0)<%+concat(format:concatNoNull(format:string(obtPieNombreDatoCodificado()),': ',format:string(obtPieDatoCodificado()))%>>

Solo Dato:

<%=format:cpad('dummy',0)<%+concat('',format:string(obtDatoCodificado()))%>%>
<%=format:cpad('dummy',0)<%+concat('',format:string(obtCabeceraDatoCodificado()))%>%>
<%=format:cpad('dummy',0)<%+concat('',format:string(obtPieDatoCodificado())%>%>

Funciones propias[editar]

  • / = imprime línea en blanco.


  • <%= --------- %>
OperacionValor: Devuelve el objeto OperacionValor a imprimir (tabla operacion_valor).


  • <%& --------- %> #
operacionesValor: Itera sobre la colección OperacionValor.operacion.operacionesValor devolviendo objetos OperacionValor (tabla operacion_valor).


  • <%@ --------- %> #
Operacion: Devuelve el objeto OperacionValor.operacion, clase Operacion (tabla operacion).


  • <%# --------- %> #
itemsValor: Itera sobre la colección OperacionValor.valor.itemsValor devolviendo objetos ItemValor/ItemFactura/ItemConvenio/etc (tabla item_valor).


  • <%$ --------- %> #
valoresConcepto: Itera sobre la colección OperacionValor.valor.valoresConcepto devolviendo objetos ValorConcepto (tabla valor_conceptos).


  • <%! ** Modelo 2 ** %> !
comentarios: Los datos incluídos sirven para orientar al usuario de la plantilla, pero no salen impresos.


  • format: lpad / rpad / cpad (texto a imprimir, longitud a rellenar, [caracter de relleno])
rellena a izquierda / derecha / centra texto.
-si la longitud a rellenar es menor que la longitud del texto a imprimir, entonces corta el texto.
-si no se especifica ningún caracter de relleno, entonces completa con espacios.


  • format: alltrim (texto a imprimir)
-devuelve el texto indicado, borrando los espacios en blanco a izquierda y a derecha.


  • format: longDate (fecha)
-devuelve la fecha en el formato longDate definido en application.


  • format: shortDate (fecha)
-devuelve la fecha en el formato shortDate definido en application.


  • format: longDateTime (fecha)
-devuelve la fecha y la hora en el formato dd/mm/yyyy hh:mm:ss, definido en application.


  • format: string (objeto)
-convierte cualquier tipo de dato en string.


  • format: integer (número)
-devuelve la parte entera del número ingresado, convertido en string.


  • format: len (objeto)
-devuelve la longitud del dato ingresado, convertido en string.


  • format: ascii (número)
-devuelve el código ASCii del número ingresado, convertido en string.


  • format: stringNoVacio (número)
-devuelve el número ingresado, convertido en string.
-si el valor es nulo, devuelve el texto 0,00.


  • format: stringNoVacioDto (número)
-devuelve el número ingresado, convertido en string.
-si el valor es nulo, devuelve el texto -0,00.


  • format: leftpad / rightpad / centerpad (dato a imprimir)
-rellena por izquierda / derecha / centra el texto del dato ingresado,
siempre con espacios en blanco,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.


  • format: leftpad / rightpad / centerpad (título, dato)
-si el valor de dato es nulo,
-no imprime texto alguno.
-si el valor de dato no es nulo,
-concatena los valores título y dato,
-rellena por izquierda / derecha / centra el texto completo,
siempre con espacios en blanco,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.


  • format: leftpad / rightpad (título, dato, número)
-si el valor de dato es nulo,
-no imprime texto alguno.
-si el valor de dato no es nulo,
-concatena los valores título y dato,
-rellena por izquierda / derecha el texto completo,
siempre con espacios en blanco,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión menos el valor indicado en el parámetro número.


  • format: concatenar (número de campo, string de datos serializados)
-concatena los valores del string de datos separados por |,
ajusta la longitud del campo indicado por el primer parámetro,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.
-por ejemplo:
format:concatenar(2, " 1|ADALAT 30| 44,00| 44,00")


  • format: enlazar (string de 2 datos serializados)
-concatena los 2 valores del string de datos separados por |,
ajusta la longitud del 1er. campo hasta completar la cantidad de caracteres
indicada como Ancho Máximo en el motor de impresión.
-por ejemplo:
format:enlazar("A c/Afil. d/aplicar Cob. 1a. :| 40,00")


  • format: separador ()
-imprime una línea separadora formada por caracteres --------------
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.


  • format: separador (dato)
-imprime una línea separadora condicional,
-formada por caracteres ------------
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.
-la condición viene dada por el valor contenido en dato,
si es nulo, el separador no se imprime.
-por ejemplo:
<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre)%>
si existen bonos, imprime el separador --------------------------


  • format: separador (dato, título)
-imprime una línea separadora condicional,
-formada por caracteres ------------ con el valor indicado en título, centrado
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.
-la condición viene dada por el valor contenido en dato,
si es nulo, el separador no se imprime.
-por ejemplo:
<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre,'- BONO -')%>
si existen bonos, imprime el separador ---------- BONO ----------


  • format: nonull (objeto)
-si el valor del dato recibido no es nulo, imprime su valor string
-si el valor del dato recibido es nulo, imprime un string vacío: ""


  • format: cgoAfilCob (total, montoCobertura)
-si existe la Cobertura (montoCobertura > 0),
devuelve el importe que resta para el Afiliado: total - montoCobertura
-si no existe la Cobertura (montoCobertura = 0),
devuelve cero, con lo que no se imprime ningún dato.


  • format: irLinea (número)
-avanza la posición a imprimir hasta la línea indicada por el parámetro.


NOTA: SI LA AUSENCIA DEL DATO A IMPRIMIR TIENE QUE ELIMINAR EL RENGLÓN ACTUAL SE TIENE QUE ENCERRAR ENTRE MAYOR Y MENOR LA FUNCIÓN. EJ: <<%=....%>>

Funciones definidas para cada tipo de dispositivo (Plantillas v3)[editar]

Estos comandos actúan sólo si el dispositivo lo permite.

  • inicializar ()
-envía un comando de inicialización a la impresora que la configura a sus valores iniciales.


  • normalizar ()
-envía un comando de normalización de la letra, a sus valores iniciales.


  • negrita (objeto)
-imprime en negrita (o enfatizado) el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • cursiva (objeto)
-imprime en cursiva (o en itálica) el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • subrayado (objeto)
-imprime con letra subrayada el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • condensado (objeto)
-imprime con letra condensada el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • textodobleancho (objeto)
-imprime con letra expandida a lo ancho el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • textodoblealto (objeto)
-imprime con letra expandida en alto el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • cortepapel ()
-envía un comando de corte parcial de la cinta de papel.


  • cortetotalpapel ()
-envía un comando de corte total de la cinta de papel.


  • codigobarras (objeto)
-envía los comandos de configuración previos para imprimir un código de barras.
imprime el código de barras del valor del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.

Funciones de jxpath[editar]

  • string concat (string, string, string, ...)
-devuelve la concatenación de sus argumentos.


  • number sum (node-set)
-devuelve la suma, para cada nodo del set de nodos del argumento, del resultado de convertir los valores string del nodo a números.


Métodos[editar]

objeto atributo función tabla método nuevo método
Farmacia Razón Social <%= operacion_valor valor/nodoCreacion/razonSocial obtRazonSocialFarmacia()
Farmacia Razón Social 2 <%= operacion_valor valor/nodoCreacion/razonSocialLinea2 obtRazonSocialFarmaciaLinea2()
Farmacia Dirección <%= operacion_valor valor/nodoCreacion/direcciones[1] obtDireccion1Farmacia()
Farmacia Tel. <%= operacion_valor valor/nodoCreacion/telefonosConcatenados obtTelefonoFarmacia()
Farmacia C.U.I.T. <%= operacion_valor valor/nodoCreacion/cuit obtCuitFarmacia()
Farmacia I.V.A. <%= operacion_valor valor/nodoCreacion/objSituacionIva/nombre obtSituacionIvaFarmacia()
Farmacia I.Br. <%= operacion_valor valor/nodoCreacion/ingresosBrutos obtIngresosBrutosFarmacia()
Cliente Nombre <%= operacion_valor valor/entidad/nombre obtNombreCliente()
Cliente Apellido <%= operacion_valor valor/entidad/apellido obtApellidoCliente()
Cliente Dirección <%= operacion_valor valor/entidad/direcciones[1] obtDireccion1Cliente()
Cliente Teléfono <%= operacion_valor valor/entidad/telefonosConcatenados obtTelefonoCliente()
Afiliado Nombre <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado obtNombreAfiliado()
Afiliado Nro <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado obtNumeroAfiliado()
Valor Fecha <%= operacion_valor valor/fechaCreacion
Valor Número <%= operacion_valor valor/codificacion obtNumeroComprobante()
Producto Nombre <%# item_valor producto/nombreCorto
Producto Descuento de ítem <%# item_valor descuento * descuento *
Producto Descuento Automático/Forzado <%# item_valor descuentoAfiliado * descuentoAfiliado *
Producto Descuento General (manual) <%# item_valor descuentoGeneral * descuentoGeneral *
Receta O. Social <%# item_valor sum(itemsReceta/montoTotalCubierto)
Valor TOTAL <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto obtPrecioFinal()
Valor OBRAS SOCIALES <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal
Valor CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal obtImporteFormaPagoCtaCte()
Valor CUOTA CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal obtImporteFormaPagoCuotaCteCte()
Valor TARJETA <%@ operacion operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal obtImporteFormaPagoTarjeta()
Valor CHEQUE TERCEROS <%@ operacion operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal obtImporteFormaPagoChequeTerceros()
Valor EFECTIVO <%@ operacion operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal obtImporteFormaPagoEfectivo()
Valor Exento <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto
Valor Gravado <%= operacion_valor valor/valoresConcepto[subtipoValorCpto/concepto/id=541]/monto
Vendedor Nombre <%= operacion_valor valor/objUsuarioCreacion/alias
Puesto Nombre <%= operacion_valor operacion/puestoVenta/nombre

Caracteres[editar]

Para la obtención de la sintaxis de comandos se debe recurrir a los manuales de cada modelo de impresora fiscal.

A modo de ejemplo se transcriben algunos de los caracteres más usados:

modelo impresora HEXA ASCII descripción
Bematech

Epson

\u001B ESC Por definición del protocolo, todo comando empieza con 1B
Bematech

Epson

\u001B@ ESC @ Inicializa la impresora
Bematech \u001Btn ESC t n Selecciona la página de código n:

n = 2 (PÁGINA DE CÓDIGO 850 – Falla)

n = 3 (PÁGINA DE CÓDIGO 437)

n = 4 (PÁGINA DE CÓDIGO 860)

n = 5 (PÁGINA DE CÓDIGO 858)

Bematech \u001Bln ESC l n Programa el margen izquierdo para la columna n
Epson \u001Bl ESC l Posiciona margen izquierdo
Bematech

Epson

\u000E SO Selecciona expandido por una línea
Bematech \u0014 DC4 Cancela modo expandido de una línea
Bematech

Epson

\u000F SI Selecciona modo condensado
Bematech

Epson

\u0012 DC2 Cancela modo condensado
Bematech \u001BE ESC SO Selecciona expandido por una línea
Bematech \u001BF ESC SI Selecciona modo condensado
Epson \u001BF ESC F Cancela modo enfatizado
Bematech

Epson

\u001Bm ESC m Realiza un corte parcial de papel
Epson \u001BM ESC M Selecciona el ancho elite
Epson \u001B0 ESC 0 Selecciona 1/8 de pulgada de línea de espacio
Epson \u001B- ESC - Selecciona/cancela modo subrayado
Epson \u001BW ESC W Selecciona/cancela el modo expandido


Ejemplo Modelo[editar]

Hagamos un seguimiento, línea a línea, de la plantilla Factura Bematech MP4000 TH (45) cargada en zWeb:


1) \u001B@\u001Bt2\u001Bl\u0001

ESC @ = inicializa la impresora;
ESC t 2 = selecciona la página de código 850;
ESC l 1 = programa el margen iazquierdo para la columna 1.


2) \u000E<%=format:rpad((valor/nodoCreacion/razonSocial),19)%>

SO = selecciona expandido por una línea;
Busca en la tabla operacion_valor la Factura;
Imprime 19 caracteres de la Razón Social del Nodo Creación de la Factura,
si tiene más de 19 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


3) \u0014\u000F<%=format:rpad((valor/nodoCreacion/razonSocialLinea2),42)%>

DC4 = cancela modo expandido de una línea;

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 42 caracteres de la Razón Social 2a línea del Nodo Creación de la Factura,
si tiene más de 42 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


4) \u000F<%=format:rpad((valor/nodoCreacion/direcciones[1]),42)%>

SI = selecciona modo condesado;
Busca en la tabla operacion_valor la Factura;
Imprime 42 caracteres de la 1er Dirección del Nodo Creación de la Factura,
si tiene más de 42 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


5) \u000FTel.: <%=format:rpad((valor/nodoCreacion/telefonosConcatenados),42)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 42 caracteres con los Teléfonos del Nodo Creación de la Factura,
si ocupan más de 42 caracteres: los corta,
si ocupan menos: completa a derecha con espacios.


6) \u000FC.U.I.T. : <%=format:rpad((valor/nodoCreacion/cuit),30)%>

SI = selecciona modo condensado;
Imprime el texto 'C.U.I.T. : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del CUIT del Nodo Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


7) \u000FI.V.A. : <%=format:rpad((valor/nodoCreacion/objSituacionIva/nombre),30)%>

SI = selecciona modo condensado;
Imprime el texto 'I.V.A. : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del nombre de la Situación de IVA del Nodo Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


8) \u000FI.Br. : <%=format:rpad((valor/nodoCreacion/ingresosBrutos),30)%>

SI = selecciona modo condensado;
Imprime el texto 'I.Br. : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del nombre del nro. de Ingresos Brutos del Nodo Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


9) /

Imprime una línea en blanco.


10) \u000FCliente : <%=format:rpad((valor/entidad/nombre),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Cliente : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del Nombre del Cliente asociado a la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


11) \u000F<%=format:rpad((valor/entidad/apellido),30)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del Apellido del Cliente asociado a la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


12) \u000FDireccion: <%=format:rpad((valor/entidad/direcciones[1]),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Direccion: ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres de la 1er Dirección del Cliente asociado a la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


13) \u000FTelefono.: <%=format:rpad((valor/entidad/telefonosConcatenados)</span<,30)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres con los Teléfonos del Cliente asociado la Factura,
si ocupan más de 30 caracteres: los corta,
si ocupan menos: completa a derecha con espacios.


14) \u000F<%@concat('Afiliado: <',format:rpad((operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado),20),'>

\u000FNro. <',format:lpad((operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado),12),'>')%>

SI = selecciona modo condensado;
Busca en la tabla operacion la Receta;
Imprime la concatenación de los textos:
- 'Afiliado: '
- 20 caracteres del Nombre del Afiliado de la Receta,
si tiene más de 20 caracteres: los corta,
si tiene menos: completa a derecha con espacios.
- 'Nro. '
- 12 caracteres del Número del Afiliado de la Receta,
si tiene más de 12 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


15) \u000FFecha : <%=format:rpad(format:longDate((valor/fechaCreacion)),20)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Convierte la Fecha Creación de la Factura a longDate;
Imprime 20 caracteres de la fecha obtenida,
si tiene más de 20 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


16) \u0012\u001BE FACTURA <%=format:rpad((valor/letraFactura),1)%> - <%=format:rpad((valor/codificacion),13)%>\u001BF

DC2 = cancela modo condensado;
ESC SO = selecciona expandido por una línea;
Imprime el texto ' FACTURA ';
Busca en la tabla operacion_valor la Factura;
Imprime la Letra de la Factura (1 caracter);
Imprime el texto ' - '
Busca en la tabla operacion_valor la Factura;
Imprime 13 caracteres del Número de la Factura,
si tiene más de 13 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


17) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


18) \u000F Cant Descripcion P Unit. P.Total

SI = selecciona modo condensado;
Imprime el texto 'Cant Descripcion P Unit. P.Total'.


19) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


20) \u000F<%#concat(format:lpad(format:string((cantidad)),6),' ',format:rpad((producto/nombreCorto),23),' ',format:lpad(format:string((precioUnitario)),12),' ',format:lpad(format:string((total)),12),'

\u000F Descuento <',format:lpad(format:string((descuentoGeneral)),12),'>

\u000F O. Social <',format:lpad(format:string(sum(itemsReceta/precioUnitario)),12),'>')%>

SI = selecciona modo condensado;
Comienza a iterar sobre la tabla item_valor y, para cada Ítem de la Factura, imprime la concatenación de los textos:
- 6 caracteres (completados a izquierda con espacios) de la Cantidad convertida a texto.
- espacio en blanco
- 23 caracteres (completados a derecha con espacios) del Nombre Corto del Producto.
- espacio en blanco
- 12 caracteres (completados a izquierda con espacios) del Precio Unitario convertido a texto.
- espacio en blanco
- 12 caracteres (completados a izquierda con espacios) del Total convertido a texto.
- 'Descuento '
- 12 caracteres (completados a izquierda con espacios) del Descuento General convertido a texto.
- 'O. Social '
- 12 caraceteres (completados a izquierda con espacios) de la suma de los precios Unitarios de los Ítems de la Receta convertida a texto.


21) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


22) \u0012\u001BE TOTAL <%=format:lpad(format:string((valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto)),12)%>\u001BF

DC2 = cancela modo condensado;
ESC SO = selecciona expandido por una línea;
Imprime el texto 'TOTAL ';
Busca en la tabla operacion_valor la Factura;
Imprime 12 caracteres del Monto convertido a texto del subTipoValorConcepto tipo Total Neto de la Factura,
si tiene más de 12 caracteres: los corta,
si tiene menos: completa a izquierda con espacios;
ESC SI = selecciona modo condensado.


23) \u000FOBRAS SOCIALES <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'OBRAS SOCIALES ';
Busca en la tabla operacion la Receta;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Receta,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


24) \u000FCUENTA CORRIENTE <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'CUENTA CORRIENTE ';
Busca en la tabla operacion la Cuenta Corriente;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Cuenta Corriente,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


25) \u000FCUOTA CUENTA CORRIENTE <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'CUOTA CUENTA CORRIENTE ';
Busca en la tabla operacion la Cuota de Cuenta Corriente;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Cuota de Cuenta Corriente,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


26) \u000F<%@concat(format:rpad((operacionesValor[valor/tipoValor/id=9]/valor/entidadSaldable/nombre),33),format:lpad(format:string((operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal)),10))%>

SI = selecciona modo condensado;
Busca en la tabla operacion la Cuota de Tarjeta;
Imprime la concatenación de los textos:
- 33 caracteres (completados a derecha con espacios) del Nombre de la Entidad Saldable de la Cuota de Tarjeta.
- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto Principal de la Cuota de Tarjeta.


27) \u000FCHEQUE TERCEROS <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'CHEQUE TERCEROS ';
Busca en la tabla operacion el Cheque de Terceros;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal del Cheque de Terceros,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


28) \u000FEFECTIVO <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'EFECTIVO ';

Busca en la tabla operacion el Billete;

Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal del Billete,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


29) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


30) \u000FExento : <%=concat(format:lpad(format:string((valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto)),10),' Gravado: ',format:lpad(format:string((valor/valoresConcepto[subTipoValorCpto/concepto/id=541]/monto)),10))%>

SI = selecciona modo condensado;
Imprime el texto 'Exento : ';
Busca en la tabla operacion_valor la Factura;
Imprime la concatenación de los textos:
- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto Visible en T&S de tipo Total Bruto No Gravado.
- ' Gravado: '
- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto de tipo Total Bruto Gravado POS.


31) \u000FVendedor : <%=format:rpad((valor/objUsuarioCreacion/alias),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Vendedor : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del Alias del Usuario Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


32) \u000FPuesto : <%=format:rpad((operacion/puestoVenta/nombre),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Puesto : ';
Busca en la tabla operacion_valor la operación de Venta;
Imprime 30 caracteres del Nombre del Puesto de Venta,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


33) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


34) \u000F(comprobante sin valor fiscal)

DC2 = cancela el modo condensado;
Imprime el texto '(comprobante sin valor fiscal)'.


35) \u001Bw

ESC 119 = corte total.

new user message

Funciones propias[editar]

  • / = imprime línea en blanco.


  • <%= --------- %>
OperacionValor: Devuelve el objeto OperacionValor a imprimir (tabla operacion_valor).


  • <%& --------- %> #
operacionesValor: Itera sobre la colección OperacionValor.operacion.operacionesValor devolviendo objetos OperacionValor (tabla operacion_valor).


  • <%@ --------- %> #
Operacion: Devuelve el objeto OperacionValor.operacion, clase Operacion (tabla operacion).


  • <%# --------- %> #
itemsValor: Itera sobre la colección OperacionValor.valor.itemsValor devolviendo objetos ItemValor/ItemFactura/ItemConvenio/etc (tabla item_valor).


  • <%$ --------- %> #
valoresConcepto: Itera sobre la colección OperacionValor.valor.valoresConcepto devolviendo objetos ValorConcepto (tabla valor_conceptos).


  • <%! ** Modelo 2 ** %> !
comentarios: Los datos incluídos sirven para orientar al usuario de la plantilla, pero no salen impresos.


  • format: lpad / rpad / cpad (texto a imprimir, longitud a rellenar, [caracter de relleno])
rellena a izquierda / derecha / centra texto.
-si la longitud a rellenar es menor que la longitud del texto a imprimir, entonces corta el texto.
-si no se especifica ningún caracter de relleno, entonces completa con espacios.


  • format: alltrim (texto a imprimir)
-devuelve el texto indicado, borrando los espacios en blanco a izquierda y a derecha.


  • format: longDate (fecha)
-devuelve la fecha en el formato longDate definido en application.


  • format: shortDate (fecha)
-devuelve la fecha en el formato shortDate definido en application.


  • format: longDateTime (fecha)
-devuelve la fecha y la hora en el formato dd/mm/yyyy hh:mm:ss, definido en application.


  • format: string (objeto)
-convierte cualquier tipo de dato en string.


  • format: integer (número)
-devuelve la parte entera del número ingresado, convertido en string.


  • format: len (objeto)
-devuelve la longitud del dato ingresado, convertido en string.


  • format: ascii (número)
-devuelve el código ASCii del número ingresado, convertido en string.


  • format: stringNoVacio (número)
-devuelve el número ingresado, convertido en string.
-si el valor es nulo, devuelve el texto 0,00.


  • format: stringNoVacioDto (número)
-devuelve el número ingresado, convertido en string.
-si el valor es nulo, devuelve el texto -0,00.


  • format: leftpad / rightpad / centerpad (dato a imprimir)
-rellena por izquierda / derecha / centra el texto del dato ingresado,
siempre con espacios en blanco,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.


  • format: leftpad / rightpad / centerpad (título, dato)
-si el valor de dato es nulo,
-no imprime texto alguno.
-si el valor de dato no es nulo,
-concatena los valores título y dato,
-rellena por izquierda / derecha / centra el texto completo,
siempre con espacios en blanco,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.


  • format: leftpad / rightpad (título, dato, número)
-si el valor de dato es nulo,
-no imprime texto alguno.
-si el valor de dato no es nulo,
-concatena los valores título y dato,
-rellena por izquierda / derecha el texto completo,
siempre con espacios en blanco,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión menos el valor indicado en el parámetro número.


  • format: concatenar (número de campo, string de datos serializados)
-concatena los valores del string de datos separados por |,
ajusta la longitud del campo indicado por el primer parámetro,
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.
-por ejemplo:
format:concatenar(2, " 1|ADALAT 30| 44,00| 44,00")


  • format: enlazar (string de 2 datos serializados)
-concatena los 2 valores del string de datos separados por |,
ajusta la longitud del 1er. campo hasta completar la cantidad de caracteres
indicada como Ancho Máximo en el motor de impresión.
-por ejemplo:
format:enlazar("A c/Afil. d/aplicar Cob. 1a. :| 40,00")


  • format: separador ()
-imprime una línea separadora formada por caracteres --------------
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.


  • format: separador (dato)
-imprime una línea separadora condicional,
-formada por caracteres ------------
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.
-la condición viene dada por el valor contenido en dato,
si es nulo, el separador no se imprime.
-por ejemplo:
<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre)%>
si existen bonos, imprime el separador --------------------------


  • format: separador (dato, título)
-imprime una línea separadora condicional,
-formada por caracteres ------------ con el valor indicado en título, centrado
hasta completar la cantidad de caracteres indicada como Ancho Máximo en el motor de impresión.
-la condición viene dada por el valor contenido en dato,
si es nulo, el separador no se imprime.
-por ejemplo:
<%@format:separador(operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre,'- BONO -')%>
si existen bonos, imprime el separador ---------- BONO ----------


  • format: nonull (objeto)
-si el valor del dato recibido no es nulo, imprime su valor string
-si el valor del dato recibido es nulo, imprime un string vacío: ""


  • format: cgoAfilCob (total, montoCobertura)
-si existe la Cobertura (montoCobertura > 0),
devuelve el importe que resta para el Afiliado: total - montoCobertura
-si no existe la Cobertura (montoCobertura = 0),
devuelve cero, con lo que no se imprime ningún dato.


  • format: irLinea (número)
-avanza la posición a imprimir hasta la línea indicada por el parámetro.


NOTA: SI LA AUSENCIA DEL DATO A IMPRIMIR TIENE QUE ELIMINAR EL RENGLÓN ACTUAL SE TIENE QUE ENCERRAR ENTRE MAYOR Y MENOR LA FUNCIÓN. EJ: <<%=....%>>

Funciones definidas para cada tipo de dispositivo (Plantillas v3)[editar]

Estos comandos actúan sólo si el dispositivo lo permite.

  • inicializar ()
-envía un comando de inicialización a la impresora que la configura a sus valores iniciales.


  • normalizar ()
-envía un comando de normalización de la letra, a sus valores iniciales.


  • negrita (objeto)
-imprime en negrita (o enfatizado) el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • cursiva (objeto)
-imprime en cursiva (o en itálica) el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • subrayado (objeto)
-imprime con letra subrayada el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • condensado (objeto)
-imprime con letra condensada el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • textodobleancho (objeto)
-imprime con letra expandida a lo ancho el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • textodoblealto (objeto)
-imprime con letra expandida en alto el valor string del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.


  • cortepapel ()
-envía un comando de corte parcial de la cinta de papel.


  • cortetotalpapel ()
-envía un comando de corte total de la cinta de papel.


  • codigobarras (objeto)
-envía los comandos de configuración previos para imprimir un código de barras.
imprime el código de barras del valor del dato recibido.
vuelve a las condiciones iniciales al finalizar la línea.

Funciones de jxpath[editar]

  • string concat (string, string, string, ...)
-devuelve la concatenación de sus argumentos.


  • number sum (node-set)
-devuelve la suma, para cada nodo del set de nodos del argumento, del resultado de convertir los valores string del nodo a números.


Métodos[editar]

objeto atributo función tabla método nuevo método
Farmacia Razón Social <%= operacion_valor valor/nodoCreacion/razonSocial obtRazonSocialFarmacia()
Farmacia Razón Social 2 <%= operacion_valor valor/nodoCreacion/razonSocialLinea2 obtRazonSocialFarmaciaLinea2()
Farmacia Dirección <%= operacion_valor valor/nodoCreacion/direcciones[1] obtDireccion1Farmacia()
Farmacia Tel. <%= operacion_valor valor/nodoCreacion/telefonosConcatenados obtTelefonoFarmacia()
Farmacia C.U.I.T. <%= operacion_valor valor/nodoCreacion/cuit obtCuitFarmacia()
Farmacia I.V.A. <%= operacion_valor valor/nodoCreacion/objSituacionIva/nombre obtSituacionIvaFarmacia()
Farmacia I.Br. <%= operacion_valor valor/nodoCreacion/ingresosBrutos obtIngresosBrutosFarmacia()
Cliente Nombre <%= operacion_valor valor/entidad/nombre obtNombreCliente()
Cliente Apellido <%= operacion_valor valor/entidad/apellido obtApellidoCliente()
Cliente Dirección <%= operacion_valor valor/entidad/direcciones[1] obtDireccion1Cliente()
Cliente Teléfono <%= operacion_valor valor/entidad/telefonosConcatenados obtTelefonoCliente()
Afiliado Nombre <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado obtNombreAfiliado()
Afiliado Nro <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado obtNumeroAfiliado()
Valor Fecha <%= operacion_valor valor/fechaCreacion
Valor Número <%= operacion_valor valor/codificacion obtNumeroComprobante()
Producto Nombre <%# item_valor producto/nombreCorto
Producto Descuento de ítem <%# item_valor descuento * descuento *
Producto Descuento Automático/Forzado <%# item_valor descuentoAfiliado * descuentoAfiliado *
Producto Descuento General (manual) <%# item_valor descuentoGeneral * descuentoGeneral *
Receta O. Social <%# item_valor sum(itemsReceta/montoTotalCubierto)
Valor TOTAL <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto obtPrecioFinal()
Valor OBRAS SOCIALES <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal
Valor CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal obtImporteFormaPagoCtaCte()
Valor CUOTA CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal obtImporteFormaPagoCuotaCteCte()
Valor TARJETA <%@ operacion operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal obtImporteFormaPagoTarjeta()
Valor CHEQUE TERCEROS <%@ operacion operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal obtImporteFormaPagoChequeTerceros()
Valor EFECTIVO <%@ operacion operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal obtImporteFormaPagoEfectivo()
Valor Exento <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto
Valor Gravado <%= operacion_valor valor/valoresConcepto[subtipoValorCpto/concepto/id=541]/monto
Vendedor Nombre <%= operacion_valor valor/objUsuarioCreacion/alias
Puesto Nombre <%= operacion_valor operacion/puestoVenta/nombre

Caracteres[editar]

Para la obtención de la sintaxis de comandos se debe recurrir a los manuales de cada modelo de impresora fiscal.

A modo de ejemplo se transcriben algunos de los caracteres más usados:

modelo impresora HEXA ASCII descripción
Bematech

Epson

\u001B ESC Por definición del protocolo, todo comando empieza con 1B
Bematech

Epson

\u001B@ ESC @ Inicializa la impresora
Bematech \u001Btn ESC t n Selecciona la página de código n:

n = 2 (PÁGINA DE CÓDIGO 850 – Falla)

n = 3 (PÁGINA DE CÓDIGO 437)

n = 4 (PÁGINA DE CÓDIGO 860)

n = 5 (PÁGINA DE CÓDIGO 858)

Bematech \u001Bln ESC l n Programa el margen izquierdo para la columna n
Epson \u001Bl ESC l Posiciona margen izquierdo
Bematech

Epson

\u000E SO Selecciona expandido por una línea
Bematech \u0014 DC4 Cancela modo expandido de una línea
Bematech

Epson

\u000F SI Selecciona modo condensado
Bematech

Epson

\u0012 DC2 Cancela modo condensado
Bematech \u001BE ESC SO Selecciona expandido por una línea
Bematech \u001BF ESC SI Selecciona modo condensado
Epson \u001BF ESC F Cancela modo enfatizado
Bematech

Epson

\u001Bm ESC m Realiza un corte parcial de papel
Epson \u001BM ESC M Selecciona el ancho elite
Epson \u001B0 ESC 0 Selecciona 1/8 de pulgada de línea de espacio
Epson \u001B- ESC - Selecciona/cancela modo subrayado
Epson \u001BW ESC W Selecciona/cancela el modo expandido


Ejemplo Modelo[editar]

Hagamos un seguimiento, línea a línea, de la plantilla Factura Bematech MP4000 TH (45) cargada en zWeb:


1) \u001B@\u001Bt2\u001Bl\u0001

ESC @ = inicializa la impresora;
ESC t 2 = selecciona la página de código 850;
ESC l 1 = programa el margen iazquierdo para la columna 1.


2) \u000E<%=format:rpad((valor/nodoCreacion/razonSocial),19)%>

SO = selecciona expandido por una línea;
Busca en la tabla operacion_valor la Factura;
Imprime 19 caracteres de la Razón Social del Nodo Creación de la Factura,
si tiene más de 19 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


3) \u0014\u000F<%=format:rpad((valor/nodoCreacion/razonSocialLinea2),42)%>

DC4 = cancela modo expandido de una línea;

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 42 caracteres de la Razón Social 2a línea del Nodo Creación de la Factura,
si tiene más de 42 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


4) \u000F<%=format:rpad((valor/nodoCreacion/direcciones[1]),42)%>

SI = selecciona modo condesado;
Busca en la tabla operacion_valor la Factura;
Imprime 42 caracteres de la 1er Dirección del Nodo Creación de la Factura,
si tiene más de 42 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


5) \u000FTel.: <%=format:rpad((valor/nodoCreacion/telefonosConcatenados),42)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 42 caracteres con los Teléfonos del Nodo Creación de la Factura,
si ocupan más de 42 caracteres: los corta,
si ocupan menos: completa a derecha con espacios.


6) \u000FC.U.I.T. : <%=format:rpad((valor/nodoCreacion/cuit),30)%>

SI = selecciona modo condensado;
Imprime el texto 'C.U.I.T. : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del CUIT del Nodo Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


7) \u000FI.V.A. : <%=format:rpad((valor/nodoCreacion/objSituacionIva/nombre),30)%>

SI = selecciona modo condensado;
Imprime el texto 'I.V.A. : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del nombre de la Situación de IVA del Nodo Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


8) \u000FI.Br. : <%=format:rpad((valor/nodoCreacion/ingresosBrutos),30)%>

SI = selecciona modo condensado;
Imprime el texto 'I.Br. : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del nombre del nro. de Ingresos Brutos del Nodo Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


9) /

Imprime una línea en blanco.


10) \u000FCliente : <%=format:rpad((valor/entidad/nombre),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Cliente : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del Nombre del Cliente asociado a la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


11) \u000F<%=format:rpad((valor/entidad/apellido),30)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del Apellido del Cliente asociado a la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


12) \u000FDireccion: <%=format:rpad((valor/entidad/direcciones[1]),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Direccion: ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres de la 1er Dirección del Cliente asociado a la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


13) \u000FTelefono.: <%=format:rpad((valor/entidad/telefonosConcatenados)</span<,30)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres con los Teléfonos del Cliente asociado la Factura,
si ocupan más de 30 caracteres: los corta,
si ocupan menos: completa a derecha con espacios.


14) \u000F<%@concat('Afiliado: <',format:rpad((operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado),20),'>

\u000FNro. <',format:lpad((operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado),12),'>')%>

SI = selecciona modo condensado;
Busca en la tabla operacion la Receta;
Imprime la concatenación de los textos:
- 'Afiliado: '
- 20 caracteres del Nombre del Afiliado de la Receta,
si tiene más de 20 caracteres: los corta,
si tiene menos: completa a derecha con espacios.
- 'Nro. '
- 12 caracteres del Número del Afiliado de la Receta,
si tiene más de 12 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


15) \u000FFecha : <%=format:rpad(format:longDate((valor/fechaCreacion)),20)%>

SI = selecciona modo condensado;
Busca en la tabla operacion_valor la Factura;
Convierte la Fecha Creación de la Factura a longDate;
Imprime 20 caracteres de la fecha obtenida,
si tiene más de 20 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


16) \u0012\u001BE FACTURA <%=format:rpad((valor/letraFactura),1)%> - <%=format:rpad((valor/codificacion),13)%>\u001BF

DC2 = cancela modo condensado;
ESC SO = selecciona expandido por una línea;
Imprime el texto ' FACTURA ';
Busca en la tabla operacion_valor la Factura;
Imprime la Letra de la Factura (1 caracter);
Imprime el texto ' - '
Busca en la tabla operacion_valor la Factura;
Imprime 13 caracteres del Número de la Factura,
si tiene más de 13 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


17) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


18) \u000F Cant Descripcion P Unit. P.Total

SI = selecciona modo condensado;
Imprime el texto 'Cant Descripcion P Unit. P.Total'.


19) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


20) \u000F<%#concat(format:lpad(format:string((cantidad)),6),' ',format:rpad((producto/nombreCorto),23),' ',format:lpad(format:string((precioUnitario)),12),' ',format:lpad(format:string((total)),12),'

\u000F Descuento <',format:lpad(format:string((descuentoGeneral)),12),'>

\u000F O. Social <',format:lpad(format:string(sum(itemsReceta/precioUnitario)),12),'>')%>

SI = selecciona modo condensado;
Comienza a iterar sobre la tabla item_valor y, para cada Ítem de la Factura, imprime la concatenación de los textos:
- 6 caracteres (completados a izquierda con espacios) de la Cantidad convertida a texto.
- espacio en blanco
- 23 caracteres (completados a derecha con espacios) del Nombre Corto del Producto.
- espacio en blanco
- 12 caracteres (completados a izquierda con espacios) del Precio Unitario convertido a texto.
- espacio en blanco
- 12 caracteres (completados a izquierda con espacios) del Total convertido a texto.
- 'Descuento '
- 12 caracteres (completados a izquierda con espacios) del Descuento General convertido a texto.
- 'O. Social '
- 12 caraceteres (completados a izquierda con espacios) de la suma de los precios Unitarios de los Ítems de la Receta convertida a texto.


21) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


22) \u0012\u001BE TOTAL <%=format:lpad(format:string((valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto)),12)%>\u001BF

DC2 = cancela modo condensado;
ESC SO = selecciona expandido por una línea;
Imprime el texto 'TOTAL ';
Busca en la tabla operacion_valor la Factura;
Imprime 12 caracteres del Monto convertido a texto del subTipoValorConcepto tipo Total Neto de la Factura,
si tiene más de 12 caracteres: los corta,
si tiene menos: completa a izquierda con espacios;
ESC SI = selecciona modo condensado.


23) \u000FOBRAS SOCIALES <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'OBRAS SOCIALES ';
Busca en la tabla operacion la Receta;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Receta,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


24) \u000FCUENTA CORRIENTE <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'CUENTA CORRIENTE ';
Busca en la tabla operacion la Cuenta Corriente;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Cuenta Corriente,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


25) \u000FCUOTA CUENTA CORRIENTE <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'CUOTA CUENTA CORRIENTE ';
Busca en la tabla operacion la Cuota de Cuenta Corriente;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal de la Cuota de Cuenta Corriente,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


26) \u000F<%@concat(format:rpad((operacionesValor[valor/tipoValor/id=9]/valor/entidadSaldable/nombre),33),format:lpad(format:string((operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal)),10))%>

SI = selecciona modo condensado;
Busca en la tabla operacion la Cuota de Tarjeta;
Imprime la concatenación de los textos:
- 33 caracteres (completados a derecha con espacios) del Nombre de la Entidad Saldable de la Cuota de Tarjeta.
- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto Principal de la Cuota de Tarjeta.


27) \u000FCHEQUE TERCEROS <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'CHEQUE TERCEROS ';
Busca en la tabla operacion el Cheque de Terceros;
Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal del Cheque de Terceros,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


28) \u000FEFECTIVO <%@format:lpad(format:string((operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal)),10)%>

SI = selecciona modo condensado;
Imprime el texto 'EFECTIVO ';

Busca en la tabla operacion el Billete;

Imprime 10 caracteres del Monto convertido a texto del subTipoValor Concepto Principal del Billete,
si tiene más de 10 caracteres: los corta,
si tiene menos: completa a izquierda con espacios.


29) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


30) \u000FExento : <%=concat(format:lpad(format:string((valor/valoresConcepto[subTipoValorCpto/concepto/id=503 and subTipoValorCpto/visiblePos=1]/monto)),10),' Gravado: ',format:lpad(format:string((valor/valoresConcepto[subTipoValorCpto/concepto/id=541]/monto)),10))%>

SI = selecciona modo condensado;
Imprime el texto 'Exento : ';
Busca en la tabla operacion_valor la Factura;
Imprime la concatenación de los textos:
- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto Visible en T&S de tipo Total Bruto No Gravado.
- ' Gravado: '
- 10 caracteres (completados a izquierda con espacios) del Monto convertido a texto del subTipoValorConcepto de tipo Total Bruto Gravado POS.


31) \u000FVendedor : <%=format:rpad((valor/objUsuarioCreacion/alias),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Vendedor : ';
Busca en la tabla operacion_valor la Factura;
Imprime 30 caracteres del Alias del Usuario Creación de la Factura,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


32) \u000FPuesto : <%=format:rpad((operacion/puestoVenta/nombre),30)%>

SI = selecciona modo condensado;
Imprime el texto 'Puesto : ';
Busca en la tabla operacion_valor la operación de Venta;
Imprime 30 caracteres del Nombre del Puesto de Venta,
si tiene más de 30 caracteres: los corta,
si tiene menos: completa a derecha con espacios.


33) \u0012------------------------------------------

DC2 = cancela el modo condensado;
Imprime el texto '------------------------------------------'.


34) \u000F(comprobante sin valor fiscal)

DC2 = cancela el modo condensado;
Imprime el texto '(comprobante sin valor fiscal)'.


35) \u001Bw

ESC 119 = corte total.