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

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

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

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

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

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

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

Получение названия месяца через функцию Формат

Функция Формат() — штатный способ преобразовать дату в строку нужного вида. Вторым параметром передаётся строка форматирования, где символы М (или M в английском синтаксисе) управляют представлением месяца. Четыре символа подряд означают полное название месяца.

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

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

// Результат: "января" (родительный падеж)

Обратите внимание на падеж: шаблон MMMM возвращает месяц в родительном падеже, потому что он предназначен для вставки в полную дату вида «15 января 2026 г.». Для большинства печатных форм это именно то, что нужно, но если требуется заголовок «Январь» в именительном падеже, потребуется другой приём, описанный ниже.

Если нужна вся дата словами, используйте локализованный формат ДЛФ=DD — он автоматически учитывает региональные настройки и выводит дату целиком, включая название месяца и год:

СтрокаДаты = Формат(ДатаДокумента, "ДЛФ=DD");

// Результат: "15 января 2026 г."

Форматные строки для разных представлений месяца

Количество символов М в шаблоне определяет вид результата. Запоминать все варианты не обязательно — достаточно понимать логику: одна-две буквы дают число, три — сокращение, четыре и больше — полное название.

ШаблонРезультат для январяКогда использовать
ДФ=M1Номер месяца без ведущего нуля
ДФ=MM01Номер месяца для сортировки и имён файлов
ДФ=MMMянвКомпактные колонки отчётов
ДФ=MMMMянваряПечатные формы, тексты документов

Практический совет: для имён файлов и ключей сортировки используйте MM (число), а не название месяца. Строки «январь», «февраль» сортируются по алфавиту, а не по календарю, и отчёт за год «поедет»: апрель окажется раньше января.

Название месяца в именительном падеже

Стандартный шаблон MMMM возвращает родительный падеж, что не подходит для заголовков отчётов вроде «Продажи за Январь». Универсального штатного шаблона для именительного падежа нет, поэтому используют функцию НСтр() с явным перечнем месяцев. Такой приём заодно решает задачу мультиязычности.

Функция НазваниеМесяцаИменительный(НомерМесяца)

Названия = Новый Массив;

Названия.Добавить(НСтр("ru='Январь';en='January'"));

Названия.Добавить(НСтр("ru='Февраль';en='February'"));

Названия.Добавить(НСтр("ru='Март';en='March'"));

Названия.Добавить(НСтр("ru='Апрель';en='April'"));

Названия.Добавить(НСтр("ru='Май';en='May'"));

Названия.Добавить(НСтр("ru='Июнь';en='June'"));

Названия.Добавить(НСтр("ru='Июль';en='July'"));

Названия.Добавить(НСтр("ru='Август';en='August'"));

Названия.Добавить(НСтр("ru='Сентябрь';en='September'"));

Названия.Добавить(НСтр("ru='Октябрь';en='October'"));

Названия.Добавить(НСтр("ru='Ноябрь';en='November'"));

Названия.Добавить(НСтр("ru='Декабрь';en='December'"));

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

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

Такую функцию удобно разместить в общем модуле, например в модуле работы со строками или датами, чтобы вызывать её из любого места конфигурации. В типовых конфигурациях похожие механизмы уже есть — проверьте общие модули с именами вроде «КлиентСервер» или «СтроковыеФункции», прежде чем писать собственную реализацию.

Порядок действий
  1. 1
    Определите, что есть на входе: дата или номер месяца
  2. 2
    Для даты и родительного падежа используйте Формат(Дата, "ДФ=MMMM")
  3. 3
    Для именительного падежа создайте функцию с массивом названий через НСтр
  4. 4
    Разместите функцию в общем серверном модуле
  5. 5
    Проверьте результат на месяцах из начала, середины и конца года

Название месяца по его номеру без даты

Если на входе только номер месяца (например, пользователь выбрал месяц в отчёте числом), а объекта даты нет, есть два пути. Первый — сконструировать дату функцией Дата() и отформатировать её. Год при этом может быть любым, на название месяца он не влияет:

НомерМесяца = 3;

ДатаДляФормата = Дата(2000, НомерМесяца, 1);

Название = Формат(ДатаДляФормата, "ДФ=MMMM");

// Результат: "марта"

Второй путь — та же функция с массивом названий через НСтр(), показанная выше. Она предпочтительнее, когда нужен именительный падеж или гарантированный язык вывода независимо от региональных настроек сервера.

Не забывайте про проверку входного значения: номер месяца должен быть в диапазоне от 1 до 12. Обращение к массиву по индексу вне диапазона вызовет ошибку исполнения, а Дата(2000, 13, 1) — исключение о неверном значении. Добавьте простую проверку и осмысленное сообщение об ошибке.

Типичные ошибки
01
Использование ДФ=MMMM для заголовков — получается родительный падеж «января» вместо «Январь»
02
Сортировка периодов по строковому названию месяца — месяцы выстраиваются по алфавиту, а не по календарю
03
Отсутствие проверки номера месяца — значение 0 или 13 приводит к ошибке исполнения
04
Ожидание русского названия на сервере с английской локалью — Формат возвращает «January»

Представление периода: месяц и год, квартал

Часто нужен не просто месяц, а подпись периода целиком: «Январь 2026» или «1 квартал 2026». Для месяца с годом подойдёт составной шаблон форматирования:

Подпись = Формат(ДатаПериода, "ДФ='MMMM yyyy'");

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

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

Для кварталов штатного шаблона названия нет — номер квартала вычисляют арифметически: Цел((Месяц(Дата) - 1) / 3) + 1, а слово «квартал» добавляют строкой через НСтр().

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

Функция Формат() берёт язык из параметра Л (код языка) или из региональных настроек текущего сеанса. Это создаёт подводный камень в клиент-серверных базах: код выполняется на сервере, и язык сервера может отличаться от языка пользователя. В результате один пользователь видит «января», а другой — «January» в одном и том же отчёте.

Явно задать язык можно в самой строке форматирования:

Название = Формат(ДатаДокумента, "Л=ru_RU; ДФ=MMMM");

Альтернатива — функция НСтр(), которая подставляет строку под язык интерфейса текущего пользователя. Это надёжнее для многоязычных решений, но требует, чтобы все варианты строк были заданы в коде или в ресурсах конфигурации.

Маршрут решения

Как выбрать способ

Нужен месяц в составе полной даты в печатной формеИспользуйте Формат(Дата, "ДЛФ=DD")
Нужен только месяц в родительном падежеИспользуйте Формат(Дата, "ДФ=MMMM")
Нужен именительный падеж для заголовкаСделайте функцию с массивом названий через НСтр
Решение многоязычное и язык сервера непредсказуемЛибо НСтр с перечнем строк, либо явный параметр Л в Формат
На входе только номер месяцаСконструируйте Дата(2000, Номер, 1) и отформатируйте, предварительно проверив диапазон 1–12

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

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

Отдельно проверьте поведение при незаполненной дате. Пустая дата в 1С — это '00010101', и Формат() для неё вернёт строку с январём, что может ввести в заблуждение. Если дата может быть пустой, обработайте этот случай явно:

Если ЗначениеЗаполнено(ДатаДокумента) Тогда

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

Иначе

Название = "";

КонецЕсли;

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

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

Название для даты в январе и декабре
Норма

Корректные «января» и «декабря»

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

Ошибка индекса или смещённые названия

Падеж в заголовке отчёта
Норма

Именительный: «Январь»

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

Родительный «января» в заголовке

Язык вывода на сервере
Норма

Название на языке пользователя

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

Английское название при русском интерфейсе

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

Пустая строка или осмысленная заглушка

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

«января 1 г.» в печатной форме

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

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

Функция Формат возвращает название в нижнем регистре. Примените к результату функцию ТСТР() или обработайте первую букву: ВРег(Лев(Название, 1)) + Сред(Название, 2). Для заголовков часто достаточно этого приёма.

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

Да, в языке запросов есть функция ПРЕДСТАВЛЕНИЕ для дат, но её возможности ограничены. Практичнее вычислить название уже после выполнения запроса при обходе выборки через Формат() — так проще контролировать падеж и язык.

Почему Формат возвращает название на английском?

Язык берётся из региональных настроек сеанса, в котором выполняется код. На сервере 1С они могут отличаться от настроек клиента. Укажите язык явно: Формат(Дата, "Л=ru_RU; ДФ=MMMM"), либо перейдите на НСтр с собственным списком названий.

Как получить сокращённое название месяца?

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

Как вывести «Январь 2026» именительным падежом?

Соберите строку из двух частей: название месяца возьмите из функции с массивом через НСтр (именительный падеж), а год добавьте через Формат(Год(Дата), "ЧГ="), чтобы убрать разделитель тысяч из числа года.

Есть ли готовые функции в типовых конфигурациях?

Да, в конфигурациях на базе БСП есть общие модули для работы с датами и строками. Поищите по словам «Месяц», «ПредставлениеПериода» в общих модулях конфигуратора — часто нужная функция уже реализована и учитывает локализацию.

Итог

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

Название месяца в 1С получают через Формат() с шаблоном ДФ=MMMM (родительный падеж) или через собственную функцию с НСтр (именительный падеж и контроль языка). Проверяйте номер месяца на диапазон 1–12, обрабатывайте пустые даты и помните, что язык результата зависит от региональных настроек сеанса.