Как оформить заголовок колонки итогов в отчёте с СКД
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(2) Попробовал сделать. Неплохое решение. Только в итоговом табличном документе есть ещё итоговая строка, где тоже встречается слово "Итого". Поэтому ищу область со словом "Сумма" и объединяю с ячейкой сверху. Но у меня теперь другая беда, которая не позволяет применить этот вариант. В отчёте на основе одной и той же СКД используется множество вариантов отчёта с разными вариантами настроек. Выбор вариантов программный. Видимо поэтому не срабатывает процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка).
(3) Через макет не получается - колонка искомой ячейки в зависимости от данных меняется, поэтому в макете нельзя будет указать область.
А есть ещё какие-нибудь варианты решения задачи? Как-то же это делается? Мне кажется это распространённая задачка.
(3) Через макет не получается - колонка искомой ячейки в зависимости от данных меняется, поэтому в макете нельзя будет указать область.
А есть ещё какие-нибудь варианты решения задачи? Как-то же это делается? Мне кажется это распространённая задачка.
(9) PetroP, Совершенно верно. Отчёты запускаются не стандартной кнопкой "Сформировать", а каждый отчёт запускается собственной кнопкой на форме. Из модуля формы вызывается нужная функция в модуле объекта, формируется отчёт и выводится в новый табличный документ. Получается что в коде обработки кнопки после возврата из функции нужно вставлять код объединения ячеек.
(11) spezc, Нашёл. После вызова функции формирования табличного документа (к этому моменту он уже сформирован и выведен) вставил заветную примочку:
Код отрабатывает, ошибки не появляются, но в табличном документе ячейки так и остаются разъединёнными. Может после команды объединения надо каким-то образом обновить ТабДок. Но такого метода не нашёл. Попробовал перенести примочку в саму функцию перед выводом или после вывода - одна халва.
ТабДок = ОтчётОбъект.СформироватьОтчётПоДокументамНаСервере(); // вызов функции формирования отчёта
Если ТабДок.НайтиТекст("Сумма") <> Неопределено Тогда // примочка
ИмяЯчейки = ТабДок.НайтиТекст("Сумма").Имя;
ДлинаИмени = СтрДлина(ИмяЯчейки);
ПозицияС = Найти(ИмяЯчейки,"C");
НКолонки = Сред(ИмяЯчейки, 2, ПозицияС-2);
НСтроки = Сред(ИмяЯчейки, ПозицияС+1, ДлинаИмени-ПозицияС);
Область = ТабДок.Область(Число(НСтроки)-1, Число(НКолонки), Число(НСтроки), Число(НКолонки));
Область.Объединить();
КонецЕсли;
ПоказатьКод отрабатывает, ошибки не появляются, но в табличном документе ячейки так и остаются разъединёнными. Может после команды объединения надо каким-то образом обновить ТабДок. Но такого метода не нашёл. Попробовал перенести примочку в саму функцию перед выводом или после вывода - одна халва.
(13) spezc, Да, отладчик проходит как надо, позиции ячеек вычисляются замечательно, на Область.Объединить() ничто не ругается. А результат не меняется. Может надо поменять какие-нибудь общие свойства табличного документа? Защита и ТолькоПросмотр ситуацию не меняют.
Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Двойная,1);
//Объединяем в соответствии с параметрами координат
Область = ТабличныйДокумент.Область("R"+Формат(К.НачальнаяСтрока, "ЧГ=")+"C"+(К.НачальнаяКолонка)+":R"+Формат(К.НачальнаяСтрока+КоличествоСтрок-1, "ЧГ=")+"C"+(К.НачальнаяКолонка+К.Номер-1));
Область.Объединить();
Область.ГраницаСнизу = Линия;
мне кажется R и C забыли
(16) spezc, Спасибо огромное! Заработало! И сразу выявилась ошибка. :-) Перепутал при вычислении адреса ячейки строки с колонками. Правильный код:
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ТабДок.ОтображатьСетку = Ложь;
Если ТабДок.НайтиТекст("Сумма") <> Неопределено Тогда
ИмяЯчейки = ТабДок.НайтиТекст("Сумма").Имя;
ДлинаИмени = СтрДлина(ИмяЯчейки);
ПозицияС = Найти(ИмяЯчейки,"C");
НСтроки = Сред(ИмяЯчейки, 2, ПозицияС-2);
НКолонки = Сред(ИмяЯчейки, ПозицияС+1, ДлинаИмени-ПозицияС);
Область = ТабДок.Область("R"+Формат(Число(НСтроки)-1, "ЧГ=")+"C"+Формат(НКолонки, "ЧГ=")+":R"+Формат(НСтроки, "ЧГ=")+"C"+Формат(НКолонки, "ЧГ="));
Область.Объединить();
Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
Область.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
КонецЕсли;
ТабДок.Показать();
Показать