Как оформить заголовок колонки итогов в отчёте с СКД

1. vendim 24 30.06.15 10:58 Сейчас в теме
Как отформатировать заголовок колонки итогов так, чтобы убрать слово "Сумма", а слово "Итого" разместилось по центру объединённой ячейки? Как видно из рисунка, в колонках группировок это удалось сделать. А как это сделать в итоговой колонке?
Прикрепленные файлы:
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. dj_serega 391 30.06.15 11:04 Сейчас в теме
(1) vendim, Можно попробовать через макет. Но как сделать не скажу :) Ибо это только идея.
18. TariK 29.03.23 19:19 Сейчас в теме
(1) Кто знает, как убрать "Итого" ????? Отчет типовой, надо в режиме предприятия это сделать через настройку технического специалиста. Все перерыл, не нашел эту группировку. 1С ЗУП 3.1 ДанныеДляОтраженияРасчетовЗарплатыВБухучете
2. spezc 782 30.06.15 11:00 Сейчас в теме
решение в лоб. в процедуре ПриКомпоновкеРезультата выполнять СКД программно и выполнять постобработку итогового ТабличногоДокумента: найти ячейку Итого объединить ее с нижестоящей ячейкой
4. vendim 24 30.06.15 13:34 Сейчас в теме
(2) Попробовал сделать. Неплохое решение. Только в итоговом табличном документе есть ещё итоговая строка, где тоже встречается слово "Итого". Поэтому ищу область со словом "Сумма" и объединяю с ячейкой сверху. Но у меня теперь другая беда, которая не позволяет применить этот вариант. В отчёте на основе одной и той же СКД используется множество вариантов отчёта с разными вариантами настроек. Выбор вариантов программный. Видимо поэтому не срабатывает процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка).

(3) Через макет не получается - колонка искомой ячейки в зависимости от данных меняется, поэтому в макете нельзя будет указать область.

А есть ещё какие-нибудь варианты решения задачи? Как-то же это делается? Мне кажется это распространённая задачка.
7. dj_serega 391 30.06.15 14:22 Сейчас в теме
(4) vendim,
колонка искомой ячейки в зависимости от данных меняется

Я думал там можно только на "Итог" прикрутить макет. Если так нельзя тогда да... Думать дальше нужно.
5. PetroP 30.06.15 13:45 Сейчас в теме
Видимо поэтому не срабатывает процедура ПриКомпоновкеРезультата

Процедура предопределенная - срабатывает всегда. Другое дело, может при расшифровке формируется другой отчет.
6. vendim 24 30.06.15 13:57 Сейчас в теме
(5) PetroP, в отчёте не используются расшифровки. В ПриКомпоновкеРезультата воткнул для проверки Сообщить("..."). Не срабатывает. И отладчиком не заходит.
9. PetroP 30.06.15 14:26 Сейчас в теме
(6) vendim, значит используется не стандартное действие, а свое. Ищите обработчики начиная с кнопки "Сформировать".
10. vendim 24 30.06.15 15:12 Сейчас в теме
(9) PetroP, Совершенно верно. Отчёты запускаются не стандартной кнопкой "Сформировать", а каждый отчёт запускается собственной кнопкой на форме. Из модуля формы вызывается нужная функция в модуле объекта, формируется отчёт и выводится в новый табличный документ. Получается что в коде обработки кнопки после возврата из функции нужно вставлять код объединения ячеек.
11. spezc 782 30.06.15 15:18 Сейчас в теме
(10) ну тогда смотрите процедуру этой кнопки, смотрите код, который программно формирует СКД и вот там вставляйте свой кусок, который обрабатывает выходной ТабличныйДокумент
12. vendim 24 30.06.15 15:46 Сейчас в теме
(11) spezc, Нашёл. После вызова функции формирования табличного документа (к этому моменту он уже сформирован и выведен) вставил заветную примочку:
	ТабДок = ОтчётОбъект.СформироватьОтчётПоДокументамНаСервере(); // вызов функции формирования отчёта

	Если ТабДок.НайтиТекст("Сумма") <> Неопределено Тогда          // примочка
		ИмяЯчейки 	= ТабДок.НайтиТекст("Сумма").Имя;
		ДлинаИмени 	= СтрДлина(ИмяЯчейки);
		ПозицияС 	= Найти(ИмяЯчейки,"C");
		НКолонки 	= Сред(ИмяЯчейки, 2, ПозицияС-2);
		НСтроки 	= Сред(ИмяЯчейки, ПозицияС+1, ДлинаИмени-ПозицияС);
		Область 	= ТабДок.Область(Число(НСтроки)-1, Число(НКолонки), Число(НСтроки), Число(НКолонки));
		Область.Объединить();
	КонецЕсли;
Показать

Код отрабатывает, ошибки не появляются, но в табличном документе ячейки так и остаются разъединёнными. Может после команды объединения надо каким-то образом обновить ТабДок. Но такого метода не нашёл. Попробовал перенести примочку в саму функцию перед выводом или после вывода - одна халва.
13. spezc 782 30.06.15 15:51 Сейчас в теме
(12) а отладчик что говорит? в конструкцию если заходит вообще? область находится?
14. vendim 24 30.06.15 15:54 Сейчас в теме
(13) spezc, Да, отладчик проходит как надо, позиции ячеек вычисляются замечательно, на Область.Объединить() ничто не ругается. А результат не меняется. Может надо поменять какие-нибудь общие свойства табличного документа? Защита и ТолькоПросмотр ситуацию не меняют.
8. spezc 782 30.06.15 14:25 Сейчас в теме
а что значит выбор вариантов программный? может у вас и формирование отчета тоже программное (в этом случае конечно ПриКомпоновкеРезультата вызываться не будет)?
15. spezc 782 30.06.15 16:01 Сейчас в теме
	Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Двойная,1); 
	
	//Объединяем в соответствии с параметрами координат
	Область = ТабличныйДокумент.Область("R"+Формат(К.НачальнаяСтрока, "ЧГ=")+"C"+(К.НачальнаяКолонка)+":R"+Формат(К.НачальнаяСтрока+КоличествоСтрок-1, "ЧГ=")+"C"+(К.НачальнаяКолонка+К.Номер-1));	
    Область.Объединить();
	Область.ГраницаСнизу = Линия;


мне кажется R и C забыли
16. spezc 782 30.06.15 16:02 Сейчас в теме
а, у вас другой формат получения области. попробуйте все-таки с R и С
17. vendim 24 30.06.15 16:21 Сейчас в теме
(16) spezc, Спасибо огромное! Заработало! И сразу выявилась ошибка. :-) Перепутал при вычислении адреса ячейки строки с колонками. Правильный код:
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	ТабДок.ОтображатьСетку = Ложь;
	Если ТабДок.НайтиТекст("Сумма") <> Неопределено Тогда
		ИмяЯчейки 	= ТабДок.НайтиТекст("Сумма").Имя;
		ДлинаИмени 	= СтрДлина(ИмяЯчейки);
		ПозицияС 	= Найти(ИмяЯчейки,"C");
		НСтроки 	= Сред(ИмяЯчейки, 2, ПозицияС-2);
		НКолонки 	= Сред(ИмяЯчейки, ПозицияС+1, ДлинаИмени-ПозицияС);
		Область = ТабДок.Область("R"+Формат(Число(НСтроки)-1, "ЧГ=")+"C"+Формат(НКолонки, "ЧГ=")+":R"+Формат(НСтроки, "ЧГ=")+"C"+Формат(НКолонки, "ЧГ="));
		Область.Объединить();
		Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
		Область.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
	КонецЕсли;
	ТабДок.Показать();
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот