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