Изменение управляемой формы в 1С 8.3: от настройки пользователя до расширения конфигурации

· 11 мин

Содержание

Редактировать форму в 1С 8.3 можно тремя способами. Пользователь без прав разработчика открывает форму и выбирает Ещё → Изменить форму: так можно скрыть, переставить или сгруппировать поля. Разработчик меняет форму в Конфигураторе — в редакторе форм объекта или, если конфигурация типовая и стоит на поддержке, через расширение конфигурации .

Типичная ситуация: бухгалтер просит убрать с документа три поля, которыми никто не пользуется, и добавить на видное место комментарий. Первую часть он сделает сам за минуту. Вторую, если нужно новое поле с данными или логика «показывать поле только для ООО», придётся решать в Конфигураторе. Ниже по порядку — от простого к сложному.

С чего начать: какой способ редактирования формы выбрать

Перед правкой определите, что именно нужно поменять и для кого. От этого зависит инструмент.

ЗадачаСпособКто делаетЧем рискуете
Скрыть, переставить, переименовать поле для себяЕщё → Изменить формуСам пользовательНичем, настройки сбрасываются
Изменить вид формы у всех пользователейКонфигуратор или расширениеРазработчикКонфликт при обновлении, если править типовую форму напрямую
Добавить новый реквизит, кнопку, обработчикРасширение конфигурацииРазработчикРасширение может перестать применяться после обновления
Своя (нетиповая) конфигурацияРедактор форм в КонфигуратореРазработчикНужен доступ к базе в режиме конфигурирования

Несколько понятий, без которых дальше будет путано:

  • 🧩 Управляемая форма — форма в 8.3 с интерфейсом «Такси». Её внешний вид строит платформа по дереву элементов, а не по координатам, как в старых обычных формах.
  • 📦 Реквизиты формы — данные, с которыми работает форма. Главный реквизит обычно называется Объект (у формы элемента или документа) или Список (у формы списка).
  • 🧱 Элементы формы — то, что видно на экране: поля, группы, таблицы, кнопки, надписи. Элемент связан с реквизитом через свойство ПутьКДанным.
  • ⚙️ Команды — действия, которые выполняет форма. Кнопка на форме — это отображение команды.
  • 📝 Модуль формы — код на встроенном языке, который реагирует на события формы и её элементов.

Если поле нужно убрать «для всех», но новых данных не требуется, иногда достаточно настроить форму под одним пользователем и скопировать его настройки остальным. В типовых конфигурациях на БСП это делается в Администрирование → Настройки пользователей и прав, в обработке настроек пользователей.

Изменение формы в режиме Предприятия без Конфигуратора

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

  1. Откройте нужную форму — документ, элемент справочника или список.
  2. Нажмите Ещё в командной панели формы и выберите Изменить форму....
  3. Откроется окно «Настройка формы». Слева дерево элементов, справа — свойства выделенного элемента.
  4. Снимите флажок у элемента, чтобы скрыть его. Поставьте — чтобы показать скрытый.
  5. Перетаскивайте элементы мышью или стрелками на панели, чтобы поменять порядок.
  6. Чтобы объединить поля, добавьте группу и перенесите поля в неё.
  7. Нажмите ОК. Форма перерисуется сразу.

Что можно поменять в этом окне:

  • 👁 видимость элементов, включая те, что разработчик скрыл по умолчанию, но разрешил показывать;
  • ↕️ порядок полей и групп;
  • 🗂 группировку: горизонтальные и вертикальные группы;
  • 🏷 заголовок и некоторые свойства отображения элемента.

Чего сделать нельзя: добавить поле, которого нет в форме, поменять логику заполнения или проверки, добавить новую кнопку с действием. Это уже работа разработчика.

Вернуть форму к исходному виду: снова Ещё → Изменить форму..., в окне настройки — Ещё → Установить стандартные настройки.

Если после ОК настройки не сохраняются и при следующем открытии форма снова прежняя, проверьте у пользователя право «Сохранение данных пользователя». Без него платформа не записывает персональные настройки.

Как устроен редактор форм в Конфигураторе

Чтобы править форму на уровне конфигурации, запустите базу в режиме Конфигуратора и откройте дерево: Конфигурация → Открыть конфигурацию. Найдите объект (например, документ), раскройте ветку «Формы» и дважды щёлкните по нужной форме.

Редактор формы делится на несколько областей:

ОбластьГдеЧто в ней
ЭлементыСлева вверхуДерево всего, что видно на форме: группы, поля, таблицы, кнопки
Командный интерфейсСоседняя вкладкаКоманды навигации и панели действий формы
РеквизитыСправа вверхуДанные формы: Объект, табличные части, дополнительные реквизиты
КомандыСправа, соседняя вкладкаКоманды формы и стандартные команды
ПараметрыСправа, соседняя вкладкаПараметры, которые форма получает при открытии
ПредпросмотрВнизуКак форма выглядит в «Такси»
МодульВкладка внизу редактораКод обработчиков формы

Свойства любого элемента открываются двойным щелчком или из контекстного меню командой Свойства.

Добавление поля на форму

  1. На вкладке «Реквизиты» раскройте Объект и найдите нужный реквизит.
  2. Перетащите его мышью в дерево «Элементы» — в ту группу, где поле должно стоять.
  3. Платформа сама создаст элемент подходящего вида: поле ввода для строки или ссылки, поле флажка для булева.
  4. Посмотрите результат в предпросмотре внизу.

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

Группы и компоновка элементов

Элементы на управляемой форме не ставят по координатам. Платформа раскладывает их сама, а вы управляете группами:

  • 📐 Обычная группа — свойство Группировка задаёт расположение: вертикальное или горизонтальное.
  • 📑 Страницы — закладки, каждая страница — отдельная группа.
  • 🔲 Отображение группы — с рамкой или без, со слабым или сильным выделением.
  • 🔽 Поведение — обычная, сворачиваемая или всплывающая группа.

Чтобы поставить два поля в одну строку, создайте обычную группу с горизонтальной группировкой и перетащите поля в неё.

Настройка свойств элементов и внешнего вида формы

Большую часть задач по оформлению решают свойства элемента, без единой строки кода.

СвойствоЧто делаетПример
ЗаголовокПодпись поля«Комментарий» → «Примечание для склада»
ВидимостьПоказывать ли элементСкрыть служебное поле
ДоступностьМожно ли с элементом работатьПоле серое, нельзя изменить
ТолькоПросмотрЗначение видно, но не редактируетсяСумма после проведения
ПоложениеЗаголовкаГде подпись: слева, сверху, нетПодпись над многострочным полем
Ширина, ВысотаРазмер в условных единицахУзкое поле для кода
РастягиватьПоГоризонталиТянуть ли поле на всю ширинуКомментарий во всю строку
Подсказка, ОтображениеПодсказкиПояснение к полюПодсказка под полем мелким текстом
МногострочныйРежимПоле в несколько строкДлинный комментарий

Разница между Доступность и ТолькоПросмотр важна на практике. Недоступное поле нельзя даже выделить и скопировать значение. Поле «только просмотр» можно выделить и скопировать, но нельзя изменить.

Условное оформление

Чтобы раскрасить строки или менять вид поля по условию, не обязательно писать код. Откройте свойства самой формы (корневой элемент «Форма» в дереве) и найдите Условное оформление.

Каждая строка условного оформления состоит из трёх частей:

  1. Оформление — цвет текста, фона, шрифт, видимость, доступность.
  2. Условие — отбор по значениям реквизитов, например «Сумма больше 100 000».
  3. Оформляемые поля — к каким элементам применить.

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

Конструктор формы: создаём новую форму с нуля

Когда у объекта нет своей формы, платформа строит её автоматически. Чтобы получить форму, которую можно править, её нужно создать.

  1. В дереве конфигурации раскройте объект, щёлкните правой кнопкой по ветке «Формы» и выберите Добавить.
  2. Откроется конструктор формы. Выберите тип: форма элемента (документа), форма списка, форма выбора — набор зависит от вида объекта.
  3. Задайте имя формы.
  4. Отметьте флажок назначения формы основной, если она должна открываться по умолчанию.
  5. На следующем шаге отметьте реквизиты и табличные части, которые конструктор разместит на форме.
  6. Нажмите Готово. Откроется обычный редактор формы, где работа продолжается вручную.

Конструктор — стартовая заготовка. Повторно его на ту же форму не запускают: дальше форму правят в редакторе.

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

Расширение: как изменить типовую форму и не потерять обновления

Если конфигурация на поддержке (БП 3.0, ЗУП 3.1, УТ 11 без доработок), править её форму напрямую — плохая идея. Придётся включать возможность изменения, и каждое обновление превратится в сравнение и объединение. Расширение решает это: изменения лежат отдельно, основная конфигурация остаётся типовой.

Расширения появились в платформе 8.3.6, а возможности по формам с тех пор заметно выросли — работайте на актуальной платформе.

Перед подключением расширения к рабочей базе сделайте резервную копию и проверьте расширение на копии базы.

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

  1. В Конфигураторе откройте Конфигурация → Расширения конфигурации.
  2. Добавьте новое расширение, задайте имя и префикс (например, мр_). Префикс отличает ваши объекты и процедуры от типовых.
  3. Откройте конфигурацию расширения.
  4. В дереве основной конфигурации найдите нужную форму, щёлкните по ней правой кнопкой и выберите Добавить в расширение.
  5. Форма появится в дереве расширения. Откройте её — это тот же редактор форм.
  6. Внесите изменения: новые элементы, группы, свойства, команды.
  7. Обновите конфигурацию базы данных расширения (F7) и проверьте результат в Предприятии.

Что в расширении можно сделать с формой:

  • ➕ добавить свои элементы, реквизиты и команды формы;
  • 👁 поменять свойства типовых элементов: видимость, заголовок, расположение;
  • 🧠 добавить свой обработчик события или выполнить код до, после или вместо типового.

Для кода в модуле формы расширения используются аннотации &Перед, &После и &Вместо. Пример: при открытии формы документа скрываем поле и делаем комментарий видимым.

&НаСервере
&После("ПриСозданииНаСервере")
Процедура мр_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если Элементы.Найти("Комментарий") <> Неопределено Тогда
		Элементы.Комментарий.Видимость = Истина;
		Элементы.Комментарий.РастягиватьПоГоризонтали = Истина;
	КонецЕсли;

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

Проверка через Элементы.Найти здесь не лишняя. После обновления типовой конфигурации элемент могут переименовать, и без проверки форма упадёт с ошибкой при открытии.

Вместо &Вместо старайтесь использовать &Перед и &После. «Вместо» полностью подменяет типовой код, и после обновления вы не узнаете, что в нём исправили.

Программное управление формой: события и модуль

Модуль формы открывается вкладкой «Модуль» внизу редактора. Обработчик события создают из свойств формы или элемента: найдите событие в разделе «События» и нажмите кнопку с лупой рядом с ним. Платформа создаст заготовку процедуры с нужными параметрами.

Основные события формы

СобытиеГде выполняетсяДля чего
ПриСозданииНаСервереСерверНачальная настройка: видимость, заполнение, условия
ПриОткрытииКлиентДействия при показе формы пользователю
ПередЗаписьюКлиентПроверка перед записью, можно отменить через Отказ
ПриЗаписиНаСервереСерверДействия в транзакции записи
ПослеЗаписиКлиентРеакция после успешной записи
ПередЗакрытиемКлиентПредупреждение о несохранённых данных

У элементов свои события. Чаще всего нужно ПриИзменении: например, пересчитать сумму при смене количества или показать поле при выборе определённого значения.

Директивы компиляции

Каждая процедура модуля формы помечается директивой:

  • 🖥 &НаКлиенте — код выполняется на компьютере пользователя;
  • 🗄 &НаСервере — на сервере, с доступом к данным формы;
  • ⚡ &НаСервереБезКонтекста — на сервере, но без передачи данных формы, поэтому вызов быстрее.

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

Пример: показать поле по условию

Задача: поле «Договор» видно только когда выбран контрагент. Логику выносят в отдельную процедуру, чтобы вызывать её и при открытии, и при изменении.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	УправлениеФормой(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	УправлениеФормой(ЭтотОбъект);
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УправлениеФормой(Форма)
	Форма.Элементы.Договор.Видимость = ЗначениеЗаполнено(Форма.Объект.Контрагент);
КонецПроцедуры

Процедура с директивой &НаКлиентеНаСервереБезКонтекста вызывается и с клиента, и с сервера, а саму форму получает параметром. Лишнего обращения к серверу при смене контрагента не происходит.

Элементы, созданные из кода

Иногда состав формы заранее неизвестен — например, поля зависят от настроек. Тогда элементы добавляют в ПриСозданииНаСервере:

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

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

Отладка формы и ошибки при её редактировании

Чтобы посмотреть, что происходит в модуле, поставьте точку останова (F9 на строке кода) и запустите отладку: меню Отладка → Начать отладку, вариант тонкого клиента . Когда выполнение остановится, наводите курсор на переменные или откройте табло и вычисляйте выражения вроде Объект.Контрагент.

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

Диагностика: выберите симптом

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

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

Можно ли отредактировать форму внешней обработки или отчёта?
Да. Откройте файл .epf или .erf в Конфигураторе через меню «Файл → Открыть», дважды щёлкните по форме в дереве обработки и сохраните файл после правки. Базу обновлять не нужно.
Изменения, сделанные через «Изменить форму», видят другие пользователи?
Нет. Они хранятся в персональных настройках того, кто их сделал. Чтобы раздать их другим, скопируйте настройки пользователя средствами администрирования.
Чем форма элемента отличается от формы списка?
Форма элемента показывает один объект и работает с реквизитом «Объект». Форма списка выводит динамический список с реквизитом «Список» и редактируется отдельно.
Можно ли вернуть обычную форму вместо управляемой?
В интерфейсе «Такси» и в тонком клиенте используются только управляемые формы. Обычные формы работают лишь в толстом клиенте и в новых типовых конфигурациях не применяются.
Почему поле не растягивается на ширину формы?
Проверьте свойство «Растягивать по горизонтали» у поля и у группы, в которой оно лежит. Если группа не растягивается, поле внутри неё тоже останется узким.