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