Имя: Пароль:
1C
 
Как корректно проверить уволен сотрудник или нет
0 Alekzander Wolf
 
11.08.16
12:02
УПП 1.3
Как наиболее корректно проверить уволен работник или нет. На ум приходит два способа: это запрос к регистру РаботникиОрганизации и если занимаемых ставок 0, то сотрудник считается уволенным. И если совсем лень можно сделать проверку по реквизиту ДатаУвольнения в Сотруднике если Сотрудник.ДатаУвольнения <> Дата(1,1,1), то сотрудник уволен (менее корректный способ т.к. , как мы знаем, данные лучше брать из регистров). Думаю, что должна быть какая-то процедура в общем модуле, которая возвращает по параметру "сотрудник" его текущее состояние уволен он или нет. И какой способ вы используете, если вам нужно быстро отобрать уволенных (или наоборот работающих) сотрудников  с помощью консоли запросов (т.е. сделать фактически проверку работает сотрудник в данный момент или нет).
1 Горогуля
 
11.08.16
12:03
а РС КадроваяИстория - это из этой оперы?
2 piter3
 
11.08.16
12:05
(1) бинго
3 Господин ПЖ
 
11.08.16
12:06
>ДатаУвольнения в Сотруднике если Сотрудник.ДатаУвольнения <> Дата(1,1,1), то сотрудник уволен

она может не проставиться

лучше в кадровую историю смотреть
4 impulse9
 
11.08.16
12:07
(0) занимаемые ставки равны 0 у декретниц, к примеру

Сотрудник может быть уволен, а потом опять принят
5 piter3
 
11.08.16
12:08
(4) Нет.Если по уму то будет временно освобожденная,но это уже к сабжу не имеет отношение.
Может поэтому и смотриться на дату
6 Alexandr_U1982
 
11.08.16
12:11
(0) Смотреть регистр "РаботникиОрганизации" и анализировать ресурсы "ПричинаИзмененияСостояния", "ПричинаИзмененияСостоянияЗавершения"
7 piter3
 
11.08.16
12:12
РаботникиОрганизаций.СрезПоследних(НужнаяДата)
ГДЕ ПричинаИзмененияСостояния <> Увольнение
8 шаэс
 
11.08.16
12:23
(7) а в типовых запросах так?
9 piter3
 
11.08.16
12:26
(8) в смысле?
ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо КАК Физлицо
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(
            &НачалоГода,
            Организация = &ГоловнаяОрганизация
                ) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
10 Alekzander Wolf
 
11.08.16
12:28
(7) ВЫБРАТЬ РАЗЛИЧНЫЕ
    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование,
    1 КАК Количество
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаСреза, ПричинаИзмененияСостояния <> &ПричинаИзмененияСостояния) КАК РаботникиОрганизацийСрезПоследних

УПОРЯДОЧИТЬ ПО
    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование


2487 строк вышла, хотя сотрудников по отчету "Списки сотрудников организаций" на эту дату 638
11 Alexandr_U1982
 
11.08.16
12:30
(10) не так
12 Alekzander Wolf
 
11.08.16
12:30
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование,
    1 КАК Количество
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаСреза, ) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок <> 0

УПОРЯДОЧИТЬ ПО
    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование

показал 648
13 Alekzander Wolf
 
11.08.16
12:31
(11) как?
14 piter3
 
11.08.16
12:31
(12)возможно в отчете так и есть,я не помню уже
15 Alekzander Wolf
 
11.08.16
12:32
(14) все равно с типовым отчетом не сходиться
16 Alexandr_U1982
 
11.08.16
12:33
"ВЫБРАТЬ
|    РаботникиОрганизацийСрезПоследних.Сотрудник,
|    1 КАК Количество
|ИЗ
|    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаАктуальности, Организация = &Организация) КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
|    ВЫБОР
|            КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ДатаАктуальности
|                    И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
|                ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
|            ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
|        КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)"
17 piter3
 
11.08.16
12:36
упс забыл кое-что
ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Сотрудник КАК Физлицо,
    МАКСИМУМ(РаботникиОрганизацийСрезПоследних.Период) КАК Период
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоГода, Организация = &ГоловнаяОрганизация) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)

СГРУППИРОВАТЬ ПО
    РаботникиОрганизацийСрезПоследних.Сотрудник
18 Alexandr_U1982
 
11.08.16
12:41
(17) А разве срез последних регистра "РаботникиОрганизаций" по каждому сотруднику может вернуть больше, чем одна запись? ;)
19 piter3
 
11.08.16
12:42
(18) Прием,перемещение
20 Alexandr_U1982
 
11.08.16
12:44
(19) Так у тебя же срез последних. Он вернет последнее состояние сотрудника
21 Alexandr_U1982
 
11.08.16
12:45
ПричинаИзмененияСостояния - это ресурс
22 RomanYS
 
11.08.16
12:45
(19) в срезе будет только последняя запись.


Проблема в другом:
"работающий" <> "не уволенный".
23 Мимохожий Однако
 
11.08.16
12:48
Можно найти подсказку в форме справочника Сотрудники. Там есть поле со статусом. Возьми оттуда запрос или функцию отображения статуса.
24 Alexandr_U1982
 
11.08.16
12:50
(22) если нужно еще вычленить сотрудников, находящихся в декрете/отпуске/командировке/на больничном, то нужно еще анализировать регистр "СостояниеРаботниковОрганизаций".
25 Alekzander Wolf
 
11.08.16
12:54
(16) 658 показал (типовой показывает 638)
26 Alekzander Wolf
 
11.08.16
12:55
(17) 659
27 Alekzander Wolf
 
11.08.16
12:57
А функции нет такой, которая бы возвращала текущее состоянии сотрудника? Может кто-то видел, в ЗУПе насколько я знаю что-то подобное есть.
28 Alexandr_U1982
 
11.08.16
14:03
(25)Может у тебя там какие-то отборы установлены?