Разработка и Конфигурация · 11 мин
Как создать свою форму в 1С: подробное руководство
Как создать свою форму в 1С через конфигуратор и расширение: виды форм, реквизиты, элементы, программный код, типичные ошибки и проверка результата.
Форма в 1С — это то, что видит пользователь: окно документа, список справочника, диалог с настройками отчёта. Стандартные формы платформа генерирует автоматически, но на практике их почти всегда приходится дорабатывать: добавлять поля, менять порядок элементов, выводить кнопки со своей логикой. Для этого создают собственную форму объекта или произвольную форму, не привязанную к данным.
Работа ведётся в конфигураторе 1С. Понадобятся базовые права на изменение конфигурации, а если менять типовой объект нельзя или нежелательно — механизм расширений, который позволяет добавить свою форму поверх типовой без снятия конфигурации с поддержки. Ниже разобраны оба пути, устройство формы, работа с реквизитами и кодом, а также проверка результата.
Какие бывают формы и когда какая нужна
Прежде чем создавать форму, нужно понять её тип, потому что от этого зависят доступные данные и поведение. Основные варианты: форма объекта (один элемент справочника или один документ), форма списка (таблица записей), форма выбора (подбор значения в поле ввода), форма констант, форма отчёта или обработки. Есть и произвольные формы — например, общие формы, которые не привязаны к конкретному объекту и используются для диалогов, настроек, помощников.
Основная форма объекта назначается в свойствах объекта конфигурации: именно её платформа открывает по умолчанию при двойном клике по записи. Если основная форма не задана, 1С строит её автоматически по составу реквизитов. Автоматическая форма удобна на старте, но не даёт управлять расположением полей, группировкой и логикой — поэтому для рабочих решений форму создают явно.
Создание формы объекта в конфигураторе
Откройте конфигуратор, найдите нужный объект в дереве конфигурации — например, справочник «Номенклатура» или документ «ЗаказПокупателя». Перейдите на закладку «Формы» и нажмите кнопку добавления. Запустится конструктор формы: выберите тип (форма элемента, форма документа, форма списка), задайте имя и при необходимости отметьте «Назначить форму основной». Конструктор сразу предложит состав реквизитов, которые попадут на форму.
После завершения работы конструктора откроется редактор формы. Слева вверху — дерево элементов (поля, группы, таблицы, кнопки), справа — список реквизитов формы и команд. Элементы можно перетаскивать мышью, менять их свойства через палитру свойств: заголовок, видимость, доступность, ширину, подсказку. Чтобы добавить поле, перетащите реквизит из правой панели в дерево элементов — платформа сама выберет подходящий вид поля по типу данных.
- 1Откройте конфигуратор и найдите объект в дереве конфигурации
- 2На закладке «Формы» нажмите «Добавить» и выберите тип формы в конструкторе
- 3Отметьте нужные реквизиты и завершите работу конструктора
- 4В редакторе формы расположите элементы, настройте группы и свойства полей
- 5Назначьте форму основной в свойствах объекта, если она должна открываться по умолчанию
- 6Обновите конфигурацию базы данных (F7) и проверьте форму в режиме предприятия
Реквизиты формы и основной реквизит
Данные, с которыми работает форма, хранятся в её реквизитах. У формы объекта есть главный реквизит — обычно «Объект» типа «ДанныеФормыСтруктура» на основе объекта конфигурации. Он выделен жирным шрифтом в списке реквизитов и определяет, что именно форма читает из базы и записывает в неё. Удалять или переименовывать основной реквизит нельзя — форма потеряет связь с данными.
Кроме основного, можно добавлять собственные реквизиты формы: строки, числа, даты, таблицы значений, динамические списки. Они живут только пока открыта форма и в базу не сохраняются. Это удобно для промежуточных вычислений, отображения связанной информации, временных таблиц подбора. Реквизит добавляется кнопкой «Добавить» в панели реквизитов, затем перетаскивается в дерево элементов.
Элементы формы: группы, поля, таблицы и команды
Структура формы строится из групп: обычная группа объединяет поля, группа-страницы создаёт вкладки, командная панель содержит кнопки. Правильная группировка — главный инструмент аккуратной формы: поля выстраиваются в колонки автоматически, а при растягивании окна ведут себя предсказуемо. Свойства «Группировка» (вертикальная/горизонтальная) и «Отображение» у групп стоит настраивать осознанно, а не оставлять по умолчанию.
Команды формы — это действия, доступные пользователю. Стандартные команды (записать, провести, закрыть) платформа добавляет сама. Свою команду создают на закладке «Команды» — «Команды формы»: задают имя, заголовок, картинку и обработчик действия. Затем команду перетаскивают в командную панель формы или на кнопку. Для табличных частей и динамических списков есть свои контекстные командные панели — кнопки, относящиеся к таблице, размещайте именно там.
Программный код в модуле формы
Модуль формы открывается одноимённой закладкой в редакторе формы. Здесь пишут обработчики событий: «ПриСозданииНаСервере» (начальная настройка, заполнение реквизитов), «ПриОткрытии» (клиентская логика после отображения), «ПередЗаписью» и «ПослеЗаписи», обработчики изменения полей. Директивы компиляции — «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» — определяют, где выполняется код.
Ключевое ограничение управляемых форм: разделение клиента и сервера. Обращение к базе данных (запросы, выборки, запись объектов) возможно только на сервере. С клиента серверные процедуры вызываются как обычные методы, но передавать туда можно только сериализуемые данные — нельзя передать, например, ссылку на элемент формы. Типичный приём: в обработчике «ПриСозданииНаСервере» выполнить запрос и заполнить реквизиты формы, а клиентские обработчики оставить лёгкими — проверки ввода, управление видимостью элементов.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.Ссылка.Пустая() Тогда
Объект.Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
КонецЕсли;
КонецПроцедурыСоздание формы через расширение конфигурации
Если конфигурация типовая и стоит на поддержке, прямое изменение формы затруднит обновления. Решение — расширение: в конфигураторе откройте «Конфигурация» → «Расширения конфигурации», создайте новое расширение, затем в дереве конфигурации найдите нужную форму, вызовите контекстное меню и выберите «Добавить в расширение». После этого форму можно дорабатывать внутри расширения: добавлять элементы, реквизиты, команды, переопределять обработчики через «&После», «&Перед» и «&ИзменениеИКонтроль».
Расширение накладывает ограничения: нельзя удалять элементы типовой формы, можно лишь управлять их видимостью; изменение макета формы возможно только добавлением. При обновлении типовой конфигурации расширение нужно проверять — если вендор изменил форму, заимствованные обработчики могут перестать вызываться. Тем не менее для большинства доработок интерфейса расширение — рекомендуемый путь.
Конфигуратор или расширение
Полный доступ к форме: можно удалять и менять любые элементы. Подходит для собственных конфигураций. Минус — усложняет обновление типовых решений
Типовая конфигурация остаётся на поддержке, обновления ставятся штатно. Ограничение: нельзя удалять типовые элементы, а после обновлений расширение нужно тестировать
Произвольные формы и формы обработок
Не всякая форма привязана к объекту данных. Для диалогов, мастеров настройки, служебных окон используют общие формы (ветка «Общие» → «Общие формы») или формы внешних и встроенных обработок. У таких форм нет основного реквизита — все данные создаются вручную как реквизиты формы, а логика целиком описывается в модуле.
Открывается произвольная форма программно: методом «ОткрытьФорму()» с указанием имени, например «ОбщаяФорма.НастройкиОбмена». Туда же можно передать структуру параметров и получить результат через «ОповеститьОВыборе» или возвращаемое значение при модальном открытии. Это стандартный способ строить собственные диалоги выбора и подтверждения.
Проверка результата и типичные ошибки
После создания формы обновите конфигурацию базы данных (клавиша F7), запустите режим предприятия и пройдите основной сценарий: открытие списка, создание нового элемента, заполнение полей, запись, повторное открытие. Проверяйте не только внешний вид, но и поведение при изменении размера окна, при работе под пользователем с ограниченными правами и на тонком клиенте, если он используется.
Как проверить результат
Форма открывается без ошибок, все поля на месте
Ошибка обращения к реквизиту или пустая форма
Данные сохраняются и видны при повторном открытии
После перезапуска введённые значения пропадают
При растягивании окна элементы выравниваются по группам
Поля наезжают друг на друга или исчезают
Под рядовым пользователем форма работает штатно
Ошибки доступа к данным у пользователей без полных прав
Если форма не открывается, смотрите текст ошибки: чаще всего причина в обращении к несуществующему реквизиту, потерянном основном реквизите или вызове серверного кода с клиента. Полезно также выполнить проверку конфигурации («Конфигурация» → «Проверка конфигурации») — она выявляет битые ссылки в модулях форм до запуска.
Что важно запомнить
Своя форма создаётся на закладке «Формы» объекта через конструктор, дорабатывается в редакторе элементов и реквизитов, логика пишется в модуле с разделением клиента и сервера. Хранимые данные добавляйте в объект, а не в реквизиты формы. Для типовых конфигураций используйте расширение и всегда проверяйте форму в режиме предприятия после изменений.
Частые вопросы
Можно ли создать форму без программирования?
Да. Конструктор форм и визуальный редактор позволяют собрать рабочую форму из полей, групп и стандартных команд без единой строки кода. Программирование понадобится только для нестандартной логики: расчётов, заполнения по условиям, управления видимостью элементов.
Чем форма списка отличается от формы элемента?
Форма списка показывает таблицу записей объекта с возможностью отбора, сортировки и поиска — её видит пользователь при открытии раздела. Форма элемента открывается для редактирования одной конкретной записи. У объекта могут быть заданы обе формы, и назначаются они независимо друг от друга.
Как добавить кнопку со своим действием на форму?
Создайте команду формы на закладке «Команды», задайте ей заголовок и обработчик «Действие» — платформа сама создаст процедуру в модуле формы. Затем перетащите команду из списка в командную панель формы или в подменю. Код кнопки пишется в созданном обработчике.
Почему после обновления типовой конфигурации пропала моя форма?
Если форма была изменена напрямую в конфигурации, при полной загрузке обновления доработки могут быть заменены типовой версией. Чтобы этого избежать, доработки выносят в расширение конфигурации либо при обновлении выполняют сравнение и объединение с ручным переносом изменений.
Можно ли открыть свою форму из другой формы с передачей параметров?
Да. Используйте метод «ОткрытьФорму» с указанием полного имени формы и структурой параметров. В открываемой форме параметры доступны через свойство «Параметры» в обработчике «ПриСозданииНаСервере». Для возврата результата применяют оповещения или закрытие формы с возвращаемым значением.
Что делать, если элементы формы «разъезжаются» при изменении размера окна?
Проверьте группировку: поля должны лежать внутри групп с заданным направлением (горизонтальное или вертикальное). У самих элементов посмотрите свойства растягивания и ширины. Размещение полей без групп — основная причина хаотичного поведения формы при растягивании окна.