Примечание
Пример можно посмотреть в демонстрационной базе «Дополнительные колонки в списках», форма документа Накладная.
Добавление дополнительных колонок в табличную часть также рассмотрим на двух примерах. «Экспериментировать» будем со стандартной формой документа Накладная. Его табличная часть содержит колонки Номер строки, Товар, Количество, Цена и Сумма (рис. 3.131).

Рис. 3.131. Поля табличной части
Как мы помним из предыдущего примера, у товара есть реквизит Артикул, который нам тоже хотелось бы видеть в табличной части этого документа.
Чтобы добавить Артикул, развернем реквизит формы Объект, развернем его табличную часть Товары, развернем реквизит Товар и увидим интересующее нас поле Артикул. Перетащим его в таблицу формы Товары (рис. 3.132).

Рис. 3.132. Добавление нового поля в таблицу
Теперь останется только запустить конфигурацию в режиме 1С:Предприятие и убедиться, что в табличной части накладной отображается колонка с артикулом товара (рис. 3.133).

Рис. 3.133. Новая колонка в табличной части
Все просто, потому что добавляемые данные являются реквизитом товара, который сам по себе уже отображается в табличной части документа.
Но как быть в том случае, когда добавляемые данные не являются реквизитом, а должны быть получены в результате некоторых вычислений?
В этом случае все будет несколько сложнее. В реквизит формы, описывающий табличную часть документа, нужно будет добавить собственное поле и заполнить его данными в определенных обработчиках формы документа.
Чтобы не усложнять пример алгоритмами, не относящимися к сути, мы добавим в документ еще один реквизит товара – Сорт. Это позволит нам в обработчиках событий при заполнении собственной колонки данными просто писать Товар.Сорт. В реальной же ситуации тут будет некоторый алгоритм, который по имеющейся ссылке на товар будет получать данные, необходимые для отображения.
Итак, сначала в реквизит формы, в табличную часть Товары, добавим собственное поле СортТовара, имеющее тип ссылки на значение перечисления Сорт. И затем перетащим это поле в таблицу формы Товары (рис. 3.134).

Рис. 3.134. Добавление реквизита формы и поля таблицы
Теперь начнем создавать обработчики событий, в которых колонка СортТовара будет заполняться данными.
Для того чтобы дополнительная колонка была заполнена данными при чтении существующей накладной из базы данных, создадим обработчик события формы При чтении на сервере (листинг 3.110).
Листинг 3.110. Обработчик события «При чтении на сервере»
// Заполнение дополнительной колонки при чтении существующего объекта
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// Алгоритм, по которому дополнительная колонка заполняется данными
Для Каждого СтрокаДанных Из Объект.Товары Цикл
СтрокаДанных.СортТовара = СтрокаДанных.Товар.Сорт;
КонецЦикла
КонецПроцедуры
Для того чтобы поле дополнительной колонки было заполнено данными при изменении строки табличной части или при добавлении новой строки, создадим обработчик события ПриИзменении поля таблицы ТоварыТовар. Поскольку это клиентский обработчик формы, для получения данных из базы данных будем вызывать серверную процедуру (листинг 3.111).
Листинг 3.111. Обработчик события «При изменении»
// Заполнение поля дополнительной колонки при изменении товара в табличной части
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
// Алгоритм, по которому поле дополнительной колонки заполняется данными
ДанныеСтроки = Элементы.Товары.ТекущиеДанные;
ДанныеСтроки.СортТовара = ПолучитьСортТовара(ДанныеСтроки.Товар);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСортТовара(Товар)
Возврат Товар.Сорт;
КонецФункции
Для того чтобы дополнительная колонка была заполнена данными при копировании или при вводе накладной на основании другого объекта, создадим обработчик события формы При создании на сервере (листинг 3.112).
Листинг 3.112. Обработчик события «При создании на сервере»
// Заполнение дополнительной колонки при копировании или вводе на основании
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Алгоритм, по которому дополнительная колонка заполняется данными
Для Каждого СтрокаДанных Из Объект.Товары Цикл
Если НЕ ЗначениеЗаполнено(СтрокаДанных.СортТовара) Тогда
СтрокаДанных.СортТовара = СтрокаДанных.Товар.Сорт;
КонецЕсли;
КонецЦикла
КонецПроцедуры
И, наконец, предусмотрим ситуацию, когда данные накладной могут быть изменены в процессе ее записи. На этот случай создадим обработчик события формы После записи на сервере (листинг 3.113).
Листинг 3.113. Обработчик события «После записи на сервере»
// Заполнение дополнительной колонки, если данные были изменены при записи.
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
// Алгоритм, по которому дополнительная колонка заполняется данными.
Для Каждого СтрокаДанных Из Объект.Товары Цикл
Если НЕ ЗначениеЗаполнено(СтрокаДанных.СортТовара) Тогда
СтрокаДанных.СортТовара = СтрокаДанных.Товар.Сорт;
КонецЕсли;
КонецЦикла
КонецПроцедуры
Теперь осталось запустить конфигурацию в режиме 1С:Предприятие и убедиться, что при любых манипуляциях с накладной данные колонки Сорт заполняются правильно (рис. 3.135).

Рис. 3.135. Новая колонка в табличной части