Разработка и Конфигурация · 10 мин
Как в 1С получить месяц из даты прописью
Как в 1С получить месяц из даты прописью: функция Формат с ДФ=MMMM, вывод в запросе, склонение, регистр и типичные ошибки с примерами кода.
Задача вывести месяц из даты прописью — «Январь», «Февраль», «Март» — возникает при формировании печатных форм, отчётов, надписей в документах и при выгрузке данных. Во встроенном языке 1С для этого есть штатные средства, и в большинстве случаев не нужно писать собственные функции с массивом названий месяцев.
Основной инструмент — функция Формат() с параметром форматной строки ДФ=MMMM. Она возвращает полное название месяца с учётом языка и региональных настроек сеанса. Дополнительно потребуется управление регистром (заглавная или строчная первая буква) и, при работе в запросах, конструкция ВЫБОР с функцией МЕСЯЦ().
Ниже разобраны все рабочие способы: в коде на встроенном языке, в запросах, в макетах печатных форм и в СКД. Отдельно рассмотрены нюансы регистра, локализации и типичные ошибки, из-за которых вместо названия месяца выводится число или пустая строка.
Получение месяца прописью функцией Формат
Самый короткий и правильный способ — использовать функцию Формат() с форматной строкой ДФ=MMMM. Четыре заглавные буквы M задают полное название месяца:
ДатаДокумента = ТекущаяДатаСеанса();
НазваниеМесяца = Формат(ДатаДокумента, "ДФ=MMMM");
// Результат: "Январь", "Февраль" и т.д.
Если нужен месяц вместе с годом, форматная строка расширяется: Формат(ДатаДокумента, "ДФ='MMMM yyyy'") вернёт строку вида «Январь 2026». Одинарные кавычки внутри форматной строки обозначают литерал, который выводится как есть.
Вариант ДФ=MMM (три буквы) возвращает сокращённое название месяца — «янв», «фев». Это удобно для компактных колонок в отчётах, где полное название не помещается.
НазваниеМесяца = Формат(ДатаДокумента, "ДФ=MMMM"); // "Январь"
МесяцГод = Формат(ДатаДокумента, "ДФ='MMMM yyyy'"); // "Январь 2026"
Сокращенно = Формат(ДатаДокумента, "ДФ=MMM"); // "янв"Управление регистром: с заглавной или строчной буквы
Функция Формат() с параметром ДФ=MMMM возвращает название месяца с заглавной буквы: «Январь». Внутри предложения («отгрузка выполнена в январе») это выглядит неуместно, поэтому результат оборачивают в функцию НРег():
МесяцСтрочными = НРег(Формат(ДатаДокумента, "ДФ=MMMM"));
// Результат: "январь"
Обратная ситуация — когда нужно гарантированно получить заглавную букву независимо от настроек. Здесь помогает функция ТРег(), которая переводит в верхний регистр первую букву каждого слова: ТРег(НРег(Формат(Дата, "ДФ=MMMM"))).
Важно понимать: НРег() и ТРег() работают только с регистром букв, они не склоняют слово. Название месяца останется в именительном падеже, и для фраз типа «в январе» потребуется отдельная обработка (об этом ниже).
Месяц прописью в запросе
В языке запросов 1С нет прямого аналога форматной строки ДФ=MMMM. Функция МЕСЯЦ(Дата) возвращает только число от 1 до 12. Поэтому название месяца формируют через конструкцию ВЫБОР:
ВЫБОР
КОГДА МЕСЯЦ(Продажи.Период) = 1 ТОГДА "Январь"
КОГДА МЕСЯЦ(Продажи.Период) = 2 ТОГДА "Февраль"
КОГДА МЕСЯЦ(Продажи.Период) = 3 ТОГДА "Март"
КОГДА МЕСЯЦ(Продажи.Период) = 4 ТОГДА "Апрель"
КОГДА МЕСЯЦ(Продажи.Период) = 5 ТОГДА "Май"
КОГДА МЕСЯЦ(Продажи.Период) = 6 ТОГДА "Июнь"
КОГДА МЕСЯЦ(Продажи.Период) = 7 ТОГДА "Июль"
КОГДА МЕСЯЦ(Продажи.Период) = 8 ТОГДА "Август"
КОГДА МЕСЯЦ(Продажи.Период) = 9 ТОГДА "Сентябрь"
КОГДА МЕСЯЦ(Продажи.Период) = 10 ТОГДА "Октябрь"
КОГДА МЕСЯЦ(Продажи.Период) = 11 ТОГДА "Ноябрь"
КОГДА МЕСЯЦ(Продажи.Период) = 12 ТОГДА "Декабрь"
КОНЕЦ КАК МесяцПрописью
Если запрос выполняется программно и название нужно только для отображения, часто рациональнее получить число месяца через МЕСЯЦ(), а строку сформировать уже в коде через Формат(). Это уменьшает текст запроса и упрощает сопровождение.
Сортировка по месяцам в запросе
Частая ошибка — сортировать результат по строковому названию месяца. Тогда «Август» окажется раньше «Декабря», потому что сортировка идёт по алфавиту. Правильный подход: выводить в запросе и число месяца, и его название, а сортировать по числу:
УПОРЯДОЧИТЬ ПО МЕСЯЦ(Продажи.Период)
Вывод месяца прописью в печатных формах и СКД
В макетах печатных форм с параметрами месяц прописью обычно подставляется из кода: перед выводом области в параметр записывается Формат(ДатаДокумента, "ДФ=MMMM"). Это самый управляемый способ — форматирование происходит в одном месте модуля.
В системе компоновки данных (СКД) доступна функция Формат() в выражениях вычисляемых полей и в настройках оформления поля. Для поля типа «Дата» можно на закладке «Наборы данных» добавить вычисляемое поле с выражением Формат(Период, "ДФ=MMMM") либо задать формат в свойствах поля на закладке «Настройки» — «Оформление» — «Формат».
Для группировок по месяцам в СКД удобнее использовать стандартный период «Месяц» у поля даты (через точку: Период.Месяц) — СКД сама отобразит период в читаемом виде и корректно отсортирует группировки.
Сравнение вариантов
Основной способ в коде. Быстро, учитывает язык сеанса. Не работает напрямую в тексте запроса.
Единственный чистый способ внутри запроса. Громоздкий текст, сортировку делать по числу месяца.
Подходит для отчётов на СКД без доработки кода. Требует аккуратности с сортировкой группировок.
Оправдана только при нестандартных названиях или склонении. В остальных случаях дублирует штатный механизм.
Локализация и язык вывода
Функция Формат() использует региональные настройки текущего сеанса. Если информационная база работает с несколькими языками, язык вывода можно задать явно параметром Л= в форматной строке: Формат(Дата, "Л=en_US; ДФ=MMMM") вернёт «January».
Это важно при формировании документов для иностранных контрагентов: название месяца должно соответствовать языку документа, а не языку сеанса пользователя, который его печатает. Явное указание Л= делает результат предсказуемым.
Если в базе ведётся учёт на нескольких языках, избегайте жёстко зашитых русских названий месяцев в конструкциях ВЫБОР в запросах — такой запрос придётся дублировать для каждого языка.
Если месяц прописью нужен в десятках мест конфигурации, создайте в общем модуле функцию-обёртку вида МесяцПрописью(Дата), которая внутри вызывает Формат(). Тогда смену формата (например, переход на сокращённые названия) вы сделаете в одном месте.
Склонение названия месяца
Штатная функция Формат() возвращает месяц только в именительном падеже. Для фраз «в январе», «с февраля», «до марта» есть два подхода. Первый — функция ПолучитьСклоненияСтроки() (доступна при наличии компоненты склонения), которая возвращает массив падежных форм строки. Второй — собственный небольшой массив предложных форм в общем модуле, что надёжнее и не зависит от внешних компонент:
Функция МесяцПредложныйПадеж(НомерМесяца)
Месяцы = Новый Массив;
Месяцы.Добавить("январе"); Месяцы.Добавить("феврале");
Месяцы.Добавить("марте"); Месяцы.Добавить("апреле");
// ... и так далее
Возврат Месяцы[НомерМесяца - 1];
КонецФункции
Перед внедрением склонения убедитесь, что оно действительно нужно: во многих печатных формах фразу можно перестроить так, чтобы месяц стоял в именительном падеже — «Период: Январь» вместо «в январе».
Проверка результата
Быстрее всего проверить формулу в консоли кода (внешняя обработка «Консоль кода») или в отладчике: установите точку останова и вычислите выражение Формат(Дата, "ДФ=MMMM") для контрольной даты. Проверяйте граничные случаи: январь (начало года), декабрь (конец года) и дату с пустым значением.
Отдельно проверьте поведение при пустой дате. Формат('00010101', "ДФ=MMMM") для неинициализированной даты может вернуть неожиданный результат в зависимости от контекста, поэтому перед форматированием добавляйте проверку Если ЗначениеЗаполнено(Дата) Тогда.
Как проверить результат
Возвращается строка «Март»
Возвращается «03» — использована строка ДФ=MM вместо MMMM
Название обёрнуто в НРег() и читается естественно
«отгружено в Январь» — лишняя заглавная буква
Январь, Февраль, Март по порядку
Август идёт первым — сортировка по строке, а не по числу месяца
Выводится пустая строка или прочерк
Ошибка или «Январь» от даты 01.01.0001
Часто задаваемые вопросы
Чем ДФ=MM отличается от ДФ=MMMM?
Две буквы MM возвращают номер месяца с ведущим нулём («01», «12»), три буквы MMM — сокращённое название («янв»), четыре буквы MMMM — полное название («Январь»). Для вывода месяца прописью нужен именно вариант с четырьмя буквами.
Как вывести месяц и год прописью, например «Январь 2026»?
Используйте форматную строку с литералом: Формат(Дата, "ДФ='MMMM yyyy'"). Одинарные кавычки внутри параметра ДФ означают, что весь текст внутри выводится как шаблон с подстановкой компонентов даты.
Почему в запросе нельзя использовать Формат()?
Язык запросов 1С не поддерживает функцию Формат() — она относится к встроенному языку. В запросе название месяца формируют через ВЫБОР КОГДА МЕСЯЦ(Дата)=1 ТОГДА "Январь" и т.д., либо возвращают число месяца и форматируют его уже в коде после выполнения запроса.
Как получить месяц в родительном падеже, например «января»?
Штатная функция Формат() склонений не выполняет. Используйте ПолучитьСклоненияСтроки() при наличии компоненты склонения или собственный массив из двенадцати форм в общем модуле — для фиксированного списка месяцев это проще и надёжнее.
Можно ли получить название месяца на английском языке?
Да, укажите язык в форматной строке: Формат(Дата, "Л=en_US; ДФ=MMMM") вернёт «January». Без параметра Л используется язык региональных настроек текущего сеанса.
Как в СКД сгруппировать данные по месяцам с названием прописью?
Добавьте вычисляемое поле с выражением Формат(Период, "ДФ=MMMM") и группируйте по нему, а для правильного порядка добавьте в набор данных числовое поле МЕСЯЦ(Период) и сортируйте по нему. Альтернатива — использовать стандартный период «Месяц» у поля даты.
Что важно запомнить
В коде используйте Формат(Дата, "ДФ=MMMM") и НРег() для строчного написания. В запросе — ВЫБОР с МЕСЯЦ(), сортируя по числу. Склонения штатно нет: либо ПолучитьСклоненияСтроки(), либо массив форм. Всегда проверяйте пустую дату перед форматированием.