В процессе разработки конфигураций, отчетов или печатных форм на платформе 1С:Предприятие программисты часто сталкиваются с необходимостью отобразить дату не в стандартном числовом виде, а в виде текстового названия месяца. Это критически важно для создания красивых шапок документов, договоров или аналитических отчетов.
Стандартный тип данных Дата в 1С хранит информацию в числовом формате, поэтому для вывода названия месяца (например, "Январь" или "Февраль") требуется специальное преобразование. Существует несколько подходов к решению этой задачи, каждый из которых имеет свои особенности в зависимости от версии платформы и требуемой локали.
Рассмотрим основные способы получения строкового представления месяца. Выбор конкретного метода зависит от того, нужно ли вам полное название, сокращенное или, возможно, месяц римскими цифрами. Правильное использование встроенных функций гарантирует корректное отображение данных в любых региональных настройках системы.
Использование функции Формат для получения месяца
Самый универсальный и рекомендуемый способ преобразования даты в строку — использование глобальной функции Формат. Этот метод позволяет гибко настраивать вывод, опираясь на стандарты форматирования платформы. Для извлечения названия месяца необходимо задать соответствующую строку формата.
В базовом варианте, чтобы получить полное название месяца на языке интерфейса, используется specifier ММ в сочетании с указанием типа вывода. Однако, более явным и надежным способом является использование конструкции с указанием формата даты. Например, код Формат(ТекущаяДата(), "ДФ=MMMM") вернет полное название месяца.
Если вам необходимо получить сокращенное название (например, "Янв" вместо "Январь"), форматная строка меняется на ДФ=MMM. Это обеспечивает автоматическую локализацию отчетов при смене языка системы.
⚠️ Внимание: Функция Формат возвращает строку, зависящую от региональных настроек. Если ваш отчет должен выводить месяц на английском языке независимо от настроек 1С, потребуется явное указание локали в параметрах форматирования или использование альтернативных методов.
Для принудительного вывода месяца на определенном языке используйте конструкцию: Формат(Дата, "ДФ=MMMM; ЛР=en_US"). Это полезно при формировании экспортных файлов для иностранных партнеров.
Рассмотрим пример использования в коде. Допустим, у нас есть переменная ДатаДокумента. Для получения строки с месяцем мы пишем:
ИмяМесяца = Формат(ДатаДокумента, "ДФ=MMMM");
Такой подход гарантирует, что даже при изменении системных настроек название месяца останется понятным пользователю. Кроме того, функция Формат оптимизирована для работы с большими массивами данных, что делает её предпочтительной при формировании массовых выборок.
Альтернативный метод: функция МесяцГода
Помимо универсальной функции форматирования, в платформе 1С существует специализированная функция МесяцГода. Она предназначена исключительно для получения порядкового номера месяца, но в сочетании с другими конструкциями может использоваться для получения названия.
Функция МесяцГода возвращает целое число от 1 до 12. Само по себе число не является строкой с названием, поэтому для получения текстового вида потребуется дополнительная логика. Обычно это реализуется через массив констант или оператор выбора.
Использование этого метода оправдано в случаях, когда требуется высокая производительность вычислений в циклах или когда форматирование даты по каким-то причинам недоступно. Однако код становится более громоздким по сравнению с использованием Формат.
- 🔢 Функция возвращает числовой тип данных, который нужно конвертировать.
- ⚡ Работает быстрее в старых версиях платформы при обработке миллионов записей.
- 🛠 Требует ручной реализации маппинга чисел на названия месяцев.
Пример реализации через массив:
МассивМесяцев = Новый Массив;
МассивМесяцев.Добавить("Январь");
МассивМесяцев.Добавить("Февраль");
//.. заполнение до 12 элементов
НомерМесяца = МесяцГода(ДатаДокумента);
ИмяМесяца = МассивМесяцев[НомерМесяца - 1];
Такой подход дает полный контроль над названиями месяцев. Вы можете использовать любые сокращения или даже собственные обозначения, не зависящие от системной локали. Это особенно актуально для специфических отраслевых отчетов.
Работа с английскими названиями месяцев
В международной практике или при интеграции с зарубежными системами часто возникает потребность получить название месяца на английском языке. Стандартная функция Формат позволяет решить эту задачу без написания дополнительных обработчиков.
Для этого в строку формата необходимо добавить параметр локализации. Синтаксис требует указания кода языка и региона. Например, для американского варианта английского используется код en_US, а для британского — en_GB.
Код для получения английского названия месяца выглядит следующим образом:
ИмяМесяцаEN = Формат(ДатаДокумента, "ДФ=MMMM; ЛР=en_US");
Важно отметить, что параметр ЛР (Локаль Региона) чувствителен к регистру и наличию подчеркивания. Ошибка в написании кода локали приведет к тому, что система проигнорирует параметр и вернет название на языке интерфейса по умолчанию.
| Код локали | Описание | Пример вывода (Март) |
|---|---|---|
| ru_RU | Русский (Россия) | Март |
| en_US | Английский (США) | March |
| de_DE | Немецкий (Германия) | März |
| fr_FR | Французский (Франция) | Mars |
Использование явного указания локали делает код переносимым. Ваш отчет будет корректно формировать данные на любом сервере, независимо от того, какой язык установлен в операционной системе или в пользовательском режиме 1С.
Явное указание локали в функции Формат — единственный надежный способ гарантировать язык вывода месяца в многопользовательской среде с разными настройками.
Получение номера месяца и римских цифр
Иногда в финансовых или юридических документах требуется указывать месяц не словом, а римской цифрой. Стандартными средствами 1С функция форматирования не поддерживает автоматический перевод в римскую систему счисления, поэтому эту задачу приходится решать программно.
Сначала необходимо получить номер месяца с помощью функции Месяц или МесяцГода. Затем, используя простой алгоритм замены или словарь, преобразовать арабскую цифру в римскую. Для диапазона 1-12 это можно сделать через оператор Выбор или массив.
Пример кода для конвертации:
Функция МесяцРимскими(ДатаЗнач)
Номер = Месяц(ДатаЗнач);
Возврат Выбор(
Номер = 1, "I",
Номер = 2, "II",
Номер = 3, "III",
Номер = 4, "IV",
Номер = 5, "V",
Номер = 6, "VI",
Номер = 7, "VII",
Номер = 8, "VIII",
Номер = 9, "IX",
Номер = 10, "X",
Номер = 11, "XI",
Номер = 12, "XII",
""
);
КонецФункции
Такая функция может быть вынесена в общий модуль для повторного использования. Несмотря на кажущуюся простоту, использование готовой функции повышает читаемость основного кода отчетов и снижает вероятность опечаток.
⚠️ Внимание: Римские цифры используются только в специфических случаях (даты договоров, нумерация кварталов в некоторых отчетах). В стандартных печатных формах 1С обычно применяются арабские цифры или полные названия месяцев.
Нюансы работы в разных версиях платформы
Поведение функций работы с датами может незначительно отличаться в зависимости от версии платформы 1С:Предприятие. В версиях 8.2 и ниже возможности форматирования были более ограничены, тогда как в современных версиях 8.3 функционал значительно расширен.
В старых версиях разработчики часто использовали свойство Представление объекта даты, но этот метод был нестабилен и зависел от системных настроек Windows. Современные методы на основе Формат лишены этих недостатков и работают предсказуемо на любых ОС (Windows, Linux, macOS).
При миграции старых конфигураций на новые версии платформы рекомендуется провести ревизию кода. Замена устаревших конструкций на функцию Формат с явным указанием строки формата повысит стабильность работы системы.
- 🚀 В версии 8.3.10+ улучшена поддержка сложных строк формата.
- 🐛 В ранних версиях могли возникать ошибки при работе с високосными годами в некоторых функциях.
- 🌐 Поддержка UTF-8 в новых версиях гарантирует корректный вывод спецсимволов в названиях месяцев.
Скрытая особенность старых версий
В версиях платформы до 8.3.6 при использовании функции Формат в тонком клиенте на Linux могли некорректно отображаться месяцы с национальными символами, если не была установлена соответствующая локаль в ОС.
Частые ошибки и способы их устранения
При работе с датами новички часто допускают типичные ошибки, связанные с типами данных. Самая распространенная из них — попытка применить функцию Месяц к строке. Помните, что все функции извлечения компонентов даты работают только с типом Дата.
Если дата получена из текстового поля или из внешней системы в виде строки (например, "15.01.2026"), её необходимо сначала преобразовать функцией Дата или Попытка..Исключение. Только после успешной конвертации можно извлекать месяц.
Еще одна ошибка — игнорирование часового пояса. При работе с серверным временем функция ТекущаяДата() возвращает время сервера. Если сервер находится в другом часовом поясе, месяц может отличаться от местного времени пользователя.
Попытка
ДатаЗнач = Дата(СтрокаДата);
ИмяМесяца = Формат(ДатаЗнач, "ДФ=MMMM");
Исключение
Сообщить("Ошибка преобразования даты: " + ОписаниеОшибки());
КонецПопытки;
Использование блока обработки исключений позволяет избежать падения программы при некорректных входных данных. Это особенно важно при загрузке данных из файлов Excel или CSV, где формат даты может быть нарушен.
☑️ Проверка перед извлечением месяца
Как получить месяц прописными буквами?
Функция Формат возвращает название месяца с заглавной буквы. Чтобы перевести всю строку в нижний регистр, используйте функцию СтрНижн(). Пример: СтрНижн(Формат(Дата, "ДФ=MMMM")) вернет "январь". Для полного верхнего регистра используйте СтрВерх().
Можно ли получить название месяца без функции Формат?
Да, можно использовать свойство Представление даты, но результат будет содержать и день, и год. Чтобы выделить месяц, придется использовать функции работы со строками (СтрЗаменить, СтрРазделить), что менее надежно и производительнее, чем прямой вызов Формат.
Почему месяц выводится на английском, хотя нужна русская локаль?
Скорее всего, в коде явно задан параметр локали ЛР=en_US или на компьютере пользователя в настройках региона стоит английский язык. Проверьте строку формата и уберите параметр локали или замените его на ru_RU.
Как получить сокращенное название месяца в 1С?
Используйте спецификатор MMM вместо MMMM в строке формата. Пример: Формат(Дата, "ДФ=MMM") вернет "Янв", "Фев" и т.д. Количество букв M определяет длину сокращения в зависимости от настроек локали.