Как изменить форму объекта в Конфигураторе 1С
Содержание
Частое заблуждение: форму в 1С 8.3 можно «нарисовать» мышью, перетаскивая поля в нужные координаты, как в старых версиях. В управляемых формах это не так — расположение элементов платформа собирает сама по их порядку и группировке, а вы задаёте состав и свойства. Чтобы редактировать форму, её открывают в Конфигураторе, меняют реквизиты и элементы, при необходимости правят модуль формы и обновляют конфигурацию базы.
Ниже разберём, как изменить форму объекта (справочника, документа, отчёта) по шагам: от выбора нужной формы до проверки результата в режиме 1С:Предприятие. Отдельно — как не потерять возможность обновлять типовую конфигурацию
после правок.
Управляемые и обычные формы: что именно вы правите
В 1С 8.3 сосуществуют два вида форм, и редактируются они по-разному.
- Управляемые формы — основной вид в современных конфигурациях (БП 3.0, ЗУП 3.1, УТ 11, интерфейс «Такси»). Работают в тонком и веб-клиенте. Форма описывается декларативно: есть реквизиты (данные) и дерево элементов. Точные координаты вы не задаёте — порядок и вложенность групп определяют, как платформа расставит поля на разных экранах.
- Обычные формы — наследие версий 8.0–8.1. Открываются только в толстом клиенте в режиме обычного приложения. Здесь элементы позиционируются пиксельно. В типовых решениях на «Такси» их почти не осталось, но в старых самописных базах встречаются.
Как понять, какая перед вами форма: в дереве конфигурации у объекта откройте ветку Формы. У управляемой формы в редакторе слева вкладки «Элементы» и «Реквизиты», справа — палитра свойств. У обычной формы — рабочее поле с сеткой и свободно расставленными контролами.
Дальше речь в основном про управляемые формы — именно их правят в большинстве задач на 8.3. Обычную форму редактируют в похожей логике (реквизиты, элементы, модуль), но её рабочее поле — пиксельная сетка: элементы двигают мышью и задают им размеры и координаты напрямую. Код в обычных формах пишут без директив &НаКлиенте/&НаСервере — там другая клиент-серверная модель.
Как открыть форму для редактирования в Конфигураторе
Редактирование форм живёт в Конфигураторе — в пользовательском режиме состав формы не меняют (там доступна только настройка видимости и порядка через Ещё → Изменить форму, без программной логики).
- Запустите базу в режиме Конфигуратор.
- Откройте дерево конфигурации:
Конфигурация → Открыть конфигурацию. - Найдите нужный объект — например,
Справочники → НоменклатураилиДокументы → РеализацияТоваровУслуг. - Разверните ветку
Формы, дважды щёлкните по нужной форме (ФормаЭлемента,ФормаСписка,ФормаВыбораи т. д.).
Откроется редактор формы: слева дерево элементов и вкладка реквизитов, справа — палитра свойств выделенного элемента, снизу — модуль формы и командный интерфейс.
Как редактировать типовую форму, не теряя обновлений
Это главный шаг, который часто пропускают. Типовая конфигурация стоит на поддержке, и прямая правка её форм ломает автоматическое обновление . Есть два пути.
Конфигурация → Расширения конфигурации). В расширение добавляется копия формы, правки живут отдельно от основной конфигурации, обновления типовой при этом не ломаются. Расширения доступны с версии платформы 8.3.6.Конфигурация → Поддержка → Настройка поддержки) с возможностью изменения. После этого обновлять типовую придётся вручную, сверяя изменения, — решайте осознанно.Снятие с поддержки необратимо упрощённым путём: вернуть объект «на замок» и к штатному обновлению сложно. Для типовых баз расширение — выбор по умолчанию.
Реквизиты формы: данные, с которыми она работает
Реквизиты — это данные формы. Их видно на вкладке «Реквизиты» в редакторе формы.
- Основной реквизит (выделен жирным) связывает форму с объектом. У формы элемента справочника это
Объект, у формы списка —Список(динамический список). - Через точку доступны поля объекта:
Объект.Наименование,Объект.Комментарий, реквизиты табличных частей. - Можно добавить собственные реквизиты формы — временные значения, которые не хранятся в базе (флажки-переключатели, суммы для расчёта на лету). Кнопка добавления — в командной панели вкладки «Реквизиты».
Чтобы вывести реквизит на форму, перетащите его из списка реквизитов в дерево элементов. Платформа сама создаст поле нужного вида — поле ввода, флажок, поле выбора — по типу реквизита.
Если добавляете реквизит, который должен сохраняться в базе, его заводят не на форме, а у самого объекта (в составе справочника или документа). Реквизит формы существует только пока форма открыта.
Элементы формы: поля, таблицы, группы и кнопки
Элементы — это то, что видит пользователь. Дерево элементов редактируется на вкладке «Элементы».
Основные типы:
| Элемент | Для чего |
|---|---|
| Поле | Ввод и отображение реквизита (строка, число, дата, ссылка, флажок) |
| Группа | Объединяет элементы: колонки, страницы (закладки), командная панель |
| Таблица | Вывод табличной части или дерева значений |
| Кнопка | Запуск команды формы |
| Декорация | Надпись, картинка, гиперссылка без привязки к данным |
Порядок работы:
- Выделите элемент в дереве — справа откроется палитра свойств.
- Задайте ключевые свойства:
Заголовок,Видимость,Доступность(можно ли редактировать),ПропускатьПриВводе. - Для группировки добавьте элемент
Группаи перетащите поля внутрь. Вид группы (Колонки,Страницы,Обычная) задаётся в свойствеВид. - Чтобы поле занимало всю ширину, используйте свойства растяжения (
РастягиватьПоГоризонтали) — в управляемой форме это замена ручному выставлению ширины.
Расположение на экране задаётся не координатами, а порядком элементов в дереве и вложенностью групп. Хотите поля в две колонки — создайте группу с видом «Колонки» и положите в неё две подгруппы. Это и есть разница с обычными формами.
Как добавить кнопку и свою команду
Кнопка сама по себе ничего не делает — она запускает команду формы. Поэтому порядок такой:
- На вкладке «Команды» (рядом с «Реквизиты») добавьте новую команду формы, задайте имя — например
РассчитатьИтог. - У команды нажмите лупу в свойстве
Действие— платформа создаст в модуле процедуру-обработчик с директивой&НаКлиенте. - Перетащите команду в дерево элементов (обычно в командную панель или группу кнопок) — появится кнопка, связанная с командой.
- В свойствах кнопки задайте
Заголовок, при желании картинку и отображение (Текст,Картинка,Картинка и текст).
Так же выводятся стандартные команды объекта (Провести, Записать) — их не пишут вручную, а берут из набора команд формы.
Модуль формы: события и обработчики
Поведение формы описывается в её модуле. Открыть — вкладка «Модуль» внизу редактора формы.
Ключевое в 8.3 — директивы компиляции, они определяют, где выполняется процедура:
&НаКлиенте— на стороне пользователя (реакция на нажатия, вопросы, открытие форм).&НаСервере— на сервере, с доступом к данным формы и базе.&НаСервереБезКонтекста— на сервере, но без доступа к данным формы (быстрее, для вспомогательных расчётов).
Частые события, обработчики которых добавляют:
ПриСозданииНаСервере— настройка формы при открытии (видимость, заполнение значений по умолчанию).ПриОткрытии— действия на клиенте после открытия.- Событие реквизита, например
ПриИзмененииу поля — пересчёт по вводу пользователя.
Чтобы добавить обработчик события элемента: выделите элемент, в палитре свойств найдите нужное событие и нажмите значок лупы справа от поля — платформа создаст процедуру с правильной директивой и подставит её в модуль.
Простой пример — скрыть поле комментария при открытии формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.Комментарий.Видимость = Ложь;
КонецПроцедуры
Правило: с клиента нельзя напрямую обратиться к данным, которые живут на сервере, и наоборот. Если из &НаКлиенте нужны данные базы — вызывайте серверную процедуру. Нарушение этого правила — причина большинства ошибок компиляции в модуле формы.
Сохранение изменений и проверка результата
После правок форма существует только в редактируемой конфигурации — в рабочей базе её ещё нет.
- Сохраните конфигурацию:
Файл → Сохранить(илиCtrl+S). - Примените изменения к базе:
Конфигурация → Обновить конфигурацию базы данных(клавишаF7). - Если менялась структура (добавлены реквизиты объекта, а не только элементы формы), платформа покажет окно принимаемых изменений — подтвердите.
- Запустите проверку:
Отладка → Начать отладку(клавишаF5) — откроется1С:Предприятиес вашими правками.
Обновление конфигурации, затрагивающее структуру данных, в файловой базе требует, чтобы её никто не открыл в пользовательском режиме, а в клиент-серверной — завершения активных сеансов. Планируйте такие изменения на время, когда в базе никто не работает, иначе обновление либо не пройдёт, либо оборвёт работу пользователей.
Если форма правилась в расширении, после сохранения расширения конфигурацию базы данных всё равно нужно обновить (F7) — только тогда изменения попадут в рабочий режим.
Частые ошибки при редактировании форм
- Правки не видны в 1С:Предприятии. Почти всегда — забыли обновить конфигурацию
базы данных (
F7). Сохранение конфигурации (Ctrl+S) и обновление базы — два разных действия. - Типовая перестала обновляться. Форму правили напрямую в конфигурации на поддержке. Выход — переносить правки в расширение; уже внесённые придётся сверять при каждом обновлении вручную.
- Ошибка компиляции модуля. Из процедуры
&НаКлиентевызвали то, что доступно только на сервере (запрос к базе, менеджер объекта). Вынесите серверную логику в процедуру&НаСервере. - Элемент пропал с формы. Проверьте свойство
Видимостьэлемента и роль пользователя: видимость может зависеть от прав или функциональной опции. - Поле не растягивается / «прыгает». В управляемой форме ширину регулируют свойства растяжения и группы, а не абсолютный размер. Проверьте вложенность в группу и её вид.
- Изменения в расширении не применились. После правки расширения тоже нужно обновление конфигурации
базы (
F7); одного сохранения расширения мало.
Динамическое изменение формы из кода
Иногда состав формы должен зависеть от данных: показать блок полей только для определённого вида документа, добавить колонку по условию. Это делают программно в модуле формы, обычно в ПриСозданииНаСервере.
Добавление элемента выполняется методом Элементы.Добавить() — указывают имя, тип и родителя:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовоеПоле = Элементы.Добавить("ПолеКомментарий", Тип("ПолеФормы"), Элементы.ГруппаОсновная);
НовоеПоле.Вид = ВидПоляФормы.ПолеВвода;
НовоеПоле.ПутьКДанным = "Объект.Комментарий";
КонецПроцедуры
Реквизит, на который ссылается ПутьКДанным, должен существовать заранее.
Второй инструмент — условное оформление (команда Условное оформление в редакторе формы). Оно меняет цвет, видимость, доступность элемента по условию на данные без единой строки кода: например, подсветить строку таблицы красным, если остаток ушёл в минус.
Третий — функциональные опции: включают и выключают поля и команды в типовых конфигурациях в зависимости от настроек учёта. Если поле на типовой форме «не включается» — ищите связанную функциональную опцию в настройках, а не правьте форму.
Частые вопросы
Можно ли редактировать форму без Конфигуратора, прямо в пользовательском режиме?
Ещё → Изменить форму позволяет скрывать поля, менять их порядок и добавлять реквизиты объекта на форму. Добавить программную логику, новые элементы с кодом или поменять модуль так нельзя — это делается только в Конфигураторе.Чем отличается реквизит формы от элемента формы?
Как вернуть форму к исходному виду после неудачных правок?
Почему мои изменения видны в Конфигураторе, но не в программе?
F7 (Конфигурация → Обновить конфигурацию базы данных) и подтвердите принимаемые изменения.Нужна ли монопольная блокировка базы, чтобы изменить форму?
F7 в базе не должно быть активных сеансов.