Вывод данных R/3 в шаблоны Word и Excel - User

advertisement
Вывод данных R/3 в шаблоны Word и Excel.
Для создания программы с выгрузкой данных в шаблон, необходимо:
1. Создать шаблон Word (Excel).
Шаблон имеет вид конечной формы (WYSIWYG - What You See Is What You Get).
Необходимо только пометить места вставки данных из R/3 при помощи закладки
(например закладка «Дата», см. приложение 1) и (или) метки (уникального слова, фразы,
например «[кто]», см. приложение 1).
Для подстановки многострочных данных необходимо создать одну строку таблицы и
присвоить всей строке имя закладки (переменной Excel), например «Строка» (см.
приложение 1). В ячейках строки необходимо вписать уникальные метки, например [1],
[2]… и т.д.
Меткой может быть любой текст, уникальный в пределах данной закладки. Т.е. он
наверняка не должен встречаться в обычном тексте закладки, и во вставляемых в нее
данных.
2. Загрузить шаблон в R/3 при помощи стандартной транзакции
SMW0.
- на 1-м экране выбрать «Двоичные данные для WebRFC-приложений»;
- на 2-м экране задать необходимый класс разработок ($TMP для локальной);
- на 3-м экране, используя меню «Создать», загрузить файл шаблона, как двоичный (BIN),
присвоив «Имя объекта» и «Описание».
3. Создать АБАП-программу, формирующую данные для
подстановки в шаблон.
3.1 Данные необходимо поместить во внутреннюю таблицу, имеющую структуру
типа ZWWW_VALUES, где:
VAR_NAME Имя закладки (переменной Excel), пусто для всего документа
(активного листа Excel)
VAR_NUM
Порядковый номер строки (только для табличной части)
FIND_TEXT Метка, уникальный текст для поиска/замены (пусто, для присвоения
всей закладке)
VAL_TYPE Тип присваиваемого значения VALUE:
пусто - обычный текст;
‘V’ – (Variable) имя другой закладки (переменной Excel), которая
скопируется в эту и потом удалится;
‘M’ – (Macros) имя макроса для обработки закладки (переменной
Excel). Макросу передается параметр типа Range, обозначающий
текущую обрабатываемую закладку (Sub MyMacros(R as Range));
‘D’ – (Delete) удаление закладки (переменной Excel)
Следующие типы только для Excel:
‘R’ – (Row) строка целиком, с символом табуляции (09) для
разделения полей (для ускорения выгрузки);
‘T’ – (Table) таблица целиком, с символом табуляции (09) для
VALUE
разделения полей и возвратом каретки (0D,0A) для разделения строк
(для ускорения выгрузки);
Значение в соответствии с типом VAL_TYPE
Общая формула ее заполнения такова:
- В пределах закладки VAR_NAME ищется метка FIND_TEXT и заменяется значением
VALUE типа VAL_TYPE. Если поле закладки VAR_NAME не заполнено, поиск метки
производится в пределах всего документа (листа Excel). Если поле метки FIND_TEXT не
заполнено, производится замена всей закладки (переменной Excel);
- При заполнении табличной части, закладка VAR_NAME используется для обозначения
всей строки таблицы, полю VAR_NUM присваивается порядковый номер строки
таблицы, а метка FIND_TEXT для обозначения части строки (столбца, ячейки, части
текста в ячейке).
К одной закладке (VAR_NAME) можно одновременно применить несколько значений
(VALUE) разного типа (VAL_TYPE), например:
‘V’ – для изменения вида (стиля, шрифта, цвета…) закладки, затем пусто – для ее
заполнения текстовым значением и ‘M’ для ее последующей обработки макросом.
Порядок исполнения типов именно такой и не зависит от порядка заполнения внутренней
таблицы.
Типы ‘M’ и ‘V’ применяются только для всей закладки, поэтому поле метки
FIND_TEXT должно быть пустым.
3.2 Вызвать функциональный модуль ZWWW_OpenForm.
Модуль предназначен для выгрузки файла шаблона на рабочую станцию и заполнения его
данными.
Обязательные параметры модуля:
FORM_NAME
имя объекта, присвоенное шаблону в транзакции SMW0
Необязательные параметры модуля:
IT_VALUES
Имя внутренней таблицы типа ZWWW_VALUES. Если не
задано, то выгрузится незаполненный шаблон.
FILE_NAME
Имя файла (включая путь), куда будет выгружен заполненный
шаблон. Если не задан, то будет сгенерировано случайное
уникальное имя в папке для временных файлов Windows.
PRINTDIALOG По умолчанию ‘X’. Будет показан диалог печати (выбор принтера
и его параметров), при выходе из которого, после печати или
отмены, заполненный шаблон будет закрыт и удален с диска.
OPTIMIZE
По умолчанию 300. Используется для указания количества
записей таблицы IT_VALUES, при превышении которого будет
использован VBA-макрос для ускорения заполнения шаблона.
PROTECT
Защита выходного документа от изменения.
3.3 При необходимости использовать функциональный модуль
ZWWW_Prepare_Table.
Модуль предназначен для облегчения формирования табличной части шаблона из данных
произвольной внутренней таблицы. Используется до вызова ZWWW_OpenForm, можно
неоднократно для формирования нескольких табличных частей в шаблоне.
Обязательные параметры модуля:
LINE_NAME
Имя закладки строки табличной части
IT_ANY_TABLE Имя произвольной внутренней таблицы с данными
IT_VALUES
Имя внутренней таблицы типа ZWWW_VALUES, куда будут
данные из IT_ANY_TABLE в необходимой для модуля
ZWWW_OpenForm форме.
Необязательные параметры модуля:
IT_FIELDS_CATALOG Имя внутренней таблицы типа ZWWW_FIELD_CATALOG с
описанием полей таблицы IT_ANY_TABLE, где:
- FIELD_NAME = имя поля таблицы IT_ANY_TABLE;
- FIND_TEXT = метка в закладке LINE_NAME, которая
будет заменена значением поля (FIELD_NAME) таблицы
IT_ANY_TABLE;
- FIELD_HEADER = заголовок, текстовое описание поля
FIELD_NAME в заголовке таблицы, если задан параметр
HEADER_NAME.
HEADER_NAME
Имя закладки заголовка табличной части. Строка, в которой
вместо имен полей таблицы IT_ANY_TABLE (или их
заменителей FIND_TEXT, заданных в IT_FIELDS_CATALOG),
будут подставлены их описания FIELD_HEADER из таблицы
IT_FIELDS_CATALOG.
VAL_TYPE
Пусто для текста (‘R’ или ‘T’ для ускорения вывода в Excel, см.
п. 3.1).
Приложение 1. Пример шаблона WORD.
Кто: [кто]
Дата:
[1]
[1]
[2]
[2]
Кто: [кто]
Список кредиторов:
LIFNR
LAND1
NAME1
SORTL
TELF1
Приложение 1.2 Пример макроса в шаблоне WORD.
Sub MacrosExample(R As Range)
With R.Cells(4).Range
.Text = "Пример отработки макроса шаблона MacrosExample"
.Font.Color = wdColorRed
End With
End Sub
Приложение 2. Пример отчета в WORD:
REPORT ZWWW_SAMPLE .
Data:
it_Val type standard table of ZWWW_VALUES with header line,
SysDate(10).
Write sy-datum to SysDate. "Системная дата в текстовый формат
********************************************************************
* Заполним нетабличную часть
********************************************************************
******************************
* Метод поиска-замены
it_Val-Var_Name = ''. "будет производиться поиск во всем документе,
it_Val-Var_Num = 0.
"не надо
"номер строки, для нетабличных частей заполнять
it_Val-Find_Text = '[кто]'. "уникальный текст, который будет найден и
"заменен на следующее значение
it_Val-Value = sy-uname. "значение в текстовой форме (имя пользователя)
Append it_Val.
"Достоинства метода:
"- наглядность шаблона
"- уникальный текст будет заменен везде, где найдется (см. [кто] вверху
" и внизу листа)
"
******************************
* Метод присвоения переменной
Clear it_Val.
it_Val-Var_Name = 'Дата'. "Имя закладки
it_Val-Find_Text = ''.
"
it_Val-Value = SysDate.
"Системная дата
Append it_Val.
"Недостатки:
"- шаблон получается менее наглядным
********************************************************************
* Заполним табличную часть
********************************************************************
Define SetLine.
Clear it_Val.
it_Val-Var_Name = &1. "имя закладки строки таблицы
it_Val-Var_Num
= &2. "номер строки таблицы
it_Val-Find_Text = &3. "искомый текст
it_Val-Val_Type = &4. "тип значения
it_Val-Value
= &5. "значение
Append it_Val.
End-of-Definition.
SetLine 'Строка' 1 '[1]' '' 'Мыло'.
SetLine 'Строка' 1 '[2]' '' '10'.
*для 2-й строки используем закладку СтрокаКурсив в качестве шаблона
SetLine 'Строка' 2 ''
'V' 'СтрокаКурсив'.
SetLine 'Строка' 2 '[1]' '' 'Порошок'.
SetLine 'Строка' 2 '[2]' '' '4'.
SetLine 'Строка' 3 '[1]' '' 'Щетка'.
SetLine 'Строка' 3 '[2]' '' '1'.
********************************************************************
* Использование вспомогательного модуля 'ZWWW_PREPARE_TABLE' для
* облегчения вывода данных из внутренних таблиц
********************************************************************
"Примечание:
"Все данные внутренней таблицы конвертируются в текстовый формат в
"соответствии с их типами. Числовые данные представляются с разделителем
"десятичной части в соответствии с текущей настройкой Windows.
Data:
Begin of it_LFA1 occurs 10,
*
MANDT type LFA1-MANDT,
LIFNR type LFA1-LIFNR,
LAND1 type LFA1-LAND1,
NAME1 type LFA1-NAME1,
SORTL type LFA1-SORTL,
ANRED type LFA1-ANRED,
ERDAT type LFA1-ERDAT,
ERNAM type LFA1-ERNAM,
TELF1 type LFA1-TELF1,
End of it_LFA1.
* Выберем 10 записей кредиторов
Select *
into corresponding fields of table it_LFA1
from LFA1
up to 10 rows.
Call function 'ZWWW_PREPARE_TABLE'
EXPORTING
LINE_NAME
= 'Строка2' "имя строки таблицы в шаблоне
VAL_TYPE
= ''
TABLES
IT_ANY_TABLE = it_LFA1 "внутренняя таблица с данными
IT_VALUES
= it_Val. "таблица для 'ZWWW_OPENFORM'
SetLine 'Строка2' 3 '' 'M' 'MacrosExample'.
*
********************************************************************
* Заполнение шаблона подготовленными данными и вывод на экран
********************************************************************
Call function 'ZWWW_OPENFORM'
EXPORTING
FORM_NAME
= 'ZWWW_SAMPLE_WORD'
PrintDialog = ''
TABLES
IT_VALUES
= it_Val.
Download