Я создал приложение для создания файлов NACHA для клиента. Похоже, что все делает правильно, за исключением того, что при попытке загрузить вывод в систему ACH файлы отклоняются. Насколько я смог выделить проблему, похоже, что это связано с разделителем записей, ожидаемым форматом NACHA.
Приложение извлекает данные из нескольких электронных таблиц Excel и выводит файл .txt в формате NACHA. Из-за требований клиента он написан на 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). Должно быть, они использовали клавишу «Ввод» для завершения каждой записи, которая, насколько мне известно, вставляет CR. Поэтому вместо последней строки выше я попробовал это:
stream.Write FileHeader
stream.Write Chr(13)
Но на этот раз система банка увидела, что весь файл находится в одной строке.
Я посмотрел примеры кода на других языках, например, js, но все они, похоже, применяют неявные разделители записей, аналогично методу WriteLine, используемому здесь, поэтому я не вижу, как создаются отдельные записи.
Я в недоумении, и, честно говоря, из моей глубины. Кто-нибудь может предложить некоторое понимание этого? Я лаю не на том дереве, фокусируясь на разделителе записей?