Почему в расчётном листке при рассылке месяц выводится на английском языке и как это исправить?

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

Часто при использовании англоязычных версий операционных систем Windows Server пользователи сталкиваются с неприятной особенностью: при формировании отчетов вручную всё выглядит корректно, но стоит запустить рассылку отчетов по расписанию (через фоновые задания), как названия месяцев в формате PDF начинают выводиться на английском языке (например, NOVEMBER 2016 вместо НОЯБРЬ 2016). При этом форматы XLS или DOC могут продолжать выводить данные на русском.

Разберем, почему это происходит, и проанализируем способы решения проблемы, не прибегая к изменению программного кода конфигурации, что особенно важно для систем на поддержке или при строгом корпоративном регламенте.

Выясним причину проблемы

Проблема кроется в особенностях работы фоновых заданий в платформе 1С:Предприятие 8.3. В отличие от интерактивного сеанса, который запускается под конкретным пользователем с его региональными настройками, фоновое задание (рассылка) выполняется в контексте системной службы 1C:Enterprise 8.3 Server Agent.

Рассмотрим механизм формирования строки даты. В коде это обычно выглядит так:

Макеты.Шапка1.Параметры.ПериодПредставление = Формат(СтрокаШапки.МесяцНачисления, "ДФ='ММММ гггг'");

Функция Формат использует текущую локаль сеанса. Если сервер 1С запущен на английской ОС, то системная учетная запись, под которой работает служба (например, USR1C8 или LocalSystem), по умолчанию использует английские стандарты форматирования. Встроенный механизм генерации PDF в 1С (начиная с версии 8.3) крайне чувствителен к системной локали, так как он использует внутренние библиотеки рендеринга, обращающиеся к настройкам ОС.

Способ 1: Копирование региональных настроек в системный профиль

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

  1. Зайдите на сервер под учетной записью администратора.
  2. Откройте Панель управления (Control Panel) и перейдите в раздел Региональные стандарты (Region).
  3. На вкладке "Форматы" убедитесь, что выбран Русский (Россия).
  4. Перейдите на вкладку Дополнительно (Administrative).
  5. Нажмите кнопку Копировать параметры (Copy settings).
  6. В открывшемся окне вы увидите текущие настройки для пользователя и настройки для системных учетных записей. Если в системных записях указан английский язык, установите галочку Экспортировать в системные учетные записи и приветственный экран (Welcome screen and system accounts).
  7. Нажмите ОК и перезагрузите сервер (или как минимум службу агента 1С).

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

Способ 2: Принудительная установка языка через параметры запуска службы

Если вмешательство в региональные настройки ОС нежелательно или не помогает, мы можем явно указать серверу 1С, какой язык использовать для всех сеансов. Проанализируем, как добавить ключ запуска в реестр Windows:

  1. Откройте редактор реестра (regedit).
  2. Перейдите к ветке: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (название может незначительно отличаться в зависимости от версии платформы).
  3. Найдите параметр ImagePath.
  4. В конец строки вызова исполняемого файла добавьте параметр -L ru. Также рекомендуется добавить -VL ru для установки языка сообщений. Пример строки должен выглядеть примерно так:

"C:\Program Files\1cv8\8.3.9.2033\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -L ru

После изменения реестра обязательно перезапустите службу Агента сервера 1С. Это гарантирует, что любое фоновое задание, включая рассылку расчетных листков, будет инициализироваться с русской локалью независимо от настроек Windows.

Способ 3: Переустановка сервера 1С с выбором языка

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

Многие опасаются, что при удалении и повторной установке сервера "полетят" логи или регистрации баз в кластере. Рассмотрим, как этого избежать:

Однако, метод с правкой реестра (Способ 2) является более быстрым и менее рискованным аналогом этого действия.

Почему XLS формировался правильно?

В процессе анализа ситуации мы выяснили, что форматы Excel часто используют свои внутренние механизмы формирования файлов или опираются на макеты табличного документа, в которых формат уже жестко зафиксирован в виде строки. PDF же генерируется путем "печати" табличного документа во внутренний формат, где визуальное представление даты формируется непосредственно в момент формирования файла, опираясь на текущие системные вызовы операционной системы. Именно поэтому разница в форматах возникает даже при одном и том же исходном коде 1С.

Резюме

Для исправления английских названий месяцев в PDF при рассылке:

  1. Проверьте, установлены ли региональные настройки для системных учетных записей в Панели управления.
  2. Используйте ключ -L ru в параметрах запуска службы ragent через реестр.
  3. Всегда перезагружайте службу сервера 1С после внесения изменений в настройки локали.
← На главную