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

13.01.16

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ПримерТабличноеПоле.epf
.epf 8,13Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

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

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 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    6848    dsdred    47    

96

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

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    10708    bayselonarrend    21    

161

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

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

13.03.2024    7549    dsdred    18    

81

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

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

24.01.2024    25182    YA_418728146    32    

73

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

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

06.10.2023    25718    SeiOkami    48    

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