При формировании отчетности в 1С часто возникает задача вывода даты в текстовом формате, например: «в январе 2016 года». Стандартные средства форматирования платформы Формат() с параметром ДФ='MMMM' возвращают название месяца в именительном падеже («Январь»), что не всегда подходит для оформления заголовков или текстовых описаний. В этой статье мы разберем несколько способов решения этой задачи — от простых выражений в СКД до использования встроенных инструментов платформы.
Начиная с версии 8.3.13, разработчики получили в свое распоряжение мощный и простой инструмент — метод ПолучитьСклоненияСтроки(). Этот метод позволяет автоматически привести любую строку к нужному падежу, опираясь на встроенные правила языка. Это наиболее надежный и профессиональный способ решения задачи.
Рассмотрим, как использовать этот метод в коде:
// Получаем название месяца в именительном падеже
МизД = Формат(ТекущаяДата(), "ДФ=ММММ");
// Склоняем полученную строку в предложный падеж
МассивСклонений = ПолучитьСклоненияСтроки(МизД, "ПЛ=Мужской", "ПД=Предложный");
// Результат будет содержаться в первом элементе массива
Сообщить(МассивСклонений[0]); // Например: "Январе"
Этот метод предпочтителен, так как он освобождает вас от необходимости «хардкодить» названия месяцев и учитывать исключения (например, при склонении «Май» в «Мае» или «Март» в «Марте»).
Если задача стоит вывести склоненный месяц непосредственно в макете отчета СКД, не прибегая к модификации кода модулей, можно воспользоваться выражением выбора. Рассмотрим два варианта реализации.
Вариант 1: Использование конструкции ВЫБОР КОГДА
Этот способ позволяет жестко задать соответствие номера месяца его названию в нужном падеже. Это решение удобно тем, что оно полностью инкапсулировано внутри настроек отчета.
ВЫБОР
КОГДА Месяц(Дата) = 1 ТОГДА "Январе"
КОГДА Месяц(Дата) = 2 ТОГДА "Феврале"
КОГДА Месяц(Дата) = 3 ТОГДА "Марте"
КОГДА Месяц(Дата) = 4 ТОГДА "Апреле"
КОГДА Месяц(Дата) = 5 ТОГДА "Мае"
КОГДА Месяц(Дата) = 6 ТОГДА "Июне"
КОГДА Месяц(Дата) = 7 ТОГДА "Июле"
КОГДА Месяц(Дата) = 8 ТОГДА "Августе"
КОГДА Месяц(Дата) = 9 ТОГДА "Сентябре"
КОГДА Месяц(Дата) = 10 ТОГДА "Октябре"
КОГДА Месяц(Дата) = 11 ТОГДА "Ноябре"
КОГДА Месяц(Дата) = 12 ТОГДА "Декабре"
КОНЕЦ
Вариант 2: Алгоритмическое склонение через строковые функции
Если вы хотите сделать выражение более лаконичным, можно использовать функции манипуляции строками. Суть подхода заключается в определении последней буквы и ее замене на «е».
ВЫБОР
КОГДА ПОДСТРОКА(Формат(Дата,"ДФ = 'MMMM'"), ДлинаСтроки(Формат(Дата,"ДФ = 'MMMM'")), 1) = "т"
ТОГДА Формат(Дата,"ДФ = 'MMMM'") + "е"
ИНАЧЕ ПОДСТРОКА(Формат(Дата,"ДФ = 'MMMM'"), 1, ДлинаСтроки(Формат(Дата,"ДФ = 'MMMM'")) - 1) + "е"
КОНЕЦ
ПолучитьСклоненияСтроки() в программном коде. Это гарантирует корректную работу при любых изменениях в языке.ВЫБОР КОГДА. Она читаема и не требует изменения конфигурации.СтрЗаменить) часто приводят к ошибкам на сложных словах или при смене падежей. Пользуйтесь встроенными функциями платформы, где это возможно.Проанализировав эти способы, вы сможете выбрать тот, который лучше всего подходит для вашей архитектуры решения. Помните, что использование общих модулей с функциями склонения для часто используемых отчетов — лучший способ сохранить чистоту кода в долгосрочной перспективе.