Выборки данных 1С
Два способа получить данные из базы
Данные из справочников, документов и регистров можно читать:
- Методами менеджера — выборка,
НайтиПоНаименованию,ПолучитьСсылку; - Языком запросов —
ВЫБРАТЬ … ИЗ … ГДЕ ….
Выборка — первый способ, который удобен для последовательного обхода небольшого числа элементов. Запрос — для фильтрации, соединений и агрегации на стороне СУБД.
Выборка справочника
Выборка — объект для перебора элементов справочника по условию отбора.
&НаСервере
Процедура ВывестиАктивныхКонтрагентов()
Выборка = Справочники.Контрагенты.Выбрать(, , Новый Структура("ПометкаУдаления", Ложь));
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + " — " + Выборка.ИНН);
КонецЦикла;
КонецПроцедуры
Метод Выбрать(Родитель, Отбор, …) возвращает итератор. Следующий() переходит к следующему элементу и возвращает Истина, пока элементы есть.
Отбор и родитель
| Параметр | Назначение |
|---|---|
| Родитель | Только дочерние элементы иерархического справочника |
| Отбор | Структура или Массив условий по реквизитам |
| Порядок | Сортировка обхода |
Для одного элемента по коду или наименованию чаще используют НайтиПоКоду, НайтиПоНаименованию, НайтиПоРеквизиту — без полного обхода.
Выборка документов
&НаСервере
Процедура ДокументыЗаПериод(ДатаНач, ДатаКон)
Выборка = Документы.РеализацияТоваров.Выбрать(ДатаНач, ДатаКон);
Пока Выборка.Следующий() Цикл
Если Выборка.Проведен Тогда
Сообщить(Выборка + " сумма " + Выборка.СуммаДокумента);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
У документов выборка часто задаётся интервалом дат. Для сложных условий (несколько реквизитов, соединения с регистрами) переходите на запрос.
Выборка и запрос — когда что использовать
| Ситуация | Выборка | Запрос |
|---|---|---|
| Обход всех элементов группы справочника | ✓ | избыточен |
| Отбор по 3+ полям, JOIN, итоги | ✗ | ✓ |
Нужна ТаблицаЗначений для отчёта | ✗ | ✓ |
| Поиск одного элемента по уникальному полю | метод Найти* | ✓ |
| Миллионы строк | ✗ | ✓ с ограничением полей |
Правило: если данные можно описать одним объектом метаданных и простым отбором — выборка читается проще. Как только появляются агрегаты, соединения или выборка «кусочками» — запрос.
Пример того же отбора запросом (см. также 118.md):
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование,
| Контрагенты.ИНН
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ПометкаУдаления";
Результат = Запрос.Выполнить().Выгрузить();
Обход результата запроса
Запрос возвращает РезультатЗапроса. Его тоже можно обойти выборкой:
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Выборка.Наименование, Выборка.ИНН
КонецЦикла;
Или сразу получить ТаблицаЗначений через Выгрузить() — удобно для форм и обработок.
Ограничения выборки
- Обход идёт по одному объекту за шаг — лишние обращения к БД при массовых операциях.
- Нет группировки и суммирования — только код в цикле.
- Регистры сведений и накопления читают через наборы записей и виртуальные таблицы в запросах — см. 124.md.
Связанные материалы
Практика 15 минут
- В обработке на сервере обойдите выборкой элементы любого справочника учебной базы.
- Тот же список получите запросом в
ТаблицаЗначений. - Сравните количество строк и удобство кода при добавлении второго условия отбора.
Лаборатория — выборка и запрос (40 минут)
Задача: вывести номенклатуру с артикулом, содержащим «ABC».
Часть A — выборка
&НаСервере
Функция СписокЧерезВыборку(МаскаАртикула) Экспорт
Результат = Новый Массив;
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если СтрНайти(Выборка.Артикул, МаскаАртикула) > 0 Тогда
Результат.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Фильтр в коде — просто для обучения; на большой базе это медленно.
Часть B — запрос
&НаСервере
Функция СписокЧерезЗапрос(МаскаАртикула) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул ПОДОБНО &Маска
| И НЕ Номенклатура.ПометкаУдаления";
Запрос.УстановитьПараметр("Маска", "%" + МаскаАртикула + "%");
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецФункции
Часть C — сравнение
Замерьте время на 1000+ элементов (если есть тестовые данные). Зафиксируйте вывод: при втором условии отбора запрос короче и предсказуемее по нагрузке.
Проверка себя
- Чем
Выборка.Следующий()отличается от циклаДля каждогопо массиву? - Почему для остатков на складе выборка документов не подходит?
- Когда
Выгрузить()предпочтительнее построчного обхода?
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Платформа 1С - архитектура среды исполнения, назначение и место в автоматизации бизнес-процессов. История 1С - развитие платформы, ключевые этапы роста и влияние на цифровизацию бизнеса и госсектора. Экосистема 1С - продукты платформы, инструменты разработки, внедрение и сопровождение корпоративных решений. Архитектура платформы 1С, объекты метаданных, регистры, модули и исполнение прикладного кода. Пошаговое создание учебной конфигурации: справочники, документ, регистры, проведение, подсистемы и роли. Синтаксис и пунктуация 1С - базовые правила записи кода, операторы и структура выражений. Типизация, набор правил определения типа данных значений языка. Управление потоком выполнения в 1С - последовательность операций, ветвления и контроль выполнения сценариев. Функции и процедуры 1С - различия, правила использования и организация переиспользуемой бизнес-логики. Объекты и классы 1С - модель метаданных, экземпляры объектов и работа с прикладными сущностями. Данные — это конкретные записи, созданные пользователями или автоматически системой в рамках определённых объектов. Каждая запись имеет уникальный идентификатор и соответствует описанию в метаданных. Обработка ошибок в 1С - перехват исключений, диагностика сбоев и устойчивые сценарии обработки.Платформа 1С
История 1С
Экосистема 1С
Архитектура и мета-объекты 1С
Конфигурирование — мини-склад
Синтаксис и пунктуация 1С
Переменные и типы данных 1С
Управление потоком выполнения 1С
Функции и процедуры 1С
Объекты и классы 1С
Работа с базами данных 1С
Обработка ошибок 1С