Нормально ли выводить реквизиты на форму через точку?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на управляемых формах 1С часто возникает вопрос: насколько корректно использовать обращение к данным через точку прямо в свойствах элемента формы? Например, когда мы хотим вывести Дата документа-основания через путь к данным Объект.ДокументОснование.Дата. Давайте вместе разберем, когда это решение допустимо, а когда стоит выбрать более производительный подход.

Понимание механизма работы платформы

Когда вы добавляете путь к данным через точку в свойство ПутьКДанным элемента формы, платформа 1С воспринимает это как задачу отображения конкретного поля связанного объекта. В отличие от программного кода, где обращение к свойству через точку может быть критически неэффективным (из-за потенциальной выгрузки лишних данных в память сервера приложений), механизм формы реализован на стороне платформы более гибко. Платформа старается получить только те значения, которые реально отображаются на текущий момент.

Когда вывод через точку — это оптимальное решение

Рассмотрим ситуации, где этот метод вполне оправдан:

  1. Простые формы: Если вам нужно вывести 1–3 связанных реквизита в шапку документа или справочника, использование «точки» не окажет существенного влияния на производительность.
  2. Оперативность разработки: Если нагрузка на систему невелика, а требования к скорости открытия формы не являются экстремально критичными, удобство поддержки кода через путь к данным перевешивает микроскопические потери ресурсов.
  3. Стандартный функционал: Платформа 1С позволяет даже пользователям в режиме «Предприятие» через инструмент Изменить форму добавлять подобные поля. Это подтверждает, что механизм является штатным и поддерживаемым самой платформой.

Когда стоит отказаться от «точки» в пользу программных запросов

Несмотря на удобство, существуют сценарии, в которых лучше использовать классический подход — создание отдельных реквизитов формы и их заполнение одним запросом. Разберем эти случаи:

Реализация через запрос: пошаговый подход

Если вы решили, что ваша форма требует оптимизации, выполните следующие действия:

  1. Создайте на форме новые реквизиты, соответствующие типам данных, которые вы хотите вывести.
  2. В обработчике события ПриСозданииНаСервере или ПриИзменении источника данных напишите один запрос.
  3. Соберите все необходимые данные одним махом, используя Соединение с таблицей документа-основания.
  4. Присвойте полученные значения реквизитам формы.

Посмотрим на пример логики, которой стоит придерживаться при оптимизации:


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

Запрос.УстановитьПараметр("Ссылка", Объект.ДокументОснование);
Результат = Запрос.Выполнить().Выбрать();

Если Результат.Следующий() Тогда
    ЭтаФорма.ДатаДокументаОснования = Результат.ДатаОснования;
    ЭтаФорма.СуммаДокументаОснования = Результат.СуммаОснования;
КонецЕсли;

Итоги и рекомендации

Проанализировав ситуацию, мы приходим к выводу, что не стоит оптимизировать то, что не является узким местом. Если форма работает быстро и вы выводите пару реквизитов в шапку — используйте путь к данным «через точку». Это сделает код чище и проще для сопровождения.

Однако, как только вы переходите к работе с динамическими списками, табличными частями или большим объемом связанных данных, переходите на использование Запрос. Помните, что архитектура «один раз получили данные — один раз отобразили» всегда будет выигрывать у многочисленных мелких обращений к серверу.

← На главную