Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2010, 21:54   #1
Santosh
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию Динамическое изменение столбца в запросе

Помогите, всю голову сломал!
Вычисляется стоимость заказа, как произведение количества из [ЗАКАЗЫ] и стоимости из [ПРОДУКЦИЯ].
Сложность в том, что стоимость продукции ежеквартально изменяется и в зависимости от даты заказа нужно в качестве стоимости использовать разные столбцы из [ПРОДУКЦИЯ]. Просто изменить цену нельзя, потому, что изменится вся статистика продаж за предыдущие периоды.

В теме "Создание динамического отчета" прочитал что "...Можно определить заголовки столбцов как вычисляемые поля..."
Это может быть решением? Как это сделать?
Или есть другой способ?
Вложения
Тип файла: zip База данных1.zip (13.2 Кб, 19 просмотров)

Последний раз редактировалось Santosh; 16.09.2010 в 21:57.
Santosh вне форума Ответить с цитированием
Старый 21.09.2010, 07:00   #2
D.Shibanov
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 28
По умолчанию

Здравствуйте!
Если дата перехода на следующую цену точно определена (фиксированая), то в таком случае для расчета можно использовать условные конструкции типа (Select Case) или (If...Then...Else).
Код:
Select Case Format([Дата];"dd.mm")
  Case #01.01# To #01.04#
    Стоимость=Количество*Дата1
  Case #01.04# To #01.07#
    Стоимость=Количество*Дата2
  Case #01.07# To #01.10#
    Стоимость=Количество*Дата3
  Case #01.10# To #01.01#
    Стоимость=Количество*Дата4
End Select

Последний раз редактировалось D.Shibanov; 21.09.2010 в 07:04.
D.Shibanov вне форума Ответить с цитированием
Старый 21.09.2010, 08:03   #3
Santosh
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

Цитата:
Сообщение от D.Shibanov Посмотреть сообщение
Здравствуйте!
Если дата перехода на следующую цену точно определена (фиксированая), то в таком случае для расчета можно использовать условные конструкции типа (Select Case) или (If...Then...Else).
Код:
Select Case Format([Дата];"dd.mm")
  Case #01.01# To #01.04#
    Стоимость=Количество*Дата1
  Case #01.04# To #01.07#
    Стоимость=Количество*Дата2
  Case #01.07# To #01.10#
    Стоимость=Количество*Дата3
  Case #01.10# To #01.01#
    Стоимость=Количество*Дата4
End Select
Попробовал применить но сразу натолкнулся на вопрос.
В построителе выражений нет функции Case.
Пример написан на VBA?
Тогда что нужно сделать? Определить это как функцию и использовать ее в построителе выражений для рассчета стоимости?

Извините за возможно глупые вопросы, но Access начал изучать все го 2 месяца назад. Во многом еще не разобрался.
Santosh вне форума Ответить с цитированием
Старый 21.09.2010, 08:35   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте D.Shibanov.
в сложившейся ситуации, когда "..изменить цену нельзя..", сформировать таблицу можно подобным запросом:
Код:
SELECT Заказы.Дата, 
Продукция.Продукция, 
DatePart("q",[Дата]) AS Квартал, 
IIf(DatePart("q",[Дата])=1,[Дата1],IIf(DatePart("q",[Дата])=2,[Дата2],IIf(DatePart("q",[Дата])=3,[Дата3],[Дата4]))) AS Цена, 
Заказы.Количество, 
[Количество]*IIf(DatePart("q",[Дата])=1,[Дата1],IIf(DatePart("q",[Дата])=2,[Дата2],IIf(DatePart("q",[Дата])=3,[Дата3],[Дата4]))) AS Сумма
FROM Продукция INNER JOIN Заказы ON Продукция.Код = Заказы.Продукт;
но такую структуру БД можно считать верной только если проект создается для получения одного отчета, т.к. для получения отчета в следующем году потребуется корректировка.
Евгений.

P.S. для увеличения вероятности получения помощи, выкладывайте образец в формате А2003
Teslenko_EA вне форума Ответить с цитированием
Старый 22.09.2010, 01:22   #5
Santosh
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

Спасибо! Идею понял.
Решил использовать конструкцию SWITCH, так как нет ограничения конца года.
В применении к реальной базе рассчет цены выглядит так:
Код:
Баллы: Switch([Дата]<#01.10.2010#;[Продукция]![3/2010 баллы];[Дата]<#01.01.2011#;[Продукция]![4/2010 баллы];[Дата]<#01.03.2011#;[Продукция]![1/2011 баллы])
Все работает.
Santosh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое изменение даты AvivNoa Microsoft Office Word 34 03.06.2016 21:04
vba: динамическое изменение кода tyrus2 Microsoft Office Word 2 15.09.2010 17:19
динамическое изменение типа переменной L@m@k Помощь студентам 14 12.08.2010 18:09
stringgrid изменение ширины столбца с заголовками keeper69 Общие вопросы Delphi 6 22.01.2010 16:33
Динамическое изменение местоположения БД в ADOCONNECTION Vol666 БД в Delphi 2 31.10.2009 07:21