Почему не надо писать запросы к интервальным регистрам ЗУП 3.1
В конфигурации ЗУП имеются несколько периодических регистров сведений, название которых оканчивается на слово "Интервальный". Многие начинающие зуперы любят использовать их при написании запросов. В этой статье расскажу про то, как они устроены, и почему при разработке не стоит туда лезть вообще.
Пожалуй, самый "попсовый" регистр, запрос к которому можно встретить во многих самописных кадровых отчётах - это КадроваяИсторияСотрудниковИнтервальный":
Главная ошибка неопытного разработчика - пытаться делать запись в этот регистр. Потому что это ведомый регистр и запись в него делается автоматически из основного, в наименовании которого нет слова "Интервальный". Посмотрите в модуль набора записей регистра КадроваяИсторияСотрудников:
Процедура ПриЗаписи(Отказ, Замещение)
...
ОбновитьИнтервальныйРегистрСведений();
...
КонецПроцедуры
Как видно, записи в интервальном регистре формируются автоматически в процедуре ОбновитьИнтервальныйРегистрСведений() при записи в основной регистр. Так устроены все интервальные регистры. Таким образом, если нужна запись в интервальном регистре, то нужно писать в основной.
Вторая очевидная проблема с интервальными регистрами - это поля ДатаНачала и ДатаОкончания. Если приглядеться внимательно, то вы увидите что там кроме даты есть ещё и время, и это время не равно 00:00 или 23:59. Написать запрос, правильно обрабатывающий такие даты новичку будет крайне сложно и ошибки неминуемы.
Такое странное время в этих полях - это результат программного механизма вытеснений, когда учёт кадровых данных по закону суточный, а кадровик может ввести десяток кадровых документов по сотруднику на одну дату. В результате в ЗУП "выигрывает" тот документ, который стоит в сутках последним или первым, в заисимости от характера данных.
И наконец, главная причина не копаться в таких регистрах - это наличие "программного интерфейса ЗУП" и "механизма представлений", подкапотной частью которых и являются интервальные регистры. Используя эти механизмы можно извлечь правильные данные из подобных регистров без ошибок и головной боли.