Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 21:20

Связь таблиц запроса по периоду

Автор Golickoff, 01 мар 2016, 10:42

0 Пользователей и 1 гость просматривают эту тему.

Golickoff

Всем привет.

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

"ВЫБРАТЬ
               | ЦеныНоменклатурыПоставщиковСрезПоследних.Цена,
               | ЦеныНоменклатурыПоставщиковСрезПоследних.Валюта,
               | ЦеныНоменклатурыПоставщиковСрезПоследних.Период,
               | КурсыВалютСрезПервых.Курс,
               | КурсыВалютСрезПервых.Кратность
               |ИЗ
               | РегистрСведений.КурсыВалют КАК КурсыВалютСрезПервых
               | ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
               | ПО КурсыВалютСрезПервых.Валюта = ЦеныНоменклатурыПоставщиковСрезПоследних.Валюта
               | И КурсыВалютСрезПервых.Период = ЦеныНоменклатурыПоставщиковСрезПоследних.Период
               |ГДЕ
               | ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура = &Номенклатура"

В результате имею всё, кроме курса и кратности.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Rasty

попробуйте левое соединение и кстати период задается немного по другому
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

vitasw

По валютам тоже нужен срез, а не физическая таблица

Golickoff

Цитата: Rasty от 01 мар 2016, 10:54
попробуйте левое соединение и кстати период задается немного по другому

Но мне нужен не конкретный период. Изначально мне нужна цена последнего поступления и если она не в рублях, мне нужен курс за дату поступления. Я же не могу указать в параметрах виртуальной таблице параметр типа ЦеныНоменклатурыПоставщиковСрезПоследних.Период. Если я использую левое соединение, то результат вообще окажется пустым. Запрос не найдёт курс и отсеет правую часть за неимением левой.

ЦитироватьПо валютам тоже нужен срез, а не физическая таблица
Это я уже экспериментировал всё подряд. Со срезами тоже то одно, то другое. Мой пример исключительно для наглядности и упрощения понимания.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

vitasw

Цитата: Golickoff от 01 мар 2016, 11:03Мой пример исключительно для наглядности и упрощения понимания.

Тогда вы очень упростили. Верните все взад, так как вы считаете, что наиболее вам подходит - подправим.
А во вторых - по валюте, это опять классическая задача на срез последних на каждую дату. Посмотрите тут: http://kb.mista.ru/article.php?id=92
достаточно доступно написано.

Golickoff

Цитата: vitasw от 01 мар 2016, 11:15Верните все взад
:D Я сейчас в дороге. Спасибо за ссылку. Гляну дома и отпишусь о результатах.
Добавлено: 02 мар 2016, 05:00


Всё получилось.
"ВЫБРАТЬ
               | Приход.Номенклатура,
               | Приход.ДатаПрихода,
               | Приход.ВалютаПрихода,
               | КурсПрихода.Курс
               |ИЗ
               | (ВЫБРАТЬ
               | ЦеныНоменклатурыПоставщиков.Номенклатура КАК Номенклатура,
               | ЦеныНоменклатурыПоставщиков.Период КАК ДатаПрихода,
               | ЦеныНоменклатурыПоставщиков.Валюта КАК ВалютаПрихода,
               | МАКСИМУМ(Валюты.Период) КАК ПериодПрихода
               | ИЗ
               | РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиков
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Валюты
               | ПО (Валюты.Период <= ЦеныНоменклатурыПоставщиков.Период)
               | И (Валюты.Валюта = ЦеныНоменклатурыПоставщиков.Валюта)
               |
               | СГРУППИРОВАТЬ ПО
               | ЦеныНоменклатурыПоставщиков.Номенклатура,
               | ЦеныНоменклатурыПоставщиков.Период,
               | ЦеныНоменклатурыПоставщиков.Валюта) КАК Приход
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсПрихода
               | ПО Приход.ДатаПрихода = КурсПрихода.Период
               | И Приход.ВалютаПрихода = КурсПрихода.Валюта
               |ГДЕ
               | Приход.Номенклатура = &Номенклатура"

Ещё раз спасибо за ссылку.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск