Разработка и Конфигурация · 11 мин
Как получить название месяца в 1С
Способы получить название месяца в 1С: функция Формат с шаблонами, НСтр для локализации, вычисление из даты и номера месяца, типичные ошибки и проверка результата.
Задача получить название месяца в 1С возникает постоянно: в печатных формах, заголовках отчётов, подписях документов и при формировании текстовых представлений периодов. Встроенный язык платформы предлагает несколько рабочих способов — от простейшего форматирования даты до функций локализации, и у каждого есть свои условия применения.
Главное, что нужно понять сразу: отдельной функции «НазваниеМесяца» во встроенном языке нет. Название получают либо через функцию Формат() с шаблоном представления даты, либо через функцию НСтр() с собственным списком месяцев, либо через стандартные представления периодов. Выбор зависит от того, что у вас есть на входе — дата или номер месяца, — и какой падеж нужен на выходе.
Ниже разобраны все основные приёмы с готовыми фрагментами кода, указаны ограничения каждого способа и типичные ошибки, из-за которых вместо «января» выводится «01» или название на неправильном языке.
Получение названия месяца через функцию Формат
Функция Формат() — штатный способ преобразовать дату в строку нужного вида. Вторым параметром передаётся строка форматирования, где символы М (или M в английском синтаксисе) управляют представлением месяца. Четыре символа подряд означают полное название месяца.
ДатаДокумента = ТекущаяДатаСеанса();
НазваниеМесяца = Формат(ДатаДокумента, "ДФ=MMMM");
// Результат: "января" (родительный падеж)
Обратите внимание на падеж: шаблон MMMM возвращает месяц в родительном падеже, потому что он предназначен для вставки в полную дату вида «15 января 2026 г.». Для большинства печатных форм это именно то, что нужно, но если требуется заголовок «Январь» в именительном падеже, потребуется другой приём, описанный ниже.
Если нужна вся дата словами, используйте локализованный формат ДЛФ=DD — он автоматически учитывает региональные настройки и выводит дату целиком, включая название месяца и год:
СтрокаДаты = Формат(ДатаДокумента, "ДЛФ=DD");
// Результат: "15 января 2026 г."
Форматные строки для разных представлений месяца
Количество символов М в шаблоне определяет вид результата. Запоминать все варианты не обязательно — достаточно понимать логику: одна-две буквы дают число, три — сокращение, четыре и больше — полное название.
| Шаблон | Результат для января | Когда использовать |
|---|---|---|
ДФ=M | 1 | Номер месяца без ведущего нуля |
ДФ=MM | 01 | Номер месяца для сортировки и имён файлов |
ДФ=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Определите, что есть на входе: дата или номер месяца
- 2Для даты и родительного падежа используйте Формат(Дата, "ДФ=MMMM")
- 3Для именительного падежа создайте функцию с массивом названий через НСтр
- 4Разместите функцию в общем серверном модуле
- 5Проверьте результат на месяцах из начала, середины и конца года
Название месяца по его номеру без даты
Если на входе только номер месяца (например, пользователь выбрал месяц в отчёте числом), а объекта даты нет, есть два пути. Первый — сконструировать дату функцией Дата() и отформатировать её. Год при этом может быть любым, на название месяца он не влияет:
НомерМесяца = 3;
ДатаДляФормата = Дата(2000, НомерМесяца, 1);
Название = Формат(ДатаДляФормата, "ДФ=MMMM");
// Результат: "марта"
Второй путь — та же функция с массивом названий через НСтр(), показанная выше. Она предпочтительнее, когда нужен именительный падеж или гарантированный язык вывода независимо от региональных настроек сервера.
Не забывайте про проверку входного значения: номер месяца должен быть в диапазоне от 1 до 12. Обращение к массиву по индексу вне диапазона вызовет ошибку исполнения, а Дата(2000, 13, 1) — исключение о неверном значении. Добавьте простую проверку и осмысленное сообщение об ошибке.
Представление периода: месяц и год, квартал
Часто нужен не просто месяц, а подпись периода целиком: «Январь 2026» или «1 квартал 2026». Для месяца с годом подойдёт составной шаблон форматирования:
Подпись = Формат(ДатаПериода, "ДФ='MMMM yyyy'");
// Результат: "января 2026"
Для стандартных периодов удобнее готовый объект СтандартныйПериод или функции работы с периодами из типовых библиотек. В БСП (библиотека стандартных подсистем), на которой построено большинство типовых конфигураций, есть механизмы представления периодов, учитывающие локализацию. Если конфигурация основана на БСП, ищите готовые функции в общих модулях, прежде чем собирать строку вручную.
Для кварталов штатного шаблона названия нет — номер квартала вычисляют арифметически: Цел((Месяц(Дата) - 1) / 3) + 1, а слово «квартал» добавляют строкой через НСтр().
Локализация и язык вывода
Функция Формат() берёт язык из параметра Л (код языка) или из региональных настроек текущего сеанса. Это создаёт подводный камень в клиент-серверных базах: код выполняется на сервере, и язык сервера может отличаться от языка пользователя. В результате один пользователь видит «января», а другой — «January» в одном и том же отчёте.
Явно задать язык можно в самой строке форматирования:
Название = Формат(ДатаДокумента, "Л=ru_RU; ДФ=MMMM");
Альтернатива — функция НСтр(), которая подставляет строку под язык интерфейса текущего пользователя. Это надёжнее для многоязычных решений, но требует, чтобы все варианты строк были заданы в коде или в ресурсах конфигурации.
Как выбрать способ
Проверка результата и отладка
Проверять код удобнее всего через окно «Выполнить произвольное выражение» в отладчике или через временную обработку с выводом в сообщения. Прогоните как минимум три контрольных значения: январь (начало года), декабрь (конец года) и любой месяц из середины. На граничных значениях чаще всего всплывают ошибки смещения индексов в массиве.
Отдельно проверьте поведение при незаполненной дате. Пустая дата в 1С — это '00010101', и Формат() для неё вернёт строку с январём, что может ввести в заблуждение. Если дата может быть пустой, обработайте этот случай явно:
Если ЗначениеЗаполнено(ДатаДокумента) Тогда
Название = Формат(ДатаДокумента, "ДФ=MMMM");
Иначе
Название = "";
КонецЕсли;
Как проверить результат
Корректные «января» и «декабря»
Ошибка индекса или смещённые названия
Именительный: «Январь»
Родительный «января» в заголовке
Название на языке пользователя
Английское название при русском интерфейсе
Пустая строка или осмысленная заглушка
«января 1 г.» в печатной форме
Частые вопросы
Как получить название месяца с большой буквы?
Функция Формат возвращает название в нижнем регистре. Примените к результату функцию ТСТР() или обработайте первую букву: ВРег(Лев(Название, 1)) + Сред(Название, 2). Для заголовков часто достаточно этого приёма.
Можно ли получить название месяца в запросе?
Да, в языке запросов есть функция ПРЕДСТАВЛЕНИЕ для дат, но её возможности ограничены. Практичнее вычислить название уже после выполнения запроса при обходе выборки через Формат() — так проще контролировать падеж и язык.
Почему Формат возвращает название на английском?
Язык берётся из региональных настроек сеанса, в котором выполняется код. На сервере 1С они могут отличаться от настроек клиента. Укажите язык явно: Формат(Дата, "Л=ru_RU; ДФ=MMMM"), либо перейдите на НСтр с собственным списком названий.
Как получить сокращённое название месяца?
Используйте шаблон с тремя символами: Формат(Дата, "ДФ=MMM") — результат будет вида «янв», «фев». Это удобно для узких колонок таблиц и компактных подписей в отчётах.
Как вывести «Январь 2026» именительным падежом?
Соберите строку из двух частей: название месяца возьмите из функции с массивом через НСтр (именительный падеж), а год добавьте через Формат(Год(Дата), "ЧГ="), чтобы убрать разделитель тысяч из числа года.
Есть ли готовые функции в типовых конфигурациях?
Да, в конфигурациях на базе БСП есть общие модули для работы с датами и строками. Поищите по словам «Месяц», «ПредставлениеПериода» в общих модулях конфигуратора — часто нужная функция уже реализована и учитывает локализацию.
Что важно запомнить
Название месяца в 1С получают через Формат() с шаблоном ДФ=MMMM (родительный падеж) или через собственную функцию с НСтр (именительный падеж и контроль языка). Проверяйте номер месяца на диапазон 1–12, обрабатывайте пустые даты и помните, что язык результата зависит от региональных настроек сеанса.