客户反馈「打出来是反的」时,先不要动方向设置。在标签打印这条链路上,至少有四种完全不同的情况会被现场描述成「顺序反了」:整批从后往前出、每款的份数被排成了整套循环、顺序本身对但整叠拿起来是倒的、以及内容本身转了 180 度。前两种是真正的次序问题,第三种是收集方式造成的视觉反转,第四种根本不是次序问题。四种成因分布在四个不同的层,用同一个动作去改,只会在改对一处的同时把另外三处弄乱。
本文只处理前三种:内容对、方向对、位置对,只有先后次序不对。如果标签打在底纸面上、打印面朝里,或者整张内容上下颠倒、条码左右镜像扫不出,那属于卷向装反与旋转镜像两类问题,处置路径完全不同,本文在第一节和第八节各留了一条界线。Zebra ZT421、Citizen CL-S700III、TSC TTP-244CE 这类机型都同时支持撕纸、剥离与切刀三种出标方式,三种方式对「整叠顺序」的影响也不一样,文中会分别说明;具体规格以产品页标注为准。
全文按「现象 → 原因 → 步骤」展开:先给四型分诊法,把「反了」这句话拆成可核对的具体模式;再按数据层、软件层、指令层、驱动与队列层、机器与收集层逐层给核对动作;然后单独处理卷装标签的核对方向、双排与多联模板的位序、以及把顺序写进批次验收的做法;最后附现象到首查项的速查表与常见问题。
一、先分清四种「顺序不对」,方向不同查法不同
同样是「顺序反了」,出标序列的规律不一样,根因就在不同的层。让现场按出标先后(不是按堆叠从上到下)记录前十个编号,基本能一眼归类。
- 真倒序:序列是 200、199、198……一直到 1。整批的先后被完整地翻了过来。首查项是数据集的排序方向与驱动的页面顺序,两级都可能翻一次,也可能翻两次互相抵消。
- 分组错位:序列是 A、B、C、A、B、C、A、B、C,而产线要的是 A、A、A、B、B、B、C、C、C(或者反过来)。编号一个不少、一个不重,只是「按记录分组」与「按整套循环」两种排法对不上。首查项是副本数与套数的口径。
- 整叠翻转:逐张核对完全正确,但从收集盘或切刀落料处把整叠拿起来,从顶到底读就是倒的。首查项是出标方式与收集容器的取放方向,不需要改任何软件设置。
- 假顺序问题:看着像反了,实际是内容旋转 180 度、上下颠倒或左右镜像。此时编号次序往往是对的,只是每张都倒着。首查项是打印方向参数与模板旋转设置,属于另一类问题。
这四型的处置成本差别很大:整叠翻转只需要改取放方式,分组错位只需要改一个数字,真倒序要动数据或驱动,假顺序问题则要回到模板与指令。先归类再动手,可以避免把「只是收集盘拿反了」当成软件故障去重装驱动。
二、三分钟分诊:先记录,再动手
现场最容易犯的错是「边看边改」:改一个参数、打三张、觉得还是不对、再改回来。中途改动会让现象互相覆盖,最后谁也说不清是哪一处起的作用。稳妥的做法是先做一轮不修改的记录。
- 取本次批次的前十张,按出标先后逐张读出编号,写在纸上排成一行。不要在堆叠上从上往下读,那是收集顺序,不是打印顺序。
- 看这十个号的规律,对照第一节的四种模式归类。连续递减是真倒序,循环重复是分组错位,连续递增但整叠反读是整叠翻转,编号连续而字形倒置是假顺序问题。
- 记录本次是单个打印任务还是多个任务。在 Windows 的打印队列窗口里看任务条数,多个任务就意味着存在任务间交叉的可能。
- 记录当前出标方式:撕纸、剥离还是切刀。这个信息决定第三节之后的判断走向,也决定「整叠」这个概念是否成立。
- 记录本次的批次规模与每条记录的份数设置,以及是在软件里设的还是由业务系统下发的。
- 以上五项记完,再只改一个变量,重新打一轮十张对比。一次只改一个,是为了让下一轮的现象能被解释。
这套记录法还有一个附加价值:当问题需要转给软件供应商或设备供应商时,这五项就是对方的第一个提问清单。没有这五项,沟通通常要从头再来一遍。
三、数据层:记录集本身有没有顺序
软件打印的顺序,本质上是它从数据源读到的记录顺序。这一层没有顺序,后面所有设置都是在给一个乱序的集合排序,改多少遍都不会稳定。
数据库查询。不带 ORDER BY 的查询不保证返回顺序。这在单机小表上通常看不出来,一旦表变大、执行计划从索引扫描变成并行扫描、或者加了分区,返回顺序就会变。更隐蔽的一种是视图或存储过程内部写了 ORDER BY,但被外层查询包裹后失效——SQL Server 里视图内的 ORDER BY 需要配合 TOP 才不会被优化器丢弃。核对办法是直接把软件实际执行的那条语句拿到数据库客户端里跑,看返回的前二十行是否与打印顺序一致。
排序键不唯一。即使写了 ORDER BY,如果排序键有重复值(例如同一天创建的十条记录按日期排序),重复值之间的相对顺序由执行计划决定,不保证稳定。正确做法是排序键末尾追加一个唯一键,例如单据号或自增主键,让排序结果唯一确定。
Excel 与 CSV。软件按行序读取工作表,读的是底层行序,不是屏幕上筛选后的显示顺序。工作表里有筛选、有隐藏行、有排序但未应用时,读到的顺序与目视顺序会不一致。另有两种常见坑:合并单元格会让读取到的行数变少;数值型列会把前导零吃掉,编号 0001 变成 1,排序时按数值排就成了 1、10、100、2 这样的字典序错乱。
业务系统导出。ERP 与 MES 导出的批次列表常按创建时间倒序,本意是让最新的排在最前,用在打印上就变成了整批倒序。这一条与「ERP 触发了但不打印」是两回事,后者属于链路中断,本文第六节只借用它的定位思路,不重复展开。
核对动作:打开软件里的「选择记录」或「数据库预览」窗口,这个窗口显示的记录顺序就是实际打印顺序。不要拿业务系统的报表页面去对,那是另一个查询的结果集。两者不一致时,问题在软件的查询设置或数据源连接,不在打印机。
四、软件层:份数与套数是两个口径
分组错位几乎全部出在这一节。现场的诉求通常是「这个型号要三张」,而软件里的「副本」指的是每条记录的份数,两者字面接近、结果完全不同。
以 BarTender 为例,官方支持文档给出的行为是明确的:软件会先打完第一条记录的全部副本,再进入第二条记录。设置每条记录两份、共三条记录,出标顺序就是 1、1、2、2、3、3。同时官方也明确说明,它不提供「整套循环」的打印方式,也就是没有哪个开关能让结果变成 1、2、3、1、2、3。官方给出的变通办法是用自定义 SQL,把同一张表用 UNION ALL 合并若干份,让记录集本身变成两轮,从而得到两套完整序列。这个细节很关键:很多人以为是自己没找到勾选项,实际上这个选项在产品设计上就不存在。
由此可以推出两条现场可用的判据:
- 总张数核对。总张数应该等于记录数乘以每条记录的份数。如果实际张数是两者相乘后的数倍,通常是把记录条数填进了副本框,或者业务系统与软件各设了一次份数,两次相乘。
- 序列规律核对。出标是「同号连排」说明份数生效在记录级;出标是「整套循环」说明份数被放在了外层,或者业务系统分多次提交了完整批次。
序列化文档还有第二组数字需要分清:序列号数量决定生成多少个不同编号,每个序列号的副本数决定同一编号打几张。十个序列号、每个两份,得到二十张,每个编号出现两次,顺序同样是同号连排。把这两组数字混填,表现出来就是「编号对、数量对、顺序不对」。
如果产线确实需要整套循环(例如一箱里每个型号各一张,箱与箱之间循环),可行的做法有三种:把记录集自身复制成多轮再打印;由业务系统按「箱」为单次任务提交,每箱一个任务;或者先打好一套,再整批重打。三种做法在耗材浪费与人工核对成本上差别明显,选哪一种取决于批次规模与是否需要留痕。
五、指令层:ZPL 与 TSPL 的份数参数是什么含义
不经过软件、由业务系统直接下发指令时,份数由指令参数控制。这两条指令都只有「按记录分组」这一个维度,没有「整套循环」的维度,理解这一点就不会再去找不存在的参数。
ZPL 的打印数量指令。格式为 ^PQ q,p,r,o,e,五个参数依次是:总张数、每多少张暂停一次、每个序列号的复制份数、是否忽略暂停、出错时是否切纸。带序列号打印时,总数量决定序列递增多少次,复制份数决定同一个号重复几张。官方示例 ^PQ50,10,1,N 的含义是共五十张、每十张一组暂停一次、每个序列号带一份复制。需要注意的是,不同固件与第三方模拟器对「复制份数是否含首张」的口径并不统一,有的按 r 张、有的按 r 加 1 张计算,落地前用三张试打确认,比照着手册推算更可靠。
TSPL 的打印指令。格式为 PRINT m,n,m 是要打印的套数,n 是每一套里每张标签的份数。手册示例 PRINT 3,2 的输出是 0001、0001、0002、0002、0003、0003,图上标注为「1 套 2 份」。这个例子把分组逻辑讲得很清楚:份数作用在每一张上,先把这个号的份数打完,再走下一个号。同一份手册里也给出 m 取负数的用法,表示重复打印上一张内容,那是补打单张用的,不是排序功能。
两个容易踩的坑。其一,把总张数当成序列递增次数,同时又开了复制份数,结果总张数被复制份数除掉了,实际编号只走到预期的一半。其二,一条格式里出现两个数量指令,后一个覆盖前一个,前面写的等于没写。修改这类模板后,务必用三到五个号的小批量验证编号的起止与重复次数,再放量。
另外要提醒一句:打印方向参数与顺序参数是两件事。ZPL 的打印方向指令只改内容朝向(正常或 180 度),TSPL 的方向设置同样只影响旋转,两者都不改变出标先后。为了让「顺序看起来正过来」去改方向,结果通常是内容倒了、顺序没变。
六、驱动与队列层:任务之间会不会互相插队
数据对、份数对、指令对,顺序还是乱,问题往往在从软件到打印机这一段。
页面顺序。部分打印机驱动在高级选项里提供页面顺序或「从最后一页开始打印」一类的开关,作用是把整个任务的内容倒序输出。这个开关一旦被勾上,所有批次都会倒序,而且换软件也不会恢复,因为它存在驱动配置里。核对方法是打开打印机属性的高级页与驱动的高级设置页,逐项看有没有与顺序相关的选项,并确认它是全局默认值还是仅当前文档生效。
假脱机的两种行为。Windows 的打印后台处理程序有两个与顺序有关的设置:允不允许「先打印后台处理完成的文档」,以及是等整份任务全部缓冲完再开始打印,还是边缓冲边打印。前者在多任务并发时会让先缓冲完的小任务插到前面;后者在任务很大时会让「看起来半天不出标、然后一口气全出来」。这两项不改变单任务内部的顺序,但会改变多任务之间的到达顺序。
多任务交叉。业务系统多线程下发时,每个线程各提交一个任务,队列按到达时间先进先出,而业务顺序是按单号或按工位排的,两者本来就不是一回事。表现出来的「顺序乱」其实是多个任务在交替执行。判定方法很简单:队列里同时存在多个任务,且出标编号在两组之间来回跳。解决办法有三种——把整批合并成一个任务下发;业务系统改为串行提交并等待上一个任务完成;或者在每个任务之间插入分隔标签,让现场能按分隔符重新归堆。
残留任务。上一批中断后留在队列里的任务,会在新批次开始时先被打出来,于是新批次的头几张变成了旧内容。每天开机后先看一眼队列是否为空,是一条成本很低但很有效的习惯。
数据类型。驱动把内容渲染成位图再发,还是把指令原样透传给打印机,会影响到「一个任务里能不能保持顺序」以及大任务的缓冲行为。这一层的细节与队列卡死同源,本文只作链路定位,不展开。
七、机器层:出标方式决定整叠的方向
这一节处理「整叠翻转」。它不需要改任何软件设置,只需要改取放动作或收集方式。三种出标方式的行为完全不同,混在一起谈就会得出「有时对有时不对」的错觉。
撕纸模式。每打一张,标签停在撕纸位置,人工撕下。出标顺序等于打印顺序,撕下来的标签按撕的先后叠放,后撕的压在上面,从顶到底读就是倒序。这是最常见的一种「整叠反了」,实际上是收集方向问题。
剥离模式。标签被剥离板从底纸上分离,停在出口等人工取走。多数机型在不取走前不会打下一张,这是设计行为而不是卡住。取走的先后就是打印先后,同样存在后取的压在上面的问题。如果现场把剥出来的标签随手放在托盘里,堆叠方向取决于放的动作,与机器无关。
切刀模式。切刀把标签逐张切断,落料进入收集盘或分堆器。后落的压在上面,从顶到底读就是倒序,把整叠翻过来即正序。这一点与撕纸、剥离是同一个物理规律,但切刀更容易被误认为「机器把顺序打反了」,因为它完全自动、中间没有人工动作。
扇折纸。折叠式耗材的堆叠方向由折叠方式与出纸方向共同决定,从纸堆的哪一面开始读,结果可能正好相反。换用扇折纸后出现的「顺序反了」,优先核对这一点,而不是改软件。
一条实用建议:批次的首张与末张各打一张带「首」「末」字样的标记标签,跟着批次一起走。现场判断整叠方向时,看这两张的相对位置即可,不必逐张核对编号。这一条在多工位、多班次的环境里尤其省事。
八、卷装标签:核对方向错了,正确的顺序也会被看成反的
卷装耗材有一个容易忽略的事实:标签在卷上的物理位置,与打印先后是绑定在走纸方向上的。先打出来的标签靠近卷首(也就是引出上机的那一端),随着打印进行,用掉的部分往卷尾走。核对时要从卷首沿走纸方向顺着数,而不是从卷的外层往里层倒着数。从外层倒着数,任何一卷正确的批次都会被读成倒序。
现场判断的方法很简单:看未打印的那一段与已打印的那一段在卷上的相对位置。已打印的段如果位于卷的外侧、未打印的在里侧,说明走纸是从外向内,先打的在外层;反之则先打的内层。方向搞清之后,再谈「顺序对不对」才有意义。
这里必须与另一个问题划清界线:卷向装反指的是打印面朝里朝外装错,表现为内容打在底纸面、或者整张内容反向,属于耗材上机方向的问题;本文讲的是打印面正确、内容正确、只有先后次序不对。两者有时会同时出现——装反的卷被打了几十张,操作者按卷的外层倒着核对,于是得出「顺序也反了」的结论,实际上顺序一直是对的。
九、双排与多联模板:一张标签上的两个位
双排标签(一张底纸上并排两个标签位)与多联模板会带出一类特殊的「顺序错乱」:编号没有颠倒,但一张标签上两个条码是同一个号。
原因是序列化只在一个维度上递增。整幅标签被当作一张来处理,序列号在整幅上递增一次,于是并排的两列拿到同一个号。正确做法有两种:为每一列配置独立的数据源与独立的计数器,让两列各自递增;或者把双排拆成两次下发,每次只打一列。前者适合固定双排耗材,后者适合临时排产。
还有一层是列序与行序。多联模板里对象的排列顺序、数据的填充方向(先填满一行还是先填满一列)需要在模板里定死并写进作业规范,否则同一份模板换个人改一次,输出顺序就变了。判定动作是拿一张打好双排的标签,看两个条码的号是否相同:相同说明序列化只在整幅上递增,不同说明分列递增已经配置好,剩下的只是列序约定问题。
十、把顺序写进验收,避免下一次再判一遍
顺序问题有一个特点:单次处置完之后,如果不留下判定依据,下一批次换人换班就会重新判一遍,而且很可能判成另一个结论。把下面几件事写进批次规范,可以把这类沟通成本压到最低。
- 首中末三点抽检。每批开机第一张、中间一张、最后一张各核对一次编号,三张对得上,整批顺序基本可以确认。
- 留一张批次标记。批次号、记录数、每条份数、打印时间写在标记标签上,跟批次一起存放。出现争议时这是唯一能回溯的实物证据。
- 记录份数口径。在作业指导书里明确写清「副本指每条记录的份数,不代表整套循环」,并注明本批次采用的是哪一种排法。
- 变更后复核。更换驱动版本、升级标签软件、调整业务系统的下发逻辑之后,都要重跑一次三点抽检。这三类变更都可能悄悄改掉默认顺序行为。
- 补打只补缺号。中断后整批重打会让编号重复,正确做法是按已打出的最大号接着补,只补缺的那几张。断点续打的计数恢复有独立的处置流程,与顺序问题是两件事。
十一、速查表:现象到首查项
- 整批从后往前出,编号连续递减。先查数据集排序方向(是否按创建时间倒序),再查驱动页面顺序是否被设为从后往前。两级都翻过就会互相抵消,表现为「有时正有时反」。
- 编号对、数量对,但同号连排与整套循环不符。查副本数与套数口径,确认副本指的是每条记录的份数;需要整套循环只能用复制记录集或分次提交。
- 逐张核对正确,整叠读起来是倒的。查出标方式与收集动作:撕纸与剥离是后取的在上,切刀是后落的在上,翻转即正序。
- 编号连续但字形倒置、条码镜像。不是顺序问题,查打印方向与模板旋转设置。
- 卷装标签按外层倒着数是反的。核对方向错了,改从卷首沿走纸方向数。
- 一张标签上两个条码同号。双排模板的序列化只在整幅上递增,需改为分列独立计数。
- 出标在两组编号之间来回跳。队列里有多个任务在交替执行,合并为单任务或改为串行提交。
- 新批次开头几张是上一批的内容。队列残留旧任务,开机后先确认队列为空。
- 只在大批量时乱序,小批量正常。查边缓冲边打印与多任务并发,整批张数越大越容易暴露到达顺序问题。
- 换了耗材形式后顺序变了。扇折纸与卷装的堆叠方向不同,先核对读取面,再谈设置。
常见问题
1. 一批两百张打出来第一张是两百号、最后一张是一号,是打印机坏了吗?
基本不是。打印机按收到指令的先后出标,它没有能力把一整批的顺序自己翻过来。出现完整倒序,先看两处:数据源是否按时间或编号倒序取数,驱动的页面顺序是否被设为从后往前。这两处任何一处翻转都会造成整批倒序,两处同时翻转则会互相抵消。比对方法是把软件里「选择记录」窗口的第一条与最后一条记下来,与出标的前两张对照,一致就说明顺序在软件侧已经定了,问题在驱动或队列;不一致则回到数据查询。
2. 每款要三张,出来是 A、B、C、A、B、C,怎么改成 A、A、A、B、B、B?
把副本数从「整套的轮数」改到「每条记录的份数」。BarTender 的副本框就是每条记录的份数,设成三即得到同号连排;如果当前结果是整套循环,说明份数被设在了外层,或者业务系统分三次提交了完整批次。改完用三条记录、每条三份的小批量验证一次,看九个号的排列是否符合预期,再放量。反过来,如果产线要的确实是一箱里每个型号各一张、箱与箱循环,那就需要复制记录集或按箱分次提交,软件本身不提供这个排法。
3. BarTender 有没有「整套打印」的勾选项?
没有。官方支持文档明确说明不支持这种成套打印方式,也就是无法让结果变成 1、2、3、1、2、3。官方给出的变通办法是用自定义 SQL,把同一张表用 UNION ALL 合并若干份,让记录集本身变成多轮,再由软件按普通方式打印。这个办法有前提:只有部分数据库类型支持自定义 SQL 查询,查询较复杂时配置成本会明显上升。规模不大的场合,更省事的做法是分多次提交,每次一整轮。
4. 打印队列里同时有好几个任务,出来的标签编号在两组之间来回跳,怎么办?
这是任务级交叉,不是任务内乱序。队列按到达时间先进先出,多线程下发时到达顺序与业务顺序本来就不一致。三种处理方式:把整批合并成一个任务再下发,这是最彻底的一种;业务系统改成串行提交,等上一个任务完成再提交下一个;或者在每个任务之间打一张分隔标签,让现场能按分隔符重新归堆。三种方式的取舍在于改动成本与是否需要保留任务级留痕,与打印机型号关系不大。
5. 切刀切完一堆,从上面拿起第一张就是最后打的,需要改设置吗?
不需要。切刀落料是后切的压在上面,从顶到底读必然是倒序,把整叠翻过来就是正序。这是物理收集规律,不是打印顺序错误。如果现场必须按正序取用,可以在收集盘处加一个承接方向,或者干脆按倒序取、翻面使用;也可以在批次首末各打一张标记,靠标记判断方向,避免每批都重新判一次。真正需要改设置的只有一种情况:逐张核对后发现编号本身不连续或有跳号,那属于序列与计数问题。
6. 剥离模式下不把标签取走,机器就停在那里,是卡住了吗?
不是,这是剥离模式的正常行为。标签被剥离板分离后停在出口等待取走,多数机型在设计上要求取走当前张才打下一张,否则标签会堆在剥离口造成堵塞。判断是否真卡住,看两点:机器是否有报错提示,以及取走当前张后能否继续出标。取走后能正常继续,就是等待而非故障。另外要注意,剥离模式下如果把剥出的标签随手堆在托盘里,堆叠方向由放的动作决定,与「顺序反了」无关。
7. 我把打印方向改成反向,想让顺序正过来,结果字全倒了,为什么?
因为方向参数管的是内容朝向,不是出标先后。ZPL 的打印方向只影响内容是正常还是旋转 180 度,TSPL 的方向设置同样只做旋转,两者都不改变先打哪一张。要让顺序正过来,只能动数据排序、份数口径或收集方式这三处。改完方向之后如果内容倒了但顺序没变,把方向改回去,然后按第一节的四型分类重新判一次,通常能立刻定位到真正的那一层。
8. 双排标签打出来两个条码是同一个号,是软件出错了吗?
不是出错,是序列化只在一个维度上递增。整幅标签被当作一张处理,序列号在整幅上只加一次,并排的两列自然拿到同一个号。解决办法是为每一列配置独立的数据源与计数器,或者把双排拆成两次下发、每次只打一列。判定是否已经分列递增,拿一张成品看两个条码的号即可:同号说明还在整幅递增,不同号说明分列已经生效,剩下的只是列序与行序的约定问题。
9. 数据库里明明用 ORDER BY 排好了,打印出来还是乱的,问题在哪?
三种可能。排序键有重复值,重复值之间的相对顺序由执行计划决定,需要追加唯一键让排序结果唯一确定;ORDER BY 写在视图或存储过程内部,被外层查询包裹后失效,SQL Server 中视图内的 ORDER BY 需配合 TOP 才不会被丢弃;软件实际执行的并不是你验证的那条语句,中间可能经过了自己的查询构造。核对办法是打开软件的数据预览窗口,看它展示的记录顺序,再与数据库客户端里同一条语句的结果比对,两边不一致就说明软件侧另有查询或排序设置。
10. 卷装标签我从外往里看是倒的,是装反了吗?
不一定。卷上标签的先后是绑定在走纸方向上的:先打的靠近卷首,用掉的部分往卷尾走。从外层往里层倒着数,任何一卷正确的批次都会被读成倒序。正确做法是先确认走纸方向,再从卷首顺着数。如果同时出现内容打在底纸面上、或者整张内容反向,那才是卷向装反,属于耗材上机方向的问题,与顺序无关。两者同时出现时,先解决卷向,再核对顺序。
11. 补打的时候怎么保证不重复、不跳号?
先确定已经打出去的最大号,再从下一个号开始补,只补缺的那几张,不要整批重打。整批重打会造成编号重复,比跳号更难收拾。补打前把当前批次的已打张数与记录数对一遍,确认缺的是哪几张;补打后再扫几张验证编号连续。如果中断发生在批次中途且计数器状态不明,需要先做计数器核对再补,这部分有独立的处置流程,与顺序问题是两条线,不要混在一起改。
12. 换了一台打印机,同样的模板顺序就变了,哪里不一样?
优先看三处差异:新机器的出标方式(撕纸、剥离或切刀)不同,整叠的读取方向就不同;驱动不同,页面顺序的默认值与缓冲行为可能不同;机器的打印方向默认值不同,可能让内容转了 180 度,看着像顺序变了。三处都可以在不改模板的前提下核对:先用同一份数据打五张,逐张记录编号与朝向,编号对而朝向不对是方向问题,编号对而整叠反读是收集方式问题,编号本身就乱则回到数据与份数口径。模板通常不需要重做,除非新机器的分辨率变化导致版面按比例缩放。
更多标签打印机、标签耗材与标签软件的操作、维护与故障处置方法,可在 支持中心 按分类查阅;需要核对具体机型的出标方式、耗材适配与规格参数,请以产品页标注为准。


