首页 / EDI 百科 / 856 全解剖

一张 856 的完整旅程:每一段错在哪,罚款就从哪来

从仓库扫码出库,到零售商 DC 收货比对——逐段解剖一张 ASN,运营视角,全网仅此一篇。

EDI 百科 · 深度长文 · 更新于 2026-08 · 作者:溯智云运营团队 · 样例报文结构真实,全部标识符(ID/PO/柜号/前缀)已虚构脱敏

直接答案:856(ASN,提前发货通知)不是一份"发货后补的手续",而是零售商 DC 收货流水线的操作指令。DC 靠扫描托盘上的 SSCC 条码到你的 856 里"查户口"——报文里任何一段与实物对不上,轻则整板货转人工处理,重则拒收加扣款。本文把一张 856 拆开,一段一段讲清楚:这个段是干什么的、仓库里对应哪个动作、错了会发生什么。

为什么值得花 20 分钟读完

市面上讲 856 的文章分两类:软件商写的(讲 X12 语法,不讲仓库里发生什么)、翻译规范的(把英文 spec 直译一遍)。但 856 被扣款的原因,几乎从来不是语法错——语法错在测试阶段就被拦了。生产环境里挨罚的 856,都是"报文说的"和"仓库做的"对不上。所以这篇按报文与实物的对应关系来讲,每一段都回答三个问题:报文里是什么、仓库里是什么、对不上会怎样。

先看全景:一张 856 的八站旅程

拣货装板扫码出库生成 856翻译 X12AS2 传输997 语法关业务校验DC 比对SSCC 贴标事实定格按出库记录映射规则MDN 签收A / R日期·数量·关联扫码查户口三道关,罚款只出在后两道997 过了只说明"语法没写错";业务校验查数据合不合理;DC 比对查报文和实物是不是一回事绝大多数扣款出在最后一关——所以这篇文章的重心是"报文与实物的对应"
856 的八站旅程:第 2 站(扫码出库)决定了第 8 站(DC 比对)的生死

样例:一张最小完整的 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 扫出来是旧板号,报文里查无此板——最冤也最常见
看出规律了吗:HL 树的错误,一半出在写报文的人,一半出在报文定稿之后仓库又动了实物。所以我们的流程里 856 永远在出库扫码完成后才生成——实物定格了,报文才落笔。顺序反过来的服务商,罚款只是概率问题。

MAN 段与 SSCC:托盘的"身份证号",一字不差才算数

样例里 MAN*GM*00086999999000012347 是这块托盘的 SSCC-18。三件事必须同时成立:

  1. 这个号从你的 GS1 公司前缀派生(前缀怎么申请见这篇案例),流水号段由系统统一发放,永不重号;
  2. 托盘物理标签(GS1-128 条码)上打的就是这个号——标签与报文一字不差
  3. 报文里这个 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 IDID + qualifier 与对方登记一致?网关不认,997 都没有,报文进黑洞
BSN01新报文用 00?更正才用 07?新货被当成旧货更正,收货错乱
BSN03/04 · DTM*011日期按美西业务时区取?future date 拒收(凌晨报文高发)
HL 树与最终装板实物完全一致?出库后没人再动板?整板转人工,手工处理费
MANSSCC 与物理标签一字不差?系统发号不重号?查无此板,拒收或人工
SN1报的是实发数不是订单数?清点差异 = 扣款依据
TD5/REFSCAC/BOL 与实际承运和预约一致?换车改了没?预约对不上号,窗口作废
时效装车即发?没有"攒批定时发"?车比报文快,按迟发 ASN 扣
回执MDN/997/业务反馈三层都有人盯?失败无人知,扣款单当通知书

写在最后

这篇文章里的每一条"典型后果",都不是从规范里推理出来的,是从运营里长出来的——我们的 856 每天在生产线路上真实地发、真实地被校验、偶尔真实地出问题然后被复盘成流程。如果你读完发现自己的 ASN 流程里有对不上的环节,两个建议:把这篇的自查清单发给你的服务商逐条问一遍;或者把你的报文样本发给我们,免费帮你做一次 856 体检。

免费 856 体检EDI 托管运营