Имя: Пароль:
1C
1С v8
Получить срез последних 2 записей.
0 Kamich
 
25.05.20
20:21
Подскажите плиз...
Задача такая, необходимо ЗАПРОСОМ получить последние 2 записи по регистру сведений с одним измерений.
Должно получиться что-то вроде этого:

Товар | Класс предпоследний | Класс последний
1 RomanYS
 
25.05.20
20:28
(0) А  класс предпоследний и последний могут совпадать?
2 Kamich
 
25.05.20
20:30
(1) Да
3 Kamich
 
25.05.20
20:31
(2) Хотя по логике, может и не совпадать. Но кто его знает кто будет "завтра трогать код".
4 RomanYS
 
25.05.20
20:38
может не оптимально, но работает

ВЫБРАТЬ
    СрезПоследних.ФизЛицо,
    СрезПоследних.Фамилия,
    СрезПредПоследних.Фамилия КАК ФамилияПред
ИЗ
    РегистрСведений.ФИОФизЛиц.СрезПоследних КАК СрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(
                ,
                НЕ (ФизЛицо, Период) В
                        (ВЫБРАТЬ
                            СрезПоследних.ФизЛицо,
                            СрезПоследних.Период
                        ИЗ
                            РегистрСведений.ФИОФизЛиц.СрезПоследних КАК СрезПоследних)) КАК СрезПредПоследних
        ПО СрезПоследних.ФизЛицо = СрезПредПоследних.ФизЛицо
5 Kamich
 
25.05.20
20:41
(4) Вариант интересный, но каково будет если имеется более 10 000 товаров...
6 RomanYS
 
25.05.20
20:53
(5) попробуй. Не факт, что коррелированный запрос или двойное соединение с живой таблицей по максимум(период) будет оптимальнее
7 Kamich
 
25.05.20
21:09
(6) Попробовал, но выдаёт одинаковую информацию( т.е. выдаёт в двух случаях последние данные)
8 Kamich
 
25.05.20
21:13
(4) Выполнил запрос, но не сработало...
9 Kamich
 
25.05.20
21:22
Есть варианты?
10 Ненавижу 1С
 
гуру
25.05.20
21:31
Вот тут написано как модифицировать регистр чтобы легко получать любые срезы
https://naf2000.blogspot.com/2013/09/1-8_11.html?m=1
11 Ботаник Гарден Меран
 
25.05.20
21:48
На партнерке давно было года три назад. Использую.

// срез последних двух
ВЫБРАТЬ *
ИЗ РегистрСведений.КурсыВалют Курсы
ГДЕ Курсы.Период < &Дата
и Курсы.Период в (
  ВЫБРАТЬ ПЕРВЫЕ 2 К.Период
  ИЗ РегистрСведений.КурсыВалют К
  ГДЕ К.Период < &Дата и К.Валюта = Курсы.Валюта
  УПОРЯДОЧИТЬ ПО К.Период УБЫВ

  )
12 RomanYS
 
25.05.20
21:50
(7) Значит последнее значение совпадает с предпоследним
13 RomanYS
 
25.05.20
21:51
+(12) или запрос адаптировал неправильно. "НЕ" не потерял?
14 RomanYS
 
25.05.20
21:52
(11) Вот он - коррелированный запрос
15 Kamich
 
25.05.20
22:00
(12) Значения разные...
(13) "НЕ" не потерял...
16 RomanYS
 
25.05.20
22:01
(15) запрос покажи и результат желательно
17 Kamich
 
25.05.20
22:08
(16)
ВЫБРАТЬ
    ПоследниеПоказатели.Товар КАК Товар,
    ПоследниеПоказатели.Период КАК ПоследнийПериод,
    ПоследниеПоказатели.КлассТовара КАК ПоследнийКлассТовара,
    ПредПоследниеПоказатели.Период КАК ПредПоследнийПериод,
    ПредПоследниеПоказатели.КлассТовара КАК ПредПоследнийКлассТовара
ИЗ
    РегистрСведений.ПериодическиеПараметрыТовара.СрезПоследних КАК ПоследниеПоказатели
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодическиеПараметрыТовара.СрезПоследних(
                ,
                НЕ (Период, Товар) В
                        (ВЫБРАТЬ
                            ПериодическиеПараметрыТовара.Товар,
                            ПериодическиеПараметрыТовара.Период
                        ИЗ
                            РегистрСведений.ПериодическиеПараметрыТовара.СрезПоследних КАК ПериодическиеПараметрыТовара)) КАК ПредПоследниеПоказатели
        ПО ПоследниеПоказатели.Товар = ПредПоследниеПоказатели.Товар
18 Kamich
 
25.05.20
22:11
19 RomanYS
 
25.05.20
22:12
(17) (Период, Товар) идут в другом порядке в условии
20 Kamich
 
25.05.20
22:13
(19) ааааа....жесть)))
21 Kamich
 
25.05.20
22:13
Спасибо большое! (19)
22 RomanYS
 
25.05.20
22:14
(21) по скорости то норм?
23 Kamich
 
25.05.20
22:15
(22) 16 000 строк за 0,8 секунд.
24 RomanYS
 
25.05.20
22:17
(23) норм, а (11) не пробовал?
25 Kamich
 
25.05.20
22:17
(19) С чем связанно этот порядок? Раз е тут не соблюдается условие "И" ?
26 RomanYS
 
25.05.20
22:18
(25) Проверяется совпадение пары (набора). Порядок конечно важен
27 Kamich
 
25.05.20
22:19
(26) Буду иметь ввиду.
28 Kamich
 
25.05.20
22:20
(24) Попробовал отбирает действительно 2 последних от даты запроса.
29 Kamich
 
25.05.20
22:21
но скажем так мне желательно получить это одной строкой а двум записям. Дабы исключить дальнейшую дообработку.
30 RomanYS
 
25.05.20
22:22
(28) это понятно:) Вопрос про время выполнения, интересно насколько коррелированные запросы могут применяться на реальных задачах
31 Kamich
 
25.05.20
22:23
(30) Разница тем и этим в 1,6 секунд. Первый вариант быстрее.
32 RomanYS
 
25.05.20
22:28
(31) Спасибо. Медленнее заметно. Но если нужно будет, например 5 последних, то вариант уже будет вероятно оптимальным.
33 Kamich
 
25.05.20
22:32
(32) Согласен.
и ещё если. Если в первый запрос, добавить дата запроса, то всё, не работает корректно.
34 RomanYS
 
25.05.20
22:35
(33) >> Если в первый запрос, добавить дата запроса
Должно работать, параметр нужно в 3х местах прописать
35 Kamich
 
26.05.20
07:24
(34) Соррян, указал в двух местах(
"Засыпал")

Огромное спасибо!