De Touch&Sale

Saltar a: navegación, buscar
 
(No se muestran 355 ediciones intermedias de 6 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>
 +
|}
  
*'''<%= --------- %>'''
+
----
:-va a buscar a la tabla operacion_valor.
+
  
 +
== 2. Funciones de Dispositivo ==
  
*'''<%& --------- %>'''
+
Actúan solo si el dispositivo lo soporta. Se usan directamente, sin prefijo <code>format:</code>.
:-va a iterar sobre la 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>.
 +
|}
  
*'''<%@ --------- %>'''
+
----
:-va a buscar a la tabla operacion.
+
  
 +
== 3. Variables y Propiedades de Ítem ==
  
*'''<%# --------- %>'''
+
Valores accesibles desde el contexto de la plantilla, sin prefijo <code>format:</code>.
:-va a iterar sobre la tabla item_valor.
+
 
+
 
+
*'''format: lpad / rpad''' (''texto a imprimir'', ''longitud a rellenar'', ''caracter de relleno'')
+
:rellena a izquierda / derecha.
+
:-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: longDate''' (''fecha'')
+
:-devuelve la fecha en el formato ''longDate'' definido en application.
+
 
+
 
+
*'''format: string''' (''número')
+
:-convierte el número en ''string''.
+
 
+
 
+
== Funciones de jxpath==
+
 
+
*''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 ==
+
{| 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''
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Variable / Propiedad !! Contexto !! Descripción
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
| <code>cantidadFilas</code> || <code>&lt;%=</code> / operacion || Cantidad de líneas de productos de un comprobante de venta.
| 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:none;padding:0.097cm;"| Farmacia
+
| <code>cantidadProductos</code> || <code>&lt;%=</code> / operacion || Total de productos de un comprobante de venta.
| 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:none;padding:0.097cm;"| Farmacia
+
| <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.
| 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:none;padding:0.097cm;"| Farmacia
+
| <code>espacioTroquel</code> || operacion/OS || Configuración de la Obra Social. Si imprime troqueles devuelve <code>1</code>, si no devuelve <code>0</code>.
| 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:none;padding:0.097cm;"| Farmacia
+
| <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>.
| 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
+
  
|-
+
=== Propiedades SinIvaPlantilla (en <%# item_valor %>) ===
| 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.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
+
  
|-
+
Estos atributos poseen la propiedad de que:
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Farmacia
+
* Si el comprobante '''discrimina IVA''' (Factura o N/C "A"): traen el valor '''sin''' el IVA incluido.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| I.Br.
+
* Si el comprobante '''no discrimina IVA''': devuelven el valor total, con el impuesto acumulado.
| 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
+
  
 +
{| class="wikitable"
 +
! Propiedad
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Cliente
+
| <code>descuentoAfiliadoSinIVAPlantilla</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:none;padding:0.097cm;"| Cliente
+
| <code>descuentoAfiliadoTotalSinIVAPlantilla</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:none;padding:0.097cm;"| Cliente
+
| <code>descuentoConvenioSinIVAPlantilla</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:none;padding:0.097cm;"| Cliente
+
| <code>descuentoSinIvaPlantilla</code>
| 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:none;padding:0.097cm;"| Afiliado
+
| <code>precioUnitarioSinIvaPlantilla</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:none;padding:0.097cm;"| Afiliado
+
| <code>recargoConvenioSinIVAPlantilla</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:none;padding:0.097cm;"| Valor
+
| <code>totalSinIvaPlantilla</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
+
  
|-
+
Métodos asociados:
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Letra
+
| 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
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Descripción
 
|-
 
|-
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Producto
+
| <code>obtTotalCubierto1raCoberturaSinIvaPlantilla()</code> || Importe cubierto por la 1ra. cobertura, sin IVA (condicional).
| 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:none;padding:0.097cm;"| Producto
+
| <code>obtTotalCubierto2daCoberturaSinIvaPlantilla()</code> || Importe cubierto por la 2da. cobertura, sin IVA (condicional).
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;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;"| <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:none;padding:0.097cm;"| Receta
+
| 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/precioUnitario)
+
  
|-
+
== 4. Funciones format: ==
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
| 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>
+
  
|-
+
Implementadas en <code>TemplateUtilVersion1</code>, <code>TemplateUtilVersion2</code>, ..., <code>TemplateUtilVersion5Pdf</code>.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
Se invocan con el prefijo <code>format:</code> dentro de las expresiones de plantilla.
| 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>
+
  
|-
+
=== format:abonaCon(montoEfectivo, abonaCon, n) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
Devuelve el primer parámetro mayor que cero, formateado a <code>n</code> decimales.
| 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>
+
  
|-
+
=== format:alignRight(titulo, dato) / format:alignRight(titulo, dato, ancho) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
Si los valores no son nulos, devuelve la concatenación de los parámetros.
| 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
+
Imprime <code>titulo</code> y ajusta <code>dato</code> a la derecha del ancho indicado o al del motor.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
<pre>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
alignRight("Total OSP", "50,12") => "Total OSP____________________50,12"
| 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>
+
</pre>
  
|-
+
=== format:alignRightDtoRgo(titulo, dato) / format:alignRightDtoRgo(template, titulo, dato) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
* '''2 params:''' Actúa como <code>alignRight()</code>, pero si <code>dato &lt; 0</code> inserta un signo <code>"-"</code>.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| TARJETA
+
* '''3 params:''' Igual al anterior, pero agrega un <code>template</code> con términos de reemplazo según <code>reemplazarTexto()</code>.
| 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>
+
  
|-
+
=== format:alltrim(texto) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
Devuelve el texto indicado, borrando los espacios en blanco a izquierda y a derecha.
| 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>
+
  
|-
+
=== format:anchopagina() ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
Devuelve la cantidad de caracteres del ancho de la página seteados en el motor.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| EFECTIVO
+
Se utiliza como complemento de otros métodos para alinear impresiones.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%@</nowiki>
+
<pre>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion
+
<%@format:centerpad('--','- RECETA -',format:anchopagina())%>
| 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>
+
</pre>
  
|-
+
=== format:ascii(número) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
Devuelve el código ASCII del número ingresado, convertido en string.
| 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>
+
  
|-
+
=== format:avanzarLineas(value) / format:avanzarLineas(value, cantMaximaLineas) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Valor
+
Agrega la cantidad de líneas en blanco indicada por <code>value</code> (se toma la parte entera).
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Gravado
+
El segundo parámetro limita la cantidad máxima de filas a avanzar.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| <nowiki><%=</nowiki>
+
<pre>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| operacion_valor
+
<%=format:avanzarLineas(cantidadTroqueles*3)%>
| 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>
+
<%=format:avanzarLineas(cantidadTroqueles*3, cantMaximaLineas)%>
 +
</pre>
  
|-
+
=== format:bigdecimal(value) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Vendedor
+
Devuelve el <code>BigDecimal</code> correspondiente al parámetro indicado, contemplando iterables.
| 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
+
  
|-
+
=== format:cgoAfilCob(total, montoCobertura) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Puesto
+
* Si existe la Cobertura (<code>montoCobertura &gt; 0</code>): devuelve <code>total - montoCobertura</code>.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Nombre
+
* Si no existe (<code>montoCobertura = 0</code>): devuelve cero (no se imprime ningún dato).
| 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;"| operacion/puestoVenta/nombre
+
  
|}
+
=== 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.
  
== Caracteres ==
+
=== 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>
  
Para la obtención de la sintaxis de comandos se debe recurrir a los manuales de cada modelo de impresora fiscal.
+
=== format:concatenar(strDatos) — forma v2 ===
 +
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>
  
A modo de ejemplo se transcriben algunos de los caracteres más usados:
+
=== format:concatNoNull(value1, value2) ===
 +
Si '''ambos''' parámetros son no nulos, devuelve un String concatenándolos.
  
{| style="border-spacing:0;"
+
=== format:cortepapel() — plantillas v5 PDF ===
| 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''
+
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.
| 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''
+
<pre>
| 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''
+
<%=format:cortepapel()%>
| style="background-color:#dc2300;border:0.25pt solid #808080;padding:0.097cm;"| ''descripción''
+
</pre>
  
|-
+
=== format:cpad(texto, longitud [, caracter]) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Ver <code>format:lpad / rpad / cpad</code>.
  
Epson
+
=== format:datoCondicional(condicion, dato) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B
+
Si se cumple <code>condicion</code>, devuelve <code>dato</code>; sino, un string vacío.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC
+
<pre>
| 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
+
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 ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
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>
  
Epson
+
=== format:enlazar(valor1, valor2) — forma v2 ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B@
+
Si los valores no son nulos, devuelve la concatenación de ambos parámetros ajustada al ancho de página.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC @
+
<pre>
| 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
+
format:enlazar("A c/Afil. d/aplicar Cob. 1ra.: ","  40,00")
 +
</pre>
  
|-
+
=== format:esNulo(value) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Similar al método <code>isNull()</code>, contemplando iterables.
| 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
+
| 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:
+
  
n = 2 (PÁGINA DE CÓDIGO 850 – Falla)
+
=== format:imprimirbarcode(valor [, alineacion]) — plantillas v5 PDF ===
 +
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).
  
n = 3 (PÁGINA DE CÓDIGO 437)
+
=== format:imprimircode128(valor [, alineacion]) — plantillas v5 PDF ===
 +
Imprime código de barras Code128.
 +
<pre>
 +
<%@format:imprimircode128('1234567890','C')%>
 +
</pre>
  
n = 4 (PÁGINA DE CÓDIGO 860)
+
=== format:imprimircode39h(valor [, alineacion]) — plantillas v5 PDF ===
 +
Imprime código de barras Code39 Hoch.
  
n = 5 (PÁGINA DE CÓDIGO 858)
+
=== format:imprimircode39l(valor [, alineacion]) — plantillas v5 PDF ===
 +
Imprime código de barras Code39 Logitogo.
  
|-
+
=== format:imprimirCodigoDeBarras(valor [, alineacion]) — plantillas v5 PDF ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Selecciona el tipo de código de barras según el parámetro de nodo <code>CODIGO_BARRA_PLANTILLA</code>.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001Bln
+
Formato del parámetro: <code>CODE39H,R</code> (tipo, alineación). Código por defecto: <code>CODE128,C</code>.
| 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
+
  
|-
+
=== format:imprimirEAN13(valor) — plantillas v5 PDF ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
Imprime código EAN-13 (troqueles).
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001Bl
+
<pre>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC l
+
<%#format:imprimirEAN13(obtCodigoBarraProducto())%>
| 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
+
</pre>
  
|-
+
=== format:imprimirfree3of9(valor [, alineacion]) — plantillas v5 PDF ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Imprime código de barras Code 3of9.
  
Epson
+
=== format:integer(número) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u000E
+
Devuelve la parte entera del número ingresado, convertida en string.
| 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
+
  
|-
+
=== format:irLinea(número) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Avanza la posición a imprimir hasta la línea indicada por el parámetro.
| 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
+
  
|-
+
=== format:leftpad / rightpad / centerpad(dato) — 1 parámetro ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Rellena por izquierda / derecha / centra el texto, siempre con espacios en blanco, hasta completar el '''Ancho Máximo''' del motor de impresión.
  
Epson
+
=== format:leftpad / rightpad / centerpad(titulo, dato) — 2 parámetros ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u000F
+
* Si <code>dato</code> es nulo: no imprime nada.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| SI
+
* Si <code>dato</code> no es nulo: concatena <code>titulo + dato</code> y rellena/centra hasta el '''Ancho Máximo''' del motor.
| 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
+
  
|-
+
=== format:leftpad / rightpad(titulo, dato, número) — 3 parámetros ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
* 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>'''.
  
Epson
+
=== format:lefttrim(value) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u0012
+
Si el valor no es nulo, recorta los espacios en blanco de la '''izquierda'''.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| DC2
+
<pre>
| 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
+
format:lefttrim("    A cargo Afiliado"="A cargo Afiliado"
 +
</pre>
  
|-
+
=== format:len(objeto) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Devuelve la longitud del dato ingresado, convertido en string.
| 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
+
  
|-
+
=== format:longDate(fecha) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Devuelve la fecha en el formato <code>longDate</code> definido en application.
| 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
+
  
|-
+
=== format:longDateTime(fecha) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
Devuelve la fecha y hora en el formato <code>dd/mm/yyyy hh:mm:ss</code>, definido en application.
| 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
+
  
|-
+
=== format:lowerCase(value) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Bematech
+
Devuelve un String con el lower-case del objeto.
 +
<pre>
 +
format:lowerCase('Valor para Cambiar')  =>  'valor para cambiar'
 +
</pre>
  
Epson
+
=== format:lpad(texto, longitud [, caracter]) / rpad / cpad ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001Bm
+
Rellena a izquierda (<code>lpad</code>) / derecha (<code>rpad</code>) / centra (<code>cpad</code>) el texto, hasta la longitud indicada.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC m
+
* Si <code>longitud &lt; len(texto)</code>: corta el texto.
| 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
+
* Si no se especifica <code>caracter</code>: rellena con espacios.
  
|-
+
=== format:nonull(objeto) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
* Si el valor no es nulo: imprime su valor string.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001BM
+
* Si el valor es nulo: imprime un string vacío <code>""</code>.
| 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
+
  
|-
+
=== format:noRepetir(nombre, cantidadBase) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
En ocasiones se recibe un nombre o descripción repetido varias veces y se desea mostrar uno solo.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B0
+
* <code>nombre</code>: el dato a mostrar.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC 0
+
* <code>cantidadBase</code>: número mínimo de caracteres a mostrar sin repetición (ej: <code>5</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 1/8 de pulgada de línea de espacio
+
  
|-
+
=== format:obtCaracterCopia(parametro[1]) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
Registra el carácter de Original/Duplicado/etc. del documento impreso dentro de la secuencia de copias.
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| \u001B-
+
<pre>
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| ESC -
+
<%=format:rightpad('ES COMPROBANTE : ',format:obtCaracterCopia(parametro[1]))%>
| 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
+
=> ES COMPROBANTE : ORIGINAL
 +
=> ES COMPROBANTE : DUPLICADO
 +
=> ES COMPROBANTE : TRIPLICADO
 +
</pre>
  
|-
+
=== format:obtcodigo(objeto) ===
| style="border-top:none;border-bottom:0.25pt solid #808080;border-left:0.25pt solid #808080;border-right:none;padding:0.097cm;"| Epson
+
Formatea el objeto (codificación del comprobante <code>0001-0001234</code>) para imprimir como Código de Barras.
| 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
+
| 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
+
  
|}
+
=== format:obtcodigosinguion(objeto) ===
 +
Igual que <code>obtcodigo</code> 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.
 +
<pre>
 +
<%=format:rightpad('COPIA NUMERO  : ',format:obtNumeroCopia(parametro[1]))%>
 +
=> COPIA NUMERO  : 1 / 2 / 3
 +
</pre>
  
==Ejemplo Modelo==
+
=== format:obtTipoComprobante(tipoOperacion) ===
 +
Dado el tipo de operación, devuelve un string con el respectivo tipo de comprobante.
 +
<pre>
 +
format:obtTipoComprobante(obtTipoOperacion())  =>  "FACTURA", "TICKET", etc.
 +
</pre>
  
Hagamos un seguimiento, línea a línea, de la plantilla '''Factura Bematech MP4000 TH (45)''' cargada en zWeb:
+
=== 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>
  
 +
=== format:reemplazarParametro(linea, args[]) ===
 +
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()";
  
1) <span style="color:#0000FF">\u001B@\u001Bt2\u001Bl\u0001</span>
+
<%=format:parametro[2]%>  =>  <%=format:separador()%>
 +
</pre>
  
:ESC @ = inicializa la impresora;
+
=== format:reemplazarTexto(titulo, template) ===
:ESC t 2 = selecciona la página de código 850;
+
Devuelve un texto donde se reemplazó el <code>titulo</code> de acuerdo al patrón <code>template</code>.
:ESC l 1 = programa el margen iazquierdo para la columna 1.
+
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>
  
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>
+
=== format:righttrim(value) ===
 +
Si el valor no es nulo, recorta los espacios en blanco de la '''derecha'''.
 +
<pre>
 +
format:righttrim("A cargo Afiliado      ") => "A cargo Afiliado"
 +
</pre>
  
:SO = selecciona expandido por una línea;
+
=== format:roundingUP(value) ===
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
Devuelve un String del parámetro <code>value</code>. Si es numérico, devuelve el entero mayor (redondeo hacia arriba).
:Imprime 19 caracteres de la Razón Social del Nodo Creación de la Factura,
+
<pre>
::si tiene más de 19 caracteres: los corta,
+
value=5895.195741
::si tiene menos: completa a derecha con espacios.
+
format:roundingUP(value)  =>  "5.896"
 +
</pre>
  
 +
=== 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.
 +
<pre>
 +
<%@format:textodobleancho(format:separador(obtNombreObraSocial(),'- RECETA -',format:semianchopagina()))%>
 +
</pre>
  
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>
+
=== format:separador() — sin parámetros ===
 +
Imprime una línea separadora de caracteres <code>---...---</code> hasta el Ancho Máximo del motor.
  
DC4 = cancela modo expandido de una línea;
+
=== format:separador(dato) — 1 parámetro ===
:SI = selecciona modo condensado;
+
Imprime el separador <code>---...---</code> solo si <code>dato</code> no es nulo.
: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.
+
  
 +
=== 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>
  
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>
+
=== format:separador(dato, titulo, anchoTexto) — 3 parámetros ===
 +
Igual al anterior, pero el ancho total lo define <code>anchoTexto</code> en lugar del motor.
 +
<pre>
 +
<%@format:separador(operacionesValor[valor/tipoValor/id=2]/valor/entidad/nombre,'- RECETA -',24)%>
 +
=>  -------- RECETA --------
 +
</pre>
  
:SI = selecciona modo condesado;
+
=== format:separadorDoble() ===
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
Imprime una línea separadora de caracteres <code>===...===</code> hasta el Ancho Máximo del motor.
: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.
+
  
 +
=== format:shortDate(fecha) ===
 +
Devuelve la fecha en el formato <code>shortDate</code> definido en application.
  
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>
+
=== format:string(objeto) ===
 +
Convierte cualquier tipo de dato en string.
  
:SI = selecciona modo condensado;
+
=== format:stringData(value) ===
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
Devuelve el parámetro sin puntos <code>"."</code>.
:Imprime 42 caracteres con los Teléfonos del Nodo Creación de la Factura,
+
<pre>
::si ocupan más de 42 caracteres: los corta,
+
format:stringData("1.235.459,78")  =>  "1235459,78"
::si ocupan menos: completa a derecha con espacios.
+
</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>.
  
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>
+
=== format:stringNoVacio(número) ===
 +
Devuelve el número ingresado convertido en string. Si el valor es nulo, devuelve <code>"0,00"</code>.
  
:SI = selecciona modo condensado;
+
=== format:stringNoVacioDto(número) ===
:Imprime el texto 'C.U.I.T. : ';
+
Devuelve el número ingresado convertido en string. Si el valor es nulo, devuelve <code>"-0,00"</code>.
: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.
+
  
 +
=== format:stringtransf(objeto1, objeto2, objeto3) ===
 +
Devuelve <code>objeto1</code>, donde las ocurrencias de <code>objeto2</code> son reemplazadas por <code>objeto3</code>.
 +
Internamente usa <code>StringUtils.replace()</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>
+
=== 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>
  
:SI = selecciona modo condensado;
+
=== format:unirtodo(titulo, subtitulo, dato) / format:unirtodo(titulo, subtitulo, dato, ancho) ===
:Imprime el texto 'I.V.A. : ';
+
Si los valores no son nulos, devuelve la concatenación de los parámetros.
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
Ajusta <code>titulo + dato</code> al ancho indicado o al del motor.
: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.
+
  
 +
=== format:unirtodo(dato1, dato2) — 2 parámetros ===
 +
Devuelve la concatenación '''incondicional''' de ambos parámetros.
  
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>
+
=== format:upperCase(value) ===
 +
Devuelve un String con el upper-case del objeto.
 +
<pre>
 +
format:upperCase('Valor para Cambiar') => 'VALOR PARA CAMBIAR'
 +
</pre>
  
:SI = selecciona modo condensado;
+
=== format:vuelto(montoEfectivo, abonaCon, n) ===
:Imprime el texto 'I.Br. : ';
+
Devuelve <code>(abonaCon - montoEfectivo)</code> o cero, formateado a <code>n</code> decimales.
: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.
+
  
 +
----
  
9) <span style="color:#0000FF">/</span>
+
== 5. Pseudo-métodos obt*() — TemplateUtil.java ==
  
:Imprime una línea en blanco.
+
Organizados por entidad. La columna '''Función''' indica el tag de contexto, '''Tabla''' la tabla de origen y '''Atributo''' el XPath equivalente.
  
 +
=== Afiliado ===
  
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>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtNombreAfiliado()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado</code>
 +
|-
 +
| <code>obtNumeroAfiliado()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado</code>
 +
|}
  
:SI = selecciona modo condensado;
+
=== Bono ===
:Imprime el texto 'Cliente : ';
+
:Busca en la tabla <tt>operacion_valor</tt> 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.
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <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>
 +
|-
 +
| <code>obtNombreBono()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=1]/valor/entidad/nombre</code>
 +
|-
 +
| <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>
 +
|}
  
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>
+
=== Cheque / CH Terceros ===
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
! Método !! Función !! Tabla !! Atributo
:Imprime 30 caracteres del Apellido del Cliente asociado a la Factura,
+
|-
::si tiene más de 30 caracteres: los corta,
+
| <code>obtDescuentoChequeTerceros()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>operacionesValor[valor/tipoValor/id=5 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
::si tiene menos: completa a derecha con espacios.
+
|-
 +
| <code>obtImporteFormaPagoChequeTerceros()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal</code>
 +
|-
 +
| <code>obtImporteFormaPagoChequeTercerosVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>sum(valor[tipoValor/id=5 and anulacion!='A']/montoPrincipal)</code>
 +
|-
 +
| <code>obtNombreFormaPagoChequeTerceros()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor[tipoValor/id=5]/entidad/nombre</code>
 +
|-
 +
| <code>obtRecargoChequeTerceros()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>operacionesValor[valor/tipoValor/id=5 and valor/anulacion!='A']/valor/recargoFPPlantilla</code>
 +
|}
  
 +
=== Cliente ===
  
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>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtApellidoCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/apellido</code>
 +
|-
 +
| <code>obtCodigoCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/codigo</code>
 +
|-
 +
| <code>obtCuitCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/cuit</code>
 +
|-
 +
| <code>obtDireccion1Cliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/direcciones[1]</code>
 +
|-
 +
| <code>obtEntreCallesCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/entreCalle</code>
 +
|-
 +
| <code>obtNombreCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/nombre</code>
 +
|-
 +
| <code>obtObservacionCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacion</code>
 +
|-
 +
| <code>obtObservacionesCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observaciones</code>
 +
|-
 +
| <code>obtObservacionesCliente1raLinea()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacionesCliente1raLinea</code>
 +
|-
 +
| <code>obtObservacionesCliente2daLinea()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacionesCliente2daLinea</code>
 +
|-
 +
| <code>obtObservacionesCliente3raLinea()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/observacionesCliente3raLinea</code>
 +
|-
 +
| <code>obtRazonSocialCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/razonSocial</code>
 +
|-
 +
| <code>obtSituacionIvaCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/objSituacionIVA/nombre</code>
 +
|-
 +
| <code>obtTelefonoCliente()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidad/telefonosConcatenados</code>
 +
|}
  
:SI = selecciona modo condensado;
+
==== Cliente (eventual) ====
: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.
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <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>
 +
|}
  
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>
+
==== Cliente (secundario) ====
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
! Método !! Función !! Tabla !! Atributo
:Imprime 30 caracteres con los Teléfonos del Cliente asociado la Factura,
+
|-
::si ocupan más de 30 caracteres: los corta,
+
| <code>obtNombreClienteSecundario()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/entidadSecundaria/nombre</code>
::si ocupan menos: completa a derecha con espacios.
+
|}
  
 +
==== Cliente Envío ====
  
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>,'>  
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtDireccionEnvio()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/direccionSeleccionada</code>
 +
|-
 +
| <code>obtObservacionEnvio()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/observaciones</code>
 +
|-
 +
| <code>obtTelefonoEnvio()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/telefonoSeleccionado</code>
 +
|}
  
<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>
+
=== Convenio ===
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Busca en la tabla <tt>operacion</tt> la Receta;
+
! Método !! Función !! Tabla !! Atributo
:Imprime la concatenación de los textos:
+
|-
::- 'Afiliado: '
+
| <code>obtDescuentoConvenio()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>operacionesValor[valor/tipoValor/id=211 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
::- 20 caracteres del Nombre del Afiliado de la Receta,
+
|-
:::si tiene más de 20 caracteres: los corta,
+
| <code>obtDtoGeneralConvenio()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=211]/valor/descuentoGeneral</code>
:::si tiene menos: completa a derecha con espacios.
+
|-
::- 'Nro. '
+
| <code>obtImporteFormaPagoConvenio()</code> || <code>&lt;%=</code> || operacion_valor || <code>sum(valor[tipoValor/id=211]/montoPrincipal)</code>
::- 12 caracteres del Número del Afiliado de la Receta,
+
|-
:::si tiene más de 12 caracteres: los corta,
+
| <code>obtImporteFormaPagoConvenioVenta()</code> || <code>&lt;%&amp;</code> || operacionesValor || <code>valor[tipoValor/id=211 and anulacion!='A']/montoPrincipal</code>
:::si tiene menos: completa a izquierda con espacios.
+
|-
 +
| <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>
 +
|}
  
 +
=== Cuenta Corriente ===
  
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>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtDescuentoCtaCte()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=22 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
 +
|-
 +
| <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>
 +
|}
  
:SI = selecciona modo condensado;
+
==== Cuota Cuenta Corriente ====
: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.
+
  
 +
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <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>
 +
|}
  
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>
+
=== Efectivo ===
  
:DC2 = cancela modo condensado;
+
{| class="wikitable" style="width:100%"
:ESC SO = selecciona expandido por una línea;
+
! Método !! Función !! Tabla !! Atributo
:Imprime el texto ' FACTURA ';
+
|-
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
| <code>obtDescuentoEfectivo()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/descuentoFPPlantilla</code>
:Imprime la Letra de la Factura (1 caracter);
+
|-
:Imprime el texto ' - '
+
| <code>obtImporteFormaPagoEfectivo()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal</code>
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
|-
:Imprime 13 caracteres del Número de la Factura,
+
| <code>obtImporteFormaPagoEfectivoVenta()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/montoPrincipal</code>
::si tiene más de 13 caracteres: los corta,
+
|-
::si tiene menos: completa a derecha con espacios.
+
| <code>obtRecargoEfectivo()</code> || <code>&lt;%@</code> || operacion || <code>operacionesValor[valor/tipoValor/id=3 and valor/anulacion!='A']/valor/recargoFPPlantilla</code>
 +
|}
  
 +
=== Factura Electrónica (Referencias Electrónicas) ===
  
17) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtFechaAdicional()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaAdicional</code>
 +
|-
 +
| <code>obtFechaReferenciaElectronica()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaAutorizacion</code>
 +
|-
 +
| <code>obtFechaVencimiento()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/fechaVencimiento</code>
 +
|-
 +
| <code>obtFormaAutorizacionFE()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/formaAutorizacion</code>
 +
|-
 +
| <code>obtMarcaCAEA()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/marcaCAEA</code>
 +
|-
 +
| <code>obtReferenciaElectronica()</code> || <code>&lt;%=</code> || operacion_valor || <code>valor/numeroAutorizacion</code>
 +
|}
  
:DC2 = cancela el modo condensado;
+
Ejemplo de uso para C.A.E. / C.A.E.A.:
:Imprime el texto '------------------------------------------'.
+
<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>
  
 +
=== Farmacia (Nodo) ===
  
18) <span style="color:#0000FF">\u000F</span> Cant Descripcion P Unit. P.Total
+
{| 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>
 +
|}
  
:SI = selecciona modo condensado;
+
=== Producto / Ítem ===
:Imprime el texto 'Cant Descripcion P Unit. P.Total'.
+
  
 +
{| 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>
 +
|}
  
19) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
Descuentos de ítem (propiedades directas, sin método):
  
:DC2 = cancela el modo condensado;
+
{| class="wikitable"
:Imprime el texto '------------------------------------------'.
+
! Propiedad !! Descripción
 +
|-
 +
| <code>descuento</code> || Descuento de ítem
 +
|-
 +
| <code>descuentoAfiliado</code> || Descuento Automático/Forzado
 +
|-
 +
| <code>descuentoGeneral</code> || Descuento General (manual)
 +
|}
  
 +
=== Prototipos / Datos Adicionales ===
  
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>,'
+
{| class="wikitable" style="width:100%"
 +
! Método / Propiedad !! Contexto !! Descripción
 +
|-
 +
| <code>obtCabeceraDatoCodificado()</code> || <code>&lt;%+</code> || Dato codificado de prototipos de cabecera
 +
|-
 +
| <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
 +
|}
  
<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>,'>
+
=== Puesto de Venta ===
  
<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>
+
{| class="wikitable" style="width:100%"
 +
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtPuestoVenta()</code> || <code>&lt;%=</code> || operacion_valor || <code>operacion/puestoVenta/nombre</code>
 +
|}
  
:SI = selecciona modo condensado;
+
=== Receta / Cobertura / Obra Social ===
: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.
+
  
 +
{| 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>
 +
|}
  
21) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
==== Convenios de Ítem ====
  
:DC2 = cancela el modo condensado;
+
{| class="wikitable" style="width:100%"
:Imprime el texto '------------------------------------------'.
+
! Método !! Función !! Tabla !! Atributo
 +
|-
 +
| <code>obtNombre1erConvenio()</code> || <code>&lt;%#</code> || item_valor || <code>itemConvenio1/valor/subTipoValor/nombre</code>
 +
|-
 +
| <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 ====
  
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>
+
{| 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)
 +
|}
  
:DC2 = cancela modo condensado;
+
Ejemplo de uso con impresión opcional (controlada por parámetro):
:ESC SO = selecciona expandido por una línea;
+
<pre>
:Imprime el texto 'TOTAL ';
+
<%#concat(
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
  format:datoCondicional(
:Imprime 12 caracteres del Monto convertido a texto del subTipoValorConcepto tipo Total Neto de la Factura,
+
    (format:param('IMPRIMIR_DATOS_PRESCRIPCION')='true') and
::si tiene más de 12 caracteres: los corta,
+
    (format:coalesce(productoPrescrito/descripcion,prescripcionMedica)!=),
::si tiene menos: completa a izquierda con espacios;
+
    format:concatenar(2,concat(
:ESC SI = selecciona modo condensado.
+
      format:rpad(format:integer(cantidadPrescripta),2),'|',
 +
      format:rpad(format:coalesce(productoPrescrito/descripcion,prescripcionMedica),30)
 +
    ))
 +
  )
 +
)%>
 +
</pre>
  
 +
=== Recargos y Descuentos de Tarjeta (DtoRgo) ===
  
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>
+
{| 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 '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.
+
  
 +
{| 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>
 +
|}
  
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>
+
=== Valor / Comprobante ===
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Imprime el texto 'CUENTA CORRIENTE ';
+
! Método !! Función !! Tabla !! Atributo
: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,
+
| <code>obtDtoGeneral()</code> || <code>&lt;%@</code> || operacion || <code>comprobante/descuentoGeneral</code>
::si tiene más de 10 caracteres: los corta,
+
|-
::si tiene menos: completa a izquierda 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 ===
  
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>
+
{| 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 '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.
+
  
 +
Sin método <code>obt*</code> definido — acceso directo por XPath.
  
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>
+
{| 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
 +
|}
  
: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.
+
  
 +
== 6. Funciones JXPath ==
  
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>
+
Funciones XPath estándar disponibles en las expresiones de plantilla.
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Imprime el texto 'CHEQUE TERCEROS ';
+
! Función !! Descripción
: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,
+
| <code>abs(object)</code> || Devuelve el valor absoluto del argumento numérico. ''(Plantillas v4)''
::si tiene más de 10 caracteres: los corta,
+
|-
::si tiene menos: completa a izquierda 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.
 +
|}
  
 +
----
  
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>
+
== 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.
: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.
+
  
 +
{| 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
 +
|}
  
29) <span style="color:#0000FF">\u0012</span><nowiki>------------------------------------------</nowiki>
+
----
  
:DC2 = cancela el modo condensado;
+
== 8. Ejemplos y Prototipos ==
:Imprime el texto '------------------------------------------'.
+
  
 +
=== Ajuste de renglones condicionales ===
  
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>
+
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>:
  
:SI = selecciona modo condensado;
+
{| class="wikitable" style="width:100%"
:Imprime el texto 'Exento : ';
+
! Fuera del Concat !! Dentro del Concat
:Busca en la tabla <tt>operacion_valor</tt> la Factura;
+
|-
:Imprime la concatenación de los textos:
+
| <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>
::- 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.


  • <%= --------- %>
-va a buscar a la tabla operacion_valor.


  • <%& --------- %>
-va a iterar sobre la tabla operacion_valor.


  • <%@ --------- %>
-va a buscar a la tabla operacion.


  • <%# --------- %>
-va a iterar sobre la tabla item_valor.


  • format: lpad / rpad (texto a imprimir, longitud a rellenar, caracter de relleno)
rellena a izquierda / derecha.
-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: longDate (fecha)
-devuelve la fecha en el formato longDate definido en application.


  • format: string (número')
-convierte el número en string.


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
Farmacia Razón Social <%= operacion_valor valor/nodoCreacion/razonSocial
Farmacia Razón Social 2 <%= operacion_valor valor/nodoCreacion/razonSocialLinea2
Farmacia Dirección <%= operacion_valor valor/nodoCreacion/direcciones[1]
Farmacia Tel. <%= operacion_valor valor/nodoCreacion/telefonosConcatenados
Farmacia C.U.I.T. <%= operacion_valor valor/nodoCreacion/cuit
Farmacia I.V.A. <%= operacion_valor valor/nodoCreacion/objSituacionIva/nombre
Farmacia I.Br. <%= operacion_valor valor/nodoCreacion/ingresosBrutos
Cliente Nombre <%= operacion_valor valor/entidad/nombre
Cliente Apellido <%= operacion_valor valor/entidad/apellido
Cliente Dirección <%= operacion_valor valor/entidad/direcciones[1]
Cliente Teléfono <%= operacion_valor valor/entidad/telefonosConcatenados
Afiliado Nombre <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado
Afiliado Nro <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado
Valor Fecha <%= operacion_valor valor/fechaCreacion
Valor Letra <%= operacion_valor valor/codificacion
Producto Nombre <%# item_valor producto/nombreCorto
Producto Descuento <%# item_valor descuentoGeneral
Receta O. Social <%# item_valor sum(itemsReceta/precioUnitario)
Valor TOTAL <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto
Valor OBRAS SOCIALES <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal
Valor CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal
Valor CUOTA CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal
Valor TARJETA <%@ operacion operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal
Valor CHEQUE TERCEROS <%@ operacion operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal
Valor EFECTIVO <%@ operacion operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal
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.


  • <%= --------- %>
-va a buscar a la tabla operacion_valor.


  • <%& --------- %>
-va a iterar sobre la tabla operacion_valor.


  • <%@ --------- %>
-va a buscar a la tabla operacion.


  • <%# --------- %>
-va a iterar sobre la tabla item_valor.


  • format: lpad / rpad (texto a imprimir, longitud a rellenar, caracter de relleno)
rellena a izquierda / derecha.
-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: longDate (fecha)
-devuelve la fecha en el formato longDate definido en application.


  • format: string (número')
-convierte el número en string.


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
Farmacia Razón Social <%= operacion_valor valor/nodoCreacion/razonSocial
Farmacia Razón Social 2 <%= operacion_valor valor/nodoCreacion/razonSocialLinea2
Farmacia Dirección <%= operacion_valor valor/nodoCreacion/direcciones[1]
Farmacia Tel. <%= operacion_valor valor/nodoCreacion/telefonosConcatenados
Farmacia C.U.I.T. <%= operacion_valor valor/nodoCreacion/cuit
Farmacia I.V.A. <%= operacion_valor valor/nodoCreacion/objSituacionIva/nombre
Farmacia I.Br. <%= operacion_valor valor/nodoCreacion/ingresosBrutos
Cliente Nombre <%= operacion_valor valor/entidad/nombre
Cliente Apellido <%= operacion_valor valor/entidad/apellido
Cliente Dirección <%= operacion_valor valor/entidad/direcciones[1]
Cliente Teléfono <%= operacion_valor valor/entidad/telefonosConcatenados
Afiliado Nombre <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/nombreAfiliado
Afiliado Nro <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/numeroAfiliado
Valor Fecha <%= operacion_valor valor/fechaCreacion
Valor Letra <%= operacion_valor valor/codificacion
Producto Nombre <%# item_valor producto/nombreCorto
Producto Descuento <%# item_valor descuentoGeneral
Receta O. Social <%# item_valor sum(itemsReceta/precioUnitario)
Valor TOTAL <%= operacion_valor valor/valoresConcepto[subTipoValorCpto/concepto/id=501]/monto
Valor OBRAS SOCIALES <%@ operacion operacionesValor[valor/tipoValor/id=2]/valor/montoPrincipal
Valor CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=22]/valor/montoPrincipal
Valor CUOTA CUENTA CORRIENTE <%@ operacion operacionesValor[valor/tipoValor/id=21]/valor/montoPrincipal
Valor TARJETA <%@ operacion operacionesValor[valor/tipoValor/id=9]/valor/montoPrincipal
Valor CHEQUE TERCEROS <%@ operacion operacionesValor[valor/tipoValor/id=5]/valor/montoPrincipal
Valor EFECTIVO <%@ operacion operacionesValor[valor/tipoValor/id=3]/valor/montoPrincipal
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.