Имя: Пароль:
1C
1С v8
СрезПоследних в запросе выводит задвоения
,
0 wladimir90
 
17.01.12
12:44
Всем привет. Есть переодический (день) регистр сведений. Так получилось что в нем есть несколько записей на одну и ту же дату с одним и тем же сотрудником. И как результат в срезе последних вместо одного Иванова, выходит два Иванова, что вызывает понятные проблемы. Как можно в запросе настроить выборку так, что бы выбиралась последняя запись среза последних по сотруднику? Пока все что придумал - группировка, где все поля кроме сотрудника - Максимум. Но это мягко говоря неверно...
1 vmv
 
17.01.12
12:46
это фантастика или вы чего-то недоговариваете
2 НЕА123
 
17.01.12
12:46
(1)
измерения не только сотрудник.
3 wladimir90
 
17.01.12
12:50
(2) Точно... Организация все спутала. Но тогда вообще все непонятно - в текущей задаче мне нужны данные без контекста организации, но последняя запись.
4 Wobland
 
17.01.12
12:51
(3) ВЫБРАТЬ ПЕРВЫЕ 1 УПОРЯДОЧИТЬ ПО Период Убыв?
5 sergeev-ag-1977
 
17.01.12
12:53
Условие на Активность ? Смотрели ?
6 wladimir90
 
17.01.12
12:56
(5) Хм. Не слышал о таком. Что за активность?
(4) тогда будет вообще 1 запись, а у меня идет выборка пары десятков записей, некоторые из которых задвоены по организации...

Может так проще будет...


ВЫБРАТЬ
   МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Подразделение, ЗНАЧЕНИЕ(Справочник.Подразделения.ПустаяСсылка))) КАК Подразделение,
   МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.График, ЗНАЧЕНИЕ(Справочник.Графики.ПустаяСсылка))) КАК График,
   МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Оклад, 0)) КАК Оклад,
   ДанныеСотрудниковСрезПоследних.Сотрудник.Ссылка КАК Ссылка
ИЗ
   РегистрСведений.ДанныеСотрудников.СрезПоследних КАК ДанныеСотрудниковСрезПоследних
ГДЕ
   ДанныеСотрудниковСрезПоследних.Сотрудник.ПометкаУдаления = ЛОЖЬ
   И (ДанныеСотрудниковСрезПоследних.Сотрудник.ДатаУвольнения = &ПустаяДата
           ИЛИ ДанныеСотрудниковСрезПоследних.Сотрудник.ДатаУвольнения > &ОтборПоУвольнению)

СГРУППИРОВАТЬ ПО
   ДанныеСотрудниковСрезПоследних.Сотрудник.Ссылка
7 ChAlex
 
17.01.12
12:57
(4) Ну тогда вообще-то получите только одного сотрудника. В данном варианте без выбора Организации на все случаи решения нет. Однозначный варианты даст группировка как вы и делаете. Но данные можно получить не те которые ожидаете, если для одного и того же сотрудника по разным организациям разные данные
8 vmv
 
17.01.12
12:58
(6) у меня голова болит, сократи код на 80% - это реально
9 ChAlex
 
17.01.12
12:58
Другого не дано независимо даже на бумаге
10 Anita_Rost
 
17.01.12
13:04
(0) Тоже считаю, что не верно.

Можно в запросе
- упорядочить дату по убыванию;
- сделать группировку по сотруднику (Закладка "Итоги" в конструкторе запросов)
После выполнения запроса:
- сделать выборку по сотрудникам
- Сделать выборку по детальным записям, через оператор "если" получить первую запись
11 Ardi
 
17.01.12
13:05
Выбрать из этого регистра
Сотрудник; МАКСИМУМ(Период).
Потом объединить с этой табличкой регистр
МаксимумПериод = Период и Сотрудник = Сотрудник.

Тогда задвоятся только те, кто два раза одной датой. После этого уже можно макс. оклад.
12 Anita_Rost
 
17.01.12
13:07
(10) Т.е. будет:

ВыборкаСотрудники = Результат.Выбрать(СпособВыборки);
Пока выборкаСотрудники.Следующий() Цикл
  ВыборкаДетали = ВыборкаСотрудники.Выбрать(СпособВыборки);
  Если ВыборкаДетали.Следующий Тогда
      <тело модуля>
  КонецЕсли;
КонецЦикла
13 wladimir90
 
17.01.12
13:14
Выбрать выборку. А это идея. Спасибо.
14 НЕА123
 
17.01.12
14:01
(11)
из (0)
>несколько записей на одну и ту же дату с одним и тем же сотрудником
15 Shurjk
 
17.01.12
14:11
хмм, какая оживленная дискуссия развернулась по поводу того как выбрать из нескольких записей одну. Но меня как бы немного другой вопрос бы на месте автора волновал бы - запись с какой организацией является наиболее правильной.
16 Zaval
 
17.01.12
14:22
(0) :) СрезПоследних здесь не подходит.
Не лениться. Клавиатуру в руки - и написать этакий "СрезПоследнихПоОдномуИзмерению".
И чем скорее - тем лучше.
В ЗУПе с этим связано изрядно ошибок и тонких мест. Нпр, после повторного приема на работу такое полезет :)
17 cw014
 
17.01.12
14:24
(15) +1 - мы такое вообще бабахали на прямых запросах к скулю. Элементарщина для 1 класса

(16) +1 просто за "СрезПоследнихПоОдномуИзмерению". Я бы еще добавил "СрезПоследнихСамыйПравильныйПоОдномуИзмерению"
18 Buster007
 
17.01.12
14:26
как вообще такие ситуации появляются?) неужели нельзя сказать заказчику о том, что это неправильно и не делать какие-то рандомные выборки.
19 Shurjk
 
17.01.12
14:28
(18) А это вопросы к тем кто базу проектировал.
20 cw014
 
17.01.12
14:31
ИМХО либо ТЗ не верное либо одно из двух, так как у каждой организации на этого сотрудника два различных вида данных (графики, подразделения и т.д.) Тебе какие именно нужны? Ведь не важно когда они сделаны - они для этих ресурсов различные
21 cw014
 
17.01.12
14:31
Если непонятно, могу разжевать
22 Zaval
 
17.01.12
16:10
(18) Работа по совместительству в двух Организациях. Что странного?