Как вывести в дате только месяц в 1С:Предприятии

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Способ 1. Использование встроенной функции Формат() — стандартный подход

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

Для того чтобы получить полное название месяца из даты, мы используем специальный конструктор форматной строки со спецификатором ДФ=ММММ.

Рассмотрим пример использования этой функции в коде:


ДатаДокумента = ТекущаяДата(); // Например, 15.05.2026
НазваниеМесяца = Формат(ДатаДокумента, "ДФ=ММММ");
Сообщить(НазваниеМесяца); // В окно сообщений выведется: Май

Давайте проанализируем, какие еще спецификаторы для работы с месяцами предоставляет нам конструктор форматной строки 1С:

  1. ДФ=М — выводит номер месяца без ведущего нуля (например, «5» или «12»).
  2. ДФ=ММ — выводит номер месяца с ведущим нулем для однозначных номеров (например, «05» или «12»).
  3. ДФ=МММ — возвращает сокращенное текстовое представление месяца (например, «май», «дек.»).
  4. ДФ=ММММ — возвращает полное текстовое представление месяца в именительном падеже с заглавной буквы (например, «Май», «Декабрь»).

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


// Выведет дату в формате: 15 мая 2026
СтрокаДаты = Формат(ТекущаяДата(), "ДФ='дд ММММ гггг'");

Способ 2. Решение проблемы падежа (Именительный против Родительного)

Иногда стандартный вызов функции Формат() со спецификатором ДФ=ММММ не решает задачу до конца. Дело в том, что этот метод всегда возвращает месяц в именительном падеже (например, «Январь», «Февраль», «Март»). Однако при формировании печатных форм договоров, актов или приказов часто требуется родительный падеж (например, «15 января», «августа», «декабря»).

Чтобы получить название месяца в родительном падеже без написания огромных функций выбора, мы можем применить изящный «лайфхак» со строковыми функциями 1С. Суть метода заключается в том, что при совместном выводе дня и месяца платформа автоматически склоняет месяц в родительный падеж. Нам остается лишь программно отсечь первые символы дня.

Разберем этот алгоритм на примере:


Функция ПолучитьМесяцВРодительномПадеже(ВходнаяДата) Экспорт
    
    // Получаем строку вида "15 мая"
    СтрокаДеньМесяц = Формат(ВходнаяДата, "ДФ='дд ММММ'");
    
    // Отрезаем первые два символа дня и пробел
    МесяцВРодительном = СокрЛП(Сред(СтрокаДеньМесяц, 3));
    
    Возврат МесяцВРодительном; // Вернет "мая" вместо "Май"
    
КонецФункции

Этот простой прием позволяет быстро и красиво формировать тексты документов на русском языке, а для автоматизации создания счетов и договоров напрямую из входящих писем используется обработка для автоматического создания документов в 1С:Бухгалтерии 3.0.

Способ 3. Управление регистром символов (Заглавная или Строчная буква)

По умолчанию спецификатор ДФ=ММММ выводит название месяца с заглавной буквы («Январь»). Если в вашей печатной форме по правилам русского языка название месяца должно быть написано со строчной (маленькой) буквы, мы можем применить встроенную функцию НРег().

Рассмотрим, как это выглядит в коде:


ДатаСобытия = РабочаяДата;
// Приводим результат форматирования к нижнему регистру
МесяцСтрочными = НРег(Формат(ДатаСобытия, "ДФ=ММММ")); 
// Результат: "май" вместо "Май"

Важное примечание для СКД: При разработке отчетов в Системе компоновки данных функция НРег() может не поддерживаться напрямую в выражениях полей. В таких случаях рекомендуется выносить форматирование в общий модуль с флагом Экспорт и вызывать его из схемы компоновки данных.

Способ 4. Локализация и принудительное указание языка

Функция Формат() по умолчанию ориентируется на региональные настройки операционной системы текущего пользователя или сервера. Это может привести к непредвиденным результатам: например, если у пользователя установлена англоязычная Windows, функция вернет «May» вместо «Май».

Чтобы избежать такой зависимости и жестко зафиксировать язык вывода названий месяцев, мы можем использовать третий параметр функции Формат() — строку локализации. Код локализации пишется в формате Л=Код_Страны.

Посмотрим, как гарантировать вывод месяца на конкретном языке:


ДатаПечати = ТекущаяДата();

// Гарантированный вывод на русском языке
МесяцРусский = Формат(ДатаПечати, "ДФ=ММММ", "Л=ru_RU"); // "Май"

// Вывод на английском языке
МесяцАнглийский = Формат(ДатаПечати, "ДФ=ММММ", "Л=en_US"); // "May"

// Вывод на украинском языке
МесяцУкраинский = Формат(ДатаПечати, "ДФ=ММММ", "Л=uk_UA"); // "Травень"

Использование этого параметра делает ваши печатные формы устойчивыми к любым системным настройкам серверов и рабочих станций.

Способ 5. Использование глобальной функции ПредставлениеПериода()

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

Если передать в эту функцию начало и конец одного и того же месяца, платформа автоматически сформирует удобное для чтения представление:


НачалоПериода = НачалоМесяца(ТекущаяДата());
КонецПериода = КонецМесяца(ТекущаяДата());

СтрокаПериода = ПредставлениеПериода(НачалоПериода, КонецПериода);
Сообщить(СтрокаПериода); // Выведет: "Май 2026 г."

Функция также поддерживает параметры локализации для изменения языка вывода.

Способ 6. Использование Библиотеки стандартных подсистем (БСП)

Если вы ведете разработку в современных типовых конфигурациях (таких как 1С:ERP, 1С:КА, 1С:УТ или 1С:БП), в вашем распоряжении находится мощный инструмент — Библиотека стандартных подсистем (БСП). В ней уже реализованы готовые функции форматирования периодов, учитывающие падежи, правила русского языка и стандарты делопроизводства.

Для форматирования периодов мы можем обратиться к общему модулю работы со строками:


Начало = НачалоМесяца(ТекущаяДата());
Конец = КонецМесяца(ТекущаяДата());

// Использование готовой функции БСП
Представление = СтроковыеФункции.ПредставлениеПериодаВТексте(Начало, Конец);
// Вернет аккуратное текстовое представление периода

Способ 7. Альтернативные (ручные) методы и почему их стоит избегать

Иногда на форумах можно встретить альтернативные методы получения месяца, написанные разработчиками вручную. Например, через создание объектов Структура, Соответствие или даже через хитрое вырезание подстроки из длинной статической строки.

Рассмотрим один из таких "лайтовых", но спорных методов работы со строками:


НомерМесяца = Месяц(ТекущаяДата());
НазваниеМесяца = СокрП(Сред("        январь  февраль март    апрель  май     июнь    июль    август  сентябрьоктябрь ноябрь  декабрь ", НомерМесяца * 8 + 1, 8));

Хотя такой код выглядит лаконично и работает быстро, его использование в реальных коммерческих проектах категорически не рекомендуется по следующим причинам:

Выбирайте правильные методы форматирования дат, ориентируясь на стандарты разработки 1С, и ваш код всегда будет чистым, быстрым и понятным для коллег!

← На главную