§ 2.1. Форма как объект конфигурации: где она живёт в дереве

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

1. Чертёж и окно

Форма в дереве конфигурации не показывается пользователю. Она описывает, каким должно быть окно: какие поля, в каком порядке, с какими кнопками. Окно по этому описанию платформа строит каждый раз заново — и столько раз, сколько понадобится.

одно описание          много окон
ФормаТовара  ──┬──►  Бумага А4
               ├──►  Ручка шариковая
               └──►  Папка-регистратор

Форма — чертёж окна, а не само окно: по одному чертежу строится сколько угодно окон.

В дереве, иначе говоря, лежит чертёж той самой реплики, о которой мы говорим с первой главы: реплику произносит окно, а форма задаёт, из чего эта реплика состоит.

Отсюда и правило чтения: когда говорят «поправь форму», речь о чертеже, и поправка отзовётся во всех окнах сразу. А когда говорят «у меня открыта форма товара», речь об окне — одном из многих, построенных по этому чертежу.

образ    форма — чертёж окна
строго   объект конфигурации с именем
         и описанием
адрес    ветка «Формы» внутри объекта

2. Что лежит внутри формы

Объект «форма» хранит не картинку, а несколько списков и модуль. Списки отвечают на разные вопросы, и разделены они не случайно.

часть формына какой вопрос отвечает
реквизиты формыкакие данные форма держит у себя
элементыиз чего сложено окно и в каком порядке
командычто пользователь может сделать
параметрыс чем форму открыли
модуль формычто делать в ответ на действие

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

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

3. У каждой формы один хозяин

Форма не висит в воздухе: она принадлежит объекту и лежит в его ветке. Поэтому полное имя формы всегда двойное — чей объект и какая форма.

Справочники
├── Товары
│   └── Формы
│       └── ФормаЭлемента   ← форма товара
└── Контрагенты
    └── Формы
        └── ФормаЭлемента   ← другая форма

Это две разные формы, просто с совпадающими именами, и друг другу они не мешают: имя формы уникально внутри своего объекта, а не во всей конфигурации. Имена от этого получаются короткими, но разговор требует точности. «Открой форму элемента» без указания объекта не адресует ничего.

Форма принадлежит одному объекту. Имя формы имеет смысл только вместе с именем хозяина.

4. Общая форма: окно без предметного хозяина

У правила есть исключение, и оно честное: пометим его сейчас, а развернём в главе об особых формах. Если окно не про один объект — настройки программы, служебный диалог, — привязывать его к справочнику незачем. Такие формы лежат отдельно.

Общие
└── Общие формы
    └── НастройкиПрограммы

Устроена общая форма из тех же частей: те же списки, тот же модуль. Разница в том, что предметного хозяина у неё нет, а значит, нет и объекта, который подставился бы в неё сам: данные попадают в такую форму только через параметры и собственные реквизиты формы. Особые формы — тема отдельной главы ближе к концу книги; пока достаточно знать, что ветка такая есть и что попадают в неё по причине, а не по привычке.

5. Имя и синоним: адрес и подпись

У формы, как у всякого объекта конфигурации, есть имя и есть синоним. Имя — служебное: по нему на форму ссылаются настройки и код. Синоним — человеческое название, его видит тот, кто выбирает форму из списка форм.

свойствокто читаетпример
имяплатформа, настройки, кодФормаЭлемента
синонимчеловекФорма элемента
комментарийразработчик«переписана под склад»

Заголовок окна к этой паре отношения не имеет: его платформа складывает из представления объекта-хозяина — то есть из того, как объект называет себя пользователю; обычно это его синоним. Так что имя формы в заголовке не появится, какое бы имя ей ни дали.

6. Вид формы — не имя формы

Здесь спотыкаются почти все. Виды форм — элемента, списка, выбора, группы — мы разобрали в прошлой главе. Кажется, что вид задаётся именем: назвал форму «ФормаЭлемента» — получил форму элемента. Это не так.

что задаётчем задаётсягде живёт
имя формыразработчиком, произвольносвойство самой формы
назначение формыссылкой из объектасвойства объекта-хозяина

Форму можно назвать «Карточка», «ФормаТовара» или «Ф1» — видом элемента она станет тогда, когда справочник укажет её как свою основную форму элемента. Имя — это адрес, по которому форму находят; назначение — решение хозяина, кем эта форма ему приходится. Как объект указывает на форму, разберём дальше в этой главе.

Имя формы не делает её формой элемента. Вид назначает объект, а не название.

7. В Конфигураторе

Три коротких обхода. Ничего не создаём и не меняем — только читаем дерево.

  1. Раскройте справочник «Товары» и найдите ветку «Формы». Она пуста — мы это уже видели. Сделайте то же для справочника «Контрагенты» и документа «ПоступлениеТоваров»: пусто везде.

  2. Откройте свойства справочника «Товары» и найдите группу свойств, где указываются основные формы объекта. Поля пустые — это они связывают объект с формой.

Здесь будет снимок экранапалитра свойств справочника «Товары», группа основных форм, поля пустые
  1. Найдите в дереве ветку «Общие» и в ней «Общие формы». Она тоже пуста. Запомните адрес: когда встретите окно, которое не про один объект, искать его форму нужно здесь.

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

Главное в одном абзаце

Форма в дереве конфигурации — не окно, а его чертёж: по одному описанию платформа строит столько окон, сколько понадобится, и правка чертежа отзывается во всех сразу. Внутри формы лежат списки — реквизиты формы, элементы, команды, параметры — и модуль; реквизиты формы не путать с реквизитами объекта: первые нужны, пока открыто окно, вторые хранятся в базе. Каждая форма принадлежит одному объекту и лежит в его ветке «Формы», поэтому имя формы имеет смысл только вместе с именем хозяина, а одинаковые имена у разных объектов друг другу не мешают; формы, которые не про один объект, лежат отдельно, в общих формах. Имя — это адрес, по которому форму находят; кем форма приходится объекту — формой элемента, списка, выбора, — решает не имя, а ссылка из свойств самого объекта.


Ветка «Формы» пуста, и мы знаем, что в ней должно появиться: объект с именем, списками и модулем. Составлять эти списки с нуля, поле за полем, — работа на полдня. А нельзя ли получить основу формы сразу готовой?

Контрольные вопросы

  1. Чем форма в дереве отличается от окна на экране?
  2. Из каких частей состоит объект-форма и на какой вопрос отвечает каждая?
  3. Почему у справочника «Товары» и у справочника «Контрагенты» формы могут называться одинаково?
  4. Что задаёт имя формы, а что — назначение формы? Где живёт каждое решение?
  5. Чем реквизит формы отличается от реквизита объекта?
  6. В каком случае форма попадает в общие формы, а не в ветку объекта?
  7. Почему наша конфигурация работает, хотя ни одной заданной формы в ней нет?

Упражнения

Прочтите дерево. Пройдите по «Канцтоварам» и выпишите, у каких объектов есть ветка «Формы». Для каждого скажите, что означает пустая ветка.

Своё: назовите хозяина. Коллега говорит: «открой форму списка», «поправь форму элемента», «в форме выбора нет кнопки». Для каждой фразы скажите, какого уточнения не хватает, чтобы понять, о чём речь.

Ловушка: «назвал — значит сделал». Разработчик создал у справочника «Товары» форму с именем «ФормаСписка» и говорит: «теперь список товаров открывается моей формой». Прав ли он и что проверить в первую очередь?

Обратный ход. В чужой конфигурации у документа в ветке «Формы» лежат три формы, а в свойствах документа указана как основная только одна. Что это означает и где искать две остальные в работе программы?

На чтение. В дереве встретилась форма в ветке «Общие формы». Какие выводы о ней можно сделать сразу, ещё не открыв её в редакторе?

Ответы — в конце части.