Имя: Пароль:
1C
1С v8
Регистр сведений срез последних
,
0 Len1vec
 
17.10.18
15:46
Добрый день. Разъясните, пожалуйста.
ЗУП 3.1. Был создан документ кадрового перевода, который переводил сотрудника Иванова с подразделения "Смена 1" на подразделение "Смена 2" с 15.09 по 11.10 нынешнего года, который породил в регистре сведений "КадроваяИсторияСотрудников" запись.
Имеется заполнялка в документе (не стандартном), которая подставляет сотрудника в ТЧ по указанному подразделению.

ВЫБРАТЬ
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&НачалоПериода, ) КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
    КадроваяИсторияСотрудниковСрезПоследних.Подразделение = &Подразделение

УПОРЯДОЧИТЬ ПО
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование

    Запрос.УстановитьПараметр("Подразделение", Объект.Подразделение);
    Запрос.УстановитьПараметр("НачалоПериода", Объект.Дата);


Вопрос. Должен ли добавиться в ТЧ документа сотрудник Иванов на сегодняшнее число, если указать подразделение "Смена 1"?

Я считаю, что нет, т.к. последняя запись в регистре сведений КадроваяИсторияСотрудниковСрезПоследних указана с подразделением "Смена 2".
Поэтому я изменил запрос следующим образом, который выводит данные корректно:

ВЫБРАТЬ
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&НачалоПериода, ) КАК КадроваяИсторияСотрудниковСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПервых КАК КадроваяИсторияСотрудниковСрезПервых
        ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = КадроваяИсторияСотрудниковСрезПервых.Сотрудник
ГДЕ
    ВЫБОР
            КОГДА КадроваяИсторияСотрудниковСрезПоследних.ДействуетДо >= &ТекущаяДата
                ТОГДА КадроваяИсторияСотрудниковСрезПоследних.Подразделение = &Подразделение
            ИНАЧЕ КадроваяИсторияСотрудниковСрезПервых.Подразделение = &Подразделение
        КОНЕЦ

УПОРЯДОЧИТЬ ПО
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование

    Запрос.УстановитьПараметр("Подразделение", Объект.Подразделение);
    Запрос.УстановитьПараметр("НачалоПериода", Объект.Дата);
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());

Корректен ли мой запрос?
1 piter3
 
17.10.18
16:25
гугл,представления.
2 aleks_default
 
17.10.18
16:53
(0) Срез первых без указания даты среза вернет самую первую запись регистра, а не ту что нужно - предпоследнюю.
3 Len1vec
 
18.10.18
08:18
В общем и мой запрос не корректен.
Можете, пожалуйста, помочь разобраться в этом вопросе?
4 1Сергей
 
18.10.18
08:48
Ничего не понял. Чего вам в ТЧ вставить нужно?
5 catena
 
18.10.18
09:07
А почему не воспользоваться процедурами ЗУП?
6 Len1vec
 
18.10.18
09:22
(4) Сотрудника, который в настоящий момент работает в определенном подразделении
7 Len1vec
 
18.10.18
09:24
(5) Вы про какие говорите?
8 catena
 
18.10.18
09:44
(7)Моя версия может немного отличаться от вашей, но, например, посмотрите вот эти процедуры. В коментариях к ним написано про использование.

ПараметрыПолученияСотрудников                  = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация      = Организация;
ПараметрыПолученияСотрудников.Подразделение    = Подразделение;
ПараметрыПолученияСотрудников.ОкончаниеПериода = Период;
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников);
9 aleks_default
 
18.10.18
09:50
(3) В старой версии ЗУП специально для таких случаев был ресурс ПодразделениеОкончания, в новых вроде как его уже удалили.
Можно покопаться в ЗУП, поискать как решается сейчас эта ситуация типовыми средствами. Но мне лень.
Лично я, если бы возникла такая необходимость, решил бы так:
1. Срез последних где ДействуетДо < ТекущаяДата
2. Таблица Срез последних на каждую дату в первой таблице
10 НЕА123
 
18.10.18
10:29
(0)
почти ОФФ.

в первом запросе, вторым параметром таблицы поставить
ФизическоеЛицо = ФизическоеЛицо
не спасает?
11 Len1vec
 
18.10.18
10:36
(10) немного не понял о чем Вы.
12 Len1vec
 
18.10.18
11:03
(8) В предложенном Вами решении в ТаблицаСотрудников имеются записи, которые по идее не должны присутствовать.
Пример:
Иванов изначально работал в подразделении "Смена 1". С 1 по 5 октября был кадровый перевод в "Смена 2". Сегодня заполняется документ по подразделению "Смена 2", где в ТаблицаСотрудников имеется запись Иванов, т.к. он когда был в "Смена 2". Хотя записи не должно быть.
13 piter3
 
18.10.18
11:05
не мучься ищи готовую функцию,вроде на форуме приводили примеры.Для понимания кадровая история обрастала всякими интервальными регистрами сестрами
14 catena
 
18.10.18
11:09
(12)Я же говорю, что мой вариант может отличаться от вашего. Читайте описания к процедурам в общих модулях. Смотрите, как заполняются типовые документы.

Есть мнение, что в ЗУП3 решать запросами опасно и не выгодно, во-первых, структура и логика данных может меняться, во-вторых, они действительно намудрили с регистрами, а подробного описания к каждому релизу нет.
Переучивайтесь на использование уже существующих механизмов.
15 Len1vec
 
18.10.18
11:38
(14) в любом случае спасибо огромное!
16 Temai
 
18.10.18
11:46
Может быть пригодится:

ВЫБРАТЬ
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.ГоловнаяОрганизация КАК Организация,
    КадроваяИсторияСотрудниковСрезПоследних.ГоловнаяОрганизация.ОГРН КАК ОГРН,
    КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Представление КАК ФИО,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Код КАК Код,
    КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.ИНН КАК ИНН,
    КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.СтраховойНомерПФР КАК Снилс,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.ДатаРождения КАК ДатаРождения,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.Пол КАК Пол,
    КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
    КадроваяИсторияСотрудниковСрезПоследних.ВидДоговора КАК ВидДоговора,
    ВидЗанятостиСотрудникаСрезПоследних.ВидЗанятости КАК ТипЗанятости,
    ГрафикРаботыСотрудниковСрезПоследних.ГрафикРаботы КАК ГрафикРаботы,
    КадроваяИсторияСотрудниковСрезПервых.Период КАК ДатаПриема

ИЗ
    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПервых(, ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием)) КАК КадроваяИсторияСотрудниковСрезПервых
        ПО (КадроваяИсторияСотрудниковСрезПервых.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник)
            И (КадроваяИсторияСотрудниковСрезПервых.ГоловнаяОрганизация = КадроваяИсторияСотрудниковСрезПоследних.ГоловнаяОрганизация)
            И (КадроваяИсторияСотрудниковСрезПервых.ФизическоеЛицо = КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних КАК ВидЗанятостиСотрудникаСрезПоследних
        ПО (ВидЗанятостиСотрудникаСрезПоследних.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник)
            И (ВидЗанятостиСотрудникаСрезПоследних.ГоловнаяОрганизация = КадроваяИсторияСотрудниковСрезПоследних.ГоловнаяОрганизация)
            И (ВидЗанятостиСотрудникаСрезПоследних.ФизическоеЛицо = КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикРаботыСотрудников.СрезПоследних КАК ГрафикРаботыСотрудниковСрезПоследних
        ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ГрафикРаботыСотрудниковСрезПоследних.Сотрудник
            И КадроваяИсторияСотрудниковСрезПоследних.ГоловнаяОрганизация = ГрафикРаботыСотрудниковСрезПоследних.ГоловнаяОрганизация
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Увольнение.ДополнительныеРеквизиты КАК УвольнениеДополнительныеРеквизиты
        ПО КадроваяИсторияСотрудниковСрезПоследних.Регистратор = УвольнениеДополнительныеРеквизиты.Ссылка
            И (УвольнениеДополнительныеРеквизиты.Свойство.Наименование = "Внутрифирменный перевод (Увольнения)")
17 aleks_default
 
18.10.18
11:51
(16) А может и не пригодится
18 Temai
 
18.10.18
12:12
(17) Может и так, мне не жалко