# Acciones

> Los paquetes con nombre de etiquetas, reportes, acciones de Logic y filas de base de datos que una corrida emite en el Arranque o en la Finalización, sus comandos, las asignaciones de marcador de una etiqueta, las columnas de una fila de base de datos, y cómo los selecciona un procedimiento.

Una **acción** es un paquete con nombre de documentos que una corrida emite: dentro de ella, un
**comando** por emisión, cada uno diciendo qué sale (una etiqueta, un reporte, la ejecución de una
acción de Logic o una fila en una base de datos de la fábrica), cuándo (en el Arranque o en la
Finalización), con qué plantilla de la biblioteca de la estación, qué acción de Logic o qué tabla de
base de datos y, en la Finalización, para qué veredictos. Un procedimiento selecciona acciones enteras, así que un paquete
escrito una vez sirve a todo procedimiento que lo emite, y corregir un comando es una sola edición en
vez de una por procedimiento. Las acciones viven en Process > Modelos > modelo > Preparación >
**Acciones**. Crearlas, quitarlas y editar el nombre de una acción, sus comandos y sus asignaciones
dependen todos del mismo permiso **Editar recetas y evaluaciones**, y las páginas lo dicen ("Cambiar
las acciones requiere el permiso “Editar recetas y evaluaciones”.").

## La carpeta Acciones {#the-actions-folder}

Al seleccionar la fila **Acciones** se abre una página distinta de las demás carpetas de Preparación:
una lista de las acciones del modelo junto a la que esté elegida en ella, porque una acción se lee
contra sus hermanas. El orden de la lista es el orden en que todo procedimiento emite las acciones,
así que los verbos de fila mueven una acción y nunca un comando. La página carga las dos bibliotecas
de la estación (plantillas de etiqueta y diseños de reporte) para juzgar si está lista; cuando una no
se puede cargar, un aviso dice "No se pudieron cargar las plantillas de etiqueta globales: …" o "No se
pudieron cargar los reportes globales: …".

| Columna | Qué muestra |
| --- | --- |
| **#** | El lugar de la acción en la lista. |
| **Nombre** | Editable en el sitio, confirmado al salir de la celda. Un nombre en blanco se rechaza con "Una acción necesita un nombre de explotación." |
| **Comandos** | Cuántos comandos, y después qué emiten: "0 · Todavía ninguno", o "2 · Etiqueta en Arranque, Etiqueta y reporte en Finalización", con "Acción de Logic en Finalización" (o "2 acciones de Logic en Arranque") para los comandos de acción de Logic y "Fila de base de datos en Finalización" (o "2 filas de base de datos en Arranque") para los comandos de fila de base de datos. La información emergente los lista uno por línea, como `Etiqueta en Finalización · <plantilla>`, un comando de acción de Logic con el nombre de la acción, o "sin acción de Logic" mientras no se haya elegido ninguna, y un comando de fila de base de datos con `<tabla> a través de <dispositivo>`, o "sin tabla" mientras no se haya elegido ninguna. |
| **Estado** | **Lista**, o **Revisión** cuando a la acción o a alguno de sus comandos le falta algo. |
| Acciones de fila | **Subir la acción**, **Bajar la acción**, **Quitar la acción** (tinta de peligro; pregunta "Eliminar la acción": "Esto elimina la acción y sus comandos."). |

La columna que hay junto a la lista se encabeza **Acción** y muestra el **Nombre** de la acción
elegida (editable aquí también), sus **Comandos** como líneas de solo lectura con una píldora Lista /
Revisión cada una ("Los comandos se editan en la página propia de esta acción, en la columna, en este
orden."), y un aviso **Necesita revisión** que lista todo lo que falta. Sin ninguna acción, la lista
dice "Sin acciones. Agregue una cuando un procedimiento de este modelo deba emitir etiquetas o reportes, ejecutar acciones de Logic o escribir filas de base de datos."; sin ninguna elegida, la columna dice "Seleccione una acción para leer lo que emite. Sus
comandos se editan en su propia página, en la columna."

| Comando | Qué hace | Atenuado cuando (situación) | No se dibuja cuando (rol) |
| --- | --- | --- | --- |
| **Acción** (barra de detalle, con la carpeta seleccionada; botón derecho **Agregar acción**) | Agrega `Acción <n>` (el primer número que ninguna acción del modelo usa ya), vacía, al final de la lista, y la elige en la columna, desplazada hasta quedar a la vista. | Cualquier unidad tiene una corrida, o el runtime está detenido. | Sin Editar recetas y evaluaciones. |
| Subir / Bajar / Quitar la acción (acciones de fila) | Reordenar o eliminar. | Sin Gestionar Process, bajo el bloqueo de ingeniería, o mientras el runtime está detenido (una presión reporta el motivo en el registro de acciones). | Siempre se dibujan. |

## La página de la acción {#the-actions-page}

Seleccionar una acción en el árbol la abre: el encabezado con el nombre de la acción y una píldora que
cuenta sus comandos, los avisos de permiso y de biblioteca, una tarjeta **Acción** con el campo
**Nombre** (confirmado al salir; en blanco se rechaza), y la lista **Comandos** junto al comando
elegido en ella.

| Comando | Qué hace | Atenuado cuando (situación) | No se dibuja cuando (rol) |
| --- | --- | --- | --- |
| **Comando** (barra de detalle, con la acción seleccionada; botón derecho **Agregar comando**) | Agrega un comando nacido como **Etiqueta** en la **Finalización** para las corridas **Conforme** y todavía sin plantilla, al final de la lista, y lo elige en la columna, desplazado hasta quedar a la vista. | Cualquier unidad tiene una corrida, o el runtime está detenido. | Sin Editar recetas y evaluaciones. |
| **Quitar la acción** (grupo de peligro; botón derecho; la X de la tarjeta de la página de la carpeta) | Elimina la acción y sus comandos después de "Eliminar la acción". Todo procedimiento que la seleccionaba deja de emitirla. | Lo mismo. | Sin Editar recetas y evaluaciones. |

### La lista de Comandos {#the-commands-list}

| Columna | Qué muestra |
| --- | --- |
| **#** | El lugar del comando en la acción, que es su orden de emisión dentro de ella. |
| **Emite** | **Etiqueta**, **Reporte**, **Acción de Logic** o **Fila de base de datos**. |
| **Disparador** | **Arranque** o **Finalización**. |
| **Plantilla o acción** | Un selector sobre cuatro listas: una fila de etiqueta ofrece las plantillas de etiqueta ("(elija una plantilla)"), una fila de reporte los diseños de reporte ("(elija un reporte)"), una fila de acción de Logic las acciones de Logic de la estación ("(elija una acción de Logic)"), cada una bajo las carpetas en que la archiva el árbol de Logic, y una desactivada marcada como "`<nombre>` (desactivada)", y una fila de base de datos los dispositivos Database del Connector ("(elija un dispositivo Database)"). Una referencia que la lista ya no tiene conserva su lugar, desactivada, como "Plantilla ausente · `<id>`", "Reporte ausente · `<id>`", "Acción de Logic ausente · `<id>`" o "Dispositivo ausente · `<id>`", así que un comando degradado no se lee como uno sin configurar. |
| **Veredictos** | "No se usa en el arranque" para un comando de Arranque; si no, los veredictos marcados ("OK, NOK") o "Ninguno seleccionado". |
| **Marcadores** | "No lo usa un reporte", "No lo usa una acción de Logic"; para una etiqueta: "Sin plantilla", "Falta la plantilla", "Sin comandos" (la plantilla todavía no tiene comandos de impresora), "Ilegibles", "Fija, sin marcadores", o "`<bound>` de `<total>` asignados"; para una fila de base de datos, las columnas que tienen valor: "Sin tabla" o "`<n>` de `<total>` columnas". |
| **Estado** | **Lista** o **Revisión**. |
| Acciones de fila | **Subir el comando**, **Bajar el comando**, **Quitar el comando** ("Eliminar el comando": "Esto quita el comando de la acción."). |

Sin ningún comando la lista dice "Sin comandos. Agregue uno cuando esta acción deba emitir una
etiqueta o un reporte."; sin ninguno elegido la columna dice "Seleccione un comando para editarlo
entero en un solo sitio. Agregue uno desde la barra de arriba cuando esta acción deba emitir una
etiqueta o un reporte."

### El comando entero {#the-command-in-full}

La columna abre el comando elegido, encabezado `Comando <n> · <Clase> (<Disparador>)`. Muestra solo
los campos que le pertenecen a la clase elegida.

| Campo | Qué es | Valores / predeterminado | Efecto (la línea bajo el campo) |
| --- | --- | --- | --- |
| **Emite** | Qué saca el comando. | Etiqueta / Reporte / Acción de Logic / Fila de base de datos; Etiqueta al crearlo. | "Imprime una etiqueta desde una plantilla de comandos, en la cola que la unidad elige para las etiquetas en este momento.", "Publica el PDF de la corrida desde un reporte de la biblioteca de la estación.", "Ejecuta una acción de Logic de la estación, en el carril de acciones." o "Agrega una fila a una tabla de una base de datos de la fábrica, a través de un dispositivo Database del Connector." Cambiar la clase reasienta el filtro de veredictos en el predeterminado de la clase nueva (Etiqueta: OK; Reporte, Acción de Logic y Fila de base de datos: todos los veredictos). |
| **Disparador** | En qué punto de una corrida sale. | Arranque / Finalización; Finalización al crearlo. | Etiqueta en Arranque: "Se genera en cuanto arranca la corrida, antes de que exista ningún resultado."; etiqueta en la Finalización: "Se genera cuando termina la corrida, para los veredictos finales marcados abajo."; reporte en Arranque: "Se publica en cuanto arranca la corrida, así que las secciones que todavía no tienen nada registrado se dejan fuera."; reporte en Finalización: "Se publica cuando termina la corrida, para los veredictos finales marcados abajo."; acción de Logic en el Arranque: "Se pone en cola en cuanto arranca la corrida. La corrida no la espera."; acción de Logic en la Finalización: "Se ejecuta cuando la corrida ya está guardada, para los veredictos finales marcados abajo, y lee la corrida terminada en LastRun."; fila de base de datos en el Arranque: "Se escribe en cuanto arranca la corrida, con los metadatos que fijó. La corrida no espera a la base de datos."; fila de base de datos en la Finalización: "Se escribe cuando la corrida ya está guardada, para los veredictos finales marcados abajo, con la corrida terminada. La corrida no espera a la base de datos." |
| **Acción de Logic** (comandos de acción de Logic) | La acción de la Logic de la estación que ejecuta el comando. | "(elija una acción de Logic)" o una acción; ninguna al crearlo. | Leyenda: "La acción de Logic que ejecuta este comando. Se nombra por su identidad, así que renombrar la acción la mantiene aquí." Efecto: "Elija una acción: hasta entonces este comando no ejecuta nada.", "La acción de Logic referenciada ya no existe: este comando no ejecuta nada.", "Ejecuta `<acción>` en el carril de acciones." o "`<acción>` está desactivada: cada vez que este comando se dispara, la acción se niega a ejecutarse y registra el motivo." |
| **Reporte** (comandos de reporte) | El diseño de la biblioteca de la estación con el que se publica el PDF. | "(elija un reporte)" o un diseño; ninguno al crearlo. | "No se publica ningún PDF.", "El reporte referenciado no está en la biblioteca.", "Publica un PDF cuando arranca una corrida." / "… cuando termina una corrida.", con "y lo manda a la cola de impresión de este comando en la Unidad." cuando la impresión está encendida. |
| **Impresión del reporte: Imprimir automáticamente** (se muestra en cuanto un diseño resuelve) | Si el PDF publicado se manda además a la cola de reportes de la unidad para este disparador. | Apagado al crearlo. | Leyenda: "El PDF se publica en cualquier caso, en el punto de la corrida que marca este comando. La impresión solo decide si además se envía a una cola." Encendido: "El PDF va además a la cola de impresión de este comando en la unidad. Elija esa cola en la pantalla Impresoras." Apagado: "El PDF se publica en la carpeta de reportes y no va más allá." |
| **Copia del reporte: Conservarla en la corrida** (se muestra en cuanto un diseño resuelve) | Si el PDF terminado se guarda dentro del archivo de la corrida, para que un reenvío reemita esos bytes exactos después de que el diseño se edite o se elimine. | Apagado al crearlo. | Leyenda: "Lo que la corrida guarda del documento, que es lo que enviará un reenvío posterior." Encendido: "Cada corrida lleva el PDF terminado, unos cientos de KB, y un reenvío envía ese documento exacto." Apagado: "Cada corrida apunta al PDF publicado, así que lo que envía un reenvío es una composición posterior." |
| **Plantilla global** (comandos de etiqueta) | La plantilla de etiqueta de la biblioteca de la estación que imprime el comando, cuyos marcadores asigna más abajo. | "(elija una plantilla)" o una plantilla; ninguna al crearlo. Elegir una crea una fila de asignación para cada marcador que la plantilla declara y que el comando todavía no asigna. | "Elija una plantilla: sus marcadores son lo que llena este comando.", "La plantilla referenciada ya no está en la biblioteca.", "Esta plantilla todavía no tiene comandos de impresora, así que no hay nada que enviar.", "Los marcadores de esta plantilla no se pueden leer.", "Sin marcadores: cada corrida que coincida envía los mismos bytes. La unidad elige la cola de impresión." o "`<n>` marcadores, cada uno vinculado abajo a un valor congelado para esta corrida. La unidad elige la cola de impresión." |
| **Emitir para el veredicto final** (solo en la Finalización) | Qué veredictos terminales activan el comando. | Cuatro casillas: **Conforme**, **No conforme**, **Indeterminado**, **Sin veredicto**. Una etiqueta empieza solo en Conforme; un reporte empieza con las cuatro, porque un procedimiento que no juzga nada termina sin veredicto y tiene que producir su documento igual, y también una acción de Logic, porque una corrida enviada a otro sistema no puede saltarse una pieza No conforme sin que nadie lo diga (el script puede leer el veredicto por sí mismo). | El comando dispara solo para una corrida que termina en un veredicto marcado. Un comando de Arranque todavía no tiene veredicto y no lee ningún filtro. |

Un aviso **Necesita revisión** bajo los campos lista todo lo que le falta al comando (véase Estar
lista, más abajo).

La cola a la que va un documento impreso no es un campo del comando: se resuelve por la clase y el
disparador del comando a través de las cuatro ranuras de impresora de la unidad, así que dos comandos
de la misma combinación comparten la impresora a propósito. Véase [Impresoras](process-printers).
Un comando de acción de Logic no imprime nada y no tiene ranura.

### Comandos de acción de Logic {#logic-action-commands}

Un comando de acción de Logic es el enganche que una corrida deja a quien programa la estación: en
un límite, ejecuta una acción de [Logic](logic-actions), que puede enviar la corrida a otro sistema
por cualquier driver, encender una lámpara o poner en cero un contador. La acción se elige por su
identidad, así que renombrarla en la página Logic no cambia nada aquí; su propio editor lista este
comando en su tarjeta **Usado por**.

| Aspecto | En el Arranque | En la Finalización |
| --- | --- | --- |
| Cuándo se ejecuta | Se pone en cola en el carril de acciones en cuanto arranca la corrida, antes de las etiquetas y los reportes del mismo momento. | Cuando la corrida ya está guardada y el [LastRun](process-addresses#lastrun) de la unidad la tiene. |
| Qué espera la corrida | Nada: la corrida sigue, sea la acción lenta, rechazada o fallida. | Nada: la corrida ya terminó. |
| Qué corridas la disparan | Cada corrida que arranca. | Cada corrida que termina en un veredicto marcado, salvo una que termina fallida, que no dispara nada. |
| Qué lee la acción de la corrida | `Procedure.Metadata.<Field>`, los valores que congeló la corrida que arranca. | `LastRun.*`: la identidad, el estado, el veredicto, los instantes, los metadatos y el resultado de cada criterio de la corrida. |

Varios comandos de acción de Logic del mismo momento se ejecutan uno tras otro, en el orden de
emisión de abajo, y ninguno se salta porque uno anterior siga corriendo: cada corrida tiene el suyo.
Lo que una corrida hace con la acción se lee en la página de la acción: su riel ÚLTIMA EJECUCIÓN
nombra la corrida como `Process · <unit> · <action>`, con el error y las escrituras rechazadas cuando
las hubo, y el diario técnico los guarda; no se escribe nada en el archivo de la corrida. Una acción
eliminada después de configurar el comando se salta y queda un aviso en el diario técnico; una
desactivada se niega a ejecutarse y registra el motivo.

### Comandos de fila de base de datos {#database-row-commands}

Un comando **Fila de base de datos** agrega una fila a una tabla de una base de datos de la fábrica,
la tabla de trazabilidad que ya lleva un MES: el número de serie, el veredicto y los valores medidos
de la pieza, con los nombres de columna que esa tabla ya tiene. La fila pasa por un dispositivo del
driver [Database](driver-database) de la página Connector, que guarda la conexión y el inicio de
sesión, así que el comando no nombra ningún servidor ni guarda ninguna contraseña. La tabla ya
existe: la estación nunca crea ni cambia ninguna, solo le agrega filas.

| Campo | Qué es | Valores / predeterminado | Efecto (la línea bajo el campo) |
| --- | --- | --- | --- |
| **Dispositivo Database** | El dispositivo por el que pasa la fila. | "(elija un dispositivo Database)" o un dispositivo Database del Connector; ninguno al crearlo. | Leyenda: "El dispositivo Database del Connector por el que pasa la fila. Guarda la conexión y el inicio de sesión, así que aquí no se escribe ninguno." Efecto: "Elija un dispositivo: hasta entonces este comando no escribe nada.", "El dispositivo referenciado ya no existe: este comando no escribe nada." o "Escribe a través de `<device>`." |
| **Tabla de la base de datos** | La tabla a la que se agrega la fila. | "(elija una tabla)" o una tabla de la base de datos del dispositivo, leída a través del dispositivo mientras el comando está abierto: solo tablas base, con su esquema donde la conexión no lee ese esquema por defecto. Una tabla que la base de datos ya no lista conserva su lugar, desactivada, como "`<table>` (no está en la base de datos)". | Leyenda: "La tabla a la que se agrega la fila. Ya existe en la base de datos: la estación nunca crea ninguna." Efecto: "Elija una tabla: sus columnas se leen de la base de datos." hasta elegir una. Elegir una tabla lee sus columnas. |

Mientras se leen las tablas, la línea bajo el selector dice "Leyendo las tablas de la base de
datos…"; cuando no se pueden leer, dice por qué ("No se pudieron leer las tablas de `<device>`:
`<cause>`"), y una base de datos con más de 500 tablas dice "La base de datos tiene más tablas de las
que muestra la lista: se listan las primeras 500." Una fila de base de datos nace, como un reporte,
para todos los veredictos finales.

Bajo los campos, **Columnas de la tabla** lista una fila por columna de la tabla, en el orden de la
tabla, cada una con su tipo tal como lo escribe la base de datos y, donde la tabla rechaza una fila
sin valor en ella (la columna no admite un valor vacío, no tiene valor predeterminado y no es una
columna de identidad, autoincremental ni calculada), la etiqueta **Obligatoria en la tabla**. Cada
columna recibe un **Valor**; una columna a cargo de la base de datos queda fuera de la fila, así que
la base de datos la llena con su propio valor predeterminado.

| Valor | En el Arranque | En la Finalización | Viaja como |
| --- | --- | --- | --- |
| (a cargo de la base de datos) | Sí | Sí | Nada: la columna no se nombra en la fila |
| Texto fijo, escrito en **Texto que se escribe** | Sí | Sí | Texto, el mismo en cada fila |
| Metadatos · Campo del catálogo, con **Metadatos del catálogo** | Sí | Sí | Texto: el valor que la corrida fijó para ese campo |
| Corrida · Identificador, Procedimiento · Nombre, Unidad · Nombre, Unidad · Código, Corrida · Estado final, Corrida · Veredicto | No | Sí | Texto (`Completed` o `Aborted`; `Ok`, `Nok`, `Indeterminate` o `None`) |
| Corrida · Instante de inicio, Corrida · Instante de fin | No | Sí | Fecha y hora, en la hora local de la estación |
| Corrida · Duración (segundos) | No | Sí | Número |
| Corrida · Ciclos, Corrida · Ciclos NOK | No | Sí | Número entero |
| Criterio · Resultado, Criterio · Límites, con **Criterio** | No | Sí | Texto |
| Criterio · Cumple | No | Sí | Verdadero o falso |
| Criterio · Valor medido, Criterio · Valor más bajo, Criterio · Valor más alto, Criterio · Peor excursión | No | Sí | Número |
| Criterio · Ciclos NOK | No | Sí | Número entero |

Los valores en la Finalización son los que el [LastRun](process-addresses#lastrun) de la unidad sirve
a la Logic, un criterio plegado sobre cada ciclo en que se juzgó; un campo que la corrida no pidió, y
un criterio que no juzgó, no dan valor (NULL). **Volver a leer las columnas**, en el encabezado de la
lista, vuelve a leer las columnas de la tabla en la base de datos: una columna conserva el valor que
se le dio, una nueva entra en la lista sin ninguno, y una que la tabla ya no tiene sale de ella.

| Aspecto | En el Arranque | En la Finalización |
| --- | --- | --- |
| Cuándo sale la fila | En cuanto arranca la corrida, con los metadatos que la corrida fijó. | Cuando la corrida ya está guardada y el LastRun de la unidad la tiene. |
| Qué espera la corrida | Nada: la fila espera en la propia cola del dispositivo y la corrida sigue. | Nada: la corrida ya terminó. |
| Qué corridas la escriben | Toda corrida que arranca. | Toda corrida que termina en un veredicto marcado, salvo una que termina en falla, que no escribe nada. |

La fila es un único INSERT que nombra las columnas que tienen valor, cada valor un parámetro de su
propio tipo y nunca texto escrito en la sentencia, así que un número de serie con comillas o palabras
de SQL se guarda como el texto que es. La base de datos convierte cada valor al tipo de su columna
como convierte cualquier valor. Una base de datos que rechaza la fila, no responde en los 10 segundos
del driver o no se puede alcanzar solo avisa: la corrida no se ve afectada, el diario técnico graba
el rechazo, y el registro de la corrida conserva la fila con el rechazo y su motivo en el expediente
**Filas de base de datos** de [Históricos](histories-documents#database-rows). Nada se guarda para
enviarlo después; **Volver a enviar** ahí envía los mismos valores a mano. Varias filas de base de
datos de un mismo momento salen una tras otra, en el orden de emisión de abajo.

Lo que le falta a un comando de fila de base de datos entra en la lista de Estar lista de abajo, en
el orden en que se repara: "Elija un dispositivo Database.", "El dispositivo Database que nombra ya
no existe.", "El dispositivo que nombra, `<device>`, no es un dispositivo Database.", "Elija una
tabla.", "Dé un valor al menos a una columna: una fila sin columnas no se escribe.", "`<column>` es
obligatoria en la tabla y no tiene valor.", "`<column>`: este valor aún no existe en Arranque;
entonces solo existen un campo de metadatos o un texto fijo.", "`<column>`: seleccione un campo del
catálogo de metadatos de este modelo." y "`<column>`: seleccione un criterio de una de las
evaluaciones de este modelo." Lo que solo la base de datos puede decir se lee mientras el comando
está abierto en esta página, y entra ahí en la misma lista: "La tabla `<table>` ya no está en la
base de datos.", "`<column>` ya no es una columna de la tabla. Vuelva a leer las columnas.", "La
tabla tiene columnas que este comando todavía no leyó: `<columns>`. Vuelva a leer las columnas." y
"No se pudo leer la tabla en la base de datos: `<cause>`". Un procedimiento que selecciona la acción
dice lo que le falta para una columna: "La columna `<column>` lee un campo de metadatos que este
procedimiento no pide. Márquelo en Metadatos, más arriba.", "La columna `<column>` lee el resultado
de un criterio, y este procedimiento no juzga con ninguna evaluación." o "La columna `<column>` lee
un criterio que la evaluación de este procedimiento no declara."

### Marcadores {#markers}

Los marcadores son los campos `{{NAME}}` que una plantilla de etiqueta deja para que la corrida los
llene, así que esta sección se dibuja para un comando de etiqueta y para nada más. Su estado sigue a
la plantilla:

| Estado | Qué muestra la sección |
| --- | --- |
| Sin plantilla elegida | "Elija una plantilla para asignar sus marcadores." Con asignaciones guardadas de una plantilla anterior: "Las correspondencias guardadas se conservan mientras falte la plantilla." y sus nombres de marcador. |
| La plantilla ya no está en la biblioteca | "Plantilla no disponible", con la misma lista conservada. |
| La plantilla no tiene comandos de impresora | Un aviso: "“`<template>`” todavía no tiene comandos de impresora: no hay nada que enviar ni ningún marcador que asignar hasta que se escriban o se importen en Plantillas ▸ Etiquetas." |
| Los marcadores no se pueden leer | Un aviso "No se pueden leer los marcadores de “`<template>`”: `<error>`", y "Asignaciones guardadas conservadas. Repare o reemplace la plantilla antes de cambiar estos vínculos." |
| La plantilla no tiene ningún marcador | "Plantilla fija. Esta plantilla no tiene marcadores y manda los mismos bytes para toda corrida coincidente." |
| Se encontraron marcadores | Una fila por marcador, encabezada por el marcador y una píldora **Asignado** / **Obligatorio**, con los campos de abajo. |

| Campo | Qué es | Valores / predeterminado |
| --- | --- | --- |
| **Fuente de valor congelado** | El único valor de la corrida que se sustituye en el marcador. | "(sin asignar)" más las fuentes de la tabla de abajo. Un comando de Arranque lista solo las fuentes disponibles en el Arranque; uno de Finalización las lista todas. "Metadatos · Campo del catálogo" aparece solo cuando el catálogo de metadatos del modelo tiene campos, y las fuentes de criterio solo cuando alguna evaluación del modelo declara un criterio. Una fuente que el disparador actual no puede responder conserva su lugar, desactivada, como "… (no disponible para este comando)". Cambiar la fuente limpia el campo, el ciclo y el formato elegidos para la anterior. |
| **Metadatos del catálogo** (fuente Metadatos) | Qué campo del catálogo del modelo. | "(elija un campo del catálogo)", "Campo ausente · `<id>`" para un campo que ya no está, y después cada campo como "`<name>` · texto / número / secuencial". |
| **Criterio** (fuentes de criterio) | Qué criterio de qué evaluación del modelo. | "(elija un criterio)", "Criterio ausente · `<id>`", y después cada criterio como "`<evaluation>` · `<criterion or Criterion n>` · `<channel>`". |
| **Ciclo (empezando en 0)** (fuentes de criterio) | El resultado de qué ciclo. Nunca se sobreentiende: hay que escribirlo. | De 0 hasta el mayor conteo de ciclos que ejecuta cualquier procedimiento del modelo, menos uno; marcador de posición "obligatorio". Un número fuera de ese rango se rechaza bajo el campo. |
| **Formato del valor** (fuentes de fecha y hora) | Cómo se escribe el instante. | Fecha + hora de la estación (predeterminado), Fecha de la estación, Hora de la estación, Fecha + hora de la estación, ISO 8601. |
| **Decimales** (fuentes numéricas, y un campo de metadatos numérico) | Un número fijo de decimales. | De 0 a 9; marcador de posición "automático" (la preferencia propia de la estación). |
| **Borrar el formato no válido** | Un botón que se dibuja cuando una asignación lleva un formato que su fuente no puede usar (decimales en una fecha, un formato de fecha en un número, cualquiera de los dos en un texto). | Restablece el campo ofensor. |

Las fuentes, en el orden en que las lista el selector:

| Fuente | Disponible en el Arranque | Clase |
| --- | --- | --- |
| Metadatos · Campo del catálogo | Sí | Texto, o un número para un campo numérico |
| Modelo · Nombre, Modelo · Revisión, Unidad · Nombre, Unidad · Código, Procedimiento · Nombre, Procedimiento · Código, Corrida · Identificador | Sí | Texto |
| Corrida · Instante de inicio | Sí | Fecha y hora |
| Corrida · Estado (en el Arranque) / Corrida · Estado final (en la Finalización) | Sí | Texto |
| Corrida · Instante de fin | No | Fecha y hora |
| Corrida · Duración (segundos) | No | Número |
| Corrida · Veredicto, Corrida · Motivo de la terminación | No | Texto |
| Criterio · Nombre, Canal, Límites, Gravedad, Resultado, Mensaje de error, Canales afectados | No | Texto |
| Criterio · Instante de apertura de la ventana, Instante de cierre de la ventana | No | Fecha y hora |
| Criterio · Muestras evaluadas, Muestras fuera, Muestras no disponibles, Muestras no válidas, Peor excursión | No | Número |

Bajo las filas de marcador, **Marcadores eliminados** lista las asignaciones guardadas para marcadores
que la plantilla actual ya no declara ("`<n>` obsoletas"; "Estas correspondencias ya no existen en la
plantilla elegida y deben quitarse."), cada una con **Quitar la correspondencia obsoleta del
marcador**.

### Estar lista {#readiness}

Las píldoras Lista / Revisión de las dos páginas, y las filas que lista la página Validación, salen de
un solo juicio. A una acción sin ningún comando le falta uno: "Agregue un comando: esta acción todavía
no emite nada." A un comando le falta, en el orden en que se repara:

- "Seleccione al menos un veredicto de finalización." (un comando de Finalización sin ningún veredicto
  marcado)
- "Elija un reporte." / "El reporte seleccionado ya no existe."
- "Elija una acción de Logic." / "La acción de Logic que nombra ya no existe." / "La acción de Logic
  que nombra está desactivada, así que se rechaza cada vez que se dispara."
- "Elija una plantilla de etiqueta." / "La plantilla se borró o se eliminó; las correspondencias
  guardadas se conservan." / "La plantilla global seleccionada ya no existe."
- "La plantilla seleccionada todavía no tiene comandos de impresora; escríbalos o impórtelos antes de
  que una corrida llegue a este comando."
- "No se pueden leer los marcadores de la plantilla: `<error>`"
- "{{M}} necesita una fuente." / "{{M}} está asignado más de una vez."
- "{{M}}: elija una fuente", "esta fuente no está disponible en Arranque", "seleccione un campo del
  catálogo de metadatos de este modelo", "seleccione un criterio de una de las evaluaciones de este
  modelo", "fije un ciclo explícito, contando desde cero, de 0 a `<n>`", "quite los decimales de esta fuente de
  fecha y hora", "use el formato predeterminado para esta fuente numérica", "los decimales deben
  estar entre 0 y 9", "quite el formato numérico o de fecha de esta fuente de texto"
- "{{M}} se eliminó de la plantilla actual; quite su correspondencia guardada."

Un comando en revisión se ejecuta igual: en la emisión no se descarta nada, y un marcador que no
resuelve hace fallar esa etiqueta, como siempre. La pantalla de configuración es donde esto se
aprende, no la etiqueta impresa.

## Cómo selecciona acciones un procedimiento {#how-a-procedure-selects-actions}

La página de un procedimiento lleva la tarjeta **Acciones que emite este procedimiento** con una
píldora "`<n>` seleccionadas" y una casilla por acción del modelo, en el orden de la lista. Cada fila
muestra la línea de emisión de la acción ("Etiqueta en Arranque, Etiqueta y reporte en la
Finalización", o "Todavía no emite nada: esta acción no tiene comandos.") y, en cuanto se selecciona,
una píldora **Lista** o **Revisión**. Revisión lista lo que a este procedimiento le falta para los
marcadores de la acción, una observación por marcador, porque un marcador que se resuelve por corrida
resuelve solo donde el procedimiento tiene lo que nombra:

- "{{M}} lee un campo de metadatos que este procedimiento no pide. Márquelo en Metadatos, más arriba."
- "{{M}} lee el resultado de un criterio, y este procedimiento no juzga con ninguna evaluación."
- "{{M}} lee un criterio que la evaluación de este procedimiento no declara."
- "{{M}} lee el ciclo `<c>`, y este procedimiento ejecuta un único ciclo." / "… corre `<n>`."
- "La acción de Logic que nombra ya no existe." (un comando de acción de Logic de la acción, cuya
  acción se eliminó: el procedimiento no ejecutaría nada en su lugar)

La acción ni se oculta ni se rechaza: el procedimiento dice qué le falta, y el remedio está en la
misma página. Sin ninguna acción en el modelo la tarjeta dice "Todavía no hay acciones en este modelo.
Agregue algunas en Acciones del modelo."

### El orden de emisión {#the-emission-order}

En un límite de la corrida las acciones seleccionadas emiten en el orden de la lista del modelo, y
dentro de cada acción en su orden de comandos, filtrado al disparador de ese límite: una sola
respuesta para el modelo entero, nunca una por procedimiento. Los comandos de Arranque corren en
cuanto la corrida se materializó (después de que se reservaron los metadatos secuenciales), y los
comandos de Finalización en cuanto el veredicto terminal quedó sellado. Cada comando está aislado: una
falla no publica nada, no cambia nada de la corrida y nunca detiene a los comandos que van detrás. Un
reporte se nombra con la corrida y la acción que lo emitió; un renderizado posterior del mismo comando
reemplaza el documento de ese comando y nada más. Un comando de acción de Logic mantiene ese orden
entre los comandos de acción de Logic de su momento; cuándo se ejecuta se dice en
[Comandos de acción de Logic](#logic-action-commands). Qué graba cada emisión en la corrida, y cómo se
reemite desde Históricos, está en [Emitir etiquetas y reportes](process-emission).

## Qué no hace una acción {#what-an-action-does-not-do}

- No emite nada por sí sola. Un procedimiento tiene que seleccionarla, y una corrida de ese
  procedimiento tiene que llegar al límite.
- No verifica el procedimiento. Si un procedimiento pide el campo o juzga con la evaluación que
  nombra un marcador se declara en la página del procedimiento, junto a la selección.
- No elige la impresora. La cola es la de la unidad, por clase y disparador, en
  [Impresoras](process-printers).
- No edita plantillas. Los comandos de etiqueta y los diseños de reporte se escriben en
  [Plantillas](process-templates); la acción solo los nombra.
- No confirma que se haya impreso físicamente. Que la cola acepte es lo que graba una etiqueta o un
  reporte impreso, nunca la prueba de que salió papel.
- No espera a una acción de Logic ni la graba en la corrida. El resultado de la acción está en su
  propia página de Logic y en el diario técnico.
- No crea ni cambia ninguna tabla, y no guarda una fila rechazada para enviarla después. Una fila de
  base de datos va a una tabla que la base de datos de la fábrica ya tiene; un rechazo queda grabado
  en la corrida y se vuelve a enviar a mano desde Históricos.
