Заморочек конечно много. Речь идёт о том если вдруг через год в отчете появиться новая колонка
например была шапка(отчет свободный):
| Объём работ |
| руб.| % |
стало:
| Объём работ |
| руб.| % |мес |
или
|Объем__работ | Итого: |
|мес|Тип работ|руб. | % |
С колонками проблем нет, а вот текстовое поле "Объём работ" допустим мне не известно и не известно какие колонки оно объеденяет. Может также добавиться и новое текстовое поле объединяющее несколько колонок, здесь даже имя его не узнаю. А нужно перенести шапку

Это все в том случае если добавлять изменения только на самой форме отчета, в SQL запросе и в скрипте максимум добавлять новый элемент в массив колонок(массив этот задаёться в отдельной функции в которой достаточно изменить массив и все заработает по новому)
И не использовать шаблон. (С шаблоном конечно лучше, но увы...)
все решаемо в целом, лишь одно стоит на пути, не могу программно понять какие колонки объеденяет текстовое поле.
Если что не понятно попробую рассказать.