Имя: Пароль:
1C
1С v8
Получение среза последних на дату установки среза первых
0 ptitc0
 
22.03.21
13:56
Есть задача сделать выборку из регистра сведений, последних значений на день, когда впервые были установлены значения регистра по данному измерению. При этом условие, что полученное значение входит в список требуемых значений.
Например, по заказу1 впервые была запись в регистр сведений первого марта и записано значение Х, но в течение дня его несколько раз сменили и на конец дня первого марта это было значение Y, которое входит в список значений
А по заказу2 впервые была запись в регистр второго марта значения Y, но к концу дня его сменили на Z, которое нас не интересует.
На следующий день эти значения снова сменят и они даже поменяются местами, но нас это уже не должно интересовать, нас интересовал лишь первый день установки значения, при чем есть нюанс: этот первый день нам все равно когда был, т.е. отбор не по периоду, а по конечному значению.
Я что-то вообще потерялся уже. Запрос по первым значениям - это элементарно, а вот как выцепить последние значения того дня да еще и чтобы условием отбора именно эти значения были...
Хотя бы пините меня в нужном направлении.
PS Конфа самопальная поэтому название регистра приводить нет смылса.
1 dka80
 
22.03.21
14:06
Динамически сформируй текст запроса объединив срезпоследних для каждого заказа. Либо, если периодичность секунда, то выбираешь срез первых, потом объединяешь с этой таблицей по дате и заказу и берешь максимум от даты таблицы, а затем выбираешь из таблицы по максимум дате и заказу
2 mistеr
 
22.03.21
14:09
(0) Срез первых без задания периода, с условием на список значений. Получаешь таблицу с датами.
Далее алгоритм "срез последних на каждый день".
3 ptitc0
 
22.03.21
14:11
(2) Проблема в том, что условие должно не к первым прилагаться, а к последним. Т.е. мне надо выбрать срез первых вообще по всем заказам?
4 mistеr
 
22.03.21
14:14
(3) В смысле это список значений ресурса, не измерения?
Ну что ж, по всем, так по всем.
5 ptitc0
 
22.03.21
14:20
(4) Да список значений ресурса (((
Изначально был отбор по срезу первых, но руководство посчитало, что в течение дня можно менять и надо брать на конец дня. А просмотр последних значений, по результатам изначальной выборки дает лишние с одной стороны и не дает некоторые заказы с другой.
Боюсь, что через пару дней они решат, что значение можно менять более одного дня )))
Ладно всем спасибо. Когда сформулировал вопрос тут, самому как-то легче стало. Попробую это как-то запросом описать все.
6 ptitc0
 
23.03.21
13:39
Если кому-то будет интересно, как я реализовал:
1) Запрос к срезу первых регистра сведений в разрезе заказов,  с отбором по нужному мне виду события, где период (время регистрации события) представлен как
КОНЕЦПЕРИОДА(МойРегистрСрезПервых.Период, ДЕНЬ) КАК ДатаРегистрации
все это во временную таблицу 1 с индексированием по заказу и дате регистрации
2) Запрос к регистру сведений с отбором по нужному мне виду события в разрезе заказов и периода (т.е. выбираются вообще все записи)
все это во временную таблицу 2 с индексированием по заказу и дате
3) Запрос к таблице 2, в разрезе заказов выбираются период, еще раз он же но в функции КОНЕЦПЕРИОДА(Таблица2.Период, ДЕНЬ) КАК ДеньУстановки
с группировкой по заказу и дню установки и функцией МАКСИМУМ к периоду (т.е. выбираются последние записи на каждый день по каждому заказу)
все это во временную таблицу 3 с индексированием по заказу и дате
4) Запрос к таблицам 1, 2, 3
таблица 1 связь с таблицей 2 по заказу и Таблица1.датаРегистрации >= Таблица2.Период
Таблица 2 с таблицей 3 по заказу и (вот тут важный момент) по Таблица2.Период=Таблица3.ВремяУстановки Важен этот момент тем, что в таблице 3 у нас только дата события есть, а во второй нужные нам данные, а связав по периоду из третьей таблицы, мы однозначно ткнули пальцем на нужные нам данные во второй таблице. Первая же таблица отсекла по >= все более старые периоды, кроме первого дня установки.
На всякий случай кинул это в таблицу 4 с нужными мне в дальнейшем полями и индексацией по заказу
и убил таблицы 1,2,3
5) Из таблицы 4 забран нужные мне данные

Проверки показали, что все работает
До того, как добавил индексацию, запрос работал раз в 10 дольше.

Буду рад, если кому-то это пригодится. Спасибо за советы.
7 ptitc0
 
23.03.21
13:51
(6) небольшое пояснение
В таблицу1 попали все дни первой установки нужного события в разрезе заказа
в таблицу2 попали все установки нужного события в разрезе заказа
в таблицу3 попали только дата.время последней установки нужного события на каждый день (по сути срез последних на этот день)
в таблицу4 пошли события произошедшие вплоть до времени из таблицы1 (в течение первого дня) совпадающих по времени с таблицей3 (т.е. самое последнее событие на тот день)
в пункте 5 еще отрабатывается условие, что нужное нам значение события входит в список значений, но это уже мелочи, важен сам алгоритм