Вход | Регистрация
 

Срез последних на каждую дату

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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


потом Интервалы соединяешь с датами и группироуешь
   azernot
 
6 - 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?
   azernot
 
7 - 09.11.18 - 18:01
Вот запрос получающий полный срез последних на каждую дату периода.

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

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


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

////////////////////////////////////////////////////////////////////////////////

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

////////////////////////////////////////////////////////////////////////////////

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

УПОРЯДОЧИТЬ ПО
    ДатаКалендаря
ИТОГИ
    КОЛИЧЕСТВО(Сотрудник)
ПО
    ДатаКалендаря
   Ns33
 
8 - 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) КАК Кво
ИЗ
    ВТСоед КАК ВТСоед

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно задать вопрос "Как сделать?" и получить кучу ответов, что тебе это делать не надо. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует