§ 4.2. Почему элементы не равны данным

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

1. Два удаления

Проще всего увидеть разницу, сравнив два действия, которые на экране дают похожий результат.

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

Речь именно о реквизите формы. Реквизит объекта убирают в дереве, и это разговор о хранении, а не о показе: значение исчезает у всех записей сразу.

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

Элемент можно убрать без потерь для данных. Данные без элемента живут, элемент без данных — нет.

2. Главный обман: «нарисовал поле — завёл данные»

Ошибка новичка звучит так: раз поле на форме появилось, значит, и место для значения появилось. Растёт она из жеста, который мы делали не раз.

перетащили реквизит в элементы
├── создан элемент     ← как видно
└── задана связь       ← с чем связан

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

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

Последняя строка — самая коварная: пустое поле выглядит одинаково в двух самых частых случаях, а бывают и другие.

3. Четыре сочетания

Раз это две вещи, они сочетаются четырьмя способами — и все четыре встречаются в живых формах.

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

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

Есть ли что показывать — решает реквизит формы. Показано ли оно и как — решает элемент со своими свойствами.

4. Один реквизит — сколько угодно элементов

Раз элемент только показывает, ничто не мешает показать одно значение несколько раз и по-разному.

Объект.Артикул
├── поле в карточке
├── колонка в списке
└── поле в форме выбора

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

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

5. Связь называется путём к данным

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

Пусто это свойство — элемент ни с чем не связан. Заполнено — связан ровно с тем, что там написано. Читать и задавать его будем в следующем параграфе; здесь важно другое: связь — не подразумевается, а записана, и её видно. А раз видно, ею можно пользоваться при разборе поломок.

6. Зачем это при чтении чужой формы

Разделение данных и элементов превращает три частых жалобы в три разных поиска.

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

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

7. В Конфигураторе и в Предприятии

Опыт с удалением, после которого ничего не придётся восстанавливать из копии.

  1. Откройте форму элемента «Товаров» и удалите из структуры элементов поле «Артикул». Реквизиты не трогайте.

  2. Обновите конфигурацию базы данных и откройте карточку товара в Предприятии: поля нет.

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

  2. Вернитесь в форму и перетащите «Артикул» из реквизитов обратно в элементы. Обновите конфигурацию: поле вернулось, значение прежнее.

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

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

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


Связь записана, и записана именем. Но какое имя туда попадает, что оно означает по частям — и что будет, если написать не то?

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

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

Упражнения

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

Своё: разложите по клеткам. Отнесите к одной из четырёх клеток: кнопка «Записать», поле артикула, реквизит формы «ОстаткиПоСкладам» без выведенной таблицы, надпись «Все цены без НДС».

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

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

На чтение. В форме поступления два элемента связаны с «Объект.Контрагент»: поле в шапке и ещё одно поле рядом с итогом — показывает, но ввода не принимает. Что это значит и ошибка ли это?

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