Перейти к основному содержимому

Выборки данных 1С

Разработчику

Play ITЗагрузка интерактивного демо…


Два способа получить данные из базы

Данные из справочников, документов и регистров можно читать:

  1. Методами менеджера — выборка, НайтиПоНаименованию, ПолучитьСсылку;
  2. Языком запросовВЫБРАТЬ … ИЗ … ГДЕ ….

Выборка — первый способ, который удобен для последовательного обхода небольшого числа элементов. Запрос — для фильтрации, соединений и агрегации на стороне СУБД.


Выборка справочника

Выборка — объект для перебора элементов справочника по условию отбора.

&НаСервере
Процедура ВывестиАктивныхКонтрагентов()
Выборка = Справочники.Контрагенты.Выбрать(, , Новый Структура("ПометкаУдаления", Ложь));
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + " — " + Выборка.ИНН);
КонецЦикла;
КонецПроцедуры

Метод Выбрать(Родитель, Отбор, …) возвращает итератор. Следующий() переходит к следующему элементу и возвращает Истина, пока элементы есть.

Отбор и родитель

ПараметрНазначение
РодительТолько дочерние элементы иерархического справочника
ОтборСтруктура или Массив условий по реквизитам
ПорядокСортировка обхода

Для одного элемента по коду или наименованию чаще используют НайтиПоКоду, НайтиПоНаименованию, НайтиПоРеквизиту — без полного обхода.


Выборка документов

&НаСервере
Процедура ДокументыЗаПериод(ДатаНач, ДатаКон)
Выборка = Документы.РеализацияТоваров.Выбрать(ДатаНач, ДатаКон);
Пока Выборка.Следующий() Цикл
Если Выборка.Проведен Тогда
Сообщить(Выборка + " сумма " + Выборка.СуммаДокумента);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

У документов выборка часто задаётся интервалом дат. Для сложных условий (несколько реквизитов, соединения с регистрами) переходите на запрос.


Выборка и запрос — когда что использовать

СитуацияВыборкаЗапрос
Обход всех элементов группы справочникаизбыточен
Отбор по 3+ полям, JOIN, итоги
Нужна ТаблицаЗначений для отчёта
Поиск одного элемента по уникальному полюметод Найти*
Миллионы строк✓ с ограничением полей

Правило: если данные можно описать одним объектом метаданных и простым отбором — выборка читается проще. Как только появляются агрегаты, соединения или выборка "кусочками" — запрос.

Пример того же отбора запросом (см. также Работа с базами данных 1С):

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

Обход результата запроса

Запрос возвращает РезультатЗапроса. Его тоже можно обойти выборкой:

Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Выборка.Наименование, Выборка.ИНН
КонецЦикла;

Или сразу получить ТаблицаЗначений через Выгрузить() — удобно для форм и обработок.


Ограничения выборки

  • Обход идёт по одному объекту за шаг — лишние обращения к БД при массовых операциях.
  • Нет группировки и суммирования — только код в цикле.
  • Регистры сведений и накопления читают через наборы записей и виртуальные таблицы в запросах — см. Регистры 1С — записи, срезы, остатки.

Связанные материалы