Разработка и Конфигурация · 10 мин
Как вывести месяц прописью в 1С
Как вывести месяц прописью в 1С: функция Формат с ДФ=ММММ, СклонениеСтроки, представление даты в запросах и на печатных формах. Примеры кода и типичные ошибки.
Задача вывести месяц прописью возникает постоянно: в печатных формах документов, в заголовках отчётов, в письмах контрагентам, в кадровых приказах. Стандартный формат даты «01.03.2026» для таких случаев не подходит — нужен вид «март 2026» или «в марте 2026 года». В 1С это решается несколькими способами, и выбор зависит от того, где именно нужен результат: в коде, в запросе или прямо в макете.
Основной инструмент — функция Формат() с языковыми параметрами форматной строки. Она встроена в платформу, работает без подключения внешних библиотек и корректно обрабатывает русские названия месяцев. Дополнительно для склонения («в марте», «с января») используется функция СклонениеСтроки() или типовые механизмы склонения из БСП.
Ниже разобраны рабочие варианты с примерами кода, особенностями настройки локали и типичными ошибками, из-за которых вместо «март» выводится «March» или пустая строка.
Вывод месяца прописью через функцию Формат
Самый простой способ — передать дату в функцию Формат() с подходящей форматной строкой. Параметр ДФ (формат даты) управляет представлением, а параметр Л задаёт язык, от которого зависят названия месяцев.
ДатаДокумента = ТекущаяДатаСеанса();
// Полная дата прописью: "1 марта 2026 г."
СтрокаДляПечати = Формат(ДатаДокумента, "ДЛФ=DD");
// Только месяц и год: "март 2026"
МесяцГод = Формат(ДатаДокумента, "Л=ru_RU; ДФ='ММММ yyyy'");
// Только название месяца: "март"
ТолькоМесяц = Формат(ДатаДокумента, "Л=ru_RU; ДФ='ММММ'");
Обратите внимание на регистр букв в форматной строке: ММММ (четыре заглавные) даёт полное название месяца, а МММ — сокращённое («мар», «фев»). Строчные мммм в некоторых локалях интерпретируются иначе, поэтому для русского интерфейса надёжнее использовать заглавные.
Если нужен месяц с заглавной буквы (например, в начале предложения), оберните результат: ТРег(Формат(Дата, "Л=ru_RU; ДФ='ММММ'")) — функция ТРег() переведёт первую букву в верхний регистр.
МесяцПрописью = Формат(ДатаДокумента, "Л=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'. Тогда группировка и сортировка идут по настоящей дате, а пользователь видит месяц прописью.
Важный нюанс сортировки: строки «Август», «Апрель», «Декабрь» сортируются по алфавиту, а не по календарю. Поэтому название месяца нельзя использовать как поле упорядочивания — сортируйте по исходной дате или по МЕСЯЦ(), а прописное название выводите только для отображения.
Вывод месяца прописью в печатных формах
В макетах печатных форм (табличный документ) название месяца обычно подставляется в параметр области. В модуле менеджера документа при заполнении параметров макета добавьте вычисление:
ОбластьШапка.Параметры.МесяцГод = Формат(Шапка.Дата, "Л=ru_RU; ДФ='ММММ yyyy'");
Для полной даты вида ««01» марта 2026 г.» в типовых конфигурациях применяется Формат(Дата, "ДЛФ=DD") — это стандартный длинный формат даты, который уже включает день в кавычках-ёлочках и месяц прописью в родительном падеже («1 марта 2026 г.»). В большинстве печатных форм именно этот вариант и требуется, поэтому сначала проверьте, не решает ли задачу ДЛФ=DD, прежде чем собирать строку вручную.
Если печатная форма строится через СКД (макет компоновки), добавьте вычисляемое поле с выражением Формат(Дата, "Л=ru_RU; ДФ='ММММ yyyy'") — функции встроенного языка доступны в выражениях СКД.
- 1Определите, где нужен месяц прописью: код, запрос, СКД или макет печатной формы.
- 2Для именительного падежа используйте Формат(Дата, "Л=ru_RU; ДФ='ММММ yyyy'").
- 3Для полной даты прописью проверьте Формат(Дата, "ДЛФ=DD") — часто этого достаточно.
- 4Для падежных форм подключите СклонениеСтроки() или таблицу соответствий.
- 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. Склонения требуют СклонениеСтроки() или таблицы соответствий. В отчётах сортируйте по дате, а название месяца используйте только для отображения.