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