КоллекцияКолонокРезультатаЗапроса

Типы · QueryResultColumnsCollection

Представляет собой коллекцию колонок результата запроса.

Полное описание, параметры и ограничения

КоллекцияКолонокРезультатаЗапроса (QueryResultColumnsCollection)

КоллекцияКолонокРезультатаЗапроса (QueryResultColumnsCollection)

Доступен, начиная с версии 8.0.

Элементы коллекции:
КолонкаРезультатаЗапроса
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс колонки (нумерация с 0).

Свойства:
<Имя колонки> (<Column name>)

Методы:
Индекс (IndexOf)
Количество (Count)
Найти (Find)
Получить (Get)

Описание:

Представляет собой коллекцию колонок результата запроса.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

См. также:
РезультатЗапроса, свойство Колонки

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Прочитать схему результата и повторно обойти выборку

Показываем отличие описания колонок от текущей строки: индекс начинается с нуля, а выборку сначала нужно позиционировать.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Обе строки и два поля заданы в тексте; нет обращений к данным конфигурации.

  2. Оставьте УПОРЯДОЧИТЬ ПО Название для стабильного порядка Книга, Ручка.

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ""Книга"" КАК Название, 3 КАК Количество
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1
|УПОРЯДОЧИТЬ ПО Название";
Результат = Запрос.Выполнить();

Сообщить(Не Результат.Пустой());
Колонки = Результат.Колонки;
Сообщить(Колонки.Количество() = 2);
Колонка = Колонки.Найти("Количество");
Если Колонка = Неопределено Тогда
    ВызватьИсключение "Не найдена колонка Количество";
КонецЕсли;
Сообщить(Колонки.Индекс(Колонка) = 1);
Сообщить(Колонки.Получить(0).Имя = "Название");
Сообщить(Колонка.ТипЗначения.СодержитТип(Тип("Число")));
Сообщить("Ширина колонки: " + Строка(Колонка.Ширина));
Выборка = Результат.Выбрать();
Сообщить(Выборка.Количество() = 2);
Пока Выборка.Следующий() Цикл
    Сообщить(СтрШаблон("%1: %2", Выборка.Получить(0), Выборка.Получить(1)));
КонецЦикла;
Выборка.Сбросить();
Если Не Выборка.НайтиСледующий(Новый Структура("Название", "Ручка")) Тогда
    ВызватьИсключение "Учебная строка Ручка не найдена";
КонецЕсли;
Сообщить(Выборка.Количество = 1);
Выборка.Сбросить();
Сообщить(Выборка.НайтиСледующий("Книга", "Название"));
Сообщить(Выборка.Количество = 3);
Сообщить(Не Выборка.НайтиСледующий("Книга", "Название"));
Сообщить(Выборка.Владелец() = Результат);

Разбор по шагам

  1. Колонки — описание схемы результата, а не массив значений первой строки. Найти возвращает описание или Неопределено.

  2. Индекс Количество равен 1; Получить(0) у коллекции описаний — колонка Название. ТипЗначения — ОписаниеТипов.

  3. Количество() у выборки считает строки, а поле .Количество без скобок содержит значение текущего товара.

  4. Сбросить возвращает курсор перед первой строкой. НайтиСледующий ищет после текущей позиции: текущая строка повторно не рассматривается.

  5. Владелец возвращает результат, из которого создана выборка; он не возвращает строку товара.

Как проверить результат

  1. Показаны Книга: 3 и Ручка: 1, схема содержит две колонки и индекс 1 для Количество.

  2. Поиск структурой находит Ручка/1, поиск по значению находит Книга/3; повторный поиск Книга без сброса даёт Ложь.

  3. Ширина выводится для наблюдения: не используйте её как размер строки в байтах.

Ожидаемый результат

Схема колонок и состояние курсора проверены отдельно; показаны оба варианта НайтиСледующий.

На что обратить внимание

  1. Нельзя читать поля выборки до успешного Следующий или НайтиСледующий.

  2. Сбросить не выполняет запрос заново: это обход уже полученного результата.

  3. Имена полей и методов могут совпадать; здесь .Количество и .Количество() означают разное.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.