Hello Guys, I have a problem, I want to create a sales order in SAP from XML, I can read de XML but only header, no the positions. Please see:
I have this xml file:
</Conceptos>
</Comprobante>
</pm:Addenda_Pemex>
</cfdi:Addenda>
</PreFactura>
When I read this XML I can see the infotmation in an internal table like below:
As you can see I can get this information into the itab:
<pm:CONTRATO>4202838000</pm:CONTRATO>
<pm:O_SURTIMIENTO>4303193735</pm:O_SURTIMIENTO>
<pm:N_ESTIMACION>GEP338_E02</pm:N_ESTIMACION>
<pm:N_ACREEDOR>0000302421</pm:N_ACREEDOR>
<pm:ENTRADA>1003038413</pm:ENTRADA>
<pm:EJERCICIO>2014</pm:EJERCICIO>
<pm:VUREGION>SMEX</pm:VUREGION>
<pm:FICHAE>333722</pm:FICHAE>
<pm:FICHAF>244781</pm:FICHAF>
<pm:MONEDA>MXN</pm:MONEDA>
T
This is very god, but also I need information below:
-<Conceptos>
<Conceptocantidad="50.000" descripcion="9 C SENIOR INNAL" importe="1455529.00" unidad="TAG" valorUnitario="29630.58" />
</Conceptos>
Does anyone can help me? Here me code:
FORM Procesa_XML.
*CONCATENATE'You did clic in run button:' P_Solici INTO My_Var SEPARATED BY SPACE.
*WRITE My_Var.
CREATE OBJECT lcl_xml_doc.
CALL METHOD lcl_xml_doc->import_from_file
EXPORTING
filename = p_filnam
RECEIVING
retcode = v_subrc.
CHECK v_subrc = 0.
v_node = lcl_xml_doc->m_document.
CHECK NOT v_node IS INITIAL.
v_iterator = v_node->create_iterator( ).
v_node = v_iterator->get_next( ).
WHILE NOT v_node IS INITIAL.
CASE v_node->get_type( ).
WHEN if_ixml_node=>co_node_element.
v_name = v_node->get_name( ).
v_nodemap = v_node->get_attributes( ).
IF NOT v_nodemap IS INITIAL.
* attributes
v_count = v_nodemap->get_length( ).
DO v_count TIMES.
v_index = sy-index - 1.
v_attr = v_nodemap->get_item( v_index ).
v_name = v_attr->get_name( ).
v_prefix = v_attr->get_namespace_prefix( ).
v_value = v_attr->get_value( ).
ENDDO.
ENDIF.
WHEN if_ixml_node=>co_node_text OR
if_ixml_node=>co_node_cdata_section.
* text node
v_value = v_node->get_value( ).
MOVE v_value TO v_char.
IF v_char <> cl_abap_char_utilities=>cr_lf.
wa-name = v_name.
wa-value = v_value.
APPEND wa TO itab.
CLEAR wa.
ENDIF.
ENDCASE.
* advance to next node
v_node = v_iterator->get_next( ).
ENDWHILE.
LOOP AT itab INTO wa.
IF wa-name eq 'MONEDA'.
Moneda = wa-value.
ENDIF.
ENDLOOP.
BREAK-POINT.
ENDFORM.
Regards