v8: Запрос за период по периодическому регистру сведенийИногда по периодическому регистру сведений нужно получить начальное значение параметра, изменения параметра за период и конечное значение параметра. | | Автор статьи: Гений 1С | Редакторы: Последняя редакция №5 от 11.07.06 | История URL: http://kb.mista.ru/article.php?id=280 | |
Ключевые слова: регистр сведений,запрос
Например, если у нас есть периодический регистр сведений ДанныеСотрудников(Сотрудник -> Оклад) c данными по окладам некоего сотрудника:
11.01 оклад 1000
15.01 оклад 2000
16.01 оклад 4000
22.01 оклад 5000
То запрос с 14.01 по 16.01 должен вернуть:
14.01 оклад 1000
15.01 оклад 2000
16.01 оклад 4000
18.01 оклад 4000
А запрос с 11.01 по 16.01 должен вернуть:
11.01 оклад 1000
15.01 оклад 2000
16.01 оклад 4000
К сожалению, в платформе 1С нет встроенной виртуальной таблицы для такого запроса.
Наиболее простым является написание запроса в виде:
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВЫБОР
КОГДА ДанныеСотрудников.Период < &ДатаНачала
ТОГДА &ДатаНачала
КОГДА ДанныеСотрудников.Период > &ДатаКонца
ТОГДА &ДатаКонца
ИНАЧЕ ДанныеСотрудников.Период
КОНЕЦ КАК Период,
ДанныеСотрудников.Оклад
ИЗ
РегистрСведений.ДанныеСотрудников КАК ДанныеСотрудников
ГДЕ
(ДанныеСотрудников.Период МЕЖДУ &ДатаНачала И &ДатаКонца
ИЛИ ДанныеСотрудников.Период В
(ВЫБРАТЬ
ДанныеСотрудниковСрезПоследних.Период
ИЗ
РегистрСведений.ДанныеСотрудников.СрезПоследних(&ДатаКонца, ) КАК ДанныеСотрудниковСрезПоследних)
ИЛИ ДанныеСотрудников.Период В
(ВЫБРАТЬ
ДанныеСотрудниковСрезПоследних.Период
ИЗ
РегистрСведений.ДанныеСотрудников.СрезПоследних(&ДатаНачала, ) КАК ДанныеСотрудниковСрезПоследних))
УПОРЯДОЧИТЬ ПО
Период
Запрос выдает именно такие данные, какие представлены в примерах.
Хотя возможен и менее красивый вариант:
ВЫБРАТЬ
ДанныеСотрудников.Период КАК Период,
ДанныеСотрудников.Оклад
ИЗ
РегистрСведений.ДанныеСотрудников КАК ДанныеСотрудников
ГДЕ
ДанныеСотрудников.Период МЕЖДУ &ДатаНачала И &ДатаКонца
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДанныеСотрудниковСрезПоследних.Период,
ДанныеСотрудниковСрезПоследних.Оклад
ИЗ
РегистрСведений.ДанныеСотрудников.СрезПоследних(&ДатаКонца, ) КАК ДанныеСотрудниковСрезПоследних
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДанныеСотрудниковСрезПоследних.Период,
ДанныеСотрудниковСрезПоследних.Оклад
ИЗ
РегистрСведений.ДанныеСотрудников.СрезПоследних(&ДатаНачала, ) КАК ДанныеСотрудниковСрезПоследних
УПОРЯДОЧИТЬ ПО
Период |