2013-06-03 2 views
0

Я разрабатываю db (MS access 2010) для поддержки школы с четко определенной моделью для цитаты обучения. Список продуктов собирается для каждой цитаты, затем применяются различные скидки. Скидки могут составлять процент или абсолютную сумму в долларах. Пока что так просто. Проблема заключается в том, что их бизнес-логика требует:Использование итоговых итогов в отчете о доступе MS в совокупности

  1. Ограничений по количеству скидок.
  2. Конкретные скидки, которые должны применяться в определенной последовательности (реализованы в моем случае с столбцом «порядковый номер скидки», значения 1 (сначала применяются) до 100 (последнее применяется).
  3. Каждое последовательное применение скидки относится к общая сумма цитаты. Например: Всего товаров $ 1000. Скидка: 50%. Стоимость: 500 долл. Итого 500 долл. Итого: 500 долл. Скидка: 25 долл. Стоимость: 25 долл. Итого: 475 долл. США Итого: 475 долл. Скидка: $ 10%. Значение: $ 47,50.

Это, по-видимому, является вариантом проблемы «получить значение поля в предыдущей строке», bu t с добавленным завихрением, что «значение поля» на самом деле является кумулятивным расчетом. У этого есть вкус рекурсии: пока скидки остаются, промежуточный итог (предыдущий промежуточный итог).

У меня нет четкого представления о том, как реализовать это в отчете, потому что расчет, как указано выше, является самореферентным. Я не ищу код здесь, просто руководство по общему подходу к проблеме (т. Е. Какая-то глобальная переменная, использующая VBA), и в этом случае я не уверен, что «клей» между запросом в VBA и отчет будет - или какой-то трюк с вычисленным полем, хотя я потратил много времени, пытаясь разобраться в нем). Есть предположения?

+0

Похоже, что вам нужно назначить свою переменную с использованием предыдущей переменной, то есть 'i = i + 1' so' value (v) = $ 1000, v = v * 0.5, v = v * 0.9' Вы можете присвоить скидку другая переменная say d, чтобы она стала: 'v = v * d' –

ответ

1

В таких ситуациях я всегда создаю новую таблицу, которая будет заполняться при открытии отчета и основывается на отчете в этой таблице, а не на исходном. Таким образом, я могу делать все вычисления, которые мне нужны, даже делая несколько проходов. Затем отчет представляет собой просто «дамп» таблицы. Сложными итогами могут быть дополнительные столбцы, которые будут показаны только в разделе итогов.

0

У вас может быть таблица для истории покупок с использованием целого числа, чтобы связать каждую покупку, поскольку сам автономный номер не будет связывать каждую ступень скидок.

Так первенствует я хотел бы использовать что-то вроде этого:

v = Starting Value 
i = 1 

Do Until i = Last Discount 
    d = ws.Cells(i, 9).Value 
    v = v * (1 - d) 
    ws.Range("B2").Value = v 
    i = i + 1 
Loop 

На каждом этапе вы могли бы написать в таблицу (с помощью docmd.runsql) скидка применяется (г) и значение (v), но это может быть довольно медленно. Затем вы можете заказать таблицу по идентификатору покупки, а затем опуститься по значению, поскольку последовательные скидки будут изначально правильно упорядочены.

Смежные вопросы