凌晨两点,手机响了。
电话那头是仓库 IT 的小张,声音发哑:"米哥,ASN 发出去了,对方系统里查不到。车已经到 DC 门口,预约窗口还剩 6 小时。"
这种情况我遇到过不止一次。给美国大零售商做供应商,EDI 对接这关绕不过去。订单怎么来(850),发货通知怎么发(856),发票怎么开(810)——三张单子,任何一张卡住,货就进不去,钱也回不来。今天我就把这三个报文的联调实战讲透。
三张单子,先搞懂各自在说什么
EDI 用的报文标准叫 ASC X12,美国大零售商大多还在用 4010 或 5010 版本。别被这些数字吓到,你只需要记住四个报文号:850 是采购订单,856 是提前发货通知(行内都叫 ASN),810 是发票,997 是功能性确认回执——相当于对方收到你报文后的"签收单"。
850 是零售商发给你的。关键段看三个:BIG 段里的订单号和日期,N1 段里的收发货方,PO1 段里的行项、数量和单价。注意,很多零售商会在 850 里用自己的商品编码,而不是你的 SKU。映射表一定要提前做,别等到发货那天才发现两边编码对不上。我见过一家加州安大略的 3PL 仓,就因为商品编码映射漏了两行,整票货在 DC 门口多等了一天。
另外问清楚对方的改单机制。零售商改单一般不会重发一张全新的 850,多半走 860(采购订单变更)报文,或者在原单上追加行项。联调时把这个逻辑问明白,别按"订单永远不变"来写程序,否则第一次改单就翻车。
856 是你发回去的,也是最容易出事的。它的结构是一棵树:HL 段一层层往下,整票、订单、纸箱/托盘、商品四个层级。BSN 段放 ASN 编号,MAN 段放 SSCC 托盘码。SSCC-18 是 GS1 的标准编号,一个托盘一个码,打印在 UCC-128 标签上。DC 收货时扫描这个标签,系统自动拿你的 ASN 和实物比对——码扫不上,或者 ASN 里写的托盘数和实际不符,轻则拒收,重则按路由指南罚款,金额以各家官网最新政策为准。
810 是发票。IT1 段写行项,TDS 段写总金额,SAC 段写折扣、运费和各种费用扣减。它必须和 850 的单价、实际发货数量三方对齐。对不齐,对方系统直接拒付。还有个冷知识:很多供应商第一次发现,零售商的罚款是直接从 810 里扣掉的——人家的扣款就是这么走的,SAC 段里一笔就划走了,你都来不及反应。
997 别忽略。每次发完报文,对方会返回 997 表示"收到了"。没收到 997,就等于对方没收到——别发下一张,先查传输链路。

联调流程:从测试环境到第一票真货
先搞清对方的连接方式:直连 AS2,还是走 VAN 增值网。小供应商多半走 VAN,按报文条数付费——测试阶段别可着劲发,每一条都是钱。
给联调留足时间。一家中等规模的供应商,从拿到零售商的测试包到第一票真货,几周到两三个月都正常。别信"一周搞定"的承诺,零售商那边的测试排队也要时间,排到你了才发现报文有问题,来回又是一周。
测试用的商品主数据、价格、SSCC 号段,提前和生产环境隔离开。我见过有人拿真实 SSCC 号段做测试,结果测试报文发到了生产环境,DC 那边一脸懵——ASN 里的托盘码和实际货物对不上,查了半天才发现是测试数据串了。
我建议的联调顺序是这样。先在测试环境把三张单子跑通往返:收 850、回 856、开 810,每一张都确认对方返回了 997。然后按零售商给的测试脚本走完整业务场景——他们一般会给一套标准测试用例,包括正常下单、改单、拆单、部分发货。别跳过"部分发货"这个用例,真实业务里它最常见,也最容易暴露 HL 层级写错的问题。
大部分大零售商还有供应商门户,能查 850、传 ASN、看 997 状态。联调期间每天上去看一眼,比等邮件快得多。门户里一般还能看到测试进度条,卡在哪一步一目了然。
接下来是报错排查链路。出问题了,按这个顺序查:先看 997 有没有返回,没返回就是传输层的问题,查 VAN 或直连通道;有 997 但业务校验失败,看对方返回的错误报文里指向的段和元素,大部分是 ISA/GS 外壳里的收发方标识写错,或者用了对方不支持的 X12 版本;业务校验通过了但 DC 说实物对不上,那就回到 856 的 HL 层级和 SSCC,一层一层往下对。
第一次真实发货,我只给一条建议:选一票小批量的先发,全程盯着。ASN 发出的时间、卡车预约的时间、DC 签收的时间,三个时间点都记下来。很多仓第一次发货翻车,就是因为 ASN 发晚了——车到了,ASN 还没到,对方系统里根本没有这票货,只能在门口干等。
三个最烧钱的坑
第一个坑,ASN 与实物不符。装箱的时候多装了一箱、少装了一托盘,现场觉得"差不多",系统里可差大了。DC 按 ASN 收货,差异部分直接触发罚款条款。解法很土:发货前把 ASN 里的数量和装车清单逐行对一遍,两个人签字。土,但管用。
第二个坑,810 金额对不上。最常见的原因是 850 里的单价是含促销价的,或者行项里有赠品行,发货时却按原价开了票。促销价、返点、运费分摊都会进 SAC 段,开票逻辑里漏掉任何一项,金额就对不上。订单一多,财务根本看不出来,直到对方拒付才发现。建议开票前让系统自动比对三方:850 单价、实际发货数、810 行项金额,三方一致才放行。
第三个坑,把 EDI 当成"IT 的事"。我见过仓配负责人全程不参与,等出问题了才发现没人懂 856 的 HL 层级。EDI 联调至少要有一个懂业务的人全程跟——报文里的每个字段,最终都对应仓库里的一个动作。IT 懂报文,业务懂动作,两个人必须坐在一张桌子前。
联调检查清单
- 850 商品编码映射表已建全,无遗漏行项;改单(860)逻辑已确认
- 856 HL 层级与实际装箱结构一致(Shipment→Order→Pack→Item)
- SSCC-18 一托盘一码,UCC-128 标签现场可扫
- ASN 在卡车预约时间前发出,对方系统可查
- 每次发报文后确认收到 997 回执
- 810 行项单价与 850 一致,SAC 段费用齐全,TDS 总金额与实发数量匹配
- 拆单、部分发货、改单场景在测试环境跑过
- X12 版本(4010/5010)与零售商要求一致
- ISA/GS 外壳收发方标识与测试环境一致
- 第一票真货选小批量,全程记录三个时间点








