Как использовать функцию ПредставлениеПериода в 1С для вывода даты в текстовом формате

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

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

Анализ проблемы начинающего разработчика

Рассмотрим типичную ситуацию, с которой сталкиваются новички при изучении программирования на 1С. Основная сложность заключается в смешивании типов данных. Посмотрим на пример кода, который часто приводит к ошибкам:


Функция МояДата(ВыводимДату)  
    Если ДатаНачала = ТекДата Тогда  
        ДатаНачала = НачалоДня(Формат(ТекДата, "ДЛФ=ДД")); 
    КонецЕсли; 
    // ...
КонецФункции

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

Правильное использование функции ПредставлениеПериода

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

  1. Определите начало и конец интересующего вас периода (день, месяц, квартал или год).
  2. Передайте эти границы в функцию.
  3. Добавьте дополнительные параметры оформления, если это необходимо.

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


ТекДата = ТекущаяДата();
НачДата = НачалоМесяца(ТекДата);
КонДата = КонецМесяца(ТекДата);
РезультатТекст = ПредставлениеПериода(НачДата, КонДата, "ФП = Истина");
Сообщить(РезультатТекст); // Выведет, например: "Май 2019 г."

В этом примере мы сначала получаем границы полного месяца с помощью НачалоМесяца() и КонецМесяца(), а затем передаем их функции. Параметр "ФП = Истина" (Полный Период) гарантирует, что система постарается вывести максимально подробное описание.

Создание универсальной функции в модуле

Для того чтобы использовать этот механизм многократно, логично вынести логику в отдельную функцию. Посмотрим на итоговое решение, которое позволяет передать любую дату и получить её красивое представление:


Процедура ПриНачалеРаботыСистемы()
    ТекДата = ТекущаяДата();
    // Вызываем нашу функцию
    ТекстовоеЗначение = ПолучитьТекстПериода(ТекДата);
    Сообщить("Текущий месяц: " + ТекстовоеЗначение);
КонецПроцедуры

Функция ПолучитьТекстПериода(ВхДата)
    // Определяем границы месяца для переданной даты
    НачалоПериода = НачалоМесяца(ВхДата);
    КонецПериода  = КонецМесяца(ВхДата);
    
    // Формируем строковое представление
    // Добавление пустой строки "" + гарантирует приведение к типу Строка
    Результат = "" + ПредставлениеПериода(НачалоПериода, КонецПериода, "ФП = Истина");
    
    Возврат Результат;  
КонецФункции

Отличия ПредставлениеПериода от функции Формат

Многие программисты задаются вопросом: зачем использовать сложную функцию, если можно применить Формат(Дата, "ДФ='ММММ гггг'")? Проанализируем ситуацию подробнее:

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

Функция ПредставлениеПериода() обладает встроенной логикой:

Это делает ПредставлениеПериода() незаменимой для финансовых отчетов и динамических заголовков, где важно соблюдать точность терминологии.

Дополнительные возможности и параметры

Рассмотрим продвинутые возможности функции, которые помогут сделать ваши приложения еще более профессиональными:

  1. Локализация (Параметр Л): Вы можете принудительно задать язык вывода. Например, ПредставлениеПериода(Д1, Д2, "Л=en_US") вернет «January 2023» вместо «Январь 2023 г.». Это критически важно для международных компаний.
  2. Работа с неограниченными периодами: Если в качестве одной из дат передать пустую дату ('00010101'), функция сформирует текст «с ...» или «по ...». Рассмотрим пример:
    
    // Период без ограничения окончания
    Текст = ПредставлениеПериода(ТекущаяДата(), '00010101', "ФП = Истина");
    // Вернет: "с 22.05.2019"
    
  3. Использование в СКД: Данная функция доступна не только в коде, но и в выражениях Системы компоновки данных. Это позволяет пользователям видеть в шапке отчета красиво оформленные периоды без написания сложного программного кода.

Таким образом, использование ПредставлениеПериода() является стандартом качественной разработки в 1С. Она обеспечивает правильное склонение (именительный падеж), автоматическое определение типа периода (месяц, квартал, год) и легко подстраивается под языковые настройки системы.

← На главную