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

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

СКД - Удалить колонки программно
Я
   Надмозг
 
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 или кнопку "Обновить" в браузере.