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


1С:Предприятие ::

Метки: 

Отбор по РС курсы валют

Я
   falselight
 
16.01.18 - 15:12
Запрос должен отобрать максимальные курсы валют за пять календарных дней, от даты документа.

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

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

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

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

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

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

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

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

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

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



ВЫБРАТЬ
    //КурсыВалют.Период,

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

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

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

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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



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