Для выборки данных платформой 1С Предприятие применяется два основных принципа: объектная модель и запросы к БД. Сами разработчики платформы рекомендуют использовать именно подход выборки с помощью запроса. На следующем фрагменте кода вы можете увидеть принцип работы объектной модели. Для примера взят код получения единицы измерения из номенклатуры.
Выборка = Справочники.Товары.Выбрать(); Пока Выборка.Следующий() Цикл СсылкаТовар = Выборка.Ссылка; ЕдиницаИзмерения = СсылкаТовар.ЕдиницаИзмерения; КонецЦикла
В получении данных "через точку" и скрыта основная проблема этого принципа.
Какие недостатки имеет объектная модель и почему не следует ею пользоваться постянно?
Для начала проведем простейший тест на скорость выборки данных. Разработаем два алгоритма, один из которых будет осуществлять выборку данных с помощью объектной модели, второй - с использованием класса "Запрос".
С помощью встроенного инструмента замера производительности определим время прохождения системы по каждому из алгоритмов. Заполним необходимый справочник элементами (в данном случае было записано 5000 элементов) и произведем эксперимент. Результаты вы можете видеть на следующем скриншоте. Мы видим, что объектный подход проигрывает в десятки раз!
Дело в том, что платформа по разному работает в части работы с базой данных. Например, при обращении "через точку", система выполняет запрос к БД на выбор абсолютно всех полей. Не зависимо от того, что вам нужно только одно поле, платформа тянет за собой и все остальные, доступные для данного объекта.
А при помощи запроса, мы выбираем, какие поля необходимы нам для выборки. Кроме того, ощутимый перевес в скорости сможет нам дать наложение специальных фильтров на таблицы и их соединения.
Не смотря на все недостатки, использовать объектную модель иногда просто необходимо. Потому что написанный код, состоящий из одних только запросов, интуитивно непонятен и его сложно будет читать другим разработчикам. Кроме того, в ряде случаев использовать необъектные алгоритмы просто невозможно.
Для оптимизации программного кода, используя объектную модель, необходимо придерживаться некоторых правил:
Придерживаясь этих пунктов, вы можете избежать крупных потерь производительности при использовании объектной модели.
Для работы с SQL базой и таблицами значений, наиболее правильно будет использовать класс "Запрос" для получения нужных полей объекта, так как при таком подходе разработчик может влиять на количество полей, выбираемых платформой.
При использовании объектной модели необходимо помнить, что нельзя пренебрегать использованием временных переменных для хранений данных промежуточных объектов. Также крайне нежелательно использовать несколько точек в одном обращении к полю.
Используя запросы, нужно позаботится об их оптимальности, накладывая необходимые фильтры и условия на таблицы и их соединения, чтобы по максимуму ограничить количество полей перед выборкой.