Имя: Пароль:
1C
1С v8
ЗУП Кадровая история всех сотрудников подразделения
,
0 lg2marvel
 
03.12.19
11:42
Добрый день.
Хочу в таблицу получить сотрудников подразделения с переводами. К примеру если Иванов проработал на подразделении А с 02.10 по 05.10 и потом перевели на другую должность в этом же подразделении с 06.10 и перевели в подразделение Б 25.10 то получить хочу что-то такое:
Иванов 02.10 05.10 должность 1
Иванов 06.10 25.10 должность 2

Используя программный интерфейс получаю таблицу сотрудников подразделения, но проблема в том что тут не дробятся сотрудники по должностям:
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(истина, ПараметрыПолучения);

Затем запросом получаю кадровую историю по сотрудникам в периоде

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

И далее нужно обрабатывать обе таблицы.

Но можно же как-то получить человеческим способом таблицу всех сотрудников подразделения со всеми движениями?
1 El_Duke
 
гуру
03.12.19
12:17
(0) Сама схема - какой то адский цирк, по 2-3 дня в разных должностях, в разных подразделениях ...
Тора говорит что каждый раз придется подписывать допсоглашение к ТД, знакомить с должностной инструкцией, инструктировать по ТБ
Адский ад из бумажек и ненужных мероприятий

Что то в вашем датском королевстве пошло не так
2 2S
 
03.12.19
12:19
(0) странно, буквально вчера поступила такая же заявка )) город какой?
(1) у производственников это бывает, скачут как блохи из бригады в бригаду
3 2S
 
03.12.19
12:21
(0) А что в ПараметрахПолучения*
4 piter3
 
03.12.19
12:21
(2) У торгашей чаще,скачут по магазинам
5 El_Duke
 
гуру
03.12.19
12:24
(2) (4) В ЗУП 3.1 это делается через Места Работы, зачем жуть из (0) разводить - ЯННП
6 2S
 
03.12.19
12:28
(5) места работы не закрывают вопрос с территориями
7 lg2marvel
 
03.12.19
12:28
(3)
Функция ПодготовитьПараметрыПолученияСотрудников()
    ДатаНазначения = Объект.ПериодРегистрации;
    ПараметрыПолучения = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолучения.Организация = Справочники.Организации.ОрганизацияПоУмолчанию();
    ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаНазначения);
    ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаНазначения);    
    ПараметрыПолучения.Подразделение = Объект.Подразделение;    
    ПараметрыПолучения.КадровыеДанные = "ГрафикРаботы,КоличествоСтавок,Должность,ДолжностьПоШтатномуРасписанию,Подразделение,ДатаУвольнения,ДатаПриема,СостояниеПериодРегистрации,Состояние";
    возврат ПараметрыПолучения;
КонецФункции
8 lg2marvel
 
05.12.19
08:54
вопрос пока открыт
9 mmmarat
 
05.12.19
09:04
(0) что то вы перемудрили.
Вместо получения ТЗ ТаблицаСотрудников получите ВТ КадровыйУчет.СоздатьВТСотрудникиОрганизации

Создайте дополнительную ВТ с составом Сотрудник, ДатаНачала,ДатаОкончания. Поместите в ВТСотрудникиПериоды.

Далее

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

ВТСотрудникиИнтервалы - соответственно таблица в которой есть нужные вам данные.
10 lg2marvel
 
05.12.19
10:26
(9) Спасибо, буду пробовать
11 lg2marvel
 
05.12.19
11:51
Получил необходимые данные таким запросом:
ВЫБРАТЬ
    КадроваяИсторияСотрудниковИнтервальный.Подразделение КАК Подразделение,
    ВЫБОР
        КОГДА КадроваяИсторияСотрудниковИнтервальный.ДатаНачала < НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)
            ТОГДА НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)
        ИНАЧЕ КадроваяИсторияСотрудниковИнтервальный.ДатаНачала
    КОНЕЦ КАК ДатаНачала,
    ВЫБОР
        КОГДА КадроваяИсторияСотрудниковИнтервальный.ДатаОкончания > КОНЕЦПЕРИОДА(&Период, МЕСЯЦ)
            ТОГДА КОНЕЦПЕРИОДА(&Период, МЕСЯЦ)
        ИНАЧЕ ДОБАВИТЬКДАТЕ(КадроваяИсторияСотрудниковИнтервальный.ДатаОкончания, ДЕНЬ, -1)
    КОНЕЦ КАК ДатаОкончания,
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковИнтервальный.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
    КадроваяИсторияСотрудниковИнтервальный.КоличествоСтавок КАК КоличествоСтавок,
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия КАК ВидСобытия
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
ГДЕ
    КадроваяИсторияСотрудниковИнтервальный.Подразделение = &Подразделение
    И КадроваяИсторияСотрудниковИнтервальный.ДатаОкончания > НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)
    И КадроваяИсторияСотрудниковИнтервальный.ДатаНачала < КОНЕЦПЕРИОДА(&Период, МЕСЯЦ)
    И НЕ КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.ВидыКадровыхСобытий.Увольнение)

УПОРЯДОЧИТЬ ПО
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник.Наименование
Закон Брукера: Даже маленькая практика стоит большой теории.