В процессе работы с программами 1С:Бухгалтерия 3.0 и 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с ситуацией, когда файл выгрузки зарплатного реестра не принимается банком (чаще всего Сбербанком) из-за несоответствия кодировки. Исторически сложилось, что банковские системы были настроены на работу с кодировкой Windows-1251 (ANSI), в то время как современные релизы 1С перешли на международный стандарт UTF-8.
В этой статье мы подробно разберем, почему возникают такие ошибки, как изменить настройки в интерфейсе программы, а также какие правки можно внести в программный код, если штатные средства недоступны. Проанализируем ситуацию комплексно: от настроек зарплатного проекта до нюансов работы в личном кабинете Сбербанка.
Давайте выясним причину, по которой фирма «1С» изменила привычный формат выгрузки. Это связано с обновлением стандартов электронного обмена (ЭОИ). Начиная с версий формата XML 3.3 и выше (на данный момент актуальна версия 3.7), использование UTF-8 стало обязательным требованием. Это позволяет корректно передавать спецсимволы и обеспечивать универсальность данных. Однако многие модули «Сбербанк Бизнес Онлайн» (СББОЛ), особенно старые версии «Импорта из 1С», продолжают ожидать данные строго в Windows-1251.
Рассмотрим по шагам три основных способа решения этой проблемы.
Это самый правильный и безопасный метод, который не требует вмешательства в программный код. Начиная с релизов Бухгалтерия предприятия 3.0.38.51 и ЗУП 3.1.8, разработчики добавили возможность ручного выбора кодировки и формата файла.
Проанализируем последовательность действий для настройки:
Если в вашем релизе 1С таких настроек еще нет, рекомендуется обновить конфигурацию до актуальной версии. При работе с несколькими базами для этой цели применяется программа для пакетного обновления конфигураций 1С.
Если по каким-то причинам обновление конфигурации невозможно, а проблему нужно решить немедленно, мы можем внести изменения в общий модуль, отвечающий за формирование XML-файла. Рассмотрим пример исправления для конфигурации БП 3.0.
Нам потребуется внести изменения в общий модуль ОбменСБанкамиПоЗарплатнымПроектам. Проанализируем необходимые корректировки в двух функциях.
Во-первых, найдем функцию УдалитьПространствоИмен(ТекстXML). В ней необходимо изменить способ инициализации записи XML:
// Было:
ЗаписьXML.УстановитьСтроку("UTF-8");
// Нужно заменить на:
ЗаписьXML.УстановитьСтроку("windows-1251");
Во-вторых, найдем функцию ФайлОбменаСБанкамиПоЗарплатнымПроектам(...). Здесь требуется внести изменения в двух местах: при установке строки XML и при непосредственной записи текстового документа на диск:
// Находим и меняем строку формирования XML:
ЗаписьXML.УстановитьСтроку("windows-1251"); // Вместо "UTF-8"
// Находим строку записи файла и меняем кодировку на ANSI:
ТекстовыйДокумент.Записать(ИмяВременногоФайла, КодировкаТекста.ANSI); // Вместо КодировкаТекста.UTF8
Важно: При использовании этого метода помните, что после очередного обновления конфигурации эти правки могут быть затерты стандартным кодом 1С. Поэтому крайне желательно использовать механизм Расширений для переопределения этих функций.
Иногда проблему можно решить, не меняя ничего в 1С, а просто выбрав правильный инструмент в личном кабинете банка. В системе «Сбербанк Бизнес Онлайн» реализовано несколько механизмов загрузки реестров. Выясним, как использовать «Мастер импорта» для корректной обработки файлов в формате UTF-8.
Посмотрим на алгоритм действий в банк-клиенте:
Windows-1251.Разберем еще одну техническую тонкость. Часто банк отклоняет файл с ошибкой «Указанная кодировка не соответствует полю encoding», хотя в заголовке файла написано encoding="utf-8". Причина может крыться в наличии метки BOM (Byte Order Mark) — это невидимые символы в начале файла, которые 1С добавляет при записи в UTF-8.
Проанализируем, как это проверить. Откройте выгруженный файл с помощью обычного «Блокнота», выберите «Файл» — «Сохранить как». В нижней части окна рядом с кнопкой «Сохранить» вы увидите текущую кодировку. Если там указано «UTF-8 со спецификацией», это и есть BOM. Старые парсеры банков не умеют его игнорировать. Именно поэтому переход на Windows-1251 в настройках 1С (как описано в Способе 1) является самым надежным решением, так как в ANSI-кодировках метка BOM отсутствует.
Чтобы навсегда забыть о проблемах с файлами, кодировками и флешками, рассмотрим возможность перехода на технологию DirectBank. Это прямое взаимодействие между вашей базой 1С и сервером Сбербанка.
Преимущества данного подхода:
Для настройки DirectBank необходимо в справочнике «Зарплатные проекты» установить флаг «Использовать электронный обмен документами» и пройти простую процедуру аутентификации через логин/пароль СББОЛ или по токену.
Подводя итог, мы видим, что проблема с кодировкой — это следствие эволюции стандартов обмена данными. Наиболее эффективным решением сегодня является либо корректная настройка параметров в карточке зарплатного проекта 1С, либо полный отказ от файлового обмена в пользу технологии DirectBank.