Текущее время: Сб, авг 02 2025, 01:57

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Динамические условия выбора в ФМ "'LBD_PROCESS"
СообщениеДобавлено: Вт, июн 03 2008, 06:24 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 20:06
Сообщения: 7
Возникла необходимость дополнить условия выбора в ЛБД SDF по номеру документа. Стандартных select-options по номеру документа я в ней не нашёл. Попробовал динамические, но выборка не происходит.
Code:
REPORT  ZTESTLBD                                                    .

TYPE-POOLS: RSDS, RSFS.
DATA: gc_ldb TYPE TRDIR-LDBNAME,
      lt_params    TYPE STANDARD TABLE OF RSPARAMS,
      lt_callbacks TYPE STANDARD TABLE OF LDBCB.
DATA: lt_texpr TYPE RSDS_TEXPR,
      lt_fields TYPE RSFS_FIELDS.

TYPES: BEGIN OF st_documents,
          number(10)   TYPE c,
          xreversal(1) TYPE c,
          monat(2)     TYPE c,
       END OF st_documents.

TYPES: tt_documents TYPE STANDARD TABLE OF st_documents WITH KEY number.

DATA: documents     TYPE tt_documents,
      str_documents TYPE st_documents.


DATA: bal_unit(4) TYPE c,
      account(10) TYPE c,
      year(4)     TYPE c.


*Параметры выборки
bal_unit = '1100'.
account  = '91.6054000'.
year     = '2008'.

REFRESH: lt_callbacks, lt_params, lt_texpr.
CLEAR  : lt_callbacks, lt_params, lt_texpr.

PERFORM build_callback_2 TABLES lt_callbacks.
PERFORM build_params_2   TABLES lt_params
                         USING  bal_unit account year.
PERFORM build_fields     TABLES lt_fields.
PERFORM build_dynsel     TABLES lt_texpr.

gc_ldb = 'SDF'.
REFRESH: documents. CLEAR documents.
CALL FUNCTION 'LDB_PROCESS'
  EXPORTING
    LDBNAME                     = gc_ldb
    EXPRESSIONS                 = lt_texpr
    FIELD_SELECTION             = lt_fields
  TABLES
    CALLBACK                    = lt_callbacks
    SELECTIONS                  = lt_params
  EXCEPTIONS
    LDB_SELECTIONS_NOT_ACCEPTED = 4
    OTHERS                      = 1.


LOOP AT documents INTO str_documents.
    WRITE: / str_documents-number, str_documents-xreversal, str_documents-monat.
ENDLOOP.


FORM build_params_2 TABLES pt_params STRUCTURE RSPARAMS
                    USING  bal_unit  LIKE      bal_unit
                           account   LIKE      account
                           year      LIKE      year.

  pt_params-selname         = 'SD_BUKRS'.
  pt_params-sign            = 'I'.
  pt_params-option          = 'EQ'.
  pt_params-low             = bal_unit.   
  APPEND pt_params.

  pt_params-selname         = 'SD_SAKNR'.
  pt_params-sign            = 'I'.
  pt_params-option          = 'EQ'.
  pt_params-low             = account.
  APPEND pt_params.

  pt_params-selname         = 'SD_GJAHR'.
  pt_params-sign            = 'I'.
  pt_params-option          = 'EQ'.
  pt_params-low             = year.
  APPEND pt_params.

ENDFORM.

FORM build_callback_2 TABLES pt_callbacks STRUCTURE LDBCB.

  pt_callbacks-ldbnode     = 'BKPF'.
  pt_callbacks-get         = 'X'.
  pt_callbacks-get_late    = ' '.
  pt_callbacks-cb_prog     = SY-REPID.
  pt_callbacks-cb_form     = 'LDB_CALLBACK_2'.
  APPEND pt_callbacks.

ENDFORM.

FORM LDB_CALLBACK_2 USING pd_node     LIKE LDBN-LDBNODE
                          pd_workarea TYPE BKPF
                          pd_mode     TYPE C
                          pd_selected TYPE C.

  CASE pd_node.
    WHEN 'BKPF'.
      str_documents-number    = PD_WORKAREA-BELNR.
      str_documents-xreversal = PD_WORKAREA-XREVERSAL.
      str_documents-monat     = PD_WORKAREA-MONAT.
      APPEND str_documents TO documents.
  ENDCASE.

  pd_selected = 'X'.

ENDFORM.

FORM build_dynsel TABLES dyn_sel TYPE RSDS_TEXPR.
  DATA: str_dyn_sel     TYPE RSDS_EXPR.
  DATA: tab_name(30)    TYPE C.
  DATA: dyn_sel_opt     TYPE RSDS_EXPR_TAB,
        str_dyn_sel_opt TYPE RSDSEXPR.

  tab_name                  = 'BSEG'.

  str_dyn_sel_opt-logop     = 'OR'.
  str_dyn_sel_opt-arity     = '2'.
  str_dyn_sel_opt-fieldname = 'BELNR'.
  str_dyn_sel_opt-option    = 'EQ'.
  str_dyn_sel_opt-low       = '4080057123'.
*  str_dyn_sel_opt-high      = '4080057123'.
  APPEND str_dyn_sel_opt TO dyn_sel_opt.
  str_dyn_sel_opt-logop     = 'OR'.
  str_dyn_sel_opt-arity     = '2'.
  str_dyn_sel_opt-fieldname = 'BELNR'.
  str_dyn_sel_opt-option    = 'EQ'.
  str_dyn_sel_opt-low       = '4080057128'.
*  str_dyn_sel_opt-high      = '4080057128'.
  APPEND str_dyn_sel_opt TO dyn_sel_opt.

  str_dyn_sel-tablename     = tab_name.
  str_dyn_sel-expr_tab      = dyn_sel_opt.
  APPEND str_dyn_sel     TO dyn_sel.
ENDFORM.

FORM build_fields TABLES dyn_fields TYPE RSFS_FIELDS.
  DATA: str_dyn_fields  TYPE RSFS_TAB_FIELDS.
  DATA: tab_name(30)    TYPE C.
  DATA: fields          LIKE RSFS_STRUC OCCURS 10,
        str_fields      TYPE RSFS_STRUC.

  tab_name                  = 'BSEG'.

  str_fields-line           = 'BELNR'.
  APPEND str_fields     TO fields.

  str_dyn_fields-tablename  = tab_name.
  str_dyn_fields-fields     = fields.
  APPEND str_dyn_fields TO dyn_fields.

ENDFORM.


Без параметра EXPRESSIONS программа выбирает некоторые документы. Я попытался занести два документа из этой выборки в динамические условия выбора, но ничего не получилось.
Если кто-нибудь знает в чём дело, напишите, пожалуйста.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 03 2008, 09:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Должно быть так:
Code:
  tab_name                  = 'BSIS'. " !!!

  clear str_dyn_sel_opt.
  str_dyn_sel_opt-logop     = 'OR'.
  str_dyn_sel_opt-arity     = '2'.
  APPEND str_dyn_sel_opt TO dyn_sel_opt.

  clear str_dyn_sel_opt.
  str_dyn_sel_opt-fieldname = 'BELNR'.
  str_dyn_sel_opt-option    = 'EQ'.
  str_dyn_sel_opt-low       = '4080057123'.
  APPEND str_dyn_sel_opt TO dyn_sel_opt.

  str_dyn_sel_opt-fieldname = 'BELNR'.
  str_dyn_sel_opt-option    = 'EQ'.
  str_dyn_sel_opt-low       = '4080057128'.
  APPEND str_dyn_sel_opt TO dyn_sel_opt.


Ещё можно пользоваться ф.м. FREE_SELECTIONS_RANGE_2_EX.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 03 2008, 09:25 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 20:06
Сообщения: 7
Спасибо!
До смены таблицы на BSIS в условии я тоже догадался, ведь для BSEG'а нет динамических условий выбора в SDF. А вот как правильно заполнять таблицу типа RSDS_EXPR_TAB так и не смог догадаться :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 03 2008, 09:32 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 20:06
Сообщения: 7
А вот ещё вопрос, мне просто интересно. Для чего используется параметр FIELD_SELECTION? Я так и не смог разобраться...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 03 2008, 17:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
LCF666 написал(а):
А вот ещё вопрос, мне просто интересно. Для чего используется параметр FIELD_SELECTION? Я так и не смог разобраться...

Цитата:
Here, you can specify a list of required fields for all nodes of the logical database for which you have defined field selections ( SELECTION-SCREEN FIELD SELECTION ...). This corresponds to the FIELDS addition in the GET and GET LATE events.


Note Passing a field list can considerably improve performace. However, the contents of fields that are not passed are indeterminate. For this reason, you must ensure that fields not passed really are not required (and also not required in function modules or external FORM routines).


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB