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

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

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

В этой статье мы подробно разберем все доступные методы решения данной задачи, проанализируем их преимущества и выберем оптимальный подход для каждой конкретной ситуации.

Метод 1. Настройка формата в макете документа (без программирования)

Если ваша задача заключается исключительно в том, чтобы вывести красивую дату в печатной форме (макете), то писать программный код или изменять запрос вовсе не обязательно. Платформа 1С обладает мощным встроенным механизмом форматирования данных в ячейках.

Рассмотрим по шагам, как это настроить:

  1. Откройте нужный макет (например, макет печатной формы счета или акта).
  2. Найдите ячейку, в которую выводится параметр с датой.
  3. Нажмите на ячейку правой кнопкой мыши и выберите пункт «Свойства».
  4. В открывшейся панели свойств найдите поле «Формат» и нажмите на кнопку с многоточием.
  5. В открывшемся конструкторе форматной строки перейдите на вкладку «Дата».
  6. В поле «Локальный формат даты» вы можете выбрать подходящий вариант, но для получения вида «Октябрь 2018» лучше вручную прописать форматную строку.
  7. В поле «Форматная строка» введите: ДФ='MMMM yyyy'.

Здесь MMMM означает полное название месяца на языке локализации, а yyyy — четырехзначный год. После применения этих настроек любое значение типа Дата, переданное в эту ячейку, будет автоматически преобразовываться в нужный нам вид. Для комплексной работы с макетами документов без доработки конфигурации можно использовать инструкцию по редактированию печатных форм в 1С.

Метод 2. Использование функции Формат() в программном коде

Бывают случаи, когда строковое представление месяца нужно получить непосредственно в модуле (например, для формирования заголовка окна или сложного текстового описания). Для этого используется встроенная функция Формат().

Разберем пример кода:


ДатаСобытия = Дата(2018, 10, 5);
ТекстМесяцГод = Формат(ДатаСобытия, "ДФ='MMMM yyyy'");
// Результат: "октябрь 2018"

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

Проанализируем ситуацию и напишем универсальную функцию для заглавной буквы:


РезультатФормата = Формат(ДатаСобытия, "ДФ='MMMM yyyy'");
Если ЗначениеЗаполнено(РезультатФормата) Тогда
    ТекстСЗаглавной = ТРег(Лев(РезультатФормата, 1)) + Сред(РезультатФормата, 2);
КонецЕсли;
// Результат: "Октябрь 2018"

В этом примере мы используем функцию ТРег() для преобразования первой буквы в верхний регистр и соединяем её с остальной частью строки, полученной через Сред().

Метод 3. Преобразование даты в запросе (ВЫБОР КОГДА)

Иногда разработчики пытаются использовать функцию Формат() прямо в тексте запроса. Сразу оговоримся: функция Формат в языке запросов 1С не поддерживается. Если вам критически важно получить название месяца именно в результате выполнения запроса (например, для группировки данных), придется использовать конструкцию ВЫБОР.

Посмотрим на пример реализации в запросе:


ВЫБРАТЬ
    ВЫБОР
        КОГДА МЕСЯЦ(Документ.Дата) = 1 ТОГДА "Январь"
        КОГДА МЕСЯЦ(Документ.Дата) = 2 ТОГДА "Февраль"
        КОГДА МЕСЯЦ(Документ.Дата) = 3 ТОГДА "Март"
        КОГДА МЕСЯЦ(Документ.Дата) = 4 ТОГДА "Апрель"
        КОГДА МЕСЯЦ(Документ.Дата) = 5 ТОГДА "Май"
        КОГДА МЕСЯЦ(Документ.Дата) = 6 ТОГДА "Июнь"
        КОГДА МЕСЯЦ(Документ.Дата) = 7 ТОГДА "Июль"
        КОГДА МЕСЯЦ(Документ.Дата) = 8 ТОГДА "Август"
        КОГДА МЕСЯЦ(Документ.Дата) = 9 ТОГДА "Сентябрь"
        КОГДА МЕСЯЦ(Документ.Дата) = 10 ТОГДА "Октябрь"
        КОГДА МЕСЯЦ(Документ.Дата) = 11 ТОГДА "Ноябрь"
        КОГДА МЕСЯЦ(Документ.Дата) = 12 ТОГДА "Декабрь"
    КОНЕЦ + " " + СТРОКА(ГОД(Документ.Дата)) КАК МесяцГодТекст
ИЗ
    Документ.РеализацияТоваровУслуг КАК Документ

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

Метод 4. Работа в Системе компоновки данных (СКД)

При разработке отчетов на базе СКД, программисту предоставляется еще больше гибкости. Вы можете не менять запрос, а задать формат вывода прямо в настройках поля компоновки.

Разберем по шагам:

  1. Перейдите на закладку «Наборы данных» в схеме компоновки.
  2. Найдите нужное поле с датой.
  3. В колонке «Оформление» нажмите на кнопку выбора.
  4. Установите параметр «Формат» и пропишите уже знакомую нам строку ДФ='MMMM yyyy'.

Также в СКД можно использовать «Вычисляемые поля». Это позволяет вызвать функцию общего модуля или встроенную функцию Формат() для создания отдельного строкового поля, которое будет содержать название месяца. Для вывода и оформления периодических группировок в отчете можно использовать пример формирования шапки отчета по неделям и месяцам в СКД.

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

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

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

Пример вызова функции (название может варьироваться от версии БСП):


ПредставлениеПериода = РаботаСДатами.ПредставлениеПериода(НачалоМесяца(Дата), КонецМесяца(Дата), "ФП=Истина");

Такой подход позволяет автоматически получать строки вида «Октябрь 2018 г.», следуя стандартам интерфейса, принятым в решениях 1С.

Тонкости локализации и падежей

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

Профессиональный совет: Если вам нужно гарантированно получить месяц в именительном падеже («Октябрь»), используйте в форматной строке символ L вместо M:


// LLLL — формат для самостоятельного (stand-alone) написания месяца в именительном падеже
Текст = Формат(ТекущаяДата(), "ДФ='LLLL yyyy'");

Буква L (от английского «Stand-alone month») специально предназначена для ситуаций, когда месяц выводится отдельно от дня месяца, что предотвращает его нежелательное склонение.

Заключение

Мы рассмотрели несколько способов вывода месяца прописью. Подведем итог:

Выбор метода зависит от конкретной архитектурной задачи, но знание всех вариантов позволит вам писать более гибкий и чистый код.

← На главную