подсчет суммы с выборкой в запросе или форме

Maksut
Дата: 19.02.2008 23:42:27
есть запрос основанный на нескольких таблицах, в него пихаются данные о заказе, клиенте и менедже ведущим заказ. запрос запускается с 2-мя параметрами выборки - месяц и год.

в форме на основе этого запроса должен быть перечень менеждеров с суммой всех заказов (этот столбец вычисляется из нескольких в запросе). менеджера за выбранный период

dsum (в запросе - DSum("СтоимостьДизайнаЗаказа";"бланкзаказа";"кодменеджера=" & [бланкзаказа]![кодменеджера])) выдает сумму заказов по всем записям, не принимая во внимание выборку, причем не хочет суммировать вычисляемое поле запроса, а только из таблицы.

в форме, при ссылке на запрос или форму пишет то ошибку, то имя, то что объект не содержит программируемый объект.

как его победить.

пробовал также делать отдельный запрос суммы заказов с группировкой по году, месяцу и менеджеру, но видимо т.к. менеджер и год с месяцем находятся в разных таблицах, группировки не получается и на отчетный период выводятся несколько записей на одного менеджера.
rok
Дата: 20.02.2008 01:48:34
DSum(выражение, набор[, условие])

Функция DSum использует следующие аргументы

выражение Выражение, определяющее нужное поле. Данный аргумент может задаваться строковым выражением, определяющим поле в таблице или запросе, или представлять выражение, задающее выполнение вычислений над данными, содержащимися в поле. Допускается использование в аргументе выражение имени поля в таблице или элемента управления в форме, константы, а также встроенной или определяемой пользователем функции. Не допускается использование в аргументе выражение других статистических функций по подмножеству или статистических функций SQL.
набор Строковое выражение, определяющее набор записей, образующих подмножество. Может представлять имя таблицы или запроса.
условие Необязательное строковое выражение, ограничивающее диапазон данных, для которых производится суммирование значений. Например, аргумент условие часто является эквивалентом предложения WHERE инструкции SQL, но без ключевого слова WHERE. Если аргумент условие опущен, DSum выполняет расчеты над полем, заданным в аргументе выражение, для всего набора записей. Любое поле, указанное в аргументе условие, должно принадлежать подмножеству, заданному аргументом набор; в противном случае функция DSum возвращает значение Null.
А Ваш запрос называется "бланкзаказа" или "кодменеджера" ?
Немного другой синтаксис-вот пример:
DSum("[Количество]*[Цена]", "Заказано", "[КодТовара] = " & [КодТовара])
или
Dsum("[количество]*[цена]","Заказано","[фамилия]= 'петров'"
rok
Дата: 20.02.2008 02:02:40
Вдогонку-забыл закрыть скобку во втором примере.
Maksut
Дата: 20.02.2008 13:11:18
Спасибо за подробное описание функции, это очень ценно.

запрос называется ЗапросРеализацияЗаказов - выбирается из таблиц- см. картинку
суммировать надо поля
СуммаЗаказа%: (([СтоимостьДизайнаЗаказа]+[СтоимостьИнженерЗаказа]+[СтоимостьПроизводстваЗаказа]+[СтоимостьМонтажаЗаказа]+[СтоимостьПрочееЗаказа])-([СтоимостьДизайнаЗаказа]+[СтоимостьИнженерЗаказа]+[СтоимостьПроизводстваЗаказа]+[СтоимостьМонтажаЗаказа]+[СтоимостьПрочееЗаказа])*[СкидкаКлиент]/100)*[РеалицацияОтчетныйМесяц]/100

и

Затраты%: ([СтоимостьМатериалы]+[СтоимостьСубПодряд])*[РеалицацияОтчетныйМесяц]/100

с выборкой по дате и менеджеру
тоесть в запросе получатся повторяющиеся значения для менеджера.
у каждого менеджера своя цифра.
rok
Дата: 20.02.2008 21:27:54
Самое интересное в том, что база "Борей" это почти то, что Вам нужно.
Поймите принцыпы создания таблиц и связей-исправлять очень трудно и трудоемко. У Вас не совсем все правильно:клиенты,менеджеры,заказы и товар(или материалы)-больше не надо. Все связи один-ко-многим. Морщите лоб и удачи.
Maksut
Дата: 21.02.2008 12:07:07
к сожалению этого мало,
сотрудники нужгы чтоб им начисляли з/п в соответствии с заказами и согласно
отчетам. в котором ежемесячно отображается ход выполнения заказа.
руководство ограничивает в расходах на заказ, соответственно и таблица утверждено.
а вообще на этой схеме далеко не все таблицы которые есть.

фирма занимается производством рекламных конструкций,
отсюда и данные по заказу, расходу на него проектному и фактическому,
а также суммы прихода, которые Бухи заносят...
Maksut
Дата: 21.02.2008 12:13:54
Борей смотрел и не мало оттуда почерпнул, но некоторых вещей не хватает.

например злочастная dsum:
суммирует у меня в форме тока данные из запроса не на основе которого сделана форма,
и тока по одному параметру.

пока не могу добиться чтоб суммировала допустим по дате и менеджеру, только чтото одно.
условия объединяю при помощи and. Верно?

=DSum("[СуммаЗаказа%]";"[ПодчиненныйРеализПро]";"ГодОтчета=" & '[годвыб]' And "КодМесяцаОтчета=" & '[месвыб]')

по одиночке условия работают, вместе нет (((((
mds_world
Дата: 21.02.2008 19:29:29
Если считать, что поле [ГодОтчета] числовое, а [КодМесяцаОтчета] стринг, [годвыб], [месвыб] поля на форме, то так
=DSum("[СуммаЗаказа%]";"[ПодчиненныйРеализПро]";"ГодОтчета=" & [годвыб] & " And  КодМесяцаОтчета='" & [месвыб] & "'")
Если ГодОтчета тоже стринг, то и его в апострофы.

Кстати, почему код месяца, а не сам месяц?
rok
Дата: 21.02.2008 19:37:12
Почувствуйте разницу:у Вас
Dsum ([....];[...]; "ГодОтчета=" & '[годвыб]' And "КодМесяцаОтчета=" & '[месвыб]')
как я понял "ГодОтчета" и "КодМесяцаОтчета" поля, хотя это должно быть одно поле с кратким форматом даты (чч.мм.гг.)
Должно быть:
Dsum([здесь должно быть выражение включающее поля источника(вашего запроса)];
"здесь должно быть имя этого запроса(содержащего поля используемые для вычислений, кстати без кв.скобок)";
"[ГодОтчета] & [КодМесяцаОтчета]='" & [годвыб] & [месвыб] & "'"
Maksut
Дата: 21.02.2008 20:02:13
хитрый синтаксис) зачем так муторно?

[ГодОтчета] - числовое,
[КодМесяцаОтчета] - текстовое (01, 02, -12)

Кстати, почему код месяца, а не сам месяц?
для сортировки, и удобства ввода в парамерте запроса.
проще 01,02 чем январь, февраль...
а текстовое потому что в параметре 1 и 11 месяцы сливаются(

как я понял "ГодОтчета" и "КодМесяцаОтчета" поля, 
хотя это должно быть одно поле с кратким форматом даты (чч.мм.гг.) 
это отчет менеджеров по месяцам, при разделении на месяц и год, достаточно
из списка выбрать один из 12 месяцев, а при дате постоянно вводить...