При разработке отчетов в системе компоновки данных (СКД) часто возникает задача вывести текущую дату, например, для отображения даты формирования отчета в шапке или итогах. На первый взгляд, это простая задача, однако многие разработчики сталкиваются с тем, что стандартное выражение ТекущаяДата() в вычисляемом поле не дает ожидаемого результата — поле остается пустым. Давайте разберем, почему это происходит и как правильно решить данную задачу.
Основная причина, по которой ТекущаяДата() может «не отрабатывать» в вычисляемых полях, кроется в архитектуре вашего набора данных. Если в схеме компоновки данных используется более одного набора данных (например, два разных запроса, запрос и объект или объединение запросов), механизм вычисляемых полей начинает работать иначе.
Дело в том, что вычисляемые поля по своей логике должны обрабатываться после того, как система объединит и сопоставит данные из всех наборов. В сложных структурах данных СКД не всегда может корректно интерпретировать вычисление на уровне детальных записей. В таких случаях поле может быть объявлено, но его значение не будет вычислено.
Если вы столкнулись с тем, что вычисляемое поле не заполняется, самым эффективным и проверенным методом является использование Ресурсов. Система ресурсов в СКД обладает более высоким приоритетом и стабильностью при работе со сложными наборами данных.
Теперь для каждой записи или группировки СКД принудительно вычислит заданное выражение. Для красивого отображения даты рекомендуем использовать встроенную функцию форматирования:
Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy")
Этот подход гарантирует, что дата будет вычислена корректно независимо от того, сколько наборов данных участвует в формировании отчета.
Если вам нужно не просто вывести дату, а использовать её в условиях отбора или сложной логике запроса, гораздо надежнее использовать Параметры СКД. Этот подход является «золотым стандартом» разработки в 1С.
ДатаОтчета.ТекущаяДата().После этого вы можете использовать параметр &ДатаОтчета в любом месте запроса, в условиях или даже в вычисляемых полях, просто обратившись к нему по имени. Преимущество этого метода в том, что значение вычисляется один раз при старте формирования отчета, что положительно сказывается на производительности.
Для того чтобы ваш отчет выглядел профессионально и не вызывал ошибок, придерживайтесь следующих правил:
Формат(), если хотите избежать отображения времени или системных разделителей, которые могут быть неудобны пользователю.Таким образом, если вы видите, что вычисляемое поле упорно возвращает «пустоту», первым делом проверьте количество наборов данных в схеме. Если их больше одного — смело переносите логику в ресурсы или используйте параметры. Это сэкономит ваше время и обеспечит стабильную работу отчета в любых условиях.