Таблицы значений и табличные части 1С
Play ITЗагрузка интерактивного демо…
Два вида "таблиц" в 1С
| Понятие | Где живёт | В базе |
|---|---|---|
| Таблица значений | Память сеанса (клиент толстый / сервер) | Нет |
| Табличная часть | Объект документа или справочника | Да, вместе с объектом |
Таблица значений — универсальная коллекция строк и колонок для алгоритмов, промежуточных расчётов и вывода на форму. Табличная часть — часть метаданных (например, Товары в документе "Реализация").
Базовые операции с Массив и коллекциями — в Переменные и типы данных 1С.
Таблица значений
Создание и колонки
&НаСервере
Функция НоваяТаблицаТоваров()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
Возврат ТЗ;
КонецФункции
Каждая колонка имеет имя и тип. Строки добавляют методом Добавить() или Вставить(Индекс).
Операции
| Действие | Метод |
|---|---|
| Добавить строку | Добавить() |
| Прочитать ячейку | Строка.ИмяКолонки |
| Удалить строку | Удалить(Индекс) |
| Найти строки | Найти(Значение, "Колонка") |
| Сортировка | Сортировать("Колонка Убыв") |
| Итог по колонке | Итог("Сумма") |
| Свернуть / развернуть | Свернуть, Развернуть |
| Копия с отбором | Скопировать(СтруктураОтбора) |
Обход
Для Каждого Строка Из ТЗ Цикл
Строка.Сумма = Строка.Количество * Строка.Цена;
КонецЦикла;
Тонкий и веб-клиент
Под тонким и веб-клиентом создавать и изменять ТаблицаЗначений на клиенте нельзя. Работайте в процедурах &НаСервере или передавайте на форму уже готовые данные через серверный вызов.
Паттерн для формы:
- На сервере заполнить
ТаблицаЗначений. - Присвоить реквизиту формы.
- Элемент "Таблица" привязать к этому реквизиту.
Табличная часть объекта
Табличная часть — строки, которые сохраняются с документом или элементом справочника.
&НаСервере
Процедура ДобавитьСтрокуВДокумент(ДокументОбъект, Номенклатура, Количество)
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = Количество;
КонецПроцедуры
На управляемой форме табличная часть отображается элементом "Таблица" с путём Объект.Товары. Редактирование строк синхронизируется с объектом при записи.
Выгрузка и загрузка
ТЗ = ДокументОбъект.Товары.Выгрузить();
// обработка ТЗ
ДокументОбъект.Товары.Загрузить(ТЗ);
Выгрузить() создаёт ТаблицаЗначений с теми же колонками — удобно для массовых правок и обмена с внешними данными.
Таблица на форме
- Реквизит формы типа
ТаблицаЗначенийили привязка кОбъект.ТабличнаяЧасть. - Элемент Таблица в компоновке формы.
- Колонки элемента соответствуют колонкам данных (не обязательно все).
Программное изменение на сервере при открытии:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СписокДляФормы = ПостроитьСписокНаСервере();
ЗначениеВРеквизитФормы(СписокДляФормы, "СписокДляФормы");
КонецПроцедуры
ЗначениеВРеквизитФормы / РеквизитФормыВЗначение — стандартный мост между серверными данными и реквизитами формы.
Типичные ошибки
| Ошибка | Решение |
|---|---|
| Пустая таблица на форме | Заполнить реквизит в ПриСозданииНаСервере |
| Колонка не отображается | Добавить колонку в элемент "Таблица" |
"Тип не определён" при Выгрузить | Задать типы колонок в метаданных ТЧ |
| ТЗ на клиенте в тонком клиенте | Перенести логику на сервер |
Связанные материалы
- Управляемые формы
- Переменные и коллекции
- Выборки и запросы — когда ТЗ заполняют из запроса