# Acciones

> Los paquetes con nombre de etiquetas, informes, acciones de Logic y filas de base de datos que emite un ensayo en el Arranque o en la Finalización, sus comandos, las correspondencias 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 documentación que emite un ensayo: dentro de ella, un
**comando** por emisión, cada uno diciendo qué sale (una etiqueta, un informe, 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
todos los procedimientos que lo emiten, y corregir un comando es una sola edición en lugar 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 correspondencias están controlados todos
por el mismo permiso **Editar recetas y evaluaciones**, y las páginas lo dicen ("Cambiar las acciones
exige 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 el que todos los procedimientos emiten 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 informe) para juzgar si está lista;
cuando una no se puede cargar, un aviso dice "No se han podido cargar las plantillas de etiqueta
globales: …" o "No se han podido cargar los informes 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 hay, y después qué emiten: "0 · Todavía ninguno", o "2 · Etiqueta en Arranque, Etiqueta e informe 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 también aquí), sus **Comandos** como líneas de solo lectura con una píldora Lista o 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. Añada una cuando un procedimiento de este modelo deba emitir etiquetas o informes, 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 **Añadir acción**) | Añade `Acción <n>` (el primer número que no use ya ninguna acción del modelo), vacía, al final de la lista, y la elige en la columna, desplazada hasta quedar a la vista. | Alguna unidad tiene un ensayo, o el runtime está detenido. | Sin Editar recetas y evaluaciones. |
| Subir / Bajar / Quitar la acción (acciones de fila) | Reordenan o eliminan. | Sin Gestionar Process, bajo el bloqueo de ingeniería, o mientras el runtime está detenido (una pulsación informa del motivo en el registro de acciones). | Se dibujan siempre. |

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

Al seleccionar una acción en el árbol se abre: la cabecera 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 del campo; 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 **Añadir comando**) | Añade un comando nacido como **Etiqueta** en **Finalización** para los ensayos **Conforme** y todavía sin plantilla, al final de la lista, y lo elige en la columna, desplazado hasta quedar a la vista. | Alguna unidad tiene un ensayo, 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 tras "Eliminar la acción". Todo procedimiento que la había seleccionado 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 la acción. |
| **Emite** | **Etiqueta**, **Informe**, **Acción de Logic** o **Fila de base de datos**. |
| **Disparador** | **Arranque** o **Finalización**. |
| **Plantilla o acción** | Un solo selector sobre cuatro listas: una fila de etiqueta ofrece las plantillas de etiqueta ("(elija una plantilla)"), una fila de informe los diseños de informe ("(elija un informe)"), 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 deshabilitada marcada como "`<nombre>` (deshabilitada)", 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 sitio, deshabilitada, como "Plantilla ausente · `<id>`", "Informe 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; en los demás casos los veredictos marcados ("Conforme, No conforme") o "Ninguno seleccionado". |
| **Marcadores** | "No lo usa un informe", "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 "`<vinculados>` de `<total>` vinculados"; 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. Añada uno cuando esta acción deba emitir una etiqueta o
un informe."; sin ninguno elegido, la columna dice "Seleccione un comando para editarlo entero en un
solo sitio. Añada uno desde la barra de arriba cuando esta acción deba emitir una etiqueta o un
informe."

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

La columna abre el comando elegido, encabezado `Comando <n> · <Tipo> (<Disparo>)`. Muestra solo los
campos que posee el tipo elegido.

| Campo | Qué es | Valores / valor por defecto | Efecto (la línea de debajo del campo) |
| --- | --- | --- | --- |
| **Emite** | Lo que saca el comando. | Etiqueta / Informe / 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 del ensayo desde un informe de la biblioteca de la estación.", "Ejecuta una acción de Logic de la estación, en la vía de acciones." o "Añade una fila a una tabla de una base de datos de la fábrica, a través de un dispositivo Database del Connector." Cambiar el tipo vuelve a asentar el filtro de veredictos en el valor por defecto del tipo nuevo (Etiqueta: Conforme; Informe, Acción de Logic y Fila de base de datos: todos los veredictos). |
| **Disparador** | En qué punto de un ensayo sale. | Arranque / Finalización; Finalización al crearlo. | Etiqueta en Arranque: "Se genera en cuanto arranca el ensayo, antes de que exista ningún resultado."; etiqueta en Finalización: "Se genera cuando termina el ensayo, para los veredictos finales marcados abajo."; informe en Arranque: "Se publica en cuanto arranca el ensayo, así que las secciones que todavía no tienen nada registrado se dejan fuera."; informe en Finalización: "Se publica cuando termina el ensayo, para los veredictos finales marcados abajo."; acción de Logic en Arranque: "Se pone en cola en cuanto arranca el ensayo. El ensayo no la espera."; acción de Logic en Finalización: "Se ejecuta cuando el ensayo ya está guardado, para los veredictos finales marcados abajo, y lee el ensayo terminado en LastRun."; fila de base de datos en Arranque: "Se escribe en cuanto arranca el ensayo, con los metadatos que fijó. El ensayo no espera a la base de datos."; fila de base de datos en Finalización: "Se escribe cuando el ensayo ya está guardado, para los veredictos finales marcados abajo, con el ensayo terminado. El ensayo 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 la vía de acciones." o "`<acción>` está deshabilitada: cada vez que este comando se dispara, la acción se niega a ejecutarse y registra el motivo." |
| **Informe** (comandos de informe) | El diseño de la biblioteca de la estación con el que se publica el PDF. | "(elija un informe)" o un diseño; ninguno al crearlo. | "No se publica ningún PDF.", "El informe referenciado no está en la biblioteca.", "Publica un PDF cuando arranca un ensayo." / "… cuando termina un ensayo.", con "y lo envía a la cola de impresión de este comando en la unidad." cuando la impresión está activada. |
| **Impresión del informe: Imprimir automáticamente** (se muestra en cuanto se resuelve un diseño) | Si el PDF publicado se envía además a la cola de informes de la unidad para este disparo. | Desactivado al crearlo. | Leyenda: "El PDF se publica en cualquier caso, en el punto del ensayo que marca este comando. La impresión solo decide si además se envía a una cola." Activado: "El PDF va además a la cola de impresión de este comando en la unidad. Elija esa cola en la pantalla Impresoras." Desactivado: "El PDF se publica en la carpeta de informes y no va más allá." |
| **Copia del informe: Guardarla en el ensayo** (se muestra en cuanto se resuelve un diseño) | Si el PDF terminado se guarda dentro del archivo del ensayo, para que un reenvío vuelva a emitir esos bytes exactos después de editarse o eliminarse el diseño. | Desactivado al crearlo. | Leyenda: "Lo que el ensayo guarda del documento, que es lo que enviará un reenvío posterior." Activado: "Cada ensayo lleva el PDF terminado, unos cientos de KB, y un reenvío envía ese documento exacto." Desactivado: "Cada ensayo 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, y cuyos marcadores vincula más abajo. | "(elija una plantilla)" o una plantilla; ninguna al crearlo. Elegir una crea una fila de correspondencia por cada marcador que declare la plantilla y que el comando todavía no asigne. | "Elija una plantilla: sus marcadores son lo que rellena 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 ensayo 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 este ensayo. La unidad elige la cola de impresión." |
| **Emitir para el veredicto final** (solo en Finalización) | Qué veredictos finales activan el comando. | Cuatro casillas: **Conforme**, **No conforme**, **Indeterminado**, **Sin veredicto**. Una etiqueta empieza solo en Conforme; un informe empieza con los cuatro, porque un procedimiento que no juzga nada termina sin veredicto y aun así tiene que producir su documento, y también una acción de Logic, porque un ensayo enviado 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 se dispara solo para un ensayo que termine 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 Preparación
más abajo).

La cola a la que va un documento impreso no es un campo del comando: la resuelven el tipo y el disparo
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 un ensayo deja a quien programa la estación: en un
límite, ejecuta una acción de [Logic](logic-actions), que puede enviar el ensayo a otro sistema por
cualquier driver, encender una lámpara o poner a 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 la vía de acciones en cuanto arranca el ensayo, antes de las etiquetas y los informes del mismo momento. | Cuando el ensayo ya está guardado y el [LastRun](process-addresses#lastrun) de la unidad lo tiene. |
| Qué espera el ensayo | Nada: el ensayo sigue, sea la acción lenta, rechazada o fallida. | Nada: el ensayo ya terminó. |
| Qué ensayos la disparan | Cada ensayo que arranca. | Cada ensayo que termina en un veredicto marcado, salvo uno que termina fallido, que no dispara nada. |
| Qué lee la acción del ensayo | `Procedure.Metadata.<Field>`, los valores que congeló el ensayo que arranca. | `LastRun.*`: la identidad, el estado, el veredicto, los instantes, los metadatos y el resultado de cada criterio del ensayo. |

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 en marcha: cada ensayo tiene el suyo.
Lo que un ensayo hace con la acción se lee en la página de la acción: su carril ÚLTIMA EJECUCIÓN
nombra el ensayo 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 del ensayo. Una acción
eliminada después de configurar el comando se salta y queda un aviso en el diario técnico; una
deshabilitada 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** añade 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 añade 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 añade 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 sitio, deshabilitada, como "`<table>` (no está en la base de datos)". | Leyenda: "La tabla a la que se añade 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 han podido 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 informe,
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 por defecto 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 por defecto.

| 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 el ensayo fijó para ese campo |
| Ensayo · Identificador, Procedimiento · Nombre, Unidad · Nombre, Unidad · Código, Ensayo · Estado final, Ensayo · Veredicto | No | Sí | Texto (`Completed` o `Aborted`; `Ok`, `Nok`, `Indeterminate` o `None`) |
| Ensayo · Instante de inicio, Ensayo · Instante de fin | No | Sí | Fecha y hora, en la hora local de la estación |
| Ensayo · Duración (segundos) | No | Sí | Número |
| Ensayo · Ciclos, Ensayo · 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 el ensayo no pidió, y un
criterio que no juzgó, no dan valor (NULL). **Volver a leer las columnas**, en la cabecera 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 el ensayo, con los metadatos que el ensayo fijó. | Cuando el ensayo ya está guardado y el LastRun de la unidad lo tiene. |
| Qué espera el ensayo | Nada: la fila espera en la propia cola del dispositivo y el ensayo sigue. | Nada: el ensayo ya terminó. |
| Qué ensayos la escriben | Todo ensayo que arranca. | Todo ensayo que termina en un veredicto marcado, salvo uno que termina en fallo, 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: el ensayo no se ve afectado, el diario técnico registra
el rechazo, y el registro del ensayo 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** allí 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 Preparación 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 allí 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 aún no ha leído: `<columns>`. Vuelva a leer las columnas." y
"No se ha podido 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 los rellene el
ensayo, 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 correspondencias 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: "“`<plantilla>`” 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 “`<plantilla>`”: `<error>`", y "Correspondencias guardadas conservadas. Repare o sustituya la plantilla antes de cambiar estos vínculos." |
| La plantilla no tiene ningún marcador | "Plantilla fija. Esta plantilla no tiene marcadores y envía los mismos bytes para cada ensayo que coincida." |
| Marcadores encontrados | Una fila por marcador, encabezada por el marcador y una píldora **Asignado** / **Obligatorio**, con los campos de abajo. |

| Campo | Qué es | Valores / valor por defecto |
| --- | --- | --- |
| **Fuente de valor congelado** | El único valor del ensayo 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 disparo actual no puede responder conserva su sitio, deshabilitada, como "… (no disponible para este comando)". Cambiar la fuente borra el campo, el ciclo y el formato elegidos para la anterior. |
| **Metadatos del catálogo** (fuente de 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 todos los campos como "`<nombre>` · 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 todos los criterios como "`<evaluación>` · `<criterio o Criterio n>` · `<canal>`". |
| **Ciclo (empezando en 0)** (fuentes de criterio) | El resultado de qué ciclo. Nunca se sobreentiende: hay que escribirlo. | De 0 hasta el mayor recuento de ciclos que ejecute algún 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 y hora de la estación (por defecto), Fecha de la estación, Hora de la estación, Fecha y hora de la estación, Formato 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 correspondencia 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). | Reinicia el campo problemático. |

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

| Fuente | Disponible en el Arranque | Tipo |
| --- | --- | --- |
| 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, Ensayo · Identificador | Sí | Texto |
| Ensayo · Instante de inicio | Sí | Fecha y hora |
| Ensayo · Estado (en el Arranque) / Ensayo · Estado final (en la Finalización) | Sí | Texto |
| Ensayo · Instante de fin | Todavía no | Fecha y hora |
| Ensayo · Duración (segundos) | Todavía no | Número |
| Ensayo · Veredicto, Ensayo · Motivo de la terminación | Todavía no | Texto |
| Criterio · Nombre, Canal, Límites, Gravedad, Resultado, Mensaje de error, Canales afectados | Todavía no | Texto |
| Criterio · Instante de apertura de la ventana, Instante de cierre de la ventana | Todavía no | Fecha y hora |
| Criterio · Muestras evaluadas, Muestras fuera, Muestras no disponibles, Muestras no válidas, Peor excursión | Todavía no | Número |

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

### Preparación {#readiness}

Las píldoras Lista y 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: "Añada un comando: esta acción todavía no
emite nada." A un comando le falta, en el orden en el que se repara:

- "Seleccione al menos un veredicto de finalización." (un comando de Finalización sin ningún veredicto
  marcado)
- "Elija un informe." / "El informe 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á deshabilitada, así que se rechaza cada vez que se dispara."
- "Elija una plantilla de etiqueta." / "La plantilla se ha borrado o eliminado; 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 un ensayo 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 por defecto para esta fuente numérica", "los decimales tienen
  que estar entre 0 y 9", "quite el formato numérico o de fecha de esta fuente de texto"
- "{{M}} se ha eliminado de la plantilla actual; quite su correspondencia guardada."

Un comando en revisión se ejecuta igualmente: no se descarta nada en la emisión, y un marcador que no se
puede resolver hace fallar esa etiqueta, como siempre. La pantalla de configuración es donde se aprende
esto, 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 e informe en Finalización", o "Todavía no
emite nada: esta acción no tiene comandos.") y, una vez seleccionada, 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 ensayo solo se resuelve donde el
procedimiento tiene aquello 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." / "… ejecuta `<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 lo que 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.
Añada algunas en Acciones del modelo."

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

En un límite del ensayo, las acciones seleccionadas emiten en el orden de la lista del modelo, y dentro
de cada acción en su orden de comandos, filtradas al disparo de ese límite: una sola respuesta para todo
el modelo, nunca una por procedimiento. Los comandos de Arranque se ejecutan una vez que el ensayo se ha
materializado (después de reservarse los metadatos secuenciales), y los de Finalización una vez sellado
el veredicto final. Cada comando queda aislado: un fallo no publica nada, no cambia nada del ensayo y
nunca detiene los comandos que van detrás. Un informe se nombra con el ensayo y la acción que lo emitió;
una composición posterior del mismo comando sustituye 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). Lo que
registra cada emisión en el ensayo, y cómo se vuelve a emitir desde Históricos, está en
[Emitir etiquetas e informes](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 un ensayo de ese procedimiento
  tiene que llegar al límite.
- No comprueba el procedimiento. Si un procedimiento pide el campo o juzga con la evaluación que nombra
  un marcador se dice en la página del procedimiento, junto a la selección.
- No elige la impresora. La cola es la de la unidad, por tipo y disparo, en
  [Impresoras](process-printers).
- No edita plantillas. Los comandos de etiqueta y los diseños de informe se escriben en
  [Plantillas](process-templates); la acción solo los nombra.
- No confirma la impresión física. Que la cola acepte es lo que registra una etiqueta o un informe
  impreso, nunca la prueba de que haya salido papel.
- No espera a una acción de Logic ni la registra en el ensayo. 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 más tarde. Una fila de
  base de datos va a una tabla que la base de datos de la fábrica ya tiene; un rechazo queda
  registrado en el ensayo y se vuelve a enviar a mano desde Históricos.
