Изменить количество дней при "досчёте"

На текущий момент функция “досчёт по среднему до конца месяца” использует количество дней досчёта равное [последний день месяца] - [дата последних имеющихся показаний].
Предлагаю использовать [последний день месяца] - ?DATE_END. Так как именно это и требуется при формировании отчёта с досчётом и вычетом.
Отчётный период не зависит от даты формирования отчёта. нам всегда необходимо подавать отчёт за(например) 23.01.01 - 22.02.01 с досчётом до конца меяца, вне зависимости от даты формирования отчёта.
Также необходимо предусмотреть опцию отключения досчёта за дни находящиеся в режиме работы “Лето”.

Мы не сможем реализовать это предложение, так как:

  1. Текущий механизм был сделан для случая, когда отчёт формируется, например, 25-го числа, и в нём должны присутствовать досчитанные данные до конца месяца. Если мы изменим дни досчёта, отчёты перестанут работать как прежде.
  2. На основе текущего алгоритма уже сформированы отчётные формы другими пользователями, и такое изменение изменит их поведение. Соответственно, пользователи воспримут это как ошибку в работе программы.

Вы можете с помощью отчётной формы сделать нужную вам функцию. Напишем вам инструкцию.

Надо создать два вычисляемых поля: одно для получения даты последнего дня месяца (lastDateOfCurrentMonth), а другое - для расчета по среднему, например, (correctedM1).

Скрипт получения значения для lastDateOfCurrentMonth:

private void lastDateOfCurrentMonth_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e)
{
e.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
}

Выражение для вычисляемого поля correctedM1:

DateDiffDay(?DATE_END, [lastDateOfCurrentMonth]) * [Среднесуточные значения].[AvgDayM1 - среднесуточный массовый расход воды в подающей магистрали (тонн)]

Оба поля создайте в узле ‘Рассчитанные значения’.
В параметрах отчетной формы отметьте признак ‘Расчет по среднесуточным значениям’ и задайте минимальное количество часов для расчета средних.

Вы опять используете ‘Now’. А если я в Октябре сформирую отчёт за прошедший Февраль?
Считаю корректнее использовать DATE_END.

[Среднесуточные значения].[AvgDayM1 - среднесуточный массовый расход воды в подающей магистрали (тонн)] не годится, так как должны использоваться данные за последние ‘живые’ 7 суток(например 16-22 при GetDay(?DATE_END) = 22)

На сколько вообще корректно использовать для расчёта данные за пределами ‘?DATE_START - ?DATE_END’? Не это ли ошибка?

П.С. Отчёт(при неизменности первичных данных) всегда должен формироваться одинаковый, вне зависимости от даты формирования.

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