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