1С 8.3 Динамический вывод Таблицы значений на форму
Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Перейти в основной раздел:
Выводим на форму Таблицу значений и очищаем предыдущую (структуру и данные) в 1С 8.3:
Процедура Вывести_ТЗ_в_Таблицу_на_форме(ТЗ, ТабРеквизитФормы, ТабЭлементФормы = Неопределено) Экспорт
// Процедура позволяет выводить любое количество таблиц значений в таблицу формы
// (с различным количеством и названиями полей). При изменении выводимых данных –
// таблица на форме программно очищается и заменяется на новую с новым составом
// полей и данных соответствующей таблицы значений.
Если ТабЭлементФормы = Неопределено Тогда // проверка передан ли элемент формы
ТабЭлементФормы = ТабРеквизитФормы;
КонецЕсли;
Реквизиты_для_удаления = Новый Массив;
Элементы_для_удаления = Новый Массив;
Реквизиты_для_вывода = Новый Массив;
// Получаем данные (на которые элементы формы ссылаются)
// по добавленным ранее реквизитам и элементам формы
Для Каждого Элемент Из Элементы[ТабЭлементФормы].ПодчиненныеЭлементы Цикл
Реквизиты_для_удаления.Добавить(Элемент.ПутьКДанным);
Элементы_для_удаления.Добавить(Элемент);
КонецЦикла;
// Удаляем элементы
Для Каждого УдалитьЭлемент Из Элементы_для_удаления Цикл
Элементы.Удалить(УдалитьЭлемент);
КонецЦикла;
// Добавляем колонки из Таблицы значений в реквизит ТабРеквизитФормы
Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл
Реквизиты_для_вывода = Новый РеквизитФормы(КолонкаТЗ.Имя, КолонкаТЗ.ТипЗначения, ТабРеквизитФормы, КолонкаТЗ.Заголовок);
Реквизиты_для_вывода.Добавить(Реквизиты_для_вывода);
КонецЦикла;
// Удаляем старые реквизиты и выводим новые реквизиты
ИзменитьРеквизиты(Реквизиты_для_вывода, Реквизиты_для_удаления);
// Добавляем колонки из Таблицы значений
// в элементы ТабЭлементФормы (со ссылкой на колонки в ТабРеквизитФормы)
Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл
ЭлементТЗ = Элементы.Добавить(ТабРеквизитФормы + "_" + КолонкаТЗ.Имя, Тип("ПолеФормы"), Элементы[ТабЭлементФормы]);
ЭлементТЗ.Вид = ВидПоляФормы.ПолеНадписи; //Или ПолеВвода, или что-то другое;
ЭлементТЗ.ПутьКДанным = ТабРеквизитФормы + "." + КолонкаТЗ.Имя;
КонецЦикла;
// В реквизит загружаем Таблицу значений
ЭтаФорма[ТабРеквизитФормы].Загрузить(ТЗ);
КонецПроцедуры
// Процедура позволяет выводить любое количество таблиц значений в таблицу формы
// (с различным количеством и названиями полей). При изменении выводимых данных –
// таблица на форме программно очищается и заменяется на новую с новым составом
// полей и данных соответствующей таблицы значений.
Если ТабЭлементФормы = Неопределено Тогда // проверка передан ли элемент формы
ТабЭлементФормы = ТабРеквизитФормы;
КонецЕсли;
Реквизиты_для_удаления = Новый Массив;
Элементы_для_удаления = Новый Массив;
Реквизиты_для_вывода = Новый Массив;
// Получаем данные (на которые элементы формы ссылаются)
// по добавленным ранее реквизитам и элементам формы
Для Каждого Элемент Из Элементы[ТабЭлементФормы].ПодчиненныеЭлементы Цикл
Реквизиты_для_удаления.Добавить(Элемент.ПутьКДанным);
Элементы_для_удаления.Добавить(Элемент);
КонецЦикла;
// Удаляем элементы
Для Каждого УдалитьЭлемент Из Элементы_для_удаления Цикл
Элементы.Удалить(УдалитьЭлемент);
КонецЦикла;
// Добавляем колонки из Таблицы значений в реквизит ТабРеквизитФормы
Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл
Реквизиты_для_вывода = Новый РеквизитФормы(КолонкаТЗ.Имя, КолонкаТЗ.ТипЗначения, ТабРеквизитФормы, КолонкаТЗ.Заголовок);
Реквизиты_для_вывода.Добавить(Реквизиты_для_вывода);
КонецЦикла;
// Удаляем старые реквизиты и выводим новые реквизиты
ИзменитьРеквизиты(Реквизиты_для_вывода, Реквизиты_для_удаления);
// Добавляем колонки из Таблицы значений
// в элементы ТабЭлементФормы (со ссылкой на колонки в ТабРеквизитФормы)
Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл
ЭлементТЗ = Элементы.Добавить(ТабРеквизитФормы + "_" + КолонкаТЗ.Имя, Тип("ПолеФормы"), Элементы[ТабЭлементФормы]);
ЭлементТЗ.Вид = ВидПоляФормы.ПолеНадписи; //Или ПолеВвода, или что-то другое;
ЭлементТЗ.ПутьКДанным = ТабРеквизитФормы + "." + КолонкаТЗ.Имя;
КонецЦикла;
// В реквизит загружаем Таблицу значений
ЭтаФорма[ТабРеквизитФормы].Загрузить(ТЗ);
КонецПроцедуры
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник