Отчеты и Аналитика · 10 мин
Как в СКД 1С выразить дату как строку
Как в СКД 1С выразить дату как строку: функция Формат и Представление, вычисляемые поля, настройка формата даты в отчёте, типичные ошибки и примеры кода.
Задача выразить дату как строку в СКД возникает регулярно: нужно вывести дату в нестандартном формате, склеить её с другим текстом, сгруппировать данные по месяцу или кварталу в виде строки либо подготовить значение для выгрузки. В системе компоновки данных для этого есть несколько рабочих инструментов — функция Формат() в выражениях вычисляемых полей, функция Представление(), а также настройка формата поля на закладке «Наборы данных» или в пользовательских настройках отчёта.
Выбор способа зависит от того, где именно нужна строка. Если строковое представление участвует в группировке, отборе или соединении — преобразование делается в вычисляемом поле или в запросе набора данных. Если тип «Дата» нужно сохранить, а изменить только внешний вид в отчёте — правильнее использовать оформление поля, не трогая тип значения. Смешение этих подходов — частая причина ошибок: разработчик преобразует дату в строку, а потом удивляется, почему перестала работать сортировка по дате.
Ниже разобраны оба сценария с конкретными выражениями, ограничениями каждого метода и способами проверки результата.
Когда нужно преобразование даты в строку, а когда — только формат
Первое решение, которое нужно принять, — менять тип значения или только его отображение. Преобразование в строку оправдано, когда значение дальше используется как текст: конкатенация с другими полями («Период: 01.03.2026»), формирование ключа группировки вида «2026-03», выгрузка во внешние системы, где требуется конкретный строковый шаблон.
Если же дата нужна только для показа пользователю, преобразование в строку вредно: теряется сортировка по хронологии (строки «01.02.2026» и «02.01.2026» сортируются лексикографически), ломаются отборы по периоду и итоги по датам. В этом случае правильный инструмент — свойство «Формат» в настройках поля набора данных, где тип остаётся «Дата», а вид задаётся форматной строкой.
Как выбрать действие
Функция Формат() в вычисляемом поле СКД
Основной способ выразить дату строкой — вычисляемое поле с функцией Формат(). Откройте схему компоновки данных, перейдите на закладку «Вычисляемые поля», добавьте поле, например ДатаСтрокой, и в колонке «Выражение» укажите:
Формат(Дата, "ДФ=dd.MM.yyyy")
Форматная строка в параметре ДФ управляет шаблоном: dd — день, MM — месяц, yyyy — год четырьмя цифрами, HH:mm:ss — время. Например, Формат(Дата, "ДФ='yyyy-MM'") даст строку вида «2026-03», удобную для группировки по месяцам в хронологическом порядке. Обратите внимание: внутри форматной строки литералы берутся в одинарные кавычки.
После добавления вычисляемого поля его нужно включить в выбранные поля настроек отчёта (закладка «Настройки» → «Выбранные поля») — иначе в результате оно не появится. Тип значения в этом поле будет «Строка», что видно в колонке «Тип значения» списка вычисляемых полей.
Формат поля без изменения типа
Когда тип «Дата» нужно сохранить, формат задаётся в свойствах поля. На закладке «Наборы данных» в списке полей выделите нужное поле даты, найдите свойство «Формат» (в колонке «Оформление» или через палитру свойств поля) и укажите форматную строку, например ДФ=dd.MM.yyyy или ДЛФ=D для длинного представления даты.
Тот же результат достигается через настройки отчёта: «Настройки» → «Условное оформление» или оформление конкретного поля, где в параметре «Формат» задаётся та же строка. Пользователь отчёта может менять этот формат в режиме предприятия через «Изменить вариант», не трогая схему компоновки.
Преимущество подхода очевидно: сортировка, отборы по интервалу, группировки по периодам (неделя, месяц через поля-периоды СКД) продолжают работать корректно, потому что значение остаётся датой. Меняется только визуальное представление в момент вывода.
Функция Представление() и её ограничения
В языке выражений СКД доступна функция Представление(Значение), которая возвращает строковое представление значения, включая даты. Выражение Представление(Дата) даст строку в формате, зависящем от региональных настроек сеанса, — например, «01.03.2026 0:00:00».
Это одновременно и удобство, и ловушка. Формат результата не контролируется разработчиком: на другом сервере или у другого пользователя с иными региональными настройками строка может выглядеть иначе. Поэтому Представление() годится для отладочных целей и простых текстовых подписей, но не для форматов, которые должны быть стабильными — выгрузок, ключей группировки, интеграций. Для стабильного шаблона используйте Формат() с явным параметром ДФ.
Преобразование даты в строку в запросе набора данных
Иногда строку нужно получить ещё в запросе — например, когда СКД соединяет наборы по строковому полю или когда дальнейшая логика построена на тексте. В языке запросов 1С функции Формат() нет, поэтому дату собирают из частей: ГОД(Дата), МЕСЯЦ(Дата), ДЕНЬ(Дата), дополняя нулями через ПОДСТРОКА и конкатенацию. Конструкция получается громоздкой, например для строки «2026-03-05»:
ВЫБОР КОГДА МЕСЯЦ(Т.Дата) < 10
ТОГДА ВЫРАЗИТЬ(ГОД(Т.Дата) КАК СТРОКА(4)) + "-0" + ВЫРАЗИТЬ(МЕСЯЦ(Т.Дата) КАК СТРОКА(1))
ИНАЧЕ ВЫРАЗИТЬ(ГОД(Т.Дата) КАК СТРОКА(4)) + "-" + ВЫРАЗИТЬ(МЕСЯЦ(Т.Дата) КАК СТРОКА(2))
КОНЕЦ
Такой подход оправдан только при реальной необходимости: он увеличивает текст запроса, затрудняет поддержку и не использует индексы поля даты в условиях. В большинстве случаев выгоднее выбрать дату как есть и преобразовать её в вычисляемом поле СКД — компоновка выполнит форматирование после получения данных.
Сравнение вариантов
Гибкий шаблон, простая настройка. Минус: тип становится строкой, ломается сортировка по дате
Тип «Дата» сохраняется, работают отборы и группировки. Подходит только для отображения
Быстро и без параметров, но формат зависит от региональных настроек сеанса
Строка доступна до компоновки, но запрос усложняется и теряет читаемость
Типичные ошибки и проверка результата
Самая распространённая ошибка — преобразование даты в строку ради внешнего вида, после чего перестают работать сортировка и отбор по периоду. Признак: отчёт выводит месяцы в порядке «01.02.2026», «02.01.2026» вместо хронологии. Решение — вернуть тип «Дата» и задать формат в оформлении, либо добавить отдельное скрытое поле даты и сортировать по нему.
Вторая ошибка — использование Формат() с неправильным регистром или пропущенным параметром ДФ: выражение Формат(Дата) вернёт представление по умолчанию с временем «0:00:00», что часто нежелательно. Третья — попытка сравнить в отборе поле типа «Дата» со строкой: компоновщик либо выдаст ошибку, либо молча приведёт типы с неожиданным результатом.
Проверить результат просто: сформируйте отчёт и убедитесь, что колонка содержит ожидаемый формат, сортировка по периоду работает, а отбор «с даты по дату» возвращает корректные строки. Для вычисляемых полей дополнительно проверьте тип в списке вычисляемых полей — там должно быть «Строка», если вы осознанно делали преобразование.
Как проверить результат
Строка соответствует заданному шаблону без лишнего времени
Появляется 0:00:00 или формат отличается от заданного
Строки идут в хронологическом порядке
Порядок лексикографический — значит, дата преобразована в строку раньше времени
Отбор по дате отрабатывает и возвращает строки
Ошибка сравнения типов или пустой результат
FAQ
Почему Формат(Дата) выводит «01.03.2026 0:00:00» вместо только даты?
Потому что вызвана функция без параметра форматной строки — используется представление по умолчанию, включающее время. Укажите шаблон явно: Формат(Дата, "ДФ=dd.MM.yyyy"), и время исчезнет из результата.
Как сгруппировать данные по месяцам, чтобы они шли в правильном порядке?
Используйте вычисляемое поле с шаблоном, где год идёт первым: Формат(Дата, "ДФ='yyyy-MM'"). Строки вида «2026-01», «2026-02» сортируются лексикографически в хронологическом порядке. Альтернатива — группировать по стандартному полю-периоду СКД «Месяц», сохраняя тип даты.
Можно ли в отборе сравнить дату со строкой «01.03.2026»?
Напрямую — нет, типы несовместимы, и сравнение даст ошибку или пустой результат. В отборе используйте значение типа «Дата». Если сравнивать нужно именно строки, преобразуйте обе стороны: либо дату в строку через Формат() в вычисляемом поле, либо строку в дату на этапе запроса.
Чем Представление() отличается от Формат() в СКД?
Представление() возвращает строку в формате, зависящем от региональных настроек сеанса, и не принимает шаблон. Формат() позволяет задать точный шаблон через параметр ДФ и даёт стабильный результат независимо от настроек пользователя и сервера.
Как вывести дату словами, например «5 марта 2026 г.»?
Используйте форматную строку с длинным форматом даты: Формат(Дата, "ДЛФ=D"). Тот же параметр ДЛФ=D можно указать в свойстве «Формат» поля набора данных, если тип менять не нужно.
Вычисляемое поле с Формат() не появляется в отчёте. Что проверить?
Убедитесь, что поле добавлено в выбранные поля на закладке «Настройки» — вычисляемые поля не выводятся автоматически. Также проверьте, что в выражении используется реальное поле набора данных и нет опечатки в его имени.
Что важно запомнить
Для строкового представления даты в СКД используйте Формат(Дата, "ДФ=шаблон") в вычисляемом поле. Если тип «Дата» нужно сохранить — задавайте формат в свойствах поля, а не преобразуйте значение. Представление() зависит от региональных настроек и не подходит для стабильных форматов.