Работа с временными метками в системе 1С:Предприятие часто требует специфического подхода, особенно когда речь идет о формировании печатных форм или отчетов. Пользователи нередко сталкиваются с необходимостью отображения даты в сокращенном виде, исключая день и время. Стандартный вывод типа ДатаВремя часто избыточен для заголовков счетов или периодов в аналитических таблицах.
Понимание того, как вывести только месяц и год, позволяет значительно улучшить читаемость документов. Это особенно актуально для счетов-фактур, актов выполненных работ и календарных планов. Неправильное форматирование может привести к ошибкам восприятия или нарушению корпоративных стандартов оформления документации.
В данной статье мы рассмотрим программные методы и встроенные функции платформы, которые решают эту задачу. Мы не будем использовать сложные сторонние обработки, а сосредоточимся на нативных возможностях языка запросов и встроенного языка 1С. Это обеспечит высокую производительность и совместимость с любыми конфигурациями.
Базовые функции форматирования даты
Основным инструментом для преобразования даты в строку является функция Формат. Она позволяет гибко настраивать вывод значений, используя специальные строки форматов. Для выделения только месяца и года необходимо указать соответствующие параметры в строке формата.
Примером может служить следующий код, который преобразует текущую дату в нужный вид:
ТекущаяДата = ТекущаяДата();
СтрокаДаты = Формат(ТекущаяДата, "ДФ='ММММ гггг'");
Сообщить(СтрокаДаты);
Здесь используется квалификатор ДФ (ДатаФормат), который соответствует стандартам .NET. Символы М отвечают за месяц, а г — за год. Количество символов определяет полноту вывода: одна буква даст цифру, четыре — полное название.
Важно отметить, что функция Формат возвращает строковое значение. Это означает, что дальнейшие арифметические операции с результатом будут невозможны без обратного преобразования. Используйте этот метод только на этапе отображения данных пользователю или в печатных макетах.
Используйте формат "ММММ" для полного названия месяца (например, Январь) и "ММ" для числового представления (01). Выбор зависит от стиля ваших документов.
Использование языка запросов
При формировании сложных отчетов часто требуется выполнить форматирование непосредственно на уровне базы данных. В языке запросов 1С также доступна функция ФОРМАТ, синтаксис которой аналогичен встроенному языку. Это позволяет снизить нагрузку на клиентское приложение.
Рассмотрим пример запроса, где мы выбираем документы и сразу форматируем дату документа:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Ссылка,
ФОРМАТ(РеализацияТоваровУслуг.Дата, "ДФ='ММММ гггг'") КАК ПериодОтчета
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
Такой подход удобен при создании отчетов в системе компоновки данных (СКД). Вы можете передать уже отформатированное поле в макет, избежав лишних вычислений в модуле объекта или общем модуле.
Однако стоит помнить о типах данных. Поле ПериодОтчета в результате запроса будет иметь тип Строка. Если вам потребуется группировка по месяцам для последующих расчетов, лучше использовать функцию НАЧАЛОПЕРИОДА, а форматирование применить уже на этапе вывода.
Работа с периодом в отчетах СКД
Система компоновки данных предоставляет мощные инструменты для работы с временными интервалами. Часто пользователям нужно отобразить период отчета в шапке документа, используя только месяц и год. Это реализуется через параметры и дополнительные поля.
Для этого в настройках отчета создайте параметр типа Дата. Затем в макете используйте выражение для форматирования этого параметра. В свойствах поля макета укажите строку формата, аналогичную рассмотренной выше.
- 🗓️ Откройте редактор макета компоновки данных.
- 🛠️ Найдите поле, отвечающее за вывод даты отчета.
- ⚙️ В свойстве "Формат" введите значение
ДФ='ММММ гггг'. - 💾 Сохраните изменения и обновите отчет.
Если требуется динамическое изменение формата в зависимости от настроек пользователя, можно использовать условное оформление. Это позволит переключаться между числовым и текстовым представлением месяца без изменения кода.
⚠️ Внимание: При использовании СКД убедитесь, что тип данных параметра отчета строго соответствует типу
Дата. Передача строки вместо даты приведет к ошибке выполнения или некорректному отображению.
Извлечение числовых значений месяца и года
Иногда задача стоит не в форматировании строки, а в получении отдельных числовых компонентов даты для логических проверок. Например, нужно определить, относится ли документ к текущему году, игнорируя день.
Для этого в языке 1С предусмотрены специальные функции Месяц и Год. Они возвращают целочисленные значения, которые можно использовать в условиях и вычислениях.
Если Год(ТекущаяДата()) = 2026 Тогда
Сообщить("Документ относится к текущему году");
КонецЕсли;
Комбинируя эти функции, можно создавать уникальные ключи для группировки. Например, код Год(Дата) * 100 + Месяц(Дата) создаст уникальное число для каждого месяца (202601, 202602 и т.д.).
Такой метод часто применяется при построении регистров накопления, где измерением выступает период. Хранение периода в виде числа или специальной даты (начало месяца) оптимизирует работу индексов базы данных.
Для программной логики и группировок используйте числовые функцииMonth()иYear(), а функциюFormat() применяйте только для вывода текста пользователю.
Сравнение методов получения периода
Выбор метода зависит от конкретной задачи: нужно ли вам отобразить текст, выполнить расчет или сгруппировать данные. Ниже приведена таблица, сравнивающая основные подходы к решению задачи вывода месяца и года.
| Метод | Тип результата | Производительность | Назначение |
|---|---|---|---|
Функция Формат |
Строка | Средняя | Печатные формы, вывод на экран |
Функции Месяц, Год |
Число | Высокая | Логические условия, расчеты |
НачалоПериода |
Дата | Высокая | Группировка в запросах, регистры |
| Строковые манипуляции | Строка | Низкая | Специфические форматы выгрузки |
Использование функции НачалоПериода(Дата, "МЕСЯЦ") является наиболее эффективным способом для группировки данных в запросах. Она обрезает день и время, приводя дату к первому числу месяца, что идеально подходит для агрегации.
Строковые манипуляции, такие как выделение подстроки из стандартного представления даты, считаются наименее надежным методом. Они зависят от региональных настроек операционной системы и могут сломаться при смене языка интерфейса.
Обработка ошибок и региональные настройки
Одной из скрытых проблем при форматировании дат являются региональные настройки клиента 1С и операционной системы. Названия месяцев могут отличаться в зависимости от выбранного языка (русский, английский, казахский и т.д.).
Если ваша конфигурация предназначена для международной работы или используется в разных регионах, жесткая привязка к названию месяца на русском языке может привести к ошибкам. В таких случаях рекомендуется использовать числовой формат ММ.ГГГГ.
Как изменить язык вывода месяца?
Язык вывода зависит от свойства "Язык" объекта метаданных или настройки пользователя в интерфейсе 1С. Программно изменить язык форматирования в функцииФорматсложно, лучше использовать универсальные числовые коды.
Также стоит учитывать високосные годы и переходы между периодами. Хотя функции работы с датой в 1С автоматически обрабатывают эти нюансы, при ручном конструировании дат (например, через Дата(Год, Месяц, День)) возможна ошибка, если день не существует в данном месяце.
⚠️ Внимание: Интерфейс и поведение функций могут незначительно отличаться в разных версиях платформы 1С:Предприятие (8.2, 8.3). Всегда тестируйте код на той версии, которая установлена у клиента.
Практические примеры в печатных формах
Рассмотрим реальную задачу: необходимо вывести в шапке счета-фактуры фразу "Счет-фактура № ХХ от [Месяц Год]". Для этого в макете печатной формы используется поле с простым выражением.
В месте вывода даты в макете (например, в текстовом документе или таблице) пропишите:
ТекстШапки = "Счет-фактура № " + Документ.Номер + " от " + Формат(Документ.Дата, "ДФ='ММММ гггг'");
Если вы используете табличный документ, форматирование можно задать прямо в свойствах ячейки, не создавая лишних переменных. Это упрощает поддержку кода и делает макет более наглядным.
Для сложных случаев, когда нужно вывести период (например, "Январь 2026 - Февраль 2026"), комбинируйте две даты. Используйте функцию КонецПериода для второй даты, чтобы корректно определить завершающий месяц.
☑️ Проверка перед выгрузкой отчета
⚠️ Внимание: При выгрузке данных в внешние системы (Excel, XML) убедитесь, что формат даты соответствует требованиям принимающей стороны. Строка "Январь 2026" может не распознаться как дата в Excel без дополнительного преобразования.
Часто задаваемые вопросы
Как вывести месяц прописью с маленькой буквы?
Стандартная функция Формат выводит названия месяцев с заглавной буквы. Чтобы сделать первую букву строчной, можно использовать функцию СтрЗаменить для замены первого символа или преобразовать всю строку в нижний регистр функцией СтрНиж, а затем capitalize первое слово вручную.
Почему функция Формат возвращает пустую строку?
Это может произойти, если в переменой содержится значение Null (Неопределено). Перед форматированием всегда проверяйте дату на заполненность с помощью оператора Если Дата <> Неопределено Тогда.
Можно ли сохранить форматированную дату в регистр?
Нет, в измерениях и ресурсах регистров следует хранить данные в их исходном типе (Дата, Число). Форматирование в строку нужно выполнять только на уровне отчетов или печатных форм перед выводом пользователю.
Как получить номер недели в году вместе с месяцем?
Для этого используйте квалификатор ДФ='ww' внутри функции форматирования. Пример: Формат(Дата, "ДФ='ММММ гггг (ww неделя)' выведет строку вида "Январь 2026 (03 неделя)".