Тип: Булево. Указывает необходимость выбора различных значений записей. Соответствует выражению РАЗЛИЧНЫЕ языка запросов.
Полное описание, параметры и ограничения
ОператорВыбратьСхемыЗапроса.ВыбиратьРазличные (QuerySchemaSelectOperator.SelectDistinct)
ОператорВыбратьСхемыЗапроса (QuerySchemaSelectOperator)
ВыбиратьРазличные (SelectDistinct)
Доступен, начиная с версии 8.3.5.
Использование:
Только чтение.
Описание:
Тип: Булево.
Указывает необходимость выбора различных значений записей.
Соответствует выражению РАЗЛИЧНЫЕ языка запросов.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.3.5.
Методическая информация
Практические примеры
Убрать повторы изменением вида объединения
Два оператора выбирают одинаковые числа. ОБЪЕДИНИТЬ ВСЕ даёт две строки, после изменения объединения ожидаем одну. Это не изменение данных базы.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В учебной обработке или общем модуле выполните каждый фрагмент отдельно на сервере. Все запросы используют только свои числа и параметры, без справочников, документов и регистров рабочей базы.
СхемаЗапроса редактирует структуру и формирует текст, а Запрос выполняет этот текст. Родительская схема должна оставаться в переменной, пока используются её дочерние объекты.
Не переносите полученные дочерние объекты между разными схемами и не обращайтесь к элементу после его удаления. Упражнения удаления работают только со своей структурой в памяти.
Схема = Новый СхемаЗапроса;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ 3 КАК Количество, 250 КАК Цена ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3, 250");
Если Схема.ПакетЗапросов.Количество() <> 1 Тогда
ВызватьИсключение "Ожидался один собственный объединённый запрос";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда
ВызватьИсключение "Ожидался собственный запрос выбора";
КонецЕсли;
Операторы = Выбор.Операторы;
Если Операторы.Количество() <> 2 Тогда
ВызватьИсключение "Ожидались два собственных оператора";
КонецЕсли;
Первый = Операторы.Получить(0);
Второй = Операторы.Получить(1);
Запрос = Новый Запрос(Схема.ПолучитьТекстЗапроса());
До = Запрос.Выполнить().Выгрузить();
Сообщить(До.Количество() = 2);
Первый.ВыбиратьДляИзменения = Ложь;
Первый.КоличествоПолучаемыхЗаписей = 1;
Сообщить(Первый.КоличествоПолучаемыхЗаписей = 1);
Первый.КоличествоПолучаемыхЗаписей = Неопределено;
Сообщить(Первый.КоличествоПолучаемыхЗаписей = Неопределено);
Сообщить(Не Первый.ВыбиратьДляИзменения И Не Первый.ВыбиратьРазличные);
Сообщить(Первый.Источники.Количество() = 0);
Сообщить(Первый.Группировка.Количество() = 0 И Первый.Отбор.Количество() = 0);
Сообщить(Первый.ТаблицыДляИзменения.Количество() = 0);
Сообщить(Первый.ВыраженияОтбораКомпоновкиДанных.Количество() = 0);
Второй.ТипОбъединения = ТипОбъединенияСхемыЗапроса.Объединить;
Сообщить(Второй.ТипОбъединения = ТипОбъединенияСхемыЗапроса.Объединить);
Запрос.Текст = Схема.ПолучитьТекстЗапроса();
После = Запрос.Выполнить().Выгрузить();
Если После.Количество() <> 1 Тогда
ВызватьИсключение "Повторы собственных строк не устранены";
КонецЕсли;
Сообщить(После[0].Количество = 3 И После[0].Цена = 250);Разбор по шагам
Сначала выполняем исходный текст и проверяем две строки с одинаковыми собственными значениями.
ПЕРВЫЕ задаётся КоличествоПолучаемыхЗаписей; Неопределено снимает ограничение. Здесь каждая выборка и так создаёт одну строку.
ВыбиратьРазличные соответствует РАЗЛИЧНЫЕ внутри оператора и readonly по API. Его не присваиваем и не путаем с видом объединения операторов.
Пустые источники, группировка и отбор объясняются запросом констант. ТаблицыДляИзменения пусты: блокировка данных не запрашивается.
Меняем ТипОбъединения второго оператора на Объединить, заново формируем текст и выполняем его.
Результат проверяем по одной реальной строке 3/250. Исходные строки не удалены из базы: они созданы только выражениями запроса.
Как проверить результат
Десять сравнений Истина.
После изменения одна строка 3/250 вместо двух; никаких рабочих таблиц или изменений записей нет.
Ожидаемый результат
Показана практическая разница между сохранением и удалением повторов в объединении.
На что обратить внимание
При разных значениях строк Объединить не сводит результат к одной строке.
ВыбиратьДляИзменения относится к блокировкам, а не к обновлению чисел автоматически.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.