首页 > 解决方案 > NACHA 文件格式的记录分隔符?

问题描述

我已经构建了一个应用程序来为客户生成 NACHA 文件。它似乎做的一切都是正确的,除了在尝试将输出上传到 ACH 系统时文件被拒绝。就我能够隔离问题而言,它似乎与 NACHA 格式所期望的记录分隔符有关。

该应用程序从多个 Excel 电子表格中提取数据并以 NACHA 格式输出 .txt 文件。由于客户要求,它是用 VBA 编写的(尽管 VB.NET 可能是一个替代选项)。

输出遵循所有记录的格式要求,但银行的系统会以错误消息进行响应,指示记录长度不正确。但是,我们尝试将输出的精确副本手动输入到记事本中,银行系统接受了该输出(!)

输出是通过 TextStream 方法生成的。这是我的原始代码的缩写示例:

Dim fso As Object
Dim stream As Object

'Create output file
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.fileexists(SavePath) Then Kill SavePath
Set stream = fso.CreateTextFile(SavePath, False, True)

'Insert file header
FileHeader = Get_1_Record
stream.WriteLine FileHeader

... 其中 Get_1_Record 是一个子函数,用于组装包含此特定记录的文本字符串。

WriteLine 自动在记录末尾插入换行符(ASCII 码 10),这似乎是不正确的。当银行的技术支持人员告诉我他们已成功上传了手动输入的文件副本时,我认为答案应该是用回车代替(ASCII 代码 13)。他们必须使用“Enter”键来结束每条记录,据我所知,它插入了一个 CR。所以代替上面的最后一行,我尝试了这个:

stream.Write FileHeader
stream.Write Chr(13)

但这一次,银行的系统将整个文件视为一行。

我看过其他语言的代码示例,例如 js,但它们似乎都在应用隐式记录分隔符,类似于这里使用的 WriteLine 方法,所以我看不到单个记录是如何构造的。

我在这里不知所措,坦率地说,我的深度不够。有人可以对此提供一些见解吗?我是否通过专注于记录分隔符来找出错误的树?

标签: excelvbavb.net

解决方案


我们尝试将输出的精确副本手动输入记事本,银行系统接受了该输出(!)

这是正常的,因为记事本不显示换行符等分隔符......问题可能是银行看到的是 chr(13),但期待 chr(13) & chr(10) 技术上没有即使在记事本上可以看到它们的大小相同,它们的大小也不相同。如果您尝试用 chr(13) & chr(10) 和 chr(10) 替换 chr(13) 它应该可以工作

所以试试:

stream.Write vbcrlf

推荐阅读