Добрый день, из-за второго вложенного запроса ("Исходящий") дублируются строки в результате запроса. Пытался через вт - результат другой, не подходит. Подскажите, как исправить, заранее спасибо!
ВЫБРАТЬ
Активность.Период КАК Дата,
Активность.Автор КАК Сотрудник,
Активность.Реквизит,
Активность.Значение,
Активность.СтароеЗначение
ИЗ
РегистрСведений.Активность КАК Активность,
(ВЫБРАТЬ
Активность.Период КАК Дата
ИЗ
РегистрСведений.Активность КАК Активность
ГДЕ
(ВЫРАЗИТЬ(Активность.Значение КАК СТРОКА(100))) = "Авто"
И Активность.Объект = &Объект) КАК ВложенныйЗапрос,
(ВЫБРАТЬ
Активность.Период КАК Дата
ИЗ
РегистрСведений.Активность КАК Активность
ГДЕ
Активность.Реквизит = "Исходящий звонок"
И Активность.Объект = &Объект) КАК Исходящий
ГДЕ
Активность.Объект = &Объект
И Активность.Период >= ВложенныйЗапрос.Дата
И (((Активность.Реквизит = "СМС"
ИЛИ Активность.Реквизит = "sms"
ИЛИ Активность.Реквизит = "E-mail"
ИЛИ Активность.Реквизит = "Обещание"
ИЛИ Активность.Реквизит = "Исходящий звонок")
И Активность.Автор.Родитель.Код = "Вз"
ИЛИ (ВЫРАЗИТЬ(Активность.Значение КАК СТРОКА(100))) = "Авто")
ИЛИ (Активность.Реквизит = "" И Активность.Период > Исходящий.Дата и Активность.Период < ДОБАВИТЬКДАТЕ(Исходящий.Дата,Минута,5)))
УПОРЯДОЧИТЬ ПО
Дата
ПоказатьПо теме из базы знаний
- Удаление дублирующихся строк из табличной части "Контактная информация" справочников БП 3.0
- Проверка таблицы на дублирование строк (ТаблицаЗначений, ТабличнаяЧасть) и получение массива таких строк
- Проверка на наличие дублирующихся строк в табличных частях
- Как управлять качеством кода 1С, используя платформу SonarQube
- Выгрузка УПД из УТ 11.5, УТ 11.4, БП 3.0, УНФ 1.6, КА 2.4 и ERP 2.4 для OZON и Яндекс Маркет
Найденные решения
(30) попробуйте такой запрос,
(потом можете вставить его в СКД-отчет и сгруппировать по полю Объект, будет вообще красиво)
(потом можете вставить его в СКД-отчет и сгруппировать по полю Объект, будет вообще красиво)
//РегистрСведений.Активность, поля: дата, объект, автор, реквизит, значение.
//формируем таблицу только с записями "Исходящий звонок"
Выбрать
рег.*
поместить втТаб
из
РегистрСведений.Активность рег
где
рег.Реквизит = "Исходящий звонок"
;
//результирующая выборка
//1.сами строчки с "Исходящий звонок"
Выбрать
втТаб.*
из втТаб
Объединить все
//2. дополнительные строчки с "" и интевалом 5 мин (= 300 сек)
Выбрать
рег.*
из
втТаб
внутреннее соединение РегистрСведений.Активность рег
по втТаб.объект = Рег.объект //связь по объекту
и Рег.Реквизит = "" //по условию что Реквизит = ""
и РазностьДат(втТаб.Дата, рег.Дата, Секунда) <= 300 //и попадающие в 5 минут
упорядочить по
Объект, Дата
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5)Первый вложенный запрос - получаю дату записи со значением "Авто", в итоговом запросе делаю выборку по дате бОльшей полученной из вложенного запроса; второй вложенный запрос - получаю дату записи с реквизитом "исходящий запрос", в итоговом запросе делаю выборку с условием по дате > полученной из второго вложенного и < той же + 5 минут
Подскажите, как это наиболее рационально сделать, если мое решение вышло нелогичным?
Подскажите, как это наиболее рационально сделать, если мое решение вышло нелогичным?
(7) задача невыполнима без учебы. Это как водить автомобиль, невозможно сесть и доехать до Питера, не научившись предварительно.
На самом деле это недолго, достаточно прочитать какой-нибудь приличный курс по языку SQL, несколько дней и несложные задачи будут решаться без проблем.
На самом деле это недолго, достаточно прочитать какой-нибудь приличный курс по языку SQL, несколько дней и несложные задачи будут решаться без проблем.
(13) Минимизирую условия до проблемы. Регистр: период (дата), автор, реквизит, значение.
Мне необходимо вывести запись с реквизит = "Исходящий звонок" и следующие записи с реквизит = "", у которых период (дата) с момента исходящего звонка прошло не более 5 минут.
т.е. период записи (с реквизит = "Исходящий звонок") < период (с реквизит = "") < период записи (с реквизит = "Исходящий звонок") + 5 минут
Мне необходимо вывести запись с реквизит = "Исходящий звонок" и следующие записи с реквизит = "", у которых период (дата) с момента исходящего звонка прошло не более 5 минут.
т.е. период записи (с реквизит = "Исходящий звонок") < период (с реквизит = "") < период записи (с реквизит = "Исходящий звонок") + 5 минут
а записи с этими реквизитами как-то связаны между собой (например по Автору?)
очень непонятное описание,
допустим есть реквизит "Исходящий звонок" и по условию еще больше 100 строк в течении 5 минут с пустым реквизитом
как вы представляете себе такой результат?
очень непонятное описание,
допустим есть реквизит "Исходящий звонок" и по условию еще больше 100 строк в течении 5 минут с пустым реквизитом
как вы представляете себе такой результат?
(29)
Регистр:
дата, объект, автор, реквизит, значение.
Записи:
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, А, "", сбросил
Что я пытаюсь сделать: найти дату исходящего звонка и сравнить ее.
Так как записей с рек "исходящий звонок", то записи дублируются.
Регистр:
дата, объект, автор, реквизит, значение.
Записи:
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, А, "", сбросил
Что я пытаюсь сделать: найти дату исходящего звонка и сравнить ее.
Так как записей с рек "исходящий звонок", то записи дублируются.
(35) Сравнить период остальных записей с реквизитом "" - чтобы отобрать те, которые добавлены в промежуток от периода записи с рек "Исх звонок" до периода записи с рек "Исх звонок" + 5 минут.
там первый запрос - получаю период записи с рек "Исх звонок", а потом последнее условие в основном запросе
там первый запрос - получаю период записи с рек "Исх звонок", а потом последнее условие в основном запросе
(33) Это не совсем тривиальная задача и простым запросом с парой таблиц не решается.
Если ее так уж надо решить, не обучаясь запросам, я бы советовал выгрузить все в таблицу значений и ее дальше обрабатывать. Будет не так быстро работать, но требует знаний только синтаксиса 1С и можно сделать намного быстрее, чем искать того, кто не поленится бесплатно делать запрос.
Если ее так уж надо решить, не обучаясь запросам, я бы советовал выгрузить все в таблицу значений и ее дальше обрабатывать. Будет не так быстро работать, но требует знаний только синтаксиса 1С и можно сделать намного быстрее, чем искать того, кто не поленится бесплатно делать запрос.
(30) попробуйте такой запрос,
(потом можете вставить его в СКД-отчет и сгруппировать по полю Объект, будет вообще красиво)
(потом можете вставить его в СКД-отчет и сгруппировать по полю Объект, будет вообще красиво)
//РегистрСведений.Активность, поля: дата, объект, автор, реквизит, значение.
//формируем таблицу только с записями "Исходящий звонок"
Выбрать
рег.*
поместить втТаб
из
РегистрСведений.Активность рег
где
рег.Реквизит = "Исходящий звонок"
;
//результирующая выборка
//1.сами строчки с "Исходящий звонок"
Выбрать
втТаб.*
из втТаб
Объединить все
//2. дополнительные строчки с "" и интевалом 5 мин (= 300 сек)
Выбрать
рег.*
из
втТаб
внутреннее соединение РегистрСведений.Активность рег
по втТаб.объект = Рег.объект //связь по объекту
и Рег.Реквизит = "" //по условию что Реквизит = ""
и РазностьДат(втТаб.Дата, рег.Дата, Секунда) <= 300 //и попадающие в 5 минут
упорядочить по
Объект, Дата
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот