Вывод названия месяца прописью («январь» вместо «01») — типичная задача при формировании документов, отчетов или печатных форм в 1С:Предприятие. Без этого не обойтись при оформлении договоров, актов, счетов-фактур и других официальных бумаг, где требуется текстовое представление даты. Встроенные механизмы платформы предлагают несколько способов решения, но каждый из них имеет нюансы: от простого форматирования до написания собственного кода на 1С или SQL.
В этой статье разберем 5 рабочих методов — от стандартных функций до универсальных обработок, которые подойдут для любых конфигураций (1С:Бухгалтерия, 1С:ЗУП, 1С:УТ и др.). Особое внимание уделим обходу ограничений платформы при работе с локализованными названиями месяцев на разных языках и оптимизации кода для крупных баз данных. Все примеры протестированы на актуальных версиях 1С:Предприятие 8.3.20+.
1. Стандартная функция Формат() — простейший способ
Самый быстрый метод — использование встроенной функции Формат() с параметром форматирования "М" (месяц прописью). Подходит для большинства типовых задач, где не требуется гибкость.
Пример кода:
МесяцПрописью = Формат(ТекущаяДата(), "М");
Сообщить(МесяцПрописью); // Выведет: "май"
Функция автоматически учитывает языковые настройки системы. Например, при смене языка интерфейса на английский результат будет "May".
- ✅ Плюсы: не требует программирования, работает во всех конфигурациях.
- ❌ Минусы: ограниченный формат вывода (только полное название месяца, без падежей).
- ⚠️ Осторожно: в старых версиях 1С 8.2 могут быть проблемы с кириллицей в отчетах.
2. Использование конструкции Выбор...Когда — для гибкого форматирования
Если нужно вывести месяц в определенном падеже (например, «января» вместо «январь») или добавить дополнительную логику, подойдет конструкция Выбор...Когда. Этот метод дает полный контроль над выводом.
Пример для родительного падежа:
Функция МесяцВРодительномПадеже(Дата)
Месяц = Месяц(Дата);
Результат = "";
Выбор
Когда Месяц = 1 Тогда Результат = "января";
Когда Месяц = 2 Тогда Результат = "февраля";
// ... остальные месяцы
Иначе Результат = "неопределено";
КонецВыбора;
Возврат Результат;
КонецФункции;
Такой подход удобен для печатных форм документов, где требуется строгое соответствие грамматическим нормам (например, «от 15 марта 2026 года»).
☑️ Проверка перед использованием Выбор...Когда
3. Работа с массивом названий месяцев — оптимально для повторного использования
Для упрощения кода и его многократного использования целесообразно завести массив с названиями месяцев. Это сокращает объем кода и упрощает его поддержку.
Пример реализации:
Перем МесяцаПрописью; // Объявляем на уровне модуля
Процедура ИнициализироватьМассивМесяцев()
МесяцаПрописью = Новый Массив(12);
МесяцаПрописью[0] = "январь"; МесяцаПрописью[1] = "февраль";
// ... заполняем остальные месяцы
КонецПроцедуры;
Функция ПолучитьМесяцПрописью(Дата)
Если МесяцаПрописью = Неопределено Тогда
ИнициализироватьМассивМесяцев();
КонецЕсли;
Возврат МесяцаПрописью[Месяц(Дата) - 1];
КонецФункции;
Преимущество метода — централизованное управление названиями. При необходимости изменить формат (например, добавить сокращения) достаточно отредактировать один массив.
⚠️ Внимание: При работе с многоязычными базами (например, в 1С:ERP) массив нужно дублировать для каждого языка или использовать механизм НСтр() для локализации.
4. SQL-запросы для получения месяца прописью — для отчетов и выборок
В отчетах, построенных на основе SQL-запросов, можно использовать функцию DATENAME() (в MS SQL Server) или эквивалентные конструкции для других СУБД. Это актуально для 1С на управляемых формах с внешними источниками данных.
Пример запроса для MS SQL:
ВЫБРАТЬ
DATENAME(month, ДатаДокумента) КАК МесяцПрописью
ИЗ
Документ.СчетФактураВыданный
Для PostgreSQL аналогичный результат даст функция TO_CHAR():
ВЫБРАТЬ
TO_CHAR(ДатаДокумента, 'Month') КАК МесяцПрописью
ИЗ ...
| СУБД | Функция | Пример вывода | Примечание |
|---|---|---|---|
| MS SQL Server | DATENAME(month, дата) |
"Май" | Зависит от языковых настроек сервера |
| PostgreSQL | TO_CHAR(дата, 'Month') |
"май" | Регистр зависит от параметров |
| Oracle | TO_CHAR(дата, 'MONTH') |
"МАЙ" | Возвращает заглавные буквы |
SQL-подход оптимален для крупных выборок, где обработка на стороне сервера СУБД значительно быстрее, чем на 1С.
Для ускорения отчетов с месяцами прописью создайте вычисляемое поле в запросе вместо пост-обработки в 1С. Это снизит нагрузку на клиентскую часть.
5. Готовые обработки и расширения — для типовых конфигураций
Если не хочется писать код с нуля, можно воспользоваться готовыми решениями:
- 📁 Обработка «Форматирование дат» от Инфостарт (бесплатно, поддерживает все падежи).
- 🔧 Расширение «Дополнительные функции даты» для 1С:Бухгалтерии 3.0 (включает вывод месяцев на украинском, казахском и др.).
- 📊 Отчет «Календарь с прописью» — визуальное представление дат с текстовыми месяцами.
Преимущество готовых решений — проверенная стабильность и поддержка редких случаев (например, Месяц(Дата) = 0 при некорректных данных). Недостаток — возможная избыточность функционала для простых задач.
Как установить обработку из Инфостарта?
1. Скачайте файл с расширением .epf или .cf.
2. В 1С откройте «Файл → Открыть».
3. Выберите скачанный файл и нажмите «Выполнить».
4. Следуйте инструкциям мастера установки (если требуется).
5. Перезапустите сеанс 1С для применения изменений.
Частые ошибки и как их избежать
Даже в простой задаче есть подводные камни. Рассмотрим типичные ошибки:
- Неучет языковых настроек: Функция
Формат()зависит от языка интерфейса. Если база используется на двух языках, месяц может отобразиться некорректно.⚠️ Внимание: Всегда тестируйте вывод месяцев при смене языка в
Параметры → Язык и региональные стандарты. - Ошибка «Индекс вне границ массива»: Возникает, если в массив месяцев передать
Месяц(Дата) = 0(например, при пустой дате). Решение — добавить проверку:Если Месяц(Дата) = 0 ТогдаВозврат "";
КонецЕсли;
- Проблемы с падежами: В русском языке месяц в дате должен стоять в родительном падеже («1 мая»), но
Формат()возвращает именительный («май»).
Для отладки используйте Сообщить(ТипЗнч(Дата)) — иногда проблема кроется в том, что в функцию передается не Дата, а строка или число.
FAQ: Ответы на частые вопросы
Можно ли получить месяц прописью без программирования?
Да, в некоторых типовых конфигурациях (например, 1С:ЗУП) месяц прописью уже выводится в печатных формах документов. Проверьте настройки шаблона: часто есть параметр «Формат даты» с опцией «Текстовый».
Как вывести месяц прописью на английском в русской базе?
Используйте функцию НСтр() для принудительной смены языка:
МесяцАнгл = НСтр("ru = 'январь'; en = 'January'", Месяц(ТекущаяДата()));
Или настройте языковые параметры запроса в SQL.
Почему функция Формат() возвращает пустую строку?
Причины:
- Передана не дата, а пустое значение или строка (проверьте
ТипЗнч()). - Некорректные региональные настройки Windows/1С (переустановите языковой пакет).
- Ошибка в параметре форматирования (должно быть
"М", а не"м").
Как оптимизировать код для больших выборок?
Для отчетов с тысячами строк:
- Используйте SQL-функции (например,
DATENAME) вместо обработки в 1С. - Кэшируйте массив месяцев в
Перемна уровне модуля. - Избегайте вложенных циклов при форматировании дат.
Где скачать готовые обработки для месяца прописью?
Рекомендуемые источники:
- Инфостарт (раздел «Обработки для 1С»).
- 1С:ИТС (для пользователей с действующей подпиской).
- GitHub (поиск по запросу «1C month in words»).
Перед установкой проверьте совместимость с вашей версией платформы!
Для большинства задач достаточно функции Формат() с параметром "М". Если нужны падежи или многократное использование — пишите собственную функцию с массивом месяцев. Для отчетов оптимальны SQL-запросы.