Каждый бухгалтер хотя бы раз сталкивался с ситуацией, когда при попытке загрузить выписку из клиент-банка программа 1С выдает длинный список ошибок вида: «Неверный реквизит заголовка, строка...», а в конце выводит фатальное сообщение: «Файл загрузки не соответствует стандарту (не найдена секция КонецФайла)». При этом вместо привычных названий полей на экране отображается непонятный набор символов («кракозябры» вроде ¦Т¦¦TАTБ¦¬TП¦д¦-TА¦-¦-TВ¦-).
В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем механизмы работы кодировок текстовых файлов и рассмотрим несколько способов решения этой проблемы — от быстрого временного «костыля» до фундаментальной настройки операционной системы и самой программы 1С.
Чтобы понять причину сбоя, давайте проанализируем, как устроен файл обмена между банком и 1С. Выгружаемый из личного кабинета банка файл (обычно с именем kl_to_1c.txt) представляет собой обычный текстовый документ. По общепринятому стандарту обмена он должен иметь строго определенную структуру. Первые строки файла всегда содержат служебную информацию (заголовок):
1CClientBankExchange
ВерсияФормата=1.01
Кодировка=Windows
Отправитель=БухгалтерияПредприятия
А в самом конце файла обязательно должна присутствовать строка:
КонецФайла
Когда программа 1С начинает чтение файла, она ожидает увидеть именно эти строки на русском языке. Однако если кодировка файла, в которой его сохранил банк, не совпадает с кодировкой, которую ожидает ваша операционная система Windows или сама платформа 1С, то вместо русских букв программа считывает поврежденные символы (битые байты).
Для программы строчка ВерсияФормата=1.01 превращается в ¦Т¦¦TАTБ¦¬TП.... Естественно, 1С не может распознать такое служебное слово, считает его ошибочным и выдает предупреждение на каждую строчку. А поскольку слово КонецФайла тоже превращается в нечитаемый набор символов, загрузчик выдает финальную ошибку о том, что структура файла нарушена.
Рассмотрим подробнее все способы решения этой проблемы — от простых к системным.
Если выписку нужно загрузить срочно, а времени на системные настройки нет, вас спасет простое пересохранение файла. Это временный метод, но он безотказно работает в 100% случаев.
Разберем этот процесс по шагам:
kl_to_1c.txt) на вашем компьютере.После этой процедуры кодировка файла принудительно преобразуется в понятный для вашей системы вид. Попробуйте снова загрузить файл в 1С — импорт пройдет успешно.
Каждый раз пересохранять файлы вручную неудобно и отнимает драгоценное время бухгалтера. Чаще всего корневая причина сбоя кроется в настройках самой операционной системы Windows. Особенно часто это происходит, если у вас установлена англоязычная версия ОС, сборка Windows без предустановленной русской локализации или вы работаете в 1С на удаленном сервере через терминальный доступ (RDP, Citrix).
В таких случаях система по умолчанию использует западноевропейскую кодировку (например, CP1252) для программ, которые не поддерживают Юникод (к которым относится часть внутренних механизмов старых платформ 1С). Нам необходимо явно указать Windows, что для не-юникод программ нужно использовать русский язык.
Проанализируем алгоритм исправления системных настроек:
После перезагрузки операционная система начнет корректно сопоставлять символы кириллицы, и файлы из клиент-банка будут читаться в 1С без предварительной ручной конвертации.
Иногда сам банк генерирует файл обмена в нестандартном виде или в устаревшей кодировке (например, DOS/CP866), либо, наоборот, в слишком современной (UTF-8 без метки BOM). Прежде чем скачивать файл выписки, обратите внимание на параметры экспорта, которые предлагает ваш интернет-банк.
Разберем основные правила выгрузки выписок:
УПП 1.3) не всегда могут корректно прочитать «из коробки». Используйте веб-версию банка на компьютере.В самой программе 1С, в обработке обмена с клиент-банком, также присутствует настройка ожидаемого формата данных. Если кодировка входящего файла и настройки обработки не совпадают, возникнет ошибка.
Выясним, как проверить эти параметры в вашей 1С:
Если вы столкнулись с ситуацией, когда база работает на «английском» сервере без возможности смены системной локали (например, на арендованном хостинге с жесткими ограничениями), проблему можно решить программным путем. Для этого мы можем доработать встроенную обработку загрузки или подключить ее как внешнюю.
Рассмотрим, как это сделать. Мы можем выгрузить обработку «КлиентБанк» (или использовать расширение конфигурации) и найти в ее модулях места чтения текстового файла. В коде 1С за чтение файлов отвечает объект ЧтениеТекста или метод Прочитать объекта ТекстовыйДокумент.
Проанализируем пример кода, в котором принудительно задается кодировка при чтении файла обмена:
// Пример принудительной установки кодировки Windows-1251 (ANSI) при чтении файла
ПутьКФайлу = "C:\temp\kl_to_1c.txt";
// Создаем объект чтения с явным указанием кодировки
ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.ANSI);
СтрокаФайла = ЧтениеФайла.ПрочитатьСтроку();
Пока СтрокаФайла <> Неопределено Цикл
// Здесь происходит разбор строк заголовка и секций документа
ПроанализироватьСтрокуВыписки(СтрокаФайла);
СтрокаФайла = ЧтениеФайла.ПрочитатьСтроку();
КонецЦикла;
ЧтениеФайла.Закрыть();
Если в кодовой базе вашей конфигурации определение кодировки происходит динамически в зависимости от переключателей на форме, мы можем оптимизировать этот алгоритм. Посмотрим на пример доработки функции определения кодировки, которая игнорирует некорректные системные настройки сервера:
Функция ОпределитьКодировкуФайла(ПутьКФайлу, ВыбраннаяКодировкаВИнтерфейсе)
// Если в интерфейсе выбрано "Авто" или возникли проблемы с локалью ОС,
// мы можем принудительно вернуть стандартную кодировку Windows-1251
Если ВыбраннаяКодировкаВИнтерфейсе = "Системная" Тогда
Возврат КодировкаТекста.ANSI;
ИначеЕсли ВыбраннаяКодировкаВИнтерфейсе = "DOS" Тогда
Возврат КодировкаТекста.OEM;
Иначе
Возврат КодировкаТекста.ANSI; // По умолчанию всегда ориентируемся на Windows-1251
КонецЕсли;
КонецФункции
Такой подход позволит обойти любые ограничения операционной системы, сделав процедуру загрузки выписок стабильной и независимой от внешних факторов окружения.
Иногда за ошибкой кодировки скрывается банальная ошибка выбора файла. Бухгалтер может случайно скачать из банка выписку в формате XML, XLS или CSV, а затем попытаться загрузить ее через форму обмена с банком.
Поскольку обработка загрузки ожидает увидеть строго текстовый формат, структура XML-тегов или разделители CSV вызовут точно такую же ошибку: «Неверный реквизит заголовка», так как программа попытается интерпретировать, например, тег <Document> как служебную строку 1С.
Убедитесь, что загружаемый вами файл имеет расширение строго .txt, а его первая строчка при открытии в блокноте выглядит как 1CClientBankExchange.
Мы подробно разобрали проблему несовместимости кодировок при импорте выписок и изучили все возможные методы ее устранения. Подводя итоги, дадим несколько практических рекомендаций: