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

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

Как в 1С получить месяц из даты прописью

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

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

Основной инструмент — функция Формат() с параметром форматной строки ДФ=MMMM. Она возвращает полное название месяца с учётом языка и региональных настроек сеанса. Дополнительно потребуется управление регистром (заглавная или строчная первая буква) и, при работе в запросах, конструкция ВЫБОР с функцией МЕСЯЦ().

Ниже разобраны все рабочие способы: в коде на встроенном языке, в запросах, в макетах печатных форм и в СКД. Отдельно рассмотрены нюансы регистра, локализации и типичные ошибки, из-за которых вместо названия месяца выводится число или пустая строка.

Получение месяца прописью функцией Формат

Самый короткий и правильный способ — использовать функцию Формат() с форматной строкой ДФ=MMMM. Четыре заглавные буквы M задают полное название месяца:

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

НазваниеМесяца = Формат(ДатаДокумента, "ДФ=MMMM");

// Результат: "Январь", "Февраль" и т.д.

Если нужен месяц вместе с годом, форматная строка расширяется: Формат(ДатаДокумента, "ДФ='MMMM yyyy'") вернёт строку вида «Январь 2026». Одинарные кавычки внутри форматной строки обозначают литерал, который выводится как есть.

Вариант ДФ=MMM (три буквы) возвращает сокращённое название месяца — «янв», «фев». Это удобно для компактных колонок в отчётах, где полное название не помещается.

bsl
НазваниеМесяца = Формат(ДатаДокумента, "ДФ=MMMM");  // "Январь"
МесяцГод = Формат(ДатаДокумента, "ДФ='MMMM yyyy'"); // "Январь 2026"
Сокращенно = Формат(ДатаДокумента, "ДФ=MMM");       // "янв"

Управление регистром: с заглавной или строчной буквы

Функция Формат() с параметром ДФ=MMMM возвращает название месяца с заглавной буквы: «Январь». Внутри предложения («отгрузка выполнена в январе») это выглядит неуместно, поэтому результат оборачивают в функцию НРег():

МесяцСтрочными = НРег(Формат(ДатаДокумента, "ДФ=MMMM"));

// Результат: "январь"

Обратная ситуация — когда нужно гарантированно получить заглавную букву независимо от настроек. Здесь помогает функция ТРег(), которая переводит в верхний регистр первую букву каждого слова: ТРег(НРег(Формат(Дата, "ДФ=MMMM"))).

Важно понимать: НРег() и ТРег() работают только с регистром букв, они не склоняют слово. Название месяца останется в именительном падеже, и для фраз типа «в январе» потребуется отдельная обработка (об этом ниже).

Месяц прописью в запросе

В языке запросов 1С нет прямого аналога форматной строки ДФ=MMMM. Функция МЕСЯЦ(Дата) возвращает только число от 1 до 12. Поэтому название месяца формируют через конструкцию ВЫБОР:

ВЫБОР

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

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

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

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

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

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

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

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

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

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

КОГДА МЕСЯЦ(Продажи.Период) = 11 ТОГДА "Ноябрь"

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

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

Если запрос выполняется программно и название нужно только для отображения, часто рациональнее получить число месяца через МЕСЯЦ(), а строку сформировать уже в коде через Формат(). Это уменьшает текст запроса и упрощает сопровождение.

Сортировка по месяцам в запросе

Частая ошибка — сортировать результат по строковому названию месяца. Тогда «Август» окажется раньше «Декабря», потому что сортировка идёт по алфавиту. Правильный подход: выводить в запросе и число месяца, и его название, а сортировать по числу:

УПОРЯДОЧИТЬ ПО МЕСЯЦ(Продажи.Период)
Типичные ошибки
01
Сортировка по строковому названию месяца — месяцы выстраиваются по алфавиту, а не по календарю. Сортируйте по МЕСЯЦ(Дата).
02
Использование ДФ=MM вместо ДФ=MMMM — две буквы возвращают номер месяца (01, 02), а не название.
03
Ожидание склонения от Формат() — функция не склоняет, «в Январь» вместо «в январе» придётся обрабатывать отдельно.

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

В макетах печатных форм с параметрами месяц прописью обычно подставляется из кода: перед выводом области в параметр записывается Формат(ДатаДокумента, "ДФ=MMMM"). Это самый управляемый способ — форматирование происходит в одном месте модуля.

В системе компоновки данных (СКД) доступна функция Формат() в выражениях вычисляемых полей и в настройках оформления поля. Для поля типа «Дата» можно на закладке «Наборы данных» добавить вычисляемое поле с выражением Формат(Период, "ДФ=MMMM") либо задать формат в свойствах поля на закладке «Настройки» — «Оформление» — «Формат».

Для группировок по месяцам в СКД удобнее использовать стандартный период «Месяц» у поля даты (через точку: Период.Месяц) — СКД сама отобразит период в читаемом виде и корректно отсортирует группировки.

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

Формат(Дата, "ДФ=MMMM")

Основной способ в коде. Быстро, учитывает язык сеанса. Не работает напрямую в тексте запроса.

ВЫБОР КОГДА МЕСЯЦ() в запросе

Единственный чистый способ внутри запроса. Громоздкий текст, сортировку делать по числу месяца.

Вычисляемое поле СКД с Формат()

Подходит для отчётов на СКД без доработки кода. Требует аккуратности с сортировкой группировок.

Собственная функция с массивом месяцев

Оправдана только при нестандартных названиях или склонении. В остальных случаях дублирует штатный механизм.

Локализация и язык вывода

Функция Формат() использует региональные настройки текущего сеанса. Если информационная база работает с несколькими языками, язык вывода можно задать явно параметром Л= в форматной строке: Формат(Дата, "Л=en_US; ДФ=MMMM") вернёт «January».

Это важно при формировании документов для иностранных контрагентов: название месяца должно соответствовать языку документа, а не языку сеанса пользователя, который его печатает. Явное указание Л= делает результат предсказуемым.

Если в базе ведётся учёт на нескольких языках, избегайте жёстко зашитых русских названий месяцев в конструкциях ВЫБОР в запросах — такой запрос придётся дублировать для каждого языка.

Если месяц прописью нужен в десятках мест конфигурации, создайте в общем модуле функцию-обёртку вида МесяцПрописью(Дата), которая внутри вызывает Формат(). Тогда смену формата (например, переход на сокращённые названия) вы сделаете в одном месте.
ПЗ
Практическое замечание

Склонение названия месяца

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

Функция МесяцПредложныйПадеж(НомерМесяца)

Месяцы = Новый Массив;

Месяцы.Добавить("январе"); Месяцы.Добавить("феврале");

Месяцы.Добавить("марте"); Месяцы.Добавить("апреле");

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

Возврат Месяцы[НомерМесяца - 1];

КонецФункции

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

Проверка результата

Быстрее всего проверить формулу в консоли кода (внешняя обработка «Консоль кода») или в отладчике: установите точку останова и вычислите выражение Формат(Дата, "ДФ=MMMM") для контрольной даты. Проверяйте граничные случаи: январь (начало года), декабрь (конец года) и дату с пустым значением.

Отдельно проверьте поведение при пустой дате. Формат('00010101', "ДФ=MMMM") для неинициализированной даты может вернуть неожиданный результат в зависимости от контекста, поэтому перед форматированием добавляйте проверку Если ЗначениеЗаполнено(Дата) Тогда.

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

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

Формат(Дата, "ДФ=MMMM") для даты 15.03
Норма

Возвращается строка «Март»

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

Возвращается «03» — использована строка ДФ=MM вместо MMMM

Вывод внутри предложения
Норма

Название обёрнуто в НРег() и читается естественно

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

«отгружено в Январь» — лишняя заглавная буква

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

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

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

Август идёт первым — сортировка по строке, а не по числу месяца

Пустая дата
Норма

Выводится пустая строка или прочерк

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

Ошибка или «Январь» от даты 01.01.0001

Часто задаваемые вопросы

Чем ДФ=MM отличается от ДФ=MMMM?

Две буквы MM возвращают номер месяца с ведущим нулём («01», «12»), три буквы MMM — сокращённое название («янв»), четыре буквы MMMM — полное название («Январь»). Для вывода месяца прописью нужен именно вариант с четырьмя буквами.

Как вывести месяц и год прописью, например «Январь 2026»?

Используйте форматную строку с литералом: Формат(Дата, "ДФ='MMMM yyyy'"). Одинарные кавычки внутри параметра ДФ означают, что весь текст внутри выводится как шаблон с подстановкой компонентов даты.

Почему в запросе нельзя использовать Формат()?

Язык запросов 1С не поддерживает функцию Формат() — она относится к встроенному языку. В запросе название месяца формируют через ВЫБОР КОГДА МЕСЯЦ(Дата)=1 ТОГДА "Январь" и т.д., либо возвращают число месяца и форматируют его уже в коде после выполнения запроса.

Как получить месяц в родительном падеже, например «января»?

Штатная функция Формат() склонений не выполняет. Используйте ПолучитьСклоненияСтроки() при наличии компоненты склонения или собственный массив из двенадцати форм в общем модуле — для фиксированного списка месяцев это проще и надёжнее.

Можно ли получить название месяца на английском языке?

Да, укажите язык в форматной строке: Формат(Дата, "Л=en_US; ДФ=MMMM") вернёт «January». Без параметра Л используется язык региональных настроек текущего сеанса.

Как в СКД сгруппировать данные по месяцам с названием прописью?

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

Итог

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

В коде используйте Формат(Дата, "ДФ=MMMM") и НРег() для строчного написания. В запросе — ВЫБОР с МЕСЯЦ(), сортируя по числу. Склонения штатно нет: либо ПолучитьСклоненияСтроки(), либо массив форм. Всегда проверяйте пустую дату перед форматированием.