# 打印机

> 一个单元打印所经过的四个打印队列（标签或报告，开始时或完成时），声明在模型上，按单元跟随或覆盖，以及一条命令怎么找到它的队列。

**打印机**是这个模型印出来的东西出来的地方。一个[动作](process-actions)发出的每一条命令都属于四种组合之一，也就是出来的是什么（一张标签还是一份报告）和什么时候出来（在运行的开始时还是完成时），而每一种组合在每一个单元上正好有一个**打印队列**：一个安装在这台工作站上的 Windows 打印队列。模型声明那四个默认队列，每一个单元都从它们打印，除非它已经脱开、保留着自己的四个；而一条命令按它自己的组合来解析它的队列，绝不按把它归在一起的那个动作。这个屏幕（Process > 模型 > 定义 > 打印机）写着“这个模型的每个单元用哪些工作站队列打印：按类型和时机各一个，用于它打印的标签和发布的报告。”，并数出单元数和其中有多少个自成一体。

读取需要查看模型；每一次编辑都需要管理 Process 和一台没有被锁住的工作站。这个屏幕穿着每个定义屏幕共用的那一副样子（见[定义](process-definition#the-one-shape-of-the-five-screens)）。

## 模型定义：四个槽位 {#model-definition-the-four-slots}

标题栏写着“模型的默认队列。它们服务于每一个仍然跟随它们的单元，因此一整排相同的工位只配置一次。”，并带着**刷新队列**（运行时写“正在刷新……”），按它就为屏幕的两半重新读取工作站已安装的队列。这份清单在屏幕打开时读一次。

这张表永远是同样四行，顺序如下：开始时的标签、完成时的标签、开始时的报告、完成时的报告。

| 列 | 显示什么 |
| --- | --- |
| **类型** | **标签**或者**报告**。 |
| **时机** | **开始**或者**完成**。 |
| **使用者** | 这个模型里有命令从这个槽位打印的那些动作，按名称写出，或者写“没有动作”。 |
| **打印队列** | 默认队列的名称，或者“未配置”（只有在确实有动作从这个槽位打印时才用警示色）。 |

工作站列不出它的队列时，表格上方有一条提示条写着**打印队列不可用**，并带上那次失败。在没有权限访问 Windows 打印后台的宿主上，这份清单干脆就是空的。

## 一个槽位的设置栏 {#the-settings-column-for-a-slot}

点中一行会把这个槽位完整打开（“打印机 · 开始时的标签”），上面那一行说的是这种介质需要什么：

- 标签：“标签以原始打印机指令送到队列。Ganter Lab 把它们交给 Windows，无法确认标签是否真的打了出来。”；
- 报告：“文档以 PDF 形式送到队列，因此请选一台文档打印机。测试用 Microsoft Print to PDF 就可以。”

| 字段 | 是什么 | 取值 / 默认 | 效果 |
| --- | --- | --- | --- |
| **打印队列** | “每一个仍然跟随模型的单元在哪里打印它。” | **（未配置）**，然后是每一个已安装队列的名称；工作站已经不再安装的、存下来的名称仍然列出，写作“名称（未安装）”；默认（未配置）。 | 写在模型上：每一个跟随的单元立刻就从它打印。图例后面还会补上“使用者”，写出从这个槽位打印的那些动作。 |

没有管理 Process 时，以及工作站被锁住时，卡片带着提示条“更改打印队列需要‘管理 Process’权限，而且工作站必须可编辑。”，选择框被禁用。

## 按单元：单元列表 {#per-unit-the-units-list}

| 列 | 显示什么 |
| --- | --- |
| **单元** | 单元的名称。 |
| **队列** | “跟随模型”，或者对脱开的单元写“4 项中设了 3 项，自己的”。这个模型有命令从某个槽位打印、而该槽位对这个单元当时生效时是空的，这一行就穿上警示色。 |

标题栏最末端的**管理单元**打开模型的页面。

## 一个单元的设置栏 {#the-settings-column-for-a-unit}

点中一个单元会打开两张卡片。**这个单元的队列从哪里来**提供**跟随模型的默认设置**（“改上面模型的默认设置，这个单元会和整排工位一起变。”）或者**有自己的队列**（“这个单元自成一体。模型的默认设置不再影响它，改它也不会改变这里的任何东西。”）。脱开时从当时生效的东西起算：自己那四个槽位全是空的单元，取模型那四个的一份副本；重新跟随不抹掉任何东西，所以第二次脱开时，这个单元原来有什么就原样拿回什么。没有管理 Process 时以及工作站被锁住时，这个二选一是禁用的。

第二张卡片是当时生效的那四个槽位，单元跟随期间标题是**当前生效：模型的默认设置**（“从模型读取。给这个单元一套自己的队列，才能在这里更改。”），每一个选择框都被禁用；一旦脱开，标题变成**这个单元自己的**（“只有这个单元用它们打印。它的同类单元不受影响。”）。表格还是那同样四行：**类型**（介质的那句提醒作为单元格的悬停提示）、**时机**、**使用者**，以及每一行一个**打印队列**选择框，提供的清单和模型那边一样。有队列错误时，那条提示条也在这张卡片上重复一遍。

## 一条命令怎么找到它的队列 {#how-a-command-finds-its-queue}

在运行的边界上，流程所选中的每一个动作的每一条命令，都通过模型解析出它的队列：跟随的单元取模型上那条命令的种类和触发时机所对应的槽位；脱开的单元取它自己的。因此同一种组合的两条命令是有意共用一台打印机的，不管它们坐在哪些动作里，而把命令归组或重新排序也绝不会挪动一个队列。删掉一个动作也不动那些槽位，因为它们是按种类和触发时机来定的，不是按动作。

当时生效的槽位是空的时候会怎样，因介质而异，而且两种情况都不改变这次运行，也不会拦住别的命令：

- 一张**标签**照样排出来，并记进这次运行的标签卷宗；它的发送记为一次失败的尝试，队列写作“（未配置）”，理由是“这个单元上没有为这张标签配置打印队列。”
- 一份**报告**照样发布它的 PDF（命令要求把它冻结进运行时也照做）；它的自动打印记为一次失败的尝试，理由是“这个单元上没有为这个动作配置打印队列。”

队列接受了只是“已送入队列”，绝不是真的印出来了的证明。队列名称是工作站本地的：一份被复制到另一台工作站的配置保留那些名称，而它们在被替换之前会读作“（未安装）”。

## 这个屏幕不做的事 {#what-this-screen-does-not-do}

- 它什么也不打印：一张标签的测试打印在[标签模板](process-labels)上，一份报告的样张在[报告](process-reports)上，重新打印和重发在[历史](histories-documents)里。
- 它不决定打印什么、什么时候打印：那是[动作](process-actions)下面每个动作的那些命令，而一次运行发出哪些动作，是[流程](process-procedures)的事。
- 它没有按动作或按流程的队列：每种组合、每个单元一个队列。
- 它不安装任何队列：那份清单是 Windows 自己的，没有打印后台的宿主一个都列不出来。
