Как использовать даты начала и конца периода в пользовательских полях СКД

Программист 1С v8.3 (Управляемые формы)
← На главную

При работе с Системой компоновки данных (СКД) часто возникает необходимость вычислить дополнительные показатели непосредственно в пользовательском режиме, не прибегая к изменению конфигурации. Одной из типичных задач является расчет среднего значения или разницы дат с использованием периода формирования отчета. Рассмотрим подробнее, как правильно обращаться к датам периода и какие нюансы следует учитывать.

Обращение к параметрам типа СтандартныйПериод

В большинстве типовых отчетов 1С для выбора временного интервала используется параметр с типом СтандартныйПериод. Его особенность заключается в том, что он является составным объектом и содержит в себе сразу две даты. Чтобы извлечь их в выражении пользовательского поля, мы должны использовать специальный синтаксис обращения через точку. Проанализируем стандартные конструкции:

Если в вашем отчете параметры разделены на два отдельных поля с типом Дата (например, НачалоПериода и КонецПериода), то обращение к ним происходит напрямую через амперсанд без использования точек: &НачалоПериода и &КонецПериода.

Расчет разности дат в пользовательском поле

Разберем ситуацию, когда нам необходимо вычислить количество дней в периоде или возраст объекта на дату окончания отчета. Для этого в СКД предусмотрена функция РазностьДат. Посмотрим на пример выражения, которое можно вставить в поле "Выражение" при создании пользовательского поля:

РазностьДат(&Период.ДатаНачала, &Период.ДатаОкончания, "ДЕНЬ") + 1

Обратим внимание на важный момент: функция РазностьДат вычисляет разницу между моментами времени. Чтобы результат включал в себя последний день периода полностью (с учетом времени 23:59:59), мы добавляем единицу. Рассмотрим также пример из практики, когда нужно вычислить возраст физического лица в годах на момент формирования отчета:

РазностьДат([Физическое лицо.Дата рождения], &Период.ДатаОкончания, "год")

В данном случае мы используем квадратные скобки для обращения к полю набора данных Физическое лицо.Дата рождения и амперсанд с точкой для обращения к параметру окончания периода. Это позволяет получить точное количество полных лет. Для детального представления разницы во времени можно использовать готовые формулы СКД для вывода времени в формате дней, часов и минут.

Почему параметры могут быть не видны и как это исправить

Выясним причину, по которой система может выдавать ошибку "Поле не найдено", даже если вы написали имя параметра правильно. В настройках схемы компоновки данных (в конфигураторе) у каждого параметра есть свойство "Ограничение использования". Если этот флаг установлен, параметр становится "невидимым" для конструктора пользовательских полей в режиме "1С:Предприятие".

Проанализируем варианты решения этой проблемы:

  1. Снятие ограничения в конфигураторе: Если у вас есть доступ к разработке отчета, необходимо зайти на закладку "Параметры" и снять галочку "Ограничение использования" для нужных дат. После этого они появятся в списке доступных полей при создании пользовательского выражения.
  2. Использование доступных полей: Если отчет менять нельзя, попробуйте найти в списке доступных полей другие даты, которые могут быть связаны с периодом (например, "Период" в наборе данных), однако это не всегда заменяет системные параметры.

Использование системных функций даты

Иногда задача требует расчета относительно текущего момента времени, а не периода отчета. В выражениях пользовательских полей мы можем использовать встроенные функции платформы. Рассмотрим наиболее полезные из них:

Пример использования приведения даты в пользовательском поле:

НачалоПериода(&Период.ДатаНачала, "МЕСЯЦ")

Это выражение вернет дату, соответствующую первому числу месяца, в который входит начало периода отчета.

Синтаксические правила и ограничения

При составлении формул в пользовательских полях важно соблюдать строгие правила оформления, чтобы избежать синтаксических ошибок:

Важное ограничение: Помните, что в пользовательских полях доступен ограниченный набор функций по сравнению с вычисляемыми полями, создаваемыми в конфигураторе. Вы не сможете использовать функции общих модулей, но вам доступны все базовые арифметические операции и стандартные функции СКД, такие как Год(), День(), Месяц(), ДобавитьКДате(). Для расширения стандартных возможностей настройки выражений можно применить метод использования функций глобального контекста в СКД.

Таким образом, комбинируя обращение к параметрам периода через точку и используя функции работы с датами, вы можете создавать гибкие отчеты, которые будут автоматически пересчитывать средние показатели, сроки задолженности или возрастные категории сотрудников при каждом изменении периода формирования отчета.

← На главную