Вход | Регистрация
 

СКД - Удалить колонки программно

СКД - Удалить колонки программно
Я
   Надмозг
 
14.04.21 - 17:42
Нужно не выводить в отчет колонки в зависимости от выбранных параметров
Обхожу коллекцию элементов
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КоллекцияЭлементов = Настройки.Выбор.Элементы;

и удаляю из нее поле

Все работает до тех пор, пока поля настроены на корневом уровне (Закладка СКД Настройки, уровень - Отчет), и если на уровне группировок и детальных записей поля задаются автополем. Но если не автополем, а на уровне группировок и детальных записей поля настроены вручную, то удаляемая колонка остается в отчете, даже если удалить из КоллекцияЭлементов.

Понятно, что мешает присутствие этой колонки в одной из группировок или детальных записях. В связи с этим вопрос. Как удалить колонку на всех уровнях?
   vicof
 
1 - 14.04.21 - 18:04
Сделать n вариантов отчета, и программно выводить нужный вариант в зависимости от выбранных параметров.
   МихаилМ
 
2 - 14.04.21 - 18:07
мне в таких случаях помогает обработка convertskd. она  из схемы скд генерирует её программное создание.
   toypaul
 
3 - 14.04.21 - 18:17
если научился обходить Выбор, то до обхода Структура не так много осталось
   Classic
 
4 - 14.04.21 - 19:57
(3)
Разные по сложности задачи
   Надмозг
 
5 - 15.04.21 - 09:59
(1) это плохо, т.к. возможны пользовательские варианты
(2) спасибо, посмотрю
(3) а я стал разбирать, что там в структуре, но не нашел нужного поля. Выглядит, будто там одни группировки, а мое поле - ресурс в детальных записях
   toypaul
 
6 - 15.04.21 - 10:24
(5) в синтаксис помощник не пробовал смотреть?
   SleepyHead
 
7 - 15.04.21 - 10:29
(0) Две процедуры, одна рекурсивная... Не так это и сложно

Пример:

ВыключитьВидимостьПолей(Настройки, "Сумма");

реализация:

-----------------

Процедура ВыключитьВидимостьПолейРекурсивно(Стр, МассивПолей)
Перем Поле,ПолеГруппы,ПодСтр,Коллекция;

    Если ТипЗнч(Стр)=Тип("НастройкиКомпоновкиДанных") Тогда
        Коллекция=Стр.Структура
    ИначеЕсли ТипЗнч(Стр)=Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") ИЛИ ТипЗнч(Стр)=Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда
        Коллекция=Стр
    Иначе
        Возврат;
    КонецЕсли;

    Для Каждого ПодСтр Из Коллекция Цикл
        Для Каждого Поле из ПодСтр.Выбор.Элементы Цикл
            Если ТипЗнч(Поле)=Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
                Для Каждого ПолеГруппы из Поле.Элементы Цикл
                    Если МассивПолей.Найти(ПолеГруппы.Поле)<>Неопределено Тогда
                        ПолеГруппы.Использование=Ложь
                    КонецЕсли;
                КонецЦикла;
            ИначеЕсли ТипЗнч(Поле)=Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда
                Продолжить
            ИначеЕсли МассивПолей.Найти(Поле.Поле)<>Неопределено Тогда
                Поле.Использование=Ложь
            КонецЕсли;
        КонецЦикла;
        Если ТипЗнч(ПодСтр)=Тип("ГруппировкаКомпоновкиДанных") ИЛИ ТипЗнч(ПодСтр)=Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда
            ВыключитьВидимостьПолейРекурсивно(ПодСтр.Структура, МассивПолей);
        ИначеЕсли ТипЗнч(ПодСтр)=Тип("ТаблицаКомпоновкиДанных") Тогда
            Для Каждого СтрТаблицы из ПодСтр.Строки Цикл
                ВыключитьВидимостьПолейРекурсивно(СтрТаблицы.Структура, МассивПолей);
            КонецЦикла;
            Для Каждого СтрТаблицы из ПодСтр.Колонки Цикл
                ВыключитьВидимостьПолейРекурсивно(СтрТаблицы.Структура, МассивПолей);
            КонецЦикла;
        Иначе
            А=1;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Процедура ВыключитьВидимостьПолей(Поля, НастройкиСКД)

    МассивПолей=Новый Массив;
    Если ТипЗнч(Поля)=Тип("Массив") Тогда
        МассивПолей=Поля
    ИначеЕсли ТипЗнч(Поля)=Тип("Строка") И ЗначениеЗаполнено(Поля) Тогда
        Для Каждого Имя Из СтрокаВМассив(Поля) Цикл
            МассивПолей.Добавить(Новый ПолеКомпоновкиДанных(Имя));
        КонецЦикла;
    КонецЕсли;

    Если МассивПолей.Количество()=0 Тогда
        Возврат
    КонецЕсли;

    Для Каждого Поле из НастройкиСКД.Выбор.Элементы Цикл
        Если ТипЗнч(Поле)=Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
            Для Каждого ПолеГруппы из Поле.Элементы Цикл
                Если МассивПолей.Найти(ПолеГруппы.Поле)<>Неопределено Тогда
                    ПолеГруппы.Использование=Ложь
                КонецЕсли;
            КонецЦикла;
        Иначе
            Если МассивПолей.Найти(Поле.Поле)<>Неопределено Тогда
                Поле.Использование=Ложь
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    ВыключитьВидимостьПолейРекурсивно(НастройкиСКД, МассивПолей);
КонецПроцедуры
   ЧессМастер
 
8 - 22.04.21 - 15:25
(3) >если научился обходить Выбор, то до обхода Структура не так много осталось

(6) >в синтаксис помощник не пробовал смотреть?


Эхх, а раньше как хорошо было. Пожно было задать нетривиальный вопрос и тебе ответили бы. А не послали бы читать ЖКК.

Отвечу на вопросы по СКД. Помогу решить проблему с СКД
   acht
 
9 - 22.04.21 - 15:35
(8) Аксиома Коула
   toypaul
 
10 - 22.04.21 - 15:38
(8) так это тривиальный вопрос
   ЧессМастер
 
11 - 22.04.21 - 15:45
(10) >так это тривиальный вопрос

Для кого ? Для тебя ? Возможно.

А сколько ты лет прокачивал свой скилл по СКД что для тебя эти вопросы стали тривиальными ?

Ты понимаешь что любой вопрос становится тривиальным когда один раз через него пройдешь?

А до этого ты должен или где то этот пример найти (в книгах, в программе) или тебе это должны показать коллеги.


Открой ту же книгу Хрусталевой по СКД. Там ничего подобного нет. Одна вода в стиле "для того чтобы делать отчеты на СКД надо делать отчеты на СКД". А шаг вправо шаг влево от типовых вариантов и сидите разбирайтесь сами.
   ЧессМастер
 
12 - 22.04.21 - 15:47
Тем более когда задают вопрос на Мисту делаю это в жесточайшем цейтноте. Когда тебе на работе никто не даст неделю сидеть читать и разбираться как это сделать.
   acht
 
13 - 22.04.21 - 16:00
(12) > делаю это в жесточайшем цейтноте. Когда тебе на работе никто не даст

А миста тут причем?
   ЧессМастер
 
14 - 22.04.21 - 17:43
(13) Миста это место где БЫСТРО можно получить квалифицированный ответ в условиях жесткого цейтнота на решение задачи.

Можно конечно получить ответ типа

(3) >если научился обходить Выбор, то до обхода Структура не так много осталось

(6) >в синтаксис помощник не пробовал смотреть?

но обычно если человек навел время на прочтение ветки то отвечает по существу.
   ЧессМастер
 
15 - 22.04.21 - 17:48
(13) Я просто каждый раз удивляюсь - если у человека нет времени / желания отвечать на вопрос который поднял топикстартер зачем заходить в ветку и упражняться в остроумии ?

Такое впечатление что у тех кто так делает глубокая психологическая травма от того что они когда-то задали вопрос а их в ответ психологически унижали и насмехались. Вот они и отыгрываются сейчас.
   hhhh
 
16 - 22.04.21 - 17:49
(0) делай после скд

ТабДок.УдалитьОбласть()
   Chameleon1980
 
17 - 22.04.21 - 21:17
просто ответы очевидны, я думаю
   acht
 
18 - 22.04.21 - 21:38
(14) У тебя реально сбиты приоритеты.

> Миста это место где БЫСТРО можно
Миста это место где быстро МОЖНО. А можно и не.

(15) > Вот они и отыгрываются сейчас.
И жалуются на это на форумах, да.
   ЧессМастер
 
19 - 23.04.21 - 19:54
(18) >И жалуются на это на форумах

Я ни на кого не жалуюсь.
Я просто не понимаю зачем тратить свое рабочее время чтобы прийти в ветку и написать что то типа

>(3) >если научился обходить Выбор, то до обхода Структура не так много осталось

>(6) >в синтаксис помощник не пробовал смотреть?


Вот ты ходишь за мной по всем веткам и комментируешь мои комментарии. Ни одного комментария по делу не было. Одна хрень типа "расскажи лучше о истории с ноутбуком".
   ДедМорроз
 
20 - 23.04.21 - 21:45
Программно все удаляется и собирается.
Вся СКД может быть построена программно от начала до конца.
Читаем документацию и не задаем вопросов.
   acht
 
21 - 24.04.21 - 00:03
(19) > Одна хрень типа "расскажи лучше о истории с ноутбуком"
О, спасибо что напомнил. Чем там кончилось-то, какая твоя роль была? Ты так беспокоился, у тебя все нормально?
   Chameleon1980
 
22 - 24.04.21 - 04:37
(0) как же вы не поймете
когда тебе говорят что-то типа "не так много осталось"
значит, что ты идёшь в верном направлении
радуйся
всем бля дай рабочий код
да так ничему не научитесь
речь не про данную ситуацию, а вообще
я считаю, что правильный наставник, который намекнет, а
не сделает за тебя
для готового кода спрашивайте гугла
разговора нет, что кто-то может поделиться
изящным решением в какой-то ситуации
но тут до решения осталось пару шагов и автор руки опускает
ооой, мне никто толком помочь не хочет
сказали же (да и додуматься же просто правда) - доберусь до полей
схемы и рули ими
мыслей много по подобным ситуациям, а нормально выразить (тб сутра)
толком не могу. но бесит, когда советы не считают за помощь


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.