|
Как в ЗУП 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/
Здесь расписано как по параметрам получить сотрудников. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |