Да я смотрю, тема-то актуальная
Выкладываю текст программы сбора данных для SAP query.
Один из первых абаперских опытов, не судите строго
Code:
REPORT Z_BSID_BSAD. "RSAQDVP_TEMPLATE .
*
*---------------------------------------------------------------------*
* declarations
* (insert your declarations in this section)
*---------------------------------------------------------------------*
data:
BSID type BSID,
it_data type standard table of BSID with header line,
it_data2 type standard table of BSAD.
field-symbols: <struc> type BSID .
*-------------------------------------------------------------------*
* selection screen statements
*-------------------------------------------------------------------*
* (define your selection-screen here)
parameters sbukrs like BSID-BUKRS default '1000'.
select-options sdate for BSID-BUDAT.
select-options skunnr for BSID-KUNNR.
select-options shkont for BSID-HKONT.
*parameters f_only_s type i.
data f_only_s type i value 0.
* !! the following comment MUST NOT BE CHANGED !!
*<QUERY_HEAD>
*-------------------------------------------------------------------*
* read data into IT_DATA
*-------------------------------------------------------------------*
* (select your data here into internal table IT_DATA)
select * from BSID into table it_data
where BSTAT in ('','A','B','D')
and KUNNR in skunnr
and BUDAT <= sdate-high
and HKONT in shkont
and BUKRS = sbukrs.
select * from BSAD into table it_data2
where BSTAT in ('','A','B','D')
and KUNNR in skunnr
and BUDAT <= sdate-high
and HKONT in shkont
and BUKRS = sbukrs.
append lines of it_data2 to it_data.
*sort it_data by BUDAT.
sort it_data by KUNNR HKONT BUDAT.
if f_only_s = 0.
* проставим строчки с сальдо
data cKUNNR like BSID-KUNNR.
data cHKONT like BSID-HKONT.
data cDMBTR like BSID-DMBTR.
data cKUNNRnew like BSID-KUNNR.
data cHKONTnew like BSIK-HKONT.
data cDMBTRnew like BSIK-DMBTR.
data kinserts type i value 0.
cKUNNR = ''. cHKONT = ''. cDMBTR = 0.
loop at it_data.
* пропустить вставленную строку с начальным сальдо
if cKUNNR <> it_data-KUNNR
or cHKONT <> it_data-HKONT.
cKUNNRnew = it_data-KUNNR.
cHKONTnew = it_data-HKONT.
if it_data-BUDAT < sdate-low.
if it_data-SHKZG = 'H'.
cDMBTRnew = 0 - it_data-DMBTR.
elseif it_data-SHKZG = 'S'.
cDMBTRnew = it_data-DMBTR.
endif.
else.
cDMBTRnew = 0.
endif.
if cKUNNR <> '' and cHKONT <> ''.
it_data-KUNNR = cKUNNR.
it_data-HKONT = cHKONT.
it_data-DMBTR = cDMBTR.
it_data-BUDAT = sdate-low - 1.
it_data-SHKZG = 'A'.
it_data-BELNR = ''.
it_data-BUZEI = ''.
it_data-BLART = ''.
it_data-SGTXT = '<<<<< входящее сальдо >>>>>'.
it_data-BLDAT = ''.
insert it_data index sy-tabix.
kinserts = kinserts + 1.
endif.
cKUNNR = cKUNNRnew.
cHKONT = cHKONTnew.
cDMBTR = cDMBTRnew.
else.
" подсчёт суммы сальдо на нач.дату
if it_data-BUDAT < sdate-low.
if it_data-SHKZG = 'H'.
cDMBTR = cDMBTR - it_data-DMBTR.
elseif it_data-SHKZG = 'S'.
cDMBTR = cDMBTR + it_data-DMBTR.
endif.
endif.
endif.
endloop.
* вставим последний итог
it_data-KUNNR = cKUNNR.
it_data-HKONT = cHKONT.
it_data-DMBTR = cDMBTR.
it_data-BUDAT = sdate-low - 1.
it_data-SHKZG = 'A'.
it_data-BELNR = ''.
it_data-BUZEI = ''.
it_data-BLART = ''.
it_data-SGTXT = '<<<<< входящее сальдо >>>>>'.
it_data-BLDAT = ''.
kinserts = kinserts + sy-tabix + 1.
insert it_data index kinserts.
* удалим строчки из которых сложилось начальное сальдо + нулевые
loop at it_data.
if ( it_data-BUDAT < sdate-low
and it_data-SHKZG <> 'A' )
or ( it_data-DMBTR = 0 ).
delete it_data index sy-tabix.
kinserts = kinserts - 1.
endif.
endloop.
endif.
*------------------------------------------------------------*
* output of the data
* (this section can be left unchanged)
*------------------------------------------------------------*
loop at it_data assigning <struc>.
move-corresponding <struc> to BSID .
* !! the following comment MUST NOT BE CHANGED !!
*<QUERY_BODY>
endloop.