Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

ЗУП 3. Получить сотрудников по подразделнию

ЗУП 3. Получить сотрудников по подразделнию
Я
   егаис
 
03.12.18 - 20:50
На входе имеем организацию, подразделение, датаначала, датаокончания
нужно вернуть сотрудников, работавших в организации и подразделение за указанный период, период работы надо тоже вернуть

1. Вариант 1
    ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолученияСотрудников.НачалоПериода    = ПериодНачало;
    ПараметрыПолученияСотрудников.ОкончаниеПериода = ПериодОкончание;
    ПараметрыПолученияСотрудников.Организация      = Организация;
    ПараметрыПолученияСотрудников.Подразделение    = Подразделение;

    СотрудникОрганизаций = КадровыйУчет.СотрудникиОрганизации(Ложь, ПараметрыПолученияСотрудников);


не канает, нет данных по периоду работы

2. Вариант 2 с выборкой из регистра КадроваяИсторияСотрудниковИнтервальный работает некорректно.
 
 
   егаис
 
1 - 03.12.18 - 21:00
вариант 3
    ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолученияСотрудников.НачалоПериода    = ПериодНачало;
    ПараметрыПолученияСотрудников.ОкончаниеПериода = ПериодОкончание;
    ПараметрыПолученияСотрудников.Организация      = Организация;
    ПараметрыПолученияСотрудников.Подразделение    = Подразделение;
    
    Запрос = Новый Запрос();
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияСотрудников);
    Запрос.Текст = 
    "ВЫБРАТЬ ВТСотрудникиОрганизации.* ИЗ ВТСотрудникиОрганизации КАК ВТСотрудникиОрганизации";
    
    ВТСотрудникиОрганизации = Запрос.Выполнить().Выгрузить();


вроде бы должен отработать, но вижу, что попадают не все сотрудники.
Например, сотрудник переведен с 01.08.18 в нужное подразделение.Но он не попадает в результат запроса
   егаис
 
2 - 03.12.18 - 21:13
закрываем, глаза замылены, варинат в (1) рабочий
   егаис
 
3 - 06.12.18 - 09:51
подниму тему
столкнулся с неприятным моментом, на примере
сотрудник работает в подразделении с 02.09 по 12.09

Если сюда передать датуначала = 12.08.18 и дату окончания 23.09.18
    ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолученияСотрудников.НачалоПериода    = ПериодНачало;
    ПараметрыПолученияСотрудников.ОкончаниеПериода = ПериодОкончание;
    ПараметрыПолученияСотрудников.Организация      = Организация;
    ПараметрыПолученияСотрудников.Подразделение    = Подразделение;


то после 
Запрос = Новый Запрос();
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияСотрудников);
    Запрос.Текст = 
    "ВЫБРАТЬ ВТСотрудникиОрганизации.* ИЗ ВТСотрудникиОрганизации КАК ВТСотрудникиОрганизации";
    
    ВТСотрудникиОрганизации = Запрос.Выполнить().Выгрузить();



данные по сотруднику возвращаются
с 02.09.18 по 23.09.18
Т.е. дату начала работы в подразделении определена верно, а вот дату окончания возвращает дату переданного параметра, а не дату окончания работы в подразделении.
Кто подскажет?
   егаис
 
4 - 06.12.18 - 10:03
может есть другой алгоритм получения периода работы сотрудника в подразделении за указанный диапазон?
   mmmarat
 
5 - 06.12.18 - 10:30
(4) Первая часть у Вас сформирована правильно. Т.е. получили список сотрудников работавших в нужном подразделении в указанный период.

Далее необходимо получить периоды работы сотрудника в этом подразделении. Формируем ВТСотрудникиПериоды с периодами и передаем в процедуру:
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТСотрудникиПериоды", "Сотрудник");
ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПостроенияДляСоздатьВТИмяРегистра();
ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды("КадроваяИсторияСотрудников", Запрос.МенеджерВременныхТаблиц, Истина, ОписаниеФильтра, ПараметрыПостроения, "ВТСотрудникиИнтервалы");
   егаис
 
6 - 06.12.18 - 10:41
не понятно
это должно выглядеть так?
    ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолученияСотрудников.НачалоПериода    = ПериодНачало;
    ПараметрыПолученияСотрудников.ОкончаниеПериода = ПериодОкончание;
    ПараметрыПолученияСотрудников.Организация      = Организация;
    ПараметрыПолученияСотрудников.Подразделение    = Подразделение;

ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТСотрудникиПериоды", "Сотрудник");
ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПостроенияДляСоздатьВТИмяРегистра();
ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды("КадроваяИсторияСотрудников", Запрос.МенеджерВременныхТаблиц, Истина, ОписаниеФильтра, ПараметрыПостроения, "ВТСотрудникиИнтервалы");


ошибки возникают
   егаис
 
7 - 06.12.18 - 10:42
пропустил
    ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолученияСотрудников.НачалоПериода    = ПериодНачало;
    ПараметрыПолученияСотрудников.ОкончаниеПериода = ПериодОкончание;
    ПараметрыПолученияСотрудников.Организация      = Организация;
    ПараметрыПолученияСотрудников.Подразделение    = Подразделение;
    
    Запрос = Новый Запрос();
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияСотрудников);
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТСотрудникиПериоды", "Сотрудник");
ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПостроенияДляСоздатьВТИмяРегистра();
ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды("КадроваяИсторияСотрудников", Запрос.МенеджерВременныхТаблиц, Истина, ОписаниеФильтра, ПараметрыПостроения, "ВТСотрудникиИнтервалы");
   mmmarat
 
8 - 06.12.18 - 11:01
(7) Создайте ВТ "ВЫБРАТЬ ВТСотрудникиОрганизации.Сотрудник, &ПериодНачало КАК ДатаНачала, &ПериодОкончание КАК ДатаОкончания ПОМЕСТИТЬ ВТСотрудникиПериоды ИЗ ВТСотрудникиОрганизации".
   егаис
 
9 - 06.12.18 - 14:06
(8) спасибо, но выходит ошибка

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

    Запрос.УстановитьПараметр("ПериодНачало", ПериодНачало);
    Запрос.УстановитьПараметр("ПериодОкончание", ПериодОкончание);
    
    //ВТСотрудникиОрганизации = Запрос.Выполнить().Выгрузить();

    
    ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТСотрудникиПериоды", "Сотрудник");
    ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПостроенияДляСоздатьВТИмяРегистра();
    ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды("КадроваяИсторияСотрудников", Запрос.МенеджерВременныхТаблиц, Истина, ОписаниеФильтра, ПараметрыПостроения, "ВТСотрудникиИнтервалы");



{ОбщийМодуль.ЗарплатаКадрыПериодическиеРегистры.Модуль(217)}: Ошибка при вызове метода контекста (Выполнить)
    Запрос.Выполнить();
по причине:
{(49, 2)}: Таблица не найдена "ВТСотрудникиПериоды"
<<?>>ВТСотрудникиПериоды КАК ИзмеренияДаты
   егаис
 
10 - 06.12.18 - 14:33
(8) Марат, выручай, воде бы все верно сделал
 
 Рекламное место пустует
   mmmarat
 
11 - 06.12.18 - 15:03
(10) Забыл выполнить запрос где ВТ ВТСотрудникиПериоды формируется.
   kumena
 
12 - 06.12.18 - 15:11
а на 2.5 надо час грамотного программиста, чтобы запрос нужный написать.
а тут человек уже третьи сутки, и похоже без перерыва, бьётся!
   mmmarat
 
13 - 06.12.18 - 15:16
(12) в ЗУП 3.1 все достаточно просто при знании методов.
   Akela has missed
 
14 - 06.12.18 - 15:18
(12) так грамотного и тут на час :D
   kumena
 
15 - 06.12.18 - 15:49
> так грамотного и тут на час :D

в моем понимании, то что выше - это совсем не программирование.  программист должен знать что откуда берется. а перенесут куда-нибудь эти костыли/функции или даже переназовут, и будет плач по всей стране стоять.
   KrasnSergey
 
16 - 06.12.18 - 16:06
(15)+100500
   Akela has missed
 
17 - 06.12.18 - 16:16
(15) если это не совсем программирование, кто мешает сделать так как в твоем понимании?)
Если в 2.5 на запрос вам надо час, то тут на запрос уйдет не больше 5 минут.
   Alexandr_U1982
 
18 - 06.12.18 - 16:30
(17)+100500
   mmmarat
 
19 - 06.12.18 - 16:41
(15)
Возьмем пример.
В 3.1.4 в РС кадровой истории сотрудников был такой ресурс как "ВидЗанятости". Программисты брали в запросе срезпоследних и радовались жизни. А в 3.1.5 этот ресурс переехал в РС "ВидыЗанятостиСотрудников".
А событие для получения кадровых данных как было так и осталось "ВидЗанятости". Так кто в этом случае плакать будет.
Я не утверждаю, что от запросов нужно отказываться, но некоторые банально в регистре забывают учитывать такие ресурсы как "ДействуетДо".
   2S
 
20 - 06.12.18 - 16:44
(19) стукнись в личку

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь во втором сообщении вам дадут решение, а в двадцатом дадут правильное решение. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует