gifts2017

Программное создание колонок в табличном поле с полем ввода Флажок (чекбокс) (1С 8.2)

Опубликовал Valya Ili (Wilka) в раздел Программирование - Практика программирования

С возможностью быстрого выбора всех значений по строкам и столбцам.
Где важно слово «все», галки проставляются по горизонтали или по вертикали соответственно.

Допустим, из какой-либо таблицы нам необходимо сделать быстрый ввыбор каких-то данных, для этого обычно используют флажок (чекбокс). Причем данные в этой таблице могут варьироваться, следовательно, нам необходимо создавать данные строки програмно.

1. Табличное поле создается программно следующим образом

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

ОписаниеНужныхТипов = Новый ОписаниеТипов(МассивТипов);

//Создаем для примера массив со значениями
МассВаренье =Новый Массив() ;
МассВаренье.Добавить("Вишневое");
МассВаренье.Добавить("Яблочное");
МассВаренье.Добавить("Малиновое");

МассГода =Новый Массив();
МассГода.Добавить("2012 г.");
МассГода.Добавить("2013 г.");
МассГода.Добавить("2014 г.");
МассГода.Добавить("2015 г.");

//Создаем таблицу значение
ТЗ = Новый ТаблицаЗначений;
//Создание первой колонки с типами вареньев
ТЗ.Колонки.Добавить("Варенье", ОписаниеНужныхТипов,,15);

//Создание колонки Все с типом булево для флажков
ТЗ.Колонки.Добавить("ВыборСтроки", Новый ОписаниеТипов("Булево"), "Все", 4);

//Добавляем строку все в колонку с вареньем
ТЗ.Добавить().Варенье = "Все";

//Создаем строки из массива
Для каждого стр из МассВаренье Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Варенье = стр;
КонецЦикла;

//Создаем колонки с годами и поля с флажками
ПП=0;
Для каждого стр из МассГода Цикл
ПП=ПП+1;
ИмяКолонки = "К"+ПП;
ТекстШапки = стр;
ТЗ.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов("Булево"), ТекстШапки, 15);
КонецЦикла;
//Перекатываем все данные таблицы значений в табличное поле
ЭлементыФормы.ТабличноеПоле.Значение = ТЗ;

//Создаем колокни в табличном поле
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
КонецПроцедуры

2. Оформление ячеек с флажками (чекбоксами) для колонок

Процедура ТабличноеПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
//Прописываем оформление ячеек с флажками для колокнки Все
ОформлениеСтроки.Ячейки.ВыборСтроки.ОтображатьТекст = Ложь;
ОформлениеСтроки.Ячейки.ВыборСтроки.ОтображатьФлажок = Истина;
ОформлениеСтроки.Ячейки.ВыборСтроки.Флажок = ДанныеСтроки.ВыборСтроки;

МассГода =Новый Массив();
МассГода.Добавить("2012 г.");
МассГода.Добавить("2013 г.");
МассГода.Добавить("2014 г.");
МассГода.Добавить("2015 г.");

ПП=0;
//Прописываем оформление ячеек с флажками для колокнок с годами
Для каждого стр из МассГода Цикл
ПП=ПП+1;
ИмяКолонки = "К"+ПП;
ОформлениеСтроки.Ячейки[ИмяКолонки].ОтображатьТекст = Ложь;
ОформлениеСтроки.Ячейки[ИмяКолонки].ОтображатьФлажок = Истина;
ОформлениеСтроки.Ячейки[ИмяКолонки].Флажок = ДанныеСтроки[ИмяКолонки];

КонецЦикла;

//Запрещаем изменять название вареньев
ОформлениеСтроки.Ячейки.Варенье.толькоПросмотр = Истина;

КонецПроцедуры

3. Описание взаимосвязи выбора ячеек по колонке

Процедура ТабличноеПолеПриИзмененииФлажка(Элемент, Колонка)
МассГода =Новый Массив();
МассГода.Добавить("2012 г.");
МассГода.Добавить("2013 г.");
МассГода.Добавить("2014 г.");
МассГода.Добавить("2015 г.");

//Работа пересечения Все-Все
Если Колонка.Имя = "ВыборСтроки" Тогда
ТекСтрока = Элемент.ТекущиеДанные;
ТекСтрока.ВыборСтроки= Не ТекСтрока.ВыборСтроки;
Если Элемент.ТекущиеДанные.Варенье = "Все" тогда
Если Элемент.ТекущиеДанные.ВыборСтроки = Истина и Колонка.Имя = "ВыборСтроки" Тогда
ТабличноеПоле.ЗаполнитьЗначения(Истина, "ВыборСтроки");
ПП=0;
Для каждого стр из МассГода Цикл
ПП=ПП+1;
ИмяКолонки = "К"+ПП;
ТабличноеПоле.ЗаполнитьЗначения(Истина, ИмяКолонки);
КонецЦикла;
Иначеесли Элемент.ТекущиеДанные.ВыборСтроки = Ложь Тогда
ТабличноеПоле.ЗаполнитьЗначения(Ложь, "ВыборСтроки");
ПП=0;
Для каждого стр из МассГода Цикл
ПП=ПП+1;
ИмяКолонки = "К"+ПП;
ТабличноеПоле.ЗаполнитьЗначения(Ложь, ИмяКолонки);
КонецЦикла;
КонецЕсли;
иначе
если ТекСтрока.ВыборСтроки = Истина тогда
ПП=0;
Для каждого стр из МассГода Цикл
ПП=ПП+1;
ИмяКолонки = "К"+ПП;
ТекСтрока[ИмяКолонки]= Истина;
КонецЦикла;
иначе
ПП=0;
Для каждого стр из МассГода Цикл
ПП=ПП+1;
ИмяКолонки = "К"+ПП;
ТекСтрока[ИмяКолонки]= Ложь;
КонецЦикла;
КонецЕсли;
КонецЕсли;

КонецЕсли;

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ПримерТабличноеПоле.epf
.epf 8,13Kb
20.11.15
0
.epf 8,13Kb 0 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа