1С 8.3 Выводим на форму Таблицу значений - Программист 1С Минск. Автоматизация бизнеса.

Популярные страницы:
Перейти к контенту

1С 8.3 Выводим на форму Таблицу значений

Данные > Примеры кода 1С > 1С 8.3 Таблица значений
При открытии формы (создании на сервере) выводим Таблицу значений (&НаСервере) в 1С 8.3:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

   
// Создаем таблицу значений
   
ТЗ = Новый ТаблицаЗначений;

   
// Добавляем колонки в таблицу значений
   
ТЗ.Колонки.Добавить("Овощь");
   
ТЗ.Колонки.Добавить("Цвет");
   
ТЗ.Колонки.Добавить("Вкус");

   
// Добавляем строки в таблицу значений
   
Стр = ТЗ.Добавить();
   
Стр.Овощь = "Дыня";
   
Стр.Цвет = "Желтая";
   
Стр.Вкус = "Сладкая";

   
Стр = ТЗ.Добавить();
   
Стр.Овощь = "Лук";
   
Стр.Цвет = "Зеленый";
   
Стр.Вкус = "Горький";

   
Стр = ТЗ.Добавить();
   
Стр.Овощь = "Помидор";
   
Стр.Цвет = "Красный";
   
Стр.Вкус = "Сочный";

   
// ТабРеквизит - таблица значений на форме
   
ЗначениеВРеквизитФормы(ТЗ, "ТабРеквизит");

КонецПроцедуры
Программный вывод таблицы значений в таблицу на форму:
Пример вызова: ПрограммныйВыводТаблицыЗначенийВТаблицуНаФорму(МодульОбъкта.ТЗИзExcel, "ТЗИзExcel", Истина, Истина);

// Процедура - Программный вывод таблицы значений в таблицу на форму
//
// Параметры:
//  ТаблицаЗначенийДляВывода             - ТаблицаЗначений     - ТаблицаЗначений для вывода на форму
//  ИмяРеквизитаФормы                     - Строка             - Наименование реквизита формы ДанныеФормыКоллекция
//  ИспользованиеКолонкиОтметка             - Булево             - Вывод колокни отметка
//  ТолькоКнопкаОткрытия                 - Булево             - Отображение кнопок
//
&НаСервере
Процедура ПрограммныйВыводТаблицыЗначенийВТаблицуНаФорму(ТаблицаЗначенийДляВывода, ИмяРеквизитаФормы, ИспользованиеКолонкиОтметка = Ложь, ТолькоКнопкаОткрытия = Истина)

   // Функционал данного механизма служит для программного вывода "Таблицы значений"
   // в реквизит управляемой  формы с типом "ДанныеФормыКоллекция". Может быть полезен
   // в задачах, где состав колонок выгружаемой таблицы значений может меняться.
   // Механизм предусматривает работу как с реквизитом объекта, так и с реквизитом формы.

   // Также реализована возможность быстрого добавления колонки «Отметка» и настройки доступности кнопок полей.
   // Процедура должна быть размещена в модуле формы.

   Попытка

       Если ТипЗнч(ТаблицаЗначенийДляВывода) = Тип("ТаблицаЗначений") Тогда
           Если ТипЗнч(ИмяРеквизитаФормы) = Тип("Строка") Тогда
               // Опрелеляем является заполняемый реквизит, реквизитом объекта или реквизитом формы
               Если Объект.Свойство(ИмяРеквизитаФормы) И ТипЗнч(Объект[ИмяРеквизитаФормы]) = Тип("ДанныеФормыКоллекция") Тогда
                   ПутьКДаннымФормыКоллекция = "Объект." + ИмяРеквизитаФормы;
                   ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение("Объект." + ИмяРеквизитаФормы);
                   ЭтоРеквизитОбъекта = Истина;
               ИначеЕсли ТипЗнч(ЭтаФорма[ИмяРеквизитаФормы]) = Тип("ДанныеФормыКоллекция") Тогда
                   ПутьКДаннымФормыКоллекция = ИмяРеквизитаФормы;
                   ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение(ИмяРеквизитаФормы ,Тип("ТаблицаЗначений"));
                   ЭтоРеквизитОбъекта = Ложь;
               КонецЕсли;
           КонецЕсли;

           МассивУдаляемыхРеквизитов = Новый Массив;
           МассивДобавляемыхРеквизитов = Новый Массив;
           МассивИсключаемыхРеквизитов = Новый Массив;

           // Формируем массив колонок для удаления
           Для Каждого Колонка Из ОбъектДляОтображенияНаФорме.Колонки Цикл
               МассивУдаляемыхРеквизитов.Добавить(ПутьКДаннымФормыКоллекция + "." + Колонка.Имя);
           КонецЦикла;

           // Удаляем колонки с формы
           Для Каждого Колонка Из ОбъектДляОтображенияНаФорме.Колонки Цикл
               ЭлементКолонки = Элементы.Найти(ИмяРеквизитаФормы + Колонка.Имя);
               Если НЕ ЭлементКолонки = Неопределено Тогда
                   Элементы.Удалить(ЭлементКолонки);
               КонецЕсли;
           КонецЦикла;

           // Добавляем колонку "Отметка"
           Если ИспользованиеКолонкиОтметка Тогда
               НоваяКолонка = Новый РеквизитФормы("Отметка", Новый ОписаниеТипов("Булево"),  ПутьКДаннымФормыКоллекция);
               МассивДобавляемыхРеквизитов.Добавить(НоваяКолонка);
           КонецЕсли;

           // Формируем массив колонок из таблицы значений
           Для Каждого Колонка Из ТаблицаЗначенийДляВывода.Колонки Цикл
               Если Колонка.ТипЗначения.Типы().Найти(Тип("Тип")) = Неопределено Тогда
                   НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(Колонка.ТипЗначения.Типы()), ПутьКДаннымФормыКоллекция);
                   МассивДобавляемыхРеквизитов.Добавить(НоваяКолонка);
               Иначе
                   Сообщить("Колонка " + Строка(Колонка.Имя) + " с типом:  не может быть выгружена");
                   МассивИсключаемыхРеквизитов.Добавить(Колонка);
               КонецЕсли;
           КонецЦикла;

           // Обновляем реквизиты формы
           ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов);

           //Создаем элементы на форме для отображения колонок
           ЭлементТЗ = Элементы[ИмяРеквизитаФормы];

           // Добавляем колонку "Отметка"
           Если ИспользованиеКолонкиОтметка Тогда
               НовыйЭлементФормы = Элементы.Добавить(ИмяРеквизитаФормы + "Отметка", Тип("ПолеФормы"), ЭлементТЗ);
               НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка;
               НовыйЭлементФормы.ПутьКДанным = ПутьКДаннымФормыКоллекция + "." + "Отметка";
               НовыйЭлементФормы.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;
           КонецЕсли;

           // Добавляем колонки из таблицы
           Для Каждого Колонка Из ТаблицаЗначенийДляВывода.Колонки Цикл
               Если МассивИсключаемыхРеквизитов.Найти(Колонка) = Неопределено Тогда
                   НовыйЭлементФормы = Элементы.Добавить(ИмяРеквизитаФормы + Колонка.Имя, Тип("ПолеФормы"), ЭлементТЗ);
                   НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
                   // Устанавливаем доступность кнопок
                   Если ТолькоКнопкаОткрытия Тогда
                       НовыйЭлементФормы.РедактированиеТекста = Ложь;
                       НовыйЭлементФормы.ВыбиратьТип = Ложь;
                       НовыйЭлементФормы.КнопкаВыбора  = Ложь;
                       НовыйЭлементФормы.КнопкаВыпадающегоСписка = Ложь;
                       НовыйЭлементФормы.КнопкаОткрытия = Истина;
                       НовыйЭлементФормы.КнопкаОчистки = Ложь;
                   Иначе
                       НовыйЭлементФормы.РедактированиеТекста = Истина;
                       НовыйЭлементФормы.ВыбиратьТип = Истина;
                       НовыйЭлементФормы.КнопкаВыбора  = Истина;
                       НовыйЭлементФормы.КнопкаВыпадающегоСписка = Истина;
                       НовыйЭлементФормы.КнопкаОткрытия = Истина;
                       НовыйЭлементФормы.КнопкаОчистки = Истина;
                   КонецЕсли;
                   НовыйЭлементФормы.КнопкаРегулирования = Ложь;
                   НовыйЭлементФормы.КнопкаСоздания = Ложь;
                   НовыйЭлементФормы.КнопкаСпискаВыбора = Ложь;
                   НовыйЭлементФормы.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать;
                   НовыйЭлементФормы.БыстрыйВыбор = Ложь;
                   НовыйЭлементФормы.ПутьКДанным = ПутьКДаннымФормыКоллекция + "." + Колонка.Имя;
               КонецЕсли;
           КонецЦикла;

           // Загружаем таблицу значений в данные формы коллекцию
           Если ЭтоРеквизитОбъекта Тогда
               Объект[ИмяРеквизитаФормы].Загрузить(ТаблицаЗначенийДляВывода);
           Иначе
               ЭтаФорма[ИмяРеквизитаФормы].Загрузить(ТаблицаЗначенийДляВывода);
           КонецЕсли;
       Иначе
           Сообщить("Выводить можно только таблицу значений");
       КонецЕсли;

   Исключение
       ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
   КонецПопытки;

КонецПроцедуры
Поиск кода
0
Комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 19.04.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому