Версия для печати темы (https://pro1c.org.ua/index.php?s=950d078bfd0e6fc79bf4e88dc41c2c2d&showtopic=4376)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Предыдущие курсы валют

Автор: I_Stranger 06.08.11, 12:50

Нужно получить предыдущие курсы всех валют (когда либо внесенных в регистр сведений). У кого есть идеи как это сделать?

Автор: volodya1122 06.08.11, 13:03

Цитата(I_Stranger @ 06.08.11, 13:50) *
Нужно получить предыдущие курсы всех валют (когда либо внесенных в регистр сведений). У кого есть идеи как это сделать?

Задавайте внятно вопрос, если хотите получить ответ, но прежде прочтите правила....

Автор: I_Stranger 06.08.11, 13:12

Попытаюсь исправиться - версия 8.2. Нужно получить на ДатуОтчета не текущий курс валюты, а предыдущий (мне нужна будет их разница).
У меня получилось сделать для одной валюты, но нужно для всех.

ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
    КурсыВалют.Период КАК Период,
    КурсыВалют.Курс,
    КурсыВалют.Валюта
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            КурсыВалютСрезПоследних.Курс КАК Период,
            КурсыВалютСрезПоследних.Период КАК Курс,
            КурсыВалютСрезПоследних.Валюта КАК Валюта
        ИЗ
            РегистрСведений.КурсыВалют.СрезПоследних(&ДатаОтчета, Валюта = &Валюта) КАК КурсыВалютСрезПоследних) КАК ВложенныйЗапрос
        ПО КурсыВалют.Период <> ВложенныйЗапрос.Период
ГДЕ
    КурсыВалют.Период < &ДатаОтчета
    И КурсыВалют.Валюта = &Валюта

УПОРЯДОЧИТЬ ПО
    Период УБЫВ

Автор: Vofka 07.08.11, 18:52

Что за бред? Если дата отчета 7.08.2011 - выбираем срез последних на (7.08.2011) - 1, т.е. на 6.07.2011 вот и всё.

Автор: kivals 10.08.11, 16:45

Цитата(Vofka @ 07.08.11, 19:52) *
Что за бред? Если дата отчета 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 дня раньше (в Пт) (я уже молчу про валюты, которые меняются реже чем раз в день) и построенный по Вашему варианту запрос вернет одинаковый результат

По существу вопроса: у меня это получается через пакет (чтобы вложенный запрос ПоследнийКурс не дублировать дважды):

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

Автор: Vofka 10.08.11, 17:44

Цитата
Если вы не разобрались в вопросе - не нужно оскорблять вопрошающего!

Во-первых, данное обращение было не к вам.
Во-вторых, фраза "что за бред?" - это оскарбление?
В-третьих "(7.08.2011) - 1, т.е. на 6.07.2011" - я думаю доступно понятно, что надо на день меньше. На день. Это техническая опечатка.
В-четвертых: да, не разобрался в вопросе изначально, признаю вину. 20000000.gif

I_Stranger, если моя фраза "что за бред?" вас обидела - прошу прощения.

ЗЫ. kivals, зато согласитесь, как эффектно вы выступили на фоне моего "оскарбления" icon_buba.gif

Автор: kivals 10.08.11, 18:20

Vofka, просто недавно решал подобную задачу smile.gif

Автор: I_Stranger 11.08.11, 11:43

На самом деле, действительно, ДатаОтчета-1день не подходит, по причине высказанной kivals.
kivals Запрос, хорош, да, но как я уже указывала мне нужны все курсы валют, а не один. Кроме как соединить 3 запроса в один, ничего умного в голову не приходи.

Vofka, Вы меня не обидели ни в коем случае. Лишь заставили задуматься - может я не правильно сформулировала вопрос smile.gif

Автор: Vofka 11.08.11, 11:56

Цитата
Лишь заставили задуматься - может я не правильно сформулировала вопрос

Ну я там действительно не разобравшись ляпнул. Может быть немного грубовато получилось и, на самом деле оказалось, что бред у меня в сообщении. Но обидеть не хотел.

Автор: I_Stranger 11.08.11, 12:03

Тогда мир, дружба, жвачка friends.gif

по теме:
Как все таки, выбрать все курсы валют (в моем случае три) на ПредпоследнийПериод не объединяя три запроса/пакета запросов? Хочется оптимальности, что-ли

Автор: kivals 11.08.11, 17:20

Теперь я не понимаю задачи:
нужны все курсы валют или курсы всех валют?

Мой запрос возвращает для всех валют (заданных параметром СписокВалют) последенее значение курса и предыдущее (а также даты их установки). Для задачи "мне нужна будет их разница" этого вроде как достаточно.

Теперь подумаем теоретически: чтобы узнать предыдущий курс нам нужно узнать дату установки последнего курса - имеем первый запрос, который возвращает по заданным валютам даты установки курса.
После этого нам нужно получить предыдущие даты - второй запрос, который из всех дат выбирает максимальную, но меньше заданной (полученной в первом вопросе).
Ну и третий - по заданной дате (результат второго запроса) получить установленный курс.

У меня меньше не получается smile.gif Может как-то и можно второй и третий запрос свести в один, но я не придумал

Автор: I_Stranger 12.08.11, 10:33

Прошу прощение, за мою невнимательность. Я не правильно использовала список, каюсь. Все работает, все правильно. Спасибо за помощь!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua