← Назад к вопросам

Используется ли ТаблицаЗначений на управляемой форме? Что используется вместо неё?

1.0 Junior🔥 271 комментариев
#Формы и интерфейс

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

ТаблицаЗначений на управляемой форме

Короткий ответ

НЕ используется. ТаблицаЗначений (TableValues) — это объект серверной части, недоступный непосредственно на управляемой форме. Вместо неё используются табличные части документов и таблицы значений на сервере.

Почему ТаблицаЗначений не работает на форме

// ❌ НЕПРАВИЛЬНО — на управляемой форме
&НаКлиенте
Процедура ОбработатьДанные()
    
    МояТаблица = Новый ТаблицаЗначений(); // ОШИБКА!
    // → Runtime error: ТаблицаЗначений недоступна на клиенте
    
КонецПроцедуры

Причины:

  1. ТаблицаЗначений — объект 1С для работы с табличными данными на сервере
  2. Управляемая форма — работает на JavaScript в браузере
  3. JavaScript не знает о ТаблицаЗначений — нет интеграции
  4. Архитектура: сервер (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
- Синхронизация между сервером и формой

Итог

Если вам нужна таблица данных на управляемой форме:

  1. Если это часть документа → используйте табличную часть
  2. Если это временные данные → СписокЗначений или ДеревоЗначений
  3. Если сложная логика → вычисляйте на сервере (ТаблицаЗначений), передавайте результат на клиент

ТаблицаЗначений — мощный инструмент, но только на сервере!