|
Ширина колонки ресурсов в СКД | ☑ | ||
---|---|---|---|---|
0
extrim-style
20.12.11
✎
15:17
|
Я так понял, что ширина колонки ресурса устанавливается в зависимости от разрядности ресурса, допустим 15,2. Формирую отчет, а там у меня допустим 3,2 макс, и бОльшая часть колонки пустая. В результате отчет не умещается на одну страницу. Что делать? Обходить колонку табличного документа перед выводом на печать и смотреть на длину содержимого и уменьшать? Или как тут поступить? Есть варианты как проще сделать колонку по содержимому?
|
|||
1
sergeante
20.12.11
✎
15:18
|
В условном оформлении в настройках скд есть "Максимальная ширина колонки
" |
|||
2
extrim-style
20.12.11
✎
15:24
|
(1) в других отчетах бывают другие цифры. Мне нужно "по содержимому". Ну то есть ширину колонки по максимальному значению в колонке.
|
|||
3
Axel2009
20.12.11
✎
15:25
|
если что есть реквизит Оформление на закладке набор данных
|
|||
4
extrim-style
20.12.11
✎
15:29
|
(3) и каким пунктом оттуда мне воспользоваться?
|
|||
5
Axel2009
20.12.11
✎
15:35
|
в универсально отчете есть процедурка
Процедура РасчетШириныКолонок(ТабличныйДокумент) Экспорт |
|||
6
Галахад
гуру
20.12.11
✎
15:39
|
(2) Стабильность рулит. Зачем пользователю отчет который то широкий, то узкий?
|
|||
7
extrim-style
20.12.11
✎
15:45
|
(6) чтобы влазил в минимальное количество листов, меньше двух, а лучше 1.
|
|||
8
extrim-style
20.12.11
✎
15:57
|
(5) не нашел такую
|
|||
9
extrim-style
20.12.11
✎
15:58
|
(5) можешь скопипастить?
|
|||
10
Axel2009
20.12.11
✎
16:27
|
Процедура РасчетШириныКолонок(ТабличныйДокумент) Экспорт
Перем МаксимальнаяШиринаКолонки; Перем КонечнаяСтрока, НачальнаяСтрока, ТекущаяКолонка, ТекущаяСтрока, НачалоДанных; Перем ОбластьШапки, ОбластьПодвала; Перем ШиринаКолонки, ТекстЯчейки, НомерСтрокиТекста; Перем КоличествоУровнейГруппировокСтрок, Отступ; Перем ШириныКолонок; Если НЕ мРассчитыватьШиринуКолонок Тогда Возврат; КонецЕсли; Состояние(НСтр("ru='Выполняется расчет ширины колонок...'")); // Ограничение максимальной ширины колонки МаксимальнаяШиринаКолонки = 50; // Массив, в который будут помещаться ширины колонок ШириныКолонок = Новый Массив; // Получим количество уровней группировок в отчете для учета автоматического отступа КоличествоУровнейГруппировокСтрок = ТабличныйДокумент.КоличествоУровнейГруппировокСтрок(); // Инициализируем начальные строки НачальнаяСтрока = 0; НачалоДанных = 0; // Найдем в результирующем документе область шапки таблицы ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаТаблицы"); Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины НачальнаяСтрока = ОбластьШапки.Верх; НачалоДанных = ОбластьШапки.Низ + 1; Иначе // Если область шапки таблицы не найдена, найдем область шапки строк ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаСтрок"); Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины НачальнаяСтрока = ОбластьШапки.Верх; НачалоДанных = ОбластьШапки.Низ + 1; КонецЕсли; КонецЕсли; // Получим область подвала отчета и вычислим конечную строку расчета ОбластьПодвала = ТабличныйДокумент.Области.Найти("Подвал"); Если ТипЗнч(ОбластьПодвала) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда // Область подвала найдена КонечнаяСтрока = ОбластьПодвала.Верх - 1; Иначе // Область подвала не найдена КонечнаяСтрока = ТабличныйДокумент.ВысотаТаблицы; КонецЕсли; // Переберем все колонки отчета Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл АвтоОтступ = 0; // Переберем строки, которые будут использованы для расчета ширин колонок Для ТекущаяСтрока = НачальнаяСтрока По КонечнаяСтрока Цикл ШиринаКолонки = 0; // Получим область текущей ячейки ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка); Если ОбластьЯчейки.Лево <> ТекущаяКолонка Или ОбластьЯчейки.Верх <> ТекущаяСтрока Тогда // Данная ячейка принадлежит объединенным ячейкам и не является начальной ячейкой Продолжить; КонецЕсли; Если КоличествоУровнейГруппировокСтрок > 0 И ТекущаяСтрока = НачалоДанных Тогда // Для первой строки с данными получим значение автоотступа АвтоОтступ = ОбластьЯчейки.АвтоОтступ; КонецЕсли; // Получим текст ячейки ТекстЯчейки = ОбластьЯчейки.Текст; // Для каждой строки из текста ячейки рассчитаем количество символов в строке Для НомерСтрокиТекста = 1 По СтрЧислоСтрок(ТекстЯчейки) Цикл ШиринаТекстаЯчейки = СтрДлина(СтрПолучитьСтроку(ТекстЯчейки, НомерСтрокиТекста)); Если НЕ мРассчитыватьШиринуКолонкиПоНазванию И ТекущаяСтрока < НачалоДанных И ШиринаТекстаЯчейки > 0 Тогда ШиринаТекстаЯчейки = мМинимальнаяШиринаКолонкиПоказатель; КонецЕсли; // Если используется автоотступ, то прибавим к ширине ячейки его величину Если АвтоОтступ <> Неопределено И АвтоОтступ > 0 Тогда ШиринаТекстаЯчейки = ШиринаТекстаЯчейки + КоличествоУровнейГруппировокСтрок * АвтоОтступ; КонецЕсли; ШиринаКолонки = Макс(ШиринаКолонки, ШиринаТекстаЯчейки); КонецЦикла; Если ШиринаКолонки > МаксимальнаяШиринаКолонки Тогда // Ограничим ширину колонки ШиринаКолонки = МаксимальнаяШиринаКолонки; КонецЕсли; Если ШиринаКолонки <> 0 Тогда // Ширина колонки рассчитана // Определим, сколько ячеек по ширине используется в области для текущей ячейки КоличествоКолонок = ОбластьЯчейки.Право - ОбластьЯчейки.Лево; // Переберем все ячейки, расположенные в области Для НомерКолонки = 0 По КоличествоКолонок Цикл Если ШириныКолонок.ВГраница() >= ТекущаяКолонка - 1 + НомерКолонки Тогда // В массиве ширин колонок уже был элемент для текущей колонки Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда // Значение ширины колонки еще не было установлено ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / (КоличествоКолонок + 1); Иначе // Значение ширины колонки уже было установлено // Вычислим максимум ширины колонки ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Макс(ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / (КоличествоКолонок + 1)); КонецЕсли; Иначе // В массиве ширин колонок еще не было элемента для данной колонки // Добавим элемент в массив ширин колонок ШириныКолонок.Вставить(ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / (КоличествоКолонок + 1)); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; // Конец цикла перебора строк КонецЦикла; // Конец цикла перебора колонок // Переберем все элементы в массиве вычисленных ширин колонок Для ТекущаяКолонка = 0 По ШириныКолонок.ВГраница() Цикл Если ШириныКолонок[ТекущаяКолонка] <> Неопределено Тогда // Ширина колонок установлена // Установим ширину области ячеек Если ТабличныйДокумент.Область(, ТекущаяКолонка + 1, НачалоДанных, ТекущаяКолонка + 1).ШиринаКолонки < ШириныКолонок[ТекущаяКолонка] + 1 Тогда ТабличныйДокумент.Область(, ТекущаяКолонка + 1, НачалоДанных, ТекущаяКолонка + 1).ШиринаКолонки = ШириныКолонок[ТекущаяКолонка] + 1; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры // РасчетШириныКолонок() |
|||
11
extrim-style
20.12.11
✎
16:27
|
(5) это оно? http://help1c.com/faq/view/417.html
|
|||
12
extrim-style
20.12.11
✎
16:28
|
(10) спасибо!
|
|||
13
extrim-style
20.12.11
✎
16:33
|
Переменные не определены. 81 бух 16.
мРассчитыватьШиринуКолонок мРассчитыватьШиринуКолонкиПоНазванию мМинимальнаяШиринаКолонкиПоказатель что с этим делать? |
|||
14
extrim-style
20.12.11
✎
16:37
|
(11) вроде без ошибок. буду пробовать
|
|||
15
extrim-style
20.12.11
✎
16:42
|
(11) работает. Axel2009 спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |