Уважаемы, извините что беспокою, но я уже сломал голову себе. Я сейчас впервые столкнулся с созданием экстрактора на ФМке. Пересмотрел уже кучу хаутушек и мануалов, но ничего не выходит. Через RSA3 всё работает ок, но в BW фулл и инициализация возвращают нули. Если не затруднит, посмотрите код и прокомментируйте:
Code:
FUNCTION zbwi_z2tzr_get_data.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR
*" VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
*" VALUE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
*" VALUE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
*" VALUE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL
*" VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
*" TABLES
*" I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*" E_T_DATA STRUCTURE Z2TZR_TAB OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------------
************************************************************************
* Наименование: ZBWI_Z2TZR_GET_DATA
* Описание: ФМ родового экстрактора для загрузки фактических ТЗР Z2TZR
* Приложение: BW
* Дата создания: 12.11.2012
************************************************************************
TYPE-POOLS: abap.
*Укороченный тип строки таблицы BKPF
TYPES: BEGIN OF ts_bkpf_short,
belnr TYPE bkpf-belnr,
BUKRS TYPE BKPF-BUKRS,
GJAHR TYPE bkpf-gjahr,
blart TYPE bkpf-blart,
budat TYPE bkpf-budat,
END OF ts_bkpf_short.
*Таблицы дополнительных данных
DATA lt_vbfa TYPE SORTED TABLE OF vbfa WITH NON-UNIQUE KEY vbelv posnv.
DATA lt_vbfa2 TYPE SORTED TABLE OF vbfa WITH NON-UNIQUE KEY vbelv posnv.
DATA lt_mseg TYPE SORTED TABLE OF mseg WITH NON-UNIQUE KEY mblnr mjahr zeile.
DATA lt_mseg2 TYPE SORTED TABLE OF mseg WITH NON-UNIQUE KEY mblnr mjahr zeile.
DATA lt_bkpf_short TYPE SORTED TABLE OF ts_bkpf_short WITH NON-UNIQUE KEY belnr bukrs gjahr.
*Настроечная таблица контрагентов для поля флага MIT
DATA lt_zt3_fi_balance TYPE TABLE OF zt3_fi_balance.
*Таблицы дополнительных данных
DATA lt_bseg TYPE TABLE OF bseg.
DATA lt_mseg_st TYPE TABLE OF mseg.
*Таблицы основных данных ТЗР
DATA lt_zttzr TYPE TABLE OF zttzr.
DATA lt_zttzr_close TYPE TABLE OF zttzr_close .
DATA lt_zttzr_writeoff TYPE TABLE OF zttzr_writeoff.
*Строки таблиц основных данных ТЗР
DATA ls_zttzr TYPE zttzr.
DATA ls_zttzr_close TYPE zttzr_close.
DATA ls_zttzr_writeoff TYPE zttzr_writeoff.
*Строки таблиц дополнительных данных
DATA ls_bkpf_short TYPE ts_bkpf_short.
DATA ls_bseg TYPE bseg.
DATA ls_mseg_st TYPE mseg.
DATA ls_vbfa TYPE vbfa.
DATA ls_mseg TYPE mseg.
*Имена входных полей
CONSTANTS lc_vbeln_name TYPE rsfieldnm VALUE 'VBELN1'.
CONSTANTS lc_vbeln_name_sec TYPE rsfieldnm VALUE 'VBELN2'.
CONSTANTS lc_zzpr_name TYPE rsfieldnm VALUE 'ZZPR'.
*Параметры таблицы VBFA
CONSTANTS lc_vbtyp_7 TYPE vbtyp VALUE '7'.
CONSTANTS lc_vbtyp_r TYPE vbtyp VALUE 'R'.
CONSTANTS lc_bwart_101 TYPE vbfa-bwart VALUE '101'.
CONSTANTS lc_bwart_601 TYPE vbfa-bwart VALUE '601'.
CONSTANTS lc_usd TYPE waers VALUE 'USD'.
CONSTANTS lc_hkont_mit TYPE z2tzr_tab-hkont VALUE '4150100000'.
* Example: DataSource for table SFLIGHT
TABLES: sflight.
* Auxiliary Selection criteria structure
DATA: l_s_select TYPE srsc_s_select.
* Maximum number of lines for DB table
STATICS: s_s_if TYPE srsc_s_if_simple.
* Select ranges
RANGES: lr_vbeln FOR E_T_DATA_COPY-vbeln1,
lr_vbeln2 FOR E_T_DATA_COPY-vbeln1,
lr_zzpr FOR E_T_DATA_COPY-zzpr.
IF i_initflag = sbiwa_c_flag_on.
CASE i_dsource.
WHEN 'Z2TZR'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e009(r3). ENDIF.
* this is a typical log call. Please write every error message like this
log_write 'E' "message type
'R3' "message class
'009' "message number
i_dsource "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDCASE.
APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT.
* Fill parameter buffer for data extraction calls
S_S_IF-REQUNR = I_REQUNR.
S_S_IF-DSOURCE = I_DSOURCE.
S_S_IF-MAXSIZE = I_MAXSIZE.
* Fill field list table for an optimized select statement
* (in case that there is no 1:1 relation between InfoSource fields
* and database table fields this may be far from beeing trivial)
APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.
*Выбор контрагентов
SELECT * FROM zt3_fi_balance INTO TABLE lt_zt3_fi_balance.
*Заполнение Range массивов из входных данных
LOOP AT s_s_if-t_select INTO l_s_select
WHERE fieldnm = lc_vbeln_name
OR fieldnm = lc_zzpr_name
OR fieldnm = lc_vbeln_name.
IF l_s_select-fieldnm = lc_vbeln_name.
MOVE-CORRESPONDING l_s_select TO lr_vbeln.
APPEND lr_vbeln.
ELSEIF l_s_select-fieldnm = lc_zzpr_name.
MOVE-CORRESPONDING l_s_select TO lr_zzpr.
APPEND lr_zzpr.
ELSE.
MOVE-CORRESPONDING l_s_select TO lr_vbeln2.
APPEND lr_vbeln2.
ENDIF.
ENDLOOP.
*Если выбран первый тип ТЗР
IF 1 IN lr_zzpr.
* Выбираем данные из таблицы для ТЗР 1 типа
SELECT * FROM zttzr INTO TABLE lt_zttzr WHERE vbeln_vl IN lr_vbeln.
IF sy-subrc = 0.
SELECT * FROM vbfa
INTO TABLE lt_vbfa
FOR ALL ENTRIES IN lt_zttzr
WHERE vbelv = lt_zttzr-vbeln_vl
AND posnv = lt_zttzr-posnr_vl
AND vbtyp_n = lc_vbtyp_r
AND vbtyp_v = lc_vbtyp_7
AND ( bwart = lc_bwart_101 OR bwart = lc_bwart_601 ).
* Если данные по ТЗР найдены
IF sy-subrc = 0.
* Ищем данные о документах материала поставок
SELECT * FROM mseg
INTO TABLE lt_mseg
FOR ALL ENTRIES IN lt_vbfa
WHERE mblnr = lt_vbfa-vbeln
AND mjahr = lt_vbfa-mjahr
AND zeile = lt_vbfa-posnn+2(4)
AND ( bwart = lc_bwart_101 OR bwart = lc_bwart_601 )
AND smbln = space.
*Если данные есть
IF NOT lt_mseg[] IS INITIAL.
*Ищем документы сторно
SELECT * FROM mseg
INTO TABLE lt_mseg_st
FOR ALL ENTRIES IN lt_mseg
WHERE mjahr = lt_mseg-mjahr
AND smbln = lt_mseg-mblnr
AND smblp = lt_mseg-zeile.
* Если найдены сторонированные документы, удаляем их
IF sy-subrc = 0.
LOOP AT lt_mseg_st INTO ls_mseg_st.
DELETE lt_mseg WHERE mjahr = ls_mseg_st-mjahr AND
mblnr = ls_mseg_st-smbln AND
zeile = ls_mseg_st-smblp.
DELETE lt_vbfa WHERE vbeln = ls_mseg_st-smbln AND
mjahr = ls_mseg_st-mjahr AND
posnn+2(4) = ls_mseg_st-smblp.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
*Заполняем выходную таблицу экстрактора данными
LOOP AT lt_zttzr INTO ls_zttzr.
CLEAR E_T_DATA_COPY.
E_T_DATA_COPY-bukrs = ls_zttzr-bukrs.
E_T_DATA_COPY-belnr = ls_zttzr-belnr.
E_T_DATA_COPY-gjahr = ls_zttzr-gjahr.
E_T_DATA_COPY-blart = ls_zttzr-blart.
E_T_DATA_COPY-budat = ls_zttzr-budat.
E_T_DATA_COPY-hkont = ls_zttzr-hkont.
E_T_DATA_COPY-vbeln1 = ls_zttzr-vbeln_vl.
E_T_DATA_COPY-posnr1 = ls_zttzr-posnr_vl.
*Данные документа материала
READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_zttzr-vbeln_vl
posnv = ls_zttzr-posnr_vl BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_mseg INTO ls_mseg WITH KEY mblnr = ls_vbfa-vbeln
mjahr = ls_vbfa-mjahr
zeile = ls_vbfa-posnn+2(4) BINARY SEARCH.
IF sy-subrc = 0.
E_T_DATA_COPY-mblnr1 = ls_mseg-mblnr.
E_T_DATA_COPY-mjahr1 = ls_mseg-mjahr.
E_T_DATA_COPY-zeile1 = ls_mseg-zeile.
ENDIF.
ENDIF.
E_T_DATA_COPY-dmbtr = ls_zttzr-dmbtr.
E_T_DATA_COPY-waers = lc_usd.
E_T_DATA_COPY-datum = ls_zttzr-datum.
E_T_DATA_COPY-uzeit = ls_zttzr-uzeit.
E_T_DATA_COPY-deleted = ls_zttzr-deleted.
E_T_DATA_COPY-stblg = ls_zttzr-stblg.
E_T_DATA_COPY-stjah = ls_zttzr-stjah.
*Данные контрагента
IF ls_zttzr-hkont = lc_hkont_mit.
READ TABLE lt_zt3_fi_balance TRANSPORTING NO FIELDS WITH KEY zzlifnr = ls_zttzr-lifnr.
IF sy-subrc = 0.
E_T_DATA_COPY-zzmit = abap_true.
ENDIF.
ENDIF.
E_T_DATA_COPY-zzpr = '1'.
APPEND E_T_DATA_COPY TO E_T_DATA_COPY.
ENDLOOP.
ENDIF.
ENDIF.
* Выбираем данные из таблицы для ТЗР 2 типа
IF 2 IN lr_zzpr.
SELECT * FROM zttzr_close INTO TABLE lt_zttzr_close WHERE vbeln_re IN lr_vbeln
AND vbeln_ot IN lr_vbeln2.
*Если данные найдены
IF sy-subrc = 0.
CLEAR lt_bkpf_short[].
*Выбираем дополнительные данные таблицы BKPF
SELECT belnr bukrs gjahr blart budat
FROM bkpf
INTO TABLE lt_bkpf_short
FOR ALL ENTRIES IN lt_zttzr_close
WHERE belnr = lt_zttzr_close-belnr
AND BUKRS = lt_zttzr_close-bukrs
AND GJAHR = lt_zttzr_close-GJAHR.
*Выбираем дополнительные данные таблицы zttzr
CLEAR lt_zttzr[].
SELECT * FROM zttzr
INTO TABLE lt_zttzr
FOR ALL ENTRIES IN lt_zttzr_close
WHERE belnr = lt_zttzr_close-belnr_in.
*Если данные найдены ищем дополнительные данные таблицы BSEG
IF lines( lt_zttzr ) > 0.
CLEAR lt_bseg[].
SELECT * FROM bseg
INTO TABLE lt_bseg
FOR ALL ENTRIES IN lt_zttzr
WHERE hkont = lt_zttzr-hkont
AND belnr = lt_zttzr-belnr
AND shkzg = 'S'
AND BUKRS = lt_zttzr-bukrs
AND GJAHR = lt_zttzr-GJAHR.
ENDIF.
*Ищем данные о документах материала для поставки вДв 601
SELECT * FROM vbfa
INTO TABLE lt_vbfa
FOR ALL ENTRIES IN lt_zttzr_close
WHERE vbelv = lt_zttzr_close-vbeln_re
AND posnv = lt_zttzr_close-posnr_re
AND bwart = lc_BWART_601
AND vbtyp_n = lc_vbtyp_r
AND vbtyp_v = lc_vbtyp_7.
* Если документы найдены
IF sy-subrc = 0.
SELECT * FROM mseg
INTO TABLE lt_mseg
FOR ALL ENTRIES IN lt_vbfa
WHERE mblnr = lt_vbfa-vbeln
AND mjahr = lt_vbfa-mjahr
AND zeile = lt_vbfa-posnn+2(4)
AND bwart = lc_BWART_601
AND smbln = space.
* Ищем документы сторно
IF NOT lt_mseg[] IS INITIAL.
SELECT * FROM mseg
INTO TABLE lt_mseg_st
FOR ALL ENTRIES IN lt_mseg
WHERE mjahr = lt_mseg-mjahr
AND smbln = lt_mseg-mblnr
AND smblp = lt_mseg-zeile.
* Если найдены сторонированные документы удаляем их
IF sy-subrc = 0.
LOOP AT lt_mseg_st INTO ls_mseg_st.
DELETE lt_mseg WHERE mjahr = ls_mseg_st-mjahr AND
mblnr = ls_mseg_st-smbln AND
zeile = ls_mseg_st-smblp.
DELETE lt_vbfa WHERE vbeln = ls_mseg_st-smbln AND
mjahr = ls_mseg_st-mjahr AND
posnn+2(4) = ls_mseg_st-smblp.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
*Ищем данные о документах материала для поставки вДв 101
SELECT * FROM vbfa
INTO TABLE lt_vbfa2
FOR ALL ENTRIES IN lt_zttzr_close
WHERE vbelv = lt_zttzr_close-vbeln_ot
AND posnv = lt_zttzr_close-posnr_ot
AND bwart = lc_BWART_101
AND vbtyp_n = lc_vbtyp_r
AND vbtyp_v = lc_vbtyp_7.
* Если документы найдены
IF sy-subrc = 0.
SELECT * FROM mseg
INTO TABLE lt_mseg2
FOR ALL ENTRIES IN lt_vbfa2
WHERE mblnr = lt_vbfa2-vbeln
AND mjahr = lt_vbfa2-mjahr
AND zeile = lt_vbfa2-posnn+2(4)
AND bwart = lc_BWART_101
AND smbln = space.
* Ищем документы сторно
IF NOT lt_mseg2[] IS INITIAL.
SELECT * FROM mseg
INTO TABLE lt_mseg_st
FOR ALL ENTRIES IN lt_mseg2
WHERE mjahr = lt_mseg2-mjahr
AND smbln = lt_mseg2-mblnr
AND smblp = lt_mseg2-zeile.
* Если найдены сторонированные документы удаляем их
IF sy-subrc = 0.
LOOP AT lt_mseg_st INTO ls_mseg_st.
DELETE lt_mseg2 WHERE mjahr = ls_mseg_st-mjahr AND
mblnr = ls_mseg_st-smbln AND
zeile = ls_mseg_st-smblp.
DELETE lt_vbfa2 WHERE vbeln = ls_mseg_st-smbln AND
mjahr = ls_mseg_st-mjahr AND
posnn+2(4) = ls_mseg_st-smblp.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
*Заполняем выходную таблицу экстрактора данными
LOOP AT lt_zttzr_close INTO ls_zttzr_close.
CLEAR E_T_DATA_COPY.
E_T_DATA_COPY-bukrs = ls_zttzr_close-bukrs.
E_T_DATA_COPY-belnr = ls_zttzr_close-belnr.
E_T_DATA_COPY-gjahr = ls_zttzr_close-gjahr.
READ TABLE lt_bkpf_short INTO ls_bkpf_short WITH KEY belnr = ls_zttzr_close-belnr
bukrs = ls_zttzr_close-bukrs
gjahr = ls_zttzr_close-gjahr BINARY SEARCH.
IF sy-subrc = 0.
E_T_DATA_COPY-blart = ls_bkpf_short-blart.
E_T_DATA_COPY-budat = ls_bkpf_short-budat.
ENDIF.
READ TABLE lt_zttzr INTO ls_zttzr WITH KEY belnr = ls_zttzr_close-belnr_in.
IF sy-subrc = 0.
E_T_DATA_COPY-hkont = ls_zttzr-hkont.
ENDIF.
E_T_DATA_COPY-vbeln1 = ls_zttzr_close-vbeln_re.
E_T_DATA_COPY-posnr1 = ls_zttzr_close-posnr_re.
READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_zttzr_close-vbeln_re
posnv = ls_zttzr_close-posnr_re BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_mseg INTO ls_mseg WITH KEY mblnr = ls_vbfa-vbeln
mjahr = ls_vbfa-mjahr
zeile = ls_vbfa-posnn+2(4) BINARY SEARCH.
IF sy-subrc = 0.
E_T_DATA_COPY-mblnr1 = ls_mseg-mblnr.
E_T_DATA_COPY-mjahr1 = ls_mseg-mjahr.
E_T_DATA_COPY-zeile1 = ls_mseg-zeile.
ENDIF.
ENDIF.
E_T_DATA_COPY-vbeln_kt = ls_zttzr_close-vbeln_ot.
E_T_DATA_COPY-posnr_kt = ls_zttzr_close-posnr_ot.
READ TABLE lt_vbfa2 INTO ls_vbfa WITH KEY vbelv = ls_zttzr_close-vbeln_ot
posnv = ls_zttzr_close-posnr_ot BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_mseg2 INTO ls_mseg WITH KEY mblnr = ls_vbfa-vbeln
mjahr = ls_vbfa-mjahr zeile = ls_vbfa-posnn+2(4) BINARY SEARCH.
IF sy-subrc = 0.
E_T_DATA_COPY-mblnr2 = ls_mseg-mblnr.
E_T_DATA_COPY-mjahr2 = ls_mseg-mjahr.
E_T_DATA_COPY-zeile2 = ls_mseg-zeile.
ENDIF.
ENDIF.
READ TABLE lt_bseg INTO ls_bseg WITH KEY hkont = E_T_DATA_COPY-hkont
belnr = E_T_DATA_COPY-belnr
gjahr = E_T_DATA_COPY-gjahr
BUKRS = E_T_DATA_COPY-bukrs.
IF sy-subrc = 0.
E_T_DATA_COPY-dmbtr = ls_bseg-dmbtr.
IF ls_zttzr-hkont = LC_HKONT_MIT.
READ TABLE lt_zt3_fi_balance TRANSPORTING NO FIELDS WITH KEY zzlifnr = ls_bseg-lifnr.
IF sy-subrc = 0.
E_T_DATA_COPY-zzmit = ABAP_TRUE.
ENDIF.
ENDIF.
ENDIF.
E_T_DATA_COPY-waers = LC_USD.
E_T_DATA_COPY-datum = ls_zttzr_close-datum.
E_T_DATA_COPY-uzeit = ls_zttzr_close-uzeit.
E_T_DATA_COPY-deleted = ls_zttzr_close-deleted.
E_T_DATA_COPY-stblg = ls_zttzr_close-stblg.
E_T_DATA_COPY-stjah = ls_zttzr_close-stjah.
E_T_DATA_COPY-zzpr = '2'.
APPEND E_T_DATA_COPY TO E_T_DATA_COPY.
ENDLOOP.
ENDIF.
ENDIF.
* Выбираем данные из таблицы для ТЗР 2 типа
IF 3 IN lr_zzpr.
SELECT * FROM zttzr_writeoff INTO TABLE lt_zttzr_writeoff WHERE vbeln_vl IN lr_vbeln2.
*Если найдены основные данные по ТЗР 3 типа
IF sy-subrc = 0.
CLEAR LT_BKPF_SHORT[].
SELECT belnr bukrs gjahr blart budat FROM bkpf
INTO TABLE lt_bkpf_short
FOR ALL ENTRIES IN lt_zttzr_writeoff
WHERE belnr = lt_zttzr_writeoff-belnr
AND bukrs = lt_zttzr_writeoff-bukrs
AND gjahr = lt_zttzr_writeoff-gjahr.
CLEAR lt_bseg[].
SELECT * FROM bseg
INTO TABLE lt_bseg
FOR ALL ENTRIES IN lt_zttzr_writeoff
WHERE hkont = lt_zttzr_writeoff-hkont_k
AND belnr = lt_zttzr_writeoff-belnr
AND bukrs = lt_zttzr_writeoff-bukrs
AND gjahr = lt_zttzr_writeoff-gjahr
AND shkzg = 'S'.
*Ищем документы материала для поставок
SELECT * FROM vbfa
INTO TABLE lt_vbfa
FOR ALL ENTRIES IN lt_zttzr_writeoff
WHERE vbelv = lt_zttzr_writeoff-vbeln_vl
AND posnv = lt_zttzr_writeoff-posnr_vl
AND vbtyp_n = lc_vbtyp_r
AND vbtyp_v = lc_vbtyp_7
AND bwart = lc_BWART_101.
* Если документы найдены ищем среди них сторонированные
IF sy-subrc = 0.
SELECT * FROM mseg
INTO TABLE lt_mseg
FOR ALL ENTRIES IN lt_vbfa
WHERE mblnr = lt_vbfa-vbeln
AND mjahr = lt_vbfa-mjahr
AND zeile = lt_vbfa-posnn+2(4)
AND bwart = lc_BWART_101
AND smbln = space.
*Если найдены сторонированные удаляем их
IF NOT lt_mseg[] IS INITIAL.
SELECT * FROM mseg
INTO TABLE lt_mseg_st
FOR ALL ENTRIES IN lt_mseg
WHERE mjahr = lt_mseg-mjahr
AND smbln = lt_mseg-mblnr
AND smblp = lt_mseg-zeile.
IF sy-subrc = 0.
LOOP AT lt_mseg_st INTO ls_mseg_st.
DELETE lt_mseg WHERE mjahr = ls_mseg_st-mjahr AND
mblnr = ls_mseg_st-smbln AND
zeile = ls_mseg_st-smblp.
DELETE lt_vbfa WHERE vbeln = ls_mseg_st-smbln AND
mjahr = ls_mseg_st-mjahr AND
posnn+2(4) = ls_mseg_st-smblp.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
*Заполняем выходную таблицу данными ТЗР 3 типа
LOOP AT lt_zttzr_writeoff INTO ls_zttzr_writeoff.
CLEAR E_T_DATA_COPY.
E_T_DATA_COPY-bukrs = ls_zttzr_writeoff-bukrs.
E_T_DATA_COPY-belnr = ls_zttzr_writeoff-belnr_w.
E_T_DATA_COPY-gjahr = ls_zttzr_writeoff-gjahr_w.
READ TABLE lt_bkpf_short INTO ls_bkpf_short WITH KEY belnr = ls_zttzr_writeoff-belnr
bukrs = ls_zttzr_writeoff-bukrs
gjahr = ls_zttzr_writeoff-gjahr BINARY SEARCH.
IF sy-subrc = 0.
E_T_DATA_COPY-blart = ls_bkpf_short-blart.
E_T_DATA_COPY-budat = ls_bkpf_short-budat.
ENDIF.
E_T_DATA_COPY-hkont = ls_zttzr_writeoff-hkont_k.
E_T_DATA_COPY-vbeln_kt = ls_zttzr_writeoff-vbeln_vl.
E_T_DATA_COPY-posnr_kt = ls_zttzr_writeoff-posnr_vl.
READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_zttzr_writeoff-vbeln_vl
posnv = ls_zttzr_writeoff-posnr_vl BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_mseg INTO ls_mseg WITH KEY mblnr = ls_vbfa-vbeln
mjahr = ls_vbfa-mjahr zeile = ls_vbfa-posnn+2(4) BINARY SEARCH.
IF sy-subrc = 0.
E_T_DATA_COPY-mblnr2 = ls_mseg-mblnr.
E_T_DATA_COPY-mjahr2 = ls_mseg-mjahr.
E_T_DATA_COPY-zeile2 = ls_mseg-zeile.
ENDIF.
ENDIF.
E_T_DATA_COPY-dmbtr = ls_zttzr_writeoff-wrbtr.
E_T_DATA_COPY-waers = LC_USD.
E_T_DATA_COPY-datum = ls_zttzr_writeoff-datum.
E_T_DATA_COPY-uzeit = ls_zttzr_writeoff-uzeit.
E_T_DATA_COPY-deleted = ls_zttzr_writeoff-deleted.
E_T_DATA_COPY-stblg = ls_zttzr_writeoff-stblg.
E_T_DATA_COPY-stjah = ls_zttzr_writeoff-stjah.
READ TABLE lt_bseg INTO ls_bseg WITH KEY hkont = E_T_DATA_COPY-hkont
belnr = E_T_DATA_COPY-belnr
bukrs = E_T_DATA_COPY-bukrs
gjahr = E_T_DATA_COPY-gjahr.
IF sy-subrc = 0.
IF ls_zttzr-hkont = LC_HKONT_MIT.
READ TABLE lt_zt3_fi_balance TRANSPORTING NO FIELDS WITH KEY zzlifnr = ls_bseg-lifnr.
IF sy-subrc = 0.
E_T_DATA_COPY-zzmit = ABAP_TRUE.
ENDIF.
ENDIF.
ENDIF.
E_T_DATA_COPY-zzpr = '3'.
APPEND E_T_DATA_COPY TO E_T_DATA_COPY.
ENDLOOP.
ENDIF.
ENDIF.
ELSE.
REFRESH E_T_DATA[].
LOOP AT E_T_DATA_COPY FROM ( GV_COUNTER_DATAPAKID - 1 ) * I_MAXSIZE + 1 TO GV_COUNTER_DATAPAKID * I_MAXSIZE.
MOVE-CORRESPONDING E_T_DATA_COPY TO E_T_DATA.
APPEND e_t_data.
ENDLOOP.
IF Sy-subrc <> 0.
RAISE NO_MORE_DATA.
ENDIF.
ENDIF.
GV_COUNTER_DATAPAKID = GV_COUNTER_DATAPAKID + 1.
ENDFUNCTION.
Прошу прощения я длинную колбасу. Спасибо!