§ 3.7. Чужая форма: основной реквизит и всё остальное

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

1. Сначала основной

Первый вопрос к списку реквизитов — какой из них основной. Найти его просто: он выделен полужирным, а что он значит, говорит его тип.

тип основного реквизитаформа о чём
объект справочника или документаоб одной записи
динамический списоко множестве записей
основного нетне о записи: помощник, настройки, служебный диалог

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

Предмет разговора — первое, что стоит записать при разборе. Дальше каждый следующий реквизит читается уже относительно него — «вокруг чего это».

2. Потом всё остальное — по трём вопросам

К каждому дополнительному реквизиту задают три вопроса. Ответы на первые два приходится искать, третий известен заранее.

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

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

Отсюда рабочий приём. Если значение должно пережить закрытие окна, где-то рядом обязана быть запись — и стоит найти, куда это значение переносят.

Реквизит формы, значение которого должно пережить окно, — повод искать место, где его записывают. Нет такого места — перед вами ошибка проектирования.

3. Что говорит тип

Тип дополнительного реквизита почти всегда подсказывает назначение.

что видимчто это, скорее всего
Булевопереключатель режима: показывать, разворачивать, печатать
Строкастрока поиска, отбора или комментарий на время
Число, Датапараметр расчёта или итог, посчитанный формой
ссылка на справочниквыбор, по которому форма что-то отбирает или считает
таблица значенийрезультат, собранный из базы: остатки, история, подбор

Строка про таблицу значений — самая говорящая: из базы такая таблица сама ничего не читает, строки в неё кладёт обработчик — или пользователь, если у таблицы на форме разрешено добавление строк.

Читать эту таблицу нужно как гипотезу, а не как ответ. Тип подсказывает назначение, а проверяют его по имени реквизита и по тому, где он используется: булево может оказаться не переключателем режима, а значением, которое потом запишут. И не всякий реквизит вообще выводится на экран — об этом прямо сейчас.

4. Реквизит есть, а элемента нет

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

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

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

5. Три ловушки списка реквизитов

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

Вторая: принять развёрнутый «Объект» за список реквизитов формы. Строки внутри основного реквизита — это реквизиты объекта, они хранятся в базе и видны запросу.

Третья: считать, что дополнительный реквизит где-то хранится. Само значение живёт, пока открыто окно, и никакой отчёт его не увидит. А вот запись, на которую он, может быть, указывает, никуда не денется: склад из базы не исчезнет оттого, что закрыли карточку товара.

6. Разбор по шагам

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

  1. Найдите основной реквизит и запишите его тип. Назовите предмет разговора одной фразой.

  2. Разверните основной реквизит и сверьте состав с деревом объекта: всё ли на месте, нет ли неожиданного.

  3. Выпишите дополнительные реквизиты с типами.

  4. Для каждого ответьте на два вопроса: откуда берётся значение и кто его меняет. Что будет при закрытии, вы уже знаете.

  5. Отметьте те, у которых нет элемента на форме, и найдите, где они используются.

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

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

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

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


Реквизиты мы читать научились, но между ними и полями на экране осталась недосказанность. Поле показывает значение реквизита — а кто и где решил, какое поле какой реквизит показывает?

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

  1. С какого реквизита начинают разбор формы и почему?
  2. Что говорит о форме тип основного реквизита?
  3. Какие три вопроса задают к дополнительному реквизиту?
  4. Почему ответ на третий вопрос известен заранее?
  5. О чём говорит реквизит формы с типом «таблица значений»?
  6. Что может означать реквизит, для которого на форме нет элемента?
  7. Назовите три ловушки при чтении списка реквизитов.

Упражнения

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

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

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

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

На чтение. Основной реквизит формы — динамический список, а рядом с ним реквизит «ТекущийТовар» типа ссылки на «Товары». О чём эта форма и зачем ей, скорее всего, второй реквизит?

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