При работе с веб-клиентом 1С:Предприятие разработчики и системные администраторы часто сталкиваются с неприятной проблемой: интерфейс программы отображается на русском языке, однако форматы вывода чисел, дат и сумм прописью «плывут». Вместо привычного формата ДД.ММ.ГГГГ пользователи видят американский формат ММ/ДД/ГГГГ, а календарь и названия месяцев отображаются на английском языке.
Такая ситуация возникает из-за того, что веб-клиент 1С пытается автоматически подстроиться под языковые настройки браузера пользователя или операционной системы сервера. Давайте разберем эту проблему подробно, выясним причины ее возникновения и рассмотрим все возможные способы решения — от простых параметров в строке подключения до глубоких системных настроек веб-сервера и программного кода.
Рассмотрим самый оперативный и действенный способ решения проблемы «на лету» — использование параметров командной строки веб-клиента непосредственно в URL-адресе. Когда мы публикуем информационную базу на веб-сервере, по умолчанию 1С пытается определить язык и региональные настройки автоматически. Но мы можем явно указать платформе, какие параметры использовать.
Для этого в адресной строке используются два ключевых параметра:
Посмотрим на пример правильного формирования URL для принудительного использования русского языка и российских стандартов форматирования:
http://имя_сервера/имя_публикации/?L=ru&VL=ru_RU
Разберем эту конструкцию:
L=ru указывает платформе, что весь интерфейс должен быть переведен на русский язык.VL=ru_RU жестко задает региональные стандарты Российской Федерации. Благодаря этому даты примут привычный вид ДД.ММ.ГГГГ, а разделителем дробной части в числах станет запятая вместо точки.Именно этот способ позволяет быстро решить проблему, когда у иностранного пользователя (например, англичанина с английской локалью ОС и браузера) интерфейс и форматы данных должны оставаться строго русскими.
Проанализируем ситуацию, когда параметры URL помогают, но при обычном входе настройки все равно сбиваются. Это происходит из-за того, что в самой базе данных приоритет отдается настройкам сеанса пользователя. Чтобы исправить это глобально для базы, выполним следующие шаги:
Русский (Россия).После снятия этого флага платформа перестанет ориентироваться на локаль операционной системы конкретного пользователя при формировании дат и чисел, а будет использовать единый стандарт, заданный для всей информационной базы.
Если необходимо зафиксировать русский язык для всех подключений к веб-серверу по умолчанию на уровне самой платформы 1С:Предприятие, мы можем отредактировать конфигурационный файл conf.cfg.
Выясним, где находится этот файл в зависимости от операционной системы вашего сервера:
C:\Program Files\1cv8\conf\conf.cfg (или C:\Program Files (x86)\1cv8\conf\conf.cfg для 32-разрядных версий)./opt/1C/v8.x/x86_64/conf/conf.cfg (где v8.x — версия вашей платформы).Откроем этот файл с правами администратора и добавим (или отредактируем) следующую строку:
SystemLanguage=RU
По умолчанию в этом параметре часто указано значение System, из-за чего платформа пытается динамически подстраиваться под локаль операционной системы сервера или запросы веб-браузеров. Принудительное указание RU заставит веб-клиент всегда отдавать русский интерфейс по умолчанию.
Иногда форматы дат и чисел «плывут» из-за того, что сам веб-сервер (Apache или IIS) работает под системной учетной записью с английской локалью (например, en_US). Это особенно критично при выполнении фоновых и регламентных заданий на сервере, которые генерируют печатные формы.
Рассмотрим, как настроить серверную ОС по шагам.
Для серверов под управлением Linux (Ubuntu, Debian, РЕД ОС):
sudo locale-gen ru_RU.UTF-8
sudo nano /etc/apache2/envvars
export LANG=ru_RU.UTF-8
sudo systemctl restart apache2.Для серверов под управлением Windows Server (IIS):
SYSTEM, от имени которой часто работают пулы приложений IIS.Чтобы избавить пользователей от необходимости вручную вводить суффиксы ?L=ru&VL=ru_RU в адресной строке браузера, мы можем настроить автоматическую подстановку этих параметров на стороне веб-сервера.
Проанализируем настройку правил перенаправления для популярных веб-серверов.
Настройка для веб-сервера Apache:
В корневом каталоге публикации (там, где лежит файл default.vrd) создадим или отредактируем файл .htaccess (или внесем изменения непосредственно в конфигурационный файл виртуального хоста Apache). Добавим следующее правило перенаправления:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ /$1?L=ru&VL=ru_RU [R=301,L]
Это правило проверяет: если строка запроса пустая (пользователь просто ввел адрес базы), то сервер автоматически перенаправит его на URL с нужными параметрами локализации.
Настройка для веб-сервера IIS:
В конфигурационном файле публикации web.config, расположенном в каталоге публикации базы, добавим аналогичное правило в секцию <system.webServer> (требуется установленный модуль URL Rewrite):
<rewrite>
<rules>
<rule name="Force Locale" stopProcessing="true">
<match url="^(.*)$" />
<conditions>
<add input="{QUERY_STRING}" pattern="^$" />
</conditions>
<action type="Redirect" url="{R:1}?L=ru&VL=ru_RU" redirectType="Found" />
</rule>
</rules>
</rewrite>
Если «плывут» форматы дат и чисел в конкретных печатных формах, отчетах или при выводе сумм прописью, разработчик конфигурации может зафиксировать локаль программно, не полагаясь на глобальные настройки окружения.
Встроенные функции платформы Формат() и ЧислоПрописью() поддерживают явное указание локали через параметр Л (или его английский аналог L).
Посмотрим на пример форматирования даты, где мы принудительно задаем русскую локаль:
// Независимо от локали клиента, месяц всегда выведется на русском языке
СтрокаДаты = Формат(ТекущаяДата(), "Л=ru_RU; ДФ='dd MMMM yyyy ""г.""'");
// Результат: "25 Сентября 2023 г."
Аналогично поступим с выводом суммы прописью. Чтобы избежать ситуации, когда сумма пишется на английском языке (например, *Fifteen dollars* вместо *Пятнадцать рублей*), явно передадим код локализации во втором параметре функции:
// Принудительно выводим сумму прописью на русском языке
ПараметрыПрописи = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
СтрокаСуммы = ЧислоПрописью(ЗаказПокупателя.СуммаДокумента, "Л=ru_RU", ПараметрыПрописи);
Применение этого подхода в кодовой базе гарантирует стопроцентную стабильность отображения финансовой и отчетной информации в любых многоязычных распределенных системах.