Макрос для выгрузки данных из sap в excel
Шаблоны Microsoft Excel можно сохранить в SAP системе и назначить эти шаблоны отчетам или запросам как опцию процесса сохранения. Стандартная система SAP ERP HCM включает в себя репозиторий документов - Business Document Service (BDS). Пользовательские Excel шаблоны можно легко сохранить в BDS с помощью простого интерфейса и существующего набора утилит.
Ключевое понятие |
Большинство пользователей SAP ERP HCM знакомы со средой SAP List Viewer (ALV) и функциональностью, которые она предоставляет для сохранения отчетов и запросов в Excel. Одна из таких функциональностей называется Excel Inplace view. Создавая пользовательские шаблоны в Excel Inplace view, пользователи могут получать преднастроенные шаблоны с колонтитулами, логотипами, оформлением страниц и печатать формы напрямую из варианта отчета. |
В Microsoft Excel существует большое количество возможностей для форматирования отчетов и запросов, выгружаемых из системы SAP. Регулярный экспорт отчетов из системы SAP с последующим форматированием в Microsoft Excel может стать утомительным и однообразным для пользователей, которым требуется регулярно предоставлять отчеты утвержденного и постоянного формата для публикации. Я хочу показать простой способ, как сохранить эти полностью отформатированные шаблоны Excel внутри SAP системы и привязать их к требуемым отчетам или запросам. Это позволит в последующем воспроизводить отчеты достаточно просто.
У вас уже есть учетная запись?
Обсуждения 2 Написать комментарий
Комментарий от Виталий Поцелуев 31 марта 2012, 21:13
На каждом проекте появляется вопрос: как реализовать в системе все отчеты, которые необходимы бизнесу? Путем длительных переговоров консультанты убеждают пользователей в том, что большинство отчетов можно получить с помощью оперативных запросов. Поверив консультантам, пользователи «запускают» оперативные запросы и получают в отчетах « унылые» цифры. В статье описывается простой способ, который позволит «раскрасить» отчеты и сделать их нагляднее. Почему бы небольшими усилиями не сделать пользователей счастливее?
Комментарий от Борис Костенко 18 июня 2012, 01:38
В статье говориться, что при подготовке шаблона обычно скрываются ненужные стандартные листы из (например, Format, Header, RawData, Pivot и Sub1. Sub10, что является распространенной практикой, так как данные листы должны именно быть скрыты, поскольку их удаление или переименование приведёт к невозможности выгрузки данных. Присутствие стандартных листов является обязательным, хотя бы в скрытом виде.
При создании шаблонов некоторые консультанты применяют следующий трюк: скрываются все стандартные листы, а вместо них создают собственные, в которых прописывают формулы, ссылающиеся на скрытые стандартные листы (RawData или Format). Этот способ позволяет без использования макросов менять форматирование и выполнять несложные преобразования с помощью формул MS Excel.
Использование макросов позволяет не только выполнять произвольное форматирование, но и динамически создавать новые листы в Excel, агрегировать данные и реализовывать довольно сложную логику обработки на локальном компьютере пользователя. Перед завершением работы макроса рекомендуется добавлять удаление всех скрытых листов, оставляя лишь содержащие данные, используемые в формулах.
Во-вторых, если при попытке изменения шаблона появляется стандартная ошибка Excel «Ячейка или диаграмма защищена от изменений», то, скорее всего, шаблон был открыт в режиме просмотра. Для перехода в режим изменения достаточно выбрать пункт «Изменить документ» из контекстного меню в дереве документов. По двойному щелчку документ будет открыт в режиме просмотра.
На проектах внедрения отчетности с использованием хранилища данных SAP BW многим архитекторам и консультантам приходится решать задачи подготовки больших форматированных отчетов: разнообразных ведомостей, выписок и т.п. Такие отчеты обычно характеризуются:
- Нестандартными относительно инструментов SAP требованиями к форматированию;
- Фиксированным числом столбцов;
- Значительным количеством столбцов и строк (соответственно, десятки и десятки тысяч и более);
- Требованием наличия Excel-представления;
- Требованием к времени выполнения не более нескольких минут
Консультантом создается рабочая книга BW-BEx, которая содержит один или несколько BW-BEx-отчетов. Отчеты выгружаются на отдельные листы этой книги, которые обычно скрывают от пользователей. Видимым оставляют лишь один лист книги, содержащий целевую форму отчета с необходимым форматированием.
Работа пользователя с таким отчетом выглядит следующим образом:
- в зависимости от используемого Excel-инструмента SAP BW, пользователь запускает BW-BEx Analyzer или SBOP Analysis for Office, подключается к серверу SAP BW, выбирает из роли рабочую книгу и запускает ее на выполнение.
Через несколько секунд (иногда – десятка секунд) появляется селекционный экран.
На экране пользователь выбирает значения параметров. Например, год-месяц, балансовую единицу, группу материала и т.п. Затем нажимает кнопку «выполнить». - Теперь настала очередь «поработать» для SAP BW: все BW-BEx-отчеты рабочей книги выполняются последовательно, отчет за отчетом, передавая на рабочие листы Excel свои данные.
- После получения в Excel данных каждого отчета запускается VBA-макрос. Логика работы макроса такова, что он ничего не делает, пока данные всех отчетов не будут получены на Excel-листы.
- Когда данные последнего отчета поступили на Excel-лист, VBA-макрос выполняет основную работу по подготовке форматирования отчета.
- Когда VBA-макрос завершил работу, пользователь может увидеть результат отчета в своем Excel.
Чего только не придумывают консультанты, чтобы, оставаясь в рамках стандартного подхода, качественно сделать-таки большой отчет. Но почти всегда ничего не получается. «Почти» означает компромиссы, послабления в требованиях. Бизнес-пользователи либо соглашаются применять более ограничивающие фильтры и отчет возвращает меньше данных, либо ждать выполнения подольше, либо вручную сводить несколько фрагментов отчета в один.
Чтобы все-таки не говорить клиенту «нет, мы не можем этого реализовать при таких требованиях», необходимо для начала сделать правильные выводы из очевидного: каждый инструмент предназначен для своей задачи.
Инструменты BW BEx Analyzer и SBOP Analysis for Office в общем случае не предназначены для реализации эффективных отчетов с большим количеством ячеек, с числом около 750000 и более (см SAP-ноту 1040454). Поэтому, используя модель данных SAP BW, надо выбрать другой инструмент, другой подход в реализации. Тогда решение не только обязательно получится, но и будет при этом эффективным.
Последние версии SAP Netweaver, SAP BW и HANA внесли большее разнообразие подходов публикации BW-данных в Excel, без использования BW BEx. Можно упомянуть такие:
- Подключение Excel через OData-сервисы напрямую к SAP Netweaver или даже к SAP HANA
- Подключение Excel к SAP HANA, как к базе данных, напрямую, через MDX
Я хочу рассказать о подходе, гораздо менее требовательном к новизне версий используемых продуктов, и в чем-то менее сложным. Речь идет о публикации данных отчетов в шаблон Excel-документа через OLE-интерфейс. Excel-шаблон при этом хранится в репозитории BDS на стороне SAP BW.
Преимущества подхода с OLE очевидны:
- Работает на любых современных версиях продуктов SAP и Microsoft Excel
- Никаких ограничений на объемы данных в отчете, кроме собственных в Excel
- Обеспечивает максимальную производительность передачи данных от сервера BW в Excel через OLE. Пример: выборка 525000 ячеек (70 колонок на 7500 строк) передается за 7 сек.
- Подготовка данных на «сервере BW» выполняется в ABAP-отчете, который, собрав выборку во внутреннюю таблицу, передает ее через OLE в Excel-шаблон, полученный из BDS.
- Централизованное (в одной BW-системе) ведение всех объектов, релевантных для отчета: шаблон Excel, модель данных BW, программа ABAP для заполнения шаблона.
- Соответствие обычным SAP-стандартам по разграничению доступа, разработке, транспорту настроек и пр.
Сложности в ABAP могут возникнуть при получении данных из модели BW. Возможные варианты: вызов BEx-отчета в ABAP, вызов FM RSDRI_INFOPROV_READ, SQL-SELECT по таблицам модели данных. Но это обычно есть в арсенале навыков опытного BW-консультанта. Глубокие знания программировании ABAP понадобятся, если возникнет потребность еще более ускорить работу кода по подготовке данных за счет тюнинга ABAP-программы или даже распараллеливания вычислений. Последнее, кстати, невозможно архитектурно в подходе с рабочими книгами BW BEx.
Вкратце, порядок создания отчета с использованием подхода с OLE следующий.
Продолжаю инструкцию по использованию LSMW — Системы Переноса данных из Исторических Систем.
В прошлом посте я рассмотрел метод загрузки данных с помошью стандартных (преднастроенных для создания проекта загрузки) объектов. На этот раз я хочу рассмотреть медод, при котором мы как бы записываем последовательность наших действий с транзакцией, после чего смэппливаем поля с полями подготавливаемого файла-шаблона. Также записать можно и последовательность действий, при которой мы не подгружаем данные из файла-шаблона, например, последовательную смену статусов, переключение между экранами и пр.
Ознакомьтесь с прошлой инструкцией до шага 1.
Вот теперь же, на шаге №1, мы должны выбрать пункт Batch Input Recording и перейти нажатием кнопки «Горы, солнце» в менеджер записей.
Создаём запись.
Выбрав транзакцию, для которой мы хотим записать «макрос» (в моём случае — это ie02 «Изменение Единицы Оборудования»), перед нами открывается, собственно, соотв. транзакция. Выбираем номер ЕО, выходим на начальный экран.
Допустим, мне нужно поменять «Инвентарный номер». Я вбиваю в соотв. поле какое-то значение (у меня то «хабраномер»), жму Enter (проверить, не выскочит ли какая ошибка; м.б. Формат поля числовой, а я об этом забыл). Ошибки нет, новый инвентарник принят.
Допустим, я также хочу изменить наименование «Помещения» на вкладке «Местоположение». Перехожу на эту вкладку, вбиваю в поле «Помещение» значение (у меня «Цех №3»).
Для примера достаточно. Жму «SAVE». И вот тут система мне показывает следующий экран:
На нём мы видим экраны и поля на них, которые я видел во время записи «макроса».
SAPMIEQ0 0100 – это первый экран, где я вбивал номер ЕО, в карточку которой и проваливался позднее. На подсвеченной белым области стоит сейчас номер ЕО, а красноватая область — пуста. Нужно дважды кликнуть на красненькую область.
«Значение по умолчанию» (Default value) очищаем; там и стоял номер ЕО по умолчанию. А нам не нужно по умолчанию. Нам нужно подавать на вход пакетнику из файла шаблонов уйму разных ЕО. В первое поле «Name» пишем EQUNR – техническое имя поля ЕО (его мы видим чуть выше, в «Имя поля»). Во второе поля «Имя» пишем какое-то название поля «для себя», например, «Номер ЕО» или повторяем техническое имя поля.
Это же проделываем и с остальными полями, которые подаём программе на вход. Если же нам нужно, скажем, во всех ЕО поменять в каком-то поле значение на некое, одинаковое для всех, то в этом случае мы как-раз и используем Default value, чтобы не подавать его N раз в фале-шаблоне.
Помните, когда я ввёл «Хабраномер» в поле «Инвентарный номер», я нажимал Enter? Так вот из-за этого я получил ещё одну копию подэкрана SAPMIEQ0 0101 (это основной экран ЕО, первая вкладка «Общее»). Здесь мне уже не нужно повторно обозначать наименования полей, поэтому нам нужно просто стереть наличествующие на дубликате экрана поля. Для этого позиционируемся на поле, жмём указанную на скрине кнопку:
Так мы прописываем соответствие полей там, где нужно, а там, где не нужно — удаляем с экрана. Также, например, мы удаляем поле «Название ЕО» на множестве экранов, на котором оно опять и опять появляется после перехода на другую закладку. Иными словами, наименования ЕО (если нам нужно его менять, подавая в шаблоне) — поля ITOB-SHTXT (у меня его значение «Habratest») — нам хватит указать единожды, на первом из встречающихся подэкране SAPMIEQ0 0101. В конечном счёте всё сохраняем.
У нас появляется запись:
… которую мы выбираем на первом экране первого шага:
Собственно, все последующие шаги аналогичным шагам предыдущей инструкции. Успехов!
By using CL_XLSX_DOCUMENT (available from 2008), it is easy to load file, workbook, sheets, rows and columns. A good example code can be found within class CL_EHFND_XLSX(available on ABAP AS 752 SP-Level 0004, Software Component S4CORE Release 102, SP 4.).
And the dynamic structure is used in this report. The code style is what I would like to present also.
User Interface
Main Functionality
Download table content into local excel file (xlsx)
Input existing table , e.g. Table Name T000, File Full Path: c:\demo\t000.xlsx
Change the value of non-key column in xlsx file.
Upload local excel file (*.xlsx) into table
Input existing table , e.g. Table Name T000, File Full Path: c:\demo\t000.xlsx
Empty row will be skip, and table entries will be modified (Insert or Update). It is not possible to delete existing table entry.
Exception Handling
You will get exception of structure infliction if xlsx file is not for that table.
Local Class Definition
Thank you for your interest in XLSX2ABAP and ABAP2XLSX. Example code is tested on SAP_BASIS 755, S4CORE 105.
Assigned Tags
Interesting. Does SAP plan to propagate and extend the CL_XLSX_DOCUMENT? Currently it is not much used and known.
FIY: There is quite successful project, which is already named "ABAP2XLSX".
Right click and copy the link to share this commentThanks a lot. CL_EHFND_XLSX is build on top of CL_XLSX_DOCUMENT. This is my understanding.
Right click and copy the link to share this commentWhat means "propagate and extend"? CL_XLSX_DOCUMENT is available since Netweaver 7.02 and many people used it for a long time.
Right click and copy the link to share this commentCL_EHFND_XLSX is not available on ABAP AS 7.52 SP03.
Right click and copy the link to share this commentIt can be found on ABAP AS 752 SP-Level 0004.
Software Component S4CORE Release 102, SP 4.
Right click and copy the link to share this commentI am really confused.
Firstly, as mentioned in the last comment, on what release does CL_EHFND_XLSX become available? Bear in mind that something made available internally within SAP in 2014 may not be available to customers until five or six years later.
Secondly are you saying that the functionality ABAP2XLSX provides is going to be re-invented as standard classes inside standard SAP?
For the last few years once a month on average someone from outside of SAP posts a blog on SCN describing a new way they have come up with to do a limited subset of what ABAP2XLSX can do.
This would be because they have never heard of it, and it is quite possible many within SAP itself have never heard of it either.
Right click and copy the link to share this commentIt can be found on ABAP AS 752 SP-Level 0004.
Software Component S4CORE Release 102, SP 4.
Right click and copy the link to share this commentDo you know if any downporting is planned for CL_EHFND_XLSX (eg via sapnote)?
99% of the developers here don't have access to that release. 🙁
Right click and copy the link to share this commentI'm just as confused as Paul Hardy - every month someone posts a blog on SCN reinventing ABAP2XLSX for some reason. Now that a blog is posted by an SAP employee this sends quite a confusing message.
Availability of classes is not driven by year. It's not like every year each SAP customer gets a box of presents at Christmas with all the new classes and goodies from SAP. Availability is driven by the release and support pack level. We're on ABAP 7.31 and don't have class CL_EHFND_XLSX, for example.
And I also would like to know if this means that SAP will be offering ABAP2XLSX as part of standard?
P.S. I'm getting "you don't have rights" when trying to open the link at the end of the blog. When posting on SCN, please make sure to use only what is open to general population and not just at SAP internally.
Right click and copy the link to share this commentI update the info of ABAP version accordingly. Row limits help link is removed also.
Right click and copy the link to share this commentIt's pretty good !!
I have some question for you to use this method :).
Can I set cell color or cell width when file export(ITAB to xls) ??
( I found XLSX_DOCUMNT's internal content table(MS_SHEET_DATA).
But, i don`t know how to change cell style ).
Right click and copy the link to share this commentis it possible to add the custom properties for excel\word document using
Читайте также: