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



Задача с олимпиады (запрос 1С)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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