Допустим, из какой-либо таблицы нам необходимо сделать быстрый ввыбор каких-то данных, для этого обычно используют флажок (чекбокс). Причем данные в этой таблице могут варьироваться, следовательно, нам необходимо создавать данные строки програмно.
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;
ИмяКолонки = "К"+ПП;
Если Колонка.Имя = ИмяКолонки Тогда
ТекСтрока = Элемент.ТекущиеДанные;
ТекСтрока[ИмяКолонки]= Не ТекСтрока[ИмяКолонки];
Если Элемент.ТекущиеДанные.Варенье = "Все" тогда
Если Элемент.ТекущиеДанные[ИмяКолонки] = Истина и Колонка.Имя = ИмяКолонки Тогда
ТабличноеПоле.ЗаполнитьЗначения(Истина, ИмяКолонки);
Иначеесли Элемент.ТекущиеДанные[ИмяКолонки] = Ложь Тогда
ТабличноеПоле.ЗаполнитьЗначения(Ложь, ИмяКолонки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Данный вариант мне пригодился для создания хитрого распределения материалов, в документе Отчет производства.