Имя: Пароль:
1C
 
Задача с олимпиады (запрос 1С)
,
0 SeregaMW
 
01.02.18
17:51
Добрый вечер Всем, помогите решить задачу или направить на путь ее решения.
Необходимо решить задачу запросом.
Есть n записей в справочники сотрудники так же в периодическом регистре сведений хранятся записи о событиях сотрудников (ушел в отпуск, уволен, вышел на работу и т.д.) Необходимо вывести отчет о истории событий сотрудников вида:
Сотрудник|Событие|ДатаНачала|ДатаКонца

Справочник сотрудники содержит реквизит "Наименование"

Регистр сведений периодический, измерения сотрудник, ресурсы Событие(ушел в отпуск, уволен, вышел на работу и т.д.)

Ссылка на конфигурацию http://dropmefiles.com/FlPkZ
1 H A D G E H O G s
 
01.02.18
17:54
Не о событиях, а о состояниях сотрудника
2 SeregaMW
 
01.02.18
17:55
(1) Возможно
3 SeregaMW
 
01.02.18
17:56
(1) Откуда задача как решить?
4 mistеr
 
01.02.18
17:56
(0) Рассказывай, как пробовал, что не получается.
И что за олимпиада.
5 Fram
 
01.02.18
17:57
(3) задачка с собеседований. Сам никак?
6 Неверный Параметр И
 
01.02.18
17:59
(0) > или направить на путь
Учитесь самостоятельно. Это полезно и интересно.
7 SeregaMW
 
01.02.18
17:59
(5) Ни как не могу получить дату конца события(состояния).
8 X Leshiy
 
01.02.18
18:01
(7) Ну очевидно же, что дата конца события это дата начала следующего.
9 X Leshiy
 
01.02.18
18:03
(0) Главное, пиши запрос в цикле, за это дополнительно баллы накидывают.
10 Fram
 
01.02.18
18:03
(7) могу подсказку дать. Надо соединять регистр с самим собой, и не раз.
Сам не программист?
11 SeregaMW
 
01.02.18
18:03
(8) Это очевидно как это в запросе выразить?
12 Неверный Параметр И
 
01.02.18
18:04
(7) Это за секунду до начала следующего.
При выводе в таблицу надо рисовать данные не текущей позиции выборки, а запомненной предыдущей. Последнюю обработать отдельно.
13 Неверный Параметр И
 
01.02.18
18:04
(11) зачем?
14 X Leshiy
 
01.02.18
18:05
(12) (13) Ему так задали, непонятно, нахрена)

(11) см. (10)
15 SeregaMW
 
01.02.18
18:06
(9) Нету циклов, только запрос и очень толсто тролишь!
(13) Условия задачи
16 Неверный Параметр И
 
01.02.18
18:08
(15) О, условия из (0) на ходу меняются. Сейчас, наверно, мы еще про СКД услышим
17 X Leshiy
 
01.02.18
18:08
(15) Да ну. Лично я получаю остатки по периодам строго в цикле!

В гробу я видал городить дурацкие стоэтажные запросы))
18 SeregaMW
 
01.02.18
18:09
(17) садись ДВА! Надо в запросе!
19 SeregaMW
 
01.02.18
18:10
(16) Что изменилось?
20 X Leshiy
 
01.02.18
18:11
(18) Это тебе надо, а я могу себе позволить)))
21 Неверный Параметр И
 
01.02.18
18:13
(18) Ололомпиадник, какой социальный пакет ожидает победителя? Оклад белый? (:
22 SeregaMW
 
01.02.18
18:13
(10) Согласен, но не могу понять как его так соединять?
23 mistеr
 
01.02.18
18:14
(11) Подсказываю. Для каждой записи выбираешь те, которые идут после нее. Из них выбираешь самую раннюю. Берешь ее дату и отнимаешь секунду.
24 X Leshiy
 
01.02.18
18:16
(23) И получаешь, тадам! Запрос в цикле только внутри запроса))
25 Неверный Параметр И
 
01.02.18
18:16
(23) Ты должен написать текст запроса. Это важно!
26 X Leshiy
 
01.02.18
18:16
(22) Они везде, запросы в циклах, от них не уйдешь!))
27 H A D G E H O G s
 
01.02.18
18:16
ВЫБРАТЬ
    Состояния.Сотрудник КАК Сотрудник,
    Состояния.Период КАК Период,
    Состояния.Состояние КАК Состояние,
    МИНИМУМ(ДатаСледующегоСостояния.Период) КАК ДатаБудущегоСобытия
ПОМЕСТИТЬ СотрудникиПоПериодам
ИЗ
    РегистрСведений.Состояния КАК Состояния
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Состояния КАК ДатаСледующегоСостояния
        ПО (Состояния.Сотрудник = ДатаСледующегоСостояния.Сотрудник)
            И (Состояния.Период < ДатаСледующегоСостояния.Период)

СГРУППИРОВАТЬ ПО
    Состояния.Сотрудник,
    Состояния.Период,
    Состояния.Состояние
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СотрудникиПоПериодам.Сотрудник КАК Сотрудник,
    СотрудникиПоПериодам.Период КАК Период,
    СотрудникиПоПериодам.Состояние КАК Состояние,
    Состояния.Состояние КАК БудущееСостояние
ИЗ
    СотрудникиПоПериодам КАК СотрудникиПоПериодам
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Состояния КАК Состояния
        ПО СотрудникиПоПериодам.Сотрудник = Состояния.Сотрудник
            И СотрудникиПоПериодам.ДатаБудущегоСобытия = Состояния.Период

УПОРЯДОЧИТЬ ПО
    Период
28 H A D G E H O G s
 
01.02.18
18:17
У автора 8.3.11, мы такой пока не пользуемся, накидал по быстрому конфу, уверен, автор адаптирует сам.
29 Неверный Параметр И
 
01.02.18
18:18
Ура. Осталось научить ТС быть жадным.
30 H A D G E H O G s
 
01.02.18
18:21
(0) Что за Олимпиада, Серёга? Мы хотим тоже поучаствовать? Не специальная олимпиада?
31 SeregaMW
 
01.02.18
18:39
(30) Олимпиада между студентами, а тут сам решить не могу, хотел понять суть решения,    H A D G E H O G s спасибо за помощь завтра попробую, напишу и расскажу что получилось!
32 SeregaMW
 
01.02.18
18:40
(29) А ты Неверный Параметр И, троль! Ты в жизни попробуй так с незнакомым человеком пообщаться!
33 mistеr
 
01.02.18
18:54
(27) Ну зачем так, сразу? Отнял у человека шанс немного продвинуться в профессии.
34 Sapiens_bru
 
01.02.18
19:22
"На секунду вперед" , "Самую раннюю после неё"

Одинэсники забыли про СрезПервых?
35 Йохохо
 
01.02.18
19:24
(33) нет, он тонко решил на оценку "ты списал", посмотри результат)
36 H A D G E H O G s
 
01.02.18
19:29
В край моего щита метит копьем закат.
Пыль на зубах скрипит, пыль застилает взгляд.
Я говорю: "Мой господин, прекрасный граф Роланд,
Едем другим путем!"
Скалы над пропастью встали темницами,
Здесь доверять нельзя людям и птицам, и
Я говорю: "Мой господин, прекрасный граф Роланд,
Едем другим путем!"

с Йовин.
37 H A D G E H O G s
 
01.02.18
19:29
(35) Я уверен, автор доработает.
38 Fram
 
01.02.18
19:39
(22) мдэ.. а столько хвалился в JOB: Возьму удаленную работу.
39 Fram
 
01.02.18
19:40
Мое мнение что кодер неспособный построить запрос для задачи в (0) это максимум уровень джуниора с соответствующей зп
40 brznzglwgn
 
01.02.18
19:41
Так это в ЗУПе стандартный типовой запрос на получение состояний сотрудников. Ниче там не много.. одна ВТ и 3 соединения.
41 один я дАртаньян
 
07.02.18
20:18
(0) Что за олимпиада? Вроде олиспиада была 06.02.18 и задача была другой.
42 Cyberhawk
 
07.02.18
22:11
Сколько платят за решение вопроса?
43 glebgleb
 
07.02.18
22:17
(42) Поздно. Автор отстранен решением МОК.
44 Armando
 
07.02.18
23:40
Ветку не читал. Здесь об этом?
https://its.1c.ru/db/metod81#content:2910:hdoc
45 Fragster
 
гуру
07.02.18
23:54
соединение с коррелированным подзапросом в условии. изи.
46 Fragster
 
гуру
08.02.18
00:12
но однократный проход отсортированной таблицы будет эффективнее
47 Franchiser
 
гуру
08.02.18
00:34
Нужно сделать запрос "сам с собой"
48 Peltzer
 
08.02.18
06:47
(27) Т.з. воспринято не верно.

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

СГРУППИРОВАТЬ ПО
    Состояния.Сотрудник,
    Состояния.Период,
    Состояния.Состояние
49 K1RSAN
 
08.02.18
08:32
Ну можно сделать вообще топорно. Конечно, будут кидаться тапками в это решение, но вроде должно работать.

ВЫБРАТЬ
    Состояния.Сотрудник КАК Сотрудник,
    Состояния.Состояние КАК Состояние,
    Состояния.Период КАК Дата
ИЗ
    РегистрСведений.Состояния КАК Состояния
СГРУППИРОВАТЬ ПО
    Состояния.Сотрудник,
    Состояния.Период,
    Состояния.Состояние

Макет делаешь с параметрами, тут стандартно
В обходе цикла

Если НЕ Первый Тогда
ОбластьСтрока.Параметры.ДатаКонца = Выборка.Дата;
ТабДок.Вывести(ОбластьСтрока);
КонецЕсли;
ОбластьСтрока.Параметры.Сотрудник = Выборка.Сотрудник;
//И Т.Д.

После цикла обрабатываешь последнюю выборку, а в параметр "ДатаКонца" ставишь что-нибудь типа "по текущее время"

З.Ы. если надо именно в запросе получить готовую для работы выборку - то тут ХЗ.
50 evorle145
 
08.02.18
09:13
(27) только не давно разбирался в ЗУПе с личной карточкой и там был такой же запрос для раздела 8, где надо было определить начало и конец отпусков) так что задача вполне жизненная.
51 alxxsssar
 
08.02.18
09:39
(10) Чой то не раз. Одного раза достаточно с условием меньше или равно. и максимумом потом группировать
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.