§ 0.8. Связь с метаданными и с кодом: где здесь дерево, где здесь язык

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

1. Дерево конфигурации: чертёж программы

Конфигурация — устройство прикладной программы, и показывают его деревом. Ветки дерева — это виды объектов, а внутри веток то, что завёл разработчик.

ветка деревао чём онав «Канцтоварах»
Справочникито, что существует и повторяетсяЕдиницыИзмерения, Товары, Контрагенты, Склады
Документыто, что произошлоПоступлениеТоваров, РеализацияТоваров, ПриказОбИзмененииЦен
Регистры сведений и накоплениязаписи о состоянии и о движениях; по ним получают ответыЦеныТоваров — цены, ТоварыНаСкладах — остатки, Продажи — обороты
Отчётывопрос к данным и показ ответаОстаткиТоваровНаСкладе
Обработкизадача, которую делают над даннымипока ни одной

Дерево конфигурации — чертёж программы: что в ней есть и как оно устроено. Чертёж устройства, а не поведения: поведение задают свойства и код.

Полное объяснение, почему объекты именно такие и чем документ отличается от справочника, — в «Дереве метаданных». Здесь нам хватит трёх слов.

2. Объект, реквизит, табличная часть

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

Реквизит объекта — его свойство, которое хранится в базе: артикул у товара, контрагент у поступления.

Табличная часть — таблица внутри объекта: у поступления это строки товаров.

Документ «ПоступлениеТоваров»
├── Реквизиты
│   ├── Контрагент → Контрагенты
│   └── Склад      → Склады
└── Табличная часть «Товары»
    ├── Товар      → Товары
    ├── Количество
    ├── Цена
    └── Сумма

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

в деревена форме
реквизит объектаполе, которое его показывает, — если его вывели
табличная частьтаблица со строками
стандартные команды, которые платформа кладёт на формукнопки «Записать», «Провести и закрыть»

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

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

3. Где в этом дереве код

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

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

Правила — в свойствах, код — в модулях. Эта книга читает свойства.

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

4. Как искать в дереве то, что видишь на экране

Дальше в книге этот путь будет повторяться постоянно, поэтому проговорим его один раз.

от чегок чему
открытая форма в Предприятиизаголовок называет предмет: товар, поступление
предметего объект в дереве: справочник, документ
объектветка «Формы» внутри него
поле на формечаще всего — реквизит объекта, который оно показывает

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

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

Откроем «Канцтовары» в Конфигураторе и посмотрим на чертёж целиком. Ничего не меняем.

  1. Раскройте дерево и найдите ветки «Справочники», «Документы», «Отчёты», «Регистры сведений», «Регистры накопления». Сравните с тем, что видели в Предприятии: списки, карточки, отчёт — всё это собрано отсюда.

  2. Раскройте документ «ПоступлениеТоваров»: найдите реквизиты «Контрагент» и «Склад» и табличную часть «Товары» с её реквизитами.

  3. Найдите у документа ветку «Формы». Она пуста — а карточка поступления в Предприятии открывается.

  4. Откройте модуль объекта документа. Он не пуст: там лежит процедура проведения, которую написал за разработчика конструктор движений в «Дереве метаданных». Читать её мы не будем — важно увидеть, где живёт код. Закройте окна, ничего не сохраняя.

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

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


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

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

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

Упражнения

Прочитайте чертёж. По ветке документа «ПоступлениеТоваров» в Конфигураторе предскажите, что будет на его карточке в Предприятии: какие поля, какая таблица, какие кнопки. Потом откройте карточку и сверьте.

Обратный путь. Откройте в Предприятии список складов и по нему найдите в дереве объект, из которого он вырос. Что вы искали в заголовке окна?

Ловушка: реквизит и поле. Коллега говорит: «Реквизит — это поле на форме, просто называется по-другому». В чём он не прав? Приведите случай, когда реквизит есть, а поля нет.

Где искать код. Для каждого вопроса скажите, куда смотреть — в свойства или в модуль: почему у поля «Контрагент» есть кнопка выбора; почему при проведении поступления меняется остаток на складе; почему в списке товаров видно артикул; почему после ввода количества сумма не пересчиталась.

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