Собственно, чтение в объектной технике – это запрос к базе, текст которого генерируется платформой. Если, например, выполнять такой запрос в цикле, это будет ничуть не меньшая, а иногда даже более серьезная ошибка, чем выполнение запроса, написанного на языке запросов.
У чтения в объектной модели есть три особенности.
Разберем их по очереди.
1. Иногда ставятся управляемые блокировки.
Как указано в разделе 3.8 «Сведения о блокировках «1С», платформой устанавливаются управляемые разделяемые блокировки при чтении в объектной технике следующих видов объектов:
2. Иногда чтение происходит в неявной транзакции.
Как указано в разделе. 3.6, чтение в объектной технике объектов, имеющих табличные части, будет выполняться в неявной транзакции. Например, запрос ДокументПроведен = ДокументСсылка.Проведен; выполнится в транзакции, если для документа данного типа в конфигураторе определена табличная часть, но этот же запрос будет выполняться вне транзакции, если табличных частей у документа нет.
3. Считываются все данные.
Если посмотреть с помощью замера на отладчике, как выполняется следующий код, то можно увидеть, что основное время всегда тратится на выполнение первой строки:
ДокументПроведен = ДокументСсылка.Проведен;
ДокументДата = ДокументСсылка.Дата;
ДокументНомер = ДокументСсылка.Номер;
Если пройти код пошагово отладчиком и при этом посмотреть трассировку в профайлере SQL Server, можно увидеть, что запрос (если есть еще и табличная часть, то несколько запросов в транзакции) выполняется только на первой строке, при этом тексты запросов содержат имена всех реквизитов и все табличные части. На второй и на третьей строке запросы к базе уже не выполняются. На практике это приводит к следующему:
По совокупности особенностей можно дать как минимум следующие рекомендации: