Разработка и Конфигурация · 10 мин
1С: как вывести месяц строкой
Как в 1С вывести месяц строкой: функция Формат, шаблоны даты, название месяца в родительном падеже, представление периода и типичные ошибки.
Задача вывести месяц строкой возникает в 1С постоянно: в печатных формах, отчётах, подписях документов и выгрузках требуется написание вида «январь», «Январь», «01» или «января». Встроенный язык 1С решает это через функцию Формат() с шаблонами форматной строки, а для составных периодов — через функцию ПредставлениеПериода().
Главное, что нужно понять сразу: дата в 1С — это не строка, а значение типа «Дата». Пока вы не применили форматирование, платформа сама решает, как показать значение, и результат зависит от региональных настроек сеанса. Поэтому любой вывод месяца в документ или отчёт должен проходить через явное преобразование в строку.
Ниже разобраны рабочие приёмы: получение номера месяца, полного названия, названия в родительном падеже, сокращённого варианта, а также формирование строк вида «Январь 2026» и представления произвольного периода. Каждый приём сопровождается готовым кодом, который можно вставить в модуль и проверить.
Как работает функция Формат с датами
Функция Формат(Значение, ФорматнаяСтрока) — универсальный способ преобразования значений в строку. Для дат второй параметр содержит шаблон, где сочетания букв Д, М и Г заменяются соответствующими компонентами даты: днём, месяцем и годом. Количество букв определяет вид представления.
Базовый пример для текущей даты:
ТекущаяДата = ТекущаяДатаСеанса();
СтрокаМесяц = Формат(ТекущаяДата, "ДФ=ММММ"); // "Январь"
Сообщить(СтрокаМесяц);
Важный нюанс: вместо ТекущаяДата() в серверном коде рекомендуется ТекущаяДатаСеанса() — она учитывает часовой пояс сеанса и не зависит от настроек сервера. Для вывода месяца это особенно важно на границе месяцев: разница в часовых поясах может дать «прошлый» или «следующий» месяц.
Если дата хранится в реквизите документа, подставьте его напрямую: Формат(Документ.Дата, "ДФ=ММММ"). Функция вернёт строку, которую можно присоединять к другим строкам, выводить в табличный документ или параметр макета.
Шаблоны форматной строки для месяца
Шаблон ДФ поддерживает несколько вариантов представления месяца. Выбор зависит от того, что требуется в конкретной печатной форме или файле выгрузки.
| Шаблон | Результат | Когда применять |
|---|---|---|
| ДФ=М | 1 | Номер месяца без нуля, редко нужен |
| ДФ=ММ | 01 | Номер с ведущим нулём: файлы обмена, имена файлов |
| ДФ=МММ | янв | Сокращённое название в компактных таблицах |
| ДФ=ММММ | Январь | Полное название в именительном падеже |
| ДФ='ММММ ГГГГ' | Январь 2026 | Заголовки отчётов и периодов |
Обратите внимание на последний пример: внутри форматной строки используются одинарные кавычки, потому что сама строка в коде уже заключена в двойные. Это частая причина синтаксической ошибки у начинающих разработчиков.
Комбинировать шаблоны можно свободно. Например, Формат(Дата, "ДФ='ММ.ГГГГ'") даст «01.2026» — типовой формат для бухгалтерских выгрузок и имен файлов отчётности.
СтрокаПериод = Формат(ДатаОтчета, "ДФ='ММММ ГГГГ'"); // "Январь 2026"
НомерМесяца = Формат(ДатаОтчета, "ДФ=ММ"); // "01"
Сокращение = Формат(ДатаОтчета, "ДФ=МММ"); // "янв"Месяц в родительном падеже: «января»
Шаблон ММММ возвращает название в именительном падеже — «Январь». Но в датах документов требуется родительный: «15 января 2026 г.». Здесь помогает полный шаблон даты, из которого затем извлекается нужная часть.
ПолнаяДата = Формат(Документ.Дата, "ДЛФ=DD"); // "15 января 2026 г."
// либо через ДФ:
ПолнаяДата = Формат(Документ.Дата, "ДФ='дд ММММ гггг'");
Шаблон ДЛФ=DD (длинный формат даты) автоматически склоняет месяц и добавляет «г.». Если нужен только месяц в родительном падеже без числа, надёжнее всего сформировать строку вручную через массив:
Функция МесяцРодительныйПадеж(Дата)
Месяцы = Новый Массив;
Месяцы.Добавить("января"); Месяцы.Добавить("февраля");
Месяцы.Добавить("марта"); Месяцы.Добавить("апреля");
Месяцы.Добавить("мая"); Месяцы.Добавить("июня");
Месяцы.Добавить("июля"); Месяцы.Добавить("августа");
Месяцы.Добавить("сентября"); Месяцы.Добавить("октября");
Месяцы.Добавить("ноября"); Месяцы.Добавить("декабря");
Возврат Месяцы[Месяц(Дата) - 1];
КонецФункции
Такой подход полностью независим от региональных настроек и предсказуем в любой локали. Его удобно разместить в общем модуле и вызывать из всех печатных форм.
Представление периода целиком
Когда нужно показать не один месяц, а диапазон — например, «Январь 2026 г. — Март 2026 г.» или «1 квартал 2026 г.», — используется функция ПредставлениеПериода(НачалоПериода, КонецПериода, ФорматнаяСтрока). Она сама определяет, как компактно описать интервал.
Начало = НачалоКвартала(ДатаОтчета);
Конец = КонецКвартала(ДатаОтчета);
Заголовок = ПредставлениеПериода(Начало, Конец, "ФП=Истина");
// "1 квартал 2026 г."
Параметр ФП=Истина включает «формат периода»: платформа распознаёт квартал, полугодие, месяц и год и выводит их в привычном виде. Без него функция вернёт просто две даты через тире.
Для ровно одного месяца функция вернёт «Январь 2026 г.» — это удобно в заголовках отчётов, где период задаётся пользователем и заранее неизвестно, выбран месяц, квартал или произвольный интервал.
Сравнение вариантов
Быстро и просто для одиночной даты. Ограничение: только именительный падеж и зависимость от локали
Полный контроль над падежом и регистром. Ограничение: нужно поддерживать функцию вручную, только один язык
Идеально для заголовков отчётов с произвольным интервалом. Ограничение: не подходит для вывода одного слова «январь» без года
Вывод месяца в печатных формах и СКД
В макете табличного документа месяц строкой обычно подставляется через параметр. В модуле формирования печатной формы вычислите строку заранее и передайте её в область:
ОбластьШапка.Параметры.МесяцПрописью =
Формат(Документ.Дата, "ДФ='ММММ ГГГГ'");
В запросах для СКД название месяца можно получить прямо на уровне запроса функцией ПРЕДСТАВЛЕНИЕ() или через таблицу соответствия. Однако чаще в отчётах группируют по номеру месяца (МЕСЯЦ(Период)), а красивое название формируют уже при выводе — в вычисляемом поле или через формат в настройках ресурса.
Если отчёт строится на СКД и нужна колонка «Месяц» с названием, добавьте вычисляемое поле с выражением Формат(Период, "ДФ=ММММ") — язык выражений СКД поддерживает функцию Формат.
- 1Определите, какое представление нужно: номер, название, название с годом или родительный падеж
- 2Выберите шаблон: ММ, МММ, ММММ или ДЛФ=DD, либо функцию с массивом названий
- 3Вычислите строку в модуле формирования печатной формы через Формат() или свою функцию
- 4Передайте строку в параметр области макета
- 5Сформируйте документ и проверьте результат на датах с разных месяцев, особенно на границе года
Проверка результата и граничные случаи
После внедрения кода проверьте вывод на нескольких контрольных датах. Особое внимание — январю и декабрю: именно здесь проявляются ошибки с часовыми поясами и с вычислением границ периода. Декабрьская дата, сдвинутая из-за пояса на январь, даст неверный месяц в печатной форме.
Второй контрольный случай — пустая дата. Формат('00010101', "ДФ=ММММ") вернёт «Январь», что в документе без даты будет выглядеть как ложное значение. Перед форматированием проверяйте заполненность:
Если ЗначениеЗаполнено(Документ.Дата) Тогда
СтрокаМесяц = Формат(Документ.Дата, "ДФ=ММММ");
Иначе
СтрокаМесяц = "";
КонецЕсли;
Третий момент — регистр первой буквы. Шаблоны возвращают название с заглавной или строчной буквы в зависимости от локали и контекста. Если в середине предложения нужна строчная буква, примените НРег(), если в начале — заглавную, используйте ВРег(Лев(Строка, 1)) + Сред(Строка, 2).
Как проверить результат
Месяц соответствует дате документа
Месяц смещён на соседний — проблема часового пояса, замените ТекущаяДата на ТекущаяДатаСеанса
Строка месяца пустая
Выводится «Январь» — нет проверки заполненности даты
Месяц в родительном падеже
Именительный падеж — использован ММММ вместо ДЛФ=DD или массива
Формат 01, 02 ... 12, сортировка корректна
Номера 1, 2 ... 12 без нуля — шаблон М вместо ММ
FAQ
Как получить номер месяца числом, а не строкой?
Используйте функцию Месяц(Дата) — она возвращает число от 1 до 12. Это удобно для сравнений и вычислений. Если затем нужен номер строкой с ведущим нулём, примените Формат(Дата, "ДФ=ММ"), а не преобразование числа.
Почему Формат выводит название месяца на английском?
Название зависит от языка сеанса и региональных настроек информационной базы. Если база работает с английской локалью, ММММ даст «January». Решения: настроить локаль сеанса, использовать параметр локализации форматной строки или формировать название через собственный массив строк.
Как вывести месяц и год в виде «Январь 2026 г.» с буквой «г»?
Шаблон ДФ='ММММ ГГГГ' букву «г» не добавляет. Используйте ПредставлениеПериода(НачалоМесяца(Дата), КонецМесяца(Дата), "ФП=Истина") — для ровно одного месяца функция вернёт именно формат «Январь 2026 г.».
Можно ли получить название месяца прямо в запросе?
В языке запросов есть функция МЕСЯЦ() для номера и ПРЕДСТАВЛЕНИЕ() для строкового представления, но красивое название месяца надёжнее формировать после выборки — в вычисляемом поле СКД или при обработке результата запроса через Формат().
Как вывести квартал строкой вместо месяца?
Вычислите номер квартала: Цел((Месяц(Дата) - 1) / 3) + 1, затем сформируйте строку вида Строка(НомерКвартала) + " квартал " + Формат(Дата, "ДФ=ГГГГ"). Либо передайте границы квартала в ПредставлениеПериода() с ФП=Истина.
Что вернёт Формат для пустой даты и как это обработать?
Для значения '00010101' шаблон ММММ вернёт «Январь», а ДЛФ=DD — пустую строку или дату по умолчанию в зависимости от настроек. Всегда проверяйте дату через ЗначениеЗаполнено() перед форматированием, иначе в печатной форме появится фиктивный январь.
Что важно запомнить
Месяц строкой выводится через Формат() с шаблонами ДФ: ММ — номер с нулём, МММ — сокращение, ММММ — полное название в именительном падеже. Для родительного падежа используйте ДЛФ=DD или собственный массив названий, для периодов — ПредставлениеПериода(). Перед форматированием проверяйте заполненность даты, а в серверном коде берите ТекущаяДатаСеанса().