В процессе разработки на управляемых формах 1С часто возникает вопрос: насколько корректно использовать обращение к данным через точку прямо в свойствах элемента формы? Например, когда мы хотим вывести Дата документа-основания через путь к данным Объект.ДокументОснование.Дата. Давайте вместе разберем, когда это решение допустимо, а когда стоит выбрать более производительный подход.
Когда вы добавляете путь к данным через точку в свойство ПутьКДанным элемента формы, платформа 1С воспринимает это как задачу отображения конкретного поля связанного объекта. В отличие от программного кода, где обращение к свойству через точку может быть критически неэффективным (из-за потенциальной выгрузки лишних данных в память сервера приложений), механизм формы реализован на стороне платформы более гибко. Платформа старается получить только те значения, которые реально отображаются на текущий момент.
Рассмотрим ситуации, где этот метод вполне оправдан:
Изменить форму добавлять подобные поля. Это подтверждает, что механизм является штатным и поддерживаемым самой платформой.Несмотря на удобство, существуют сценарии, в которых лучше использовать классический подход — создание отдельных реквизитов формы и их заполнение одним запросом. Разберем эти случаи:
N+1 запросов. Если в списке 100 строк, система может генерировать отдельные запросы для каждой строки при отрисовке, что приведет к ощутимым зависаниям.Запрос, получить все данные на сервер и заполнить заранее созданные реквизиты формы.Если вы решили, что ваша форма требует оптимизации, выполните следующие действия:
ПриСозданииНаСервере или ПриИзменении источника данных напишите один запрос.Соединение с таблицей документа-основания.Посмотрим на пример логики, которой стоит придерживаться при оптимизации:
// Пример получения данных запросом для минимизации обращений к серверу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Дата КАК ДатаОснования,
| Док.СуммаДокумента КАК СуммаОснования
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Док
|ГДЕ
| Док.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.ДокументОснование);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
ЭтаФорма.ДатаДокументаОснования = Результат.ДатаОснования;
ЭтаФорма.СуммаДокументаОснования = Результат.СуммаОснования;
КонецЕсли;
Проанализировав ситуацию, мы приходим к выводу, что не стоит оптимизировать то, что не является узким местом. Если форма работает быстро и вы выводите пару реквизитов в шапку — используйте путь к данным «через точку». Это сделает код чище и проще для сопровождения.
Однако, как только вы переходите к работе с динамическими списками, табличными частями или большим объемом связанных данных, переходите на использование Запрос. Помните, что архитектура «один раз получили данные — один раз отобразили» всегда будет выигрывать у многочисленных мелких обращений к серверу.