Имя: Пароль:
1C
Спам
Как в ЗУП 3.1 программно получить список уволенных сотрудников на текущую дату
Ø (Волшебник 03.04.2023 12:58)
0 Depeche14
 
29.03.23
15:14
Добрый день!
Хочу программно получить таблицу с уволенными сотрудниками.
Пишу вот такой запрос:

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

Проблема в том, что если сотрудник был некоторое время назад уволен, а потом опять принят на работу, то таким запросом он попадает в категорию уволенных, хотя, фактически является действующим сотрудником.
Запрос отрабатывает как надо, если в качестве параметров указать значения всех измерений регистра: ГоловнаяОрганизация, Сотрудник, ФизическоеЛицо. Это не приемлемо, т.к. нужно получить выборку по всем сотрудникам, а не по одному.
1 Масянька
 
29.03.23
15:04
Шо, опять?! ©
2 unenu
 
29.03.23
15:06
методы общих модулей все получают, писать запросы по сотрудникам в зуп непрофессионально
3 Depeche14
 
29.03.23
15:07
(2) А можно ссылочку на пример работы с общими модулями для решения аналогичного вопроса?
4 Масянька
 
29.03.23
15:09
(3) Основная проблема в том, что уволенного сотрудника опять взяли на работу.
5 Depeche14
 
29.03.23
15:10
(4) Да, все верно.
6 unenu
 
29.03.23
15:10
https://infostart.ru/1c/articles/942569/

устарела чуток, но толково расжевали

ссыла ради знаний подована
7 Масянька
 
29.03.23
15:11
(6) Надобно еще и по матчасти статьи...
8 Serg_1960
 
29.03.23
15:14
(0) "Проблема в том, что если сотрудник был некоторое время назад уволен..." - то сотрудник уволен, а "был принят" - новый сотрудник (другой). Проблема в том, что "опять принят" - может (и относится) только к одному и тому же физическому лицу.
9 ptiz
 
29.03.23
15:14
(0) Т.е. тебе нужен срез последних по  физ.лицу, а не сотруднику? Тогда бери из КадроваяИсторияСотрудниковСрезПоследних ещё поле Период и достраивай сам срез.
10 Волшебник
 
модератор
29.03.23
15:15
(0) Если сотрудник уволен, то он не может быть принят. Это будет уже новый сотрудник
11 Depeche14
 
29.03.23
15:19
(10) Ну так как быть-то?
12 Гена
 
29.03.23
15:21
(11) Вы определитесь как хотите видеть на выводе ФЛ у которого есть Сотр1 и Сотр2 уволенные и Сотр3 текущий работающий?
13 Масянька
 
29.03.23
15:21
(11) Вестимо, принимать новых.
Аксиома ЗУП: одно физлицо - много сотрудников.
14 Волшебник
 
модератор
29.03.23
15:22
(11) Выберите всех работающих, потом из всех сотрудников исключите работающих, получатся уволенные.
15 Гена
 
29.03.23
15:23
(14) В справочнике сотров не могу быть игруны без всяких движений, когда баловались или дублировали и бросали?
16 Гена
 
29.03.23
15:27
Автор, что молчите?
как хотите видеть на выводе ФЛ у которого есть Сотр1 и Сотр2 уволенные и Сотр3 текущий работающий?
17 Amra
 
29.03.23
15:30
(15) А ктото сказал, что надо брать из справочника?
18 Масянька
 
29.03.23
15:31
(16) Нету у него Сотр1, Сотр2 и Сотр3...  У них один Сотр, которого увольняют - принимают, увольняют - принимают...
ИМХО...
Дай Бог, чтобы я ошибалась...
19 Depeche14
 
29.03.23
15:33
(18) Извините за задержку. Да, именно так и есть...
20 Гена
 
29.03.23
15:36
Фига ж себе... ну а уникальные табельные номера (ТН) хотя бы у них разные? Как их программе различить? Есть какая-никакая краска отличия?
21 KJlag
 
29.03.23
15:36
(19) (19) еще раз, вы на 1 объект фл держите только 1 объект сотрутдника, и если надо заново принять, то используете тот же объект сотрудника??
22 Depeche14
 
29.03.23
15:37
(21) Да, получается, что сотрудник один и тот же...
23 Dmitry77
 
29.03.23
15:37
Правильно выше написали. Определитесь что есть "список уволенных".

Это у кого есть документ увольнение? И соответственно дата увольнения в регистрах.

И список за период или на дату?
24 Depeche14
 
29.03.23
15:38
Извините, выдал неверную информацию. Табельные номера у уволенного и вновь принятого разные.
25 Amra
 
29.03.23
15:39
(19) Даже при этом этот завпрос вернет все верно, если сотрудник был уволен и принят в ту же организацию. Или у вас несколько организаций в базе, и сотр уволенный в одной и принятый в другую не должен считаться уволенным?
26 Depeche14
 
29.03.23
15:40
(23) Уволенные - это у кого есть документ Увольнение. Список должен формироваться на текущую дату.
27 Гена
 
29.03.23
15:40
(24) тогда нет проблем... краска есть - дальше дело техники
28 Dmitry77
 
29.03.23
15:40
(25) вы торопитесь. До внутренного совместительства ещё не дошли.
29 Amra
 
29.03.23
15:41
(26) К калденного и вновь принятого увольнение есть и он должен считаться уволенным
30 Depeche14
 
29.03.23
15:41
(25) Увольнение и принятие обратно по одной и той же организации.
31 Масянька
 
29.03.23
15:42
Джентельмены, я пас ©
32 Gucci76
 
29.03.23
16:01
ПараметрыСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
 
	//ПараметрыСотрудников.СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИсполнительФЛ);
	//ПараметрыСотрудников.НачалоПериода	   = ТекущаяДата();  // тогда в отбор попадут работающие на тек дату
	//ПараметрыСотрудников.ОкончаниеПериода  = ТекущаяДата();  // тогда в отбор попадут работающие на тек дату
	ПараметрыСотрудников.РаботникиПоТрудовымДоговорам = Истина;
	ПараметрыСотрудников.РаботникиПоДоговорамГПХ	   = ЛОЖЬ;
	ПараметрыСотрудников.ВыбрасыватьИсключениеДоступа = Ложь;
 

ПараметрыСотрудников.КадровыеДанные = "Организация, ДатаПриема, ДатаУвольнения,"
		+ ?(ПолучитьФункциональнуюОпцию("ИспользоватьШтатноеРасписание"), "ДолжностьПоШтатномуРасписанию", 
"Должность, Подразделение");
 
Сотрудники = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыСотрудников);


Я бы так получил
33 Depeche14
 
29.03.23
15:53
Я дико извиняюсь за свой непрофессионализм, но кто-нибудь может конкретно сказать, как решить этот вопрос: нужно сделать то-то и то-то... Подобных задач я ранее не решал.
34 Гена
 
29.03.23
16:03
(33) Я правильно понимаю, что Вы просто хотите получить список тех сотров (не физлиц), у кого есть приказ на увольнение в истории и кто сейчас не работает?
35 Depeche14
 
29.03.23
16:04
(34) Правильно. Именно так.
36 Гена
 
29.03.23
16:05
Ну тогда алгоритм мы выяснили. А вот код написать - это Вам надо просить программистов )
37 Волшебник
 
модератор
29.03.23
16:06
(26) Тогда так:

ВЫБРАТЬ
   Сотрудник,
   ФизическоеЛицо
ИЗ
   РегистрСведений.КадроваяИсторияСотрудников
ГДЕ
   ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
38 Волшебник
 
модератор
29.03.23
16:07
(37) Из этого списка можно исключить тех, кто сейчас работает. Останутся "полностью уволенные"
39 Гена
 
29.03.23
16:08
(37) сработает.
40 Depeche14
 
29.03.23
16:08
(38) Понял. Большое всем спасибо!
41 Гена
 
29.03.23
16:09
(38) у него же коды табельных номеров уникальны, к счастью. А надо ли нам дополнительно искать работающих? Вроде и так код (37) в шоколаде, нет?
42 Гена
 
29.03.23
16:10
Вы же сотров запрашиваете по коду, а не по ФИО?
43 Волшебник
 
модератор
29.03.23
16:11
(41) у них кривой учёт, так что придётся
44 SleepyHead
 
29.03.23
16:21
Если рядом не стоит суровый экзаменатор с ДТЛ, и вопрос надо решить с минимальными затратами времени на программирование

1. Запросом получаем всех сотрудников организации и выгружаем их в массив
2. Далее используем программный интерфейс ЗУП

ТЗ = КадровыйУчет.КадровыеДанныеСотрудников(Истина, массивСотрудников, "ДатаПриема,ДатаУвольнения", НаДату);

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

3. обходим ее циклом и сравниваем дату актуальности с датами приема и увольнения. Не у всех сотрудников есть дата приема, это может быть договорник. Если в дате приема NULL или пустая дата, пропускаем.
Если нет, смотрим, уже принят сотрудник относительно текущей даты актуальности или нет.
Если принят, смотрим дату увольнения - если она заполнена и в нужном диапазоне - считаем, что такого сотрудника нашли и аккуратно помещаем его в нужный ящик.

Решение далеко не идеальное с точки зрения производительности, но пока ни разу не подводило.
45 Depeche14
 
29.03.23
16:23
Ради чего все это делается. Есть список рассылки расчетных листков сотрудникам. Если сотр увольняется, нужно исключать его из рассылки, если принимается на работу, должен быть добавлен. Делается это крайне не регулярно. Актуализировать список рассылки можно либо вручную, либо с помощью обработки. Написал обработку с 2-мя кнопками: "Удалить уволенных" и "Заполнить сотрудниками". По первой из списка удаляются все уволенные на текущую дату, при нажатии на 2-ую в список добавляется получатель, если это действующий сотрудник и в списке его до сих пор не было. Проблема в том, что работники которые ранее увольнялись, а потом вновь трудоустроились удаляются из списка рассылки при нажатии кнопки "Удалить уволенных" и добавляются в список при нажатии на кнопку "Заполнить сотрудниками". Все из-за того, что этот список формируется из физических лиц, а не из сотрудников.
46 Dmitry77
 
29.03.23
16:29
К (45) дошли до изначальной постановки задачи
47 Dmitry77
 
29.03.23
16:31
Правильнее перед отправкой сотрудников формировать список работающих. И по нему отправлять.
48 Depeche14
 
29.03.23
16:35
Т.е. нужно формировать список работающих, очищать текущий список рассылки и просто перезаписывать актуальным списком работающих сотрудников?
49 Волшебник
 
модератор
29.03.23
17:18
Нужно отправлять расчётный листок в любом случае, независимо от статуса сотрудника, а эту сущность надо уничтожить:
список рассылки расчетных листков сотрудникам
50 Depeche14
 
29.03.23
16:38
(49) Что вы имеете ввиду?
51 Amra
 
29.03.23
16:39
(48) Расчетные листки стоит отправлять тем, у кого есть начисления в выбранном месяце. И пофиг, уволен или нет
52 Гена
 
29.03.23
16:41
(49) (51) эт-т-т-точно (с) красноармеец Сухов
53 Dmitry77
 
29.03.23
16:45
(51) + тем у кого начислений нет, но сотрудниками они являются (длительные больничные, декретчицы)
54 Гена
 
29.03.23
16:46
(53) зачем?
55 Гена
 
29.03.23
16:47
типа мы о вас помним, ребята? )
56 SleepyHead
 
29.03.23
16:47
(54) А чтоб знали, что они на больничном.
57 Гена
 
29.03.23
16:48
(56) смешно
58 SleepyHead
 
29.03.23
16:48
(57) А вот это зря. Потом придут и скажут - а чойт вы мне зарплату не выплатили.

Этим страдают даже профессора в вузах.
59 Amra
 
29.03.23
16:51
(58) Как они из листка узнают что они на больничном?
60 SleepyHead
 
29.03.23
16:51
(59) Будет строка с начислением, нулевой суммой и количеством дней. Но без даты.
61 Amra
 
29.03.23
16:54
(60) Там будет "отсутствие по невыясненной причине". Жалобу еще накатают, за оскорбление, их высочество же БОЛЕЛО
62 SleepyHead
 
29.03.23
16:55
(59) Зависит от того, как оформите. Но в общем вы правы, докопаться при желании можно до чего угодно.

https://cloud.mail.ru/public/7qLH/2AiT4cXJE
63 Гена
 
29.03.23
16:56
Нет, ну если ГБ так хочет. У каждой Марфушки свои погремушки.
64 SleepyHead
 
29.03.23
16:56
(61) "Жалобу еще накатают, за оскорбление, их высочество же БОЛЕЛО"

Попросим предоставить пруфы ))
65 Dmitry77
 
29.03.23
17:16
Мы сейчас этими дебрями зарплаты запутаем топикстартера окончательно.
66 Depeche14
 
29.03.23
17:08
(65) Уже...
67 kostik79
 
29.03.23
20:13
ВЫБРАТЬ
    ВложенныйЗапрос.Сотрудник КАК Сотрудник,
    ВложенныйЗапрос.ФизическоеЛицо КАК ФизическоеЛицо
ИЗ
    (ВЫБРАТЬ
        КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
        КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
        МАКСИМУМ(КадроваяИсторияСотрудниковСрезПоследних.Период) КАК Период
    ИЗ
        РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ТекДата, ГоловнаяОрганизация = &Организация) КАК КадроваяИсторияСотрудниковСрезПоследних
    
    СГРУППИРОВАТЬ ПО
        КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо,
        КадроваяИсторияСотрудниковСрезПоследних.Сотрудник) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
        ПО ВложенныйЗапрос.Период = КадроваяИсторияСотрудников.Период
ГДЕ
    КадроваяИсторияСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)


Вот так попробуй.
68 kostik79
 
29.03.23
20:31
(67) Вложенным запросом из КадроваяИсторияСотрудниковСрезПоследних отбираешь сотра, физлицо и дату последнего кадрового события по ним, а потом (в основном запросе) по этой дате выбираешь только увольнения по основной таблице регистра КадроваяИсторияСотрудников.
69 ptiz
 
29.03.23
22:57
В рассылке расчетных листков самое главное - корректные адреса почты.
У нас тут "смешной" случай был. Кадры через запятую в емейлы вбили кроме личных ещё и общие адреса отделов. Прикольно получилось...
70 Akela has missed
 
29.03.23
23:56
Ну ёмаё, это же не 2.5, какая КадроваяИсторияСотрудниковСрезПоследних?
В случае необходимости простой выборки с отбором по дате приема или дате увольнения используется регистр ТекущиеКадровыеДанныеСотрудников.
Либо методы общих модулей как в (6).
71 kostik79
 
30.03.23
00:46
(70) //В случае необходимости простой выборки с отбором по дате приема или дате увольнения используется регистр ТекущиеКадровыеДанныеСотрудников//
ТекущиеКадровыеДанныеСотрудников непериодический, никаких срезов, у ТС (как я понял) один и тот же сотрудик принимается и увольняется по 100500 раз.
Можешь показать пример этой "простой выборки"?
72 kostik79
 
30.03.23
00:47
(71) + для решения задачи ТС
73 Dmitry77
 
30.03.23
00:49
https://infostart.ru/1c/articles/942569/
Здесь расписано как по параметрам получить сотрудников.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.