|
СКД - как повторять шапку таблицы на каждой странице - как узнать высоту? | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
14.08.14
✎
07:56
|
Как бы в СКД высота шапки зависит от настройки отчета
плюс еще могут выводится всякие заголовки таблицы, параметры и отборы как узнать "Верх" для области данных в документе результате? |
|||
1
чувак
14.08.14
✎
07:58
|
ТабДок.ВысотаТаблицы() ?
|
|||
2
organizm
14.08.14
✎
07:58
|
никак, СКД для этого не допилен, как обычно... делают, делают, но вот в мелочях так и не доделают...
|
|||
3
RomaH
naïve
14.08.14
✎
08:13
|
есть там такая штука как МакетКомпановки.Макеты
и у Макетов у которых "Параметры.Количество() = 0 как бы те самые которые выводятся перед областью данных |
|||
4
RomaH
naïve
14.08.14
✎
08:16
|
http://www.dropmocks.com/mGx9Mb
вот такая вот фигня получилась - но работает при каких условиях работать не будет? или как понять какой макет для какой области отчета предназначен? |
|||
5
RomaH
naïve
14.08.14
✎
08:34
|
на второй картинке - как бы есть возможность по типу элемента дерева определить, что это не область данных
т.е. если тип элемента - "МакетОбластиМакета..", то это макет над областью данных только вот который куда ... с наибольшим индексом - шапка ну естественно это все достоверно, только для вывода в одну таблицу |
|||
6
RomaH
naïve
15.08.14
✎
09:23
|
ну так что насчет способа из (4)
не слишком кривой? как улучшить? |
|||
7
Kalambur
15.08.14
✎
09:31
|
у Макета имя есть?
|
|||
8
RomaH
naïve
15.08.14
✎
09:57
|
(7) У какого макета - на скринах все видно, вроде
|
|||
9
Cube
15.08.14
✎
10:00
|
(2) Сам придумал?
|
|||
10
Cube
15.08.14
✎
10:01
|
(0) Большую красную букву "Я" справа от заголовка темы нажми...
|
|||
11
Cube
15.08.14
✎
10:14
|
Эх, доброта моя... Я делаю так:
Попытка НачалоШапки = 1; ВысотаШапки = 0; //Заголовок ЗаголовокСКД = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("Заголовок"); ВыводитьЗаголовокСКД = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("ВыводитьЗаголовок"); Если (ВыводитьЗаголовокСКД.Использование И ((ВыводитьЗаголовокСКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто И ЗаголовокСКД.Использование) ИЛИ ВыводитьЗаголовокСКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить)) ИЛИ (НЕ ВыводитьЗаголовокСКД.Использование И ЗаголовокСКД.Использование) Тогда НачалоШапки = НачалоШапки + 2; КонецЕсли; //ПараметрыДанных ЕстьПараметрыДанныхСКД = Ложь; ВыведеныПараметрыДанныхСКД = Ложь; Для Каждого ПараметрДанныхСКД Из КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл Если ПараметрДанныхСКД.Видимость Тогда ЕстьПараметрыДанныхСКД = Истина; КонецЕсли; КонецЦикла; ВыводитьПараметрыДанныхСКД = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("ВыводитьПараметрыДанных"); Если (ВыводитьПараметрыДанныхСКД.Использование И ((ВыводитьПараметрыДанныхСКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто И ЕстьПараметрыДанныхСКД) ИЛИ ВыводитьПараметрыДанныхСКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить)) ИЛИ (НЕ ВыводитьПараметрыДанныхСКД.Использование И ЕстьПараметрыДанныхСКД) Тогда НачалоШапки = НачалоШапки + 2; ВыведеныПараметрыДанныхСКД = Истина; КонецЕсли; //Отбор ОтборСКД = КомпоновщикНастроек.Настройки.Отбор.Элементы; ВыводитьОтборСКД = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("ВыводитьОтбор"); Если (ВыводитьОтборСКД.Использование И ((ВыводитьОтборСКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто И ОтборСКД.Количество() > 0) ИЛИ ВыводитьОтборСКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить)) ИЛИ (НЕ ВыводитьОтборСКД.Использование И ОтборСКД.Количество() > 0) Тогда НачалоШапки = НачалоШапки + 1; Если НЕ ВыведеныПараметрыДанныхСКД Тогда НачалоШапки = НачалоШапки + 1; КонецЕсли; КонецЕсли; //Отступ сверху Если НачалоШапки > 1 Тогда НачалоШапки = НачалоШапки + 1; КонецЕсли; //Получаем высоту шапки ТекущаяСтруктура = КомпоновщикНастроек.Настройки.Структура; Если ТекущаяСтруктура.Количество() > 0 И ТекущаяСтруктура[0].Использование Тогда Если Тип(ТекущаяСтруктура[0]) = Тип("ТаблицаКомпоновкиДанных") И ТекущаяСтруктура[0].Строки.Количество() > 0 Тогда ТекущаяСтруктура = ТекущаяСтруктура[0].Строки; Иначе ВысотаШапки = ВысотаШапки + 1; КонецЕсли; Для Сч = 0 По 20 Цикл ТекущаяСтруктура = ТекущаяСтруктура[0].Структура; Если ТекущаяСтруктура.Количество() > 0 И ТекущаяСтруктура[0].Использование Тогда ВысотаШапки = ВысотаШапки + 1; Иначе Прервать; КонецЕсли; КонецЦикла; КонецЕсли; ЭлементыФормы.Результат.ПовторятьПриПечатиСтроки = ЭлементыФормы.Результат.Область(НачалоШапки, , НачалоШапки + ВысотаШапки); Исключение КонецПопытки; |
|||
12
RomaH
naïve
15.08.14
✎
10:19
|
продублирую сюда:
v8: СКД Как закрепить шапку в отчете? MoneG кроме заголовка еще могут быть параметры, отборы.. пусть ситуация, когда перед таблицей нет никаких диаграмм и еще чего-то, тогда можно пользоваться этим: ЕстьЗаголовок = (ВыводитьЗаголовок ИЛИ Заголовок); ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("DataParametersOutput")); ЕстьПараметрыДанных = ((ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить ИЛИ ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто) И ЗначениеПараметра.Использование); ЕстьПараметрыДанных = (ЕстьПараметрыДанных И КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Количество() > 0); ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("FilterOutput")); ЕстьОтбор = ((ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить ИЛИ ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто) И ЗначениеПараметра.Использование); ЕстьОтбор = (ЕстьОтбор И КомпоновщикНастроек.Настройки.Отбор.Элементы.Количество() > 0); ТаблицаЗафиксирована = Ложь; Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; Иначе //Обработка фиксации шапки ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); //Начало и Вертикально = столько раз, сколько перед шапкой элементов Если ЭлементРезультата.ТипЭлемента = ТипЭлементаРезультатаКомпоновкиДанных.Начало И ЭлементРезультата.РасположениеВложенныхЭлементов = РасположениеВложенныхЭлементовРезультатаКомпоновкиДанных.Вертикально И ЭлементРезультата.ЗначенияПараметров.Количество() = 0 Тогда Если ЕстьЗаголовок Тогда НачалоШапки = ЭлементыФормы.Результат.ВысотаТаблицы; ЕстьЗаголовок = Ложь; Продолжить; КонецЕсли; Если ЕстьПараметрыДанных Тогда НачалоШапки = ЭлементыФормы.Результат.ВысотаТаблицы; ЕстьПараметрыДанных = Ложь; Продолжить; КонецЕсли; Если ЕстьОтбор Тогда НачалоШапки = ЭлементыФормы.Результат.ВысотаТаблицы; Естьотбор = Ложь; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры оно? |
|||
13
RomaH
naïve
15.08.14
✎
10:21
|
(11) а почему решил рассчитывать из количества параметров, а не при выводе результата?
|
|||
14
RomaH
naïve
15.08.14
✎
10:22
|
и согласись - код из (4) намного прозрачнее и проще, чем в (12) и (13)
|
|||
15
RomaH
naïve
15.08.14
✎
10:23
|
+(14) ведь программный вывод отчета в любом случае описывать, вроде?
|
|||
16
Cube
15.08.14
✎
10:24
|
(13) Маеты в 90% случаев не делаю... Твой код работать не будет без макетов...
|
|||
17
Cube
15.08.14
✎
10:24
|
(16) "Маеты" = "Макеты"
|
|||
18
RomaH
naïve
15.08.14
✎
10:26
|
(16) что значит макеты не делаешь?
щас покажу весь код |
|||
19
Cube
15.08.14
✎
10:29
|
(15) Нет, можешь код из (11) вставить в ПриКомпоновкеРезультата() заменив ЭлементыФормы.Результат на ДокументРезультат и всё будет работать...
Конечно, код не идеален, но оттолкнуться от него можно. |
|||
20
RomaH
naïve
15.08.14
✎
10:30
|
http://www.dropmocks.com/mGx9Mb
третья картинка |
|||
21
RomaH
naïve
15.08.14
✎
10:35
|
http://www.dropmocks.com/mGx9Mb
четвертый скрин вот и весь код единственное, он не будет работать на нескольких таблицах нужны проверки на их наличие, и на наличие диаграмм но, ИМХО, он более читабельный чем (11) или (12) вопрос - насколько он достоверные результаты дает |
|||
22
Cube
15.08.14
✎
10:37
|
(21) Хз, попробуй так, если косяков не будет - отпишись для истории :)
|
|||
23
RomaH
naïve
15.08.14
✎
11:01
|
в итоге:
http://www.dropmocks.com/mG0BB- |
|||
24
RomaH
naïve
15.08.14
✎
11:01
|
"http://www.dropmocks.com/mG0BB-" - ссылка с дефисом на конце
|
|||
25
Cube
15.08.14
✎
11:10
|
(23) А почему не вставить код сюда? Тебе надо было скринфош в архив положить и на файлообменник с паролем выложить... :)
|
|||
26
Cube
15.08.14
✎
11:10
|
(25) Че-то сегодня очепяток много... "скринфош" читать как "скриншот"
|
|||
27
RomaH
naïve
15.08.14
✎
11:18
|
(25) делаю через РДП где копипаст запрещен
|
|||
28
RomaH
naïve
15.08.14
✎
11:25
|
в (24) код не рабочий для таблиц
|
|||
29
RomaH
naïve
18.08.14
✎
08:24
|
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); МакетКомпановки = КомпановщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки); //фиксировать шапку можно только для ОДНОЙ таблицы или группировки КоличествоТаблиц = 0; ВысотаШапки = 0; ВерхОбластиДанных = 1; Для Каждого ЭлементТела из МакетКомпановки.Тело Цикл ТипЭлементаТела = ТипЗнч(ЭлементТела); Если ТипЭлементаТела = Тип("ТаблицаМакетаКомпоновкиДанных") ИЛИ ТипЭлементаТела = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда //Тут надо уточнить что значат другие типы в теле макета КоличествоТаблиц = КоличествоТаблиц + 1; ИначеЕсли ТипЭлементаТела <> Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда КоличествоТаблиц = 99; КонецЕсли; Если КоличествоТаблиц > 1 Тогда Прервать; КонецЕсли; Если ТипЭлементаТела = Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.Макет].Макет.Количество(); ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки; ИначеЕсли ТипЭлементаТела = Тип("ТаблицаМакетаКомпоновкиДанных") Тогда ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.МакетШапки].Макет.Количество(); ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки; КонецЕсли; КонецЦикла; Если КоличествоТаблиц = 1 Тогда ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ВерхОбластиДанных - ВысотаШапки,,ВерхОбластиДанных-1,); КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |