Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрос Дата в Периоде  (Прочитано 12971 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Sulik
Помогающий

ru
Offline Offline
Пол: Мужской

« : 05-04-2011 19:16 » 

Доброго ночи всем !
Имеется запрос:
Код:
ВЫБРАТЬ
ЗаправкаГСМОстаткиГСМ.ГСМ КАК ГСМ,
ПлотностьГСМ.Плотность КАК Плотность
ИЗ
Документ.ЗаправкаГСМ.ОстаткиГСМ КАК ЗаправкаГСМОстаткиГСМ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПлотностьГСМ КАК ПлотностьГСМ
ПО ЗаправкаГСМОстаткиГСМ.ГСМ = ПлотностьГСМ.ГСМ
ГДЕ
ЗаправкаГСМОстаткиГСМ.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

У РегистрСведений.ПлотностьГСМ есть поле Период.

Как можно выбрать ПлотностьГСМ на дату документа ЗаправкаГСМ ?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-04-2011 05:20 » 

В общем случае (когда период регистра сведений задается до секунды) получается нетривиально...
Можно попробовать добавить еще условие связи:
Код:
ИЗ
Документ.ЗаправкаГСМ.ОстаткиГСМ КАК ЗаправкаГСМОстаткиГСМ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПлотностьГСМ КАК ПлотностьГСМ
ПО (ЗаправкаГСМОстаткиГСМ.ГСМ = ПлотностьГСМ.ГСМ) И (МАКС(ПлотностьГСМ.Период) <= ЗаправкаГСМОстаткиГСМ.Дата)
Но очень вероятно, что агрегатная функция МАКС в условиях не разрешена - тогда придется идти через подзапрос с группировками.
В общем попробуй так - отпишись. Если что - подумаем дальше...
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #2 : 06-04-2011 06:32 » 

Не понял, в чем смысл добавления еще одного условия в связи, все время будет последняя по времени запись регистра
Записан
Sulik
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 06-04-2011 06:37 » 

Цитата
Но очень вероятно, что агрегатная функция МАКС в условиях не разрешена

Не разрешена, выдает ошибку.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 06-04-2011 07:11 » new

Dest, смысл в том, что сравнение идет с датой документа - т.е. (по моей логике) должны отбираться только записи до документа (аналог СрезПоследних по дате документа)

Добавлено через 53 минуты и 9 секунд:
Цитата
Но очень вероятно, что агрегатная функция МАКС в условиях не разрешена

Не разрешена, выдает ошибку.
Не верно назвал функцию - попробуй МАКСИМУМ

Добавлено через 8 минут и 39 секунд:
Вот пример с вложенным запросом для цен номенклатуры.
Подставь только свои названия объектов и полей и условия на отбор документов (в обоих запросах: внутреннем и внешнем!):
Код:
  "ВЫБРАТЬ
  | ПоступлениеТоваровУслугТовары.Номенклатура,
  | ЦеныНоменклатуры.Цена
  |ИЗ
  | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
  | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
  | ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
  | МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
  | ИЗ
  | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
  | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
  | ПО ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
  | ГДЕ
  | ЦеныНоменклатуры.Период <= ПоступлениеТоваровУслугТовары.Ссылка.Дата
  |
  | СГРУППИРОВАТЬ ПО
  | ПоступлениеТоваровУслугТовары.Номенклатура) КАК ПериодЦенНоменклатуры
  | ПО ПоступлениеТоваровУслугТовары.Номенклатура = ПериодЦенНоменклатуры.Номенклатура
  | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
  | ПО ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
  | И (ПериодЦенНоменклатуры.Период = ЦеныНоменклатуры.Период)";

внутренний запрос создает сопоставление номенклатуры и соответствующей ей даты (периода) регистра сведений, внешний - по готовому периоду сопоставляет с конкретной датой регистра сведений.
Запрос сделан как пример: он не будет работать, если в отбор попадет больше одного документа. Как это сделать - подумай сам (нужно добавить еще одну группировку во внутренний запрос и правильно ее использовать во внешнем)
« Последнее редактирование: 06-04-2011 08:13 от Kivals » Записан
Sulik
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 30-04-2011 22:10 » 

Спасибо, разобрался! добавил нужную группировку.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines