Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Запрос по курсам валют

Запрос по курсам валют
Я
   Slaventiya
 
24.01.18 - 21:29
По каждой валюте получить временные интервалы ЗАПРОСОМ, в которых курс не изменялся.


Пример
Данные в регистре:

Период               Валюта                Курс
01.01.2000          USD                       1,9
02.01.2000          USD                       1,9
03.01.2000          USD                       1,95
04.01.2000          USD                       1,8
05.01.2000          USD                       1,95
01.01.2000          EUR                       2
02.01.2000          EUR                       2
03.01.2000          EUR                       2
04.01.2000          EUR                       2
05.01.2000          EUR                       2

Результат

ДатаС       ДатаПо         Валюта   Курс

01.01.2000  02.01.2000     USD      1,9
03.01.2000  03.01.2000     USD      1,95
04.01.2000  04.01.2000     USD      1,8
05.01.2000  08.09.2017     USD      1,95
01.01.2000  08.09.2017     EUR      2

Нет уже мыслей, прошу помощи
 
 
   trooba
 
1 - 24.01.18 - 21:39
(0) выбрать из регистра периодами
   Михаил Козлов
 
2 - 24.01.18 - 23:23
Попробуйте взять минимум и максимум от периода, группируя по валюте и значению курса.
   Slaventiya
 
3 - 24.01.18 - 23:28
(2) Не взлетит, присовпадении значений курса будет ошибочный интервал.
   Fram
 
4 - 25.01.18 - 00:00
(0)
- соединяете регистр с самим собой по Валютам и Рег1.Период < Рег2.Период
- берете мин по Рег2.Период и группируете по Валюте и Рег1.Период
- далее по Валютам и Рег1.Период еще раз соединяете с регистром чтобы получить курс.

такую задачку на собеседованиях дают обычно )
   Fram
 
5 - 25.01.18 - 00:03
(4)+ к первому пункту надо еще добавить условие что Рег1.Курс <> Рег2.Курс, чтобы пропустить записи с тем же курсом.
   Franchiser
 
6 - 25.01.18 - 01:01
(0) собеседование?
   Fram
 
7 - 25.01.18 - 01:13
(4)+ и не способность ее решить дает вам право претендовать только на начинающего (junior) программиста 1С, имхо
   КрасныйРассвет 2_0
 
8 - 25.01.18 - 01:23
(6) Похоже)
(7) ИМХО, там люди ищут кодера, а не Программиста 1С
   VladZ
 
9 - 25.01.18 - 05:11
(5) Немного изменим условие задачи. Пусть за 3 января будет курс 2.1.  
03.01.2000          EUR                       2.1

А с 4го - опять 2.
   Slaventiya
 
10 - 25.01.18 - 08:32
Спасибо за отзывы, решил сам примерно так как и описано в п. 4, 5 ...
 
 Рекламное место пустует
   Ildarovich
 
11 - 25.01.18 - 08:53
Если не думать об эффективности, то можно так:
ВЫБРАТЬ
    ДАТАВРЕМЯ(2000, 1, 1) КАК Период,
    "USD" КАК Валюта,
    1.9 КАК Курс
ПОМЕСТИТЬ Дано

ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 2), "USD", 1.9
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 3), "USD", 1.95
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 4), "USD", 1.8
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 5), "USD", 1.85
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 1), "EUR", 2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 2), "EUR", 2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 3), "EUR", 2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 4), "EUR", 2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(2000, 1, 5), "EUR", 2
;

ВЫБРАТЬ
    Дано.Период,
    Дано.Валюта,
    Дано.Курс,
    КОЛИЧЕСТВО(Было.Курс) КАК Номер
ПОМЕСТИТЬ Интервалы
ИЗ
    Дано КАК Дано
        ЛЕВОЕ СОЕДИНЕНИЕ Дано КАК Было
        ПО (Было.Валюта = Дано.Валюта)
            И (Было.Период <= Дано.Период)
            И (Было.Курс <> Дано.Курс)
СГРУППИРОВАТЬ ПО
    Дано.Период,
    Дано.Валюта,
    Дано.Курс
;
ВЫБРАТЬ
    МИНИМУМ(Интервалы.Период) КАК ДатаС,
    МАКСИМУМ(Интервалы.Период) КАК ДатаПо,
    Интервалы.Валюта,
    Интервалы.Курс
ИЗ
    Интервалы КАК Интервалы
СГРУППИРОВАТЬ ПО
    Интервалы.Валюта,
    Интервалы.Курс,
    Интервалы.Номер
УПОРЯДОЧИТЬ ПО
    Интервалы.Валюта,
    ДатаС
Если данных много и эффективность важна, то можно взять метод решения из http://catalog.mista.ru/public/402534/
   Fram
 
12 - 25.01.18 - 10:11
(9) и что?
   Fram
 
13 - 25.01.18 - 10:16
(9) если что, то в (5) имелось ввиду добавить в условие соединения, а не в раздел ГДЕ, как, возможно ты подумал.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует