В своем коде разработчикам 1С приходится обращаться к базе данных, получать оттуда информацию и работать с ней. Операцию работы с результатом запроса данных из БД называют «выборкой». Для успешной работы и написания оптимального кода необходимо понимать, как нужно работать с запросом и полученными данными. Также важно запомнить основные инструменты платформы, используемые для выборки.
Синтаксис выборки 1С 8.3 и работа с ее результатом
Чаще всего в конфигурациях 1С можно встретить два варианта получения выборки для работы с ней:
-
Используя запрос. Программист 1С пишет запрос на языке 1С, выполняет его и получает результат запроса – таблицу с данными. Методом "Выбрать()" выбираются данные из полученного результата;
ЗапросДанных = Новый Запрос("Выбрать ссылка Из Справочник.Валюта"); ВыборкаДанных = ЗапросДанных.Выполнить().Выбрать();
-
Используя менеджер объекта. По сути, это выполнение запроса ко всем элементам конкретного типа с выбором всех полей. Синтаксис намного проще, чем в предыдущем варианте, но нагрузка на сервер больше, и в будущем возможны проблемы с правами доступа. Современные требования к коду не допускают использование подобных конструкций.
ВыборкаДанных = Справочники.Валюта.Выбрать();
В обоих случаях, чтобы получить выборку из документов или справочников, необходимо использовать метод «Выбрать()». В результате в переменную «ВыборкаДанных» помещаются данные типа «ВыборкаИзРезультатаЗапроса». Это таблица, в которой содержаться все поля, перечисленные в запросе, использующая индексы. После этого с ними можно работать, используя различные методы данного типа данных:
Владелец() – возвращает результат запроса, из которого и была сформирована полученная выборка;
Следующий() – позволяет последовательно перебрать все записи выборки, перемещая указатель на следующую строку. Чаще всего используется, так как позволяет выполнять определенные действия со всеми выбранными записями в цикле. Будьте аккуратны и не допускайте выполнения запросов в цикле;
Пока Выборка.Следующий() Цикл
//действия с 1 записью из выборки
КонецЦикла;
НайтиСледующий(УсловияПоиска) – позволяет отобрать из выборки только те записи,
которые удовлетворяют условию поиска. УсловияПоиска – переменная типа
«Структура», содержащая имена полей и нужные значения;
СтуктураПоиска = Новый Структура("Наименование");
СтуктураПоиска.Наименование = НужноеНаименование;
Пока Выборка.НайтиСледующий(СтуктураПоиска) Цикл
//действия с записью из выборки
КонецЦикла;
СледующийПоЗначениюПоля(ИмяПоля) – позволяет перебирать записи только с уникальными значениями конкретного поля, указанного в параметре;
Сбросить() – позволяет в процессе перебора результата выборки вернуться к верхней записи;
Количество() – метод показывает сколько записей получилось в результате выборки из результата запроса;
КоличествоЗаписей = Выборка.Количество();
Получить(ЧислоИндекса) – команда возвращает запись с заданным индексом в качестве параметра;
Выбрать(ТипОбхода) – применяется в том случае, если в качестве параметра указан обход «По группировкам». Стандартно применяется тип "Прямой", в случае получения результатов запроса с 1 группировкой применяют "ПоГруппировкам". Если же группировок несколько, то выбирайте "ПоГруппировкамСИерархией";
ВыборкаДанных = ВыборкаДанных.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Уровень() – показывает в виде числа уровень в иерархии;
ТипЗаписи() – возвращает тип текущей записи;
Группировка() – метод получает имя группировки, если это простая запись – пустую строчку.
Выборка из результатов запроса применяется в подавляющем большинстве случаев, но иногда удобнее работать с таблицей результатов. Если нужны сразу все данные, лучше использовать не метод «Выбрать()», а «Выгрузить()». В результате в переменной оказываются данные с типом ТаблицаЗначений, где вы сможете найти сразу все данные.
ВыборкаДанных = ЗапросДанных.Выполнить().Выгрузить();
Вы сможете сортировать полученную таблицу, сравнивать различные строки, осуществлять поиск одинаковых элементов и многое другое. Также вы можете и выбирать построчно данные из этого типа данных с помощью обхода строк в цикле:
Для каждого строка из ВыборкаДанных цикл
///операторы работы с 1 строчкой из таблицы значений
КонецЦикла;
В случае пакетного запроса используемые методы немного отличаются. После написания запроса необходимо использовать метод «ВыполнитьПакет()». В результате в переменной будет массив результатов запросов. В дальнейшем с помощью операторов «Выбрать()» или «Выгрузить()» можно получить выборку из результатов запроса. Помните, что индексы массива начинаются с 0.
МассивРезультатовЗапросов = Запрос.ВыполнитьПакет();
ВыборкаДанныхЗапроса1 = МассивРезультатовЗапросов [0].Выбрать();
ВыборкаДанныхЗапроса2 = МассивРезультатовЗапросов [1].Выгрузить();
Запомните суть методов, так как их синтаксис вы всегда сможете найти во встроенном помощнике 1С. Большинство методов применяется в случае сложных запросов с группировками. Чаще всего разработчики 1С 8.3 обходятся простым обходом выборки с помощью метода Следующий(). Но дополнительные возможности платформы необходимо знать и использовать их в нужный момент. Если у вас остались вопросы, обращайтесь к нашим специалистам за консультацией по программам 1С. Мы с радостью вам поможем!
консультация эксперта
самые свежие новости 1 раз в месяц