|
ЗУП3: получить всех сотрудников, относящихся к определенным подразделениям | ☑ | ||
---|---|---|---|---|
0
Айвонттубифри
20.08.19
✎
14:17
|
ЗУП3
Есть перечень подразделений. Как программно получить всех сотрудников этих подразделений, чтобы в дальнейшем с полученным списком сотрудников можно было работать типовой функцией КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ДатаОтчета); |
|||
1
Натуральный Йог
20.08.19
✎
14:20
|
(0) Никак, нужен перечень сотрудников
|
|||
2
Said_We
20.08.19
✎
14:54
|
РС.КадроваяИсторияСотрудников реквизитом идет Подразделение.
Срез на дату и фильтр по подразделению. |
|||
3
Айвонттубифри
20.08.19
✎
15:02
|
(2) Использовать в ЗУП3 РС.КадроваяИсторияСотрудников - уже не в тренде) Поскольку появился уже РС.КадроваяИсторияСотрудниковИнтервальный.
Может есть какая-то типовая функция? |
|||
4
Айвонттубифри
20.08.19
✎
15:03
|
(1) Так мне как раз сотрудников и надо получить из определенных подразделений.
|
|||
5
Натуральный Йог
20.08.19
✎
15:09
|
(4)КадровыйУчет.КадровыеДанныеСотрудников()
оно? |
|||
6
sqr4
20.08.19
✎
15:14
|
(0) очевидно что туда нужно загнать весь список сотрудников и отобрать только тех, у которых нужные подразделения. В плане производительности, конечно лучше запрос к интервальному, в плане долговечности неуверен)
|
|||
7
unenu
20.08.19
✎
15:39
|
(0)
// // Этот метод содержит запрос получения физлиц разрешенных подразделений. // Этот запрос можно использовать для контроля прав при попытке доступа к физлицам // и для модификации запросов списков путем установки фильтров с использованием временной таблицы этого метода. // // Логика запроса временной таблицы физических лиц разрешенных подразделений получена из динамически сформированного типового запроса списка // "Сотрудники.ФормаВыбора" версии 3.1.10.78. Если в дальнейшем, логика станет другой, то этот запроос необходимо будет переписать. // Все-таки это проще, чем "тонуть" в гроздьях добавленных ролей и искать где права не "срослись". // Функция Расш1_Получить_ТекстСекции_ВтФизЛицаРазрешенныхПодразделений(ПомещатьВоВременнуюТаблицу=Истина, ДобавитьФильтрПоФизЛицу=Ложь) Экспорт // Имя временной таблицы и имена параметров в этом методе менять нельзя! ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СправочникФизическиеЛица.Ссылка КАК Ссылка |ПОМЕСТИТЬ ВтФизЛицаРазрешенныхПодразделений |ИЗ | РегистрСведений.ОсновныеСотрудникиФизическихЛиц КАК ОсновныеСотрудникиФизическихЛиц | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК СправочникФизическиеЛица | ПО ОсновныеСотрудникиФизическихЛиц.ФизическоеЛицо = СправочникФизическиеЛица.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников | ПО ОсновныеСотрудникиФизическихЛиц.Сотрудник = ДанныеДляПодбораСотрудников.Сотрудник | И (ДанныеДляПодбораСотрудников.ИдентификаторЗаписи В | (ВЫБРАТЬ ПЕРВЫЕ 1 | Т.ИдентификаторЗаписи | ИЗ | РегистрСведений.ДанныеДляПодбораСотрудников КАК Т | ГДЕ | ОсновныеСотрудникиФизическихЛиц.Сотрудник = Т.Сотрудник | И Т.ЭтоГоловнойСотрудник | И ВЫБОР | КОГДА ОсновныеСотрудникиФизическихЛиц.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1) | ТОГДА Т.Начало | ИНАЧЕ ОсновныеСотрудникиФизическихЛиц.ДатаНачала | КОНЕЦ МЕЖДУ НАЧАЛОПЕРИОДА(Т.Начало, ДЕНЬ) И КОНЕЦПЕРИОДА(ВЫБОР | КОГДА Т.Окончание = ДАТАВРЕМЯ(1, 1, 1) | ТОГДА ОсновныеСотрудникиФизическихЛиц.ДатаОкончания | ИНАЧЕ Т.Окончание | КОНЕЦ, ДЕНЬ) | И Т.Подразделение В ИЕРАРХИИ (&Расш1__мРазрешенныеПодразделения) | УПОРЯДОЧИТЬ ПО | Т.ПоДоговоруГПХ, | Т.Начало УБЫВ, | Т.Организация, | Т.Филиал, | Т.Подразделение)) |ГДЕ | ОсновныеСотрудникиФизическихЛиц.ДатаОкончания = ДАТАВРЕМЯ(3999, 12, 31, 0, 0, 0) | И ДанныеДляПодбораСотрудников.Филиал <> ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)"; Если НЕ ПомещатьВоВременнуюТаблицу Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПОМЕСТИТЬ ВтФизЛицаРазрешенныхПодразделений", ""); КонецЕсли; Если ДобавитьФильтрПоФизЛицу Тогда ТекстЗапроса = ТекстЗапроса + " | И СправочникФизическиеЛица.Ссылка = &Расш1__ФизЛицо"; КонецЕсли; Возврат ТекстЗапроса; КонецФункции Функция Расш1_ФизЛицоРазрешенное(ФизЛицо) Экспорт Если НЕ ЗначениеЗаполнено(ФизЛицо) Тогда Возврат Истина; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = Расш1_Получить_ТекстСекции_ВтФизЛицаРазрешенныхПодразделений(Ложь, Истина); Запрос.УстановитьПараметр("Расш1__ФизЛицо", ФизЛицо); Запрос.УстановитьПараметр("Расш1__мРазрешенныеПодразделения", Расш1_ПраваДоступаСервер.ПолучитьРазрешенныеПодразделения()); Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции |
|||
8
sqr4
20.08.19
✎
15:43
|
(7) все сломается, когда нужно будет прошлую дату ввести
|
|||
9
unenu
20.08.19
✎
15:47
|
(8) работает четко, диспут вести лень - 100 пользовтелей ЗУПа не заметили, что-то сломалось в ограничениях списков.
т |
|||
10
unenu
20.08.19
✎
15:49
|
да и при чем тут дата? если посмотреть этот "типовой" запрос, то поля с датой там константы и ничего вводить не надо
|
|||
11
Grekos2
20.08.19
✎
15:54
|
а почему неправильно воспользоваться регистром сведений - КадроваяИсторияСотрудников ?
|
|||
12
unenu
20.08.19
✎
15:55
|
(11) он устарел и выполняет декоративные функции пока не выпилили совсем
|
|||
13
sqr4
20.08.19
✎
15:56
|
(9) в том что мне надо показать кадрвые данные за 2018 год, ваш запрос выдаст только текущие данные, так что в качестве универсального, ваш метод - пшик
|
|||
14
sqr4
20.08.19
✎
15:59
|
Для динамического списка, да отлично, поэтому и сделано так в типовой, но для какого либо отчета, данный метод не подходит.
|
|||
15
unenu
20.08.19
✎
16:01
|
(13) а вы попробуйте подумать над текстом запроса, испытать, посмотреть на результат и потом уже
аргументированно делать категоричные заявления. повторяю - запрос не мой, а чуток урезанный из типового - результат испытан в реале. усехов |
|||
16
unenu
20.08.19
✎
16:03
|
(14) если дружить с головой, то можно и в отчет.
а так, да - универсальных решений не существует, но это не повод их не искать. |
|||
17
sqr4
20.08.19
✎
16:12
|
(15) я вижу текст запроса, я вижу регистр из которого вы тяните данные. И если не быть тупым и посмотреть структуру регистра, а также его периодичность - "Непериодический". То сразу станет ясно, что получить историю за прошлый период из него физически невозможно. А то что он испытан в реале, это проблема испытателей, принимающих и оплачивающих данную работу.
(16) А вот 1с заявляет, что в ЗУПе как раз такая универсальная вещь есть и если посмотреть любой типовой запрос, то она становится очевидной, по наличию виртуальных таблиц "пустышек/шаблонов". И если вы, мягко говоря не компетентны, и не совсем разбираетесь в вопросе, то зачем вы спорите, да еще и переходя на оскорбления. |
|||
18
sqr4
20.08.19
✎
16:12
|
*типовой отчет
|
|||
19
d4rkmesa
20.08.19
✎
16:20
|
(0) КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения)
|
|||
20
Айвонттубифри
20.08.19
✎
16:24
|
(19) Похоже на то, что мне нужно, спасибо! А как в ПараметрыПолучения добавить список подразделений? Есть ли у кого-то что-то готовое?
|
|||
21
sqr4
20.08.19
✎
16:26
|
(20) а там есть описание этой функции
|
|||
22
sqr4
20.08.19
✎
16:27
|
(20) думаю глобальный поиск по конфе этой функции много примеров выдаст
|
|||
23
d4rkmesa
20.08.19
✎
16:29
|
(20)
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.Организация = Объект.Организация; ПараметрыПолученияСотрудников.Подразделение = Объект.Подразделение; ПараметрыПолученияСотрудников.НачалоПериода = Объект.ПериодРегистрации; ПараметрыПолученияСотрудников.ОкончаниеПериода = КонецМесяца(Объект.ПериодРегистрации); КадровыйУчетРасширенный.ПрименитьОтборПоФункциональнойОпцииВыполнятьРасчетЗарплатыПоПодразделениям(ПараметрыПолученияСотрудников); Объект.Сотрудники.Загрузить(КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников)); |
|||
24
d4rkmesa
20.08.19
✎
16:31
|
(23) Первый попавшийся кусок кода. В подразделения массив можно класть.
|
|||
25
Айвонттубифри
20.08.19
✎
16:31
|
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация = Организация; ПараметрыПолученияСотрудников.Подразделение = Подразделение; ПараметрыПолученияСотрудников.ОкончаниеПериода = Период; ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников); Как сюда передать подразделения в виде массива или ТЗ? |
|||
26
d4rkmesa
20.08.19
✎
16:32
|
(25) Создать массив и присвоить.
|
|||
27
Айвонттубифри
20.08.19
✎
16:34
|
(26) Не посмотрела ваш ответ в (24), что в качестве параметра можно подразделения в массив занести. Буду пробовать, спасибо!
|
|||
28
Said_We
20.08.19
✎
16:59
|
(3) Ну это смотря какой релиз. Я открыл тот что был под рукой. Так там нет РС.КадроваяИсторияСотрудниковИнтервальный.
Не суть важно. Важно что надо сначала из РС получить этот список. В любом случае это дата среза с фильтром по подразделению. + не знаю есть там дата окончания действия и значения окончания в этом новом РС или нет. |
|||
29
Айвонттубифри
20.08.19
✎
17:02
|
(28) Вы ошибаетесь: в ЗУП3 в корне поменялась логика программирования. Все данные для самописных отчетов крайне желательно получать типовыми функциями, а не тянуть из регистров.
|
|||
30
unenu
20.08.19
✎
17:04
|
(17) в моих сообщениях не было эмоций и оценок вашей личности - только часть моей картины мира в проекции на ЗУП.
ваш переход на личности выглядит нелепо) |
|||
31
unenu
20.08.19
✎
17:27
|
+ (28). Более того динамических списки стали декларативными, т.е. если мы откроем форму, то увидим там некие поля и настройки. При создания формы запрос списка модифицируется программно в зависимости от отборов и прав посредством методов общих модулей. Отяеты также декларативные с механизмом представлений.
Что касается регистра который я показал в запросе и невольно спровоцировал истерики, то там есть поля датаначала и датаокончания. Наличие этих полей - это признак интервальной философии учета, который разработчики ЗУПА используют вместо периодических регистров. Простая модификация условий ведет нас к "истории". Я понимаю, что кому-то ближе патефон и теплый ламповый свет периодических регистров как было в ЗИК, но в ЗУП все меньше "старой" логики. |
|||
32
Grekos2
20.08.19
✎
18:03
|
Сделал как в (25)
Выдало в том числе и уволенных. |
|||
33
Айвонттубифри
20.08.19
✎
18:15
|
(32) Я думаю, уволенных затем можно отсечь типовой функцией КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ДатаОтчета),
где проверять на заполненность ДатаУвольнения путем ИменаКадровыхДанных = "ДатаУвольнения". P.S. Возможно есть более элегантное решение... |
|||
34
unenu
20.08.19
✎
18:16
|
(32) в методах общих модулей есть параметр ВключаяРанееУволенных. где-то вы его забыли установить.
проще прочесть описания методов и использовать их параметры, сложнее рассказать как это работает. |
|||
35
mmmarat
20.08.19
✎
18:19
|
(32) замените функцию на СоздатьВт СотрудникиОрганизации, добавьте ДатаУвольнения в кадровые данные, выберите данные запросом из полученной Вт с отбором на пустую дату увольнения. Отборы по подразделениям при желании можно задать в запросе.
|
|||
36
Grekos2
20.08.19
✎
18:40
|
ПараметрыПолученияСотрудников =
КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.Организация = Организация; ПараметрыПолученияСотрудников.Подразделение = Подразделение; ПараметрыПолученияСотрудников.ОкончаниеПериода = ДатаАкт; ПараметрыПолученияСотрудников.НачалоПериода = ДатаАкт; ПараметрыПолученияСотрудников.ВключаяУволенныхНаНачалоПериода = Ложь; ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников); Вот как надо :)) !!! |
|||
37
Айвонттубифри
22.08.19
✎
18:21
|
+(25) Посмотрела, если использовать КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников), то в параметрах Подразделения в виде массива передавать нельзя, т.к. в описании написано:
/ Возвращает структуру параметров для СоздатьВТСотрудникиОрганизаций. // // Возвращаемое значение: // Структура - Содержит ключи: // Организация - СправочникСсылка.Организации, если параметр опустить в таблицу войдут все сотрудник // независимо от организации. // ОтбиратьПоГоловнойОрганизации - если Истина, то отбор по головной организации, иначе по текущей организации. // По умолчанию - ЛОЖЬ // Подразделение - СправочникСсылка.ПодразделенияОрганизаций, в таблицу войдут сотрудники указанного подразделения // и всех подразделений, подчиненных указанному, если параметр опустить в таблицу войдут все сотрудники. // СписокФизическихЛиц - Массив ссылок на элементы справочника ФизическиеЛица, если параметр опустить, // в таблицу войдут сотрудники всех физических лиц когда либо работавших в Организации. // НачалоПериода - Дата, значение по умолчанию '00010101'. Если параметр устанавливается, параметр ОкончаниеПериода // обязателен к заполнению. // ОкончаниеПериода - Дата, значение по умолчанию '00010101'. При установке должно выполняться условие // ОкончаниеПериода >= НачалоПериода. Используется для выборки кадровых данных сотрудников, если // параметр не указан, выборка будет производиться на текущую дату сеанса. // КадровыеДанные - Строка, содержит список полей кадровых данных, см. описание к функции КадровыеДанныеСотрудников. // Отборы - Массив, структур описывающих отборы сотрудников // см. ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор, // допустимые отборы описаны см. КритерииПоискаСотрудниковПоКоллекцииОтборов. // Функция ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц() Экспорт Возврат КадровыйУчетВнутренний.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); КонецФункции Как тогда отобрать сотрудников определенных подразделений (подразделения уже в массиве есть)? Ниже код не срабатывает: ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.Подразделение = мПодразделений; //вот здесь массив подразделений ПараметрыПолученияСотрудников.ОкончаниеПериода = НаДату; ПараметрыПолученияСотрудников.ВключаяУволенныхНаНачалоПериода = Ложь; ПараметрыПолученияСотрудников.РаботникиПоДоговорамГПХ = Ложь; ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников); |
|||
38
Grekos2
22.08.19
✎
18:32
|
(37) у меня (36) срабатывает.
Проверял для одного подразделения и для более чем одного. ПараметрыПолученияСотрудников.Подразделение = Подразделение; //тут у меня массив |
|||
39
Айвонттубифри
22.08.19
✎
18:36
|
Попробовала запихнуть массив подразделений (мПодразделений) в Отбор, тоже ошибку выдает:
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); //ПараметрыПолученияСотрудников.Подразделение = мПодразделений; //вот здесь массив подразделений ПараметрыПолученияСотрудников.ОкончаниеПериода = НаДату; ПараметрыПолученияСотрудников.ВключаяУволенныхНаНачалоПериода = Ложь; ПараметрыПолученияСотрудников.РаботникиПоДоговорамГПХ = Ложь; //дописала(+ Отборы = Новый Массив; ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "Подразделение", "В", мПодразделений); ПараметрыПолученияСотрудников.Отборы = Отборы; //+) ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников); |
|||
40
Айвонттубифри
22.08.19
✎
18:44
|
+(39) Выдает ошибку:
{ОбщийМодуль.КадровыйУчет.Модуль(2785)}: Ошибка при вызове метода контекста (Выполнить) Запрос.Выполнить(); по причине: {(76, 37)}: Неверные параметры И (РегистрСведений.Подразделение В(<<?>>&ВТСотрудникиПоУсловиямПоиска_Параметр1)) |
|||
41
Grekos2
22.08.19
✎
18:47
|
Версия 3.1.10.78
|
|||
42
Айвонттубифри
22.08.19
✎
18:49
|
(41) Нет, версия ЗУП 3.1.9.187 у меня.
|
|||
43
Grekos2
22.08.19
✎
18:52
|
Возможно дело в этом.
У меня определенно срабатывает код в (36) |
|||
44
Айвонттубифри
22.08.19
✎
18:56
|
(43) Странно... Но мне как-то надо решить эту проблему ((
|
|||
45
d4rkmesa
22.08.19
✎
21:34
|
(43) Вряд ли, я тестил на 3.1.8, все получилось.
(44) Скорее всего дело в типе. Там нужен массив, скорее всего, ну или список значений, как в обычных запросах. Отборы, как вы создаете, нужны для других процедур, когда нужно заполнить ВТ менеджера запросов. Как и в (36), код работает: ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.Организация = Справочники.Организации.ОрганизацияПоУмолчанию(); ПараметрыПолученияСотрудников.Подразделение = Объект.Подразделения; //реквизит типа СписокЗначений ПараметрыПолученияСотрудников.НачалоПериода = ТекущаяДатаСеанса(); ПараметрыПолученияСотрудников.ОкончаниеПериода = ТекущаяДатаСеанса(); ПараметрыПолученияСотрудников.ВключаяУволенныхНаНачалоПериода = Ложь; ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников); Сообщить(ТаблицаСотрудников.Количество()); |
|||
46
Айвонттубифри
23.08.19
✎
12:04
|
(45) Разобралась, все заработало! Массив подразделений в качестве параметра в функции КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников) передавать можно! У меня была ошибка при создании массива в другом коде.
Всем СПАСИБО!!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |