В чем разница между общими формами и обработками в 1С и зачем нужны общие формы?

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

При проектировании архитектуры прикладных решений на платформе 1С:Предприятие 8 у начинающих (а иногда и у опытных) разработчиков часто возникает резонный вопрос: зачем в системе существует отдельный объект метаданных Общие формы, если практически любую визуальную задачу можно решить с помощью создания внешней или конфигурационной обработки и настройки формы внутри нее? На первый взгляд кажется, что обработка — это универсальный контейнер, и плодить «лишние» объекты в ветке общих форм нет никакого практического смысла.

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

1. Разделение интерфейса и бизнес-логики (Концепция ООП)

Для того чтобы понять сакральный смысл общих форм, необходимо обратиться к фундаментальным правилам проектирования программного обеспечения. В объектно-ориентированном программировании (ООП) крайне важно разделять визуальное представление (интерфейс) и бизнес-логику (модель данных и алгоритмы их обработки). Это классический паттерн MVC (Model-View-Controller).

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


// Инициализация объекта обработки на сервере
МойКласс = Обработки.МояОбработка.Создать();

// Заполнение свойств (реквизитов) объекта
МойКласс.Организация = ВыбраннаяОрганизация;
МойКласс.ПериодРегистрации = ТекущаяДата();
МойКласс.ТаблицаДанных.Загрузить(ТаблицаИсточника);

// Вызов программного интерфейса (методов модуля объекта)
МойКласс.ВыполнитьДействие1();
МойКласс.ВыполнитьДействие2();
МойКласс.ВыполнитьДействие3();

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

Общая форма, напротив, представляет собой чистый интерфейс (View). У нее нет собственного модуля объекта, нет предопределенных реквизитов объекта базы данных. Она создана исключительно для взаимодействия с пользователем на клиенте: принять параметры, отобразить их в удобном виде, зафиксировать ввод пользователя и вернуть результат. В ней не должно быть тяжелой бизнес-логики.

2. Легковесность и потребление системных ресурсов

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

  1. Инициализирует сам объект ОбработкаОбъект на сервере.
  2. Выделяет память под все реквизиты и табличные части этой обработки.
  3. Компилирует и выполняет код, написанный в модуле объекта обработки (включая обработчики событий инициализации, если они есть).
  4. И только после этого создает и открывает связанную с ней форму.

Если нам нужно просто показать пользователю небольшое диалоговое окно (например, для ввода дополнительного параметра или подтверждения действия), использование обработки создает колоссальную избыточную нагрузку на сервер и сеть.

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

3. Повторное использование и универсальность

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

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

4. Организация рабочего пространства и Начальная страница

В управляемом интерфейсе 1С (особенно в современном интерфейсе «Такси») особое место занимает Начальная страница (рабочий стол пользователя). Платформа накладывает жесткое ограничение: рабочее пространство начальной страницы конструируется именно из общих форм.

Вы не можете просто так «вытащить» на начальную страницу форму произвольной обработки без лишних архитектурных ухищрений. Общие формы изначально оптимизированы для того, чтобы внедряться в интерфейс информационной базы, компоноваться друг с другом и выступать в роли стационарных рабочих мест (например, «Рабочее место кассира» или «Монитор руководителя»).

5. Параметризация вместо объектного подхода

При работе с обработками разработчики часто используют объектный подход передачи данных: создают объект, заполняют его реквизиты, а затем открывают форму. В управляемом приложении такой подход часто приводит к избыточным серверным вызовам и усложняет клиент-серверное взаимодействие.

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


ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("РежимПросмотра", Истина);
ПараметрыОткрытия.Вставить("ИдентификаторОбъекта", ВыбраннаяСсылка);

ОткрытьФорму("ОбщаяФорма.МояУниверсальнаяФорма", ПараметрыОткрытия, ЭтотОбъект);

В данном случае общая форма принимает структуру параметров, обрабатывает их в обработчике ПриСозданииНаСервере, настраивает элементы интерфейса и выдает результат при закрытии через механизм оповещений. Ей не нужно хранить состояние в базе данных или в памяти объекта обработки, что делает код более чистым, предсказуемым и безопасным с точки зрения параллельной работы пользователей.

Резюме: когда и что выбирать?

Для того чтобы ваша конфигурация работала быстро, а код был понятен коллегам, рекомендуем придерживаться следующих простых правил выбора инструмента:

Выбирайте Обработку, если:

  1. Вам требуется сложный алгоритм, который должен выполняться регламентным заданием или вызываться программно из других модулей без участия пользователя (в этом случае форма вообще может отсутствовать).
  2. Вам необходимо хранить промежуточное состояние данных в реквизитах или табличных частях объекта во время выполнения длительного процесса.
  3. Вы создаете автономный инструмент (например, обработку по загрузке данных из Excel), который планируется переносить между базами как внешний файл .epf.

Выбирайте Общую форму, если:

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

Понимание этих базовых архитектурных различий позволяет создавать по-настоящему быстрые, масштабируемые и легко поддерживаемые решения на платформе 1С:Предприятие 8.

← На главную