Имя: Пароль:
1C
 
Отбор по РС курсы валют
0 falselight
 
16.01.18
15:12
Запрос должен отобрать максимальные курсы валют за пять календарных дней, от даты документа.

Используемые документы заказ покупателя, заказ поставщику, поступление товаров или реализация. То есть дата какого либо документа используется.

Вопрос в том, как правильно делать такую выборку? По какой виртуальной таблице регистра сведений?
1 GGDots
 
16.01.18
15:22
Виртуальные таблицы "КурсыВалют.СрезПервых" и "КурсыВалют.СрезПоследних" здесь не нужны, так как они покажут только данные на определенную дату (по сути ты получишь последние данные на указанную дату для уникальной комбинации измерений - для срез последних).

Используй непосредственно саму таблицу "КурсыВалют" и будет тебе счастье:)
2 Sapiens_bru
 
16.01.18
15:29
Объединение двух запросов в временную таблицу и запрос по ней с функцией Максимум
Первая из таблиц это СрезПоследних на дату начала рассматриваемого периода - в твоём случае на дату за 5 дней до документа.
Вторая таблица это реальная таблица регистра с условием на период.
Первая выберет начальный курс пятидневной давности. Вдруг пользователи забыли загружать регистр курсов ежедневно. Или интернет кончился итд. Хотя бы какой то курс получишь гарантированно. Вторая даст курсы в динамике за период. Объединение расположит результаты запроса в один ряд, который потом нужно ещё раз пройти для поиска наибольшего курса
3 falselight
 
16.01.18
15:33
(2) Думал в запросе выбрать.

А как задавать даты для периода отбора, за 5 дней до даты документа. То есть установка дат в функцию между?

Если в параметрах выбирается документ?
4 Ненавижу 1С
 
гуру
16.01.18
15:35
(3) если в параметрах выбирается документ, то можно и его дату в параметрах передать
и дату со сдвигом в 5 дней: Дата-5*86400

но судя по тому, какие темы ты создаешь - не судьба
забыл твой прошлый ник, кстати
5 Ненавижу 1С
 
гуру
16.01.18
15:36
+(4) вспомнил: LivingStar
6 Franchiser
 
гуру
16.01.18
15:39
(3) Ты уверен, что тебе нужно 5 предыдущих календарных дней, а не рабочих?
7 Ненавижу 1С
 
гуру
16.01.18
16:02
(6) пусть с календарными сначала справится
8 falselight
 
16.01.18
16:24
(6) А как можно учитывать, календарные дни или рабочие?
9 GGDots
 
16.01.18
16:28
Используя регистр сведений "ДанныеПроизводственногоКалендаря" - ну или как там он еще может называться
10 falselight
 
17.01.18
07:20
(2) Ну так все это и можно же выбрать во одной таблице как вторая. Задав период дней?!

А что если делать пять объединяемыми запросами сред последних на 5 дат с функцией максимум?
11 falselight
 
17.01.18
10:20
Если это нужно сделать непосредственно в запросе, без использования обработок и другого кода. И параметром в запрос передается ссылка на документ, как можно задать нужный период? Можно ли это сделать вообще?

Или только кодом можно формировать эти изначальные параметры?
12 falselight
 
17.01.18
10:20
(11+)

ВЫБРАТЬ
    КурсыВалют.Период,
    КурсыВалют.Валюта,
    КурсыВалют.Кратность,
    МАКСИМУМ(КурсыВалют.Курс) КАК Курс
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Период МЕЖДУ &Документ-5*86400  И &Документ

СГРУППИРОВАТЬ ПО
    КурсыВалют.Период,
    КурсыВалют.Валюта,
    КурсыВалют.Кратность
13 Ненавижу 1С
 
гуру
17.01.18
10:40
(12) это полный полярный лис
14 falselight
 
17.01.18
10:42
Если в запрос передавать сразу нужные даты
НачДата - 11.11.2015 0:00:00
КонДата - 15.11.2015 23:59:59
то выборка вот такая рабочая я как понял.



ВЫБРАТЬ
    //КурсыВалют.Период,
    КурсыВалют.Валюта,
    КурсыВалют.Кратность,
    МАКСИМУМ(КурсыВалют.Курс) КАК Курс
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Период МЕЖДУ &НачДата  И &КонДата

СГРУППИРОВАТЬ ПО
    //КурсыВалют.Период,
    КурсыВалют.Валюта,
    КурсыВалют.Кратность
15 falselight
 
17.01.18
11:01
(14) Странно но что выбрано в консоле запросов, нет в регистре сведений на этот период (!!!
Почему так?
Что не так в запросе (14)
16 catena
 
17.01.18
11:13
(15)Все там есть, не туда смотришь.
17 Franchiser
 
гуру
17.01.18
11:14
(15) в запросе 14 ты получил максимальный курс валюты за 5 дней, тебе это нужно ?
18 catena
 
17.01.18
11:14
Только вот если курсы устанавливались 13,14 и 15-го, то на 11 и 12 действовал другой курс, которого в твоем запросе не будет.
19 falselight
 
17.01.18
11:20
(16) Ок, увидел, период не тот сам сбил, поставил нужный.

Ну то есть это правильно работающий запрос?

В него только нужно уже передавать нужные параметры для отбора по периоду. Не пытаться рассчитать их в запросе.
20 falselight
 
17.01.18
11:24
(17) Открыл регистр за период выборки передаваемой в запрос. Там есть:
У.Е.
EUR
USD
Есть они там за этот период в разрезе 3х дней.

В запросе выбираются максимальные значения по каждой валюте. Нет RUB, так как её вообще нет в этом периоде.
21 catena
 
17.01.18
11:25
(19)если ты можешь передать параметры, зачем тебе извращаться с ними в запросе?
22 falselight
 
17.01.18
11:26
(18) У меня задача получить максимальный курс валюты (usd) за пять календарных дней, от даты документа. Фильтр на валюту ещё добавлю.

Ну так понятно, если если что то в выборку не попадает то это отсутствует в выборке!
23 catena
 
17.01.18
11:27
(20)Тебе нужно не максимальное значение за 5 дней или максимальное значение, которое было установлено в этот период?
24 Asakra
 
17.01.18
11:31
(22) срезПоследних на 5 дней назад + движения за 5 последних дней, полученные данные группируй и получай максимальный курс
25 Franchiser
 
гуру
17.01.18
11:32
Лучше срез -4 дня
26 catena
 
17.01.18
11:32
(24)Так уже предлагали. Так не интересно. Ему либо пять срезов последних, либо "если что то в выборку не попадает то это отсутствует в выборке".
27 Asakra
 
17.01.18
11:38
(25) уж это сам сможет посчитать, а то сейчас начет спрашивать почему 4)
(26) я вижу) может ему так понятней будет...
28 hhhh
 
17.01.18
11:58
(27) сейчас в типовых сделано, что запись в регистре есть на каждый день. Поэтому делать срез последних абсолютно бессмысленно. Не забивайте человеку голову.
29 falselight
 
17.01.18
12:00
(24) А почему нужно делать именно так?

Простое решение в (14) неадекватное? Чем?
30 falselight
 
17.01.18
12:25
Подскажите пожалуйста, как из первых двух пакетов
в основном запросе сделать правильную выборку?

ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта,
    МАКСИМУМ(КурсыВалютСрезПоследних.Курс) КАК Курс
ПОМЕСТИТЬ ВТ_НчальныйКурс
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&НачДата, Валюта = &USD) КАК КурсыВалютСрезПоследних

СГРУППИРОВАТЬ ПО
    КурсыВалютСрезПоследних.Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КурсыВалют.Валюта,
    МАКСИМУМ(КурсыВалют.Курс) КАК Курс
ПОМЕСТИТЬ ВТ_КурсОстальногоПериода
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Валюта = &USD
    И КурсыВалют.Период МЕЖДУ &НачДата И &КонДата

СГРУППИРОВАТЬ ПО
    КурсыВалют.Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_НчальныйКурс.Валюта,
    ВТ_НчальныйКурс.Курс,
    ВТ_КурсОстальногоПериода.Курс КАК Курс1
ИЗ
    ВТ_НчальныйКурс КАК ВТ_НчальныйКурс,
    ВТ_КурсОстальногоПериода КАК ВТ_КурсОстальногоПериода
31 falselight
 
17.01.18
12:34
А! Вот так!!!

ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта,
    МАКСИМУМ(КурсыВалютСрезПоследних.Курс) КАК Курс
ПОМЕСТИТЬ ВТ_НчальныйКурс
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&НачДата, Валюта = &USD) КАК КурсыВалютСрезПоследних

СГРУППИРОВАТЬ ПО
    КурсыВалютСрезПоследних.Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КурсыВалют.Валюта,
    МАКСИМУМ(КурсыВалют.Курс) КАК Курс
ПОМЕСТИТЬ ВТ_КурсОстальногоПериода
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Валюта = &USD
    И КурсыВалют.Период МЕЖДУ &НачДата И &КонДата

СГРУППИРОВАТЬ ПО
    КурсыВалют.Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_НчальныйКурс.Валюта,
    ВЫБОР
        КОГДА ВТ_НчальныйКурс.Курс > ВТ_КурсОстальногоПериода.Курс
            ТОГДА ВТ_НчальныйКурс.Курс
        ИНАЧЕ ВТ_КурсОстальногоПериода.Курс
    КОНЕЦ КАК КурсUSD
ИЗ
    ВТ_НчальныйКурс КАК ВТ_НчальныйКурс,
    ВТ_КурсОстальногоПериода КАК ВТ_КурсОстальногоПериода
32 Asakra
 
18.01.18
04:05
(28) а если по каким-то причинам, загрузка курса не выполнялась? загружает все пропущенные дни?
(31) делай одним запросом. пакет, полное соединение и "ВЫБОР КОГДА..." нафиг не нужены!
33 Серёжа_
программист
 
18.01.18
04:31
Слишком сложно, тут только писать основателям 1с
34 Asakra
 
18.01.18
04:33
(28) +(32) а про какую конфигурацию вообще речь?
(33) ) да он походу только учится...