Поля ДатаНачала и ДатаОкончания в регистре сведений КадроваяИсторияСотрудниковИнтервальный в ЗУП3

1. paxan 15.10.19 11:05 Сейчас в теме
Здравствуйте. Пытаюсь запросом получить кадровое состояние сотрудника на конкретные даты. Использую для этого регистр КадроваяИсторияСотрудниковИнтервальный, он на первый взгляд отлично под это подходит.
Все бы ничего, но на границах дат есть проблемы, а именно непонятно почему они "залезают" всегда или иногда (пока не понял логику) на другие дни.
К примеру: человек был переведен 1 октября в другое подразделение, но у него стоит ДатаОкончания предыдущего интервала не 31 сентября 23 часа 59 минут 59 секунд, а 1 октября к примеру 5 секунд! Т.е. хрен с ним с секундами, а идет перехлест даже на другой день. Новый интервал где уже новое подразделение начинается к примеру в 6 секунд 1 октября.
Если запросом с этим работать, то куча проблем, не понятно в какой день по сути закончился интервал... те. функции КонецДня или НачалоДня тут не помогут.
Возможно конечно использовать какие-то спец-функции самой конфы для получения подобных данных, но не очень хочется логику переделывать да и хочется понять смысл почему так сделано и как с этим можно все-таки работать с этим регистром? Может сдвиг какой-то времени нужно делать изначально в запросах, чтобы такого не было, в общем нужно понимание возникновения этих секунд.
Подскажите может кто разбирался с этим.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. VmvLer 15.10.19 11:19 Сейчас в теме
(1) без паники - все в порядке, просто нужно отвыкать от технологии периодических регистров и понять
технологию интервальных.

поначалу это боль, т.к. у многих "ломка" по старой логике.
интервальная логика работает гораздо быстрее - проверено после 10 лет использования зупов, начиная с самых мохнатых.
4. paxan 15.10.19 11:35 Сейчас в теме
(3) Да паники то нет, нет понимания.. И как тогда с такими регистрами работать, если идет перехлест дат? Можете пояснить? Сама структура такого регистра понятна, почему он быстрее должен работать тоже в принципе (пытался до этого получить те-же данные с обычного регистра кадровой истории, не интервального, вот там проблемы были, с интервальным работать поприятнее). Но всю малину портят эти даты..
5. VmvLer 15.10.19 11:47 Сейчас в теме
(4) Нет смысла вести росказни, но есть алгоритм познания

1. Поищите глобальным поиском в общих модулях запросы с тегом "КадроваяИсторияСотрудниковИнтервальный"
2. Создайте папку у себя на диске "КадроваяИсторияСотрудниковИнтервальный"
3. Скопируйте в эту папку найденные запросы
4. Открывайте консоль и поочередно копируйте тексты в нее
5. Избавтесь или вбейте параметры/вт в каждом тексте так, чтобы запрос работал
6. Пристально рассматривайте результаты.
7. После пары дней таких обзоров приходит понимание.

Самое главное - не надо бояться тестов запросов и говорить себе "е-п-р-с-т, это, что за грибы!"
подтверждаю - грибы как грибы, вполне здоровые.
6. user5300 1014 15.10.19 15:23 Сейчас в теме
(1) Проще получить нужные данные из общих модулей
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, 
    ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Строка), 
    "Организация,ФизическоеЛицо,ТабельныйНомер,Подразделение,Должность,ВидЗанятости,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ДатаПриема,ДатаУвольнения,ГрафикРаботы,СтатьяФинансирования, РазрядКатегория ", ТекущаяДата());


вот полезная статья
7. paxan 15.10.19 15:37 Сейчас в теме
(6) Спасибо, особенно за ссылку, почитаю.
10. paxan 16.10.19 04:00 Сейчас в теме
(6) Посмотрел функцию КадровыйУчет.КадровыеДанныеСотрудников. Не подходит она мне, т.к. в ней выводятся кадровое состояние сотрудника на определенную дату, мне же нужно получить по итогу всех сотрудников, кто работал (был в отпуске и тп) за определенный период на подразделении, а не просто на дату.
11. nomad_irk 72 16.10.19 06:04 Сейчас в теме
(10)это можно и обычным способом, через срез последних + изменения за период узнать.
В кадровой истории не хранятся данные о состоянии сотрудника: в отпуске/на больничном/etc
12. paxan 16.10.19 10:22 Сейчас в теме
(11) Не очень понял как это можно сделать через срез последних, если напишите пример краткий буду рад. То что нет данных об отпуске мне тут не очень важно, мне нужно знать что человек числится,работает там-то за такой-то период, этого достаточно. Просто тут срез скорее всего не пойдет, т.к. есть ситуации когда к примеру человек один день отработал, а потом уволился или перевелся, но его все равно нужно выводить пусть и на текущее время он не числится в подразделении.
13. nomad_irk 72 16.10.19 10:37 Сейчас в теме
(12)как-то так:

Выбрать Период, ФизЛицо, Сотрудник, Подразделение Из РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&НачалоПериода) 
ГДЕ НЕ ВидСобытия = ВидыСобытий.Увольнение

ОБЪЕДИНИТЬ

Выбрать Период, ФизЛицо, Сотрудник, Подразделение Из РегистрСведений.КадроваяИсторияСотрудников
ГДЕ  Период МЕЖДУ &НачалоПериода И &КонецПериода
14. paxan 16.10.19 14:15 Сейчас в теме
(13) Да, что-то я не подумал что так можно попробовать получить, спасибо, а не лезть в интервальный регистр. Кстати и в этом регистре тоже используется сдвиг периода на секунды при записи)
2. paxan 15.10.19 11:08 Сейчас в теме
Добавлю - на знаю точно такое поведение касается только границы месяцев или может быть и в середине месяца, пока не понятно.
8. user774630 15.10.19 18:20 Сейчас в теме
// Составляет таблицу состояний сотрудников. 
// Если указаны даты начала/окончания, будут отобраны записи о состояниях, 
// которые хотя бы одним днем попадают в указанный период.
СостоянияСотрудников.СостоянияСотрудников()
9. paxan 16.10.19 03:18 Сейчас в теме
(8)Хорошая функция (и регистр используемые в ней), но с него к сожалению не получить информацию о подразделении где работает сотрудник, только статус работает или нет с датами. У меня куча подразделений, нужно знать где именно работает.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот