Отбор строк с одинаковыми реквизитами в запросе
По теме из базы знаний
- Быстрый поиск дублей с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)
- Как сделать запрос на изменение данных
- Об общих реквизитах
- Строковые отборы в 1С
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) Ну в лоб тогда:
ТабДокумент = Новый ТабличныйДокумент;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Данные.Модель КАК Модель,
| Данные.Ширина КАК Ширина,
| Данные.Длина КАК Длина
|ИЗ
| ВтДанные КАК Данные
|
|ИТОГИ ПО
| Длина, Ширина";
Результат = Запрос.Выполнить();
// Подсчет количества колонок в таблице без учета показателей длины и ширины.
МаксКоличествоМоделейВСтроке = 0;
ВыборкаПоДлине = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоДлине.Следующий() Цикл
ВыборкаПоШирине = ВыборкаПоДлине.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоШирине.Следующий() Цикл
ВыборкаМоделей = ВыборкаПоШирине.Выбрать();
КоличествоМоделейВСтроке = ВыборкаМоделей.Количество();
Если МаксКоличествоМоделейВСтроке < КоличествоМоделейВСтроке Тогда
МаксКоличествоМоделейВСтроке = КоличествоМоделейВСтроке;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// Вывод шапки таблицы.
НомерСтроки = 1;
НомерКолонки = 0;
Пока НомерКолонки < МаксКоличествоМоделейВСтроке Цикл
НомерКолонки = НомерКолонки + 1;
ОбластьШапки = ТабДокумент.Область(НомерСтроки, НомерКолонки);
ОбластьШапки.Текст = СтрШаблон(НСтр("ru = 'Модель %1'"), НомерКолонки);
КонецЦикла;
ОбластьШапки = ТабДокумент.Область(НомерСтроки, НомерКолонки + 1);
ОбластьШапки.Текст = НСтр("ru = 'Длина'");
ОбластьШапки = ТабДокумент.Область(НомерСтроки, НомерКолонки + 2);
ОбластьШапки.Текст = НСтр("ru = 'Ширина'");
// Вывод строк таблицы.
ВыборкаПоДлине.Сбросить();
Пока ВыборкаПоДлине.Следующий() Цикл
ВыборкаПоШирине = ВыборкаПоДлине.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоШирине.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;
НомерКолонки = 0;
ВыборкаМоделей = ВыборкаПоШирине.Выбрать();
Пока ВыборкаМоделей.Следующий() Цикл
НомерКолонки = НомерКолонки + 1;
ОбластьСтроки = ТабДокумент.Область(НомерСтроки, НомерКолонки);
ОбластьСтроки.Текст = ВыборкаМоделей.Модель;
КонецЦикла;
НомерКолонки = МаксКоличествоМоделейВСтроке;
ОбластьСтроки = ТабДокумент.Область(НомерСтроки, НомерКолонки + 1);
ОбластьСтроки.Текст = ВыборкаПоДлине.Длина;
ОбластьСтроки = ТабДокумент.Область(НомерСтроки, НомерКолонки + 2);
ОбластьСтроки.Текст = ВыборкаПоШирине.Ширина;
КонецЦикла;
КонецЦикла;
Возврат ТабДокумент;
Показать
(6) Спасибо, но задание полностью нужно было выполнить в запросе. Задачу я решил, но в данных задачи моделей с одинаковыми длиной и шириной не более двух. Какой будет алгоритм если моделей будет больше решение не искал. Хотя решение было бы интересно посмотреть.
(7)
моделей с одинаковыми длиной и шириной не более двух
Это же ключевое условие, не находите? :-) Надо было обязательно написать его в посте, форумчане решение подсказали бы моментально.
Какой будет алгоритм если моделей будет больше решение не искал. Хотя решение было бы интересно посмотреть.
Полагаю, его нет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот