Кадрова історія співробітників організації зберігається в регістрі відомостей «РаботнікіОрганізацій» (в призначеному для користувача режимі - «Кадрова історія співробітників (по юрособам)» або «Співробітники організації»). Реєстраторами для даного регістра є документи прийому в організацію, кадрового переміщення, звільнення з організації та перенесення даних.
Регістр «РаботнікіОрганізацій», як і багато інших, такі як «ПлановиеНачісленіяРаботніковОрганізацій», «ПлановиеУдержаніяРаботніковОрганізацій», «СостояніеРаботніковОрганізацій» і т.п.) в своєму складі мають однойменний ресурс з додаванням постфікса «Завершення». Наведемо приклади (в конфігурації їх набагато більше):
І, крім цього, для вимірювання «Період» є ресурс «ПеріодЗавершенія». Ці дві властивості записи визначають стан об'єкта на тимчасової осі.
Ресурс «ПеріодЗавершенія» показує, що запис характеризується ще і кінцем своєї дії (в разі, якщо ресурс заповнений). В цьому випадку з дати, зазначеної в ресурсі «ПеріодЗавершенія», актуальними стають ресурси з постфіксом «Завершення» ( «ДолжностьЗавершенія», «ГрафікРаботиЗавершенія» і т.д.)
Для того, щоб розуміти, чому була розроблена саме така архітектура періодичних регістрів відомостей, що характеризуються закінченням періоду дії, рекомендую ознайомитися зі статтею ІТС Реєстрація змін на деякий проміжок часу з поверненням в початковий стан. Також в статті Запити до регістрів відомостей з реквізитом "ПеріодЗавершенія" обговорюються плюси і мінуси такого рішення.
Ліричний відступ закінчимо. Перейдемо безпосередньо до задачі отримання кадрової історії співробітника організації (далі, співробітника). Для того, щоб не захаращувати статтю кодом, в запиті будемо отримувати тільки підрозділ співробітника. Щоб отримати посаду, графік роботи і подібні ресурси, потрібно використовувати точно такі ж конструкції з «ВИБІР», які застосовуються в наведених нижче запитах. Але для того, щоб наочно показати звідки, чому і які дані виходять (з метою навчання), в результат запитів поміщені додаткові поля, які можна не використовувати в своїх розробках в майбутньому.
Необхідно отримати кадрову історію співробітника в наступному вигляді (з відбором по періоду):
1. Знаходимо підрозділ співробітника на дату початку періоду (нехай це буде 01.01.15 р). Для цього використовуємо віртуальну таблицю зрізу останніх регістра відомостей «РаботнікіОрганізацій», параметризрвані по співробітнику і датою початку періоду
Результат підзапиту № 1:
У підзапиті № 1 використовується конструкція «ВИБІР» з перевіркою значення ресурсу «ПеріодЗавершенія». Якщо період завершення заповнений і настав цей період, повертаємо ресурс з постфіксом «Завершення», інакше повертаємо звичайний ресурс (або вимір «Період»). Повторюся, що дану конструкцію необхідно використовувати для отримання будь-яких ресурсів, що характеризуються датою закінчення дії (Посада, ГрафікРаботи і т.п.)
Також можна побачити, що в підзапит включено поле «Номер підзапиту» для візуального відображення в майбутньому, який підзапит які дані повернув (нагадаю, що це поле для вирішення поставленого завдання необов'язково).
2. Знаходимо підрозділи співробітника з дати, наступної за датою початку періоду, і по дату закінчення періоду (нехай це буде 31.12.15 р) Для цього використовуємо фізичну таблицю регістра відомостей «РаботнікіОрганізацій» з відбором по співробітнику і дат початку і закінчення періоду
Результат підзапиту № 2:
3. Знаходимо підрозділи співробітника по датах завершення подій з дати, наступної за датою початку періоду, і по дату закінчення періоду
Результат підзапиту № 3:
4. Об'єднаймо підзапити конструкцією «ОБ'ЄДНАТИ ВСІ» і помістимо в тимчасову таблицю
Тимчасова таблиця ВТ_ДатиСобитій буде містити наступні дані:
Як видно, для того, щоб отримати всі дати початку перебування працівника в будь-якому підрозділі, нам необхідно було формувати три підзапиту (якщо встановлювати різні дати початку і закінчення періоду, то можна побачити що кадрову історію співробітника за період можна отримати за допомогою одного або двох підзапитів, чого буде явно недостатньо для загального випадку).
5. Отримуємо підсумкову таблицю (текст отримання тимчасової таблиці ВТ_ДатиСобитій не повторювати). Для цього тимчасову таблицю з датами настання подій з'єднуємо саму з собою по співробітнику і умові того, що дата початку події повинна бути менше дати його закінчення.
Якщо співробітник працює і дата закінчення менше дати події чергового кадрового документа, «Дату по" ставимо рівній датою закінчення.
Якщо працівника звільнили, дату початку даної події встановлюємо на наступну дату за останнім робочим днем, а дату закінчення встановлюємо в NULL (немає там вже ніякої протяжності в часі).
Підрозділ після звільнення залишаємо рівним останньому підрозділу співробітника.
Таким чином, ми отримали кадрову історію співробітника (періодами).
P.S. У файлі знаходиться архів з цією статтею у форматі MS Word і файл запиту.