Имя: Пароль:
1C
 
Выборка на начало месяцев (ца)
0 falselight
 
24.11.16
06:20
В РС, данные на каждый день.
Если я в период выборки ставлю 6 месяцев,
можно ли в запросе задать что бы он отобрал
только первые числа каждого месяца???

||


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

УПОРЯДОЧИТЬ ПО
    ВалютаНаименование,
    Период
1 Romyr
 
24.11.16
06:25
в одном запросе скорее всего нет.
Запрос в цикл и отбирать помесячно не предлагать?
2 falselight
 
24.11.16
06:26
(1) Я так попробовал. Пойдет?



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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_День.Период КАК Период,
    ВТ_День.Валюта КАК Валюта,
    ВТ_День.Курс КАК Курс,
    ВТ_День.ВалютаНаименование КАК ВалютаНаименование
ИЗ
    ВТ_День КАК ВТ_День
ГДЕ
    ВТ_День.День = 1

УПОРЯДОЧИТЬ ПО
    ВалютаНаименование
3 Рэйв
 
24.11.16
06:30
ВЫБРАТЬ
    КурсыВалютСрезПоследних.Период,
    КурсыВалютСрезПоследних.Валюта
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
ГДЕ
    НАЧАЛОПЕРИОДА(КурсыВалютСрезПоследних.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(КурсыВалютСрезПоследних.Период, ДЕНЬ)
4 Mariiaki
 
24.11.16
06:31
А если:
ГДЕ ДЕНЬ(КурсыВалют.Период)=1?
5 Рэйв
 
24.11.16
06:32
+(3) Не уверен насчет срезПоследних. Помоему нужно без него
6 Romyr
 
24.11.16
06:40
(2) хммм... хорошая идея. И? Работает?
7 Mariiaki
 
24.11.16
06:47
(4) т.е.
ВЫБРАТЬ
    КурсыВалют.Период КАК Период,
    КурсыВалют.Валюта КАК Валюта,
    КурсыВалют.Курс КАК Курс,
    КурсыВалют.Валюта.Наименование КАК ВалютаНаименование
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Период МЕЖДУ &НачДата И &КонДата
    И ДЕНЬ(КурсыВалют.Период)=1

УПОРЯДОЧИТЬ ПО
    ВалютаНаименование,
    Период
8 Mariiaki
 
24.11.16
08:09
(0) А если первая запись в месяце не первым днем, то
ВЫБРАТЬ РАЗЛИЧНЫЕ
    МЕСЯЦ(КурсыВалют.Период) КАК Мес,
    ГОД(КурсыВалют.Период) КАК Год
ПОМЕСТИТЬ МЕСЯЦ
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Период МЕЖДУ &Н И &К
;

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

СГРУППИРОВАТЬ ПО
    МЕСЯЦ.Мес,
    МЕСЯЦ.Год
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КурсыВалют.Период КАК Дата,
    КурсыВалют.Валюта,
    КурсыВалют.Курс,
    КурсыВалют.Валюта.Наименование
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
        ПО (НАЧАЛОПЕРИОДА(КурсыВалют.Период, ДЕНЬ) = НАЧАЛОПЕРИОДА(ВТ.Период, ДЕНЬ))
9 falselight
 
24.11.16
08:20
(8) Начало месяца, первым числом же всегда?!!!
10 Mariiaki
 
24.11.16
08:24
(9) Начало месяца действительно первое число.
Но первая запись в РС может быть и 2 и 28 числа.
11 d546
 
24.11.16
08:34
(10) а почему тогда сделан выбор в пользу срез первых, а не срез последних?
12 Mariiaki
 
24.11.16
08:34
(3) Этот вариант лучше, только без срезПоследних
13 Mariiaki
 
24.11.16
08:37
(11) не использовался срез, но мой вариант не к чему, когда можно как в (3).
Проглядела сначала.
14 d546
 
24.11.16
08:55
(13) у вас в запросе, по сути, реализован принцип СрезПервых, но в урезанном виде в пределах месяца без использование таблицы СрезПервых.

по мне, вообще лучше для получения периодов, первая ВТ в вашем запросе, использовать производственный календарь.
а дальше срез последних по периодам (реализуется без использования таблицы СрезПоследних, на мисте много таких статей). это будет универсально.
15 Mariiaki
 
24.11.16
08:55
(13) Хотя нет, если записи нет первого числа то месяц выпадает из выборки.
Но это уже смотря какая задача стоит.
Если только 1ое число то да, если первые записи в месяце то (8)
16 d546
 
24.11.16
08:56
но тут все зависит от поставленной задачи
17 Mariiaki
 
24.11.16
08:59
(14) а пример можно?
18 d546
 
24.11.16
09:05
(17) Срез последних на каждую дату в запросе Книга знаний: Срез последних на каждую дату в запросе

а какого рода пример надо?
19 Mariiaki
 
24.11.16
09:11
(18) действительно все от задачи зависит.
Если нужны первые записи, то вроде логично что СрезПервых.

пример со СрезПоследних для получения первых записей.
20 d546
 
24.11.16
10:07
(19) зачем получать срез первых через срез последних?

просто для расчетов с валютой более актуален срез последних (курс на прошедшую дату), чем срез первых (курс на будущую дату)

[code]
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(КурсыВалют.Период, МЕСЯЦ) КАК НачалоМесяца
ПОМЕСТИТЬ ВТПериоды
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
;

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

СГРУППИРОВАТЬ ПО
    Периоды.НачалоМесяца,
    КурсыВалют.Валюта
;

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

УПОРЯДОЧИТЬ ПО
    НачалоМесяца,
    Валюта,
    ПериодКурса
[/code]
21 Mariiaki
 
24.11.16
10:34
(20) т.е. если 1ого числа нет курса, то действует последний введенный до 1ого числа, а не следующий (будущий).
Я Вас поняла ). И ведь действительно Вы правы.