При работе с Системой компоновки данных (СКД) часто возникает необходимость вычислить дополнительные показатели непосредственно в пользовательском режиме, не прибегая к изменению конфигурации. Одной из типичных задач является расчет среднего значения или разницы дат с использованием периода формирования отчета. Рассмотрим подробнее, как правильно обращаться к датам периода и какие нюансы следует учитывать.
В большинстве типовых отчетов 1С для выбора временного интервала используется параметр с типом СтандартныйПериод. Его особенность заключается в том, что он является составным объектом и содержит в себе сразу две даты. Чтобы извлечь их в выражении пользовательского поля, мы должны использовать специальный синтаксис обращения через точку. Проанализируем стандартные конструкции:
Если в вашем отчете параметры разделены на два отдельных поля с типом Дата (например, НачалоПериода и КонецПериода), то обращение к ним происходит напрямую через амперсанд без использования точек: &НачалоПериода и &КонецПериода.
Разберем ситуацию, когда нам необходимо вычислить количество дней в периоде или возраст объекта на дату окончания отчета. Для этого в СКД предусмотрена функция РазностьДат. Посмотрим на пример выражения, которое можно вставить в поле "Выражение" при создании пользовательского поля:
РазностьДат(&Период.ДатаНачала, &Период.ДатаОкончания, "ДЕНЬ") + 1
Обратим внимание на важный момент: функция РазностьДат вычисляет разницу между моментами времени. Чтобы результат включал в себя последний день периода полностью (с учетом времени 23:59:59), мы добавляем единицу. Рассмотрим также пример из практики, когда нужно вычислить возраст физического лица в годах на момент формирования отчета:
РазностьДат([Физическое лицо.Дата рождения], &Период.ДатаОкончания, "год")
В данном случае мы используем квадратные скобки для обращения к полю набора данных Физическое лицо.Дата рождения и амперсанд с точкой для обращения к параметру окончания периода. Это позволяет получить точное количество полных лет. Для детального представления разницы во времени можно использовать готовые формулы СКД для вывода времени в формате дней, часов и минут.
Выясним причину, по которой система может выдавать ошибку "Поле не найдено", даже если вы написали имя параметра правильно. В настройках схемы компоновки данных (в конфигураторе) у каждого параметра есть свойство "Ограничение использования". Если этот флаг установлен, параметр становится "невидимым" для конструктора пользовательских полей в режиме "1С:Предприятие".
Проанализируем варианты решения этой проблемы:
Иногда задача требует расчета относительно текущего момента времени, а не периода отчета. В выражениях пользовательских полей мы можем использовать встроенные функции платформы. Рассмотрим наиболее полезные из них:
ТекущаяДатаСеанса() — возвращает текущую дату и время с учетом часового пояса пользователя. Это наиболее корректный способ получения "сегодняшнего" дня в клиент-серверном варианте работы.НачалоПериода() и КонецПериода() — позволяют привести выбранную дату к началу дня, месяца или года.Пример использования приведения даты в пользовательском поле:
НачалоПериода(&Период.ДатаНачала, "МЕСЯЦ")
Это выражение вернет дату, соответствующую первому числу месяца, в который входит начало периода отчета.
При составлении формул в пользовательских полях важно соблюдать строгие правила оформления, чтобы избежать синтаксических ошибок:
[]: Обязательно используйте их для полей, которые содержат пробелы в названии или являются вложенными (например, [Контрагент.Наименование]).&: Всегда предшествует имени параметра. Без него система будет искать поле в наборе данных, а не в параметрах.РазностьДат или РАЗНОСТЬДАТ.Важное ограничение: Помните, что в пользовательских полях доступен ограниченный набор функций по сравнению с вычисляемыми полями, создаваемыми в конфигураторе. Вы не сможете использовать функции общих модулей, но вам доступны все базовые арифметические операции и стандартные функции СКД, такие как Год(), День(), Месяц(), ДобавитьКДате(). Для расширения стандартных возможностей настройки выражений можно применить метод использования функций глобального контекста в СКД.
Таким образом, комбинируя обращение к параметрам периода через точку и используя функции работы с датами, вы можете создавать гибкие отчеты, которые будут автоматически пересчитывать средние показатели, сроки задолженности или возрастные категории сотрудников при каждом изменении периода формирования отчета.