Имя: Пароль:
1C
1С v8
Разбить строки в запросе. Как?
0 Web00001
 
26.09.13
04:50
Доброго всем времени суток! Возникла проблема как решить вопрос который в сабже. К примеру результат работы запроса в котором есть вот такая строка:
Дата1             Дата2
01.01.2013        15.03.2013

Нужно получить вот такой результат:
Дата1             Дата2
01.01.2013        31.01.2013
01.02.2013        28.02.2013
01.03.2013        30.01.2013
Такое вообще возможно?
1 SeraFim
 
26.09.13
04:56
Последнюю строчку не понял.
01.03.2013        30.01.2013
Это как?
2 Web00001
 
26.09.13
04:57
забыл поправить, там 31.03.2013 так то логика не очевидна?
3 SeraFim
 
26.09.13
04:58
По логике возможен был вариант:
01.03.2013        15.03.2013
4 Trance_1C
 
26.09.13
05:01
Если поле дата а нестрока, то чтобы получить начало месяца добавь поле запроса НАЧАЛОПЕРИОДА(Выборка.МояДата,"МЕСЯЦ")
а чтобы получить конец месяца: КОНЕЦПЕРИОДА(Выборка.МояДата,"МЕСЯЦ")
5 Web00001
 
26.09.13
05:02
да ) именно он, не выспался что ли
6 Web00001
 
26.09.13
05:04
(4)а как получить три строки? или две? или не разбивать если период укладывается в месяц? Так то я в курсе про функцию КОНЕЦПЕРИОДА
(5) к (3)
7 SeraFim
 
26.09.13
05:05
Как-то так
Нужна таблица с месяцами (Колонки НачалоМесяца, КонецМесяца).

Выбрать
    ВТМесяцы.НачалоМесяца КАК Дата1,
    ВТМесяцы.КонецМесяца КАК Дата2
Из Таб КАК Таб
    ВнутреннееСоединение ВТМесяцы КАК ВТМесяцы
    ПО (ВТМесяцы.НачалоМесяца Между Таб.Дата1 и Таб.Дата2)
    ИЛИ (ВТМесяцы.КонецМесяца Между Таб.Дата1 и Таб.Дата2)
8 SeraFim
 
26.09.13
05:09
(5)блин, значит (7) - не то)
А задача - разбить строки именно в запросе?
Можно же программно потом обработать
9 Web00001
 
26.09.13
05:12
Это временная таблица, большого запроса. Идеальный вариант переписать часть запроса который формирует эту таблицу, но видимо не судьба. Наверно придется подсовывать ему готовую обработанную таблицу.
10 SeraFim
 
26.09.13
05:15

Выбрать
    ВложенныйЗапрос.НачалоМесяца КАК Месяц,
    МАКСИМУМ(ВложенныйЗапрос.Дата1)КАК Дата1,
    МИНИМУМ(ВложенныйЗапрос.Дата2) КАК Дата2
(Выбрать
    ВТМесяцы.НачалоМесяца КАК Месяц,
    ВТМесяцы.НачалоМесяца КАК Дата1,
    ВТМесяцы.КонецМесяца КАК Дата2

Из Таб КАК Таб

    ВнутреннееСоединение ВТМесяцы КАК ВТМесяцы

    ПО (ВТМесяцы.НачалоМесяца Между Таб.Дата1 и Таб.Дата2)
    ИЛИ (ВТМесяцы.КонецМесяца Между Таб.Дата1 и Таб.Дата2)

ОБЪЕДИНИТЬ

Выбрать
    ВТМесяцы.НачалоМесяца,
    Таб.Дата1,
    Таб.Дата2

Из Таб КАК Таб

    ВнутреннееСоединение ВТМесяцы КАК ВТМесяцы

    ПО (ВТМесяцы.НачалоМесяца Между Таб.Дата1 и Таб.Дата2)
    ИЛИ (ВТМесяцы.КонецМесяца Между Таб.Дата1 и Таб.Дата2)) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО Месяц
11 SeraFim
 
26.09.13
05:32
Вот так вот:

ВЫБРАТЬ
    ДАТАВРЕМЯ(2013, 1, 1) КАК ДАТА1,
    ДАТАВРЕМЯ(2013, 3, 15) КАК ДАТА2
ПОМЕСТИТЬ Таб
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДАТАВРЕМЯ(2013, 1, 1) КАК НачалоМесяца,
    ДАТАВРЕМЯ(2013, 1, 31) КАК КонецМесяца
ПОМЕСТИТЬ ВТМесяцы

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ДАТАВРЕМЯ(2013, 2, 1),
    ДАТАВРЕМЯ(2013, 2, 28)

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ДАТАВРЕМЯ(2013, 3, 1),
    ДАТАВРЕМЯ(2013, 3, 31)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.Месяц КАК Месяц,
    МАКСИМУМ(ВложенныйЗапрос.Дата1) КАК Дата1,
    МИНИМУМ(ВложенныйЗапрос.Дата2) КАК Дата2
ИЗ
    (ВЫБРАТЬ
        ВТМесяцы.НачалоМесяца КАК Месяц,
        ВТМесяцы.НачалоМесяца КАК Дата1,
        ВТМесяцы.КонецМесяца КАК Дата2
    ИЗ
        Таб КАК Таб
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМесяцы КАК ВТМесяцы
            ПО (ВТМесяцы.НачалоМесяца МЕЖДУ Таб.ДАТА1 И Таб.ДАТА2
                    ИЛИ ВТМесяцы.КонецМесяца МЕЖДУ Таб.ДАТА1 И Таб.ДАТА2)
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        ВТМесяцы.НачалоМесяца,
        Таб.ДАТА1,
        Таб.ДАТА2
    ИЗ
        Таб КАК Таб
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМесяцы КАК ВТМесяцы
            ПО (Таб.ДАТА1 МЕЖДУ ВТМесяцы.НачалоМесяца И ВТМесяцы.КонецМесяца)
            ИЛИ (Таб.ДАТА2 МЕЖДУ ВТМесяцы.НачалоМесяца И ВТМесяцы.КонецМесяца)) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Месяц
12 Web00001
 
26.09.13
05:32
Интересно, ) запрос правда не разбирается конструктором. Но мысль в целом догнал.
13 Web00001
 
26.09.13
05:33
(12) к (10)
14 SeraFim
 
26.09.13
05:35
Основная проблема остается:
где получить таблицу ВТМесяцы)
15 Web00001
 
26.09.13
05:38
(14) угу :( буду наверно выполнять еще раз отдельно запрос, анализировать даты и программно генерить запрос с таблицей дат. Тоже не очень прямое решение.
16 Web00001
 
26.09.13
05:39
Но за (11) спасибо. Я как то даже не подумал в эту сторону.
17 Web00001
 
26.09.13
05:48
То есть так то в целом, все равно получается программная обработка результатов запроса, как не крути блин.
18 kosts
 
26.09.13
06:04
(0) В некоторых типовых есть производственный календарь со всеми датами за год. Можно обработать её в связке с твоей таблицей и получить нужный результат.