Вывод данных 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.