Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => Тема начата: sergiucz от Март 26, 2013, 01:51:43 pm
-
Добрый день господа гуру.
У меня вопрос на счет ЛДБ. Ни как не могу вытянуть все данные из BSEG с помощью CALL FUNCTION 'LDB_PROCESS'
CLEAR callback_wa.
callback_wa-ldbnode = 'BSEG'.
callback_wa-get = 'X'.
callback_wa-get_late = 'X'.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = 'SCALLBACK_BSEG'.
APPEND callback_wa TO callback.
*&1---
seltab_wa-kind = 'S'.
seltab_wa-selname = 'DD_BUKRS'.
seltab_wa-low = dd_bukrs-low.
seltab_wa-option = 'EQ'.
seltab_wa-sign = 'I'.
APPEND seltab_wa TO seltab.
seltab_wa-kind = 'P'.
seltab_wa-selname = 'DD_APOPT'.
seltab_wa-low = ''.
seltab_wa-option = 'EQ'.
seltab_wa-sign = 'I'.
APPEND seltab_wa TO seltab.
seltab_wa-kind = 'P'.
seltab_wa-selname = 'DD_OPOPT'.
seltab_wa-low = ''.
seltab_wa-option = 'EQ'.
seltab_wa-sign = 'I'.
APPEND seltab_wa TO seltab.
seltab_wa-kind = 'S'.
seltab_wa-selname = 'DD_AUGDT'.
seltab_wa-low = '20121001'.
seltab_wa-high = '20121031'.
seltab_wa-option = 'EQ'.
seltab_wa-sign = 'I'.
APPEND seltab_wa TO seltab.
seltab_wa-kind = 'P'.
seltab_wa-selname = 'DD_STIDA'.
seltab_wa-low = sy-datum.
seltab_wa-option = 'EQ'.
seltab_wa-sign = 'I'.
APPEND seltab_wa TO seltab.
seltab_wa-kind = 'S'.
seltab_wa-selname = 'DD_KUNNR'.
LOOP AT dd_kunnr.
MOVE-CORRESPONDING dd_kunnr TO seltab_wa.
APPEND seltab_wa TO seltab.
ENDLOOP.
*&3---
seltab_wa-kind = 'S'.
seltab_wa-selname = 'DD_GJAHR'.
LOOP AT pa_gjahr.
MOVE-CORRESPONDING pa_gjahr TO seltab_wa.
APPEND seltab_wa TO seltab.
ENDLOOP.
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
ldbname = 'DDF'
variant = ''
* EXPRESSIONS = TEXPR
* FIELD_SELECTION = FSEL
TABLES
callback = callback
selections = seltab
EXCEPTIONS
ldb_not_reentrant = 1
ldb_incorrect = 2
ldb_already_running = 3
ldb_error = 4
ldb_selections_error = 5
ldb_selections_not_accepted = 6
variant_not_existent = 7
variant_obsolete = 8
variant_error = 9
free_selections_error = 10
callback_no_event = 11
callback_node_duplicate = 12
OTHERS = 13.
IF sy-subrc <> 0.
WRITE: 'Exception with SY-SUBRC', sy-subrc.
ENDIF.
FORM scallback_bseg USING name TYPE ldbn-ldbnode
wa TYPE bseg
evt TYPE c
check TYPE c.
MOVE-CORRESPONDING wa TO ls_kunnr.
APPEND ls_kunnr TO gt_kunnr.
ENDFORM. "SCALLBACK_BSEG
если делаю так то получаю не все данные по дебитору .
а если в своиство программы напишу ЛДБ и при помошь
CHECK sy-ucomm = 'ONLI'.
GET bseg.
PERFORM fill_bseg USING bseg.
то получаю все.
Как мне все данные получить при помощи CALL FUNCTION 'LDB_PROCESS'
-
Я что-то не понял, если честно.. но при использовании логических баз данных, что-то вытаскивать из них через работы ФМ?!
-
Да через CALL FUNCTION 'LDB_PROCESS'
DATA: CALLBACK TYPE TABLE OF LDBCB,
CALLBACK_WA LIKE LINE OF CALLBACK.
DATA: SELTAB TYPE TABLE OF RSPARAMS,
SELTAB_WA LIKE LINE OF SELTAB.
DATA: TEXPR TYPE RSDS_TEXPR,
FSEL TYPE RSFS_FIELDS.
CALL FUNCTION 'LDB_PROCESS'
ldbname = 'DDF' *<---- Имя ЛДБ
variant = ''
** EXPRESSIONS = TEXPR
** FIELD_SELECTION = FSEL
TABLES
callback = callback *<---- Таблица с подпрограммами
selections = seltab *<---- Поля для заполнения ЛДБ
то есть он отрабатывает вытаскивает по конкретному дебитору позиций . Но не все .
ТО есть, если прикрутить к программе ЛДБ и пользоваться GET BSEG,
ТО он вытаскивает все.
Мне это вариант не очень нравится. Программы не так гибкие . А вот если с ФМ разберусь то хоть и в конец программы могу вызвать.
Думаю, что то я в этом ФМ-нике не добавил .
-
Тогда а что тебе мешает просто SELECT исползовать по таблицам и не заниматься, ну даже не знаю как это можно назвать... :-\ или ты думаешь что логическая база данных не через SELECT данные выбирает?
Да ты прав она через SELECT ,но она наверно напрямую с БД берет. Скорость у нее примерно в 10 раз быстрее .
Вот если я выберу за 2012 год .
SELECT belnr dmbtr hkont kunnr shkzg gjahr
FROM bseg INTO CORRESPONDING FIELDS OF TABLE gt_kunnr
WHERE bukrs in dd_bukrs
AND gjahr IN pa_gjahr
AND kunnr IN dd_kunnr
AND koart EQ 'D'
AND hkont IN gv_range.
этот селект отработает примерно за 20 сек если в продуктиве то и больше
А если я через ЛДБ то он отработает меньше чем 5 сек.
-
Нашел ответ.! Как и думал что не заполнил что то.
DD_AUGDT надо было заполнить чтобы выбрались и выравнивание и выплаты ...
Тему считаю закрытым !! Всем спасибо!!