|
|
|
| Получилось так, что надо сделать отчет по статистике. Отчет работает, но для этого пришлось в базу внести 2 дополнительных запроса. Как-то не очень.
В отчете за определенный период высчитываются определенные параметры.
Затем в примечании они суммируются. - СпСумм
В том же примечании вставил список, на который работает запрос (количество учтенных дней за период)- кол дней
Теперь вопрос. Как вычислить среднее значение?
Вот тут началось самое интересное. Вставил поле, на которое есть выражение: поле=me.СпСумм/me.КолДней
При открытии поле остается пустым.
Вставил в код VBA на открытие отчета. Результат ничего.
Пока вижу один только выход. Вставлять список с источником запрос, в котором все вычислять. Однако ради одного значения ставить в базу кучу запросов, работающих на один отчет как-то не очень. Кто подскажет как быть. Написать в VBA или выражением. Может синтаксис подводит где? | |
|
| |
|
|
|
| А чё же ты ничего не выложил?
----------------------------------------------
| |
|
| |
|
|
|
| Хороший вопрос. Проблема в том, что там завязано масса таблиц и форм. Сюда однозначно не влезет. В принципе все работает. Только раздражают в базе 3 лишних запроса, выполняющие функции лишь статистики да и, то для 2 полей в отчете. Их и в форму не встроить и в отчет не запихать. Один от другого зависят.
Вот коли можно бы было делать вычисления в VBA при открытии отчета скажем и подставлять значения в нужные поля. Не получается.
Попробую обнулить базу, выдернуть кусок и выставить на всеобщее посмешище. | |
|
| |
|
|
|
| Average не поможет?
прямая формула может дать неожиданные результаты если где-то содержится NULL в значениях | |
|
| |
|
|
|
| Это Avg для вычисления среднего значения? Не в этом дело. Пытаюсь заставить вычислять поля в отчете. В форме можно. А в отчете? Ну в VBA на крайняк и подставлять вычисленное значение в нужное поле. Пока все считают запросы в базе. Но от них избавиться хочу. Вот в чем проблема.
Есть количество дней, есть количество единиц по исследованиям. Есть общая сумма единиц за период. Отдельный запрос вычисляет среднее. Если ввести формулу в источник строк при открытии отчета, не дает результата. Что не так.
Пытаюсь выдернуть кусок базы для примера. | |
|
| |
|
32 Кб. |
|
| Вот выдернул кусок. Календарь не работает, да это там и не надо в данный момент.
Суть. Есть 3 таблы. Есть форма для задания периода. Открывает отчет. В нем все выводится верно.
Внизу 3 поля. Количество дней в период, средняя велничина ед и сумма всех ед. Все считает. Но для этого работают 3 запроса. Всего на 3 списка вышеуказанных величин. Можно ли как-то сделать, что бы убрать из базы эти запросы и вычислять все в VBA? | |
|
| |
|
|
|
|
поле=me.СпСумм/me.КолДней
|
вот тут нужно не СпСумм, а то самое значение которое в нем стоит
СпСумм=Sum(Выражение1)
те.
поле=Sum([Выражение1])/DateDiff('d';Forms![Даты поиска]!ДатаС;Forms![Даты поиска]!ДатаПо)
даст среднее кол-во , но дни здесь календарные просто нужно написать функцию вычисления рабочих дней и получим
поле=Sum([Выражение1])/F_Day_Work(Forms![Даты поиска]!ДатаС;Forms![Даты поиска]!ДатаПо)
примерно так
F_Day_Work (Paramarray ())
Data_N =ДатаС
j=0
Day_end=ДатаС
For i = 1 To DateDiff(ДатаС, ДатаПо)
If Weekday(Data_N + j) > 1 And Weekday(Data_N + j) < 7 Then
Day_end = Day_end + 1
j = j + 1
Else
Day_end = Day_end + 1
j = j + 1
i = i - 1
End If
Next
F_Day_Work= Day_end
|
| |
|
| |
|
|
|
|
Вставил поле, на которое есть выражение: поле=me.СпСумм/me.КолДней
При открытии поле остается пустым.
Вставил в код VBA на открытие отчета. Результат ничего.
|
На событии Open можно присвоить значение св-ву DefaultValue поля или св-ву Caption элемента Label.
Присвоить значение свободному полю можно только на событии Format раздела, где оно находится.
Где находятся поля me.СпСумм и me.КолДней? Откуда берутся значения в них?
Где находится "поле"? | |
|
| |
|
|
|
| Анатолий, совершенно согласен с вопросами. Тут я сам маху дал. В примечании отчета есть список20, список30, список36. Список - потому что в источник строк можно запрос влепить. Весь список из 1 строки и состоит в результате. Способы таких вычислений мне не нравятся. Работают запросы, потом запросы запросов. Вот и хочу найти альтернативу таким вычислениям.
Кот, исследую предложение. DateDiff дает количество дней между двумя датами. Это не то, так как туда войдут все нерабочие, пропущенные и прочие дни. Тут именно группировка, затем подсчет срок сгруппированных дат и дают количество реально отработанных дней. Остальное рассмотрю подробнее. | |
|
| |
|
|
|
|
В примечании отчета есть список20, список30, список36. Список - потому что в источник строк можно запрос влепить. Весь список из 1 строки и состоит в результате. Способы таких вычислений мне не нравятся.
| Но зачем? На основании любого сохраненного запроса или SQL выражения можно открыть Recordset и получить данніе из него. | |
|
| |
|
|
|
| Вот уже ближе к телу. В настоящее время в данном примере можно исключить запросы количество дней и количество единиц. Они нужны только для вычисления среднего значения. В примечании отчета Список36 На счет рекордсета что-то не думал даже. Как в отчете на основе выражения открыть рекордсет? Признаться не представляю. Пока только удается вычислить выражением сумму полученных единиц в отчете и отобразить их в поле. Пожалуйста если не трудно покажите как в данном случае вычислить необходимые результаты, не используя запросы в базе. | |
|
| |
|
|
|
| кто мешает засунуть код в примечание группы событие форматирование отчета | |
|
| |
|
33 Кб. |
|
| Спасибо. Нашел в чем причина. Все получилось, всем спасибо. | |
|
| |