Попытаюсь исправиться - версия 8.2. Нужно получить на ДатуОтчета не текущий курс валюты, а предыдущий (мне нужна будет их разница). У меня получилось сделать для одной валюты, но нужно для всех.
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1 КурсыВалют.Период КАК Период, КурсыВалют.Курс, КурсыВалют.Валюта ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ КурсыВалютСрезПоследних.Курс КАК Период, КурсыВалютСрезПоследних.Период КАК Курс, КурсыВалютСрезПоследних.Валюта КАК Валюта ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаОтчета, Валюта = &Валюта) КАК КурсыВалютСрезПоследних) КАК ВложенныйЗапрос ПО КурсыВалют.Период <> ВложенныйЗапрос.Период ГДЕ КурсыВалют.Период < &ДатаОтчета И КурсыВалют.Валюта = &Валюта
Что за бред? Если дата отчета 7.08.2011 - выбираем срез последних на (7.08.2011) - 1, т.е. на 6.07.2011 вот и всё.
Уважаемый! Если вы не разобрались в вопросе - не нужно оскорблять вопрошающего! Во-первых - не "(7.08.2011) - 1", а "(7.08.2011) - 24*60*60*1", т.к. Дата в 8.Х это ДатаВремя, и 1 - это 1 секунда Во-вторых - если дата отчета припадает на Пн то дата изменения курса будет на 3 дня раньше (в Пт) (я уже молчу про валюты, которые меняются реже чем раз в день) и построенный по Вашему варианту запрос вернет одинаковый результат
По существу вопроса: у меня это получается через пакет (чтобы вложенный запрос ПоследнийКурс не дублировать дважды):
ВЫБРАТЬ КурсыВалютСрезПоследних.Период КАК Период, КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Курс КАК Курс ПОМЕСТИТЬ ПоследнийКурс ИЗ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних ГДЕ КурсыВалютСрезПоследних.Период < &ДатаОтчета И КурсыВалютСрезПоследних.Валюта В(&СписокВалют) ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Валюта, КурсыВалют.Период КАК ПредпоследнийПериод, КурсыВалют.Курс КАК ПредпоследнийКурс, ПоследнийКурс.Период КАК ПоследнийПериод, ПоследнийКурс.Курс КАК ПоследнийКурс ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ КурсыВалют.Валюта КАК Валюта, МАКСИМУМ(КурсыВалют.Период) КАК Период ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследнийКурс КАК ВложенныйЗапрос ПО КурсыВалют.Период < ВложенныйЗапрос.Период И КурсыВалют.Валюта = ВложенныйЗапрос.Валюта
СГРУППИРОВАТЬ ПО КурсыВалют.Валюта) КАК ПредпоследнийПериод ПО (ПредпоследнийПериод.Валюта = КурсыВалют.Валюта) И (ПредпоследнийПериод.Период = КурсыВалют.Период) ЛЕВОЕ СОЕДИНЕНИЕ ПоследнийКурс КАК ПоследнийКурс ПО (ПоследнийКурс.Валюта = КурсыВалют.Валюта)
Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Цитата
Если вы не разобрались в вопросе - не нужно оскорблять вопрошающего!
Во-первых, данное обращение было не к вам. Во-вторых, фраза "что за бред?" - это оскарбление? В-третьих "(7.08.2011) - 1, т.е. на 6.07.2011" - я думаю доступно понятно, что надо на день меньше. На день. Это техническая опечатка. В-четвертых: да, не разобрался в вопросе изначально, признаю вину.
I_Stranger, если моя фраза "что за бред?" вас обидела - прошу прощения.
ЗЫ. kivals, зато согласитесь, как эффектно вы выступили на фоне моего "оскарбления"
На самом деле, действительно, ДатаОтчета-1день не подходит, по причине высказанной kivals. kivals Запрос, хорош, да, но как я уже указывала мне нужны все курсы валют, а не один. Кроме как соединить 3 запроса в один, ничего умного в голову не приходи.
Vofka, Вы меня не обидели ни в коем случае. Лишь заставили задуматься - может я не правильно сформулировала вопрос
Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Цитата
Лишь заставили задуматься - может я не правильно сформулировала вопрос
Ну я там действительно не разобравшись ляпнул. Может быть немного грубовато получилось и, на самом деле оказалось, что бред у меня в сообщении. Но обидеть не хотел.
по теме: Как все таки, выбрать все курсы валют (в моем случае три) на ПредпоследнийПериод не объединяя три запроса/пакета запросов? Хочется оптимальности, что-ли
Теперь я не понимаю задачи: нужны все курсы валют или курсы всех валют?
Мой запрос возвращает для всех валют (заданных параметром СписокВалют) последенее значение курса и предыдущее (а также даты их установки). Для задачи "мне нужна будет их разница" этого вроде как достаточно.
Теперь подумаем теоретически: чтобы узнать предыдущий курс нам нужно узнать дату установки последнего курса - имеем первый запрос, который возвращает по заданным валютам даты установки курса. После этого нам нужно получить предыдущие даты - второй запрос, который из всех дат выбирает максимальную, но меньше заданной (полученной в первом вопросе). Ну и третий - по заданной дате (результат второго запроса) получить установленный курс.
У меня меньше не получается Может как-то и можно второй и третий запрос свести в один, но я не придумал
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!