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

13.01.16

Разработка - Механизмы платформы 1С

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

Скачать исходный код

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

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

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

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2568    dsdred    16    

59

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5928    dsdred    55    

83

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5878    YA_418728146    25    

68

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6981    dsdred    36    

113

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    19077    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12786    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9410    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6531    sebekerga    54    

95
Оставьте свое сообщение