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