|
СКД : Программно включить / выключить использование выбранных полей в настройках | ☑ | ||
|---|---|---|---|---|
|
0
bvb
18.03.26
✎
10:54
|
Добрый день
Не могу добраться до выбранных полей обозначенных в самом отчете и в общем вертикальном итоге (на картинке выделено красным) Могу добраться только до полей обозначенных в таблице (на картинке выделено зеленым) Управляю ими так : Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) //СхемаКомпоновкиДанных ВключатьПоказательРуб = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек,"ВключатьПоказательРуб").Значение; ВключатьПоказательEUR = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек,"ВключатьПоказательEUR").Значение; МассивПолейРуб = Новый Массив; МассивПолейРуб.Добавить("СуммаПоказателяРуб"); МассивПолейРуб.Добавить("СуммаПоказателяСреднееРуб"); МассивПолейEUR = Новый Массив; МассивПолейEUR.Добавить("СуммаПоказателяEUR"); МассивПолейEUR.Добавить("СуммаПоказателяСреднееEUR"); Настройки = КомпоновщикНастроек.ПолучитьНастройки(); Для Каждого ЭлементСтруктурыНастроек ИЗ Настройки.Структура Цикл ВыбраныеПоля = ЭлементСтруктурыНастроек.Выбор.Элементы; Для Каждого ВыбраноеПоле ИЗ ВыбраныеПоля Цикл Если KMS_ОбщийМодульСервер.ЕстьРеквизитОбъекта(ВыбраноеПоле, "Поле") Тогда Если МассивПолейРуб.Найти(Строка(ВыбраноеПоле.Поле)) <> Неопределено И ВыбраноеПоле.Использование <> ВключатьПоказательРуб Тогда ВыбраноеПоле.Использование = ВключатьПоказательРуб; КонецЕсли; Если МассивПолейEUR.Найти(Строка(ВыбраноеПоле.Поле)) <> Неопределено И ВыбраноеПоле.Использование <> ВключатьПоказательEUR Тогда ВыбраноеПоле.Использование = ВключатьПоказательEUR; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); КонецПроцедуры |
|||
|
1
Волшебник
18.03.26
✎
10:55
|
Нет картинки
|
|||
|
2
bvb
18.03.26
✎
10:56
|
Картинка не вставляется
Пишет "Не удалось сохранить картинку (6)" Раньше вставлялась пробовал и .jpg .png на разных компах под разными браузерами |
|||
|
3
Мультук
гуру
18.03.26
✎
11:19
|
(0)
ЭлементСтруктурыНастроек тоже имеет свойство "Структура", внезапно правда? А еще есть ТаблицаКомпоновкиДанных, которая имеет Строки и Колонки, которые опять же имеют свойство "Структура". Итого: RTFM Рекурсия |
|||
|
4
bvb
18.03.26
✎
11:50
|
(3) Спасибо
Осилил : Для Каждого ЭлементСтруктурыНастроек ИЗ Настройки.Структура Цикл ВыбраныеПоля = ЭлементСтруктурыНастроек.Выбор.Элементы; Для Каждого ВыбраноеПоле ИЗ ВыбраныеПоля Цикл Если KMS_ОбщийМодульСервер.ЕстьРеквизитОбъекта(ВыбраноеПоле, "Поле") Тогда Если МассивПолейРуб.Найти(Строка(ВыбраноеПоле.Поле)) <> Неопределено И ВыбраноеПоле.Использование <> ВключатьПоказательРуб Тогда ВыбраноеПоле.Использование = ВключатьПоказательРуб; КонецЕсли; Если МассивПолейEUR.Найти(Строка(ВыбраноеПоле.Поле)) <> Неопределено И ВыбраноеПоле.Использование <> ВключатьПоказательEUR Тогда ВыбраноеПоле.Использование = ВключатьПоказательEUR; КонецЕсли; КонецЕсли; КонецЦикла; //по полям ВыбранныеКолонки = ЭлементСтруктурыНастроек.Колонки; Для Каждого ВыбранаяКолонка ИЗ ВыбранныеКолонки Цикл ВыбраныеПоля = ВыбранаяКолонка.Выбор.Элементы; Для Каждого ВыбраноеПоле ИЗ ВыбраныеПоля Цикл Если KMS_ОбщийМодульСервер.ЕстьРеквизитОбъекта(ВыбраноеПоле, "Поле") Тогда Если МассивПолейРуб.Найти(Строка(ВыбраноеПоле.Поле)) <> Неопределено И ВыбраноеПоле.Использование <> ВключатьПоказательРуб Тогда ВыбраноеПоле.Использование = ВключатьПоказательРуб; КонецЕсли; Если МассивПолейEUR.Найти(Строка(ВыбраноеПоле.Поле)) <> Неопределено И ВыбраноеПоле.Использование <> ВключатьПоказательEUR Тогда ВыбраноеПоле.Использование = ВключатьПоказательEUR; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; //по колонкам КонецЦикла; //По элементам структуры настроек |
|||
|
5
SleepyHead
гуру
18.03.26
✎
14:10
|
(4) Это не рекурсия. Я делаю так, мне пока этого хватает
Процедура ВыключитьВидимостьПолейРекурсивно(Знач Стр, МассивПолей) Перем Коллекция,ПодСтр; Коллекция=Неопределено; Если ТипЗнч(Стр)=Тип("НастройкиКомпоновкиДанных") ИЛИ ТипЗнч(Стр)=Тип("ГруппировкаКомпоновкиДанных") ИЛИ ТипЗнч(Стр)=Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда Коллекция=Стр.Структура ИначеЕсли ТипЗнч(Стр)=Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") ИЛИ ТипЗнч(Стр)=Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") ИЛИ ТипЗнч(Стр)=Тип("КоллекцияВыбранныхПолейКомпоновкиДанных") Тогда Коллекция=Стр ИначеЕсли ТипЗнч(Стр)=Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда Коллекция=Стр.Элементы ИначеЕсли ТипЗнч(Стр)=Тип("ТаблицаКомпоновкиДанных") Тогда Для Каждого СтрТаблицы из Стр.Строки Цикл Для Каждого ПодСтр из СтрТаблицы.ПоляГруппировки.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(ПодСтр,МассивПолей) КонецЦикла; Для Каждого ПодСтр из СтрТаблицы.Выбор.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(ПодСтр,МассивПолей) КонецЦикла; Для Каждого ПодСтр из СтрТаблицы.Порядок.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(ПодСтр,МассивПолей) КонецЦикла; ВыключитьВидимостьПолейРекурсивно(СтрТаблицы.Структура,МассивПолей) КонецЦикла; Для Каждого СтрТаблицы из Стр.Колонки Цикл ВыключитьВидимостьПолейРекурсивно(СтрТаблицы.Структура,МассивПолей) КонецЦикла ИначеЕсли ТипЗнч(Стр)=Тип("ВыбранноеПолеКомпоновкиДанных") Тогда Если МассивПолей.Найти(Стр.Поле)<>Неопределено Тогда Стр.Использование=Ложь КонецЕсли ИначеЕсли ТипЗнч(Стр)=Тип("ПолеГруппировкиКомпоновкиДанных") Тогда Если МассивПолей.Найти(Стр.Поле)<>Неопределено Тогда Стр.Использование=Ложь КонецЕсли ИначеЕсли ТипЗнч(Стр)=Тип("ЭлементПорядкаКомпоновкиДанных") Тогда Если МассивПолей.Найти(Стр.Поле)<>Неопределено Тогда Стр.Использование=Ложь КонецЕсли ИначеЕсли ТипЗнч(Стр)=Тип("ЭлементОтбораКомпоновкиДанных") Тогда КонецЕсли; Если Коллекция=Неопределено Тогда Возврат КонецЕсли; Для Каждого ПодСтр Из Коллекция Цикл ВыключитьВидимостьПолейРекурсивно(ПодСтр,МассивПолей); ЕстьВыбор=Истина; ЕстьПоляПорядка=Истина; ЕстьПоляГруппировки=Истина; ЕстьПоляОтбора=Истина; ЕстьПоляУО=Ложь; Если ТипЗнч(ПодСтр)=Тип("ВыбранноеПолеКомпоновкиДанных") ИЛИ ТипЗнч(ПодСтр)=Тип("ЭлементПорядкаКомпоновкиДанных") ИЛИ ТипЗнч(Стр)=Тип("ЭлементОтбораКомпоновкиДанных") ИЛИ ТипЗнч(ПодСтр)=Тип("ТаблицаКомпоновкиДанных") ИЛИ ТипЗнч(ПодСтр)=Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда ЕстьВыбор=Ложь; ЕстьПоляПорядка=Ложь; ЕстьПоляГруппировки=Ложь; ЕстьПоляОтбора=Ложь КонецЕсли; Если ЕстьВыбор Тогда Для Каждого Поле из ПодСтр.Выбор.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(Поле,МассивПолей) КонецЦикла КонецЕсли; Если ЕстьПоляПорядка Тогда Для Каждого Поле из ПодСтр.Порядок.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(Поле,МассивПолей) КонецЦикла КонецЕсли; Если ЕстьПоляГруппировки Тогда Для Каждого Поле из ПодСтр.ПоляГруппировки.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(Поле,МассивПолей) КонецЦикла КонецЕсли; Если ЕстьПоляОтбора Тогда Для Каждого Поле из ПодСтр.Отбор.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(Поле,МассивПолей) КонецЦикла КонецЕсли КонецЦикла КонецПроцедуры Процедура ВыключитьВидимостьПолей(Поля) МассивПолей=Новый Массив; Если ТипЗнч(Поля)=Тип("Массив") Тогда МассивПолей=Поля ИначеЕсли ТипЗнч(Поля)=Тип("Строка") И ЗначениеЗаполнено(Поля) Тогда Для Каждого Имя Из СтрокаВМассив(Поля) Цикл МассивПолей.Добавить(Новый ПолеКомпоновкиДанных(Имя)) КонецЦикла КонецЕсли; Если МассивПолей.Количество()=0 Тогда Возврат КонецЕсли; Для Каждого Поле из настройкиСКД.Структура Цикл ВыключитьВидимостьПолейРекурсивно(Поле,МассивПолей) КонецЦикла; Для Каждого Поле из НастройкиСКД.Выбор.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(Поле,МассивПолей) КонецЦикла; Для Каждого Поле из НастройкиСКД.Порядок.Элементы Цикл ВыключитьВидимостьПолейРекурсивно(Поле,МассивПолей) КонецЦикла; ВыключитьВидимостьПолейРекурсивно(НастройкиСКД,МассивПолей) КонецПроцедуры |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |