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

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

Разработчику
Загрузка эмулятора 1С…

Два вида «таблиц» в 1С

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

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

Базовые операции с Массив и коллекциями — в 114.md.


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

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

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

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

Операции

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

Обход

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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


Практика 15 минут

  1. Создайте на сервере ТаблицаЗначений с тремя колонками и пятью строками.
  2. Посчитайте итог по числовой колонке через Итог().
  3. Выведите таблицу на форме обработки элементом «Таблица».

Лаборатория — ТЧ и таблица на форме (55 минут)

Блок 1 — табличная часть

В документе ПоступлениеТоваров добавьте команду «Заполнить тестовыми» в модуле формы:

&НаСервере
Процедура ЗаполнитьТестовымиНаСервере()
Объект.Товары.Очистить();
Для Индекс = 1 По 3 Цикл
Строка = Объект.Товары.Добавить();
Строка.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Тестовый товар " + Индекс, Истина);
Строка.Количество = Индекс;
КонецЦикла;
КонецПроцедуры

На клиенте — вызов этой процедуры и ОповеститьОбИзменении для таблицы ТЧ.

Блок 2 — таблица значений на форме

  1. Реквизит формы ОтчетОстатковТаблицаЗначений.
  2. ПриСозданииНаСервере — запрос остатков → Выгрузить() в реквизит.
  3. Элемент «Таблица» — колонки Товар, Остаток.
  4. Кнопка «Обновить» — повторный серверный запрос.

Блок 3 — свертка

Добавьте в ТЗ колонку Сумма = Количество * Цена, затем Свернуть("Номенклатура", "Количество, Сумма") в отдельной обработке — тренировка агрегации без запроса.


Проверка себя

  • Чем табличная часть отличается от таблицы значений при записи в базу?
  • Почему сортировку большой ТЗ лучше делать до вывода на форму?
  • Когда уместно Выгрузить() табличную часть в ТЗ?

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").