Разработка и Конфигурация · 10 мин
Как вывести только месяц и год в 1С
Практические способы вывести только месяц и год в 1С: функция Формат, функции Месяц и Год, форматные строки, работа в запросах и СКД с примерами кода.
Задача вывести только месяц и год из даты возникает в 1С постоянно: при формировании заголовков отчётов, группировке данных по периодам, печати документов и выгрузке сведений. Полная дата вида «15.03.2026 14:32:10» для таких целей не подходит — нужен компактный вид «Март 2026» или «03.2026».
Во встроенном языке 1С есть несколько рабочих способов решить эту задачу: функция Формат с форматной строкой, отдельные функции Месяц и Год, а также специальные конструкции в языке запросов и СКД. Выбор зависит от того, где именно вы обрабатываете дату — в коде модуля, в запросе, в макете печатной формы или в настройках отчёта.
Ниже разобраны все основные варианты с готовыми примерами кода, их отличия, ограничения и типичные ошибки, из-за которых результат получается пустым или отображается не так, как ожидалось.
Вывод месяца и года через функцию Формат
Функция Формат — основной инструмент для преобразования даты в строку нужного вида. Вторым параметром она принимает форматную строку, в которой для дат используется конструкция ДФ (формат даты). Символы внутри определяют, какие части даты попадут в результат.
Для вывода только месяца и года применяются такие варианты:
ДатаДокумента = ТекущаяДата();
// Результат: "03.2026"
Строка1 = Формат(ДатаДокумента, "ДФ='ММ.гггг'");
// Результат: "Март 2026"
Строка2 = Формат(ДатаДокумента, "ДФ='ММММ гггг'");
// Результат: "мар. 25"
Строка3 = Формат(ДатаДокумента, "ДФ='МММ гг'");
Обратите внимание на регистр букв: «ММ» — это месяц, а «мм» — минуты. Это одна из самых частых причин неправильного результата: вместо «03.2026» разработчик получает «32.2026», потому что написал «мм.гггг» и вместо месяца подставились минуты из времени даты.
Разбор форматных символов для даты
Чтобы собрать собственный вариант представления, нужно понимать, какие символы доступны в форматной строке даты:
| Символ | Значение | Пример результата |
|---|---|---|
| М | Номер месяца без ведущего нуля | 3 |
| ММ | Номер месяца с ведущим нулём | 03 |
| МММ | Краткое название месяца | мар |
| ММММ | Полное название месяца | Март |
| гг | Год, две последние цифры | 25 |
| гггг | Год полностью | 2026 |
Разделители между элементами (точка, пробел, дефис) выбираются произвольно. Любой посторонний текст внутри форматной строки тоже допустим: например, «ДФ='за ММММ гггг г.'» даст строку «за Март 2026 г.».
Если дата содержит пустое значение (01.01.0001), функция Формат по умолчанию вернёт пустую строку. Это удобно в отчётах, но может скрыть ошибку, когда дата просто не заполнена. Для явной обработки таких случаев проверяйте значение через ЗначениеЗаполнено(Дата) до форматирования.
Извлечение месяца и года функциями Месяц и Год
Когда нужны не строки, а числовые значения для расчётов или сравнений, используйте встроенные функции Месяц и Год. Они принимают дату и возвращают число:
ДатаДокумента = ТекущаяДата();
НомерМесяца = Месяц(ДатаДокумента); // 3
НомерГода = Год(ДатаДокумента); // 2026
// Сборка строки вручную при необходимости
СтрокаПериод = Формат(НомерМесяца, "ЧЦ=2; ЧВН=") + "." + Формат(НомерГода, "ЧГ=");
Такой подход оправдан, когда месяц и год нужны по отдельности: например, для проверки совпадения периода документа с отчётным периодом или для вычисления количества месяцев между двумя датами. Для простого вывода строки функция Формат короче и надёжнее.
Обратите внимание на параметр ЧГ= в примере: без него функция Формат для числа вставит разделитель групп разрядов, и год превратится в «2 025». Это вторая по частоте причина «битых» строк периода.
Месяц и год в запросах 1С
В языке запросов функции Формат нет — там работают собственные конструкции. Для извлечения частей даты используются функции МЕСЯЦ и ГОД, которые возвращают числа:
ВЫБРАТЬ
МЕСЯЦ(РеализацияТоваров.Дата) КАК Месяц,
ГОД(РеализацияТоваров.Дата) КАК Год,
СУММА(РеализацияТоваров.Сумма) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваров
СГРУППИРОВАТЬ ПО
МЕСЯЦ(РеализацияТоваров.Дата),
ГОД(РеализацияТоваров.Дата)
Более правильный способ группировки по месяцам — функция НАЧАЛОПЕРИОДА(Дата, МЕСЯЦ). Она возвращает дату первого дня месяца, что сохраняет тип «Дата» и позволяет корректно сортировать и соединять данные с другими таблицами:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ) КАК МесяцПродаж,
СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ)
УПОРЯДОЧИТЬ ПО
МесяцПродаж
Красивое строковое представление вида «Март 2026» в запросе получить напрямую нельзя — его формируют уже при выводе результата, в обходе выборки или в настройках СКД через формат поля.
Оформление периода в СКД и печатных формах
В системе компоновки данных формат поля задаётся без изменения самого запроса. Откройте закладку «Наборы данных», выберите поле с датой и в колонке «Оформление» (или в свойствах поля на закладке «Настройки» → «Поля») укажите форматную строку ДФ='ММММ гггг'. Значение останется датой, а отображаться будет как месяц и год.
Это важное преимущество: сортировка и группировка продолжают работать по хронологии, потому что тип данных не менялся. Если же вы преобразуете дату в строку в самом запросе через ПРЕДСТАВЛЕНИЕ, сортировка станет алфавитной — «Август 2026» окажется раньше «Июль 2026».
В макетах печатных форм дату периода обычно форматируют при заполнении параметров области:
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.ПериодОтчета =
Формат(НачалоПериода, "ДФ='ММММ гггг'");
Какой способ выбрать в вашей ситуации
Критерий выбора простой: определите, где происходит обработка и что важнее — внешний вид или тип данных.
Как выбрать действие
Универсальное правило: как можно дольше храните значение в типе «Дата» и преобразуйте в строку только в последний момент — при выводе пользователю. Это сохраняет возможность сортировки, сравнения и повторного форматирования под другой шаблон.
Как проверить результат
«Март 2026» или «03.2026» — соответствует исходной дате
«32.2026» или «00.2026» — перепутаны месяц и минуты
Январь, Февраль, Март — хронологический порядок
Август, Апрель, Декабрь — алфавитный порядок, дата преобразована в строку в запросе
«2026» без пробелов
«2 025» — не задан параметр ЧГ= при форматировании числа
Проверка результата и границы применения
После внедрения любого из способов проверьте его на контрольных датах: на дате с однозначным месяцем (например, 05.01.2026), на дате с ненулевым временем и на пустой дате. Первый случай выявит проблемы с ведущими нулями, второй — путаницу месяца и минут, третий — поведение при незаполненном значении.
Учтите и ограничения: функция Формат учитывает региональные настройки сеанса, поэтому название месяца может выводиться на языке, заданном в настройках пользователя или кода локализации. Если отчёт должен выглядеть одинаково у всех пользователей, задайте код локализации явно третьим параметром форматной строки или используйте числовой формат «ММ.гггг», который от локализации не зависит.
При работе через запрос помните, что функции МЕСЯЦ и ГОД в условиях ГДЕ отключают использование индексов по полю даты и могут замедлить выборку на больших таблицах. Для отбора по периоду эффективнее сравнивать дату с границами диапазона через параметры, а не извлекать из неё части.
Что важно запомнить
Для строки используйте Формат с ДФ='ММММ гггг', для чисел — Месяц и Год, в запросах — МЕСЯЦ, ГОД и НАЧАЛОПЕРИОДА, в СКД — формат поля. Не путайте «ММ» и «мм», не превращайте дату в строку раньше времени и проверяйте результат на контрольных датах.
Частые вопросы
Как вывести месяц и год в виде «03/2026» через косую черту?
Укажите нужный разделитель прямо в форматной строке: Формат(Дата, "ДФ='ММ/гггг'"). Разделитель может быть любым — точка, пробел, дефис, слэш. Специальное экранирование для этих символов не требуется.
Почему вместо месяца выводятся двузначные числа вроде 32 или 45?
Вы использовали строчные буквы «мм» в форматной строке — это символ минут, а не месяца. Замените на заглавные «ММ»: ДФ='ММ.гггг'. Проверить можно на дате с ненулевым временем: если «месяц» совпадает с минутами времени, ошибка именно в регистре.
Как получить название месяца в родительном падеже для фразы «отчёт за март 2026»?
Стандартная форматная строка выводит именительный падеж. Для родительского падежа формируйте строку вручную: создайте массив или соответствие с названиями месяцев в нужной форме и подставляйте по номеру, полученному функцией Месяц(Дата).
Можно ли сгруппировать данные по месяцу и году в динамическом списке?
Напрямую в динамическом списке группировка недоступна — он предназначен для плоских списков. Для группировки по периодам используйте отчёт на СКД с произвольным запросом и НАЧАЛОПЕРИОДА(Дата, МЕСЯЦ) либо собственную таблицу значений, заполняемую программно.
Формат возвращает пустую строку, хотя дата вроде бы есть. В чём причина?
Скорее всего, дата содержит значение 01.01.0001 — это «пустая» дата в 1С, и Формат по умолчанию превращает её в пустую строку. Проверьте значение через ЗначениеЗаполнено(Дата) и обработайте случай отдельно, например выведите «период не указан».
Как вывести месяц и год на английском языке?
Передайте код локализации в форматной строке: Формат(Дата, "ДФ='MMMM yyyy'; Л=en_US"). Обратите внимание, что в английской локали форматные символы тоже локализованы — месяц обозначается буквой M, год — буквой y.