Почему в отчетах через веб-сервисы 1С даты и числа выводятся на английском языке и как это исправить?

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

При работе с платформой 1С:Предприятие часто возникает специфическая проблема: при обычном формировании отчетов в интерактивном режиме пользователем все даты и суммы прописью выводятся корректно на русском языке, но стоит запустить генерацию того же документа (например, Торг-12 или счета-фактуры) через HTTP- или Web-сервис в формате PDF, как месяцы в датах и денежные суммы прописью начинают выводиться на английском языке.

Особенно часто с этим сталкиваются системные администраторы и разработчики при развертывании баз на Windows Server 2016/2019, который изначально был установлен на английском языке, а затем русифицирован с помощью языковых пакетов (Language Packs). Давайте подробно разберем, почему так происходит, и рассмотрим по шагам четыре эффективных способа решения этой проблемы.

Выясняем причину: почему сбивается локализация сеанса?

Для того чтобы понять природу этой ошибки, выполним несложный диагностический шаг. Если в коде HTTP-сервиса вызвать функцию ТекущийКодЛокализации(), то в проблемной системе мы увидим значение en_US вместо ожидаемого ru_RU. Возникает логичный вопрос: почему сеанс веб-сервиса инициализируется с англоязычной локалью, если в самой системе и в региональных настройках информационной базы 1С везде жестко указан русский язык?

Дело в особенностях работы веб-серверов. Когда запрос к 1С поступает через Web- или HTTP-сервис, управление передается веб-серверу — чаще всего это Internet Information Services (IIS) или Apache. Эти службы работают в операционной системе Windows под специальными системными учетными записями:

Если операционная система изначально устанавливалась как англоязычная (English US), то все встроенные системные профили (SYSTEM, NetworkService, LocalService) навсегда сохраняют региональные настройки en_US. Обычная русификация интерфейса Windows через Панель управления меняет настройки только для текущего активного пользователя (например, Администратора) и для новых учетных записей, но не затрагивает уже существующие скрытые системные профили служб. В результате веб-сервер запускает рабочий процесс 1С в окружении с английской локалью, что напрямую влияет на форматирование дат и чисел.

Ниже подробно описаны четыре практических метода исправления этой ситуации.

Способ 1. Копирование региональных стандартов в системные профили Windows

Это самый надежный системный метод, который решает проблему глобально на уровне операционной системы. Мы принудительно скопируем правильные русские региональные настройки текущего пользователя во все системные профили служб Windows.

  1. Войдите в систему Windows Server под учетной записью администратора, для которой уже настроен русский язык интерфейса и правильные региональные стандарты (Формат: Русский (Россия), Расположение: Россия).
  2. Откройте классическую Панель управления (Control Panel) и перейдите в раздел Региональные стандарты (Region).
  3. В открывшемся окне перейдите на вкладку Дополнительно (Administrative).
  4. В верхнем разделе «Экран приветствия и учетные записи новых пользователей» нажмите кнопку Копировать параметры (Copy settings).
  5. Перед вами откроется таблица с текущими языковыми параметрами. Обратите внимание на строки «Экран приветствия» (Welcome screen) и «Системные учетные записи» (System accounts). Если там указан язык English (United States), то проблема именно в этом.
  6. В нижней части окна установите галочку Экран приветствия и системные учетные записи (Welcome screen and system accounts). Также рекомендуется установить вторую галочку — Новые учетные записи пользователей (New user accounts).
  7. Нажмите кнопку ОК для применения изменений.
  8. Внимание! Для того чтобы системные службы (включая IIS, Apache и сам сервер 1С:Предприятие) применили новые настройки окружения, обязательно выполните перезагрузку всего сервера.

Способ 2. Принудительное указание локализации в файле публикации default.vrd

Если вы не имеете возможности перезагрузить сервер прямо сейчас или политика безопасности запрещает менять системные настройки ОС, можно решить проблему локально для конкретной публикации 1С. Для этого мы отредактируем файл конфигурации публикации default.vrd.

Платформа 1С позволяет жестко задать язык интерфейса и код локализации для всех сеансов, запускаемых через конкретную веб-публикацию. Для этого используются параметры запуска L (язык интерфейса) и VL (код локализации).

Рассмотрим по шагам процесс изменения файла публикации:

  1. Перейдите в каталог, куда была выполнена публикация вашей информационной базы. Для веб-сервера IIS стандартный путь выглядит так: C:\inetpub\wwwroot\ИмяВашейПубликации\. Для сервера Apache путь настраивается при публикации (например, C:\Apache24\htdocs\ИмяВашейПубликации\).
  2. Найдите файл с именем default.vrd и откройте его в любом текстовом редакторе (например, Блокноте) от имени Администратора.
  3. Найдите тег <point>, в котором содержится строка подключения к вашей базе данных в атрибуте ib.
  4. Добавьте в строку подключения параметры L=ru;VL=ru_RU; сразу после указания имени сервера и базы.

Проанализируем пример изменения файла default.vrd. Изначальный файл выглядит следующим образом:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/MyBase"
       ib="Srvr=&quot;MainServer&quot;;Ref=&quot;TradeBase&quot;;">
    <ws>
        <point name="WebServiceName" alias="ws1.1c" enable="true"/>
    </ws>
</point>

Для исправления проблемы мы изменяем значение атрибута ib следующим образом:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/MyBase"
       ib="Srvr=&quot;MainServer&quot;;Ref=&quot;TradeBase&quot;;L=&quot;ru&quot;;VL=&quot;ru_RU&quot;;">
    <ws>
        <point name="WebServiceName" alias="ws1.1c" enable="true"/>
    </ws>
</point>

После сохранения изменений обязательно перезапустите веб-сервер (или пул приложений в IIS), чтобы файл конфигурации прочитался заново. Теперь все сеансы, создаваемые через этот веб-сервис, гарантированно получат локализацию ru_RU.

Способ 3. Изменение удостоверения пула приложений (только для IIS)

Если ваша база опубликована на веб-сервере IIS, можно пойти по пути изоляции процессов. Вместо того чтобы пулы приложений использовали системные учетные записи по умолчанию, мы укажем для них конкретного пользователя операционной системы Windows, у которого заведомо правильно настроена русская локаль (например, учетную запись USR1CV8 или специально созданного локального пользователя).

  1. Откройте консоль управления Диспетчер служб IIS (IIS Manager).
  2. В левом дереве навигации перейдите в раздел Пулы приложений (Application Pools).
  3. В списке пулов найдите тот, который обслуживает вашу публикацию 1С (обычно его имя совпадает с именем виртуального каталога вашей публикации).
  4. Нажмите на него правой кнопкой мыши и выберите пункт Дополнительные параметры (Advanced Settings).
  5. В группе параметров «Модель процесса» (Process Model) найдите свойство Удостоверение (Identity) и нажмите кнопку с тремя точками рядом с его значением.
  6. В открывшемся окне переключите переключатель на положение Особая учетная запись (Custom account) и нажмите кнопку Установить (Set).
  7. Введите имя пользователя (в формате ИмяКомпьютера\ИмяПользователя или просто имя пользователя для локальной учетной записи) и пароль. Этот пользователь должен обладать правами на запуск процессов и чтение каталогов 1С.
  8. Нажмите ОК, сохраните параметры и выполните перезапуск (Recycle) пула приложений.

Способ 4. Программное переопределение локали в коде 1С

Иногда возникают ситуации, когда у разработчика нет доступа к администрированию Windows Server или настройкам IIS/Apache, а отчеты нужно сдавать срочно. В таком случае проблему можно решить непосредственно в коде конфигурации 1С. Для этого мы будем использовать явное указание локали в функциях форматирования.

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


// Стандартный вызов, зависящий от настроек сеанса ОС
РезультатПрописи = ЧислоПрописью(СуммаДокумента, , "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

Чтобы исключить влияние настроек Windows на язык вывода, мы передадим код локализации во втором параметре (внутри строки параметров формата под кодом Л или L):


// Безопасный вызов с принудительной русской локалью
ПараметрыФормата = "Л=ru_RU";
РезультатПрописи = ЧислоПрописью(СуммаДокумента, ПараметрыФормата, "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

Аналогичным образом поступим с форматированием дат. При выводе месяцев прописью функция Формат() часто обращается к локали сеанса. Предотвратить вывод английских названий месяцев можно, явно добавив код локали в строку формата:


// Старый вариант, который выведет "15 May 2024" в английском окружении:
ТекстДаты = Формат(ТекущаяДата(), "ДФ='dd MMMM yyyy г.'");

// Новый вариант, который всегда выведет "15 мая 2024 г.":
ТекстДаты = Формат(ТекущаяДата(), "ДФ='dd MMMM yyyy г.'; Л=ru_RU");

Этот подход требует точечного вмешательства в код формирования печатных форм (особенно в общих модулях печати), но гарантирует 100% стабильность работы независимо от настроек веб-сервера.

Резюме

Мы подробно проанализировали проблему англоязычной локализации отчетов в веб-сервисах 1С на русифицированных серверах Windows. Для системного решения мы рекомендуем использовать Способ 1 (копирование региональных настроек через Панель управления) в сочетании со Способом 2 (прописывание параметров L и VL в файле default.vrd). Это полностью исключит любые неожиданности с языком интерфейса и форматами дат при интеграции 1С с внешними системами.

← На главную