Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Предыдущие курсы валют
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
I_Stranger
Нужно получить предыдущие курсы всех валют (когда либо внесенных в регистр сведений). У кого есть идеи как это сделать?
volodya1122
Цитата(I_Stranger @ 06.08.11, 13:50) необходимо зарегистрироваться для просмотра ссылки
Нужно получить предыдущие курсы всех валют (когда либо внесенных в регистр сведений). У кого есть идеи как это сделать?

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

УПОРЯДОЧИТЬ ПО
    Период УБЫВ
Vofka
Что за бред? Если дата отчета 7.08.2011 - выбираем срез последних на (7.08.2011) - 1, т.е. на 6.07.2011 вот и всё.
kivals
Цитата(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
Цитата
Если вы не разобрались в вопросе - не нужно оскорблять вопрошающего!

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

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

ЗЫ. kivals, зато согласитесь, как эффектно вы выступили на фоне моего "оскарбления" icon_buba.gif
kivals
Vofka, просто недавно решал подобную задачу smile.gif
I_Stranger
На самом деле, действительно, ДатаОтчета-1день не подходит, по причине высказанной kivals.
kivals Запрос, хорош, да, но как я уже указывала мне нужны все курсы валют, а не один. Кроме как соединить 3 запроса в один, ничего умного в голову не приходи.

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

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

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

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

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

У меня меньше не получается smile.gif Может как-то и можно второй и третий запрос свести в один, но я не придумал
I_Stranger
Прошу прощение, за мою невнимательность. Я не правильно использовала список, каюсь. Все работает, все правильно. Спасибо за помощь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.