Имя: Пароль:
1C
 
Срез последних на каждую дату
0 repin_mike
 
09.11.18
16:37
Нужно выбрать Количество(*) из РаботникиОрганизаций.СрезПоследних(&Дата) на каждый день допустим 2018 года. Только запрос без СКД. Прочитал уже две статьи в инете, ну вот http://catalog.mista.ru/public/77568/ например - только у них там цены номенклатуры и так уже есть в таблице, просто соединяют на меньше-равно. Как быть в моём случае не знаю. Натолкните на мысль плз.
1 VladZ
 
09.11.18
16:42
(0) Толкаю на мысль: нужно просто соединять на меньше-равно.
2 azernot
 
09.11.18
16:43
Правильно ли я понимаю, что надо ещё что=то типа "НЕ Состояние = Уволен"
3 repin_mike
 
09.11.18
17:03
(0) Ну ОК, вот я взял курсы валют на каждый день, они слева. И присоеднияю регистр сведений по сотрудникам. Агрегатная функция в примере - максимум. Я же не могу взять количество сотрудников, у которых дата меньше-равно, там же и принятые и уволенные и перемещённые. И как быть?
4 azernot
 
09.11.18
17:14
(3) Что тебе надо получить? Количество различных значений измерений на каждый день?
5 RomanYS
 
09.11.18
17:15
(3) ВЫБРАТЬ
    Начало.ЗанимаемыхСтавок,
    Начало.Сотрудник,
    Начало.Период
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Начало, ) КАК Начало

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

ВЫБРАТЬ
    РаботникиОрганизаций.ЗанимаемыхСтавок,
    РаботникиОрганизаций.Сотрудник,
    РаботникиОрганизаций.Период
ИЗ
    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
    РаботникиОрганизаций.Период МЕЖДУ &Начало И &Конец
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Сотрудник,
    ВТ.ЗанимаемыхСтавок,
    ВТ.Период КАК ПериодС,
    МИНИМУМ(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ВТ1.Период, СЕКУНДА, -1), &Конец)) КАК ПериодПо
ПОМЕСТИТЬ Интервалы
ИЗ
    ВТ КАК ВТ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1
        ПО ВТ.Сотрудник = ВТ1.Сотрудник
            И ВТ.Период < ВТ1.Период

СГРУППИРОВАТЬ ПО
    ВТ.Сотрудник,
    ВТ.Период,
    ВТ.ЗанимаемыхСтавок


потом Интервалы соединяешь с датами и группироуешь
6 azernot
 
09.11.18
17:17
До 01.01.18 Приняты Волков, Зайцев, Мишин в Ромашка;
приняты Краснов, Желтов, Зеленов в Василёк.

01.01.18 Принят Иванов в Ромашка
02.01.18 Принят Петров в Василёк
03.01.18 Уволен Волков из Ромашка
04.01.18 Принят Волков в Василёк
05.01.18 Уволен Краснов из Ваислёк


Какие данные должен выдать запрос за период с 01 по 05 января 18?
7 azernot
 
09.11.18
18:01
Вот запрос получающий полный срез последних на каждую дату периода.

Условия:
1. В регистре сведений РаботникиОрганизаций два измерения
- Сотрудник
- Организация

2. За указанный период должен быть заполнен производственный календарь


ВЫБРАТЬ РАЗЛИЧНЫЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ПОМЕСТИТЬ ДатыПериода
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Период,
    РаботникиОрганизацийСрезПоследних.Сотрудник,
    РаботникиОрганизацийСрезПоследних.Организация,
    РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок,
    РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
    РаботникиОрганизацийСрезПоследних.Должность,
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния,
    РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделение
ПОМЕСТИТЬ НачальныйСрезСИзменениями
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, -1), ДЕНЬ), ) КАК РаботникиОрганизацийСрезПоследних

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

ВЫБРАТЬ
    РаботникиОрганизаций.Период,
    РаботникиОрганизаций.Сотрудник,
    РаботникиОрганизаций.Организация,
    РаботникиОрганизаций.ЗанимаемыхСтавок,
    РаботникиОрганизаций.ПодразделениеОрганизации,
    РаботникиОрганизаций.Должность,
    РаботникиОрганизаций.ПричинаИзмененияСостояния,
    РаботникиОрганизаций.ОбособленноеПодразделение
ИЗ
    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
    РаботникиОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода
;

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

СГРУППИРОВАТЬ ПО
    НачальныйСрезСИзменениями.Сотрудник,
    НачальныйСрезСИзменениями.Организация,
    ДатыПериода.ДатаКалендаря
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДатыПоследнихЗначений.ДатаКалендаря КАК ДатаКалендаря,
    НачальныйСрезСИзменениями.Сотрудник КАК Сотрудник,
    НачальныйСрезСИзменениями.Организация,
    НачальныйСрезСИзменениями.ЗанимаемыхСтавок,
    НачальныйСрезСИзменениями.ПодразделениеОрганизации,
    НачальныйСрезСИзменениями.Должность,
    НачальныйСрезСИзменениями.ПричинаИзмененияСостояния,
    НачальныйСрезСИзменениями.ОбособленноеПодразделение,
    НачальныйСрезСИзменениями.Период
ИЗ
    ДатыПоследнихЗначений КАК ДатыПоследнихЗначений
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ НачальныйСрезСИзменениями КАК НачальныйСрезСИзменениями
        ПО ДатыПоследнихЗначений.Сотрудник = НачальныйСрезСИзменениями.Сотрудник
            И ДатыПоследнихЗначений.Организация = НачальныйСрезСИзменениями.Организация
            И ДатыПоследнихЗначений.Период = НачальныйСрезСИзменениями.Период

УПОРЯДОЧИТЬ ПО
    ДатаКалендаря
ИТОГИ
    КОЛИЧЕСТВО(Сотрудник)
ПО
    ДатаКалендаря
8 Ns33
 
09.11.18
18:05
Мой вариант: диапазон дат генерится(код был, вроде с мисты выдрал), считаем при принятии +1 чел, при увольнении -1 чел


ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачГода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
ПОМЕСТИТЬ ВТДаты
{ВЫБРАТЬ
    Период}
ИЗ
    (ВЫБРАТЬ
        0 КАК a
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        9) КАК aa
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК b
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК bb
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК c
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК cc
        ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            0 КАК d
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК dd
        ПО (ИСТИНА)
ГДЕ
    aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачГода, &КонГода, ДЕНЬ)
;

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

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, ДЕНЬ)

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

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

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, ДЕНЬ)

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

ВЫБРАТЬ
    &НачГода,
    КОЛИЧЕСТВО(*)
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(ДОБАВИТЬКДАТЕ(&НачГода, СЕКУНДА, -1), ) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния = &Принят
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТДаты.Период,
    ВТТабл.Кво
ПОМЕСТИТЬ ВТТаблСДатами
ИЗ
    ВТДаты КАК ВТДаты
        ЛЕВОЕ СОЕДИНЕНИЕ ВТТабл КАК ВТТабл
        ПО ВТДаты.Период = ВТТабл.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТТаблСДатами.Период КАК Период,
    ВТТаблСДатами.Кво КАК Кво,
    ВТТаблСДатами1.Период КАК Период1,
    ВТТаблСДатами1.Кво КАК Кво1
ПОМЕСТИТЬ ВТСоед
ИЗ
    ВТТаблСДатами КАК ВТТаблСДатами
        ЛЕВОЕ СОЕДИНЕНИЕ ВТТаблСДатами КАК ВТТаблСДатами1
        ПО ВТТаблСДатами.Период >= ВТТаблСДатами1.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТСоед.Период КАК Период,
    СУММА(ВТСоед.Кво1) КАК Кво
ИЗ
    ВТСоед КАК ВТСоед

СГРУППИРОВАТЬ ПО
    ВТСоед.Период

УПОРЯДОЧИТЬ ПО
    Период