零售EDI:HornBach EDI 项目案例
HornBach 是一家总部位于德国的家居和建筑材料零售商,成立于1968年。它以大型仓储式商店而闻名,提供广泛的产品,包括建筑材料、园艺、家居装饰和工具等。
近期我们帮助HornBach的供应商W公司成功实现了与HornBach的EDI直连,除了满足基本的对接需求之外,为了处理庞大的订单量,降低业务人员的工作量,提高其业务流程的自动化水平,W公司提出希望实现EDI系统与其Salesforce系统之间的集成。基于知行之桥EDI系统的EDI解决方案,支持通过中间数据库、Webservice、API等方式实现与企业内部业务系统的集成。接下来让我们一起看看W公司使用知行之桥EDI系统对接HornBach的项目中都有哪些注意事项吧!
梳理需求文档
1.Technical_data_Sheet_HORNBACH
HornBach会提供一个Technical_data_Sheet_HORNBACH文档给供应商,供应商需要填写这个文档,提供公司明细、EDI联系人信息、EDI服务提供商信息、EDI ID等,并通过邮件回复HornBach。
HornBach也向供应商说明了EDI项目中需要传输的单据类型:ORDERS采购订单(D96A)、DESADV发货通知(D96A)以及INVOIC发票(D01B或者D96A)。提供了测试和生产系统的AS2连接信息以及证书,供应商需要在指定位置填写自己的AS2测试和生产环境的AS2连接信息。
供应商还可以在这个文档中找到HornBach EDI团队的联系信息以及HornBach的GLN、地址以及VAT-ID信息。
2.HB-EDI-NVE-Guideline
HornBach提供的EDI Guideline主要内容包括:EDI连接流程,订单、发货通知以及发票的基本介绍、装运信息、运输信息、发货通知报文的结构示例等内容。在开始EDI项目实施之前,供应商的EDI负责人需要认真阅读此内容。
3.EDI 报文规范资料
针对本次EDI项目中需要传输的三种EDI单据:ORDERS采购订单、DESADV发货通知以及INVOIC发票,HornBach分别提供了与之匹配的EDI报文规范,作为处理EDI报文的映射关系以及注明各EDI字段业务含义的重要参考,并提供了不同业务场景下的示例报文。
此外HornBach还会向供应商提供一个 EDI Agreements文档,供应商需要阅读并同意此文档的内容。
集成方案
根据HornBach提供的上述EDI资料以及邮件沟通,确认了本次项目中使用的传输协议、报文标准以及业务单据类型,接下来需要确认使用何种方式集成W公司内部Salesforce系统。我们的项目经理与W公司的项目负责人沟通之后,最终决定采用接口调用的方式实现集成。接收来自HornBach的订单数据时,由知行之桥调W公司的接口推送数据;向HornBach发送发货通知以及发票时,由W公司调知行之桥的接口推送数据。
项目成果
根据上述需求,在知行之桥EDI系统中搭建如下所示的工作流:
上图中的每一个小方块即为一个端口(功能模块),蓝色连接线连接各个功能模块,箭头所指方向即为数据流向。将AS2连接、报文格式转换、数据映射处理、系统集成等不同的功能封装在不同的端口中,用户能够掌握数据流向,快速定位问题。作为一款低代码的EDI软件产品,实现与交易伙伴的EDI对接的绝大部分操作都只需要在可视化界面中操作即可。
第一行工作流实现的功能为:通过AS2,接收HornBach发来的ORDERS采购订单,并将其转换为JSON,通过接口调用,将数据从知行之桥EDI系统获取到Salesforce系统中,实现与供应商Salesforce 系统的集成。
第二行工作流实现的功能为:从Salesforce处获取包含INVOIC发票以及DESADV发货通知数据的JSON文件,将其转换为HornBach要求的EDI报文,并通过AS2发送给HornBach。
AS2连接测试
对接HornBach时,需要注意HornBach的EDI ID为其GLN编号,对供应商而言,在EDI传输过程中的EDI ID也需要是供应商的GLN编号,如果没有则需要先申请这个编号。
准备好供应商的GLN编号、供应商编号以及VAT编号之后,还需要准备3个商品的GTINS以及相应的供应商内部货号,HornBach将会基于这些内容生成一份测试订单,通过邮件发给供应商。写邮件给HornBach,请求进行AS2连接测试。
需要注意,虽然HornBach提供的文档中提供了生产和测试两套AS2连接信息,但实际项目中直接进行了生产系统的连接测试,测试环境HornBach并未启用。
基于知行之桥EDI系统配置HornBach的AS2连接信息,需要在工作流 AS2 端口的设置 选项卡下进行配置。需要配置的信息包括:AS2 ID、交易伙伴 URL、加密算法以及交易伙伴证书。如下所示:
根据HornBach提供的EN_Technical_data_Sheet_HORNBACH 文档中的内容进行配置即可,需要注意在配置 交易伙伴证书 的时候,需要将文档中 AS2(http)下的证书配置在上图中的 加密证书 位置;将AS2(https)下的证书配置在上图中的 TLS服务器证书 位置。
EDI业务测试
ORDERS 采购订单
1.HornBach 的订单类型
HornBach的订单编号总是以商店编号开始的7位数字。订单类型体现在ORDERS报文的BGM字段中,由3位数字作为标识:
“220”表示HornBach 商店的库存订单
“221”表示初始设备
“224”表示从供应商发货的网店订单
“227”表示客户订单/特别订单
针对以上4种订单类型,ORDERS EDI 规范中提供了对应的4个报文。
如果是从供应商发货的网点订单,则报文中将会出现两次 NAD+UC 字段:
- 最终客户的私人送货地址
- HornBach商店 地址,店内取货
2.ORDERS订单中的ID
HornBach 要求ORDERS报文中的买方ID、收货方ID、供应商ID、最终用户ID等都需要填写为相应角色的GLN编号。
3.在知行之桥EDI系统中的设置
根据HornBach发来的ODRERS报文,需要修改EDIFACT端口下关于EDI分隔符的默认配置,如下所示:
在 高级设置 选项卡下找到重复元素分隔符,在这里输入 空格,点击右上角的 保存变更 按钮即可。
DESADV 发货通知
1.本次对接HornBach的EDI项目中,W公司所处的业务模式为直发卖场,没有涉及到SSCC的信息,报文中不体现包装部分内容。
2.HornBach的发货场景包括:
- 一个DESADV对应一个ORDERS订单
如果当前DESADV仅针对一个ORDERS订单发货,则只需要在主信息中体现订单号。
- 一个DESADV对应多个ORDERS订单
如果当前DESADV中需要包含多条订单信息,则需要在报文的明细中(RFF字段),填写各物料对应的订单号。
3.发货通知单号由不超过10位的字母+数字组成。
4.在知行之桥EDI系统中的设置
与订单相同,通过知行之桥EDI系统生成DESADV的时候,需要将 EDIFACT端口->高级设置 选项卡 下的重复元素分隔符设置为空格。
INVOIC发票
1.关于自由文本的注意事项
INVOIC报文的FTX字段,当限定符为 SUR的时候,表示供应商注释,这里HornBach规定了3段文字,供应商需要根据实际情况进行填写。包含的场景有:
- 对于在德国为税务目的注册的发票方,如果同意后续费用减少(例如现金折扣,奖金),则第1点的文本是强制性的。
- 对于欧盟内部的免税配送,第二点的内容是强制性的。
- 对于欧盟内的免税送货到罗马尼亚发票收件人,从第3点的文本是强制性的。
2.在INVOIC单据中,供应商提供的发票数据如果遇到需要填写国家,注意需要填写ISO3166标准下的两位国家代码。
3.多税率的情况
在INVOIC报文中,税率信息被存储在TAX字段,如果涉及到不同税率,TAX字段需要出现多次。
示例:如果物料A和物料B的税率为X,物料C和物料D的税率为Y,则在INVOIC中,需要将相同税率的物料进行汇总。
阅读原文
相关文章:

零售EDI:HornBach EDI 项目案例
HornBach 是一家总部位于德国的家居和建筑材料零售商,成立于1968年。它以大型仓储式商店而闻名,提供广泛的产品,包括建筑材料、园艺、家居装饰和工具等。 近期我们帮助HornBach的供应商W公司成功实现了与HornBach的EDI直连,除了满…...

SpringBoot 集成RabbitMQ 实现钉钉日报定时发送功能
文章目录 一、RabbitMq 下载安装二、开发步骤:1.MAVEN 配置2. RabbitMqConfig 配置3. RabbitMqUtil 工具类4. DailyDelaySendConsumer 消费者监听5. 测试延迟发送 一、RabbitMq 下载安装 官网:https://www.rabbitmq.com/docs 二、开发步骤:…...

基于java ssm springboot女士电商平台系统源码+文档设计
基于java ssm springboot女士电商平台系统源码文档设计 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…...

Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)
1.基于小波变换的阈值收缩法去噪 该方法利用小波变换分离出信号中的噪声成分,并通过设置合适的阈值对小波系数进行收缩,保留主要信息的同时,去除噪声。 %基于小波变换的阈值收缩法去噪算法 clear clc Iimread(nana.png); X im2double(I); …...
leetcode hot100【LeetCode 70. 爬楼梯】java实现
LeetCode 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数。 示例 1: 输入:n 2 输出:2 解释&…...
Java异常2
异常抛出的两种形式: 系统隐式抛出;int n10/0;—隐式抛出一个异常;手动抛出异常:throw new Exception(); import java.util.InputMismatchException; import java.util.Scanner;public class Main {public static void main(Str…...
2024熵密杯初始题2
问题简要: 已知 counter 0x7501E6EA token 0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A 伪造出另一个可以通过验证的counter和token。 给出token生成及验证代码如下: import binascii from gmssl import sm3# 读取HMAC ke…...
echarts属性之title
title 标题组件,包含主标题和副标题。 在 ECharts 2.x 中单个 ECharts 实例最多只能拥有一个标题组件。但是在 ECharts 3 中可以存在任意多个标题组件,这在需要标题进行排版,或者单个实例中的多个图表都需要标题时会比较有用。 例如下面不…...

VUE errolog, vue 错误集
I) installation As to command “npm install” on cmd or powershell, we must execute it under the program folder...
驱动开发系列13 - Linux tasklet用法介绍
一:概述 Tasklet 是 Linux 内核中的一种轻量级任务调度机制,通常用于在中断上下文中执行短小的任务。它们在软中断处理过程中被调用,允许将较长的处理工作延后到一个较低优先级的上下文中,以减少中断处理的延迟。Tasklet 的使用可以帮助开发者更好地管理系统资源,提高性能…...

redis实现分布式锁,go实现完整code
Redis分布式锁 Redis 分布式锁是一种使用 Redis 数据库实现分布式锁的方式,可以保证在分布式环境中同一时间只有一个实例可以访问共享资源。 实现机制 以下是实现其加锁步骤: 获取锁 在 Redis 中,一个相同的key代表一把锁。是否拥有这把锁&…...

解析日期、编码
解析日期 这里指的是将字符串或者object类型的日期,转换成panda或python的日期类型。 主要的是dtype的变化:object / str —> datetime64[ns] # modules well use import pandas as pd import numpy as np import seaborn as sns import datetime# …...
【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
restoreOverrideCursor() 是 Qt 中 QApplication 类提供的一个静态函数,用来恢复鼠标光标到应用程序之前设置的状态。 在 Qt 中,你可以使用 QApplication::setOverrideCursor() 来临时更改鼠标光标的外观。例如,当执行一些耗时操作时&#x…...

重生之“我打数据结构,真的假的?”--2.单链表(无习题)
C语言中的单链表总结 单链表是一种基础的数据结构,广泛应用于C语言编程中。它由节点组成,每个节点包含数据和指向下一个节点的指针。单链表的优点在于动态内存分配和高效的插入与删除操作。本文将详细探讨单链表的定义、基本操作、应用场景以及相关示例…...

【有啥问啥】视频插帧算法技术原理详解
视频插帧算法技术原理详解 引言 视频插帧(Video Interpolation)技术,作为计算机视觉领域的一项重要应用,旨在通过算法手段在已有的视频帧之间插入额外的帧,从而提升视频的帧率,使其看起来更加流畅。这一技…...
Leetcode148,109以及二者的合并 -> Tencent面试算法题 - 无序双向链表转BST
根源简述 这道题是腾讯在2024/8/30考的一道面试题,整体来说,难度不大,就是代码量稍稍有点儿大,让我们一起来看一下吧 题目描述 整数无序双向链表能否转BST(二叉搜索树),如果能,怎么转…...

【蓝桥杯选拔赛真题77】python计算小球 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
目录 python计算小球 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python计算小球 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…...

获取Hive表备注
DESCRIBE EXTENDED 表名;先获取Detailed Table Information这行的data_type字段数据,进行正则匹配,拿到表备注,如下: String str ReUtil.get("parameters:\\{(?!.*?\\().*transient_lastDdlTime.*?comment(.*?)\\}&quo…...
10.30学习
一、科学计数法 C语言中的科学计数法主要用于表示非常大或非常小的浮点数,它遵循以下格式: 1. E或e表示指数: 科学计数法中的E或e用来表示“指数”(Exponent)。例如, 1.23e4 或 1.23E4 表示 1.23 * 10^4…...
什么是栈溢出
一、什么是栈溢出 栈溢出(Stack Overflow)就是指在程序运行过程中,往栈里存放的数据超过了栈所能容纳的最大容量,从而导致程序出现异常行为的情况。这就好比一个箱子本来只能装一定数量的物品,硬要往里面塞更多的东西&…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...