Имя: Пароль:
1C
1С v8
Запрос для получение основного сотрудника в ЗУП
0 КатринСС
 
26.08.11
15:55
Необходимо построить список сотрудников так, чтобы там каждое физ.лицо было один раз. Сотрудника нужно выбрать основного или последнего уволившегося. Вот такой запрос в 1С не хочет выполняться:

Выбрать ФЛ.Ссылка,
   (
   ВЫБРАТЬ первые 1
       Сотр.Ссылка
   ИЗ
       Справочник.СотрудникиОрганизаций как Сотр
   Где
       (Сотр.Физлицо=ФЛ.Ссылка)и(Сотр.ДатаПриемаНаРаботу<>ДатаВремя(1,1,1))
   Упорядочить по
       (Выбор Когда Сотр.ДатаУвольнения=ДатаВремя(1,1,1) Тогда ДатаВремя(2100,1,1) Иначе Сотр.ДатаУвольнения Конец) Убыв,
       (Выбор Когда Сотр.ВидЗанятости=Значение(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы) Тогда 2
       Иначе (Выбор Когда Сотр.ВидЗанятости=Значение(Перечисление.ВидыЗанятостиВОрганизации.Совместительство) Тогда 1 Иначе 0 Конец)
       Конец) Убыв,
       Сотр.ДатаПриемаНаРаботу Убыв
   ) как Сотр
Из Справочник.ФизическиеЛица как ФЛ
1 КатринСС
 
26.08.11
16:03
1С просто не хочет выполнять вложенный запрос, как поменять запрос, чтоб получить нужный результат?
2 almar
 
26.08.11
16:04
Я бы таки делал запрос к РС РаботникиОрганизаций
3 КатринСС
 
26.08.11
16:10
(2) и что? Там тоже все совместители есть и основные, а надо угадать "самого" основного в том числе и среди уволившихся
4 IamAlexy
 
26.08.11
16:11
я может что то не понимаю, но любая группировка по сотрудникорганизации.физлицо даст ровно одно физлицо..

ибо сколько бы у вас не было совместителей и повторнопринятых - физлицо будет только одно...
5 IamAlexy
 
26.08.11
16:11
+(4) если конечно у вас не помойка в учете..
6 КатринСС
 
26.08.11
16:16
По сотруднику получить физ.лицо не проблема, проблема по физ.лицу получить основного
7 GenV
 
26.08.11
16:18
(2)+ <> ВнутреннееСовместительство и ПричинаИзмененияСостояния <> Увольнение
8 GenV
 
26.08.11
16:19
(2)+ ВидЗанятости <> ВнутреннееСовместительство и ПричинаИзмененияСостояния <> Увольнение
9 IamAlexy
 
26.08.11
16:19
проверить условие что сотрудник актуален и не совместитель?
10 КатринСС
 
26.08.11
16:21
если сотрудник совсем уволился, то получить того который последний раз уволился
11 IamAlexy
 
26.08.11
16:23
сделать таблицу сотрудник/физлицо/дата увольнения

причем если дата увольнения пустая проставить туда что то типа 3999,12,12 типа - невозможнобольшая дата :)

затем отсортировать его по дате по убыванию и выбрать первое значение...

вот тебе и последниее соостояние..

хочешь убрать отсюда совместителей - карты в руки.. условие нарисуй на заполнение таблицы..
12 GenV
 
26.08.11
16:23
(10) Ну так написал )
13 IamAlexy
 
26.08.11
16:23
ничего сложного :)
14 GenV
 
26.08.11
16:23
12+ только срез последних
15 IamAlexy
 
26.08.11
16:24
да можно вообще по справочнику сотрудники запрос сделать  :)
16 IamAlexy
 
26.08.11
16:24
один
17 КатринСС
 
26.08.11
16:25
(15,16) какой?
18 КатринСС
 
26.08.11
16:25
в (11) я так понимаю речь на о запросе?
19 КатринСС
 
26.08.11
16:25
в (11) я так понимаю речь не о запросе?
20 IamAlexy
 
26.08.11
16:26
(18) как раз речь о запросе по справочнику
21 GenV
 
26.08.11
16:27
мы не ищем легкий путей )
22 КатринСС
 
26.08.11
16:29
(20) хотя бы приблизительно текст такого запроса?
23 IamAlexy
 
26.08.11
16:29
(22) хз.. ща набросаю :)
24 КатринСС
 
26.08.11
16:53
вот такая муть получилась, вроде то что нужно, но как-то сложно:

//Работающие
Выбрать
   Сотр.Ссылка, Сотр.Физлицо как Физлицо
Из
   Справочник.СотрудникиОрганизаций как Сотр
Где
   (Сотр.ДатаУвольнения=ДатаВремя(1,1,1))и(Сотр.ВидЗанятости<>Значение(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство))
объединить все
//уволенные
Выбрать
   Сотр.Ссылка, УволенныеСДатой.Ссылка как Физлицо
Из
   Справочник.СотрудникиОрганизаций как Сотр внутреннее соединение
   (Выбрать
       Уволенные.Ссылка, Max(Сотр.ДатаУвольнения) как ДатаУвольнения
   Из
       (
       Выбрать
           ФЛ.Ссылка
       Из
           Справочник.ФизическиеЛица как ФЛ
       Где
           ФЛ.Ссылка not in (
           Выбрать
               Сотр.Физлицо как Физлицо
           Из
               Справочник.СотрудникиОрганизаций как Сотр
           Где
               (Сотр.ДатаУвольнения=ДатаВремя(1,1,1))и(Сотр.ВидЗанятости<>Значение(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство))
           )
       ) как Уволенные
       внутреннее соединение Справочник.СотрудникиОрганизаций как Сотр по Сотр.Физлицо=Уволенные.Ссылка
   Где
       Сотр.ВидЗанятости<>Значение(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
   Сгруппировать по
       Уволенные.Ссылка
   ) как УволенныеСДатой по (Сотр.Физлицо=УволенныеСДатой.Ссылка)и(Сотр.ДатаУвольнения=УволенныеСДатой.ДатаУвольнения)
Где
   Сотр.ВидЗанятости<>Значение(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
25 КатринСС
 
26.08.11
16:55
текст запроса при вставке в форум еще и искарежился :(
26 NDN
 
26.08.11
17:07
ВЫБРАТЬ
   ФизическиеЛица.Ссылка,
   ВложенныйЗапрос.Сотрудник
ИЗ
   Справочник.ФизическиеЛица КАК ФизическиеЛица
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
           РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо КАК СотрудникФизлицо
       ИЗ
           РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаСреза, ) КАК РаботникиОрганизацийСрезПоследних
       ГДЕ
           РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок > &Ноль
           И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = &ВидЗанятости) КАК ВложенныйЗапрос
       ПО ФизическиеЛица.Ссылка = ВложенныйЗапрос.СотрудникФизлицо
27 NDN
 
26.08.11
17:08
Ноль = 0
ВидЗанятости = Основное место работы
28 КатринСС
 
26.08.11
17:25
(26) не по всем физ.лицам заполнена колонка Сотрудник
29 NDN
 
26.08.11
17:27
(28) Дык уволенных-то не должно быть
30 КатринСС
 
26.08.11
17:27
а если убрать условие ЗанимаемыхСтавок > 0, то попадают в список лица не являющиеся сотрудниками, но выполнявшие работы по договорам
31 КатринСС
 
26.08.11
17:28
(29) не уволенные должны быть! (а если не должны, то зачем левое соединение делал?)
32 NDN
 
26.08.11
17:30
Чтоб уволенных вывести - убери условие на ЗанимаемыхСтавок
Чтоб подрядчиков убрать - поставь условие на ВидДоговора
Делов-то
33 КатринСС
 
26.08.11
17:41
(32) такой запрос все-таки некоторых физ.лиц по несколько раз выводит
2 + 2 = 3.9999999999999999999999999999999...