Показать сообщение отдельно
Старый 15.02.2008, 14:34   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,712 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вариант решения подобных задач сильно облегчающий жизнь разработчика:

В файле шаблона Excel делаются прямые ссылки на другой лист. Т.е. напрямую в ячейках второго листа пишется нечто вроде: Лист1!A1

Сами же данные забрасываются на первый лист. Либо в специальные ячейки, либо, сплошным списком.

Если заброс данных идет сплошным списоком, то адресация на втором листе делается не к конкретной ячейке, а при помощи поисковых функций самого Excel. Например:

=ЕСЛИ(ЕНД(ВПР($B27;Отгрузка!$A:$N;3;ЛОЖЬ));0;ВПР($B27;Отгрузка!$A:$N;3;ЛОЖЬ))

Здесь ищется значение на листе с именем "Отгрузка" при помощи функции ВПР() по ключу из столбца "B". Функция ЕСЛИ(ЕНД(),0,ВПР()) нужна для того, чтобы подавить вывод значения #Н/Д, если по указанному ключу ничего не найдено.

Разумеется сам шаблон Excel получается значительно бОльшего размера (в байтах), его сложнее модифицировать и несколько больше времени тратится на его открытие (идет обновление связей при открытии). Однако имеем следующие преимущества:
  1. Вся логика форматирования отчета (что и где расположить) целиком находится в файле Excel. Одно место для внесения модификаций. Причем это можно доверить самим пользователям.
  2. Подготовка данных и их выгрузка в Excel существенно облегчается. На порядки! Код формирования такого отчета в Axapta становится "прозрачным" и легко модифицируемым.
  3. Пользователи могут видеть исходные данные, из которых получается результирующий отчет и, если необходимо, делать дополнительный анализ. Например, почему некие данные не отобразились в результате или отобразились не те данные. Упрощается "разбор полетов".