Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Получить срез последних 2 записей.

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

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

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

// срез последних двух

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.