Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Расчеты в отчете
 
 автор: Гоблин   (22.02.2011 в 17:31)   личное сообщение
 
 

Получилось так, что надо сделать отчет по статистике. Отчет работает, но для этого пришлось в базу внести 2 дополнительных запроса. Как-то не очень.
В отчете за определенный период высчитываются определенные параметры.
Затем в примечании они суммируются. - СпСумм
В том же примечании вставил список, на который работает запрос (количество учтенных дней за период)- кол дней

Теперь вопрос. Как вычислить среднее значение?
Вот тут началось самое интересное. Вставил поле, на которое есть выражение: поле=me.СпСумм/me.КолДней
При открытии поле остается пустым.
Вставил в код VBA на открытие отчета. Результат ничего.

Пока вижу один только выход. Вставлять список с источником запрос, в котором все вычислять. Однако ради одного значения ставить в базу кучу запросов, работающих на один отчет как-то не очень. Кто подскажет как быть. Написать в VBA или выражением. Может синтаксис подводит где?

  Ответить  
 
 автор: час   (22.02.2011 в 18:37)   личное сообщение
 
 

А чё же ты ничего не выложил?
----------------------------------------------

  Ответить  
 
 автор: Гоблин   (22.02.2011 в 20:30)   личное сообщение
 
 

Хороший вопрос. Проблема в том, что там завязано масса таблиц и форм. Сюда однозначно не влезет. В принципе все работает. Только раздражают в базе 3 лишних запроса, выполняющие функции лишь статистики да и, то для 2 полей в отчете. Их и в форму не встроить и в отчет не запихать. Один от другого зависят.
Вот коли можно бы было делать вычисления в VBA при открытии отчета скажем и подставлять значения в нужные поля. Не получается.
Попробую обнулить базу, выдернуть кусок и выставить на всеобщее посмешище.

  Ответить  
 
 автор: Explorer   (22.02.2011 в 20:37)   личное сообщение
 
 

Average не поможет?

прямая формула может дать неожиданные результаты если где-то содержится NULL в значениях

  Ответить  
 
 автор: Гоблин   (22.02.2011 в 21:53)   личное сообщение
 
 

Это Avg для вычисления среднего значения? Не в этом дело. Пытаюсь заставить вычислять поля в отчете. В форме можно. А в отчете? Ну в VBA на крайняк и подставлять вычисленное значение в нужное поле. Пока все считают запросы в базе. Но от них избавиться хочу. Вот в чем проблема.
Есть количество дней, есть количество единиц по исследованиям. Есть общая сумма единиц за период. Отдельный запрос вычисляет среднее. Если ввести формулу в источник строк при открытии отчета, не дает результата. Что не так.
Пытаюсь выдернуть кусок базы для примера.

  Ответить  
 
 автор: Гоблин   (22.02.2011 в 22:21)   личное сообщение
32 Кб.
 
 

Вот выдернул кусок. Календарь не работает, да это там и не надо в данный момент.
Суть. Есть 3 таблы. Есть форма для задания периода. Открывает отчет. В нем все выводится верно.
Внизу 3 поля. Количество дней в период, средняя велничина ед и сумма всех ед. Все считает. Но для этого работают 3 запроса. Всего на 3 списка вышеуказанных величин. Можно ли как-то сделать, что бы убрать из базы эти запросы и вычислять все в VBA?

  Ответить  
 
 автор: kot_k_k   (23.02.2011 в 08:33)   личное сообщение
 
 


поле=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

  Ответить  
 
 автор: Анатолий (Киев)   (23.02.2011 в 10:53)   личное сообщение
 
 


Вставил поле, на которое есть выражение: поле=me.СпСумм/me.КолДней
При открытии поле остается пустым.
Вставил в код VBA на открытие отчета. Результат ничего.


На событии Open можно присвоить значение св-ву DefaultValue поля или св-ву Caption элемента Label.
Присвоить значение свободному полю можно только на событии Format раздела, где оно находится.
Где находятся поля me.СпСумм и me.КолДней? Откуда берутся значения в них?
Где находится "поле"?

  Ответить  
 
 автор: Гоблин   (23.02.2011 в 13:14)   личное сообщение
 
 

Анатолий, совершенно согласен с вопросами. Тут я сам маху дал. В примечании отчета есть список20, список30, список36. Список - потому что в источник строк можно запрос влепить. Весь список из 1 строки и состоит в результате. Способы таких вычислений мне не нравятся. Работают запросы, потом запросы запросов. Вот и хочу найти альтернативу таким вычислениям.

Кот, исследую предложение. DateDiff дает количество дней между двумя датами. Это не то, так как туда войдут все нерабочие, пропущенные и прочие дни. Тут именно группировка, затем подсчет срок сгруппированных дат и дают количество реально отработанных дней. Остальное рассмотрю подробнее.

  Ответить  
 
 автор: Анатолий (Киев)   (23.02.2011 в 18:11)   личное сообщение
 
 


В примечании отчета есть список20, список30, список36. Список - потому что в источник строк можно запрос влепить. Весь список из 1 строки и состоит в результате. Способы таких вычислений мне не нравятся.

Но зачем? На основании любого сохраненного запроса или SQL выражения можно открыть Recordset и получить данніе из него.

  Ответить  
 
 автор: Гоблин   (23.02.2011 в 18:48)   личное сообщение
 
 

Вот уже ближе к телу. В настоящее время в данном примере можно исключить запросы количество дней и количество единиц. Они нужны только для вычисления среднего значения. В примечании отчета Список36 На счет рекордсета что-то не думал даже. Как в отчете на основе выражения открыть рекордсет? Признаться не представляю. Пока только удается вычислить выражением сумму полученных единиц в отчете и отобразить их в поле. Пожалуйста если не трудно покажите как в данном случае вычислить необходимые результаты, не используя запросы в базе.

  Ответить  
 
 автор: kot_k_k   (24.02.2011 в 09:34)   личное сообщение
 
 

кто мешает засунуть код в примечание группы событие форматирование отчета

  Ответить  
 
 автор: Гоблин   (24.02.2011 в 17:13)   личное сообщение
33 Кб.
 
 

Спасибо. Нашел в чем причина. Все получилось, всем спасибо.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList