Имя: Пароль:
1C
1С v8
ЗУП 3. Получить сотрудников по подразделнию
0 егаис
 
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
может есть другой алгоритм получения периода работы сотрудника в подразделении за указанный диапазон?
5 mmmarat
 
06.12.18
10:30
(4) Первая часть у Вас сформирована правильно. Т.е. получили список сотрудников работавших в нужном подразделении в указанный период.

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

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


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

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



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

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

а вот наш коллега mmmarat утверждает что на час.

в данном случае я не себя имел ввиду, а человека, который будет это делать впервые.
лично мне на это дело хватит и пары минут, я уже сто раз это писал, и могу скопировать из предыдущих отчетов/обработок.


> Программисты брали в запросе срезпоследних и радовались жизни. А в 3.1.5 этот ресурс переехал в РС "ВидыЗанятостиСотрудников".

А вы считаете это нормально, когда программе столько лет, и разработчики никак не могут определиться со структурой?
Про то что из этого следует я пожалуй промолчу.

За разработку "ПериодаЗавершения" я бы пожал руку 1совсцам, а за то, что они навертели в третьей версии настучал бы линейкой по рукам.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший