Имя: Пароль:
1C
1С v8
Подскажите запрос - непрерывные интервалы дат как собрать?
0 RomaH
 
naïve
26.03.14
12:12
Есть РС РабочееВремяСотрудников

Дата - ВидИспользованияВремени

Надо выделить непрерывные интервалы одного вида времени типа С - ПО

Т.е. таблицу вида

01/01 - Р
02/01 - Р
04/01 - Б
05/01 - Б
06/01 - Р

преобразовать к виду
01/01 - 02/01 - Р
04/01 - 05/01 - Б
06/01 - 06/01 - Р


как такое одним запросом?
1 RomaH
 
naïve
26.03.14
12:12
или СКД умеет может?
2 RomaH
 
naïve
26.03.14
12:19
соединить саму с собою по равному виду времени
и дате отличающейся на 1 день

записи с NULL - крайние

потом первые крайние записи соединить с последними крайними по условию дата >= и сгруппировать по минимуму
?
3 Ненавижу 1С
 
гуру
26.03.14
12:20
что было 03/01?
4 Ненавижу 1С
 
гуру
26.03.14
12:21
(1) это умеет даже сам запрос
5 RomaH
 
naïve
26.03.14
12:25
(3) другой вид времени не учитываемый в регистре
(4) ну так я и спрашиваю - как?
6 vmv
 
26.03.14
12:41
подписался - жду гения

будет готовый запрос - украду конеш
7 RomaH
 
naïve
26.03.14
12:46
типа так
http://listick.ru/share/wNN6t

покритикуйте
8 Ненавижу 1С
 
гуру
26.03.14
12:48
(7) нормально, у меня примерно также:

ВЫБРАТЬ
    ПодразделенияФизЛиц.ФизЛицо КАК ФизЛицо,
    ПодразделенияФизЛиц.Период КАК Период,
    ПодразделенияФизЛиц.Занятость КАК Занятость
ПОМЕСТИТЬ НачалаПериодов
ИЗ
    РегистрСведений.ПодразделенияФизЛиц КАК ПодразделенияФизЛиц
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодразделенияФизЛиц КАК ПодразделенияФизЛиц1
        ПО ПодразделенияФизЛиц.ФизЛицо = ПодразделенияФизЛиц1.ФизЛицо
            И (РАЗНОСТЬДАТ(ПодразделенияФизЛиц.Период, ПодразделенияФизЛиц1.Период, ДЕНЬ) = -1)
ГДЕ
    ПодразделенияФизЛиц.Занятость <> ЕСТЬNULL(ПодразделенияФизЛиц1.Занятость, НЕОПРЕДЕЛЕНО)

ИНДЕКСИРОВАТЬ ПО
    ФизЛицо,
    Занятость,
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПодразделенияФизЛиц.ФизЛицо КАК ФизЛицо,
    ПодразделенияФизЛиц.Период КАК Период,
    ПодразделенияФизЛиц.Занятость КАК Занятость
ПОМЕСТИТЬ ОкончанияПериодов
ИЗ
    РегистрСведений.ПодразделенияФизЛиц КАК ПодразделенияФизЛиц
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодразделенияФизЛиц КАК ПодразделенияФизЛиц1
        ПО ПодразделенияФизЛиц.ФизЛицо = ПодразделенияФизЛиц1.ФизЛицо
            И (РАЗНОСТЬДАТ(ПодразделенияФизЛиц.Период, ПодразделенияФизЛиц1.Период, ДЕНЬ) = 1)
ГДЕ
    ПодразделенияФизЛиц.Занятость <> ЕСТЬNULL(ПодразделенияФизЛиц1.Занятость, НЕОПРЕДЕЛЕНО)

ИНДЕКСИРОВАТЬ ПО
    ФизЛицо,
    Занятость,
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НачалаПериодов.ФизЛицо КАК ФизЛицо,
    НачалаПериодов.Период КАК Начало,
    МИНИМУМ(ОкончанияПериодов.Период) КАК Окончание,
    НачалаПериодов.Занятость
ИЗ
    НачалаПериодов КАК НачалаПериодов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОкончанияПериодов КАК ОкончанияПериодов
        ПО НачалаПериодов.ФизЛицо = ОкончанияПериодов.ФизЛицо
            И НачалаПериодов.Занятость = ОкончанияПериодов.Занятость
            И НачалаПериодов.Период <= ОкончанияПериодов.Период

СГРУППИРОВАТЬ ПО
    НачалаПериодов.ФизЛицо,
    НачалаПериодов.Период,
    НачалаПериодов.Занятость

УПОРЯДОЧИТЬ ПО
    ФизЛицо,
    Начало
АВТОУПОРЯДОЧИВАНИЕ
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн