При работе с банковскими выписками пользователи часто сталкиваются с ситуацией, когда текстовый файл, полученный из банка, корректно отображается в обычном Блокноте, но при попытке загрузки в 1С превращается в нечитаемый набор символов. Рассмотрим подробнее, почему это происходит и как устранить проблему на уровне настроек системы.
Разберем типичный пример. В 1С вместо привычных слов мы видим строки вида /CTC/876/╧┼╨┼┬╬─ ╬╤╥└╥╩└ ╧╬ ╤╫┼╥╙. В то же время, если открыть этот же файл в системном текстовом редакторе, мы увидим нормальный русский текст: /CTC/876/ПЕРЕВОД ОСТАТКА ПО СЧЕТУ.
Проанализируем ситуацию с технической точки зрения. Причина кроется в несовпадении кодировок:
Когда символ «П» (код CF в Windows-1251) считывается алгоритмом, ожидающим CP866, он преобразуется в символ псевдографики ╧. Таким образом, все русские буквы заменяются на значки, напоминающие рамки и черточки.
Прежде чем менять настройки, нам необходимо убедиться, с каким именно форматом мы работаем. Посмотрим на структуру данных, представленную в сообщении:
:20:9401006038012113
:25:705000001
:28:21/1
:60F:C060207RUB317214631,98
:61:0602070207DB103062103,36NMSCRU1ZILB06038000B//603805017
Теги вида :20:, :25:, :61: указывают на международный стандарт SWIFT MT940. В отличие от привычного российского формата обмена с клиент-банком, где используются ключевые слова типа СекцияДокумент, формат MT940 более строгий и часто используется при работе с валютными счетами или в международных банковских группах.
Выясним причину, по которой типовая загрузка отрабатывает некорректно. В современных конфигурациях 1С (КА 2.4, ERP, Бухгалтерия предприятия 3.0) параметры загрузки привязаны к конкретному банковскому счету. Выполним следующие действия:
DOS на Windows.Если смена настройки в 1С не помогает, проанализируем исходный файл с помощью инструментов, позволяющих точно определить кодировку. Рекомендуем использовать Notepad++:
Откроем файл в Notepad++ и обратим внимание на нижний правый угол окна программы. Там будет указана текущая кодировка (например, ANSI или UTF-8). Если мы видим нормальный текст, но 1С все равно выдает ошибки, попробуйте пересохранить файл через меню Кодировки -> Преобразовать в UTF-8 (без BOM). Это поможет, если 1С «спотыкается» об невидимые спецсимволы в начале файла.
Также для анализа можно использовать Far Manager. Он обладает встроенными алгоритмами автоопределения кодировки, основанными на частоте повторения символов русского алфавита. Это особенно полезно, если в файле присутствуют экзотические кодировки вроде KOI8-R.
Если вы создаете собственную обработку для загрузки таких файлов, крайне важно явно указывать кодировку при чтении. Рассмотрим пример кода на языке 1С, который позволяет прочитать файл в нужной кодировке:
// Пример чтения текстового файла с явным указанием кодировки Windows-1251
ПутьКФайлу = "C:\Bank\statement.txt";
ТекстовыйДокумент = Новый ТекстовыйДокумент;
Попытка
// Используем КодировкаТекста.ANSI для Windows-1251
ТекстовыйДокумент.Прочитать(ПутьКФайлу, КодировкаТекста.ANSI);
Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
Стр = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки);
// Здесь выполняется парсинг строки
КонецЦикла;
Исключение
Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
КонецПопытки;
Если же банк прислал файл в кодировке DOS, следует использовать КодировкаТекста.OEM. Использование метода Прочитать без указания второго параметра заставляет 1С пытаться определить кодировку автоматически, что не всегда работает корректно на специфических банковских форматах.
Иногда даже при правильной кодировке 1С может выдать ошибку «Файл не является текстовым» или «Неверный формат». Это может быть связано с наличием символа BOM (Byte Order Mark). Блокнот его скрывает, а парсер 1С может воспринять как недопустимый символ в первой позиции первой строки. В этом случае файл необходимо программно или вручную очистить от этого заголовка.
Также проверим окончания строк. Системы, работающие на Unix/Linux, используют только символ LF, в то время как Windows ожидает пару CRLF. Типовые обработки 1С, использующие метод Прочитать(), обычно справляются с обоими вариантами, но самописные алгоритмы, ищущие Символы.ПС, могут дать сбой.
Важно: Всегда уточняйте у службы поддержки банка, какой стандарт выгрузки они используют. Если это MT940, убедитесь, что ваша версия 1С поддерживает этот диалект формата, так как разные банки могут добавлять свои специфические поля в блоки :61: и :86:.