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

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

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

Выбор типа формы: обычная vs управляемая

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

  • 📄 Обычные формы — классический подход, поддерживаемый с первых версий платформы. Подходят для простых решений и конфигураций, которые должны работать на старых версиях 1С.
  • 🎛️ Управляемые формы — современный подход с расширенными возможностями визуализации. Рекомендуются для новых разработок и веб-клиента.

Основные различия между типами форм:

Критерий Обычная форма Управляемая форма
Поддержка веб-клиента ❌ Нет ✅ Да
Адаптивность ❌ Требует ручной настройки ✅ Автоматическая подстройка под размер экрана
Сложность разработки ⚠️ Средняя ⭐ Высокая (больше возможностей)
Производительность ⚡ Быстрее при простых операциях 🐢 Медленнее при большом количестве элементов

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

⚠️ Внимание: При выборе типа формы учитывайте, что управляемые формы не поддерживаются в конфигураторе версий 1С ниже 8.2. Если ваша конфигурация должна работать на старых платформах, этот вариант вам не подойдёт.

Создание новой формы в конфигураторе

Начнём с практического шага — создания новой формы в конфигураторе. Для этого:

  1. Откройте конфигуратор вашей базы данных
  2. В дереве объектов найдите раздел Общие → Формы
  3. Нажмите правой кнопкой мыши и выберите Добавить
  4. Укажите имя формы (например, ГлавнаяФорма) и выберите тип

После создания откроется конструктор формы. Здесь вы можете:

  • 🎨 Дизайнить интерфейс, перетаскивая элементы из палитры
  • 🔧 Настраивать свойства каждого элемента в правой панели
  • 📝 Писать обработчики событий на встроенном языке

Важный момент: при создании главной формы обязательно установите свойство ОсновнаяФормаПриложения = Истина. Это можно сделать в свойствах формы на вкладке Дополнительно. Без этого параметра форма не будет открываться автоматически при запуске программы.

Создать новую форму в дереве объектов|Указать осмысленное имя (например, ГлавнаяФормаРаботы)|Выбрать тип (обычная/управляемая)|Установить ОсновнаяФормаПриложения = Истина|Сохранить конфигурацию-->

Проектирование интерфейса: лучшие практики

Хорошая главная форма должна быть интуитивно понятной и функциональной. Вот ключевые принципы дизайна:

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

2. Группировка элементов. Используйте закладки (ПолеЗакладок) или группы (ГруппаФормы) для логического разделения функционала. Например, можно выделить отдельные блоки для:

  • 📊 Отчётов и аналитики
  • 📄 Работы с документами
  • ⚙️ Административных функций

3. Минимализм. Избегайте перегрузки формы элементами. Если у вас более 20 кнопок — подумайте о создании подменю или выносе части функций на отдельные формы.

Кнопки быстрого доступа|Таблицы с данными|Графики и диаграммы|Поля ввода для поиска|Другое-->

Пример удачной компоновки:


// Структура главной формы для торговой системы

Группа "Основные операции" {

Кнопка "Новый заказ"

Кнопка "Поступление товара"

Кнопка "Возврат от клиента"

}

Группа "Отчёты" {

Кнопка "Продажи за день"

Кнопка "Остатки на складах"

Кнопка "Долги клиентов"

}

Группа "Администрирование" {

Кнопка "Настройки пользователей"

Кнопка "Обновление цен"

}

⚠️ Внимание: При использовании таблиц на главной форме (ТабличноеПоле) ограничьте количество выводимых строк до 50-100 записей. Большие таблицы значительно замедляют загрузку формы и создают нагрузку на сервер.

Программирование логики формы

После создания визуальной части необходимо запрограммировать поведение элементов. Основные задачи:

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

&НаКлиенте

Процедура СоздатьЗаказ(Команда)

ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", , ЭтотОбъект);

КонецПроцедуры

2. Динамическое обновление данных. Если на форме отображаются актуальные данные (например, количество новых заказов), нужно реализовать механизм обновления:

&НаСервере

Процедура ОбновитьСтатистику()

КоличествоНовыхЗаказов = Запросы.ПолучитьКоличествоНовыхЗаказов();

ЭтотОбъект.ЭлементыФормы.СтатистикаЗаказов.Заголовок =

"Новых заказов: " + КоличествоНовыхЗаказов;

КонецПроцедуры

3. Контроль доступа. На главной форме часто реализуют проверку прав пользователя:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если НЕ Пользователь.ПроверитьПрава("Администрирование") Тогда

ЭтотОбъект.ЭлементыФормы.ГруппаАдминистрирование.Видимость = Ложь;

КонецЕсли;

КонецПроцедуры

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

💡

Для отладки кода формы используйте точку останова (F9) и пошаговое выполнение (F10). Это поможет быстро найти ошибки в логике взаимодействия элементов.

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

Одна из самых распространённых проблем главных форм — медленная загрузка. Вот как этого избежать:

1. Ленивая загрузка данных. Не грузите все данные сразу при открытии формы. Например, статистику по продажам можно обновлять только после нажатия на соответствующую закладку:

&НаКлиенте

Процедура ГруппаОтчетыПриАктивизации(Элемент)

ОбновитьСтатистикуПродаж();

КонецПроцедуры

2. Кэширование часто используемых данных. Если какие-то данные редко меняются (например, список складов), сохраняйте их в кэше:

&НаСервере

Функция ПолучитьСписокСкладов()

Если Кэш.Склады = Неопределено Тогда

Кэш.Склады = Справочники.Склады.Выбрать();

КонецЕсли;

Возврат Кэш.Склады;

КонецФункции

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

ВЫБРАТЬ

РегистрНакопления.Продажи.Товар,

СУММА(РегистрНакопления.Продажи.Количество) КАК Количество

ИЗ

РегистрНакопления.Продажи

ГДЕ

РегистрНакопления.Продажи.Период МЕЖДУ НачалоДня(&ТекущаяДата) И КонецДня(&ТекущаяДата)

СГРУППИРОВАТЬ ПО

РегистрНакопления.Продажи.Товар

⚠️ Внимание: Если ваша главная форма содержит более 5 одновременно обновляемых элементов (таблиц, диаграмм, индикаторов), рассмотрите возможность разделения её на несколько специализированных форм. Это значительно уменьшит нагрузку на сервер при одновременной работе нескольких пользователей.

Типичные ошибки и как их избежать

Даже опытные разработчики иногда допускают ошибки при создании главных форм. Вот наиболее распространённые проблемы и их решения:

Ошибка Последствия Решение
Отсутствие обработки ошибок Зависает интерфейс при исключениях Использовать Попытка...Исключение
Чрезмерное использование Обновить() Мерцание элементов, медленная работа Обновлять только изменённые элементы
Жёсткая привязка к конкретным ролям Проблемы при изменении прав пользователей Проверять права через Пользователь.ПроверитьПрава()
Игнорирование свойства Модифицированность Потеря несохранённых данных Проверять перед закрытием формы

Особое внимание уделите обработке события ПередЗакрытием. Здесь должен быть код, предупреждающий пользователя о несохранённых данных:

&НаКлиенте

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)

Если ЭтотОбъект.Модифицированность Тогда

Если НЕ Вопрос("Есть несохранённые данные. Закрыть без сохранения?", , "Да, закрыть", "Нет, остаться") Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

Критическая ошибка многих разработчиков — игнорирование свойства АвтоУничтожение = Ложь для форм, которые должны оставаться в памяти. Это приводит к тому, что при повторном открытии форма создаётся заново, что значительно увеличивает нагрузку на систему.

Адаптация для мобильных устройств

С появлением мобильного клиента возросли требования к адаптивности интерфейсов. Для главной формы это особенно актуально, так как она открывается при каждом запуске программы.

Основные рекомендации по адаптации:

  • 📱 Используйте ГруппаФормы с свойством АвтоРазмер = Вертикаль для автоматического масштабирования
  • 🔍 Увеличивайте размер шрифтов для кнопок (не менее 14pt)
  • 📊 Заменяйте сложные таблицы на простые списки или карточки
  • 👆 Размещайте наиболее важные элементы в верхней части экрана

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

ЭлементыФормы.ОсновнаяГруппа.АвтоРазмер = Истина;

ЭлементыФормы.ОсновнаяГруппа.Ориентация = Вертикаль;

ЭлементыФормы.КнопкаСоздать.Высота = 48;

ЭлементыФормы.КнопкаСоздать.Шрифт.Размер = 16;

Для проверки отображения на разных устройствах используйте эмулятор мобильного клиента в конфигураторе (Отладка → Мобильное приложение → Эмулятор). Это позволит выявить проблемы с версткой до развёртывания на реальных устройствах.

⚠️ Внимание: Некоторые элементы управляемых форм (например, ПолеHTMLДокумента или Диаграмма) могут работать некорректно на мобильных устройствах. Всегда тестируйте форму на целевых платформах перед релизом.

FAQ: Ответы на частые вопросы

Как сделать главную форму разной для разных ролей?

Создайте несколько форм (например, ГлавнаяФормаАдминистратора, ГлавнаяФормаМенеджера) и в модуле приложения определите, какую форму открывать:

&НаСервереБезКонтекста

Процедура ПриНачалеРаботыСистемы()

Если Пользователь.ПроверитьПрава("Администрирование") Тогда

ОткрытьФорму("ОбщаяФорма.ГлавнаяФормаАдминистратора");

Иначе

ОткрытьФорму("ОбщаяФорма.ГлавнаяФормаПользователя");

КонецЕсли;

КонецПроцедуры

Почему моя главная форма долго грузится?

Основные причины:

  1. Слишком много элементов на форме (более 50)
  2. Загрузка больших объёмов данных при открытии
  3. Сложные запросы без индексов
  4. Частые обращения к серверу в цикле

Используйте Профайлер производительности в конфигураторе для выявления узких мест.

Можно ли сделать главную форму с анимацией?

В стандартных средствах 1С 8.3 возможности анимации ограничены. Однако можно:

  • Использовать ПолеHTMLДокумента с JavaScript-анимацией
  • Реализовать простые эффекты через изменение свойств Видимость и ЦветФона
  • Добавить индикатор загрузки (ПолеИндикатора) для длинных операций

Пример простой анимации:

&НаКлиенте

Процедура МигнутьКнопкой()

ЭлементыФормы.МояКнопка.ЦветФона = ВебЦвета.Красный;

Ждать 0.3;

ЭлементыФормы.МояКнопка.ЦветФона = ВебЦвета.Стандартный;

КонецПроцедуры

Как сохранить состояние главной формы между сеансами?

Используйте механизм ПараметрыСеанса или ХранилищеЗначений:

&НаКлиенте

Процедура СохранитьСостояние()

ПараметрыСеанса.СостояниеГлавнойФормы = Новый Структура();

ПараметрыСеанса.СостояниеГлавнойФормы.Вкладка("АктивнаяЗакладка", ЭтотОбъект.ЭлементыФормы.Закладки.ТекущаяЗакладка);

КонецПроцедуры

&НаКлиенте

Процедура ВосстановитьСостояние()

Если ПараметрыСеанса.СостояниеГлавнойФормы <> Неопределено Тогда

ЭтотОбъект.ЭлементыФормы.Закладки.ТекущаяЗакладка =

ПараметрыСеанса.СостояниеГлавнойФормы.АктивнаяЗакладка;

КонецЕсли;

КонецПроцедуры

Вызывайте СохранитьСостояние() в обработчике ПередЗакрытием, а ВосстановитьСостояние() — в ПриОткрытии.

Как добавить на главную форму графики и диаграммы?

Используйте элемент Диаграмма или ПолеHTMLДокумента с внешними библиотеками:

Пример с стандартной диаграммой:

ЭлементыФормы.ДиаграммаПродаж.ТипДиаграммы = ТипДиаграммы.Гистограмма;

ЭлементыФормы.ДиаграммаПродаж.ЦветФона = ВебЦвета.Белый;

Данные = Новый ДанныеДиаграммы();

Серия = Данные.Серии.Добавить();

Серия.Имя = "Продажи";

Серия.Значения.Добавить(15000, "Январь");

Серия.Значения.Добавить(18000, "Февраль");

ЭлементыФормы.ДиаграммаПродаж.Данные = Данные;

Для сложных визуализаций рассмотрите интеграцию с Google Charts или Highcharts через ПолеHTMLДокумента.