Имя: Пароль:
1C
 
Задачка. Запрос. Из последовательности дат получить периоды
,
0 Nikulin
 
10.12.15
16:19
Есть задачка. Ломаю мозг...
Имеется регистр сведений типа
Сотрудник1 Дата1 (принят)
Сотрудник1 ПустаяДата2 (уволен)
Сотрудник1 Дата3 (опять принят)
Сотрудник2 Дата4 (на это место принят другой сотрудник, т.е предыдущий уволен)

Сто нужно получить:
Талицу периодов работы в виде Сотрудник, принят, уволен (будет 3 строки):
Сотрудник1 Дата1 Дата2
Сотрудник1 Дата3 Дата4
Сотрудник2 Дата4

Думаю это сделать все в виде запроса, но пока что то никак не придумаю.
1 Лефмихалыч
 
10.12.15
16:22
соединить таблицу саму с собой по условию
Т1.Дата < Т2.Дата
потом выбрать минимум и максимум этих дат
потом - тупо РАЗНОСТЬДАТ(Т2.Дата, Т1.Дата, День)
ну, или что там тебе надо
2 salvator
 
10.12.15
16:22
Статус (принят, уволен) в регистре хранится как-то?
3 Жан Пердежон
 
10.12.15
16:23
(0) все поля регистра смотри, там еще 1 дата должна быть
4 saaken
 
10.12.15
16:24
тэта
5 Nikulin
 
10.12.15
16:26
Это не типовой регистр состояния работников или подобные. это другой регистр. нет статусов =(
Только физ. лица и даты (пустые или не пустые)
6 RomanYS
 
10.12.15
16:31
(5) тогда ты сотрудника второй раз не уволишь)
пустые дата - а как узнать дату увольнения?
7 Живой Ископаемый
 
10.12.15
16:35
8 Лефмихалыч
 
10.12.15
16:41
(0) ты так хочешь?
9 Живой Ископаемый
 
10.12.15
16:42
2(8) Я так хотел, рассказывай.
10 Лефмихалыч
 
10.12.15
16:43
ВЫБРАТЬ
    ТаблицаДат.Объект,
    ТаблицаДат.Дата
ПОМЕСТИТЬ ТЗ
ИЗ
    РегистрСведений.ТаблицаДат КАК ТаблицаДат
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т1.Объект КАК Объект,
    Т1.Дата КАК НачДата,
    МИНИМУМ(Т2.Дата) КАК КонДата
ИЗ
    ТЗ КАК Т1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК Т2
        ПО Т1.Объект = Т2.Объект
            И Т1.Дата < Т2.Дата

СГРУППИРОВАТЬ ПО
    Т1.Объект,
    Т1.Дата

УПОРЯДОЧИТЬ ПО
    Объект,
    НачДата
11 Nikulin
 
10.12.15
16:43
(8) почти. первой строчки не будет Точней она будет всегда с датой...
14 Лефмихалыч
 
10.12.15
16:44
(11) ВЫБОР КОГДА ТОГДА добавь в запрос (10)
15 Nikulin
 
10.12.15
16:49
Спасибо за варианты. сейчас буду пробовать.
16 Живой Ископаемый
 
10.12.15
16:50
2(10) Сенкс... По-моему когда я спрашивал, не было еще пакетных запросов. хм...
17 Лефмихалыч
 
10.12.15
16:51
(16) на то ты и ископаемый :)
18 Nikulin
 
10.12.15
17:02
(10) Не получается последняя строка, когда дата окончания пустая.
т.е. принят но не уволен.
19 RomanYS
 
10.12.15
17:03
(18) сделай левое соединение
20 Гёдза
 
10.12.15
17:08
(10) Только зачем временная таблица?
21 Nikulin
 
10.12.15
17:15
Ну что то получилось.

Тут походу нужно более полнее описать задачу =)
но дальше уже сам поковыряюсь.
22 Ildarovich
 
10.12.15
17:16
Вот целая статья на эту тему: http://catalog.mista.ru/public/402534/ . Называется "Быстрое определение интервалов в запросе" . Классический вариант там тоже приводится.
23 Лефмихалыч
 
10.12.15
21:31
(20) чтобы было до чего достебаться
Закон Брукера: Даже маленькая практика стоит большой теории.