Стоит задача автоматической рассылки отчетов о потреблении на основе суточных значений. Отчет представляет собой ведомость параметров. Если в отчетном периоде есть сутки с неполной наработкой, то для этих суток (и только для них) формируется дополнительная ведомость параметров, основанная на часовых данных. Например, если в отчете за период с 1 по 31 марта данные за 10 и 12 марта содержат неполную нааботку в часах, то к отчету потребления на основе суточных данных необходимо добавить еще один отчет с часовыми данными за 10 и 12 марта. Таким образом, в дополнительном отчете будет таблица с 48 строками данных.
Дополнительный отчет может быть представлен в виде дополнительных страниц в основном отчете (начиная со второй страницы) или в виде отдельного файла – это не принципиально.
Я не смог найти решение этой задачи средствами ЛЭРС Учет. Есть ли способы ее реализации?
Формировать отчет можно только по одному типу данных. Одновременно по часовым и по суточным сформировать отчет невозможно.
Вы можете создать отчет, состоящий из 2-х подотчетов. В первом подотчете реализовать формирование суточных данных по часовым, а во втором выводить часовые данные только по суткам с неполной наработкой. Их фильтрацию вы можете реализовать в скрипте в обработчике события BaseReport_DataSourceDemanded.
Насколько я понимаю, эта схема значительно увеличит время формирования отчета. Минимум, в 10 раз.
А это требование из той системы, под которую делается это: [15859] Массовая рассылка отчетов о потреблении. То есть, и так, скорее всего, придется распределять по времени формирование отчетов, а тут из-за небольшого количества дополнительных отчетов мы все отчеты будем формировать значительно медленнее.
Я полагаю, будет более разумно, с точки зрения эксплуатации системы, обсудить с вами появление автоматической рассылки отчетов, которая происходит при выполнении условия. В данном случае, если за отчетный период наработка в часах меньше отчетного периода.
Во первых при формировании такого отчета подотчетов всего 2. Во вторых ваше предложение запускать формирование отчетов при выполнении условия (рассматриваемого или любого другого) на мой взгляд никак не относится к формированию самого отчета. Для его формирования вам все равно придется разработать отчетную форму, по которой он бы формировался, а какого либо другого варианта, кроме озвученного мною выше, в принципе не существует.
Не понял ответа. Я предположил, что отчёт с двумя подотчётами, в котором суточные данные будут формироваться из часовых, будет формироваться, по моим прикидкам, как минимум на порядок дольше, чем отчёт, где только суточные данные за тот же период.
Это так?
Я предполагаю, что можно реализовать следующую схему:
• Рассылать обычный отчёт о потреблении на основе посуточных данных всем адресатам.
• Сделать условную рассылку отчёта с почасовыми данными, как вы и советовали: “… где выводить часовые данные только по суткам с неполной наработкой”.
Эта схема, в общем случае, на мой взгляд, должна значительно меньше нагружать сервер, и рассылка будет проходить быстро.
Если из контекста не ясно, то в конкретной системе предполагается, что нужно сделать рассылку отчётов нескольким сотням адресатов в один день.
Теперь ваша идея стала более понятной. Вы можете оформить отдельное предложение по улучшению добавить желаемый способ запуска автоматического формирования отчетов.
Почти получилось сделать отчет по Вашему совету. Осталось выполнить “фильтрацию вы можете реализовать в скрипте в обработчике события BaseReport_DataSourceDemanded.” Насколько я понимаю, что-то подобное описано в примере https://docs.lers.ru/manual/reporting/how-to/calcfield-with-data-from-different-timestamps/index.html
// Количество записей в источнике данных для секции Detail
int n = (int)DataSourceUtils.GetRecordsCount(tableCell_DataDate);
// Формируем коллекции возвращаемых значений для вычисляемых полей
for(int i = 0; i < n; i++)
{…}
Вопрос 1. Можно ли сразу без вывода через вычисляемые поля проверить ячейку с наработкой и удалить запись из секции Detail?
Вопрос 2. Как обратиться к секции Detail 1 вложенного отчета? В приведенном куске кода привязка идет по названию ячейки, видимо нужно просто его поменять на названии ячейки из секции Detail 2?