直接答案:856(ASN,提前发货通知)不是一份"发货后补的手续",而是零售商 DC 收货流水线的操作指令。DC 靠扫描托盘上的 SSCC 条码到你的 856 里"查户口"——报文里任何一段与实物对不上,轻则整板货转人工处理,重则拒收加扣款。本文把一张 856 拆开,一段一段讲清楚:这个段是干什么的、仓库里对应哪个动作、错了会发生什么。
为什么值得花 20 分钟读完
市面上讲 856 的文章分两类:软件商写的(讲 X12 语法,不讲仓库里发生什么)、翻译规范的(把英文 spec 直译一遍)。但 856 被扣款的原因,几乎从来不是语法错——语法错在测试阶段就被拦了。生产环境里挨罚的 856,都是"报文说的"和"仓库做的"对不上。所以这篇按报文与实物的对应关系来讲,每一段都回答三个问题:报文里是什么、仓库里是什么、对不上会怎样。
先看全景:一张 856 的八站旅程
样例:一张最小完整的 Target 风格 856
下面是一张结构真实、标识符全部虚构的 856(一票货:1 个 PO、1 块托盘、2 箱、1 个 SKU)。后文逐段解剖都指向这张样例,建议先扫一眼有个整体印象,看不懂没关系:
ISA*00* *00* *ZZ*SUZLEHUB *08*9259999US00 *260806*1432*U*00401*000012847*0*P*>~ GS*SH*SUZLEHUB*9259999US00*20260806*1432*12847*X*004010~ ST*856*0001~ BSN*00*S2608060042*20260806*143201~ HL*1**S~ ← 第 1 层:Shipment(这票货) TD1*PLT*1****G*412*LB~ TD5*B*2*XXXX*M~ ← 承运人 SCAC REF*BM*BOL2608060042~ DTM*011*20260806~ ← 实际发货日期(时区坑高发段) N1*ST*TARGET DC*92*0588~ HL*2*1*O~ ← 第 2 层:Order(挂在 Shipment 下) PRF*4579990834~ ← PO 号 HL*3*2*T~ ← 第 3 层:Tare(托盘,挂在 Order 下) MAN*GM*00086999999000012347~ ← 托盘的 SSCC-18(与标签必须一字不差) HL*4*3*P~ ← 第 4 层:Pack(箱,挂在 Tare 下) LIN**UP*086999999012~ ← 箱内 SKU 的 UPC SN1**24*EA~ ← 这箱 24 件(与实物必须一致) CTT*4~ SE*18*0001~ GE*1*12847~ IEA*1*000012847~
第一站:信封层(ISA/GS)——没人看,但错了连门都进不去
ISA 和 GS 是"信封":谁发的、发给谁、什么时间、流水号多少。运营中真正踩过的坑有三个:
- 测试/生产标志:ISA15 那个字母,
T是测试、P是生产。认证切产那天忘了改,生产订单的 ASN 全进了对方测试环境——零售商那边"什么都没收到",扣款按"未发 ASN"算。切产检查清单里这一项永远排第一。 - 收发方 ID 与 qualifier:ID 对了 qualifier 错(ZZ/08/01 混用),对方网关直接不认,连 997 都不会给你——报文进了黑洞。首次联调时 90% 的"对方说没收到"是这里。
- 控制号唯一性:ISA13 流水号重复,对方系统当成重发报文丢弃。系统生成没问题,怕的是人工"复制上一张改一改"——这也是我们禁止手搓报文的原因之一。
BSN 段:这票货的"身份证 + 出生时间"
样例里的 BSN*00*S2608060042*20260806*143201 四个信息:用途代码、shipment 号、日期、时间。三个易错点:
- 用途代码:
00是新报文,07之类是重发/更正——发错会导致对方把新货当成旧货的更正处理,收货记录错乱; - shipment 号唯一:一票一号,重复用号 = 两票货在对方系统里打架;
- 日期时间的时区:BSN 的生成时间、DTM*011 的发货日期,全部必须按业务发生地时区(美西仓就是美西时间)。服务器在中国的系统,北京时间凌晨生成的报文很容易把日期写成"明天"——零售商视角这是一张来自未来的 ASN,直接拒。我们自己踩过这个坑,波及近三百笔,完整复盘在这篇。
HL 层级树:856 的骨架,也是塌房重灾区
856 最难懂也最重要的就是 HL 段。它把一票货描述成一棵树:
Shipment(这票货)
└── Order(PO 4579990834)
└── Tare(托盘 #1,SSCC 00086999999000012347)
├── Pack(箱 #1:UPC ...012 × 24 件)
└── Pack(箱 #2:UPC ...012 × 24 件)每个 HL 段的三个数字:自己的编号、父节点编号、层级类型(S/O/T/P/I)。这棵树必须和仓库里码出来的实物一模一样——哪个箱在哪块托盘上,报文里就得挂在哪个 Tare 下面。常见塌房姿势:
| 塌房姿势 | 报文里的样子 | DC 里发生什么 |
|---|---|---|
| 层级塌陷 | 偷懒跳过 Tare 层,箱直接挂 Order 下 | DC 扫托盘 SSCC 找不到对应层级,整板转人工,产生手工处理费 |
| 父子挂错 | 箱 3 实际在托盘 2 上,报文挂在托盘 1 下 | 托盘 1 "多货"、托盘 2 "少货",两条差异记录,双份扣款风险 |
| 混板不报 | 一板混两个 PO,报文只挂一个 Order | 另一个 PO 的货"凭空出现",收货对不上账 |
| 树与标不符 | 报文树是对的,但仓库最后一刻换板没重打标 | SSCC 扫出来是旧板号,报文里查无此板——最冤也最常见 |
MAN 段与 SSCC:托盘的"身份证号",一字不差才算数
样例里 MAN*GM*00086999999000012347 是这块托盘的 SSCC-18。三件事必须同时成立:
- 这个号从你的 GS1 公司前缀派生(前缀怎么申请见这篇案例),流水号段由系统统一发放,永不重号;
- 托盘物理标签(GS1-128 条码)上打的就是这个号——标签与报文一字不差;
- 报文里这个 Tare 下挂的箱和件数,就是这块板上码的箱和件数。
DC 收货的动作是:叉车过闸 → 扫托盘条码 → 系统拿着扫出来的 SSCC 去你的 856 里查这块板"应该有什么"。查不到号、或查到了但内容对不上,这块板就下线走人工——每一次人工干预都是费用条目。标签侧的合规细节(条码等级、贴标位置、字段)见GS1-128 标签这篇。
SN1 数量段:最朴素的段,最诚实的坑
SN1**24*EA 就是"这箱 24 件"。它没有任何技术难度,但它是"报文与实物两张皮"问题的照妖镜:短装了 2 件,报文还写 24,DC 清点后差异记录就是扣款依据;反过来如实报 22,多数零售商按"短装如实申报"处理,代价小得多。结论很简单:ASN 永远报实发数,不报订单数。做到这一点的前提是 856 从出库记录生成,而不是从 PO 复制——我们所有线路都是这么跑的,也建议你要求你的服务商这么跑。
TD5 / REF:运输信息——预约系统靠它找到你的车
承运人 SCAC 代码、BOL 提单号、PRO 号,这几个字段串起"报文—卡车—预约"三方:DC 的预约记录里是这辆车,856 里也得是这辆车。旺季换车、并车的时候忘改报文,车到了门口预约系统对不上号,卸货窗口作废——这类事故的处置我们写过一篇72 小时急救复盘。
时效:856 什么时候必须"到"
规范普遍要求 ASN 在货物到达 DC 之前可用,实操口径要更狠一点:装车离仓,856 就该在路上。卡车比报文快是 EDI 世界里最荒诞也最常见的扣款原因——尤其短驳距离近的仓,车两小时就到了,报文还在"每天定时任务"的队列里排队。我们的做法是出库确认触发即时生成发送,不搞定时批处理。
997 回执 ≠ 万事大吉
856 发出后收到 997 的 A(Accepted),只说明语法过关——相当于快递签收了,不代表箱子里的东西对。业务层的拒绝(日期不合理、PO 不存在、数量异常)往往走另外的渠道甚至人工邮件,滞后几小时到几天。所以监控要盯三层:MDN(传输层签收)、997(语法层)、业务反馈(应用层)。只盯 997 的服务商,等于只确认了"信寄到了"。997 本身失踪怎么排查,见这篇工单实录。
终点站:DC 收货那 90 秒
把整篇文章倒过来读一遍,就是 DC 收货员的视角:车按预约进门(TD5/REF 对上)→ 卸板、扫 SSCC(MAN 段对上)→ 系统展开这块板的 HL 子树(层级对上)→ 抽验箱数件数(SN1 对上)→ 过账收货,PO 关闭(PRF 对上)→ 你的 810 发票才有资格对着这笔收货记录去请款。856 的每一段,都是为这 90 秒准备的。哪一段和实物脱节,流水线就在哪一格卡住,费用条目就从哪一格长出来。
全段位自查清单(收藏用)
| 段位 | 自查问题 | 错误的典型后果 |
|---|---|---|
| ISA15 | 切产后是不是 P? | 报文进测试环境,视同未发 ASN |
| ISA/GS ID | ID + qualifier 与对方登记一致? | 网关不认,997 都没有,报文进黑洞 |
| BSN01 | 新报文用 00?更正才用 07? | 新货被当成旧货更正,收货错乱 |
| BSN03/04 · DTM*011 | 日期按美西业务时区取? | future date 拒收(凌晨报文高发) |
| HL 树 | 与最终装板实物完全一致?出库后没人再动板? | 整板转人工,手工处理费 |
| MAN | SSCC 与物理标签一字不差?系统发号不重号? | 查无此板,拒收或人工 |
| SN1 | 报的是实发数不是订单数? | 清点差异 = 扣款依据 |
| TD5/REF | SCAC/BOL 与实际承运和预约一致?换车改了没? | 预约对不上号,窗口作废 |
| 时效 | 装车即发?没有"攒批定时发"? | 车比报文快,按迟发 ASN 扣 |
| 回执 | MDN/997/业务反馈三层都有人盯? | 失败无人知,扣款单当通知书 |
写在最后
这篇文章里的每一条"典型后果",都不是从规范里推理出来的,是从运营里长出来的——我们的 856 每天在生产线路上真实地发、真实地被校验、偶尔真实地出问题然后被复盘成流程。如果你读完发现自己的 ASN 流程里有对不上的环节,两个建议:把这篇的自查清单发给你的服务商逐条问一遍;或者把你的报文样本发给我们,免费帮你做一次 856 体检。