Как исправить проблему с кодировкой при выгрузке зарплатного реестра из 1С в Сбербанк?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

В процессе работы с программами 1С:Бухгалтерия 3.0 и 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с ситуацией, когда файл выгрузки зарплатного реестра не принимается банком (чаще всего Сбербанком) из-за несоответствия кодировки. Исторически сложилось, что банковские системы были настроены на работу с кодировкой Windows-1251 (ANSI), в то время как современные релизы 1С перешли на международный стандарт UTF-8.

В этой статье мы подробно разберем, почему возникают такие ошибки, как изменить настройки в интерфейсе программы, а также какие правки можно внести в программный код, если штатные средства недоступны. Проанализируем ситуацию комплексно: от настроек зарплатного проекта до нюансов работы в личном кабинете Сбербанка.

Причины изменения кодировки в новых релизах 1С

Давайте выясним причину, по которой фирма «1С» изменила привычный формат выгрузки. Это связано с обновлением стандартов электронного обмена (ЭОИ). Начиная с версий формата XML 3.3 и выше (на данный момент актуальна версия 3.7), использование UTF-8 стало обязательным требованием. Это позволяет корректно передавать спецсимволы и обеспечивать универсальность данных. Однако многие модули «Сбербанк Бизнес Онлайн» (СББОЛ), особенно старые версии «Импорта из 1С», продолжают ожидать данные строго в Windows-1251.

Рассмотрим по шагам три основных способа решения этой проблемы.

Способ 1. Настройка кодировки в справочнике «Зарплатные проекты»

Это самый правильный и безопасный метод, который не требует вмешательства в программный код. Начиная с релизов Бухгалтерия предприятия 3.0.38.51 и ЗУП 3.1.8, разработчики добавили возможность ручного выбора кодировки и формата файла.

Проанализируем последовательность действий для настройки:

  1. Перейдем в раздел «Выплаты» (или «Зарплата и кадры») и откроем справочник «Зарплатные проекты».
  2. Выберем из списка тот проект, по которому осуществляется выгрузка в Сбербанк.
  3. В карточке зарплатного проекта найдем настройки обмена данными.
  4. Обратим внимание на поле «Кодировка файла». Если там установлено значение «UTF-8», а банк выдает ошибку, нам необходимо принудительно установить «Windows-1251».
  5. Также проверим «Версию формата». Для Сбербанка наиболее стабильными являются версии 3.3 или 3.6. Версия 3.7 также поддерживается, но требует использования современных модулей импорта в банке.
  6. Сохраним изменения и попробуем сформировать выгрузку заново.

Если в вашем релизе 1С таких настроек еще нет, рекомендуется обновить конфигурацию до актуальной версии. При работе с несколькими базами для этой цели применяется программа для пакетного обновления конфигураций 1С.

Способ 2. Программное изменение кодировки (для разработчиков)

Если по каким-то причинам обновление конфигурации невозможно, а проблему нужно решить немедленно, мы можем внести изменения в общий модуль, отвечающий за формирование XML-файла. Рассмотрим пример исправления для конфигурации БП 3.0.

Нам потребуется внести изменения в общий модуль ОбменСБанкамиПоЗарплатнымПроектам. Проанализируем необходимые корректировки в двух функциях.

Во-первых, найдем функцию УдалитьПространствоИмен(ТекстXML). В ней необходимо изменить способ инициализации записи XML:


// Было:
ЗаписьXML.УстановитьСтроку("UTF-8");

// Нужно заменить на:
ЗаписьXML.УстановитьСтроку("windows-1251");

Во-вторых, найдем функцию ФайлОбменаСБанкамиПоЗарплатнымПроектам(...). Здесь требуется внести изменения в двух местах: при установке строки XML и при непосредственной записи текстового документа на диск:


// Находим и меняем строку формирования XML:
ЗаписьXML.УстановитьСтроку("windows-1251"); // Вместо "UTF-8"

// Находим строку записи файла и меняем кодировку на ANSI:
ТекстовыйДокумент.Записать(ИмяВременногоФайла, КодировкаТекста.ANSI); // Вместо КодировкаТекста.UTF8

Важно: При использовании этого метода помните, что после очередного обновления конфигурации эти правки могут быть затерты стандартным кодом 1С. Поэтому крайне желательно использовать механизм Расширений для переопределения этих функций.

Способ 3. Настройка импорта на стороне Сбербанка

Иногда проблему можно решить, не меняя ничего в 1С, а просто выбрав правильный инструмент в личном кабинете банка. В системе «Сбербанк Бизнес Онлайн» реализовано несколько механизмов загрузки реестров. Выясним, как использовать «Мастер импорта» для корректной обработки файлов в формате UTF-8.

Посмотрим на алгоритм действий в банк-клиенте:

  1. Зайдем в раздел «Дополнительно» — «Мастер импорта/экспорта» — «Импорт документов».
  2. При выборе файла для загрузки система позволяет вручную указать кодировку. Выберем в выпадающем списке «UTF-8».
  3. Если вы используете раздел «Услуги» — «Зарплатный проект» — «Электронный реестр», используйте кнопку «Импорт документов» (зеленая стрелка вверху справа).
  4. Избегайте раздела «Обмен с 1С» в старых интерфейсах, так как он зачастую жестко ограничен кодировкой Windows-1251.

Проблема метки BOM в файлах UTF-8

Разберем еще одну техническую тонкость. Часто банк отклоняет файл с ошибкой «Указанная кодировка не соответствует полю encoding», хотя в заголовке файла написано encoding="utf-8". Причина может крыться в наличии метки BOM (Byte Order Mark) — это невидимые символы в начале файла, которые 1С добавляет при записи в UTF-8.

Проанализируем, как это проверить. Откройте выгруженный файл с помощью обычного «Блокнота», выберите «Файл» — «Сохранить как». В нижней части окна рядом с кнопкой «Сохранить» вы увидите текущую кодировку. Если там указано «UTF-8 со спецификацией», это и есть BOM. Старые парсеры банков не умеют его игнорировать. Именно поэтому переход на Windows-1251 в настройках 1С (как описано в Способе 1) является самым надежным решением, так как в ANSI-кодировках метка BOM отсутствует.

Современная альтернатива: 1С:ДиректБанк

Чтобы навсегда забыть о проблемах с файлами, кодировками и флешками, рассмотрим возможность перехода на технологию DirectBank. Это прямое взаимодействие между вашей базой 1С и сервером Сбербанка.

Преимущества данного подхода:

Для настройки DirectBank необходимо в справочнике «Зарплатные проекты» установить флаг «Использовать электронный обмен документами» и пройти простую процедуру аутентификации через логин/пароль СББОЛ или по токену.

Подводя итог, мы видим, что проблема с кодировкой — это следствие эволюции стандартов обмена данными. Наиболее эффективным решением сегодня является либо корректная настройка параметров в карточке зарплатного проекта 1С, либо полный отказ от файлового обмена в пользу технологии DirectBank.

← На главную