К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как вывести месяц прописью в 1С

Как вывести месяц прописью в 1С: функция Формат с ДФ=ММММ, СклонениеСтроки, представление даты в запросах и на печатных формах. Примеры кода и типичные ошибки.

Задача вывести месяц прописью возникает постоянно: в печатных формах документов, в заголовках отчётов, в письмах контрагентам, в кадровых приказах. Стандартный формат даты «01.03.2026» для таких случаев не подходит — нужен вид «март 2026» или «в марте 2026 года». В 1С это решается несколькими способами, и выбор зависит от того, где именно нужен результат: в коде, в запросе или прямо в макете.

Основной инструмент — функция Формат() с языковыми параметрами форматной строки. Она встроена в платформу, работает без подключения внешних библиотек и корректно обрабатывает русские названия месяцев. Дополнительно для склонения («в марте», «с января») используется функция СклонениеСтроки() или типовые механизмы склонения из БСП.

Ниже разобраны рабочие варианты с примерами кода, особенностями настройки локали и типичными ошибками, из-за которых вместо «март» выводится «March» или пустая строка.

Вывод месяца прописью через функцию Формат

Самый простой способ — передать дату в функцию Формат() с подходящей форматной строкой. Параметр ДФ (формат даты) управляет представлением, а параметр Л задаёт язык, от которого зависят названия месяцев.

ДатаДокумента = ТекущаяДатаСеанса();

// Полная дата прописью: "1 марта 2026 г."

СтрокаДляПечати = Формат(ДатаДокумента, "ДЛФ=DD");

// Только месяц и год: "март 2026"

МесяцГод = Формат(ДатаДокумента, "Л=ru_RU; ДФ='ММММ yyyy'");

// Только название месяца: "март"

ТолькоМесяц = Формат(ДатаДокумента, "Л=ru_RU; ДФ='ММММ'");

Обратите внимание на регистр букв в форматной строке: ММММ (четыре заглавные) даёт полное название месяца, а МММ — сокращённое («мар», «фев»). Строчные мммм в некоторых локалях интерпретируются иначе, поэтому для русского интерфейса надёжнее использовать заглавные.

Если нужен месяц с заглавной буквы (например, в начале предложения), оберните результат: ТРег(Формат(Дата, "Л=ru_RU; ДФ='ММММ'")) — функция ТРег() переведёт первую букву в верхний регистр.

bsl
МесяцПрописью = Формат(ДатаДокумента, "Л=ru_RU; ДФ='ММММ yyyy'"); // март 2026

Настройка локали: почему месяц выводится не по-русски

Частая проблема: код написан правильно, но вместо «март» выводится «March» или «März». Причина — язык форматирования по умолчанию берётся из настроек информационной базы или сеанса, а не из форматной строки, если параметр Л не указан явно.

Язык по умолчанию задаётся в свойствах информационной базы (конфигуратор: Администрирование → Параметры информационной базы → Язык по умолчанию) и в региональных настройках сеанса пользователя. Чтобы не зависеть от этих настроек, всегда указывайте Л=ru_RU прямо в форматной строке — это делает код переносимым между базами с разными настройками.

Для многоязычных баз (например, документы для иностранных контрагентов) параметр Л можно подставлять переменной: Формат(Дата, "Л=" + КодЯзыка + "; ДФ='ММММ yyyy'"). Список поддерживаемых кодов языков зависит от версии платформы, стандартно доступны ru_RU, en_US и другие.

Склонение месяца: «в марте», «с января», «за февраль»

Функция Формат() возвращает месяц только в именительном падеже. Для фраз вида «акт составлен в марте 2026 года» потребуется склонение. В чистой платформе есть функция СклонениеСтроки(), которая работает через встроенный механизм склонений (требует наличия компоненты склонения).

МесяцИм = Формат(ДатаДокумента, "Л=ru_RU; ДФ='ММММ'"); // "март"

// Предложный падеж: "марте"

МесяцПредл = СклонениеСтроки(МесяцИм, "Л=ru_RU", "ПД=Предложный");

СтрокаДляПисьма = "Отчёт сформирован в " + МесяцПредл + " " + Формат(ДатаДокумента, "ДФ=yyyy") + " года.";

В конфигурациях на базе Библиотеки стандартных подсистем (БСП) есть готовые механизмы склонения — общий модуль для работы со склонением представлений. Если конфигурация типовая, проверьте наличие подсистемы склонения до написания собственного кода: она уже умеет склонять ФИО, должности и произвольные строки.

Альтернатива без компоненты склонения — статическая таблица соответствий: массив или соответствие из 12 названий месяцев в нужном падеже, выбор по Месяц(Дата). Способ грубый, но предсказуемый и не зависит от внешних компонент. Для одного падежа в одном отчёте это допустимое решение.

Сравнение вариантов

Формат() с ДФ='ММММ'

Подходит для именительного падежа в печатных формах и заголовках. Не умеет склонять.

СклонениеСтроки()

Даёт любой падеж, но требует компоненты склонения и корректной установки на сервере.

Таблица соответствий

Надёжно и без зависимостей, но нужно вручную поддерживать 12 значений на каждый падеж.

ПРЕДСТАВЛЕНИЕ в запросе

Удобно для отчётов на СКД, но результат зависит от настроек локали сервера СУБД и платформы.

Месяц прописью в запросах и отчётах СКД

В языке запросов нет прямой функции «месяц прописью». Есть два рабочих подхода. Первый — конструкция ВЫБОР по номеру месяца:

ВЫБОР

КОГДА МЕСЯЦ(Продажи.Период) = 1 ТОГДА "Январь"

КОГДА МЕСЯЦ(Продажи.Период) = 2 ТОГДА "Февраль"

КОГДА МЕСЯЦ(Продажи.Период) = 3 ТОГДА "Март"

// ... и так далее до 12

КОНЕЦ КАК МесяцПрописью

Второй подход — функция ПРЕДСТАВЛЕНИЕ() над датой или использование периодичности регистра с последующим форматированием уже на этапе вывода. В отчётах на СКД удобнее не мучить запрос, а вывести поле даты и в настройках поля (вкладка «Наборы данных» → поле → «Оформление» или выражение представления) задать форматную строку ДФ='ММММ yyyy'. Тогда группировка и сортировка идут по настоящей дате, а пользователь видит месяц прописью.

Важный нюанс сортировки: строки «Август», «Апрель», «Декабрь» сортируются по алфавиту, а не по календарю. Поэтому название месяца нельзя использовать как поле упорядочивания — сортируйте по исходной дате или по МЕСЯЦ(), а прописное название выводите только для отображения.

Типичные ошибки
01
Сортировка по названию месяца — получается алфавитный порядок вместо календарного; сортируйте по дате или номеру месяца.
02
Отсутствие Л=ru_RU в форматной строке — на сервере с английской локалью выводится March вместо март.
03
Склеивание строки вида Месяц + ' ' + Год вместо форматной строки — теряется единообразие и ломается при смене языка.
04
Использование ДФ='мммм' строчными — в ряде контекстов трактуется как минуты, а не месяц; для месяца используйте заглавные М.

Вывод месяца прописью в печатных формах

В макетах печатных форм (табличный документ) название месяца обычно подставляется в параметр области. В модуле менеджера документа при заполнении параметров макета добавьте вычисление:

ОбластьШапка.Параметры.МесяцГод = Формат(Шапка.Дата, "Л=ru_RU; ДФ='ММММ yyyy'");

Для полной даты вида ««01» марта 2026 г.» в типовых конфигурациях применяется Формат(Дата, "ДЛФ=DD") — это стандартный длинный формат даты, который уже включает день в кавычках-ёлочках и месяц прописью в родительном падеже («1 марта 2026 г.»). В большинстве печатных форм именно этот вариант и требуется, поэтому сначала проверьте, не решает ли задачу ДЛФ=DD, прежде чем собирать строку вручную.

Если печатная форма строится через СКД (макет компоновки), добавьте вычисляемое поле с выражением Формат(Дата, "Л=ru_RU; ДФ='ММММ yyyy'") — функции встроенного языка доступны в выражениях СКД.

Порядок действий
  1. 1
    Определите, где нужен месяц прописью: код, запрос, СКД или макет печатной формы.
  2. 2
    Для именительного падежа используйте Формат(Дата, "Л=ru_RU; ДФ='ММММ yyyy'").
  3. 3
    Для полной даты прописью проверьте Формат(Дата, "ДЛФ=DD") — часто этого достаточно.
  4. 4
    Для падежных форм подключите СклонениеСтроки() или таблицу соответствий.
  5. 5
    Проверьте результат на сервере с фактическими настройками локали и на датах всех 12 месяцев.

Проверка результата и граничные случаи

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

Отдельно проверьте поведение при пустой дате: Формат('00010101', "ДФ='ММММ'") вернёт пустую строку или «Январь 0001» в зависимости от форматной строки. Если дата документа может быть не заполнена, добавьте явную проверку Если ЗначениеЗаполнено(Дата), иначе в печатную форму попадёт мусор.

На клиент-серверных установках форматирование выполняется там, где исполняется код. Если функция вызывается на сервере, а локаль сервера отличается от клиентской, результат может отличаться от ожиданий пользователя — ещё один аргумент в пользу явного Л=ru_RU.

Контрольные точки

Как проверить результат

Название месяца в печатной форме
Норма

Русское название в нужном падеже, например «март 2026»

Тревожный признак

March, пустая строка или «Январь 0001» при пустой дате

Сортировка строк отчёта по месяцам
Норма

Январь, Февраль, Март — в календарном порядке

Тревожный признак

Август идёт перед Январём — сортировка по строке

Вывод на сервере и на клиенте
Норма

Одинаковое название месяца в обоих контекстах

Тревожный признак

Разные языки — не задан параметр Л=ru_RU

Частые вопросы

Как вывести месяц прописью с большой буквы?

Оберните результат функции Формат в ТРег(): ТРег(Формат(Дата, "Л=ru_RU; ДФ='ММММ'")) — первая буква станет заглавной, остальные останутся строчными. Функция ВРег не подходит, так как переведёт в верхний регистр всё слово.

Почему вместо «март» выводится «March»?

Язык форматирования берётся из настроек базы или сеанса. Добавьте в форматную строку явный параметр Л=ru_RU, например: Формат(Дата, "Л=ru_RU; ДФ='ММММ yyyy'"). Также проверьте язык по умолчанию в параметрах информационной базы.

Как получить «в марте 2026 года» без компоненты склонения?

Создайте соответствие или массив из 12 названий месяцев в предложном падеже и выбирайте элемент по номеру: Месяц(Дата). Это надёжно работает без внешних компонент, но таблицу нужно заполнить вручную и аккуратно.

Как вывести месяц прописью в запросе без ВЫБОР на 12 веток?

Лучше не делать этого в запросе вовсе: выведите поле даты, а форматирование задайте в настройках СКД через выражение представления или оформление поля с форматной строкой ДФ='ММММ yyyy'. Запрос останется простым, а сортировка будет корректной.

Чем ДЛФ=DD отличается от ДФ='ММММ yyyy'?

ДЛФ=DD — стандартный длинный формат даты целиком: «1 марта 2026 г.», месяц в родительном падеже. ДФ='ММММ yyyy' выводит только месяц и год в именительном падеже: «март 2026». Для печатных форм документов обычно нужен первый вариант, для заголовков отчётов — второй.

Работает ли Формат с месяцем прописью в тонком клиенте и на веб-клиенте?

Да, функция Формат доступна во всех клиентах. Но локаль форматирования может различаться между клиентом и сервером, поэтому всегда указывайте Л=ru_RU явно, чтобы результат был одинаковым независимо от места исполнения кода.

Итог

Что важно запомнить

Месяц прописью выводится через Формат() с явным параметром Л=ru_RU и ДФ='ММММ'. Полная дата прописью — ДЛФ=DD. Склонения требуют СклонениеСтроки() или таблицы соответствий. В отчётах сортируйте по дате, а название месяца используйте только для отображения.