Дерево значений, интерактивное добавление колонок и заполнение строк - суммируются записи на форме
Коллеги, всем доброго времени суток!
По возможности помогите пожалуйста в следующем вопросе - есть задача, в которой необходимо в зависимости от полученных данных из запроса динамически формировать дерево значений (функционал отбора по необходимым условиям у сотрудников). В зависимости от выбранных параметров, у дерева должны формироваться колонки по этим самым параметрам, тогда как три колонки остаются неизменны - НомерСтроки, ФИО и Должность (Эти реквизиты добавлены на форме в дерево вручную, как и само дерево собственно).
По данной задаче написал некий код, часть из которого отвечает за динамическое формирование тех самых параметризуемых колонок дерева:
(сам нахожусь пока что на ступени стажёра, поэтому если что сильно камнями не закидывайте, пожалуйста :) )
- единоразово работа данного алгоритма на форме отображается корректно, колонки формируются динамически (пока только для одной дополнительной колонки реализовал), но при повторном отборе с другим параметром строки добавляются к ранее выведенным строкам на форме (Прикрепленное изображение), тоесть дерево по каким-то причинам не очищается. ЧЯДНТ? Заранее большое спасибо
По возможности помогите пожалуйста в следующем вопросе - есть задача, в которой необходимо в зависимости от полученных данных из запроса динамически формировать дерево значений (функционал отбора по необходимым условиям у сотрудников). В зависимости от выбранных параметров, у дерева должны формироваться колонки по этим самым параметрам, тогда как три колонки остаются неизменны - НомерСтроки, ФИО и Должность (Эти реквизиты добавлены на форме в дерево вручную, как и само дерево собственно).
По данной задаче написал некий код, часть из которого отвечает за динамическое формирование тех самых параметризуемых колонок дерева:
(сам нахожусь пока что на ступени стажёра, поэтому если что сильно камнями не закидывайте, пожалуйста :) )
&НаСервере
Процедура ЗаполнитьДеревоСотрудников()
///....
Выборка = РезультатТолькоСКлючевыми.Выбрать();
// Задаем реквизиты по умолчанию
РеквизитыПоУмолчанию = Новый Массив;
РеквизитыПоУмолчанию.Добавить("НомерСтроки");
РеквизитыПоУмолчанию.Добавить("ФИО");
РеквизитыПоУмолчанию.Добавить("Должность");
// Очищаем реквизиты дерева для дальнейшего заполнения
УдаляемыеРеквизиты = Новый Массив;
РеквизитыДляУдаления = ПолучитьРеквизиты("Тест_ПодобранныеСотрудники");
// Удаляем ранее созданные реквизиты, если таковые были
Для каждого РеквизитУдаления Из РеквизитыДляУдаления Цикл
Если РеквизитыПоУмолчанию.Найти(РеквизитУдаления.Имя) = Неопределено Тогда
УдаляемыеРеквизиты.Добавить("Тест_ПодобранныеСотрудники." + РеквизитУдаления.Имя);
// Удаляем элемент формы
Элементы.Удалить(Элементы["Тест_ПодобранныеСотрудники" + РеквизитУдаления.Имя]);
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(УдаляемыеРеквизиты) Тогда
ИзменитьРеквизиты(, УдаляемыеРеквизиты);
КонецЕсли;
ОчиститьДеревоСотрудниковНаСервере();
// Заполняем дерево подобранных сотрудников
Счетчик = 0;
Пока Выборка.Следующий() Цикл
//Перебираем все массивы элементов
Для каждого МассивКлючевыхЭлементов Из МассивМассивовКлючевыхЭлементов Цикл
Если ЗначениеЗаполнено(МассивКлючевыхЭлементов) Тогда
//Перебираем все элементы каждого массива
Для каждого КлючевойЭлемент Из МассивКлючевыхЭлементов Цикл
НаименованиеКолонки = КлючевойЭлемент.Наименование;
БезопасноеНаименование = ИсключитьЗапрещенныеСимволыНаСервере(НаименованиеКолонки);
ВсеРеквизитыДерева = ПолучитьРеквизиты("Тест_ПодобранныеСотрудники");
РеквизитДобавлен = Ложь;
Для каждого Реквизит Из ВсеРеквизитыДерева Цикл
Если Реквизит.Имя = БезопасноеНаименование Тогда
РеквизитДобавлен = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ РеквизитДобавлен Тогда
РеквизитыДерева = Новый Массив;
РеквизитыДерева.Добавить(Новый РеквизитФормы(БезопасноеНаименование,
Новый ОписаниеТипов("Строка"),
"Тест_ПодобранныеСотрудники",
НаименованиеКолонки,
Истина));
ИзменитьРеквизиты(РеквизитыДерева);
ЭлементДерева = Элементы.Добавить("Тест_ПодобранныеСотрудники" +
БезопасноеНаименование,
Тип("ПолеФормы"),
Элементы.Тест_ПодобранныеСотрудники);
ЭлементДерева.Вид = ВидПоляФормы.ПолеВвода;
ЭлементДерева.ПутьКДанным = "Тест_ПодобранныеСотрудники." + БезопасноеНаименование;
КонецЕсли;
ДеревоСФормыГотовое = РеквизитФормыВЗначение("Тест_ПодобранныеСотрудники");
СтрокаДерева = ДеревоСФормыГотовое.Строки.Добавить();
Счетчик = Счетчик + 1;
СтрокаДерева.НомерСтроки = Счетчик;
СтрокаДерева.ФИО = Выборка.Сотрудник;
СтрокаДерева.Должность = Выборка.Должность;
ЗначениеВРеквизитФормы(ДеревоСФормыГотовое, "Тест_ПодобранныеСотрудники");
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОчиститьДеревоСотрудниковНаСервере()
ДеревоСотрудников = РеквизитФормыВЗначение("ПодобранныеСотрудники");
ДеревоСотрудников.Строки.Очистить();
ЗначениеВРеквизитФормы(ДеревоСотрудников, "ПодобранныеСотрудники");
КонецПроцедуры
Показать- единоразово работа данного алгоритма на форме отображается корректно, колонки формируются динамически (пока только для одной дополнительной колонки реализовал), но при повторном отборе с другим параметром строки добавляются к ранее выведенным строкам на форме (Прикрепленное изображение), тоесть дерево по каким-то причинам не очищается. ЧЯДНТ? Заранее большое спасибо
Прикрепленные файлы:
По теме из базы знаний
- Универсальный конструктор отчетов (Новейший отчет) для 1C 7.7
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- 50+ советов для успешной сдачи 1С: Специалист по платформе
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот