В мире современной разработки на платформе 1С:Предприятие 8.3 доминируют управляемые формы (УФ). Однако существуют сценарии, такие как промышленная автоматизация, работа со сложным оборудованием или создание высоконагруженных локальных интерфейсов, где старый добрый толстый клиент и обычные формы (ОФ) показывают себя значительно лучше. Рассмотрим подробнее причины этого технологического феномена, разберем архитектурные различия и выясним, почему «новое» не всегда означает «более быстрое» для конкретных прикладных задач.
Для начала проанализируем фундаментальное различие в архитектуре. Работа в толстом клиенте на обычных формах — это зачастую классическая двухзвенная архитектура. Программа (клиент) напрямую взаимодействует с СУБД или файловой базой. Вся объектная модель документа или справочника считывается в память клиентского приложения целиком.
В управляемом приложении мы имеем дело с трехзвенной архитектурой. Между интерфейсом и данными всегда стоит сервер приложений. Разберем, к чему это приводит на практике:
ДанныеФормыСтруктура. Чтобы выполнить стандартный метод объекта, платформе приходится гонять данные туда-обратно между клиентом и сервером.Одной из ключевых причин выбора толстого клиента является простота интеграции с торговым и промышленным оборудованием. Рассмотрим ситуацию: нам нужно в реальном времени получать данные с датчиков через COM-порт или специализированную внешнюю компоненту (ВК).
В толстом клиенте мы можем инициализировать ВК прямо в модуле формы и подписаться на события. Обмен данными происходит в рамках одного процесса. В управляемых формах, особенно при использовании тонкого или веб-клиента, мы сталкиваемся с ограничениями безопасности браузера и необходимостью пробрасывать порты через сложные механизмы драйверов.
Проанализируем пример подключения компоненты. В толстом клиенте это выглядит лаконично и синхронно:
// Обычные формы, Толстый клиент
ЗагрузитьВнешнююКомпоненту("C:\Libs\IndustrialSensor.dll");
Датчик = Новый ("AddIn.IndustrialSensor");
Датчик.Подключить(НомерПорта);
Результат = Датчик.ПолучитьДанные(); // Мгновенный синхронный ответ
В современных реалиях управляемого приложения 1С настоятельно рекомендует использовать асинхронные вызовы, что превращает линейный код в «матрешку» из описаний оповещений:
// Управляемые формы, Тонкий клиент
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПодключения", ЭтотОбъект);
НачатьПодключениеВнешнейКомпоненты(ОписаниеОповещения, "ОбщийМакет.Компонента");
// В другой процедуре
Процедура ПослеПодключения(Результат, ДополнительныеПараметры) Экспорт
Если Результат Тогда
Датчик = Новый ("AddIn.Sensor");
// И так далее для каждого чиха...
КонецЕсли;
КонецПроцедуры
Для промышленного оборудования, где критична скорость реакции (например, остановить конвейер при заполнении), лишние слои абстракции и асинхронности могут стать критической точкой отказа.
Многие разработчики критикуют отказ от модальности в управляемых формах. И хотя идеологически это правильно (для работы в браузере), с точки зрения скорости написания кода для внутренних нужд предприятия — это шаг назад. Модальный режим гарантирует, что поток выполнения кода остановится до тех пор, пока пользователь не сделает выбор.
Выясним причину недовольства на примере простого вопроса пользователю:
В обычных формах:
Ответ = Вопрос("Вы уверены?", РежимДиалога.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
// Продолжаем выполнение здесь же
ВыполнитьДействие();
КонецЕсли;
В управляемых формах (без модальности):
Оповещение = Новый ОписаниеОповещения("ПослеВопроса", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Вы уверены?", РежимДиалога.ДаНет);
// Где-то в конце модуля
Процедура ПослеВопроса(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ВыполнитьДействие();
КонецЕсли;
КонецПроцедуры
Разрыв контекста при разработке сложных алгоритмов с множеством ветвлений и диалогов приводит к росту объема кода в 2-3 раза и значительно усложняет отладку. В толстом клиенте мы сохраняем целостность алгоритма, что критично для систем агрегации данных.
Обычные формы позволяют разработчику рисовать интерфейс «попиксельно». Если на посту мониторинга стоит специфический экран с нестандартным разрешением, в ОФ мы можем расположить элементы именно так, как удобно оператору, используя привязки.
В управляемых формах мы зависим от алгоритма компоновки 1С. Группы, колонки, адаптивность — это прекрасно для офисного монитора, но на промышленном тач-скрине автоматическое «расползание» кнопок может сделать работу невозможной. В ОФ мы имеем полный контроль над Ширина, Высота и Лево/Верх каждого контрола без необходимости бороться с движком компоновки.
Проанализируем ситуацию и выделим критерии, при которых переход на УФ может быть вреден:
Разберем итог нашего анализа. Управляемые формы — это будущее 1С, необходимое для масштабируемости, облачных технологий и веб-доступа. Однако толстый клиент и обычные формы — это не «устаревший хлам», а специфический инструмент для решения локальных задач, где важна максимальная производительность интерфейса, прямой доступ к железу и простота программного кода.
Если ваша система — это самописка для управления станками или внутренний агрегатор данных, работающий в локальной сети, то аргументы в пользу «старой» технологии (скорость, простота подключения ВК, предсказуемость интерфейса) перевешивают маркетинговые плюсы «нового» интерфейса. Не всегда нужно чинить то, что и так работает быстрее конкурентов.