Имя: Пароль:
1C
 
Разбить интервалы по месяцам в запросе
0 ЛучшийПрограммер1С
 
04.05.16
13:34
Вот к примеру

Выбрать
    Т.Дата1,
    Т.Дата2
ИЗ T


Дата1               Дата2
23.11.2013 22:46:00 25.02.2015 22:46:00
05.11.2014 9:00:00 25.02.2015 22:46:00

А надо
НомерПериода Дата1            Дата2
1 23.11.2013 22:46:00 30.11.2013 23:59:59
1 01.12.2013 00:00:00 31.12.2013 23:59:59
1 01.01.2014 00:00:00 31.01.2014 23:59:59
...
1 01.02.2015 00:00:00 25.02.2015 22:46:00
2 05.11.2014 9:00:00  30.11.2014 23:59:59
2 01.12.2014 00:00:00 31.12.2014 23:59:59
2 01.01.2015 00:00:00 31.01.2015 23:59:59
2 01.02.2015 00:00:00 25.02.2015 22:46:00
1 Nuobu
 
04.05.16
13:36
(0) Сделай таблицу месяцев и левым соединением соедини со своей.
2 RomanYS
 
04.05.16
13:37
1. подготовить таблицу с месяцами
2. соединить с исходной по условию пересечения
3 пипец
 
04.05.16
13:37
1 23.11.2013 22:46:00 30.11.2013 23:59:59


2 01.02.2015 00:00:00 25.02.2015 22:46:00  


это именно так со временем ? ))
4 ЛучшийПрограммер1С
 
04.05.16
13:39
(3) Что не так?
5 ЛучшийПрограммер1С
 
04.05.16
13:40
(2) Таблицу с месяцами надо тогда по всем годам?
6 Nuobu
 
04.05.16
13:41
(5) Да.
7 ЛучшийПрограммер1С
 
04.05.16
13:46
(6) Справочник или регистр сведений или прямо в запросе залобать?
8 Nuobu
 
04.05.16
13:48
(7) Ну, это уж как пожелаешь.
9 ЛучшийПрограммер1С
 
04.05.16
14:42
Выбрать

    Выбор когда Месяцы.НомерМесяца=0 тогда Т.Дата1 иначе НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(Т.Дата1, Месяц, Месяцы.НомерМесяца), Месяц) конец Дата1,
    Выбор когда Месяцы.НомерМесяца=РазностьДат(Т.Дата1, Т.Дата2, Месяц) тогда Т.Дата2 иначе     КонецПЕРИОДА(ДОБАВИТЬКДАТЕ(Т.Дата1, Месяц, Месяцы.НомерМесяца), Месяц) конец Дата2
    
    ИЗ
Т ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Сотни.колво * 100 + Десятки.колво * 10 + Единицы.колво КАК НомерМесяца

        ИЗ (ВЫБРАТЬ 0 КАК колво ОБЪЕДИНИТЬ ВЫБРАТЬ 1  ОБЪЕДИНИТЬ ВЫБРАТЬ 2  ОБЪЕДИНИТЬ ВЫБРАТЬ 3  ОБЪЕДИНИТЬ ВЫБРАТЬ 4
        ОБЪЕДИНИТЬ ВЫБРАТЬ 5  ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7  ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Сотни
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК колво ОБЪЕДИНИТЬ ВЫБРАТЬ 1  ОБЪЕДИНИТЬ ВЫБРАТЬ 2  ОБЪЕДИНИТЬ ВЫБРАТЬ 3  ОБЪЕДИНИТЬ ВЫБРАТЬ 4
        ОБЪЕДИНИТЬ ВЫБРАТЬ 5  ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7  ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Десятки
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК колво ОБЪЕДИНИТЬ ВЫБРАТЬ 1  ОБЪЕДИНИТЬ ВЫБРАТЬ 2  ОБЪЕДИНИТЬ ВЫБРАТЬ 3  ОБЪЕДИНИТЬ ВЫБРАТЬ 4
        ОБЪЕДИНИТЬ ВЫБРАТЬ 5  ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7  ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Единицы
        ПО (ИСТИНА)
        ) КАК Месяцы
        ПО (ДОБАВИТЬКДАТЕ(Т.Дата1, Месяц, Месяцы.НомерМесяца) МЕЖДУ Т.Дата1 И Т.Дата2)

А вот как добавить колонку для НомерПериода?
10 ЛучшийПрограммер1С
 
04.05.16
15:27
тут написано Книга знаний: Нумерация строк в запросе
но это конечно же бред такое использовать.
11 Nuobu
 
04.05.16
15:37
(10) Ну так юзай регистр сведений.
12 RomanYS
 
04.05.16
15:54
(9) чем тебе Месяцы.НомерМесяца не подходит?
13 ЛучшийПрограммер1С
 
04.05.16
15:56
(12) Надо из исходной таблицы Т
14 RomanYS
 
04.05.16
16:05
(13) ну если у тебя не тысячи записей в исходной таблице, то (10) вполне работает.

Только пронумеровать надо до соединения, учитывая (9) кажется, что ты не очень дружишь с временными таблицами.
15 ЛучшийПрограммер1С
 
04.05.16
16:19
(14) Честно говоря не очень )
16 RomanYS
 
04.05.16
16:30
(15) придется разобраться)

Для затравки, твой вложенный запрос можно заменить на врем. таблицу ЧЧ:


ВЫБРАТЬ
    1 КАК Ц
ПОМЕСТИТЬ ЦЦ
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0
;

ВЫБРАТЬ
    ЦЦ.Ц + 10 * ЦЦ1.Ц + 100 * ЦЦ2.Ц КАК Ч
ПОМЕСТИТЬ ЧЧ
ИЗ
    ЦЦ КАК ЦЦ,
    ЦЦ КАК ЦЦ1,
    ЦЦ КАК ЦЦ2
;
17 ЛучшийПрограммер1С
 
04.05.16
16:32
(16) Спасибо, попробую.