Posted: Fri Nov 16, 2007 9:11 pm Post subject: Как обнулить атрибуты временнозависимых инфообъектов?
Добрый день!
В абапе - новичок.
Задача следующая - создать прогу, обнуляющую все атрибуты для параметрически задаваемого инфообъекта и значений 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.
Прошу подсказать, как решить эту задачу? Или я вообще пошел не по тому пути, и есть путь намного проще?
Age: 170 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Sat Nov 17, 2007 12:31 am Post subject:
Небольшой пример с использованием динамического указания имени таблицы в 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.
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.
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.
Информацию посмотрел, но пока для меня остался открытым еще один вопрос - как можно очистить часть полей во внутренней таблице, при том, что заранее ее структура неизвестна?
Т.е. мне известны всегда первые 4 поля, а что за ними - сколько и какие поля зависит от того, какой инфообъект был выбран. При этом мне требуется оставить первые четыре поля во внутренней таблице неизменными, обнулив все остальные неизвестные заранее поля.
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.