Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 17:40

Как правильно сделать запрос и получить количество повторяющихся элементов в таблице (временная)?

Автор Владислав Клишин, 18 янв 2016, 11:49

0 Пользователей и 1 гость просматривают эту тему.

Владислав Клишин

у меня есть обработка с табличной частью документа. Табличная часть включает в себя два реквизита
- НомерСтроки
- СтрокаТабЧасти

СтрокаТабЧасти заполняется символами рандомно.
Мне нужно вывести все повторяющиеся элементы в таблице с помощью запроса:

Моя попытка:

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


Запрос.УстановитьПараметр("ТабличнаяЧасть",Объект.ТабЧасть.Выгрузить());
РезультатЗапроса = Запрос.Выполнить();


Результат:




Дмитрий@

"ВЫБРАТЬ
        |  СтрокаТабЧасти,
        |  НомерСтроки
        |ПОМЕСТИТЬ
        |  ВременнаяТаблица
        |ИЗ
        |  &ТабличнаяЧасть КАК ТабличнаяЧасть
        |;
        |////////////////////////////////////////
        |ВЫБРАТЬ РАЗЛИЧНЫЕ
        |  СтрокаТабЧасти   
        |ИЗ
        |  ВременнаяТаблица КАК ВременнаяТаблица";

vitasw

Ну и как этот запрос поможет в вопросе автора?
Цитата: Владислав Клишин от 18 янв 2016, 11:49все повторяющиеся элементы

В качестве идеи. Это не готовый вариант, нужно еще будет поиграться:
"ВЫБРАТЬ
| ЗаказПокупателяТовары.НомерСтроки,
| ЗаказПокупателяТовары.Номенклатура
|ПОМЕСТИТЬ втТовары
|ИЗ
| Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура,
| СУММА(ВложенныйЗапрос.Счетчик) КАК Счетчик
|ПОМЕСТИТЬ вт2
|ИЗ
| (ВЫБРАТЬ
| втТовары.НомерСтроки КАК НомерСтроки,
| втТовары.Номенклатура КАК Номенклатура,
| 1 КАК Счетчик,
| втТовары1.НомерСтроки КАК НомерСтроки1
| ИЗ
| втТовары КАК втТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втТовары КАК втТовары1
| ПО втТовары.Номенклатура = втТовары1.Номенклатура
| И втТовары.НомерСтроки < втТовары1.НомерСтроки) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| вт2.Номенклатура,
| вт2.Счетчик
|ИЗ
| вт2 КАК вт2
|ГДЕ
| вт2.Счетчик > 1"

TerverVl

Готовый вариант:

Запрос.Текст =
"ВЫБРАТЬ
| ТабличнаяЧасть.СтрокаТабЧасти,
| ТабличнаяЧасть.НомерСтроки,
| 1 КАК Количество
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ТабличнаяЧасть КАК ТабличнаяЧасть
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.СтрокаТабЧасти,
| МИНИМУМ(ВТ.НомерСтроки) КАК НомерСтроки,
| СУММА(ВТ.Количество) КАК Количество
|ПОМЕСТИТЬ ВТ_Повторяющиеся
|ИЗ
| ВТ КАК ВТ
|
|СГРУППИРОВАТЬ ПО
| ВТ.СтрокаТабЧасти
|
|ИМЕЮЩИЕ
| СУММА(ВТ.Количество) > 1
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.НомерСтроки,
| ВТ.СтрокаТабЧасти
|ИЗ
| ВТ КАК ВТ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Повторяющиеся КАК ВТ_Повторяющиеся
| ПО ВТ.СтрокаТабЧасти = ВТ_Повторяющиеся.СтрокаТабЧасти";


И ещё момент, чтобы запрос работал, нужно реквизит Табличной части "СтрокаТабЧасти" сделать строкой ограниченной длины.

Дмитрий@

ЦитироватьНу и как этот запрос поможет в вопросе автора?
Цитата: Владислав Клишин от Сегодня в 11:49
все повторяющиеся элементы
М..да, немножко не понял вопроса

Теги:  SQL Запрос 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск