![]() |
![]() |
![]() |
|
СКД Как закрепить шапку в отчете? | ☑ | ||
---|---|---|---|---|
0
zag2art
09.10.08
✎
10:27
|
сабж
|
|||
1
zag2art
09.10.08
✎
10:45
|
Вопрос снимается
|
|||
2
Иа58
09.10.08
✎
12:14
|
Почему?
|
|||
3
zag2art
14.10.08
✎
12:24
|
(2) Разобрался
|
|||
4
Гаркин
14.10.08
✎
12:38
|
(3) разобрался сам, поделись с общественностью, не будь жлобом.
|
|||
5
MoneG
14.10.08
✎
12:50
|
Ну руками если, то так:
ТабДок = ЭлементыФормы.Результат; Область = ТабДок.НайтиТекст("НазваниеСамойНижнейКолонки"); Если Область = Неопределено Тогда Возврат; КонецЕсли; ТабДок.ФиксацияСверху = Область.Низ+1; |
|||
6
zag2art
14.10.08
✎
12:52
|
Процедура ПриОткрытии()
ЭлементыФормы.Результат.ФиксацияСверху = 10; КонецПроцедуры |
|||
7
MoneG
14.10.08
✎
12:54
|
(6) а если юзер добавил еще одну группировку? или установил отбор (уже после ПриОткрытии()) ?
|
|||
8
MoneG
14.10.08
✎
13:01
|
В продолжение темы: как грамотно повторять шапку таблицы при печати?
|
|||
9
Maxus43
14.10.08
✎
13:02
|
всмысле грамотно?
|
|||
10
MoneG
14.10.08
✎
13:04
|
(9) в смысле "в плюсах" СКД: "отчет без программирования". Иными словами, без дополнительного исхищрения кодом.
|
|||
11
MoneG
14.10.08
✎
13:09
|
Суть в том, что "глобальный" принцип СКД исключает автоматическую фиксацию шапки таблицы (или ее повторение при печати), поскольку в один ТабДок может быть выведено N таблиц, K диаграмм, а в таблицах еще и M вложенных отчетов... Хотелось бы, чтобы в дальнейшей появилась некая галочка типа
\/ "Фиксировать шапку таблиц". |
|||
12
Гаркин
14.10.08
✎
13:10
|
(5) тоже выход так себе.
"НазваниеСамойНижнейКолонки" - как определить это название? (Анализировать структуру не предлагать. :) ) |
|||
13
Maxus43
14.10.08
✎
13:11
|
(11) точно не скажу, но ИМХО, всё делается через ФиксацияСверху, ибо если глянуть в типовые (ЗУП 2.5 например), то в общем модуле типовых отчётов можно найти например:
Результат.ФиксацияСверху = Результат.ВысотаТаблицы; СКД не делает это сама... |
|||
14
MoneG
14.10.08
✎
13:13
|
(12) согласен полностью. такой код работает только в надежде на "праворукость" пользователя. Если ж он где-то интерактивно задал свое название - усё.. фиксация поплыла. Однако - как еще "выкрутиться" ?
|
|||
15
Гаркин
14.10.08
✎
13:17
|
Подозреваю что крутить надо процесор вывода, вот только руки не доходят.
|
|||
16
MoneG
14.10.08
✎
13:18
|
(15) щас покручу..
(13) Результат.ФиксацияСверху = Результат.ВысотаТаблицы; не знаю, в каком это контексте.. однако, самый низ таблицы зачем фиксировать? |
|||
17
Maxus43
14.10.08
✎
13:21
|
(16) надо покопать типовую, ИМХО - находит певую секцию выводимую, которая = шапке...
|
|||
18
MoneG
14.10.08
✎
13:23
|
(17) ВысотаТаблицы (хоть ИМХО, хоть нет) есть кол-во строк в ТабДоке, то есть ну никак не "=шапке".
|
|||
19
Maxus43
14.10.08
✎
13:34
|
(18) в типовую глянь сначала хоть... полный код:
Пока Истина Цикл ОбработкаПрерыванияПользователя(); //Получим следующий элемент результата компоновки ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда //Следующий элемент не получен - заканчиваем цикл вывода Прервать; Иначе // Зафиксируем шапку Если Не ОтчетОбъект.РасширеннаяНастройка И Не ТаблицаЗафиксирована И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 И ТипЗнч(ОтчетОбъект.КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда ТаблицаЗафиксирована = Истина; Результат.ФиксацияСверху = Результат.ВысотаТаблицы; КонецЕсли; //Элемент получен - выведем его при помощи процессора вывода ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; |
|||
20
MoneG
14.10.08
✎
13:47
|
(19) Ага. Только через Количество параметров у элемента результата можно "зацепиться" + вести учет, чтобы Итоги таблицы не зафиксировать (ТаблицаЗафиксирована=Истина). Вопрос про фиксацию закрыт, спасибо!
Что делать с печатью в уже выведенный ТабДок? |
|||
21
Maxus43
14.10.08
✎
14:11
|
>> Что делать с печатью в уже выведенный ТабДок?
Всмысле?) |
|||
22
MoneG
14.10.08
✎
14:15
|
(21) в смысле (8)
|
|||
23
Maxus43
14.10.08
✎
14:27
|
(22) СП отменили?
ТабличныйДокумент (SpreadsheetDocument) ПовторятьПриПечатиСтроки (RepeatOnRowPrint) Использование: Чтение и запись. Описание: Тип: ОбластьЯчеекТабличногоДокумента. Содержит область строк, которая будет повторяться при печати каждого нового листа табличного документа. Сериализуется. |
|||
24
Maxus43
14.10.08
✎
14:27
|
(23) соответственно можно вписать это в (19), т.к. там границы шапки выявлены
|
|||
25
MoneG
14.10.08
✎
14:30
|
(24) покажи эти границы, а именно:
ОбластьШапки = Результат.Область(Верх,Лево,Низ,Право); Лево = 1; Низ = Результат.ФиксацияСверху - 1; Право= Результат.ШиринаТаблицы; Верх ?? |
|||
26
Maxus43
14.10.08
✎
15:58
|
(25) думать надо... явно нет, вычисли как нить, или по умолчанию поставь что то типа верх = Результат.ФиксацияСверху - 4;
ХЗ короче |
|||
27
MoneG
14.10.08
✎
16:02
|
(26) :(7) - не надо по умолчанию. Более того, желательно некий метод БЕЗ рук!
|
|||
28
Maxus43
14.10.08
✎
16:05
|
(27) перед выводом проверь сколько группировок в компановщике, этим вычислиш количество строк.
|
|||
29
MoneG
14.10.08
✎
16:07
|
(28) не катит. кол-во группировок не всегда равно кол-ву строк в шапке.
P.S. "вычислиш" с мягким знаком. |
|||
30
Maxus43
14.10.08
✎
16:14
|
(29) Программно убери "заголовок" отчёта, ибо не нужен он нафиг на практике, Нижняя граница известна, верхняя становится тоже известна.
З.Ы. Думай сам немного, можно найти за что зацепиться. |
|||
32
Garkin
14.10.08
✎
17:17
|
Многие проблемы решались бы гораздо проще если бы "ЭлементРезультата" позволял определять что он выводит (Заголовок, Шапку, Группировку, детальную запись и тд.) Штатных сбособов определить это как я понимаю нет, но сдругой стороны у ЭлементаРезультата есть свойство "Макет", которое при наличии определенной доли смекалки позволяет определить что в данный момент выводится в табличное поле.
Может у кого нибудь есть время и желание войти в историю как автору функции заменяющей "определенную долю смекалки" ? |
|||
33
MoneG
14.10.08
✎
17:42
|
(32) Про Макет прекрасная идея, но в макете не за что зацепиться, к сожалению. В коллекции Макетов макеты привязаны к элементам результата, опять же, а не к строкам.
(30) кроме заголовка еще могут быть параметры, отборы.. пусть ситуация, когда перед таблицей нет никаких диаграмм и еще чего-то, тогда можно пользоваться этим: перем НачалоШапки; Процедура ДействияФормыПечать(Кнопка) ТабДок = ЭлементыФормы.Результат; Низ = ТабДок.ФиксацияСверху; Верх = НачалоШапки+1; Право = ТабДок.ШиринаТаблицы; ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(Верх,1,Низ,Право); ТабДок.АвтоМасштаб = Истина; ТабДок.Напечатать(); КонецПроцедуры Процедура ДействияФормыСформировать(Кнопка) НачалоШапки = 0; // .... ПроцессорВывода.НачатьВывод(); //Сколько чего до шапки ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("TitleOutput")); ВыводитьЗаголовок = ((ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить ИЛИ ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто) И ЗначениеПараметра.Использование); ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Title")); Заголовок = ((ЗначениеПараметра.Значение <> "" ИЛИ ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто) И ЗначениеПараметра.Использование); ЕстьЗаголовок = (ВыводитьЗаголовок ИЛИ Заголовок); ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("DataParametersOutput")); ЕстьПараметрыДанных = ((ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить ИЛИ ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто) И ЗначениеПараметра.Использование); ЕстьПараметрыДанных = (ЕстьПараметрыДанных И КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Количество() > 0); ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("FilterOutput")); ЕстьОтбор = ((ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить ИЛИ ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто) И ЗначениеПараметра.Использование); ЕстьОтбор = (ЕстьОтбор И КомпоновщикНастроек.Настройки.Отбор.Элементы.Количество() > 0); ТаблицаЗафиксирована = Ложь; Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; Иначе //Обработка фиксации шапки ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); //Начало и Вертикально = столько раз, сколько перед шапкой элементов Если ЭлементРезультата.ТипЭлемента = ТипЭлементаРезультатаКомпоновкиДанных.Начало И ЭлементРезультата.РасположениеВложенныхЭлементов = РасположениеВложенныхЭлементовРезультатаКомпоновкиДанных.Вертикально И ЭлементРезультата.ЗначенияПараметров.Количество() = 0 Тогда Если ЕстьЗаголовок Тогда НачалоШапки = ЭлементыФормы.Результат.ВысотаТаблицы; ЕстьЗаголовок = Ложь; Продолжить; КонецЕсли; Если ЕстьПараметрыДанных Тогда НачалоШапки = ЭлементыФормы.Результат.ВысотаТаблицы; ЕстьПараметрыДанных = Ложь; Продолжить; КонецЕсли; Если ЕстьОтбор Тогда НачалоШапки = ЭлементыФормы.Результат.ВысотаТаблицы; Естьотбор = Ложь; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры |
|||
34
MoneG
14.10.08
✎
17:51
|
(30) кстати... а как "программно" убрать Заголовок ?
|
|||
35
Garkin
14.10.08
✎
17:55
|
(33) в макете не надо ни к чему цепляться. Платформа строит и нумерует макеты исходя из структуры настройки, необходимости выводить заголовок, параметры, отборы и т.д. Надо просто проанализировать тоже самое программно, и мы будем знать какой макет за что отвечает. Что ты в (33) фактически пытаешься делать, осталось направить энергию в нужное русло?
|
|||
36
Garkin
14.10.08
✎
17:56
|
+(35) "русло?" читать как "русло. :)"
|
|||
37
MoneG
14.10.08
✎
17:59
|
смотрел программно, что с макетами творится... Для Заголовка, например, ИмяМакета = "Макет2", а для ПараметровДанных - "Макет4","Макет3". Затем уже в Таблице встречается "Макет1". Более того, в одной строке ТабДока может быть несколько сгенеренных макетов в разной последовательности "нумерации" - к конкретной строке не подступиться :( А если вспомнить про иерархию, то уже моск пухнет...
|
|||
38
Garkin
14.10.08
✎
18:11
|
Не, согласись, маловероятно что имена макетам присваиваются датчиком случайных чисел.:) Алгоритм есть. Да и про "войти в историю" я подумавши писал :)
|
|||
39
MoneG
14.10.08
✎
18:14
|
(38) соглашусь. опухоль спадет - поанализирую :) А про историю - пофиг. Мне интересно другое - неужели нельзя было все мучения 2-5 галочками встроенными избежать?!
|
|||
40
Garkin
14.10.08
✎
18:20
|
(40) СКД есть куда развиваться, будем надеяться что теперешнее ее состояние это не финальная стадия.
|
|||
41
Garkin
14.10.08
✎
18:22
|
+(40) вот, уже сам с собою разговаривать начал :), (40) естественно к (39).
|
|||
42
MoneG
14.10.08
✎
18:23
|
(40) Так точно! А пока что... появится решение с макетами - создам новую ветку.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |