Добрый день, из-за второго вложенного запроса ("Исходящий") дублируются строки в результате запроса. Пытался через вт - результат другой, не подходит. Подскажите, как исправить, заранее спасибо!

```1c
    ВЫБРАТЬ
    Активность.Период КАК Дата,
    Активность.Автор КАК Сотрудник,
    Активность.Реквизит,
    Активность.Значение,
    Активность.СтароеЗначение
    ИЗ
    РегистрСведений.Активность КАК Активность,
    (ВЫБРАТЬ
    Активность.Период КАК Дата
    ИЗ
    РегистрСведений.Активность КАК Активность
    ГДЕ
    (ВЫРАЗИТЬ(Активность.Значение КАК СТРОКА(100))) = "Авто"
    И Активность.Объект = &Объект) КАК ВложенныйЗапрос,
    (ВЫБРАТЬ
    Активность.Период КАК Дата
    ИЗ
    РегистрСведений.Активность КАК Активность
    ГДЕ
    Активность.Реквизит = "Исходящий звонок"
    И Активность.Объект = &Объект) КАК Исходящий
    ГДЕ
    Активность.Объект = &Объект
    И Активность.Период >= ВложенныйЗапрос.Дата
    И (((Активность.Реквизит = "СМС"
    ИЛИ Активность.Реквизит = "sms"
    ИЛИ Активность.Реквизит = "E-mail"
    ИЛИ Активность.Реквизит = "Обещание"
    ИЛИ Активность.Реквизит = "Исходящий звонок")
    И Активность.Автор.Родитель.Код = "Вз"
    ИЛИ (ВЫРАЗИТЬ(Активность.Значение КАК СТРОКА(100))) = "Авто")
    ИЛИ (Активность.Реквизит = " И Активность.Период > Исходящий.Дата и Активность.Период < ДОБАВИТЬКДАТЕ(Исходящий.Дата,Минута,5)))

    УПОРЯДОЧИТЬ ПО
    Дата
```
---
попробуйте такой запрос,
(потом можете вставить его в СКД-отчет и сгруппировать по полю Объект, будет вообще красиво)

```1c
    //РегистрСведений.Активность, поля: дата, объект, автор, реквизит, значение.
    //формируем таблицу только с записями "Исходящий звонок"
    Выбрать
    рег.*
    поместить втТаб
    из
    РегистрСведений.Активность рег
    где
    рег.Реквизит = "Исходящий звонок"
    ;

    //результирующая выборка
    //1.сами строчки с "Исходящий звонок"
    Выбрать
    втТаб.*
    из втТаб

    Объединить все

    //2. дополнительные строчки с " и интевалом 5 мин (= 300 сек)
    Выбрать
    рег.*
    из
    втТаб
    внутреннее соединение РегистрСведений.Активность рег
    по втТаб.объект = Рег.объект //связь по объекту
    и Рег.Реквизит = " //по условию что Реквизит = "
    и РазностьДат(втТаб.Дата, рег.Дата, Секунда) <= 300 //и попадающие в 5 минут

    упорядочить по
    Объект, Дата
```
---
а как запросы должны между собой связываться?
---
Связал по объекту, но все равно дублируются строки...
---
Всё равно не понимаю сакрального смысла вложенного запроса.Для чего он?
---
Первый вложенный запрос - получаю дату записи со значением "Авто", в итоговом запросе делаю выборку по дате бОльшей полученной из вложенного запроса; второй вложенный запрос - получаю дату записи с реквизитом "исходящий запрос", в итоговом запросе делаю выборку с условием по дате > полученной из второго вложенного и < той же + 5 минут

Подскажите, как это наиболее рационально сделать, если мое решение вышло нелогичным?
---
Вы выбираете все записи из таблицы.
Первым вложенным вы выбираете ВСЕ даты по одному значению
Вторым вложенным ВСЕ даты по другому значению.
Конечно будет дублировать.
У Вас концептуально в запросе бред.
---
Спасибо, что указали на ошибку. Действительно, первый вложенный не влияет на дубли, так как там всего одна такая запись возможна, а про второй не подумал. Спасибо!
---
Где там связь таблиц?
---
в вопросе нигде, уже исправил
---
язык запросов все же требует некоторой квалификации. Сначала учеба, потом применение. Наоборот не работает...
---
Это верно, но задачу необходимо выполнить, времени на учебу прямо сейчас нет :(
---
задача невыполнима без учебы. Это как водить автомобиль, невозможно сесть и доехать до Питера, не научившись предварительно.
На самом деле это недолго, достаточно прочитать какой-нибудь приличный курс по языку SQL, несколько дней и несложные задачи будут решаться без проблем.
---
Трудно с Вами не согласиться!
---
Сообщение было скрыто модератором.
---
Думаю, получить опыт для обучения, даже просто сидя рядом с водителем, - тоже хорошо.
---
Сообщение было скрыто модератором.
---
Ничего, прокачусь на переднем, потом расскажу Вам как там в мире программирования...
---
Сообщение было скрыто модератором.
---
Но и не вам давать советы, раз не предлагаете свои услуги за бесплатно или нет.
---
Сообщение было скрыто модератором.
---
Да, именно за советом, но не за порцией желчи
---
Сообщение было скрыто модератором.
---
Взаимно, удачных попуток!
---
Сообщение было скрыто модератором.
---
советую посетить Новую Голландию
---
Сообщение было скрыто модератором.
---
что бы хоть что-то подсказать нужна полная структура регистра и подробное описание задачи!
иначе не понятно что с чем соединять/сравнивать и какой в итоге результат должен получиться.
---
Минимизирую условия до проблемы. Регистр: период (дата), автор, реквизит, значение.
Мне необходимо вывести запись с реквизит = "Исходящий звонок" и следующие записи с реквизит = "", у которых период (дата) с момента исходящего звонка прошло не более 5 минут.
т.е. период записи (с реквизит = "Исходящий звонок") < период (с реквизит = "") < период записи (с реквизит = "Исходящий звонок") + 5 минут
---
а записи с этими реквизитами как-то связаны между собой (например по Автору?)

очень непонятное описание,
допустим есть реквизит "Исходящий звонок" и по условию еще больше 100 строк в течении 5 минут с пустым реквизитом
как вы представляете себе такой результат?
---
а записи с этими реквизитами как-то связаны между собой (например по Автору?) Связь по объекту, не уточнил, рассматривается один объект, это документ. В теч. 5 минут там строк 0-5
---
Регистр: период (дата), автор, реквизит, значение.
а в описании структуры регистра не видно реквизита: Объект (тип Документ) ?

(дааа...)
---
Да, я написал, что не уточнил
---
(может сойдет за совет?)
Попробуйте еще раз четко и внятно описать задачу!

т.к. Правильно и понятно поставленная задача это уже половина решения!!!
---
Сообщение было скрыто модератором.
---
Регистр:
дата, объект, автор, реквизит, значение.
Записи:
15.12.22 16:00, заявление 1, А, "исходящий звонок", ""
15.12.22 16:02, заявление 1, А, "", не ответил
15.12.22 16:03, заявление 1, А, "", сбросил
15.12.22 16:04, заявление 1, А, "", заблокирован
15.12.22 16:10, заявление 1, А, "",повтор

15.12.22 17:00, заявление 1, А, "исходящий звонок", ""
15.12.22 17:01, заявление 1, А, "", не ответил
15.12.22 17:02, заявление 1, А, "", сбросил
15.12.22 17:10, заявление 1, А, "", повтор

Необходимо взять записи с реквизитом "Исходящий звонок" + записи с реквизитом "", которые появились в теч 5 минут после "Исходящий звонок"

т.е. в конечную выборку должны попасть:
15.12.22 16:00, заявление 1, А, "исходящий звонок", ""
15.12.22 16:02, заявление 1, А, "", не ответил
15.12.22 16:03, заявление 1, А, "", сбросил
15.12.22 16:04, заявление 1, А, "", заблокирован

15.12.22 17:00, заявление 1, А, "исходящий звонок", ""
15.12.22 17:01, заявление 1, А, "", не ответил
15.12.22 17:02, заявление 1, А, "", сбросил

Что я пытаюсь сделать: найти дату исходящего звонка и сравнить ее.
Так как записей с рек "исходящий звонок", то записи дублируются.
---
Сообщение было скрыто модератором.
---
Сравнить период остальных записей с реквизитом "" - чтобы отобрать те, которые добавлены в промежуток от периода записи с рек "Исх звонок" до периода записи с рек "Исх звонок" + 5 минут.
там первый запрос - получаю период записи с рек "Исх звонок", а потом последнее условие в основном запросе
---
Это не совсем тривиальная задача и простым запросом с парой таблиц не решается.
Если ее так уж надо решить, не обучаясь запросам, я бы советовал выгрузить все в таблицу значений и ее дальше обрабатывать. Будет не так быстро работать, но требует знаний только синтаксиса 1С и можно сделать намного быстрее, чем искать того, кто не поленится бесплатно делать запрос.
---
Сообщение было скрыто модератором.
---
Именно так и решил, но все же интересно, как решается задача средствами языка запросов, ведь задача с выборкой строк, взависимости от значений других, как мне казалось, классическая.
---
Сообщение было скрыто модератором.
---
Да, уже понятно! Да и не ждал, что кто-то будет бесплатно делать запрос, просто направить, как это сделал ты, но я рассчитывал в сторону решения…а не на 3 буквы
---
Сообщение было скрыто модератором.
---
:))
---
это задача родственная например поиску цены товара на дату последней реализации. Но для ее осмысленного решения все же надо понимать, что такое запросы и как они устроены.
---
спасибо за направление
---
Сообщение было скрыто модератором.
---
с головой подружитесь и читайте выше
---
Сообщение было скрыто модератором.
---
жесть, вам заняться нечем
---
Сообщение было скрыто модератором.
---
fat tank, перелогинься
---
Сообщение было скрыто модератором.
---
не мог я промахнуться со столь специфичной персоной!
---
Сообщение было скрыто модератором.
---
попробуйте такой запрос,
(потом можете вставить его в СКД-отчет и сгруппировать по полю Объект, будет вообще красиво)

```1c
    //РегистрСведений.Активность, поля: дата, объект, автор, реквизит, значение.
    //формируем таблицу только с записями "Исходящий звонок"
    Выбрать
    рег.*
    поместить втТаб
    из
    РегистрСведений.Активность рег
    где
    рег.Реквизит = "Исходящий звонок"
    ;

    //результирующая выборка
    //1.сами строчки с "Исходящий звонок"
    Выбрать
    втТаб.*
    из втТаб

    Объединить все

    //2. дополнительные строчки с " и интевалом 5 мин (= 300 сек)
    Выбрать
    рег.*
    из
    втТаб
    внутреннее соединение РегистрСведений.Активность рег
    по втТаб.объект = Рег.объект //связь по объекту
    и Рег.Реквизит = " //по условию что Реквизит = "
    и РазностьДат(втТаб.Дата, рег.Дата, Секунда) <= 300 //и попадающие в 5 минут

    упорядочить по
    Объект, Дата
```
---
Огромное спасибо!