|
СКД. Как убрать столбцы ресурсов с пустыми значениями? | ☑ | ||
|---|---|---|---|---|
|
0
chigsrOck
17.06.10
✎
10:09
|
Есть отчет в СКД. Выводятся куча ресурсов, причем некоторые из ресурсов могут быть пустыми (т.е. все значения в столбце и итог=0).Можно как-нить средствами скд скрывать(не выводить в отчет) такие ресурсы? спасибо
|
|||
|
1
IronDemon
17.06.10
✎
10:27
|
Средствами СКД - нет
|
|||
|
2
chigsrOck
17.06.10
✎
10:28
|
(1) а как тогда?
|
|||
|
3
IronDemon
17.06.10
✎
10:31
|
Выгрузить результат в ТЗ, проанализировать, программно убрать ненужные ресурсы в схеме, вывести.
|
|||
|
4
Xrg
17.06.10
✎
11:18
|
(3)
Можно и без выгрузки в ТЗ. По каждому из ресурсов которые необходимо скрывать/показывать в условном оформлении создать по паре исключающих условий (в данном случае на равенство/неравенство нулю) и задать параметры оформления "Минимальная ширина" и "Максимальная ширина". Только для условия в котором надо скрывать колонку указывать значение этих параметров надо =0,1 |
|||
|
5
chigsrOck
17.06.10
✎
11:23
|
(3) угу. смысл понятен. можете подсказать тогда как заставить скд передать результат запроса в ТЗ? Можно конечно в модуле ввести упрощенный запрос, и передать туда значения параметров, но это будет долго...
(4) не совсем понятно. нужно как-то получить общий ИТОГ по каждому ресурсу и если он = 0 - менять ширину его колонки. Как это намутить? |
|||
|
6
luns
17.06.10
✎
11:28
|
(5) ну вон же в (3) ответ верный. и сделать просто.
|
|||
|
7
Xrg
17.06.10
✎
11:28
|
(5)
Итог имеет обыкновение идти последней строкой. По нему и сработает условие. Разумеется, должны быть либо включены автоитоги или сформированы самостоятельно. |
|||
|
8
luns
17.06.10
✎
11:35
|
(7) вот пример работы в компоновке с тз.
Процедура ВыполнитьОтчет() Экспорт ЭлементыФормы.ТабДок.Очистить(); ЗаголовокОтчета = "Сводный отчет по начисленным премиям "; ДопЧасть = "контрагентам"; ////////////////////////////////////////// // ЭТАП 1. ПОЛУЧЕНИЕ ТАБЛИЦЫ ЗНАЧЕНИЙ // ////////////////////////////////////////// СхемаКомпоновкиДанных = ПолучитьМакет("НачальнаяСхемаКомпоновкиДанных"); ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КомпоновщикНастроекПервый = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроекПервый.Инициализировать(ИсточникДоступныхНастроек); КомпоновщикНастроекПервый.ЗагрузитьНастройки(Настройки); // установка периода ПараметрКомпоновкиДанных = КомпоновщикНастроекПервый.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")); Если ПараметрКомпоновкиДанных <> Неопределено Тогда ПараметрКомпоновкиДанных.Значение = ДатаНач; ПараметрКомпоновкиДанных.Использование = Истина; КонецЕсли; ПараметрКомпоновкиДанных = КомпоновщикНастроекПервый.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода")); Если ПараметрКомпоновкиДанных <> Неопределено Тогда ПараметрКомпоновкиДанных.Значение = ?(ДатаКон = '00010101', ДатаКон, КонецДня(ДатаКон)); ПараметрКомпоновкиДанных.Использование = Истина; КонецЕсли; // установка отборов из основных настроек Отбор = КомпоновщикНастроекПервый.Настройки.Отбор; ПолеВидБонуса = Новый ПолеКомпоновкиДанных("ВидБонуса"); Для Каждого Элемент Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл НовыйЭлемент = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовыйЭлемент.Использование = Элемент.Использование; НовыйЭлемент.ЛевоеЗначение = Элемент.ЛевоеЗначение; НовыйЭлемент.ВидСравнения = Элемент.ВидСравнения; НовыйЭлемент.ПравоеЗначение = Элемент.ПравоеЗначение; Если НовыйЭлемент.ЛевоеЗначение = ПолеВидБонуса И Элемент.Использование Тогда ВидБонуса = НовыйЭлемент.ПравоеЗначение; Если ВидБонуса = Справочники.д_ВидыБонусов.ПремияЗаВыполнениеЕжемесячногоПланаПоОбъемамЗакупок Тогда ДопЧасть = "за выполнение ежемесячного плана по объему закупок"; ИначеЕсли ВидБонуса = Справочники.д_ВидыБонусов.КвартальнаяПремия Тогда ДопЧасть = "за выполнение квартального плана по объему закупок"; ИначеЕсли ВидБонуса = Справочники.д_ВидыБонусов.ПремияЗаВыполнениеЕжемесячныхПлановПоПриоритетнымЗаданиям Тогда ДопЧасть = "за выполнение плана по приоритетным заданиям"; ИначеЕсли ВидБонуса = Справочники.д_ВидыБонусов.ПремияЗаАссортимент Тогда ДопЧасть = "за ассортимент"; КонецЕсли; КонецЕсли; КонецЦикла; // Удалим лишние поля ПолеНомерИзвещения = Новый ПолеКомпоновкиДанных("НомерИзвещения"); ПолеСтавка = Новый ПолеКомпоновкиДанных("Ставка"); ПолеИзвещение = Новый ПолеКомпоновкиДанных("Извещение"); Если Не ВыводитьИзвещения Тогда ВыбранныеПоля = КомпоновщикНастроекПервый.Настройки.Выбор.Элементы; Количество = ВыбранныеПоля.Количество(); Для Счетчик = 1 По Количество Цикл Если ВыбранныеПоля[Количество-Счетчик].Поле = ПолеНомерИзвещения Или ВыбранныеПоля[Количество-Счетчик].Поле = ПолеИзвещение Тогда ВыбранныеПоля.Удалить(ВыбранныеПоля[Количество-Счетчик]); КонецЕсли; КонецЦикла; КонецЕсли; // Выполнение компоновки ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроекПервый.Настройки, ДанныеРасшифровки, , // МакетОформления Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений") ); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать( МакетКомпоновки, , // ВнешниеНаборыДанных ДанныеРасшифровки ); ТаблицаДанных = Новый ТаблицаЗначений; ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений(); ПроцессорВывода.УстановитьОбъект(ТаблицаДанных); ТаблицаДанных = ПроцессорВывода.Вывести( ПроцессорКомпоновки, Истина // Воможность прерывания пользователем ); // Преобразование периода и номеров извещений (то, ради чего создается ТЗ) ТаблицаДанных.Колонки.Добавить("Период", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(20)); Если Не ВыводитьИзвещения Тогда ТаблицаДанных.Колонки.Добавить("НомерИзвещения", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(1)); КонецЕсли; Для Каждого ТекСтрока Из ТаблицаДанных Цикл ТекСтрока.Период = ПолучитьПериод(ТекСтрока.ПериодРасчета, ТекСтрока.Периодичность); Если ВыводитьИзвещения Тогда ТекСтрока.НомерИзвещения = д_Общий.ПолучитьЧислоИзКодаНомера(ТекСтрока.НомерИзвещения); КонецЕсли; КонецЦикла; /////////////////////////////////////////////////////////////// // ЭТАП 2. ПЕРЕДАЧА ТАБЛИЦЫ ЗНАЧЕНИЙ В ОСНОВНУЮ КОМПОНОВКУ // /////////////////////////////////////////////////////////////// НаборДанных = Новый Структура("ТаблицаДанных", ТаблицаДанных); СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; Настройки = КомпоновщикНастроек.Настройки; // Переключение поля "№ извещения" ВыбранныеПоля = Настройки.Выбор.Элементы; Для Счетчик = 0 По ВыбранныеПоля.Количество()-1 Цикл Если ВыбранныеПоля[Счетчик].Поле = ПолеНомерИзвещения Или ВыбранныеПоля[Счетчик].Поле = ПолеСтавка Тогда ВыбранныеПоля[Счетчик].Использование = ВыводитьИзвещения; // Выключаем поле КонецЕсли; КонецЦикла; // Отключаем общие итоги, если номера извещений НастройкаИтогов = Настройки.ПараметрыВывода.Элементы.Найти("ГоризонтальноеРасположениеОбщихИтогов"); Если Не НастройкаИтогов = Неопределено Тогда НастройкаИтогов.Использование = Истина; НастройкаИтогов.Значение = ?(ВыводитьИзвещения, РасположениеИтоговКомпоновкиДанных.Нет, РасположениеИтоговКомпоновкиДанных.Авто); КонецЕсли; НастройкаЗаголовка = Настройки.ПараметрыВывода.Элементы.Найти("Заголовок"); Если Не НастройкаЗаголовка = Неопределено Тогда НастройкаЗаголовка.Значение = ЗаголовокОтчета + ДопЧасть; КонецЕсли; // Выполнение компоновки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетОформления = ПолучитьМакет("МакетОформления"); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки, МакетОформления); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, НаборДанных, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ТабДок); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
|
9
chigsrOck
17.06.10
✎
12:16
|
Спасибо, будем разбираться:)
|
|||
|
10
Eugeneer
17.06.10
✎
12:19
|
ТЗ фигня- расшифровки сразу уходят в аут.
|
|||
|
11
Eugeneer
17.06.10
✎
12:20
|
Думаю что с ТЗ еще вылезет точно что нибудь урезающее функционал.
|
|||
|
12
sergeante
17.06.10
✎
12:45
|
(0) А если проанализировать уже готовый табличный документ с результатом. Пройтись по нужным колонкам, посмотреть наличие нулевого итога, и скрыть колонку долой?
|
|||
|
13
Eugeneer
17.06.10
✎
12:49
|
(12) а если структура будет сложной? например 3 отчеты разных.
|
|||
|
14
sergeante
17.06.10
✎
12:57
|
(13) ну это как вариант просто.
|
|||
|
15
chigsrOck
17.06.10
✎
13:16
|
(12) это будет геморрой, у самой таблицы довольно сложная стр-ра + в поле выводятся 2 таблицы...
|
|||
|
16
Eugeneer
17.06.10
✎
14:17
|
Может попробовать в СКД на первой закладке у нужных ресурсов поставить игнорировать NULL, но тогда нужно будет везде в запросе ставить Выбор когда иначе NULL
|
|||
|
17
Eugeneer
17.06.10
✎
14:17
|
это отлично работает в случае пустых измерений
|
|||
|
18
Eugeneer
17.06.10
✎
14:18
|
тоесть надо будет ставить условие если > 0 тогда Иначе NULL. По идее тогда если у ресурса будет NULL эта колонка выводится не будет.
|
|||
|
19
chigsrOck
17.06.10
✎
15:07
|
(16) интересно. а где в настройках ставится "игнорировать null"?
|
|||
|
20
luns
17.06.10
✎
15:10
|
(10) нормально все. пяток таких отчетов сделал - пока ни жалились.
|
|||
|
21
chigsrOck
17.06.10
✎
15:17
|
(16) кстати не может быть траблов с null если ресурс этот используется в формулах?
|
|||
|
22
ABCD
17.06.10
✎
17:33
|
(19) В колонке "Роль" поля компоновки данных флажок "Игнорировать значения NULL"
(21) Если имеются ввиду траблы с формулами для ресурсов, то траблов с NULL не наблюдал |
|||
|
23
Eugeneer
17.06.10
✎
21:35
|
(21) так есть же не запрос а страница СКД где по любому уже конечные ресурсы определяется. там можно выбор и ставить.
|
|||
|
24
Eugeneer
17.06.10
✎
21:36
|
Только одна проблема. Я еще днем протестировал - не заработало. Уже ставил чо угодно. Для измерений с типом справочник работает без проблем.
|
|||
|
25
chigsrOck
17.06.10
✎
22:50
|
(24) спасибо. да, я тоже проверил - фокус не удался:))
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |