Как исправить ошибку «Неправильное имя кодировки cp-1251» при обновлении БГУ 2.0

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

При обновлении конфигурации «Бухгалтерия государственного учреждения 2.0» (БГУ) пользователи и системные администраторы часто сталкиваются с критической ошибкой: «Неправильное имя кодировки cp-1251». Данная проблема обычно проявляется в момент запуска системы после применения обновления или непосредственно в процессе выполнения обработчиков обновления. Ошибка блокирует дальнейшую работу, и программа аварийно завершается.

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

Анализ причины возникновения ошибки

Для начала выясним причину. Исходя из технологического журнала и сообщений об ошибках, сбой происходит в общем модуле ИнформацияПриЗапуске. Платформа пытается прочитать текстовый файл или макет, используя стандартные механизмы работы с текстом. Ошибка локализована в следующей функции:


Функция ИзвлечьФайлыПакета(НосительМакетов, ИмяМакета) Экспорт
    // ... логика подготовки файлов ...
    ЧтениеТекста = Новый ЧтениеТекста(Файл.ПолноеИмя);
КонецФункции

Проблема заключается в том, что конструктор Новый ЧтениеТекста в некоторых сборках платформы 8.3.15 (например, 8.3.15.1830) некорректно взаимодействует с системными библиотеками ICU (International Components for Unicode), которые отвечают за поддержку кодировок в 1С. Если операционная система передает информацию о кодировке в формате, который библиотека считает недопустимым, или если в системе сбиты региональные стандарты, возникает исключение «Неправильное имя кодировки».

Ситуация осложняется тем, что в старых версиях БСП (Библиотеки стандартных подсистем), на которых базируется БГУ 2.0, кодировка cp-1251 могла быть прописана жестко. Современные стандарты и обновленные библиотеки ICU требуют использования более формализованного наименования — windows-1251. Если платформа не находит синонима для сокращения «cp», выполнение кода прерывается.

Решение 1: Проверка и исправление региональных настроек Windows

Рассмотрим самый эффективный способ, который помогает в большинстве случаев, особенно если база данных переносилась с одного компьютера на другой. Платформа 1С очень чувствительна к параметру «Язык программ, не поддерживающих Юникод».

Разберем по шагам, как это исправить в Windows 7 или Windows 10:

  1. Откроем Панель управления и перейдем в раздел «Часы, язык и регион», далее выберем пункт «Региональные стандарты».
  2. Перейдем на вкладку «Дополнительно».
  3. Найдем раздел «Язык программ, не поддерживающих Юникод». Нажмем кнопку «Изменить язык системы».
  4. Убедимся, что выбран «Русский (Россия)».
  5. Важный нюанс: даже если там уже выбран русский язык, необходимо выполнить процедуру «передергивания» настройки. Выберем другой язык (например, английский), нажмем «ОК» и согласимся на перезагрузку. После перезагрузки вернемся в это же меню, установим обратно «Русский (Россия)» и снова перезагрузим компьютер. Это принудительно перезапишет ключи реестра, отвечающие за кодовые страницы (ANSI 1251).

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

Решение 2: Очистка кэша конфигурации и базы

Посмотрим на ситуацию с точки зрения временных файлов. При переносе базы (копировании файла .1CD) на другой компьютер в локальном кэше пользователя могут сохраняться пути и настройки метаданных от старой среды окружения. Это может приводить к конфликту при обращении к макетам типа ИнформацияПриЗапуске.

Выполним очистку кэша по следующему алгоритму:

  1. Удалим информационную базу из списка в окне запуска 1С:Предприятия.
  2. Перейдем в каталоги временных файлов (обычно это %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8).
  3. Полностью удалим все папки с именами в виде длинных идентификаторов (GUID).
  4. Снова добавим базу в список.

Это заставит платформу заново инициализировать список доступных кодировок и корректно считать макеты из конфигурации.

Решение 3: Обновление платформы 1С

Выясним причину технического сбоя в самой платформе. Версия 8.3.15.1830 известна своими ошибками в работе с ICU на операционных системах Windows 7. Если вышеуказанные способы не помогают, необходимо обновить платформу до более стабильных веток.

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

Решение 4: Техническая правка кода (для разработчиков)

Если вы имеете доступ к конфигуратору и база находится на поддержке с возможностью изменения, мы можем проанализировать участок кода, вызывающий ошибку. Посмотрим на пример вызова функции ЧтениеТекста. Если в коде конфигурации (в модуле ИнформацияПриЗапуске) явно указана строка "cp-1251", её следует заменить на автоматическое определение кодировки или на стандарт "windows-1251".

Рассмотрим пример исправления:


// Было:
ЧтениеТекста = Новый ЧтениеТекста(Файл.ПолноеИмя, "cp-1251");

// Стало (вариант 1 - автоопределение):
ЧтениеТекста = Новый ЧтениеТекста(Файл.ПолноеИмя); 

// Стало (вариант 2 - более корректное имя):
ЧтениеТекста = Новый ЧтениеТекста(Файл.ПолноеИмя, "windows-1251");

Согласно справке (СП): «Если параметр не задан, формат текста будет определен автоматически по сигнатуре BOM в начале файла; если сигнатура BOM отсутствует, файл будет открыт в кодировке ANSI». В русском сегменте Windows ANSI — это и есть 1251. Убирая жесткое указание "cp-1251", мы позволяем платформе использовать системные механизмы, которые работают надежнее.

Заключение

Мы проанализировали проблему «Неправильное имя кодировки cp-1251» и выяснили, что она носит комплексный характер. В большинстве случаев достаточно исправить региональные настройки ОС и очистить кэш. Однако в долгосрочной перспективе наиболее правильным решением будет отказ от использования проблемных сборок платформы 8.3.15 в пользу более современных релизов.

← На главную