Имя: Пароль:
1C
1С v8
Опять срез последних на каждый день
0 1Сергей
 
02.08.13
09:53
Прошу простить меня за тупизну и прочее.

Имею виртуальную таблицу "Периоды" с датами и регистр сведений "РаботникиОрганизаций". Нужно получить всех Физ лиц на каждую дату из "Периоды"


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

СГРУППИРОВАТЬ ПО
    Периоды.Период,
    РаботникиОрганизаций.Физлицо,
    РаботникиОрганизаций.ВидЗанятости


Что делаю не так, подскажите, пожалуйста!

ЗЫ Вот это http://kb.mista.ru/article.php?id=92 читал, не врубился
1 Ненавижу 1С
 
гуру
02.08.13
09:57
2 1Сергей
 
02.08.13
10:00
(1) совсем мой моск плохой стал. Объясни мне, зачем там в виртуальную таблицу ПериодыКурсов собираются данные из СрезПоследних и все курсы за период? Почему нельзя было обойтись одним срезом последних?
3 Ненавижу 1С
 
гуру
02.08.13
10:01
(2) потому что курсы на каждый день нужны
4 y22-k
 
02.08.13
10:35
5 Darklight
 
02.08.13
11:56
(3)Из собственных замеров. неожиданно, но 2-й (альтернативный) вариант оказался чуть быстрее - хотя он мне не особо понравился. (вариант от Fragster'а из(33) не быстрее)
6 1Сергей
 
02.08.13
14:56
ВЫБРАТЬ
    &НачалоПериода КАК Период,
    РаботникиОрганизацийСрезПоследних.Физлицо КАК Физлицо,
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
ПОМЕСТИТЬ РаботникиЗаПериод
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, ) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &Причинаувольнение

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РаботникиОрганизаций.Период,
    РаботникиОрганизаций.Физлицо,
    РаботникиОрганизаций.ПричинаИзмененияСостояния
ИЗ
    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
    РаботникиОрганизаций.Период > &НачалоПериода
    И РаботникиОрганизаций.Период <= &КонецПериода
;

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

СГРУППИРОВАТЬ ПО
    РаботникиЗаПериод.Физлицо,
    Периоды.Период


Если сотрудник был уволен в указанный период, то до конца периода попадает как работающий. Что переделать подскажите, плиз
7 1Сергей
 
02.08.13
15:22
победил так:


ВЫБРАТЬ
    Работники.Период,
    Работники.Физлицо,
    Работники.ПоследнееИзменение
ИЗ
    (ВЫБРАТЬ
        Периоды.Период КАК Период,
        РаботникиЗаПериод.Физлицо КАК Физлицо,
        МАКСИМУМ(РаботникиЗаПериод.Период) КАК ПоследнееИзменение
    ИЗ
        Периоды КАК Периоды
            ЛЕВОЕ СОЕДИНЕНИЕ РаботникиЗаПериод КАК РаботникиЗаПериод
            ПО Периоды.Период >= РаботникиЗаПериод.Период
    
    СГРУППИРОВАТЬ ПО
        РаботникиЗаПериод.Физлицо,
        Периоды.Период) КАК Работники
        ЛЕВОЕ СОЕДИНЕНИЕ РаботникиЗаПериод КАК РаботникиЗаПериод
        ПО Работники.Физлицо = РаботникиЗаПериод.Физлицо
            И Работники.ПоследнееИзменение = РаботникиЗаПериод.Период
ГДЕ
    РаботникиЗаПериод.ПричинаИзмененияСостояния <> &Причинаувольнение
8 1Сергей
 
02.08.13
15:26
(1) Спасибо