Данные надо в общем случае вынимать из таблиц BSIK + BSAK, т.к. на выбранную дату позиции Кредитора могут быть выровнены и оказаться в BSAK. Соответственно, инфонабор нужно делать с помощью ABAP кодировки, в структуру таблицы BSIK.
Отчёт - оборотно-сальдовая ведомость по Кредиторам - выводит начальное сальдо, обороты Дт/Кт и конечное сальдо.
Для Вашего случая его можно упростить, выбрав только нужные записи и их просуммировать...
в SQ02 в инфонаборе так выглядит код:
Code:
data:
BSIK type BSIK ,
BSAK type BSAK ,
it_data type standard table of BSIK with header line ,
it_data2 type standard table of BSAK.
field-symbols: <struc> type BSIK .
*-------------------------------------------------------------------*
* selection screen statements
*-------------------------------------------------------------------*
* (define your selection-screen here)
parameters sbukrs like BSIK-BUKRS default '1000'.
select-options sdate for BSIK-BUDAT.
select-options slifnr for BSIK-LIFNR.
select-options shkont for BSIK-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 BSIK into table it_data
where BSTAT in ('','A','B','D')
and LIFNR in slifnr
and BUDAT <= sdate-high
and HKONT in shkont
and BUKRS = sbukrs.
select * from BSAK into table it_data2
where BSTAT in ('','A','B','D')
and LIFNR in slifnr
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 LIFNR HKONT BUDAT.
if f_only_s = 0.
* проставим строчки с сальдо
data cLIFNR like BSIK-LIFNR.
data cHKONT like BSIK-HKONT.
data cDMBTR like BSIK-DMBTR.
data cLIFNRnew like BSIK-LIFNR.
data cHKONTnew like BSIK-HKONT.
data cDMBTRnew like BSIK-DMBTR.
data kinserts type i value 0.
cLIFNR = ''. cHKONT = ''. cDMBTR = 0.
loop at it_data.
* пропустить вставленную строку с начальным сальдо
if cLIFNR <> it_data-LIFNR
or cHKONT <> it_data-HKONT.
cLIFNRnew = it_data-LIFNR.
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.
* delete it_data index sy-tabix.
* kinserts = kinserts - 1.
else.
cDMBTRnew = 0.
endif.
if cLIFNR <> '' and cHKONT <> ''.
it_data-LIFNR = cLIFNR.
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 = ''.
insert it_data index sy-tabix.
* if sy-tabix = 1. f_bypass = 1. endif.
kinserts = kinserts + 1.
endif.
cLIFNR = cLIFNRnew.
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.
* delete it_data index sy-tabix.
* kinserts = kinserts - 1.
endif.
endif.
endloop.
* вставим последний итог
it_data-LIFNR = cLIFNR.
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 = ''.
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>.
*loop at it_data into <struc>.
move-corresponding <struc> to BSIK .
* !! the following comment MUST NOT BE CHANGED !!
*<QUERY_BODY>
endloop.