Если бы это было бы не учебное задание - то я бы все-таки порекомендовал бы сделать шаблон с двумя макросами.
Первый макрос получает массив данных и кол-во столбцов, после чего "раскидывает" массив по ячейкам.
Второй макрос получает перечень столбцов и диапазон с данными и пытается группировать (объединять по строкам) данные в порядке, представленном в перечне столбцов (например, 1, 3, 4, 2).
Фраза "Дата С .. По.." хорошо выводится в именованную ячейку. Для этого можно воспользоваться методом findRange("ИмяЯчейки").value2("Значение");
А макрос вызывается с помощью класса ComDispFunction следующим образом:
X++:
dispFunction = new COMDispFunction(m_comDocument, #dispFunctionName, COMDispContext::Method);
dispFunction.call();
Плюс такого подхода - скорость. Минус такого подхода - невозможность использования ячеек с формулами в шаблоне (они будут перезатерты данными из АХ)