§ 6.2. Таблица из табличной части: товары в поступлении

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

1. Табличная часть живёт внутри записи

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

Объект   (ДокументОбъект.ПоступлениеТоваров)
├── Номер, Дата, Контрагент, Склад
└── Товары          ← табличная часть
    ├── Товар
    ├── Количество
    ├── Цена
    └── Сумма

Это та же картина, что мы видели, разворачивая «Объект» в главе о данных. Таблица на форме показывает то, что лежит внутри «Объекта», и путь у неё — «Объект.Товары».

Строки табличной части — такие же данные записи, как номер и дата. Таблица на форме — способ их показать.

2. Как таблица попадает в форму

Путь тот же, что у поля: перетащить из реквизитов в элементы. Разница в том, что тащат не одно значение, а табличную часть целиком.

что перетащиличто появилось в элементах
Объект.Артикулполе
Объект.Товарытаблица с колонками

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

У каждой строки табличной части есть ещё и стандартный реквизит — «НомерСтроки». Его платформа ведёт сама, и в таблице он обычно виден первой колонкой.

Таблица на месте. Теперь посмотрим, что происходит со строками, пока форма открыта.

3. Жизнь строк в открытой форме

Строки проходят тот же путь, что и все данные формы, и граница между записью и формой проходит там же.

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

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

4. Сумма документа и сумма строки

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

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

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

5. Строки и проведение

Строки табличной части — исходные данные для проведения: код проведения в модуле объекта обходит строки и по каждой делает движение — остаток товара на складе растёт на её количество.

строка поступления    →  движение регистра
Товар: ручка             Товар: ручка
Количество: 400          Склад: Основной
                         Количество: +400

Отсюда практическое следствие для чтения: таблица товаров в документе — не «просто список», а исходные данные для учёта. Строка, добавленная в форме, до записи и проведения ни на какие остатки не влияет.

6. Как узнать табличную часть в чужой форме

Главные признаки читаются по путям.

признакчто значит
путь таблицы начинается с «Объект.»строки — часть записи
пути колонок — «Объект.Товары.Количество»колонки — реквизиты строки
реквизит строки есть, а колонки нетего не показывают, но он хранится
путь таблицы без «Объект.»это не табличная часть, а данные формы

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

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

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

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

  2. Разверните в реквизитах «Объект» и перетащите табличную часть «Товары» на страницу «Товары». Посмотрите, какие колонки появились.

Здесь будет снимок экранастраница «Товары» в структуре элементов с новой таблицей и её колонками
  1. Обновите конфигурацию базы данных и откройте поступление № 12. Добавьте строку и закройте без записи: строк по-прежнему три.

  2. Откройте снова, поменяйте количество в первой строке и посмотрите на сумму строки: она прежняя. Закройте без записи.

  3. Проверьте, что таблица снова на месте, и оставьте форму.

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

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


Колонки редактор создал сам, по реквизитам строки. Но каждая колонка — поле со своим путём, видом и свойствами. Что в этом пути означает каждая часть и что можно сделать с колонкой, не трогая данных?

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

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

Упражнения

По образцу. Проделайте опыт с добавлением строки на документе «РеализацияТоваров»: добавьте строку, закройте без записи, откройте снова.

Своё: предскажите итог. В поступлении меняют количество в двух строках и записывают документ. Что будет с суммами строк и с суммой документа?

Ловушка: «строку добавил — значит, товар уже на складе». Кладовщик добавил строку в поступление, не записав документ, и удивляется, почему в отчёте об остатках её нет. Что вы объясните?

Обратный ход. В табличной части документа есть реквизит «Скидка», а колонки с таким заголовком в таблице нет. Где он и хранится ли его значение?

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

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