§ 1.1. Автогенерируемая форма: что это и когда срабатывает
Справочник «Товары» живёт в «Канцтоварах» с тех пор, как его завели по «Дереву метаданных». Форм у него нет: ветка «Формы» пуста, и никто никогда не открывал редактор форм. А список товаров открывается. Двойной щелчок по строке открывает карточку, в ней наименование, артикул, единица, кнопки записи — всё на месте. Окно есть, а в редакторе форм его никто не собирал.
За этим стоит первое правило платформы, которое мы разберём вплотную.
1. Форма, которой нет в дереве
Когда пользователь просит показать товар, платформа ищет, какую форму ему открыть. Если у объекта назначена управляемая форма нужного вида, откроется она. Если назначенной управляемой формы нет — платформа не разводит руками, а строит форму сама, по описанию объекта: берёт его реквизиты, табличные части, стандартные команды и собирает из них окно. Такую форму называют автогенерируемой, или коротко — автоформой.
Если форма не задана явно — платформа создаёт её из метаданных.
Строгая пара, как всегда, с адресом:
образ окно, которое не собирали
в редакторе
строго форму строит платформа по
описанию объекта, когда ни одна
форма ему не назначена
где окно редактирования объекта,
закладка «Формы», страницы
«Основные» и «Дополнительные»
На этих двух страницах разработчик и говорит платформе: «для элемента открывай вот эту форму, для списка — вот эту». Пока там пусто, решение остаётся за платформой.
2. Когда правило срабатывает
Правило простое, но у него есть одна неочевидная строка. Вот что откроется в тонком клиенте — а в нём работают все современные программы.
| что назначено объекту | что откроется |
|---|---|
| ничего | форма, построенная платформой |
| управляемая форма | она и откроется |
| только обычная форма | форма, построенная платформой |
Третья строка — та самая неочевидная. Обычную форму тонкий клиент открыть не может, и вместо неё платформа строит управляемую: так описан порядок в документации платформы. Речь о конфигурациях, которые живут на управляемых формах, — только их эта книга и разбирает. Получается, что старая нарисованная форма в новом клиенте не работает, а пользователь всё равно видит окно — построенное на лету.
Отсюда важное следствие для чтения чужих конфигураций: пустая ветка «Формы» не означает, что объект нельзя открыть. Она означает ровно одно — форму для него строит платформа.
3. «Строит в момент, когда понадобилась»
Автоформа не лежит готовой. Её собирают тогда, когда она понадобилась: сервер читает описание объекта, строит из него описание формы, добавляет данные и отправляет клиенту — а тот рисует окно. Именно поэтому автоформы нет в дереве: до открытия её не существует.
Из этого следует всё остальное, что про неё нужно знать.
| у явной формы | у автоформы |
|---|---|
| открывается в редакторе форм | открывать нечего |
| можно добавить свои реквизиты | только то, что есть у объекта |
| можно задать свои команды | только стандартные |
| есть модуль с обработчиками | модуля нет, поведение — платформенное |
Автоформы нет в дереве, потому что до открытия её не существует.
4. Это не заглушка, а рабочее окно
Слово «автоматически» часто звучит как «наспех», и здесь этого оттенка нет. Автоформа — не набросок и не заглушка: через неё делают всё, ради чего объект заводили.
Вы уже пользовались автоформами всю прошлую главу, просто не знали об этом.
| окно, которое мы открывали | это автоформа? |
|---|---|
| список товаров | да |
| карточка «Ручка шариковая» | да |
| карточка поступления № 12 | да |
| окно выбора контрагента | да |
| окно отчёта об остатках | нет: у отчёта своё устройство |
Через эти окна мы смотрели список, открывали документ, меняли артикул, записывали изменения, выбирали контрагента. Ни одна из этих форм не нарисована человеком.
И это не весь список того, что автоформа умеет. В построенном платформой списке ищут по первым буквам, сортируют по колонке, ставят отбор, помечают запись на удаление, выводят список на печать — всё это стандартные возможности, и ни одну из них никто не заказывал отдельно.
5. Порядок, по которому платформа выбирает форму
Формы, которые платформа откроет сама, называют основными: их указывают на странице «Основные». Дополнительные — те, что объекту тоже принадлежат, но открываются по особому требованию. Платформа перебирает их именно в этом порядке.
Правило удобно держать в голове лестницей. Пользователь просит открыть товар — платформа спускается по ступеням, пока не найдёт, что открыть.
нужна форма элемента
│
назначена основная? ──да──► она
│ нет
есть дополнительная? ─да──► она
│ нет
построить по описанию объекта
Важно, что лестница своя у каждого вида формы. У справочника есть форма элемента, форма списка, форма выбора — что это за виды и кто каждый из них просит, разберём сразу дальше; вопрос «назначена ли своя» задаётся про каждую отдельно. Поэтому обычное состояние живой конфигурации — смешанное: у одного объекта список нарисован, а карточка строится платформой, у другого наоборот.
6. Зачем платформе это умение
Можно спросить: почему бы не потребовать от разработчика нарисовать форму, как требуют почти везде? Ответ виден, если сравнить два порядка работы.
| в системе без автоформ | в 1С |
|---|---|
| описать, что хранить | описать, что хранить |
| нарисовать окно для ввода | — |
| нарисовать окно для списка | — |
| связать поля окна с данными | — |
| запустить и ввести первые данные | запустить и ввести первые данные |
Три шага из пяти пропадают. Дело не только в экономии времени: пока формы нет, объект всё равно работает, и это меняет сам порядок работы. Разработчик заводит справочник, тут же запускает Предприятие, вводит десяток записей, смотрит, чего не хватает, — и правит дерево, а не форму. Форму он сделает потом и только там, где она нужна.
Есть и вторая причина, важнее первой. Автоформа строится из описания объекта, и значит, она не отстаёт от него. Добавили реквизит — он появился в окне сам. Нарисованная форма так не умеет: в ней новый реквизит нужно ставить руками, и всякий раз, когда об этом забывают, форма начинает врать — показывать не всё, что у объекта есть.
Пока формы нет, окно не отстаёт от объекта: платформа строит его заново по текущему описанию.
7. Как узнать автоформу в лицо
Различать их полезно: от этого зависит, где искать причину того, что вы видите на экране.
| признак | автоформа | своя форма |
|---|---|---|
| в дереве, в ветке «Формы» | пусто | форма лежит |
| порядок полей | как в дереве объекта | какой задал разработчик |
| группы, страницы, оформление | нет | бывают |
| лишние кнопки и особое поведение | нет | бывают |
Самый быстрый признак — первый: посмотреть в дерево. Остальные помогают, когда дерева под рукой нет, например при разговоре с пользователем: если окно выглядит ровно как список полей подряд и в нём нет ничего, кроме стандартных кнопок, — скорее всего, его построила платформа.
8. В Конфигураторе и в Предприятии
Убедимся, что окна, с которыми мы работали, действительно ниоткуда не взялись.
-
В Конфигураторе откройте справочник «Товары» и перейдите на закладку «Формы». На странице «Основные» все поля пусты: ни формы элемента, ни формы списка, ни формы выбора.
-
Раскройте в дереве ветку «Формы» у этого справочника — она пуста. Открывать нечего: автоформу в редакторе не показать.
-
То же самое проделайте с документом «ПоступлениеТоваров».
-
Запустите Предприятие и откройте список товаров и карточку любого товара. Оба окна платформа собрала только что, в момент открытия.
Главное в одном абзаце
Форма может существовать для пользователя и не существовать в дереве конфигурации. Когда объекту не назначено ни одной формы нужного вида, платформа строит её сама — по описанию объекта, из его реквизитов, табличных частей и стандартных команд; такую форму называют автогенерируемой. В тонком клиенте она же появится и тогда, когда объекту назначена только обычная форма: открыть её тонкий клиент не умеет. Автоформа не хранится готовой — её собирают в момент открытия, и потому её нет в дереве, нельзя открыть в редакторе, нельзя добавить к ней свои реквизиты, команды и обработчики. При этом она не заглушка: почти все окна, с которыми мы работали в прошлой главе, — автоформы, и через них делается всё, ради чего объект заводили.
Платформа собрала окно из описания объекта. Но по каким правилам — что именно она берёт, в каком порядке ставит и чего не показывает никогда?
Контрольные вопросы
- Что такое автогенерируемая форма и из чего платформа её строит?
- Когда правило срабатывает — при каких условиях платформа строит форму сама?
- Что откроется в тонком клиенте, если объекту назначена только обычная форма?
- Почему автоформы нет в дереве конфигурации и почему её нельзя открыть в редакторе?
- Чего у автоформы не может быть в принципе?
- Почему пустая ветка «Формы» — не признак недоделанной конфигурации?
Упражнения
Найдите автоформы. Откройте в Предприятии четыре окна из прошлой главы — список товаров, карточку товара, карточку поступления, окно выбора контрагента — и для каждого скажите, есть ли у него форма в дереве. Проверьте себя в Конфигураторе.
Своё: предскажите. В конфигурацию добавили справочник «Сотрудники» с реквизитами «Должность» и «Телефон» и ни одной формы не сделали. Что увидит пользователь, открыв список сотрудников? Что он сможет с ним сделать?
Ловушка: «форму забыли». Новичок открыл чужую конфигурацию, увидел у половины справочников пустую ветку «Формы» и решил, что работа не доделана. В чём он ошибается и какой вопрос стоило задать вместо этого?
Правило по таблице. Объекту назначена управляемая форма списка, а формы элемента нет. Что откроется при щелчке по строке списка, а что — при открытии самого списка?
Ответы — в конце части.