Имя: Пароль:
1C
1С v8
Запрос с регистра сведений выбрать Максимальное состояние
0 Geroy
 
01.12.14
15:27
Привет всем, есть запрос

"ВЫБРАТЬ
|    СостоянияСотрудниковСрезПоследних.Период,
|    СостоянияСотрудниковСрезПоследних.Сотрудник,
|    СостоянияСотрудниковСрезПоследних.Состояние,
|    СостоянияСотрудниковСрезПоследних.ДействуетДо
|ИЗ
|    РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
|ГДЕ
|    СостоянияСотрудниковСрезПоследних.Сотрудник = &Сотрудник"
;

Нужно выбрать Максимальное Состояние на текущую дату
[URL=http://radikal.ru/fp/54516b4f6768420c868e212647fd06c4][IMG]http://i003.radikal.ru/1412/32/a702c13e793bt.jpg[/IMG][/URL]

Не могу разобраться как правильно сделать запрос
1 Geroy
 
01.12.14
15:28
2 butterbean
 
01.12.14
15:28
что значит  "Максимальное Состояние на текущую дату" ??
3 Chai Nic
 
01.12.14
15:28
Как состояние может быть максимальным?
4 Geroy
 
01.12.14
15:33
ВЫБРАТЬ
|    СостоянияСотрудниковСрезПоследних.Период,
|    СостоянияСотрудниковСрезПоследних.Сотрудник,
|    СостоянияСотрудниковСрезПоследних.Состояние,
|    СостоянияСотрудниковСрезПоследних.ДействуетДо
|ИЗ
|    РегистрСведений.СостоянияСотрудников.СрезПоследних(&Дата, ) КАК СостоянияСотрудниковСрезПоследних
|ГДЕ
|    СостоянияСотрудниковСрезПоследних.Сотрудник = &Сотрудник"
;

Делал вот так сказали, что не правильно

Нужно с регистра выбрать последнее значение Состояние у сотрудника
5 Geroy
 
01.12.14
15:34
(4) Как вытащить только последнее одно значение из Регистра Сведений
6 HEKPOH
 
01.12.14
15:37
выбрать первые 1 с упорядочить по период убыв
7 Господин ПЖ
 
01.12.14
15:41
(4) сотрудника тоже в вирт. таблицу запихай
8 Geroy
 
01.12.14
15:43
(7) знаю что надо 2 таблицы и потом МАКСИМУМ выбрать
но не знаю как это написать
9 butterbean
 
01.12.14
15:44
(8) нужно просто написать РегистрСведений.СостоянияСотрудников.СрезПоследних(&Дата, Сотрудник = &Сотрудник)
10 Enders
 
01.12.14
15:55
1.Я бы сначала выбрал все актуальные
Это у которых значение "период" меньше текущей даты и "действует до" больше текущей даты или равно пустой дате.

2.Потом это всё сгруппировал по сотруднику и получил максимальный период
3.И напоследок к 1, внутренним присоединил 2 по сотруднику и периоду.
11 Geroy
 
01.12.14
15:56
(9) и что измениться? тоже самое что я выше написал
но это все не то
12 butterbean
 
01.12.14
15:58
(11) >> и что измениться?
перестанут говорить что это неправильно
13 Kamas
 
01.12.14
15:58
(11) не нужно в запросе писать то что 1с могет и сама сделать, если не нужно нечего сверхъестественного то срез последних самое оно
14 Enders
 
01.12.14
16:02
(12),(13) Особенно весело если статус - это измерение)
15 Geroy
 
01.12.14
16:04
(10)
Запрос = Новый Запрос;        
Запрос.Текст =
        
"ВЫБРАТЬ
|    СостоянияСотрудниковСрезПоследних.Период,
|    СостоянияСотрудниковСрезПоследних.Сотрудник,
|    СостоянияСотрудниковСрезПоследних.Состояние,
|    СостоянияСотрудниковСрезПоследних.ДействуетДо
|ИЗ
|    РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
|ГДЕ
|    СостоянияСотрудниковСрезПоследних.Сотрудник = &Сотрудник"
|    И СостоянияСотрудниковСрезПоследних.Период < &Период
|    И СостоянияСотрудниковСрезПоследних.ДействуетДо > &ДействуетДо"
;
        
Запрос.УстановитьПараметр("Сотрудник",ВыборкаДетальныеЗаписи.Сотрудник);
Запрос.УстановитьПараметр("Период",ТекущаяДата());
Запрос.УстановитьПараметр("ДействуетДо",ТекущаяДата());

Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();

Сначала сделал вот так
Но мне сказали что нужно сделать через 2 таблицы и выбрать МАКСИМУМ, если не трудно подскажи как именно
16 Geroy
 
01.12.14
16:05
(14) Состояние это ресурс
17 dk
 
01.12.14
16:07
нарисуй пример
исходные строки ...
нужно получить таблицу вида ...
18 singlych
 
01.12.14
16:08
(15) "ВыборкаДетальныеЗаписи.Сотрудник" - Запрос в цикле по выборке предыдущего запроса?
19 HEKPOH
 
01.12.14
16:08
(15) "Но мне сказали что нужно сделать через 2 таблицы и выбрать МАКСИМУМ..."

кто сказал?
20 Enders
 
01.12.14
16:08
(16) Хоть что-то радует) А кто говорит то?

(15) А зачем две переменных с одним и тем же значением?
Почему нельзя использовать 1 параметр "Период"

Ну а так я уже описал
В (15) твою выборку помещаешь в ВТ1
Дальше в этом же запросе выбираешь сотрудника и период из ВТ1, группируешь по сотруднику и период в максимум. Помещаешь в ВТ2
Соединяешь ВТ1 и ВТ2 внутренним по сотруднику и периоду. Усё
21 Geroy
 
01.12.14
16:10
(18) Да
(20) Всё верно вы описали , но я не знаю как сделать
Можно пример какой нибудь , чтоб близко был приближен к моему
22 Enders
 
01.12.14
16:13
(21) За запрос в цикле, обычно расстреливают)
Вы лучше пишите, что у вас не получается, а то как-то лениво делать за вас работу)
23 Geroy
 
01.12.14
16:19
(22)не получается Конструктором запроса все это реализовать
24 Enders
 
01.12.14
16:51
(23) Не получается конструктором - пиши руками.
Что конкретно не получается? Поместить первую выборку в ВТ
Выбрать из Вт, Сгруппировать?
25 vhl
 
01.12.14
17:01
зависит от того что есть измерения, а что - ресурсы
26 Enders
 
01.12.14
17:17
(25) Судя по (16)
     Период, Сотрудник - измерения;
     Статус - ресурс;
     ДатаДо - или реквизит, или ресурс.
27 Geroy
 
02.12.14
08:11
(26) ДействуетДо ресурс
28 Geroy
 
02.12.14
09:23
(26) вроде бы разобрался

ВЫБРАТЬ
    СостоянияСотрудниковСрезПоследних.Период,
    СостоянияСотрудниковСрезПоследних.Сотрудник,
    СостоянияСотрудниковСрезПоследних.Состояние,
    СостоянияСотрудниковСрезПоследних.ДействуетДо
ПОМЕСТИТЬ BT1
ИЗ
    РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СостоянияСотрудников.Сотрудник,
    МАКСИМУМ(СостоянияСотрудников.Период) КАК Период
ПОМЕСТИТЬ BT2
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    BT2.Период,
    BT1.Сотрудник,
    BT1.Состояние,
    BT1.ДействуетДо
ИЗ
    BT1 КАК BT1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ BT2 КАК BT2
        ПО BT1.Период = BT2.Период
            И BT1.Сотрудник = BT2.Сотрудник



Выбирает последнее состояние Сотрудника
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс