← Назад к вопросам
Используется ли ТаблицаЗначений на управляемой форме? Что используется вместо неё?
1.0 Junior🔥 271 комментариев
#Формы и интерфейс
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
ТаблицаЗначений на управляемой форме
Короткий ответ
НЕ используется. ТаблицаЗначений (TableValues) — это объект серверной части, недоступный непосредственно на управляемой форме. Вместо неё используются табличные части документов и таблицы значений на сервере.
Почему ТаблицаЗначений не работает на форме
// ❌ НЕПРАВИЛЬНО — на управляемой форме
&НаКлиенте
Процедура ОбработатьДанные()
МояТаблица = Новый ТаблицаЗначений(); // ОШИБКА!
// → Runtime error: ТаблицаЗначений недоступна на клиенте
КонецПроцедуры
Причины:
- ТаблицаЗначений — объект 1С для работы с табличными данными на сервере
- Управляемая форма — работает на JavaScript в браузере
- JavaScript не знает о ТаблицаЗначений — нет интеграции
- Архитектура: сервер (1C) ≠ клиент (браузер)
Правильные альтернативы
1. Табличные части документов (самое частое)
// Это встроенное в 1С решение для хранения наборов данных
// Пример: в документе "Счёт" есть табличная часть "Товары"
// На управляемой форме вы напрямую работаете с табличной частью:
// Форма → Реквизит → ТаблицаДокумента
// В модуле формы (клиент):
&НаКлиенте
Процедура СписокТоваровПриАктивизацииСтроки()
// Проверяем текущую строку табличной части
ТекущаяСтрока = Элементы.СписокТовары.ТекущаяСтрока;
КонецПроцедуры
// На сервере:
&НаСервере
Процедура ПолучитьТовары()
// Доступ к табличной части: Объект.ТаблицаТовары
Для Каждого Строка Из Объект.ТаблицаТовары Цикл
// Обработка строки
КонецЦикла;
КонецПроцедуры
2. Структуры с массивами (для временных данных)
// На клиенте работайте через JSON-like структуры
&НаКлиенте
Процедура ПолучитьДанныеИзСервера()
// Вызываем серверную функцию
ДанныеТаблицы = ПолучитьДанныеТабличнойЧасти();
// Результат приходит как структура с массивами:
// {
// "Товары": [
// {"Наименование": "Товар 1", "Цена": 100},
// {"Наименование": "Товар 2", "Цена": 200}
// ]
// }
// Преобразуем в таблицу для формы
СписокТовары = Новый СписокЗначений(); // или СписокЗначений
Для Каждого Товар Из ДанныеТаблицы.Товары Цикл
Строка = СписокТовары.Добавить();
// Заполняем значения
КонецЦикла;
КонецПроцедуры
3. СписокЗначений (для простых списков)
// На управляемой форме МОЖНО использовать СписокЗначений
&НаКлиенте
Процедура СоздатьСписок()
МойСписок = Новый СписокЗначений();
МойСписок.Добавить("Значение1", "Представление1");
МойСписок.Добавить("Значение2", "Представление2");
// Присваиваем раскрывающемуся списку
Элементы.МойОтбор.СписокВыбора = МойСписок;
КонецПроцедуры
4. ДеревоЗначений (для иерархических данных)
// Если нужно отобразить иерархию
&НаКлиенте
Процедура СоздатьИерархию()
МоеДерево = Новое ДеревоЗначений();
МоеДерево.Колонки.Добавить("Наименование");
МоеДерево.Колонки.Добавить("Значение");
РодитеБль = МоеДерево.Строки.Добавить();
РодитеБль.Наименование = "Группа 1";
Потомок = РодитеБль.Строки.Добавить();
Потомок.Наименование = "Подпункт 1.1";
КонецПроцедуры
5. Таблицы значений на СЕРВЕРЕ, отправляемые на клиент
// Правильный паттерн: создаём на сервере, передаём на клиент
// На сервере:
&НаСервере
Функция ПолучитьДанныеТабличнойЧасти()
// Создаём на сервере
МояТаблица = Новая ТаблицаЗначений();
МояТаблица.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
МояТаблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
МояТаблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
// Заполняем данные
Для Каждого ПредметКаталога Из Справочник.Номенклатура.ВыбратьИтерератор() Цикл
Строка = МояТаблица.Добавить();
Строка.Наименование = ПредметКаталога.Наименование;
Строка.Цена = ПредметКаталога.Цена;
Строка.Количество = 0;
КонецЦикла;
// Возвращаем как выгрузку (превращаем в сложную структуру)
Возврат МояТаблица.Выгрузить();
КонецФункции
// На клиенте (управляемой форме):
&НаКлиенте
Процедура ПриОткрытии()
// Получаем данные с сервера
ДанныеТаблицы = ПолучитьДанныеТабличнойЧасти();
// Присваиваем источнику данных реквизита формы
ЗначениеВРеквизит(ДанныеТаблицы, "Объект.ТаблицаДанных");
КонецПроцедуры
Архитектура данных в управляемой форме
СеРВЕР КЛИЕНТ (браузер)
┌─────────────────────┐ ┌──────────────────┐
│ ТаблицаЗначений │──────→│ СписокЗначений │
│ (обработка) │ JSON │ ДеревоЗначений │
│ │────→│ (отображение) │
└─────────────────────┘ └──────────────────┘
Табличная часть ↔ Синхронизация ↔ Таблица на форме
документа (ТаблицаПредставление)
Практический пример: форма с таблицей
// ПРАВИЛЬНО: используем табличную часть документа
// В конфигурации: Документ.Накладная имеет табличную часть "Товары"
// На управляемой форме (модуль формы):
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Загружаем данные
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьТовар()
// Добавляем новую строку в табличную часть
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Наименование = "Новый товар";
НоваяСтрока.Количество = 1;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьТовар()
// Удаляем текущую строку
Индекс = Элементы.ТоварыТаблица.ТекущаяСтрока;
Объект.Товары.Удалить(Индекс);
КонецПроцедуры
Сравнительная таблица
| Объект | На клиенте | На сервере | Для таблиц |
|---|---|---|---|
| ТаблицаЗначений | ❌ Нет | ✅ Да | Обработка данных |
| СписокЗначений | ✅ Да | ✅ Да | Простые списки |
| ДеревоЗначений | ✅ Да | ✅ Да | Иерархия |
| Табличная часть | ✅ Да (через форму) | ✅ Да | Документы, справочники |
| СписокЗначений | ✅ Да | ✅ Да | Выпадающие списки |
Главное правило
❌ НЕ делайте:
ТаблицаЗначений на управляемой форме
✅ ДЕЛАЙТЕ:
- Табличные части документов/справочников
- СписокЗначений / ДеревоЗначений для UI
- ТаблицаЗначений на сервере, передача через JSON
- Синхронизация между сервером и формой
Итог
Если вам нужна таблица данных на управляемой форме:
- Если это часть документа → используйте табличную часть
- Если это временные данные → СписокЗначений или ДеревоЗначений
- Если сложная логика → вычисляйте на сервере (ТаблицаЗначений), передавайте результат на клиент
ТаблицаЗначений — мощный инструмент, но только на сервере!