Как быстро освоить управляемые формы 1С опытным разработчикам?

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

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

Ключевой сдвиг парадигмы: Данные против Объекта

Первое и самое важное, что нам необходимо осознать: на клиенте в управляемых формах (УФ) объекта не существует. Забудьте о возможности вызвать СправочникОбъект.Записать() прямо из модуля формы. Рассмотрим, как это работает теперь.

Вместо объекта форма оперирует типом ДанныеФормыСтруктура. Это «легкая» проекция данных, которая может отображаться в интерфейсе. Чтобы выполнить привычные действия (провести, записать, рассчитать), нам необходимо передать эти данные на сервер, преобразовать их в объект базы данных, выполнить действие и вернуть результат обратно. Проанализируем этот мост между формой и базой данных:

  1. Данные формы — то, что видит пользователь на экране.
  2. Прикладной объект — то, что живет только на сервере и имеет методы (Записать, Заполнить).

Для преобразования одного в другое используются специальные методы:

РеквизитФормыВЗначение("Объект") — превращает данные формы в реальный объект на сервере. ЗначениеВРеквизитФормы(Объект, "Объект") — обновляет данные на форме после манипуляций с объектом.

Директивы компиляции: &НаКлиенте против &НаСервере

Разберем по шагам, как управлять контекстом выполнения кода. В управляемом приложении каждая процедура или функция должна быть помечена директивой. От этого зависит скорость работы вашей обработки.

&НаКлиенте. Здесь мы описываем только логику интерфейса: открытие окон, вопросы пользователю, работу с файлами на диске клиента. Доступ к базе данных отсюда закрыт.

&НаСервере. Здесь доступна вся мощь платформы. Однако помните: при вызове серверного метода с клиента передается весь контекст формы. Если в форме много реквизитов и табличных частей, такая передача данных («гоняние пакетов») вызовет те самые тормоза, на которые часто жалуются пользователи.

&НаСервереБезКонтекста. Это наиболее оптимальный вариант для расчетов. В этот метод передаются только те параметры, которые вы явно указали. Контекст формы не передается, что делает вызов максимально быстрым. Выясним на примере, как это выглядит в коде:


&НаКлиенте
Процедура РассчитатьЦену(Команда)
    Результат = ПолучитьЦенуНаСервере(Объект.Товар);
    Объект.Цена = Результат;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЦенуНаСервере(ТоварСсылка)
    Возврат Ценообразование.ПолучитьАктуальнуюЦену(ТоварСсылка);
КонецФункции

В данном примере мы не передаем всю форму на сервер, а отправляем только ссылку на товар, что экономит ресурсы сети и время пользователя.

Декларативный интерфейс: почему нельзя «двигать кнопки»

В управляемых формах мы больше не рисуем интерфейс по пикселям. Мы создаем структуру. Посмотрим на дерево элементов формы: оно состоит из групп, страниц и полей. Система сама решает, как расположить элементы в зависимости от разрешения монитора пользователя или типа клиента (тонкий, веб или мобильный).

Это требует привыкания, но дает огромный плюс: ваши формы автоматически становятся адаптивными. Чтобы сгруппировать элементы, мы используем тип Группа (горизонтальная или вертикальная). Настройка внешнего вида теперь сводится к управлению свойствами этих групп.

Работа с файлами в новой архитектуре

Рассмотрим типичную задачу: загрузка товаров из файла. В ОФ мы бы просто открыли диалог и начали чтение. В УФ процесс разделен на этапы из-за клиент-серверной модели:

  1. На клиенте: Пользователь выбирает файл через диалог.
  2. На клиенте: Файл помещается во Временное хранилище платформы. Мы получаем адрес (строку).
  3. На сервере: Мы передаем этот адрес в серверную процедуру.
  4. На сервере: Платформа извлекает двоичные данные по адресу, и мы обрабатываем их (например, через ЧтениеXLS или ЧтениеТекста).

Проанализируем пример кода для помещения файла в хранилище:


&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
    ПараметрыЗагрузки = Новый ПараметрыПередачиФайла;
    НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ПослеЗагрузки", ЭтотОбъект), , , , ПараметрыЗагрузки);
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗагрузки(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
    Если Результат Тогда
        ОбработатьФайлНаСервере(Адрес);
    КонецЕсли;
КонецПроцедуры

Оптимизация производительности и БСП

Многие современные конфигурации (УТ 11, ERP) кажутся медленными именно из-за избыточных вызовов сервера с контекстом. Проанализируем ситуацию: если на каждое изменение реквизита в строке табличной части стоит обработчик &НаСервере, форма будет «лагать» при вводе данных. Старайтесь максимально использовать расчеты на клиенте или вызовы БезКонтекста.

Также важно упомянуть БСП (Библиотеку стандартных подсистем). Это фреймворк, на котором построены все типовые решения. Для быстрого освоения не нужно учить ее всю. Достаточно запомнить несколько полезных методов, которые избавляют от написания лишних запросов:

Рекомендации для быстрого старта

Если вам нужно быстро вникнуть в суть, не читая многотомные руководства, рекомендуем следующий план действий:

  1. Изучите статью на Инфостарте «Управляемые формы для начинающих за 10 минут» (часто упоминается в сообществе как лучший краткий мануал).
  2. Посмотрите видео-уроки по концепции «Данные формы — Объект». Это снимет 80% вопросов при написании первых обработок.
  3. При изучении чужого кода в УТ 11 обращайте внимание на методы, начинающиеся с ПриСозданииНаСервере — именно там происходит основная инициализация данных формы.
  4. Используйте Динамические списки. Это мощный инструмент УФ, который позволяет отображать данные любых запросов с автоматической поддержкой отборов и сортировок без написания кода.

Помните: в управляемых формах 1С вы переходите от программирования «дизайна» к программированию «потоков данных». Как только вы научитесь разделять, что должно происходить в интерфейсе, а что в базе данных, разработка станет для вас такой же простой и быстрой, как в старые времена 7.7 или ОФ 8.2.

← На главную