Изменение управляемой формы в 1С 8.3: от настройки пользователя до расширения конфигурации
Содержание
Редактировать форму в 1С 8.3 можно тремя способами. Пользователь без прав разработчика открывает форму и выбирает Ещё → Изменить форму: так можно скрыть, переставить или сгруппировать поля. Разработчик меняет форму в Конфигураторе — в редакторе форм объекта или, если конфигурация типовая и стоит на поддержке, через расширение конфигурации
.
Типичная ситуация: бухгалтер просит убрать с документа три поля, которыми никто не пользуется, и добавить на видное место комментарий. Первую часть он сделает сам за минуту. Вторую, если нужно новое поле с данными или логика «показывать поле только для ООО», придётся решать в Конфигураторе. Ниже по порядку — от простого к сложному.
С чего начать: какой способ редактирования формы выбрать
Перед правкой определите, что именно нужно поменять и для кого. От этого зависит инструмент.
| Задача | Способ | Кто делает | Чем рискуете |
|---|---|---|---|
| Скрыть, переставить, переименовать поле для себя | Ещё → Изменить форму | Сам пользователь | Ничем, настройки сбрасываются |
| Изменить вид формы у всех пользователей | Конфигуратор или расширение | Разработчик | Конфликт при обновлении, если править типовую форму напрямую |
| Добавить новый реквизит, кнопку, обработчик | Расширение конфигурации | Разработчик | Расширение может перестать применяться после обновления |
| Своя (нетиповая) конфигурация | Редактор форм в Конфигураторе | Разработчик | Нужен доступ к базе в режиме конфигурирования |
Несколько понятий, без которых дальше будет путано:
- 🧩 Управляемая форма — форма в 8.3 с интерфейсом «Такси». Её внешний вид строит платформа по дереву элементов, а не по координатам, как в старых обычных формах.
- 📦 Реквизиты формы — данные, с которыми работает форма. Главный реквизит обычно называется
Объект(у формы элемента или документа) илиСписок(у формы списка). - 🧱 Элементы формы — то, что видно на экране: поля, группы, таблицы, кнопки, надписи. Элемент связан с реквизитом через свойство
ПутьКДанным. - ⚙️ Команды — действия, которые выполняет форма. Кнопка на форме — это отображение команды.
- 📝 Модуль формы — код на встроенном языке, который реагирует на события формы и её элементов.
Если поле нужно убрать «для всех», но новых данных не требуется, иногда достаточно настроить форму под одним пользователем и скопировать его настройки остальным. В типовых конфигурациях на БСП это делается в Администрирование → Настройки пользователей и прав, в обработке настроек пользователей.
Изменение формы в режиме Предприятия без Конфигуратора
Это самый безопасный способ: в конфигурации ничего не меняется, правка хранится в пользовательских настройках.
- Откройте нужную форму — документ, элемент справочника или список.
- Нажмите
Ещёв командной панели формы и выберитеИзменить форму.... - Откроется окно «Настройка формы». Слева дерево элементов, справа — свойства выделенного элемента.
- Снимите флажок у элемента, чтобы скрыть его. Поставьте — чтобы показать скрытый.
- Перетаскивайте элементы мышью или стрелками на панели, чтобы поменять порядок.
- Чтобы объединить поля, добавьте группу и перенесите поля в неё.
- Нажмите
ОК. Форма перерисуется сразу.
Что можно поменять в этом окне:
- 👁 видимость элементов, включая те, что разработчик скрыл по умолчанию, но разрешил показывать;
- ↕️ порядок полей и групп;
- 🗂 группировку: горизонтальные и вертикальные группы;
- 🏷 заголовок и некоторые свойства отображения элемента.
Чего сделать нельзя: добавить поле, которого нет в форме, поменять логику заполнения или проверки, добавить новую кнопку с действием. Это уже работа разработчика.
Вернуть форму к исходному виду: снова Ещё → Изменить форму..., в окне настройки — Ещё → Установить стандартные настройки.
Если после ОК настройки не сохраняются и при следующем открытии форма снова прежняя, проверьте у пользователя право «Сохранение данных пользователя». Без него платформа не записывает персональные настройки.
Как устроен редактор форм в Конфигураторе
Чтобы править форму на уровне конфигурации, запустите базу в режиме Конфигуратора и откройте дерево: Конфигурация → Открыть конфигурацию. Найдите объект (например, документ), раскройте ветку «Формы» и дважды щёлкните по нужной форме.
Редактор формы делится на несколько областей:
| Область | Где | Что в ней |
|---|---|---|
| Элементы | Слева вверху | Дерево всего, что видно на форме: группы, поля, таблицы, кнопки |
| Командный интерфейс | Соседняя вкладка | Команды навигации и панели действий формы |
| Реквизиты | Справа вверху | Данные формы: Объект, табличные части, дополнительные реквизиты |
| Команды | Справа, соседняя вкладка | Команды формы и стандартные команды |
| Параметры | Справа, соседняя вкладка | Параметры, которые форма получает при открытии |
| Предпросмотр | Внизу | Как форма выглядит в «Такси» |
| Модуль | Вкладка внизу редактора | Код обработчиков формы |
Свойства любого элемента открываются двойным щелчком или из контекстного меню командой Свойства.
Добавление поля на форму
- На вкладке «Реквизиты» раскройте
Объекти найдите нужный реквизит. - Перетащите его мышью в дерево «Элементы» — в ту группу, где поле должно стоять.
- Платформа сама создаст элемент подходящего вида: поле ввода для строки или ссылки, поле флажка для булева.
- Посмотрите результат в предпросмотре внизу.
Если нужного реквизита у объекта нет, сначала добавьте его в объект метаданных (документ, справочник), а уже потом выводите на форму. Реквизит формы, созданный прямо на вкладке «Реквизиты» формы, в базу не записывается: он живёт, пока форма открыта.
Группы и компоновка элементов
Элементы на управляемой форме не ставят по координатам. Платформа раскладывает их сама, а вы управляете группами:
- 📐 Обычная группа — свойство
Группировказадаёт расположение: вертикальное или горизонтальное. - 📑 Страницы — закладки, каждая страница — отдельная группа.
- 🔲 Отображение группы — с рамкой или без, со слабым или сильным выделением.
- 🔽 Поведение — обычная, сворачиваемая или всплывающая группа.
Чтобы поставить два поля в одну строку, создайте обычную группу с горизонтальной группировкой и перетащите поля в неё.
Настройка свойств элементов и внешнего вида формы
Большую часть задач по оформлению решают свойства элемента, без единой строки кода.
| Свойство | Что делает | Пример |
|---|---|---|
Заголовок | Подпись поля | «Комментарий» → «Примечание для склада» |
Видимость | Показывать ли элемент | Скрыть служебное поле |
Доступность | Можно ли с элементом работать | Поле серое, нельзя изменить |
ТолькоПросмотр | Значение видно, но не редактируется | Сумма после проведения |
ПоложениеЗаголовка | Где подпись: слева, сверху, нет | Подпись над многострочным полем |
Ширина, Высота | Размер в условных единицах | Узкое поле для кода |
РастягиватьПоГоризонтали | Тянуть ли поле на всю ширину | Комментарий во всю строку |
Подсказка, ОтображениеПодсказки | Пояснение к полю | Подсказка под полем мелким текстом |
МногострочныйРежим | Поле в несколько строк | Длинный комментарий |
Разница между Доступность и ТолькоПросмотр важна на практике. Недоступное поле нельзя даже выделить и скопировать значение. Поле «только просмотр» можно выделить и скопировать, но нельзя изменить.
Условное оформление
Чтобы раскрасить строки или менять вид поля по условию, не обязательно писать код. Откройте свойства самой формы (корневой элемент «Форма» в дереве) и найдите Условное оформление.
Каждая строка условного оформления состоит из трёх частей:
- Оформление — цвет текста, фона, шрифт, видимость, доступность.
- Условие — отбор по значениям реквизитов, например «Сумма больше 100 000».
- Оформляемые поля — к каким элементам применить.
Условное оформление работает на сервере и не требует перерисовки формы из модуля. Для формы списка это основной способ подсветить, например, непроведённые документы.
Конструктор формы: создаём новую форму с нуля
Когда у объекта нет своей формы, платформа строит её автоматически. Чтобы получить форму, которую можно править, её нужно создать.
- В дереве конфигурации раскройте объект, щёлкните правой кнопкой по ветке «Формы» и выберите
Добавить. - Откроется конструктор формы. Выберите тип: форма элемента (документа), форма списка, форма выбора — набор зависит от вида объекта.
- Задайте имя формы.
- Отметьте флажок назначения формы основной, если она должна открываться по умолчанию.
- На следующем шаге отметьте реквизиты и табличные части, которые конструктор разместит на форме.
- Нажмите
Готово. Откроется обычный редактор формы, где работа продолжается вручную.
Конструктор — стартовая заготовка. Повторно его на ту же форму не запускают: дальше форму правят в редакторе.
Если форма создана, но в Предприятии всё равно открывается старая или автоматическая, откройте свойства объекта и посмотрите раздел основных форм. Новая форма должна быть указана там.
Расширение: как изменить типовую форму и не потерять обновления
Если конфигурация на поддержке (БП 3.0, ЗУП 3.1, УТ 11 без доработок), править её форму напрямую — плохая идея. Придётся включать возможность изменения, и каждое обновление превратится в сравнение и объединение. Расширение решает это: изменения лежат отдельно, основная конфигурация остаётся типовой.
Расширения появились в платформе 8.3.6, а возможности по формам с тех пор заметно выросли — работайте на актуальной платформе.
Перед подключением расширения к рабочей базе сделайте резервную копию и проверьте расширение на копии базы.
Порядок работы:
- В Конфигураторе откройте
Конфигурация → Расширения конфигурации. - Добавьте новое расширение, задайте имя и префикс (например,
мр_). Префикс отличает ваши объекты и процедуры от типовых. - Откройте конфигурацию расширения.
- В дереве основной конфигурации найдите нужную форму, щёлкните по ней правой кнопкой и выберите
Добавить в расширение. - Форма появится в дереве расширения. Откройте её — это тот же редактор форм.
- Внесите изменения: новые элементы, группы, свойства, команды.
- Обновите конфигурацию базы данных расширения (
F7) и проверьте результат в Предприятии.
Что в расширении можно сделать с формой:
- ➕ добавить свои элементы, реквизиты и команды формы;
- 👁 поменять свойства типовых элементов: видимость, заголовок, расположение;
- 🧠 добавить свой обработчик события или выполнить код до, после или вместо типового.
Для кода в модуле формы расширения используются аннотации &Перед, &После и &Вместо. Пример: при открытии формы документа скрываем поле и делаем комментарий видимым.
&НаСервере
&После("ПриСозданииНаСервере")
Процедура мр_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Элементы.Найти("Комментарий") <> Неопределено Тогда
Элементы.Комментарий.Видимость = Истина;
Элементы.Комментарий.РастягиватьПоГоризонтали = Истина;
КонецЕсли;
КонецПроцедуры
Проверка через Элементы.Найти здесь не лишняя. После обновления типовой конфигурации элемент могут переименовать, и без проверки форма упадёт с ошибкой при открытии.
Вместо &Вместо старайтесь использовать &Перед и &После. «Вместо» полностью подменяет типовой код, и после обновления вы не узнаете, что в нём исправили.
Программное управление формой: события и модуль
Модуль формы открывается вкладкой «Модуль» внизу редактора. Обработчик события создают из свойств формы или элемента: найдите событие в разделе «События» и нажмите кнопку с лупой рядом с ним. Платформа создаст заготовку процедуры с нужными параметрами.
Основные события формы
| Событие | Где выполняется | Для чего |
|---|---|---|
ПриСозданииНаСервере | Сервер | Начальная настройка: видимость, заполнение, условия |
ПриОткрытии | Клиент | Действия при показе формы пользователю |
ПередЗаписью | Клиент | Проверка перед записью, можно отменить через Отказ |
ПриЗаписиНаСервере | Сервер | Действия в транзакции записи |
ПослеЗаписи | Клиент | Реакция после успешной записи |
ПередЗакрытием | Клиент | Предупреждение о несохранённых данных |
У элементов свои события. Чаще всего нужно ПриИзменении: например, пересчитать сумму при смене количества или показать поле при выборе определённого значения.
Директивы компиляции
Каждая процедура модуля формы помечается директивой:
- 🖥
&НаКлиенте— код выполняется на компьютере пользователя; - 🗄
&НаСервере— на сервере, с доступом к данным формы; - ⚡
&НаСервереБезКонтекста— на сервере, но без передачи данных формы, поэтому вызов быстрее.
Обращаться к базе данных (запросы, менеджеры справочников) можно только в серверных процедурах. Типовая связка: клиентский обработчик события вызывает серверную процедуру.
Пример: показать поле по условию
Задача: поле «Договор» видно только когда выбран контрагент. Логику выносят в отдельную процедуру, чтобы вызывать её и при открытии, и при изменении.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УправлениеФормой(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
УправлениеФормой(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УправлениеФормой(Форма)
Форма.Элементы.Договор.Видимость = ЗначениеЗаполнено(Форма.Объект.Контрагент);
КонецПроцедуры
Процедура с директивой &НаКлиентеНаСервереБезКонтекста вызывается и с клиента, и с сервера, а саму форму получает параметром. Лишнего обращения к серверу при смене контрагента не происходит.
Элементы, созданные из кода
Иногда состав формы заранее неизвестен — например, поля зависят от настроек. Тогда элементы добавляют в ПриСозданииНаСервере:
НовоеПоле = Элементы.Добавить("мр_Примечание", Тип("ПолеФормы"), Элементы.ГруппаШапка);
НовоеПоле.Вид = ВидПоляФормы.ПолеВвода;
НовоеПоле.ПутьКДанным = "Объект.Комментарий";
Если для поля нужен новый реквизит формы, его сначала добавляют методом ИзменитьРеквизиты с массивом объектов РеквизитФормы, и только потом создают элемент.
Отладка формы и ошибки при её редактировании
Чтобы посмотреть, что происходит в модуле, поставьте точку останова (F9 на строке кода) и запустите отладку: меню Отладка → Начать отладку, вариант тонкого клиента
. Когда выполнение остановится, наводите курсор на переменные или откройте табло и вычисляйте выражения вроде Объект.Контрагент.
Частые проблемы при редактировании форм:
F7) или форма не назначена основной в свойствах объекта. Ещё вариант: у пользователя сохранены свои настройки формы — сбросьте их через «Установить стандартные настройки».ПутьКДанным указан реквизит, которого больше нет: его удалили или переименовали. Найдите имя из текста ошибки поиском по модулю и по свойствам элементов.Обновление конфигурации базы данных в рабочей базе делайте вне рабочего времени. Если меняется структура хранения данных (новый реквизит объекта), платформе нужен монопольный доступ, и пользователей придётся попросить выйти.