Slavik написал(а):
не могу найти как дописать надо,если кто-то знает помогите плз исправить программу
Из солидарности к "бродильно-лагерному цеху".

Предлагаю не самое элегантное, но довольно простое решение. Вся имеющая функциональность остается, но на selection screen добавляем пимпочку - "Отчет в Excel". При нажатии производится выборка данных (по уже имеющемуся алгоритму) во внутреннюю табличку. Потом табличка сортируется как надо (вид договора, цех и т.д.) и в цикле по табличке (LOOP) брутально заполняются клетки для Excel с подзаголовками и прочая. Потом отчет напрямую посылается в Excel через это, как его, OLE Automation.
Вот очень примитивный прототип (набросала по-быстрому на базе имеющегося, но не моего, репорта):
Code:
include ole2incl.
data: obj_excel type ole2_object.
data: obj_books type ole2_object.
data: obj_book type ole2_object.
data: obj_cell type ole2_object.
data: begin of itab_data occurs 0,
level1,
level2,
field1,
field2,
end of itab_data.
data: l_row type i.
<выборка данных в itab_data>
create object obj_excel 'EXCEL.APPLICATION'.
call method of obj_excel 'WORKBOOKS' = obj_books.
call method of obj_books 'ADD' = obj_book.
l_row = 1.
sort itab_data by level1 level2.
loop at itab_data.
at first.
perform fill_cell using l_row 1 'This is the report header'.
l_row = l_row + 1.
endat.
at new level1.
* First level header
perform fill_cell using l_row 1 itab_data-level1.
l_row = l_row + 1.
endat.
at new level2.
* Second level header
perform fill_cell using l_row 1 itab_data-level2.
l_row = l_row + 1.
endat.
* Details
perform fill_cell using l_row 1 itab_data-field1.
perform fill_cell using l_row 2 itab_data-field2.
l_row = l_row + 1.
endloop.
form fill_cell using p_row p_col p_value.
call method of obj_excel 'CELLS' = obj_cell
exporting #1 = p_row #2 = p_col.
set property of obj_cell 'VALUE' = p_value.
endform.
Здесь в табличке itab_data поля level1 и level2 означают уровни, по которым будет разбита табличка. Когда меняется значение level1 или level2, то печатается соотв. подзаголовок. Например, если у вас в табличке:
договор1 цех1 Вася Пупкин
договор1 цех2 Витя Пупкин
договор1 цех2 Сеня Пупкин
договор2 цех1 Вова Пупкин
То на выходе будет:
This is the report header
договор1
цех1
Вася Пупкин
цех2
Витя Пупкин
Сеня Пупкин
договор2
цех1
Вова Пупкин
Подобным образом можно добавить и суммы, и все, что угодно. Обратите внимание, что структура самой таблички важна для правильной работы AT ... ENDAT. Естественно, уровней может быть больше и даже не обязательно использовать AT, это я просто идею иллюстрирую.