Книга знаний

1С:Предприятие / v8 / Приемы программирования / Запросы

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С нет встроенной виртуальной таблицы для такого запроса.

Наиболее простым является написание запроса в виде:

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

УПОРЯДОЧИТЬ ПО
    Период


Запрос выдает именно такие данные, какие представлены в примерах.

Хотя возможен и менее красивый вариант:
ВЫБРАТЬ
    ДанныеСотрудников.Период КАК Период,
    ДанныеСотрудников.Оклад
ИЗ
    РегистрСведений.ДанныеСотрудников КАК ДанныеСотрудников
ГДЕ
    ДанныеСотрудников.Период МЕЖДУ &ДатаНачала И &ДатаКонца

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ДанныеСотрудниковСрезПоследних.Период,
    ДанныеСотрудниковСрезПоследних.Оклад
ИЗ
    РегистрСведений.ДанныеСотрудников.СрезПоследних(&ДатаКонца, ) КАК ДанныеСотрудниковСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

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

УПОРЯДОЧИТЬ ПО
    Период

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика