Здравствуйте,сдал тестовое задание руководителю, но руководитель хотел бы на любую выбранную дату,которую ему захочется, вывести отчет по всем различным номенклатурам в регистре (последняя,предпоследняя цены и изменение цены в процентах), реализовать одним запросом,можно использовать подзапросы и конструкцию поместить, если есть параметр дата, то запрос пишется сложнее или легче?
---
после появления АВТОНОМЕРЗАПИСИ() такие задачи решаются проще, ведь когда критерием "последнего" является не одно поле "Дата", а сложная сортировка по ряду полей, то соединения
становятся сложными и неповоротливыми.
---
...есть параметр дата, то запрос пишется... - не сложнее и не легче....
---
см пример https://infostart.ru/public/185506/
---
Что то тема популярная с предыдущими ценами.
Отвечал уже многократно
Вот примерчег
К тому шаблону, Во временную таблицу добавить Максимум по текущему периоду
В результирующем запросе 2 соединения, по Текущему и Прошлому
---
после появления АВТОНОМЕРЗАПИСИ() такие задачи решаются проще, ведь когда критерием "последнего" является не одно поле "Дата", а сложная сортировка по ряду полей, то соединения
становятся сложными и неповоротливыми.
---
А где можно найти Автономер записи?
---
Поделитесь информацией?
---
тут http://www.gilev.ru/ver8-3-13/
---
(8)
Задача: "Получить 5 последних продаж по всем партнерам" в ИБ с тысячами документов в день.
Алгоритмы обхода и пакеты с кучей соединений приводили к неприемлемому времени
получения результата, но АВТОНОМЕРЗАПИСИ() как раз помог. Ниже инструкция как использовать АВТОНОМЕРЗАПИСИ() и критерий "последних" при сложной сортировке.

Идею получения последних 5 документов по каждому Партнеру реализуем на новой
функции запросов АВТОНОМЕРЗАПИСИ().
сначала идет описание логики решения, в внизу готовый запрос для консоли или СКД.

Даны такие ограничения системы и постановки задачи:

1. АВТОНОМЕРЗАПИСИ() работает только для временных таблиц;
2. Временные таблицы нельзя сортировать;
3. Нумеровать необходимо уже отсортированные документы;
4. Во вложенных запросах нельзя применять операцию УПОРЯДОЧИТЬ ПО без использования конструкции ПЕРВЫЕ.

Согласно условиям выше, чтобы пролучить пронумерованную по порядку таблицу документов используем
вложенный запрос для сортировки и АВТОНОМЕРЗАПИСИ() во внешнем запросе.
Причем, во вложенном ставим очень большое число, которое заведомо больше количества документов в БД.

1.
ВАЖНО1: Если установить значение парметра запроса "ДатаНачала", то будут выбираться документы
        только после этой даты, а что было в прошлом нам не интересно.
ВАЖНО2: Во вложенном запросе необходимо сортировать только в таком порядке "Партнер, Дата"
        Тогда в первой временной таблице "ВтДокументыПоПорядкуВсе" получим примерно такой состав данных:

Партнер | Документ | Порядок
..................................................
Партнер1 | Док.. | 1
Партнер1 | Док.. | 2
Партнер1 | Док.. | 3
Партнер1 | Док.. | 4
Партнер1 | Док.. | 5
Партнер1 | Док.. | 6
Партнер1 | Док.. | 7
Партнер1 | Док.. | 8 <- ДокументПорядокМакс по Партнер1
.............................................................................
ПартнерN | Док.. | 120 001
ПартнерN | Док.. | 120 002
ПартнерN | Док.. | 120 003
ПартнерN | Док.. | 120 004
ПартнерN | Док.. | 120 005
ПартнерN | Док.. | 120 006
ПартнерN | Док.. | 120 007
ПартнерN | Док.. | 120 008 <- ДокументПорядокМакс по ПартнерN

2.
Далее получаем "ВтПорядокМаксПоПартнеру"

Партнер | ПорядокМакс
.........................................
Партнер1 | 8
.........................................
ПартнерN | 120 008

3.
Далее получаем "ВтДокументыПоПартнеруПоследние"
Если пареметр запроса "КоличествоПоследних" = 5, то будут выбраны
только последние 5 документов по каждому партнеру и получим такую вт:

Партнер | Документ | Порядок
...................................................
Партнер1 | Док.. | 4
Партнер1 | Док.. | 5
Партнер1 | Док.. | 6
Партнер1 | Док.. | 7
Партнер1 | Док.. | 8
....................................................
ПартнерN | Док.. | 120 004
ПартнерN | Док.. | 120 005
ПартнерN | Док.. | 120 006
ПартнерN | Док.. | 120 007
ПартнерN | Док.. | 120 008
.....................................................

Собственно на этом все и "ВтДокументыПоПартнеруПоследние"
можно использовать в результирующем запросе.
Если это запрос в коде, то результирующий запрос группируем или Итоги по для наглядности.
Если это запрос в СКД, то результирующий запрос НЕ группируем - СКД все сделает сама по настройкам.

Готовый запрос для консоли
(секция в последнем пакете ВЫБРАТЬ ПЕРВЫЕ 100 только для того чтобы быстро понять, что все работает):

```1c
    ВЫБРАТЬ
    ДокументыПоПорядкуВсе.Партнер КАК Партнер,
    ДокументыПоПорядкуВсе.Документ КАК Документ,
    АВТОНОМЕРЗАПИСИ() КАК Порядок
    ПОМЕСТИТЬ ВтДокументыПоПорядкуВсе
    ИЗ
    (ВЫБРАТЬ ПЕРВЫЕ 1000000000
    РеализацияТоваровУслуг.Партнер КАК Партнер,
    РеализацияТоваровУслуг.Ссылка КАК Документ
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ГДЕ
    РеализацияТоваровУслуг.Проведен
    И РеализацияТоваровУслуг.Дата >= &ДатаНачала

    УПОРЯДОЧИТЬ ПО
    РеализацияТоваровУслуг.Партнер,
    РеализацияТоваровУслуг.Дата) КАК ДокументыПоПорядкуВсе
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВтДокументыПоПорядкуВсе.Партнер КАК Партнер,
    МАКСИМУМ(ВтДокументыПоПорядкуВсе.Порядок) КАК ПорядокМакс
    ПОМЕСТИТЬ ВтПорядокМаксПоПартнеру
    ИЗ
    ВтДокументыПоПорядкуВсе КАК ВтДокументыПоПорядкуВсе

    СГРУППИРОВАТЬ ПО
    ВтДокументыПоПорядкуВсе.Партнер
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВтДокументыПоПорядкуВсе.Партнер КАК Партнер,
    ВтДокументыПоПорядкуВсе.Документ КАК Документ
    ПОМЕСТИТЬ ВтДокументыПоПартнеруПоследние
    ИЗ
    ВтДокументыПоПорядкуВсе КАК ВтДокументыПоПорядкуВсе
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтПорядокМаксПоПартнеру КАК ВтПорядокМаксПоПартнеру
    ПО ВтДокументыПоПорядкуВсе.Партнер = ВтПорядокМаксПоПартнеру.Партнер
    ГДЕ
    ВтДокументыПоПорядкуВсе.Порядок > ВтПорядокМаксПоПартнеру.ПорядокМакс - &КоличествоПоследних
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ ПЕРВЫЕ 100
    ВтДокументыПоПартнеруПоследние.Партнер КАК Партнер,
    ВтДокументыПоПартнеруПоследние.Документ КАК Документ,
    РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента
    ИЗ
    ВтДокументыПоПартнеруПоследние КАК ВтДокументыПоПартнеруПоследние
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО ВтДокументыПоПартнеруПоследние.Документ = РеализацияТоваровУслуг.Ссылка
    ИТОГИ
    СУММА(СуммаДокумента)
    ПО
    Партнер
```
---
Что то про вложенный запрос я не подумал. В таком случае можно ограничить запрос с помощью Имеющие(блин ни как не могу запомнить синтаксис всегда пишу HAVING)
---
на выбранную дату вывести список всех номенклатур (оприходованных товаров) с последней и предпоследней ценой для каждой и изменением в процентах - то есть здесь,я так понял запрос вычисляющий как раз предпоследнюю и последнюю даты можно оставить как есть, там в конструкторе запросов по умолчанию высвечивается период, его получается,просто включить в пользовательских настройках и дальше она на дату будет смотреть последние изменения цены,ведь так?
---
после появления АВТОНОМЕРЗАПИСИ() такие задачи решаются проще
Увы работает только во временной таблице, а там сортировки нет, Агрегатные функции использовать нельзя
Такой запрос выдаст бред

```1c
    ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка,
    АВТОНОМЕРЗАПИСИ() КАК НомерСтроки
    ПОМЕСТИТЬ ВременнаяТаблица
    ИЗ
    Справочник.Номенклатура КАК Номенклатура

    ИНДЕКСИРОВАТЬ ПО
    НомерСтроки,
    Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВременнаяТаблица.НомерСтроки КАК НомерСтроки,
    ВременнаяТаблица.Ссылка КАК Ссылка
    ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

    УПОРЯДОЧИТЬ ПО
    ВременнаяТаблица.Ссылка.Наименование
```
---
Не работает у меня такая конструкция..
Через годик поставим платформу 13) попробую))
---
Смотри ссылку в (3) Там все написано. Только подправить шаблон
---
Да не, я про автономерзаписи . у меня не работает т.к. платформа 12-я
---
а если подумать, то все работает
---
Интересно было бы посмотреть, как с помощью АВТОНОМЕРЗАПИСИ() Без соединений получить Последние и предпоследние цены