- REPORT ZPRG_COPIA_PEDIDO.
- tables: DD03L.
- PARAMETERS: p_pedido type EBELN MATCHCODE OBJECT MEKK_C OBLIGATORY.
- SELECTION-SCREEN skip 1.
- PARAMETERS p_test as CHECKBOX DEFAULT 'X'.
- DATA: ls_header_po TYPE bapimepoheader,
- ls_header_pox TYPE bapimepoheaderx,
- lt_return_po TYPE TABLE OF bapiret2,
- lt_item_po TYPE TABLE OF bapimepoitem,
- lt_item_pox TYPE TABLE OF bapimepoitemx,
- lt_addr_po TYPE TABLE OF bapimepoaddrdelivery,
- lt_sched_po TYPE TABLE OF bapimeposchedule,
- lt_sched_pox TYPE TABLE OF bapimeposchedulx,
- lt_cond_po TYPE TABLE OF bapimepocond,
- lt_cond_pox TYPE TABLE OF bapimepocondx,
- lt_extin_po TYPE TABLE OF bapiparex,
- lc_item_po TYPE bapimepoitem,
- lc_item_pox TYPE bapimepoitemx,
- lc_addr_po TYPE bapimepoaddrdelivery,
- lc_sched_po TYPE bapimeposchedule,
- lc_sched_pox TYPE bapimeposchedulx,
- lc_cond_po TYPE bapimepocond,
- lc_cond_pox TYPE bapimepocondx,
- lc_extin_po TYPE bapiparex,
- lt_return type TABLE OF BAPIRET2,
- lv_rc TYPE return.
- TYPES: BEGIN OF ty_log_propuesta,
- ICON(4),
- ebeln(10),
- des_error(255),
- END OF ty_log_propuesta.
- data: t_alv_log type table of ty_log_propuesta,
- c_alv_log type ty_log_propuesta.
- include /GECI/MM_I_COPIA_PEDIDO_ALV.
- end-of-SELECTION.
- PERFORM load_data.
- perform check_data.
- form check_data.
- if ls_header_po-DOC_TYPE ne 'XXX'.
- perform procesa_pox.
- perform procesa_poext.
- perform procesa_po.
- perform list_data.
- else.
- message s398(00) with text-e02. "<- Tipo de pedido incorrecto
- endif.
- ENDFORM.
- form list_data.
- CREATE OBJECT lv_zcl_alv." EXPORTING i_titulo = 'Título'.
- lv_zcl_alv->puv_data->puv_t_data[] = t_alv_log[].
- lv_zcl_alv->alv_display( ).
- endform.
- form procesa_pox.
- *--[ Borramos los campos que ha pedido
- clear: ls_header_po-REF_1, ls_header_po-OUR_REF.
- perform tables_pox USING 'ls_header_po' 'ls_header_pox'.
- loop at lt_item_po into lc_item_po.
- * MOVE-CORRESPONDING lc_item_po to lc_item_pox.
- clear lc_item_pox.
- perform tables_pox USING 'lc_item_po' 'lc_item_pox'.
- lc_item_pox-PO_ITEM = lc_item_po-PO_ITEM.
- append lc_item_pox to lt_item_pox.
- endloop.
- LOOP AT lt_sched_po INTO lc_sched_po.
- * move-CORRESPONDING lc_sched_po to lc_sched_pox.
- clear lc_sched_pox.
- PERFORM tables_pox USING 'lc_sched_po' 'lc_sched_pox'.
- lc_sched_pox-PO_ITEM = lc_sched_po-PO_ITEM.
- lc_sched_pox-SCHED_LINE = lc_sched_po-SCHED_LINE.
- APPEND lc_sched_pox TO lt_sched_pox.
- ENDLOOP.
- LOOP AT lt_cond_po INTO lc_cond_po.
- * MOVE-CORRESPONDING lc_cond_po to lc_cond_pox.
- *--[ Borramos las condiciones
- clear lc_cond_po-CONDITION_NO.
- lc_cond_po-CHANGE_ID = 'I'.
- modify lt_cond_po from lc_cond_po INDEX sy-tabix.
- clear lc_cond_pox.
- PERFORM tables_pox USING 'lc_cond_po' 'lc_cond_pox'.
- lc_cond_pox-CONDITION_NO = lc_cond_po-CONDITION_NO.
- lc_cond_pox-ITM_NUMBER = lc_cond_po-ITM_NUMBER.
- lc_cond_pox-COND_ST_NO = lc_cond_po-COND_ST_NO.
- APPEND lc_cond_pox TO lt_cond_pox.
- ENDLOOP.
- endform.
- form tables_pox using origen destino.
- FIELD-SYMBOLS: <campo_ori> TYPE any,
- <campo_des> TYPE any,
- <fs_origen> type any,
- <fs_destino> type any.
- data: lv_tabla(50).
- case destino.
- wHEN 'ls_header_pox'. lv_tabla = 'bapimepoheaderx'.
- WHEN 'lc_item_pox'. lv_tabla = 'bapimepoitemx'.
- WHEN 'lc_sched_pox'. lv_tabla = 'bapimeposchedulx'.
- WHEN 'lc_cond_pox'. lv_tabla = 'bapimepocondx'.
- when OTHERS.
- exit.
- endcase.
- TRANSLATE lv_tabla to UPPER CASE.
- SELECT * FROM DD03L
- WHERE TABNAME = lv_tabla
- and INTLEN = 1
- order by position.
- CONCATENATE origen '-' DD03L-FIELDNAME into sy-lisel.
- assign (sy-lisel) to <fs_origen>.
- if sy-subrc eq 0.
- CONCATENATE destino '-' DD03L-FIELDNAME into sy-lisel.
- assign (sy-lisel) to <fs_destino>.
- if sy-subrc eq 0.
- if not <fs_origen> is INITIAL.
- <fs_destino> = 'X'.
- endif.
- endif.
- else.
- sy-pagno = strlen( sy-lisel ) - 1.
- if sy-lisel+sy-pagno(1) = 'X'.
- sy-lisel+sy-pagno(1) = ' '.
- assign (sy-lisel) to <fs_origen>.
- if sy-subrc eq 0.
- CONCATENATE destino '-' DD03L-FIELDNAME into sy-lisel.
- assign (sy-lisel) to <fs_destino>.
- if sy-subrc eq 0.
- if not <fs_origen> is INITIAL.
- <fs_destino> = 'X'.
- endif.
- endif.
- endif.
- endif.
- endif.
- ENDSELECT.
- * assign (origen) to <fs_origen>.
- * assign (destino) to <fs_destino>.
- * DO.
- * ASSIGN COMPONENT sy-INDEX OF STRUCTURE <fs_origen> TO <campo_ori>.
- * ASSIGN COMPONENT sy-INDEX OF STRUCTURE <fs_destino> TO <campo_des>.
- * IF sy-subrc <> 0.
- * EXIT.
- * ENDIF.
- * if not <campo_ori> is INITIAL.
- * <campo_des> = 'X'.
- * endif.
- * ENDDO.
- endform.
- form procesa_poext.
- data: lv_ext type ZGECI_MM_ST_POITEM,
- lv_ext_aux type ZGECI_MM_ST_POITEM,
- lv_extx type BAPI_TE_MEPOITEMX,
- lv_extx_aux type BAPI_TE_MEPOITEMX,
- lv_BAPI_TE_MEPOHEADER type BAPI_TE_MEPOHEADER,
- lv_BAPI_TE_MEPOHEADER_aux type BAPI_TE_MEPOHEADER,
- lv_BAPI_TE_MEPOHEADERX type BAPI_TE_MEPOHEADERX,
- lv_BAPI_TE_MEPOHEADERX_aux type BAPI_TE_MEPOHEADERX,
- lv_ebelp type ebelp,
- lv_sytabix type sytabix,
- lt_extin_po_aux TYPE TABLE OF bapiparex.
- clear lt_extin_po_aux.
- refresh lt_extin_po_aux.
- loop at lt_extin_po into lc_extin_po.
- clear lv_ext_aux.
- lv_sytabix = sy-tabix.
- lv_ebelp = lc_extin_po-VALUEPART1+0(5).
- if lc_extin_po-STRUCTURE eq 'BAPI_TE_MEPOITEM'.
- CALL METHOD /GECI/MM_CL_PO_UTILITIES=>MAPPING_EXT_TO_STRUC
- EXPORTING
- EXTENSION = lc_extin_po
- IMPORTING
- FIELDS_Z = lv_ext.
- *--[ Movemos sólo los campos que nos indica
- * lv_ext_aux-ZZ.... = lv_ext-ZZ.... "<-- Aquí movemos los campos Z que necesitamos
- CALL METHOD /GECI/MM_CL_PO_UTILITIES=>MAPPING_STRUC_TO_EXT
- EXPORTING
- EBELP = lv_ebelp
- IM_STRUC = lv_ext_aux
- IMPORTING
- CADENA = lc_extin_po-VALUEPART1.
- append lc_extin_po to lt_extin_po_aux.
- * endif.
- * if lc_extin_po-STRUCTURE cp '*POITEMX'.
- clear lv_extx_aux.
- *--[ Movemos sólo los campos que nos indica
- CONCATENATE lc_extin_po-STRUCTURE 'X' into lc_extin_po-STRUCTURE.
- lv_extx_aux-PO_ITEM = lv_ebelp.
- * lv_ext_aux-ZZ.... = 'X'. "<-- Aquí movemos los campos Z que necesitamos
- lc_extin_po-VALUEPART1 = lv_extx_aux.
- append lc_extin_po to lt_extin_po_aux.
- elseif lc_extin_po-STRUCTURE eq 'BAPI_TE_MEPOHEADER'.
- lv_BAPI_TE_MEPOHEADER = lc_extin_po-VALUEPART1.
- clear lv_BAPI_TE_MEPOHEADER_aux.
- * lv_BAPI_TE_MEPOHEADER_aux-ZZ... = lv_BAPI_TE_MEPOHEADER-ZZ... . "<-- Aquí movemos los campos Z que necesitamos
- lc_extin_po-VALUEPART1 = lv_BAPI_TE_MEPOHEADER_aux.
- append lc_extin_po to lt_extin_po_aux.
- * endif.
- * if lc_extin_po-STRUCTURE cp '*HEADER*X'.
- CONCATENATE lc_extin_po-STRUCTURE 'X' into lc_extin_po-STRUCTURE.
- lv_BAPI_TE_MEPOHEADERX = lc_extin_po-VALUEPART1.
- clear lv_BAPI_TE_MEPOHEADERX_aux.
- * lv_BAPI_TE_MEPOHEADERX_aux-ZZ... = 'X' . "<-- Aquí movemos los campos Z que necesitamos
- lc_extin_po-VALUEPART1 = lv_BAPI_TE_MEPOHEADERX_aux.
- append lc_extin_po to lt_extin_po_aux.
- else.
- append lc_extin_po to lt_extin_po_aux.
- endif.
- *--[ Restauramos
- ENDLOOP.
- lt_extin_po[] = lt_extin_po_aux[].
- ENDFORM.
- form load_data.
- CALL FUNCTION 'BAPI_PO_GETDETAIL1'
- EXPORTING
- PURCHASEORDER = p_pedido
- * ACCOUNT_ASSIGNMENT = ' '
- * ITEM_TEXT = ' '
- * HEADER_TEXT = ' '
- DELIVERY_ADDRESS = 'X'
- * VERSION = ' '
- * SERVICES = ' '
- * SERIALNUMBERS = ' '
- * INVOICEPLAN = ' '
- IMPORTING
- POHEADER = ls_header_po
- * POEXPIMPHEADER =
- TABLES
- RETURN = lt_return
- POITEM = lt_item_po
- POADDRDELIVERY = lt_addr_po
- POSCHEDULE = lt_sched_po
- * POACCOUNT =
- * POCONDHEADER =
- POCOND = lt_cond_po
- * POLIMITS =
- * POCONTRACTLIMITS =
- * POSERVICES =
- * POSRVACCESSVALUES =
- * POTEXTHEADER =
- * POTEXTITEM =
- * POEXPIMPITEM =
- * POCOMPONENTS =
- * POSHIPPINGEXP =
- * POHISTORY =
- * POHISTORY_TOTALS =
- * POCONFIRMATION =
- * ALLVERSIONS =
- * POPARTNER =
- EXTENSIONOUT = lt_extin_po
- * SERIALNUMBER =
- * INVPLANHEADER =
- * INVPLANITEM =
- * POHISTORY_MA =
- .
- endform .
- form procesa_po.
- clear LS_HEADER_PO-PO_NUMBER. "<-- Creamos un nuevo registro?
- PERFORM process_document TABLES
- lt_item_po
- lt_item_pox
- lt_addr_po
- lt_sched_po
- lt_sched_pox
- lt_cond_po
- lt_cond_pox
- lt_extin_po
- CHANGING ls_header_po
- ls_header_pox
- lv_rc.
- endform.
- FORM process_document TABLES
- pt_item_po STRUCTURE bapimepoitem
- pt_item_pox STRUCTURE bapimepoitemx
- pt_addr_po STRUCTURE bapimepoaddrdelivery
- pt_sched_po STRUCTURE bapimeposchedule
- pt_sched_pox STRUCTURE bapimeposchedulx
- pt_cond_po STRUCTURE bapimepocond
- pt_cond_pox STRUCTURE bapimepocondx
- pt_extin_po STRUCTURE bapiparex
- CHANGING ps_header_po TYPE bapimepoheader
- ps_header_pox TYPE bapimepoheaderx
- p_rc.
- DATA: lt_return TYPE TABLE OF bapiret2,
- ls_return TYPE bapiret2,
- ls_error TYPE ty_log_propuesta,
- lt_item TYPE TABLE OF bapimepoitem,
- lt_itemx TYPE TABLE OF bapimepoitemx,
- lt_lug_ent TYPE TABLE OF BAPIMEPOADDRDELIVERY,
- lt_posch TYPE TABLE OF BAPIMEPOSCHEDULE,
- lt_extension TYPE TABLE OF bapiparex,
- lt_partner TYPE BAPIEKKOP_TP.
- lt_item[] = pt_item_po[].
- lt_itemx[] = pt_item_pox[].
- lt_lug_ent[] = pt_addr_po[].
- lt_posch[] = pt_sched_po[].
- lt_extension[] = pt_extin_po[].
- CLEAR p_rc.
- "Llamamos a la BAPI para generar el pedido de propuesta
- *--[ Nos cargamos la memoria intermedia (Visto en la SDN)
- PERFORM MEPO_REFRESH(SAPLMEPO).
- DATA: MEM_OPTN LIKE CSDATA-XFELD VALUE '0'.
- EXPORT MEM_OPTN TO MEMORY ID 'CSIO_MEM_OPTN'.
- CALL FUNCTION 'BAPI_PO_CREATE1'
- EXPORTING
- poheader = ps_header_po "Cabecera
- poheaderx = ps_header_pox "Campos UPDATE en cabecera
- TESTRUN = p_test
- NO_PRICE_FROM_PO = 'X'
- TABLES
- RETURN = lt_return "Resultado
- poitem = lt_item "Posiciones
- poitemx = lt_itemx "Campos UPDATE en posiciones
- poaddrdelivery = lt_lug_ent "Lugares de entrega pt_addr_po
- poschedule = lt_posch "Repartos pt_sched_po
- poschedulex = pt_sched_pox "Campos UPDATE en repartos
- pocond = pt_cond_po "Condiciones
- pocondx = pt_cond_pox "Campos UPDATE en condiciones
- extensionin = lt_extension. "Campos Z de cabecera y posición
- "Buscamos si ha dado algún error la creación del pedido
- READ TABLE lt_return INTO ls_return WITH KEY TYPE = 'E'.
- "Si no hay errores guardamos realizamos COMMIT a la BBDD
- IF sy-subrc NE 0 and p_test is INITIAL.
- CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
- EXPORTING
- WAIT = 'X'.
- ENDIF.
- CLEAR ls_return.
- LOOP AT lt_return INTO ls_return WHERE TYPE EQ 'S' OR TYPE EQ 'E'.
- IF ls_return-TYPE = 'S'.
- p_rc = 'X'.
- ls_error-ICON = icon_green_light.
- ls_error-ebeln = ls_return-message_v2.
- ls_error-des_error = TEXT-e01.
- * ps_header-prop_ebeln = ls_error-ebeln.
- COMMIT WORK.
- ELSE.
- ls_error-ICON = icon_red_light.
- * IF ls_return-parameter <> 'POHEADER'.
- * ls_error-ebeln = ls_return-row.
- * ENDIF.
- ls_error-des_error = ls_return-MESSAGE.
- ENDIF.
- APPEND ls_error TO t_alv_log.
- ENDLOOP.
- REFRESH lt_return.
- CLEAR ls_return.
- ENDFORM. " PROCESS_DOCUMENT
Última modificación de la página el 04 November 2015 a las 15h04
Powered by
PmWiki