SAPфорум.RU
https://sapboard.ru/forum/

выгрузка из SAP в XML формат
https://sapboard.ru/forum/viewtopic.php?f=13&t=39777
Страница 1 из 1

Автор:  Janet [ Пн, авг 04 2008, 12:32 ]
Заголовок сообщения:  выгрузка из SAP в XML формат

Здравствуйте, коллеги!
Пожалуйста, Вы могли бы поделиться документацией по ХML в SAPe.
Я новичок, вообще никогда не программировала на АБАПЕ. А мне дали задание сделать выгрузку расчета транспортного налога из SAPa в XML формат для налоговой :shock: . Ищу любую информацию по данной теме... :)

Автор:  kicik [ Пн, авг 04 2008, 12:44 ]
Заголовок сообщения: 

Посмотри вот этот код

Code:
REPORT  ZTEST_KU.
TYPE-POOLS: ixml.

TYPES: BEGIN OF xml_line,
        data(256) TYPE x,
       END OF xml_line.

DATA: l_ixml            TYPE REF TO if_ixml,
      l_streamfactory   TYPE REF TO if_ixml_stream_factory,
      l_ostream         TYPE REF TO if_ixml_ostream,
      l_renderer        TYPE REF TO if_ixml_renderer,
      l_document        TYPE REF TO if_ixml_document,
      PARSER            TYPE STRING.

DATA: l_element_flights TYPE REF TO if_ixml_element,
      l_element_airline TYPE REF TO if_ixml_element,
      l_element_flight  TYPE REF TO if_ixml_element,
      l_element_from    TYPE REF TO if_ixml_element,
      l_element_to      TYPE REF TO if_ixml_element,
      l_element_dummy   TYPE REF TO if_ixml_element,
      l_value           TYPE string.

DATA: l_xml_table       TYPE TABLE OF xml_line,
      l_xml_size        TYPE i,
      l_rc              TYPE i.

DATA: lt_spfli          TYPE TABLE OF spfli.
DATA: l_spfli           TYPE spfli.


START-OF-SELECTION.
*   Fill the internal table
  SELECT * FROM spfli INTO TABLE lt_spfli.

*   Sort internal table
  SORT lt_spfli BY carrid.

*   Start filling xml dom object from internal table

*       Creating a ixml factory
  l_ixml = cl_ixml=>create( ).
*       Creating the dom object model
  l_document = l_ixml->create_document( ).
*       Fill root node with value flights
  l_element_flights  = l_document->create_simple_element(
              name = 'document'
              parent = l_document ).
  l_value = 'd300.00'.
  l_rc = l_element_flights->set_attribute( name = 'type' value =
  l_value ).
  l_value = '7'.
  l_rc = l_element_flights->set_attribute( name = 'version' value =
  l_value ).

  l_element_airline  = l_document->create_simple_element(
                           name = 'form_300000100001'
                           parent = l_element_flights  ).
*page1
  l_element_flight  = l_document->create_simple_element(
                            name = 'page_300000100001'
                            parent = l_element_airline ).

  l_element_from = l_document->create_simple_element(
                            name = 'rnn'
                            parent = l_element_flight
                            value = '30000000').


  l_element_from = l_document->create_simple_element(
                            name = 'np_month'
                            parent = l_element_flight
                            value = '02').

  l_element_from = l_document->create_simple_element(
                            name = 'np_quarter'
                            parent = l_element_flight
                            value = '1').

  l_element_from = l_document->create_simple_element(
                            name = 'np_year'
                            parent = l_element_flight
                            value = '2008').

  l_element_from = l_document->create_simple_element(
                            name = 'fio1'
                            parent = l_element_flight
                            value = 'Test User').

  l_element_from = l_document->create_simple_element(
                            name = 'fio2'
                            parent = l_element_flight ).

  l_element_from = l_document->create_simple_element(
                            name = 'fio3'
                            parent = l_element_flight ).

  l_element_from = l_document->create_simple_element(
                            name = 'oked1'
                            parent = l_element_flight ).

  l_element_from = l_document->create_simple_element(
                            name = 'oked2'
                            parent = l_element_flight ).

  l_element_from = l_document->create_simple_element(
                            name = 'oked3'
                            parent = l_element_flight ).


  l_element_from = l_document->create_simple_element(
                            name = 'code_currency'
                            parent = l_element_flight
                            value = 'KZT').

  l_element_from = l_document->create_simple_element(
                            name = 'unit_weight1'
                            parent = l_element_flight ).


  l_element_from = l_document->create_simple_element(
                            name = 'unit_weight2'
                            parent = l_element_flight ).


  l_element_from = l_document->create_simple_element(
                            name = 'unit_weight3'
                            parent = l_element_flight ).


  l_element_from = l_document->create_simple_element(
                            name = 'vd_p'
                            parent = l_element_flight
                            value = '0' ).

  l_element_from = l_document->create_simple_element(
                            name = 'vd_o'
                            parent = l_element_flight
                            value = '0' ).

  l_element_from = l_document->create_simple_element(
                            name = 'vd_d'
                            parent = l_element_flight
                            value = '0' ).

  l_element_from = l_document->create_simple_element(
                            name = 'vd_u'
                            parent = l_element_flight
                            value = '0' ).

  l_element_from = l_document->create_simple_element(
                            name = 'vd_l'
                            parent = l_element_flight
                            value = '0' ).


*
*         
*
*         <number_uved/>
*         <date_uved/>
*         <a_s_8>0</a_s_8>
*         <b_s_8>0</b_s_8>
*         <a_s_9/>
*         <b_s_9/>
*         <s_10_1>0</s_10_1>
*         <s_10_2>0</s_10_2>
*         <s_s/>
*         <number_svid/>
*         <pril_1>0</pril_1>
*         <pril_2>0</pril_2>
*         <pril_3>0</pril_3>
*         <pril_4>0</pril_4>
*         <pril_5>0</pril_5>
*         <pril_6>0</pril_6>
*         <pril_7>0</pril_7>
*         <pril_8>0</pril_8>
*         <pril_9>0</pril_9>
*         <pril_10>0</pril_10>
*         <pril_11>0</pril_11>
*         <pril_12>0</pril_12>
*         <a_s_300.00.001/>
*         <b_s_300.00.001/>
*         <a_s_300.00.002/>
*         <a_s_300.00.003/>
*         <b_s_300.00.003/>
*         <a_s_300.00.004/>
*         <a_s_300.00.005/>
*         <a_s_300.00.006/>
*         <s_300.00.007/>
*         <s_300.00.008/>
*         <s_300.00.009/>
*         <s_300.00.010/>





* page 2


  l_element_flight  = l_document->create_simple_element(
                        name = 'page_300000200008'
                        parent = l_element_airline ).

  l_element_from = l_document->create_simple_element(
                          name = 'rnn'
                          parent = l_element_flight
                          value = '60000000').




* page 3
  l_element_flight  = l_document->create_simple_element(
                        name = 'page_300000300005'
                        parent = l_element_airline ).

  l_element_from = l_document->create_simple_element(
                          name = 'rnn'
                          parent = l_element_flight
                          value = '60000000').






*    LOOP AT lt_spfli INTO l_spfli.
*
*      AT FIRST.
**       Creating a ixml factory
*        l_ixml = cl_ixml=>create( ).
**       Creating the dom object model
*        l_document = l_ixml->create_document( ).
**       Fill root node with value flights
*        l_element_flights  = l_document->create_simple_element(
*                    name = 'flights'
*                    parent = l_document ).
*      ENDAT.
*
*      AT NEW carrid.
**       Create element 'airline' as child of 'flights'
*        l_element_airline  = l_document->create_simple_element(
*                    name = 'airline'
*                    parent = l_element_flights  ).
*
**       Create attribute 'code' of node 'airline'
*        l_value = l_spfli-carrid.
*        l_rc = l_element_airline->set_attribute( name = 'code' value =
*l_value ).
*
**       Create attribute 'name' of node 'airline'
*        SELECT SINGLE carrname FROM scarr INTO l_value WHERE carrid EQ
*l_spfli-carrid.
*        l_rc = l_element_airline->set_attribute( name = 'name' value =
*l_value ).
*
*      ENDAT.
*
*      AT NEW connid.
**       Create element 'flight' as child of 'airline'
*        l_element_flight  = l_document->create_simple_element(
*                    name = 'flight'
*                    parent = l_element_airline  ).
*
**       Create attribute 'number' of node 'flight'
*        l_value = l_spfli-connid.
*        l_rc = l_element_flight->set_attribute( name = 'number' value =
*l_value ).
*
*      ENDAT.
*
**     Create element 'from' as child of 'flight'
*      CONCATENATE l_spfli-cityfrom ',' l_spfli-countryfr INTO l_value.
*      l_element_from  = l_document->create_simple_element(
*                  name = 'from'
*                  value = l_value
*                  parent = l_element_flight  ).
*
**     Create attribute 'airport' of node 'from'
*      l_value = l_spfli-airpfrom.
*      l_rc = l_element_from->set_attribute( name = 'airport' value =
*l_value ).
*
**     Create element 'to' as child of 'flight'
*      CONCATENATE l_spfli-cityto ',' l_spfli-countryto INTO l_value.
*      l_element_to  = l_document->create_simple_element(
*                  name = 'to'
*                  value = l_value
*                  parent = l_element_flight  ).
*
**     Create attribute 'airport' of node 'from'
*      l_value = l_spfli-airpto.
*      l_rc = l_element_to->set_attribute( name = 'airport' value =
*l_value ).
*
**     Create element 'departure' as child of 'flight'
*      l_value = l_spfli-deptime.
*      l_element_dummy  = l_document->create_simple_element(
*                  name = 'departure'
*                  value = l_value
*                  parent = l_element_flight ).
*
**     Create element 'arrival' as child of 'flight'
*      l_value = l_spfli-arrtime.
*      l_element_dummy  = l_document->create_simple_element(
*                  name = 'arrival'
*                  value = l_value
*                  parent = l_element_flight ).
*
**     Create element 'type' as child of 'flight'
*      CASE l_spfli-fltype.
*        WHEN 'X'.
*          l_value = 'Charter'.
*        WHEN OTHERS.
*          l_value = 'Scheduled'.
*      ENDCASE.
*      l_element_dummy  = l_document->create_simple_element(
*                  name = 'type'
*                  value = l_value
*                  parent = l_element_flight ).
*    ENDLOOP.
  IF sy-subrc NE 0.
      MESSAGE 'No data into db table ''spfli'', please run program
''SAPBC_DATA_GENERATOR'' with transaction ''SA38''' TYPE 'E'.
  ENDIF.


*   Creating a stream factory
  l_streamfactory = l_ixml->create_stream_factory( ).
*   Connect internal XML table to stream factory

  l_ostream = l_streamfactory->create_ostream_itable( table =
  l_xml_table ).

*
*  CALL METHOD l_ostream->SET_INDENT
*    EXPORTING
*      INDENT = 2.
*
*  CALL METHOD l_ostream->SET_PRETTY_PRINT
*    EXPORTING
*      PRETTY_PRINT = 'X'.




*   Rendering the document
  l_renderer = l_ixml->create_renderer( ostream  = l_ostream
       document = l_document ).
  l_rc = l_renderer->render( ).

*   Saving the XML document
  l_xml_size = l_ostream->get_num_written_raw( ).

*        IF xslt IS INITIAL.
          parser = 'ID_INDENT'.
*        ELSE.
*          parser = xslt.
*        ENDIF.
        CALL TRANSFORMATION (parser)
          SOURCE it_data = l_xml_table[]
          RESULT XML l_ostream.

  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      bin_filesize = l_xml_size
      filename     = 'c:\temp1\flights.nds'
      filetype     = 'BIN'
    CHANGING
      data_tab     = l_xml_table
    EXCEPTIONS
      OTHERS       = 24.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

Bully: пришел модератор и добавил тег code :D

Автор:  Rokhay [ Пн, авг 04 2008, 12:46 ]
Заголовок сообщения: 

http://sapboard.ru/forum/viewtopic.php ... hlight=xml

Для табличных данных, на мой взгляд, проще всего воспользоваться стандартной возможностью ALV-грида для выгрузки в XML.

Автор:  sy-uname [ Пн, авг 04 2008, 14:13 ]
Заголовок сообщения: 

kicik написал(а):
Посмотри вот этот код
Code:
REPORT  ZTEST_KU.
TYPE-POOLS: ixml.

TYPES: BEGIN OF xml_line,
        data(256) TYPE x,
       END OF xml_line.

DATA: l_ixml            TYPE REF TO if_ixml,
      l_streamfactory   TYPE REF TO if_ixml_stream_factory,
      l_ostream         TYPE REF TO if_ixml_ostream,
      l_renderer        TYPE REF TO if_ixml_renderer,
      l_document        TYPE REF TO if_ixml_document,
      PARSER            TYPE STRING.
...

kicik, когда Вы делаете вставку кода, используйте соответствующий тег CODE, а то ведь совершенно не читаемо получается

Автор:  Bully [ Пн, авг 04 2008, 14:19 ]
Заголовок сообщения: 

kicik написал(а):
Посмотри вот этот код

Лучше посоветуй поиском пользоваться :)

Автор:  crash_kz [ Чт, авг 28 2008, 12:23 ]
Заголовок сообщения: 

создаю xml-документ
l_ixml = cl_ixml=>create( ).
l_document = l_ixml->create_document( ).

задаю кодировку
l_encoding = l_ixml->create_encoding( byte_order = '0' character_set = 'utf-8' ).

хочу задать параметр standalone = 'no'
данный параметр является буленовским - при такой передаче
l_document->set_standalone( 'X').
в конечном файле появляется строка
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
и при такой l_document->set_standalone( '-').
тоже
<?xml version="1.0" encoding="utf-8" standalone="yes"?>


Как сделать чтоб при формировании создавалось
<?xml version="1.0" encoding="utf-8" standalone="NO"?>

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/