Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Курсы валют на указанную дату

350
17 августа 2007 года
cheburator
589 / / 01.06.2006
Имеется таблица с курсами валют. Столбцы: дата курса, идентификатор валюты, курс.
Задача: получить таблицу, содержащую для каждой валюты курс на указанную дату. Если на заданную дату курса у какой-то валюты нет, выдавать курс на ближайшую предыдущую дату. Т. е. получить таблицу со столбцами: валюта и курс.
---
Задача, в общем-то, типичная для 1С:Предприятия (в версии 7.7 это называлось - периодический реквизит справочника, в 8.0 - периодический регистр сведений, и тот и другой давали возможность получить так называемый "срез последних"). Фактически, данная задача - задача нахождения среза последних.
Мне интересно, как она решалась в 1С. Точнее, мне хочется узнать текст запроса, который для этого потребуется.
350
17 августа 2007 года
cheburator
589 / / 01.06.2006
И давайте возьмем СУБД попроще, скажем, firebird.
350
17 августа 2007 года
cheburator
589 / / 01.06.2006
Нашел в соседней теме такой запрос:
 
Код:
select * from
(
SELECT  r1.Компания, r1.Дата, (select count(*) from комдата as rr where rr.Компания =  r1.Компания and rr.Дата >= r1.Дата) AS xx
FROM комдата AS r1
ORDER BY r1.Компания, r1.Дата DESC
)
where xx <=3;

В 1С 8.0 подобное не канает...
Видимо, использовать поля родительского запроса во вложенном запросе нельзя.
Было бы интересно получить запрос, который работал бы и в 1С.
И уж заодно хотелось бы узнать, как заставить 1С выполнять задачу, поставленную в теме http://forum.codenet.ru/showthread.php?t=40676
350
17 августа 2007 года
cheburator
589 / / 01.06.2006
Однако, после некоторых мытарств появился такой код, который, оказывается, работает в 1С:
Код:
ВЫБРАТЬ
    КурсыВалют.Курс,
    КурсыВалют.Валюта
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Период В
        (ВЫБРАТЬ
                МАКСИМУМ(КурсыВспомогательный.Период) КАК Период
            ИЗ
                РегистрСведений.КурсыВалют КАК КурсыВспомогательный
            ГДЕ
                КурсыВспомогательный.Валюта = КурсыВалют.Валюта
                И КурсыВспомогательный.Период <= &Дата)
{ГДЕ
    КурсыВалют.Валюта.*}
309
17 августа 2007 года
el scorpio
1.1K / / 19.09.2006
Ответ простой. Есть таблица следующего формата
ID | Дата | Валюта | Курс

 
Код:
SELECT DISTINCT TOP 1 Валюты.*
FROM Валюты
WHERE (((Валюты.Валюта)=[pVal]) AND ((Валюты.Дата)<=[pDate]))
ORDER BY Валюты.Валюта, Валюты.Дата DESC;

Выдаёт курс одной валюты на указанную дату.
350
25 августа 2007 года
cheburator
589 / / 01.06.2006
Цитата: el scorpio

Выдаёт курс одной валюты на указанную дату.


Это-то понятно. Мне нужно получить курсы ВСЕХ валют.
P. S. Всем спасибо, задача решена, можно закрывать...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог