Имя: Пароль:
1C
1С v8
ЗУП 3. Получить историю подразделения за период
🠗 (Фрэнки 11.05.2020 09:58)
0 егаис
 
11.05.20
09:33
Как сейчас кошерно получать через программный интерфейс кадровую историю за период?
Например, получить историю подразделения сотрудника с 01.03.20 по 30.04.20

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