Часто при использовании англоязычных версий операционных систем 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) крайне чувствителен к системной локали, так как он использует внутренние библиотеки рендеринга, обращающиеся к настройкам ОС.
Самый правильный путь с точки зрения администрирования Windows — это донести информацию о том, что "русский язык является основным", до всех служебных записей. Посмотрим, как это сделать по шагам:
Этот метод позволяет изменить поведение всех фоновых процессов, заставляя их использовать русский формат даты и времени.
Если вмешательство в региональные настройки ОС нежелательно или не помогает, мы можем явно указать серверу 1С, какой язык использовать для всех сеансов. Проанализируем, как добавить ключ запуска в реестр Windows:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (название может незначительно отличаться в зависимости от версии платформы).ImagePath.-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.
Если проблема сохраняется, можно рассмотреть вариант переустановки серверной части платформы. При установке 1С:Предприятия в мастере установки есть возможность выбора языка интерфейса по умолчанию. Выбор "Русского" на этом этапе прописывает необходимые параметры в конфигурационные файлы службы.
Многие опасаются, что при удалении и повторной установке сервера "полетят" логи или регистрации баз в кластере. Рассмотрим, как этого избежать:
C:\Program Files\1cv8\srvinfo).srvribrg.lst, и все базы с их идентификаторами останутся на месте.Однако, метод с правкой реестра (Способ 2) является более быстрым и менее рискованным аналогом этого действия.
В процессе анализа ситуации мы выяснили, что форматы Excel часто используют свои внутренние механизмы формирования файлов или опираются на макеты табличного документа, в которых формат уже жестко зафиксирован в виде строки. PDF же генерируется путем "печати" табличного документа во внутренний формат, где визуальное представление даты формируется непосредственно в момент формирования файла, опираясь на текущие системные вызовы операционной системы. Именно поэтому разница в форматах возникает даже при одном и том же исходном коде 1С.
Для исправления английских названий месяцев в PDF при рассылке:
-L ru в параметрах запуска службы ragent через реестр.