SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Как обнулить атрибуты временнозависимых инфообъектов?



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
Jozef
Участник
Участник



Joined: 16 Nov 2007
Posts: 2

PostPosted: Fri Nov 16, 2007 9:11 pm    Post subject: Как обнулить атрибуты временнозависимых инфообъектов? Reply with quote

Добрый день!
В абапе - новичок.
Задача следующая - создать прогу, обнуляющую все атрибуты для параметрически задаваемого инфообъекта и значений datefrom и dateto.

Пока добрался до следующего:
1)задаем в окне выбора параметры
2) по имени инфообъекта через ФМ RSD_CHKTAB_GET_FOR_CHA_BAS получаем имя q-таблицы.
3) Вытаскиваем из таблицы функцией LVC_FIELDCATALOG_MERGE поля
4) далее с ипользованием field-symbols и метода cl_alv_table_create=>create_dynamic_table динамически генреим таблицу со структурой q-table заданного инфообъекта и вываливаем селектом туда все значения в диапазоне datefrom-dateto из активной версии.
===========================
Теперь задача - очистить все поля кроме datefrom, dateto, objvers, changed во внутренней таблице. Экспортировать исправленную внутреннюю таблицу в исходную q-table.

Прошу подсказать, как решить эту задачу? Или я вообще пошел не по тому пути, и есть путь намного проще?

-----------------
С уважением,
Jozef
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 170
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Sat Nov 17, 2007 12:31 am    Post subject: Reply with quote

Небольшой пример с использованием динамического указания имени таблицы в update. Локальная, динамически сгенерированная таблица, должна содержать полный ключ.

В примере это таблица BKPF, апдейт данных не меняет для безопасности.

Code:

TYPE-POOLS:
  slis.

DATA: BEGIN OF it_bkpf.
      INCLUDE STRUCTURE BKPF.
DATA: END OF it_bkpf.

DATA: name(10) VALUE 'BKPF',
     g_cprog TYPE sy-cprog.

* structure for new LVC (ALV grid container) field catalog
DATA: ls_lvc_fieldcat TYPE lvc_s_fcat,
      gt_lvc_fieldcatalog TYPE TABLE OF lvc_s_fcat,
* internal table for old (standard) ALV field catalog
* (without header line - exactly as in function
* 'REUSE_ALV_FIELDCATALOG_MERGE')
lt_alv_fieldcatalog TYPE slis_t_fieldcat_alv.

FIELD-SYMBOLS: <ls_alv_fieldcat> TYPE slis_fieldcat_alv.

g_cprog = sy-cprog.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
    i_program_name = g_cprog
    i_internal_tabname = 'IT_BKPF'
    i_inclname = g_cprog
  CHANGING
    ct_fieldcat = lt_alv_fieldcatalog
  EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.

  IF NOT sy-subrc IS INITIAL.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  REFRESH gt_lvc_fieldcatalog.

*** map old fieldcatalog fields on new:
LOOP AT lt_alv_fieldcatalog ASSIGNING <ls_alv_fieldcat>.
  CLEAR ls_lvc_fieldcat.
  MOVE-CORRESPONDING <ls_alv_fieldcat> TO ls_lvc_fieldcat.
* specific fieldnames caused by length restriction for basis objects
  ls_lvc_fieldcat-ref_field = <ls_alv_fieldcat>-ref_fieldname.
  ls_lvc_fieldcat-ref_table = <ls_alv_fieldcat>-ref_tabname.
  ls_lvc_fieldcat-roundfield = <ls_alv_fieldcat>-roundfieldname.
  ls_lvc_fieldcat-decmlfield = <ls_alv_fieldcat>-decimalsfieldname.
  ls_lvc_fieldcat-decimals_o = <ls_alv_fieldcat>-decimals_out.
  ls_lvc_fieldcat-dd_outlen = <ls_alv_fieldcat>-ddic_outputlen.
* for fields without reference to the Data Dictionary
  IF ls_lvc_fieldcat-ref_table IS INITIAL.
    ls_lvc_fieldcat-coltext = ls_lvc_fieldcat-fieldname.
  ENDIF.
  APPEND ls_lvc_fieldcat TO gt_lvc_fieldcatalog.
ENDLOOP.

DATA: lr_table TYPE REF TO data.
FIELD-SYMBOLS: <ls_lvc_outtab> TYPE ANY,
               <l_field> TYPE ANY,
               <gt_lvc_outtab> TYPE TABLE.

* create dynamic table (according to fieldcatalog)
CALL METHOD cl_alv_table_create=>create_dynamic_table
  EXPORTING it_fieldcatalog = gt_lvc_fieldcatalog
  IMPORTING ep_table = lr_table.

ASSIGN lr_table->* TO <gt_lvc_outtab>.

SELECT * FROM bkpf UP TO 10 ROWS INTO TABLE <gt_lvc_outtab>.
UPDATE (name) FROM TABLE <gt_lvc_outtab>.

IF sy-subrc IS INITIAL.
  COMMIT WORK AND WAIT.
  WRITE: / 'Update successful'.
ENDIF.


Другой вариант, формировать весь Update динамически.

Code:
 
try.
   update (p_table) set (ls_expr)
                where (is_where-where_tab).
   catch cx_sy_dynamic_osql_error.
      rollback work.
      message 'Error during update!' type 'I'.
endtry.


Примеры:
http://www.sapnet.ru/viewtopic.php?t=418
http://www.sapnet.ru/viewtopic.php?t=369
Back to top
View user's profile Send private message Blog Visit poster's website
Jozef
Участник
Участник



Joined: 16 Nov 2007
Posts: 2

PostPosted: Mon Nov 19, 2007 1:59 pm    Post subject: Reply with quote

vga, большое спасибо!

Информацию посмотрел, но пока для меня остался открытым еще один вопрос - как можно очистить часть полей во внутренней таблице, при том, что заранее ее структура неизвестна?

Т.е. мне известны всегда первые 4 поля, а что за ними - сколько и какие поля зависит от того, какой инфообъект был выбран. При этом мне требуется оставить первые четыре поля во внутренней таблице неизменными, обнулив все остальные неизвестные заранее поля.

Такое возможно?
Back to top
View user's profile Send private message
july7
Старший специалист
Старший специалист



Joined: 10 Oct 2007
Posts: 109
Location: Киров

PostPosted: Mon Nov 19, 2007 2:19 pm    Post subject: Reply with quote

если Вы в select перечислите имена нужных Вам полей, то остальные поля останутся пустыми, например для приведенного выше примера:

Code:
SELECT [b]BUKRS BELNR GJAHR MONAT[/b] FROM bkpf UP TO 10 ROWS INTO TABLE <gt_lvc_outtab>.
UPDATE (name) FROM TABLE <gt_lvc_outtab>.
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 170
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Mon Nov 19, 2007 2:57 pm    Post subject: Reply with quote

Или использовать конструкцию

Code:
ASSIGN COMPONENT sy-index OF STRUCTURE <fs_wa> TO <fs_comp>.


http://www.sapnet.ru/viewtopic.php?t=191
Back to top
View user's profile Send private message Blog Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.