```1c
    Процедура СформироватьТаблицаСостояниеКлиентовПоГрупповымЗанятиям(СтруктураДополнительныеСвойства)

    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = СтруктураДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.СтруктурнаяЕдиница,
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Контрагент,
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.ГрупповоеЗанятие,
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Состояние КАК Состояние,
    | ВЫБОР
    | КОГДА НЕ СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.Статус ЕСТЬ NULL
    | ТОГДА СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.Статус
    | ИНАЧЕ ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.СтатусРезерваПоГруповымЗанятиям.БезРезерва)
    | КОНЕЦ КАК Статус,
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Абонемент КАК Абонемент,
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Количество,
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Период
    |ИЗ
    | ТаблицаСостояниеКлиентовПоГрупповымЗанятиям КАК ТаблицаСостояниеКлиентовПоГрупповымЗанятиям
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеКлиентовПоГрупповымЗанятиям.СрезПоследних(
    | ,
    | Регистратор <> &Регистратор) КАК СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних
    | ПО ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.СтруктурнаяЕдиница = СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.СтруктурнаяЕдиница
    | И ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.ГрупповоеЗанятие = СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.ГрупповоеЗанятие
    | И ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Контрагент = СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.Контрагент";

    Запрос.УстановитьПараметр("Регистратор", СтруктураДополнительныеСвойства.ДляПроведения.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();

    СтруктураДополнительныеСвойства.ТаблицыДляДвижений.Вставить("ТаблицаСостояниеКлиентовПоГрупповымЗанятиям", РезультатЗапроса.Выгрузить());

    КонецПроцедуры
```

Собственно не знаком с фитнесом, почему после нового года этот запрос стал выполняться ну очень медленно?
---
Сделайте отбор по клиенту, которого впускаете в основной таблице через ГДЕ и в срезе.
Будет Регистратор <> &Регистратор и Клиент=&Клиент

Вообще виртуальную таблицу левым соединением - это не гуд. Но если срежете по клиенту - должно помочь.
---
почему после нового года этот запрос стал выполняться ну очень медленно?

Да просто накопилась критическая масса записей в базе.
---
мне сегодня рассказали, что в 18 платформе с запросами совсем плохо и народ массово откатывает на 17...
хотя конечно может быть много причин разных. Запросец-то не слишком радует оптимальностью, конечно. Но это надо знать предмет, чтобы можно были что-то дельное делать. Может какие параметры можно передать в срез последних, например, может условие на регистратор убрать, мало ли что можно придумать.
---
Границы рассчитанных итогов может двинуть надо.
Я бы смотрел на содержимое таблицы ТаблицаСостояниеКлиентовПоГрупповымЗанятиям , и можно ли ее уменьшить.
---
если база sql или файловая?
возможно, обновление статистики для sql нужно запустить. Вот рекомендации с сайта its.1c.ru (https://its.1c.ru/db/metod8dev/content/5837/hdoc)
---
это типовой запрос конфиги фитнес корп, на файловой базе, сервер быстрый в принципе с ssd. Платформа 15 границы итогов по январь.
Причем этот запрос запускается когда надо впустить выпустить одного человека в клуб. Даже не знаю как его оптимизировать сталкивался кто нибудь с таким делом в фитнесе?
---
Со скулем на каникулах ничего не делали? Может надо статистику пересчитать?
---
база файловая
---
по оптимизации - добавить отборы на виртуальную таблицу среза последних
---
можете предложить код?
---
Сделайте отбор по клиенту, которого впускаете в основной таблице через ГДЕ и в срезе.
Будет Регистратор <> &Регистратор и Клиент=&Клиент

Вообще виртуальную таблицу левым соединением - это не гуд. Но если срежете по клиенту - должно помочь.
---
это разработчики фитнеса, упыри, счас попробую поиграться параметрами запроса.
---
сделал отбор по клиенту теперь время выполнения 00(это немного смущает) вместо 70, но все вроде проводиться, счас буду смотреть все движения по регистрам правильно ли идут, если все ок завтра запущу в тест на рабочую базу. ну и если все ок вам зачту правильный ответ.
---
Это нормальная ситуация. Просто на первый взгляд видно что регистр хранит статусы клиента, да еще в разрезе документов (как я понимаю визитов). При этом выбираются все клиенты со всеми статусами))) да и еще куча разрезов.

Очень похоже на анекдот:
- Вам сколько ложек сахара?
- Четыре, только не перемешивайте сильно - я не люблю сладкое.

При том, что запрос построен с несколькими методическими ошибками, то при определенном объеме данных (на котором разработчики не тестируют) начнет тормозить.

P.S.: Проверьте, что функция не используется еще из каких-то мест.
---
Вообще конечно грамотнее конструкция вида

```1c
    Регистратор <> &Регистратор
    И (Контрагент, СтруктурнаяЕдиница, ГрупповоеЗанятие) В
    (ВЫБРАТЬ
    Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.КонтрагентКАК Контрагент,
    Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.КонтрагентКАК СтруктурнаяЕдиница,
    Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.КонтрагентКАК ГрупповоеЗанятие
    ИЗ
    ТаблицаСостояниеКлиентовПоГрупповымЗанятиям КАК Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям)
```

Но в принципе если в документе Контрагент это просто ссылка пойдет и предложенный выше вариант.

А если еще и индексы настроить...

Ну а про упырей.... Не знаю кто там Фитнес писал, но даже в типовой Рознице лично менял три-четыре запроса из-за того что при большом количестве магазинов и условий скидок 1С просто помирала в РМК при сканировании товара например
---
И во временную, как предложил коллега ниже
Вопрос что в момент формирования запроса тут:
ТаблицаСостояниеКлиентовПоГрупповымЗанятиям

Если там тысячи записей с разными клиентами + это не вынести в во временную, а соединять опять напрямую - результат будет аналогичным.

Ну а про упырей....
Мы не знаем в каких условиях люди работают. Может там времени нет на тесты на большом объеме данных. Или методистов нет.
---
да они разработчики программного продукта причем версия корп!, как так они не тестировали!!!???, даже я понял почти сразу что запрос не оптимален, вообщем фуфло этот феликс фитнес. там такого хватает еще навскидку пару идиотских функций поправил. Причем им же дали 1с совместимо.
---
Отраслевые не блещут конечно)
В прошлом году тоже просили на файловой в конфигурации ТСЖ расчет начислений какой-то оптимизировать. 2 минуты 40 секунд примерно делался. Тоже дело было в запросе. Стало 8-10 секунд.
Причем там был коммент над запросом от разработчика "работает не оптимально" или вроде того)))
---
ладно расчет, а тут клиента в клуб пускают и на пару минут задумывается ска. Это точно должны были оттестить.
---
Надо завести раздел форума "Детские болячки", создать темы по конфигурациям. И делиться опытом исправления)))
---
Посмотреть в запросе, формирующим ТаблицаСостояниеКлиентовПоГрупповымЗанятиям в менеджере временных таблиц проиндексированы ли поля: структурнаяединица, групповоезанятие, контрагент. После этого создать из текущего запроса пакет, в котором будет формироваться временная таблица из РегистрСведений.СостояниеКлиентовПоГрупповымЗанятиям.СрезПоследних(
| ,
| Регистратор <> &Регистратор) с необходимыми полями.
Посмотреть количество записей, которое получается в этой временной таблице.
Если там не десятки тысяч, то соединить с получившейся временной вместо виртуальной базовый запрос.