Перейти к основному содержимому

Таблицы значений и табличные части 1С

Разработчику

Play ITЗагрузка интерактивного демо…


Два вида "таблиц" в 1С

ПонятиеГде живётВ базе
Таблица значенийПамять сеанса (клиент толстый / сервер)Нет
Табличная частьОбъект документа или справочникаДа, вместе с объектом

Таблица значений — универсальная коллекция строк и колонок для алгоритмов, промежуточных расчётов и вывода на форму. Табличная часть — часть метаданных (например, Товары в документе "Реализация").

Базовые операции с Массив и коллекциями — в Переменные и типы данных 1С.


Таблица значений

Создание и колонки

&НаСервере
Функция НоваяТаблицаТоваров()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
Возврат ТЗ;
КонецФункции

Каждая колонка имеет имя и тип. Строки добавляют методом Добавить() или Вставить(Индекс).

Операции

ДействиеМетод
Добавить строкуДобавить()
Прочитать ячейкуСтрока.ИмяКолонки
Удалить строкуУдалить(Индекс)
Найти строкиНайти(Значение, "Колонка")
СортировкаСортировать("Колонка Убыв")
Итог по колонкеИтог("Сумма")
Свернуть / развернутьСвернуть, Развернуть
Копия с отборомСкопировать(СтруктураОтбора)

Обход

Для Каждого Строка Из ТЗ Цикл
Строка.Сумма = Строка.Количество * Строка.Цена;
КонецЦикла;

Тонкий и веб-клиент

Только сервер

Под тонким и веб-клиентом создавать и изменять ТаблицаЗначений на клиенте нельзя. Работайте в процедурах &НаСервере или передавайте на форму уже готовые данные через серверный вызов.

Паттерн для формы:

  1. На сервере заполнить ТаблицаЗначений.
  2. Присвоить реквизиту формы.
  3. Элемент "Таблица" привязать к этому реквизиту.

Табличная часть объекта

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

&НаСервере
Процедура ДобавитьСтрокуВДокумент(ДокументОбъект, Номенклатура, Количество)
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = Количество;
КонецПроцедуры

На управляемой форме табличная часть отображается элементом "Таблица" с путём Объект.Товары. Редактирование строк синхронизируется с объектом при записи.

Выгрузка и загрузка

ТЗ = ДокументОбъект.Товары.Выгрузить();
// обработка ТЗ
ДокументОбъект.Товары.Загрузить(ТЗ);

Выгрузить() создаёт ТаблицаЗначений с теми же колонками — удобно для массовых правок и обмена с внешними данными.


Таблица на форме

  1. Реквизит формы типа ТаблицаЗначений или привязка к Объект.ТабличнаяЧасть.
  2. Элемент Таблица в компоновке формы.
  3. Колонки элемента соответствуют колонкам данных (не обязательно все).

Программное изменение на сервере при открытии:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СписокДляФормы = ПостроитьСписокНаСервере();
ЗначениеВРеквизитФормы(СписокДляФормы, "СписокДляФормы");
КонецПроцедуры

ЗначениеВРеквизитФормы / РеквизитФормыВЗначение — стандартный мост между серверными данными и реквизитами формы.


Типичные ошибки

ОшибкаРешение
Пустая таблица на формеЗаполнить реквизит в ПриСозданииНаСервере
Колонка не отображаетсяДобавить колонку в элемент "Таблица"
"Тип не определён" при ВыгрузитьЗадать типы колонок в метаданных ТЧ
ТЗ на клиенте в тонком клиентеПеренести логику на сервер

Связанные материалы