Как изменить форму объекта в Конфигураторе 1С

· 9 мин

Содержание

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

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

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

В 1С 8.3 сосуществуют два вида форм, и редактируются они по-разному.

  • Управляемые формы — основной вид в современных конфигурациях (БП 3.0, ЗУП 3.1, УТ 11, интерфейс «Такси»). Работают в тонком и веб-клиенте. Форма описывается декларативно: есть реквизиты (данные) и дерево элементов. Точные координаты вы не задаёте — порядок и вложенность групп определяют, как платформа расставит поля на разных экранах.
  • Обычные формы — наследие версий 8.0–8.1. Открываются только в толстом клиенте в режиме обычного приложения. Здесь элементы позиционируются пиксельно. В типовых решениях на «Такси» их почти не осталось, но в старых самописных базах встречаются.

Как понять, какая перед вами форма: в дереве конфигурации у объекта откройте ветку Формы. У управляемой формы в редакторе слева вкладки «Элементы» и «Реквизиты», справа — палитра свойств. У обычной формы — рабочее поле с сеткой и свободно расставленными контролами.

Дальше речь в основном про управляемые формы — именно их правят в большинстве задач на 8.3. Обычную форму редактируют в похожей логике (реквизиты, элементы, модуль), но её рабочее поле — пиксельная сетка: элементы двигают мышью и задают им размеры и координаты напрямую. Код в обычных формах пишут без директив &НаКлиенте/&НаСервере — там другая клиент-серверная модель.

Как открыть форму для редактирования в Конфигураторе

Редактирование форм живёт в Конфигураторе — в пользовательском режиме состав формы не меняют (там доступна только настройка видимости и порядка через Ещё → Изменить форму, без программной логики).

  1. Запустите базу в режиме Конфигуратор.
  2. Откройте дерево конфигурации: Конфигурация → Открыть конфигурацию.
  3. Найдите нужный объект — например, Справочники → Номенклатура или Документы → РеализацияТоваровУслуг.
  4. Разверните ветку Формы, дважды щёлкните по нужной форме (ФормаЭлемента, ФормаСписка, ФормаВыбора и т. д.).

Откроется редактор формы: слева дерево элементов и вкладка реквизитов, справа — палитра свойств выделенного элемента, снизу — модуль формы и командный интерфейс.

Как редактировать типовую форму, не теряя обновлений

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

Нужно изменить форму в типовой конфигурации — как поступить?

Снятие с поддержки необратимо упрощённым путём: вернуть объект «на замок» и к штатному обновлению сложно. Для типовых баз расширение — выбор по умолчанию.

Реквизиты формы: данные, с которыми она работает

Реквизиты — это данные формы. Их видно на вкладке «Реквизиты» в редакторе формы.

  • Основной реквизит (выделен жирным) связывает форму с объектом. У формы элемента справочника это Объект, у формы списка — Список (динамический список).
  • Через точку доступны поля объекта: Объект.Наименование, Объект.Комментарий, реквизиты табличных частей.
  • Можно добавить собственные реквизиты формы — временные значения, которые не хранятся в базе (флажки-переключатели, суммы для расчёта на лету). Кнопка добавления — в командной панели вкладки «Реквизиты».

Чтобы вывести реквизит на форму, перетащите его из списка реквизитов в дерево элементов. Платформа сама создаст поле нужного вида — поле ввода, флажок, поле выбора — по типу реквизита.

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

Элементы формы: поля, таблицы, группы и кнопки

Элементы — это то, что видит пользователь. Дерево элементов редактируется на вкладке «Элементы».

Основные типы:

ЭлементДля чего
ПолеВвод и отображение реквизита (строка, число, дата, ссылка, флажок)
ГруппаОбъединяет элементы: колонки, страницы (закладки), командная панель
ТаблицаВывод табличной части или дерева значений
КнопкаЗапуск команды формы
ДекорацияНадпись, картинка, гиперссылка без привязки к данным

Порядок работы:

  1. Выделите элемент в дереве — справа откроется палитра свойств.
  2. Задайте ключевые свойства: Заголовок, Видимость, Доступность (можно ли редактировать), ПропускатьПриВводе.
  3. Для группировки добавьте элемент Группа и перетащите поля внутрь. Вид группы (Колонки, Страницы, Обычная) задаётся в свойстве Вид.
  4. Чтобы поле занимало всю ширину, используйте свойства растяжения (РастягиватьПоГоризонтали) — в управляемой форме это замена ручному выставлению ширины.

Расположение на экране задаётся не координатами, а порядком элементов в дереве и вложенностью групп. Хотите поля в две колонки — создайте группу с видом «Колонки» и положите в неё две подгруппы. Это и есть разница с обычными формами.

Как добавить кнопку и свою команду

Кнопка сама по себе ничего не делает — она запускает команду формы. Поэтому порядок такой:

  1. На вкладке «Команды» (рядом с «Реквизиты») добавьте новую команду формы, задайте имя — например РассчитатьИтог.
  2. У команды нажмите лупу в свойстве Действие — платформа создаст в модуле процедуру-обработчик с директивой &НаКлиенте.
  3. Перетащите команду в дерево элементов (обычно в командную панель или группу кнопок) — появится кнопка, связанная с командой.
  4. В свойствах кнопки задайте Заголовок, при желании картинку и отображение (Текст, Картинка, Картинка и текст).

Так же выводятся стандартные команды объекта (Провести, Записать) — их не пишут вручную, а берут из набора команд формы.

Модуль формы: события и обработчики

Поведение формы описывается в её модуле. Открыть — вкладка «Модуль» внизу редактора формы.

Ключевое в 8.3 — директивы компиляции, они определяют, где выполняется процедура:

  • &НаКлиенте — на стороне пользователя (реакция на нажатия, вопросы, открытие форм).
  • &НаСервере — на сервере, с доступом к данным формы и базе.
  • &НаСервереБезКонтекста — на сервере, но без доступа к данным формы (быстрее, для вспомогательных расчётов).

Частые события, обработчики которых добавляют:

  • ПриСозданииНаСервере — настройка формы при открытии (видимость, заполнение значений по умолчанию).
  • ПриОткрытии — действия на клиенте после открытия.
  • Событие реквизита, например ПриИзменении у поля — пересчёт по вводу пользователя.

Чтобы добавить обработчик события элемента: выделите элемент, в палитре свойств найдите нужное событие и нажмите значок лупы справа от поля — платформа создаст процедуру с правильной директивой и подставит её в модуль.

Простой пример — скрыть поле комментария при открытии формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Элементы.Комментарий.Видимость = Ложь;
КонецПроцедуры

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

Сохранение изменений и проверка результата

После правок форма существует только в редактируемой конфигурации — в рабочей базе её ещё нет.

  1. Сохраните конфигурацию: Файл → Сохранить (или Ctrl+S).
  2. Примените изменения к базе: Конфигурация → Обновить конфигурацию базы данных (клавиша F7).
  3. Если менялась структура (добавлены реквизиты объекта, а не только элементы формы), платформа покажет окно принимаемых изменений — подтвердите.
  4. Запустите проверку: Отладка → Начать отладку (клавиша F5) — откроется 1С:Предприятие с вашими правками.

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

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

Частые ошибки при редактировании форм

  • Правки не видны в 1С:Предприятии. Почти всегда — забыли обновить конфигурацию базы данных (F7). Сохранение конфигурации (Ctrl+S) и обновление базы — два разных действия.
  • Типовая перестала обновляться. Форму правили напрямую в конфигурации на поддержке. Выход — переносить правки в расширение; уже внесённые придётся сверять при каждом обновлении вручную.
  • Ошибка компиляции модуля. Из процедуры &НаКлиенте вызвали то, что доступно только на сервере (запрос к базе, менеджер объекта). Вынесите серверную логику в процедуру &НаСервере.
  • Элемент пропал с формы. Проверьте свойство Видимость элемента и роль пользователя: видимость может зависеть от прав или функциональной опции.
  • Поле не растягивается / «прыгает». В управляемой форме ширину регулируют свойства растяжения и группы, а не абсолютный размер. Проверьте вложенность в группу и её вид.
  • Изменения в расширении не применились. После правки расширения тоже нужно обновление конфигурации базы (F7); одного сохранения расширения мало.

Динамическое изменение формы из кода

Иногда состав формы должен зависеть от данных: показать блок полей только для определённого вида документа, добавить колонку по условию. Это делают программно в модуле формы, обычно в ПриСозданииНаСервере.

Добавление элемента выполняется методом Элементы.Добавить() — указывают имя, тип и родителя:

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

Реквизит, на который ссылается ПутьКДанным, должен существовать заранее.

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

Третий — функциональные опции: включают и выключают поля и команды в типовых конфигурациях в зависимости от настроек учёта. Если поле на типовой форме «не включается» — ищите связанную функциональную опцию в настройках, а не правьте форму.

Частые вопросы

Можно ли редактировать форму без Конфигуратора, прямо в пользовательском режиме?
Можно изменить только внешний вид своей копии формы: команда Ещё → Изменить форму позволяет скрывать поля, менять их порядок и добавлять реквизиты объекта на форму. Добавить программную логику, новые элементы с кодом или поменять модуль так нельзя — это делается только в Конфигураторе.
Чем отличается реквизит формы от элемента формы?
Реквизит — это данные (значение, с которым форма работает). Элемент — это то, что видит пользователь (поле, таблица, кнопка). Один реквизит может быть выведен как элемент, а может использоваться только в коде и на форме не отображаться.
Как вернуть форму к исходному виду после неудачных правок?
Если правили в расширении — отключите или удалите расширение, типовая форма вернётся. Если правили конфигурацию напрямую и не сохраняли — закройте без сохранения. Если уже обновили базу — восстанавливайте из резервной копии конфигурации или из хранилища, поэтому перед серьёзными правками делайте выгрузку конфигурации в файл.
Почему мои изменения видны в Конфигураторе, но не в программе?
Не выполнено обновление конфигурации базы данных. Нажмите F7 (Конфигурация → Обновить конфигурацию базы данных) и подтвердите принимаемые изменения.
Нужна ли монопольная блокировка базы, чтобы изменить форму?
Для правок, которые не меняют структуру данных (видимость элементов, заголовки, порядок полей), — нет. Монопольный режим нужен, когда обновление затрагивает структуру: добавлены новые реквизиты объекта, табличные части. Тогда перед F7 в базе не должно быть активных сеансов.