0% found this document useful (0 votes)
185 views31 pages

BAPIs SD

Uploaded by

sapalliancea
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
185 views31 pages

BAPIs SD

Uploaded by

sapalliancea
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 31

*----------------------------------------------------------------------*

***INCLUDE ZRF_ALMACEN_FORMS .
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form f_get_msg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_get_msg .

DATA:
i_line_size TYPE i VALUE '30',
i_lines TYPE i VALUE '13',
line_in LIKE sprot-line,
line_out LIKE sprot-line,
field_name LIKE dd03d-fieldname,
message_length TYPE i,
line_count TYPE i VALUE 1,
line_count_c(2) TYPE c,
mess_pos TYPE i VALUE 0,
line_pos TYPE i,
from_pos TYPE i,
length TYPE i,
test_char(1) TYPE c,
line_offset TYPE i.

FIELD-SYMBOLS:
<mess_field>.

IF sy-msgid IS NOT INITIAL.

CLEAR zwm_rf_log.

* grabar el mensaje en las vbles. del sistema


MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2
sy-msgv3 sy-msgv4
INTO line_out.

* Lógica copiada del RF estandar

message_length = STRLEN( line_out ).

* IF 1 > 3.
**........Unable to process message ID number....
* MESSAGE e110 WITH i_msgid i_msgno RAISING invalid_message1.
* ENDIF.

* split message text into lines.............................


line_offset = i_line_size - 1.

WHILE line_count <= i_lines AND mess_pos < message_length.


line_count_c = line_count.

CONCATENATE 'ZWM_RF_LOG-LINE' line_count_c INTO field_name.


* CONCATENATE 'message' line_count_c INTO field_name.
ASSIGN (field_name) TO <mess_field>.
line_pos = 0.

WHILE line_pos < i_line_size AND mess_pos < message_length.

<mess_field>+line_pos(1) = line_out+mess_pos(1).

line_pos = line_pos + 1.
mess_pos = mess_pos + 1.

ENDWHILE.

IF mess_pos < message_length.

test_char = 'X'.

WHILE ( NOT ( test_char IS INITIAL ) ) AND ( line_pos > 0 ).

line_pos = line_pos - 1.
mess_pos = mess_pos - 1.
test_char = <mess_field>+line_pos(1).

ENDWHILE.

IF line_pos > 0 AND line_pos < line_offset.

CLEAR <mess_field>.
from_pos = mess_pos - line_pos.
length = line_pos + 1.
<mess_field> = line_out+from_pos(length).

ELSEIF line_pos = 0.
mess_pos = mess_pos + line_offset.
ENDIF.
mess_pos = mess_pos + 1.

IF NOT ( <mess_field> IS INITIAL ).


line_count = line_count + 1.
ENDIF.

ENDIF.
ENDWHILE.

ENDIF. " sy-msgid

ENDFORM. " f_get_msg

*&---------------------------------------------------------------------*
*& Form f_modifica_pedido
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_modifica_pedido CHANGING p_v_error.

DATA: lv_header_inx LIKE bapisdh1x,


lv_header_in LIKE bapisdh1,
lv_posic LIKE vbap-posnr,
lv_bapi,
lv_index TYPE i.

DATA: BEGIN OF li_item OCCURS 0.


INCLUDE STRUCTURE bapisditm.
DATA: END OF li_item.

DATA: BEGIN OF li_itemx OCCURS 0.


INCLUDE STRUCTURE bapisditmx.
DATA: END OF li_itemx.

DATA: BEGIN OF li_sche OCCURS 0.


INCLUDE STRUCTURE bapischdl.
DATA: END OF li_sche.

DATA: BEGIN OF li_schex OCCURS 0.


INCLUDE STRUCTURE bapischdlx.
DATA: END OF li_schex.

DATA: BEGIN OF li_return OCCURS 0.


INCLUDE STRUCTURE bapiret2.
DATA: END OF li_return.

CLEAR: lv_header_inx, li_item, li_itemx, li_sche, li_schex, lv_bapi.


REFRESH: li_item, li_itemx, li_sche, li_schex.

* datos de cabecera
lv_header_in-sd_doc_cat = 'C'.
lv_header_inx-updateflag = 'U'.
lv_header_inx-sd_doc_cat = 'X'.

* modifico el pedido y rechazo posiciones sustituidas


LOOP AT i_vbap WHERE susti EQ 'X'.

li_item-itm_number = i_vbap-posnr.
li_itemx-itm_number = i_vbap-posnr.

li_itemx-updateflag = 'U'.

li_item-reason_rej = '99'.
li_itemx-reason_rej = 'X'.
APPEND: li_item, li_itemx.
CLEAR: li_item, li_itemx.

lv_bapi = 'X'. "llamo a la bapi

ENDLOOP.

SORT i_vbap BY posnr DESCENDING.


READ TABLE i_vbap INDEX 1.
lv_posic = i_vbap-posnr.

* añado las posiciones nuevas


LOOP AT i_datos.
lv_index = sy-tabix.
READ TABLE i_vbap WITH KEY matnr = i_datos-matnr.
IF sy-subrc NE 0.
ADD 10 TO lv_posic.

i_datos-posref = lv_posic.
MODIFY i_datos INDEX lv_index.

li_item-itm_number = lv_posic.
li_itemx-itm_number = lv_posic.

li_itemx-updateflag = 'I'.

li_item-material = i_datos-matnr.
li_itemx-material = 'X'.

li_item-batch = i_datos-charg.
li_itemx-batch = 'X'.

li_item-target_qty = i_datos-menge.
li_itemx-target_qty = 'X'.

APPEND: li_item, li_itemx.


CLEAR: li_item, li_itemx.

li_sche-itm_number = lv_posic.
li_schex-itm_number = lv_posic.

li_sche-sched_line = 1.
li_schex-sched_line = 1.

li_sche-req_qty = i_datos-menge.
li_schex-req_qty = 'X'.

li_schex-updateflag = 'I'.

APPEND: li_sche, li_schex.


CLEAR: li_sche, li_schex.

lv_bapi = 'X'. "llamo a la bapi

ENDIF.
ENDLOOP.

IF lv_bapi EQ 'X'. "solo llamo a la bapi si se cambia el pedido

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'


EXPORTING
salesdocument = v_vbeln
order_header_in = lv_header_in
order_header_inx = lv_header_inx
* SIMULATION =
* BEHAVE_WHEN_ERROR = ' '
* INT_NUMBER_ASSIGNMENT = ' '
* LOGIC_SWITCH =
* NO_STATUS_BUF_INIT = ' '
TABLES
return = li_return
order_item_in = li_item
order_item_inx = li_itemx
* PARTNERS =
* PARTNERCHANGES =
* PARTNERADDRESSES =
* ORDER_CFGS_REF =
* ORDER_CFGS_INST =
* ORDER_CFGS_PART_OF =
* ORDER_CFGS_VALUE =
* ORDER_CFGS_BLOB =
* ORDER_CFGS_VK =
* ORDER_CFGS_REFINST =
schedule_lines = li_sche
schedule_linesx = li_schex
* ORDER_TEXT =
* ORDER_KEYS =
* CONDITIONS_IN =
* CONDITIONS_INX =
* EXTENSIONIN =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.

WAIT UP TO 2 SECONDS.

ENDIF.

* compruebo si ha ido bien el proceso


READ TABLE li_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
p_v_error = 'X'.
ELSE.
CLEAR p_v_error.
WAIT UP TO 2 SECONDS.
ENDIF.

ENDFORM. " f_modifica_pedido

*&---------------------------------------------------------------------*
*& Form F_CREA_ENTREGA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_crea_entrega CHANGING p_v_error
p_v_entre LIKE likp-vbeln.

DATA: lv_pexpe LIKE bapidlvcreateheader-ship_point,


lv_fecha LIKE bapidlvcreateheader-due_date,
lv_entre LIKE bapishpdelivnumb-deliv_numb,
lv_pos TYPE i.

DATA: BEGIN OF li_item OCCURS 0.


INCLUDE STRUCTURE bapidlvreftosalesorder.
DATA: END OF li_item.

DATA: BEGIN OF li_return OCCURS 0.


INCLUDE STRUCTURE bapiret2.
DATA: END OF li_return.

DATA: lv_vbkok LIKE vbkok.


DATA: BEGIN OF li_vbpok OCCURS 0.
INCLUDE STRUCTURE vbpok.
DATA: END OF li_vbpok.
DATA: BEGIN OF li_prot OCCURS 0.
INCLUDE STRUCTURE prott.
DATA: END OF li_prot.

CLEAR: lv_pexpe, lv_fecha, lv_entre, li_item, li_return, lv_vbkok, li_vbpok.


REFRESH: li_item, li_return, li_vbpok.

SELECT SINGLE vstel


INTO vbap-vstel
FROM vbap
WHERE vbeln EQ v_vbeln.

lv_pexpe = vbap-vstel.
CLEAR lv_fecha.
*lv_fecha = sy-datum + 15.

lv_fecha = 99993112.

LOOP AT i_datos.

li_item-ref_doc = v_vbeln.
li_item-ref_item = i_datos-posref.
li_item-dlv_qty = i_datos-menge.
li_item-sales_unit = i_datos-meins.

APPEND li_item.
CLEAR li_item.

ENDLOOP.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'


EXPORTING
ship_point = lv_pexpe
due_date = lv_fecha
* DEBUG_FLG =
IMPORTING
delivery = lv_entre
* NUM_DELIVERIES =
TABLES
sales_order_items = li_item
* SERIAL_NUMBERS =
* EXTENSION_IN =
* DELIVERIES =
* CREATED_ITEMS =
* EXTENSION_OUT =
return = li_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.
WAIT UP TO 1 SECONDS.

* compruebo si se ha creado la entrega


IF lv_entre IS INITIAL.
CLEAR p_v_entre.
p_v_error = 'X'.
ELSE.

* actualizo la entrega para añadir el lote y la cantidad de picking


lv_vbkok-vbeln_vl = lv_entre.
lv_vbkok-vbtyp_vl = 'J'.
lv_vbkok-vbeln = lv_entre.

CLEAR lv_pos.

*** INICIO FJLM 15.12.14


SORT i_datos BY posref.
*** FIN FJLM 15.12.14

LOOP AT i_datos.
** READ TABLE i_vbap WITH KEY matnr = i_datos-matnr.
** IF sy-subrc EQ 0.
ADD 10 TO lv_pos.
*** lv_pos = i_datos-posref.
li_vbpok-vbeln_vl = lv_entre.
li_vbpok-posnr_vl = lv_pos.
li_vbpok-vbeln = lv_entre.
li_vbpok-posnn = lv_pos.
*** li_vbpok-posnn = i_datos-posref.
li_vbpok-charg = i_datos-charg.
li_vbpok-lfimg = i_datos-menge. ""
li_vbpok-pikmg = i_datos-menge.
li_vbpok-lianp = 'X'.
APPEND li_vbpok.
CLEAR li_vbpok.
** ENDIF.
ENDLOOP.

CALL FUNCTION 'WS_DELIVERY_UPDATE'


EXPORTING
vbkok_wa = lv_vbkok
* SYNCHRON = ' '
* NO_MESSAGES_UPDATE = ' '
commit = 'X'
delivery = lv_entre
update_picking = 'X'
* NICHT_SPERREN = ' '
* IF_CONFIRM_CENTRAL = ' '
* IF_WMPP = ' '
* IF_GET_DELIVERY_BUFFERED = ' '
* IF_NO_GENERIC_SYSTEM_SERVICE = ' '
* IF_DATABASE_UPDATE = '1'
* IF_NO_INIT = ' '
* IF_NO_READ = ' '
* IF_ERROR_MESSAGES_SEND_0 = 'X'
* IF_NO_BUFFER_REFRESH = ' '
* IT_PARTNER_UPDATE =
* IT_SERNR_UPDATE =
* IF_NO_REMOTE_CHG = ' '
* IF_NO_MES_UPD_PACK = ' '
* IF_LATE_DELIVERY_UPD = ' '
* IMPORTING
* EF_ERROR_ANY_0 =
* EF_ERROR_IN_ITEM_DELETION_0 =
* EF_ERROR_IN_POD_UPDATE_0 =
* EF_ERROR_IN_INTERFACE_0 =
* EF_ERROR_IN_GOODS_ISSUE_0 =
* EF_ERROR_IN_FINAL_CHECK_0 =
* EF_ERROR_PARTNER_UPDATE =
* EF_ERROR_SERNR_UPDATE =
TABLES
vbpok_tab = li_vbpok
prot = li_prot
* VERKO_TAB =
* VERPO_TAB =
* VBSUPCON_TAB =
* IT_VERPO_SERNR =
* IT_PACKING =
* IT_PACKING_SERNR =
* IT_REPACK =
* IT_HANDLING_UNITS =
* IT_OBJECTS =
* ET_CREATED_HUS =
* TVPOD_TAB =
* IT_TMSTMP =
.

COMMIT WORK AND WAIT.

******************************MODIFICAR********************************************
**************************************
WAIT UP TO 2 SECONDS.
******************************MODIFICAR********************************************
**************************************

DATA: lv_header_d LIKE bapiobdlvhdrchg,


lv_header_c LIKE bapiobdlvhdrctrlchg,
lv_control LIKE bapidlvcontrol.

DATA: BEGIN OF li_itemd OCCURS 0.


INCLUDE STRUCTURE bapiobdlvitemchg.
DATA: END OF li_itemd.

DATA: BEGIN OF li_itemc OCCURS 0.


INCLUDE STRUCTURE bapiobdlvitemctrlchg.
DATA: END OF li_itemc.

lv_header_d-deliv_numb = lv_entre.
lv_header_c-deliv_numb = lv_entre.

lv_control-upd_ind = 'U'.

LOOP AT li_vbpok.
READ TABLE i_datos INDEX sy-tabix.

li_itemd-deliv_numb = li_vbpok-vbeln.
li_itemd-deliv_item = li_vbpok-posnn.
li_itemd-batch = li_vbpok-charg.
li_itemd-dlv_qty = li_vbpok-pikmg.

li_itemd-dlv_qty_imunit = li_vbpok-pikmg.
li_itemd-sales_unit = i_datos-meins.

li_itemd-fact_unit_nom = 1.
li_itemd-fact_unit_denom = 1.
APPEND li_itemd.
CLEAR li_itemd.

li_itemc-deliv_numb = li_vbpok-vbeln.
li_itemc-deliv_item = li_vbpok-posnn.
li_itemc-chg_delqty = 'X'.
APPEND li_itemc.
CLEAR li_itemc.

ENDLOOP.

***FJLM 270410 inicio . ID de usuario


lv_header_d-route = v_pernr.
lv_header_c-route_flg = 'U'.
***FJLM fin

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'


EXPORTING
header_data = lv_header_d
header_control = lv_header_c
delivery = lv_entre
techn_control = lv_control
* HEADER_DATA_SPL =
* HEADER_CONTROL_SPL =
* SENDER_SYSTEM =
TABLES
* HEADER_PARTNER =
* HEADER_PARTNER_ADDR =
* HEADER_DEADLINES =
item_data = li_itemd
item_control = li_itemc
* ITEM_SERIAL_NO =
* SUPPLIER_CONS_DATA =
* EXTENSION1 =
* EXTENSION2 =
return = li_return
* TOKENREFERENCE =
* ITEM_DATA_SPL =
* COLLECTIVE_CHANGE_ITEMS =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.

WAIT UP TO 2 SECONDS.

p_v_entre = lv_entre.
CLEAR p_v_error.
ENDIF.
ENDFORM. " F_CREA_ENTREGA

*&---------------------------------------------------------------------*
*& Form F_CREA_SALIDA_MERC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
* -->P_V_ENTRE text
*----------------------------------------------------------------------*
FORM f_crea_salida_merc USING p_v_entre LIKE likp-vbeln
CHANGING p_v_error.

DATA: li_vbkok LIKE vbkok,


li_prot LIKE prott OCCURS 0 WITH HEADER LINE,
ef_error_any_0 TYPE c,
ef_error_in_item_deletion_0 TYPE c,
ef_error_in_pod_update_0 TYPE c,
ef_error_in_interface_0 TYPE c,
ef_error_in_goods_issue_0 TYPE c,
ef_error_in_final_check_0 TYPE c.

REFRESH li_prot.

CLEAR: li_prot, li_vbkok, ef_error_in_item_deletion_0,


ef_error_in_pod_update_0,
ef_error_in_interface_0,
ef_error_in_goods_issue_0,
ef_error_in_final_check_0.

li_vbkok-vbeln_vl = p_v_entre.
li_vbkok-wabuc = 'X'.

CALL FUNCTION 'WS_DELIVERY_UPDATE'


EXPORTING
vbkok_wa = li_vbkok
synchron = 'X'
no_messages_update = ' '
update_picking = 'X'
commit = 'X'
delivery = p_v_entre
nicht_sperren = 'X'
if_error_messages_send_0 = space
IMPORTING
ef_error_any_0 = ef_error_any_0
ef_error_in_item_deletion_0 = ef_error_in_item_deletion_0
ef_error_in_pod_update_0 = ef_error_in_pod_update_0
ef_error_in_interface_0 = ef_error_in_interface_0
ef_error_in_goods_issue_0 = ef_error_in_goods_issue_0
ef_error_in_final_check_0 = ef_error_in_final_check_0
TABLES
prot = li_prot.

* comprobamos si hay errores en la contabilizacion de la SM


IF NOT ef_error_any_0 IS INITIAL OR
NOT ef_error_in_item_deletion_0 IS INITIAL OR
NOT ef_error_in_pod_update_0 IS INITIAL OR
NOT ef_error_in_interface_0 IS INITIAL OR
NOT ef_error_in_goods_issue_0 IS INITIAL OR
NOT ef_error_in_final_check_0 IS INITIAL.
p_v_error = 'X'.
ELSE.
CLEAR p_v_error.
ENDIF.

ENDFORM. " F_CREA_SALIDA_MERC

*&---------------------------------------------------------------------*
*& Form F_MODIFICA_PEDIDO_COMPRA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_modifica_pedido_compra CHANGING p_v_error.

DATA: lv_poheader LIKE bapimepoheader,


lv_poheaderx LIKE bapimepoheaderx,
lv_ebelp LIKE ekpo-ebelp.

DATA: BEGIN OF li_poitem OCCURS 0.


INCLUDE STRUCTURE bapimepoitem.
DATA: END OF li_poitem.

DATA: BEGIN OF li_poitemx OCCURS 0.


INCLUDE STRUCTURE bapimepoitemx.
DATA: END OF li_poitemx.

DATA: BEGIN OF li_pocond OCCURS 0.


INCLUDE STRUCTURE bapimepocond.
DATA: END OF li_pocond.

DATA: BEGIN OF li_pocondx OCCURS 0.


INCLUDE STRUCTURE bapimepocondx.
DATA: END OF li_pocondx.

DATA: BEGIN OF li_return OCCURS 0.


INCLUDE STRUCTURE bapiret2.
DATA: END OF li_return.

** LOOP AT i_ekpo.
** ENDLOOP.
** lv_ebelp = i_ekpo-ebelp. "obtengo ultima posicion pedido
SELECT ebelp
INTO lv_ebelp
FROM ekpo
WHERE ebeln EQ v_vbeln.
ENDSELECT.

* añado al pedido tantas posiciones como carretes se hayan informado


LOOP AT i_datos WHERE matnr_c NE space.

ADD 10 TO lv_ebelp.

i_datos-posnr_c = lv_ebelp. "guardamos la posicion del carrete


MODIFY i_datos INDEX sy-tabix.

CLEAR: li_return, li_poitem, li_poitemx, li_pocond, li_pocondx.


REFRESH: li_return, li_poitem, li_poitemx, li_pocond, li_pocondx.

li_poitem-po_item = lv_ebelp.
li_poitemx-po_item = lv_ebelp.

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


* EXPORTING
* input = i_datos-matnr_c
* IMPORTING
* output = i_datos-matnr_c.

li_poitem-material = i_datos-matnr_c.
li_poitemx-material = 'X'.
li_poitemx-po_itemx = 'X'.

li_poitem-quantity = 1.
li_poitemx-quantity = 'X'.
APPEND: li_poitem, li_poitemx.

li_pocond-itm_number = lv_ebelp.

li_pocondx-itm_number = lv_ebelp.

li_pocond-cond_type = 'ZPTO'.
li_pocondx-cond_type = 'X'.

li_pocond-currency = 'EUR'.
li_pocondx-currency = 'X'.

li_pocond-change_id = 'I'.

li_pocond-cond_value = i_datos-netpr_c.
li_pocondx-cond_value = 'X'.

IF li_pocond-cond_value IS INITIAL.
li_pocond-cond_type = 'ZPVP'.
ENDIF.
APPEND: li_pocond, li_pocondx.

CALL FUNCTION 'BAPI_PO_CHANGE'


EXPORTING
purchaseorder = v_vbeln
* POHEADER =
* POHEADERX =
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =
* IMPORTING
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
return = li_return
poitem = li_poitem
poitemx = li_poitemx
* POADDRDELIVERY =
* POSCHEDULE =
* POSCHEDULEX =
* POACCOUNT =
* POACCOUNTPROFITSEGMENT =
* POACCOUNTX =
* POCONDHEADER =
* POCONDHEADERX =
pocond = li_pocond
pocondx = li_pocondx
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* POTEXTITEM =
* ALLVERSIONS =
* POPARTNER =
* POCOMPONENTS =
* POCOMPONENTSX =
* POSHIPPING =
* POSHIPPINGX =
* POSHIPPINGEXP =
* POHISTORY =
* POHISTORY_TOTALS =
* POCONFIRMATION =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.

* compruebo si ha ido bien el proceso


READ TABLE li_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
p_v_error = 'X'.
EXIT.
ELSE.
CLEAR p_v_error.
ENDIF.

ENDLOOP.

WAIT UP TO 2 SECONDS.

ENDFORM. " F_MODIFICA_PEDIDO_COMPRA

*&---------------------------------------------------------------------*
*& Form F_MODIFICA_PEDIDO_COMPRA_TRAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_modifica_pedido_compra_tras CHANGING p_v_error.

DATA: lv_poheader LIKE bapimepoheader,


lv_poheaderx LIKE bapimepoheaderx,
lv_ebelp LIKE ekpo-ebelp.

DATA: BEGIN OF li_poitem OCCURS 0.


INCLUDE STRUCTURE bapimepoitem.
DATA: END OF li_poitem.

DATA: BEGIN OF li_poitemx OCCURS 0.


INCLUDE STRUCTURE bapimepoitemx.
DATA: END OF li_poitemx.

DATA: BEGIN OF li_pocond OCCURS 0.


INCLUDE STRUCTURE bapimepocond.
DATA: END OF li_pocond.

DATA: BEGIN OF li_pocondx OCCURS 0.


INCLUDE STRUCTURE bapimepocondx.
DATA: END OF li_pocondx.

DATA: BEGIN OF li_return OCCURS 0.


INCLUDE STRUCTURE bapiret2.
DATA: END OF li_return.

** LOOP AT i_ekpo.
** ENDLOOP.
** lv_ebelp = i_ekpo-ebelp. "obtengo ultima posicion pedido
SELECT ebelp
INTO lv_ebelp
FROM ekpo
WHERE ebeln EQ v_vbeln.
ENDSELECT.

* añado al pedido tantas posiciones como carretes se hayan informado


LOOP AT i_datos WHERE matnr_c NE space.

ADD 10 TO lv_ebelp.

i_datos-posnr_c = lv_ebelp. "guardamos la posicion del carrete


MODIFY i_datos INDEX sy-tabix.

CLEAR: li_return, li_poitem, li_poitemx, li_pocond, li_pocondx.


REFRESH: li_return, li_poitem, li_poitemx, li_pocond, li_pocondx.

LOOP AT i_ekpo WHERE werks <> v_werks.


li_poitem-plant = i_ekpo-werks.
ENDLOOP.
li_poitemx-plant = 'X'.

li_poitem-po_item = lv_ebelp.
li_poitemx-po_item = lv_ebelp.
li_poitem-material = i_datos-matnr_c.
li_poitemx-material = 'X'.
li_poitemx-po_itemx = 'X'.

li_poitem-quantity = 1.
li_poitemx-quantity = 'X'.
APPEND: li_poitem, li_poitemx.

CALL FUNCTION 'BAPI_PO_CHANGE'


EXPORTING
purchaseorder = v_vbeln
* POHEADER =
* POHEADERX =
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =
* IMPORTING
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
return = li_return
poitem = li_poitem
poitemx = li_poitemx
* POADDRDELIVERY =
* POSCHEDULE =
* POSCHEDULEX =
* POACCOUNT =
* POACCOUNTPROFITSEGMENT =
* POACCOUNTX =
* POCONDHEADER =
* POCONDHEADERX =
pocond = li_pocond
pocondx = li_pocondx
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* POTEXTITEM =
* ALLVERSIONS =
* POPARTNER =
* POCOMPONENTS =
* POCOMPONENTSX =
* POSHIPPING =
* POSHIPPINGX =
* POSHIPPINGEXP =
* POHISTORY =
* POHISTORY_TOTALS =
* POCONFIRMATION =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.

* compruebo si ha ido bien el proceso


READ TABLE li_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
p_v_error = 'X'.
EXIT.
ELSE.
CLEAR p_v_error.
ENDIF.

ENDLOOP.

WAIT UP TO 2 SECONDS.

ENDFORM. " F_MODIFICA_PEDIDO_COMPRA

*&---------------------------------------------------------------------*
*& Form F_CREAR_ENTRADA_MERC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_crear_entrada_merc CHANGING p_v_error.

DATA: lv_goodsmvt_h LIKE bapi2017_gm_head_01,


lv_goodsmvt_c LIKE bapi2017_gm_code,
lv_mblnr LIKE mkpf-mblnr.

DATA: BEGIN OF li_item OCCURS 0.


INCLUDE STRUCTURE bapi2017_gm_item_create.
DATA: END OF li_item.

DATA: BEGIN OF li_return OCCURS 0.


INCLUDE STRUCTURE bapiret2.
DATA: END OF li_return.

DATA l_ndr TYPE charx.

CLEAR: lv_goodsmvt_h, lv_goodsmvt_c, lv_mblnr, li_item, li_return.


REFRESH: li_item, li_return.

* datos cabecera
*** SELECT SINGLE *
*** FROM ekko
*** WHERE ebeln EQ v_vbeln.
*** IF ekko-bsart = 'ZTRA'.
**** si es una entrega entrante relleno el dato
*** SELECT SINGLE vbeln
*** INTO lv_goodsmvt_h-ref_doc_no
*** FROM likp
*** WHERE verur EQ v_xblnr.
**** AND lfart = 'NL'
*** IF sy-subrc EQ 0.
*** lv_goodsmvt_h-ref_doc_no_long = v_xblnr.
*** ELSE.
*** lv_goodsmvt_h-ref_doc_no = v_xblnr.
*** ENDIF.
*** ENDIF.

lv_goodsmvt_h-ref_doc_no_long = v_xblnr.
lv_goodsmvt_h-ref_doc_no = v_xblnr.

lv_goodsmvt_h-pstng_date = v_fecha.
lv_goodsmvt_h-doc_date = v_fecha.

lv_goodsmvt_h-pr_uname = sy-uname. "rellenar para que se imprima


lv_goodsmvt_h-ver_gr_gi_slip = '3'.
lv_goodsmvt_h-ver_gr_gi_slipx = 'X'.
l_ndr = 'X'.
SET PARAMETER ID 'NDR' FIELD l_ndr.

lv_goodsmvt_c-gm_code = '01'.

* datos posicion
LOOP AT i_datos.

MOVE: i_datos-matnr TO li_item-material,


v_werks TO li_item-plant,
i_datos-charg TO li_item-batch,
'101' TO li_item-move_type,
i_datos-menge2 TO li_item-entry_qnt,
i_datos-meins TO li_item-entry_uom,
v_vbeln TO li_item-po_number,
i_datos-ebelp TO li_item-po_item,
'B' TO li_item-mvt_ind.

* relleno el lote del proveedor


CLEAR ekko.
SELECT SINGLE lifnr
INTO ekko-lifnr
FROM ekko
WHERE ebeln EQ v_vbeln.
IF sy-subrc EQ 0.
SELECT SINGLE charg
INTO li_item-vendrbatch
FROM zmm_lote
WHERE lifnr EQ ekko-lifnr.
ENDIF.
APPEND li_item.

* datos del carrete


IF NOT i_datos-matnr_c IS INITIAL.
li_item-material = i_datos-matnr_c.
li_item-entry_qnt = 1.
li_item-entry_uom = 'ST'.
li_item-po_item = i_datos-posnr_c.
APPEND li_item.
CLEAR li_item.
ENDIF.

ENDLOOP.

* bapi
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = lv_goodsmvt_h
goodsmvt_code = lv_goodsmvt_c
IMPORTING
materialdocument = lv_mblnr
TABLES
goodsmvt_item = li_item
return = li_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.

* compruebo si ha ido bien el proceso


IF lv_mblnr IS INITIAL.
p_v_error = 'X'.
EXIT.
ELSE.
MOVE lv_mblnr TO v_vbeln.
ENDIF.

ENDFORM. " F_CREAR_ENTRADA_MERC

*&---------------------------------------------------------------------*
*& Form F_CREA_ENTREGA_TR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
* <--P_V_ENTRE text
*----------------------------------------------------------------------*
FORM f_crea_entrega_tr CHANGING p_v_error
p_v_entre.

DATA: lv_pexpe LIKE bapidlvcreateheader-ship_point,


lv_fecha LIKE bapidlvcreateheader-due_date,
lv_entre LIKE bapishpdelivnumb-deliv_numb,
lv_pos TYPE i.

DATA: BEGIN OF li_item OCCURS 0.


INCLUDE STRUCTURE bapidlvreftosto.
DATA: END OF li_item.
DATA: BEGIN OF li_return OCCURS 0.
INCLUDE STRUCTURE bapiret2.
DATA: END OF li_return.

DATA: lv_vbkok LIKE vbkok.


DATA: BEGIN OF li_vbpok OCCURS 0.
INCLUDE STRUCTURE vbpok.
DATA: END OF li_vbpok.
DATA: BEGIN OF li_prot OCCURS 0.
INCLUDE STRUCTURE prott.
DATA: END OF li_prot.
* DATA: mbew TYPE SORTED TABLE OF mbew
* WITH unique key matnr bwtty.

CLEAR: lv_pexpe, lv_fecha, lv_entre, li_item, li_return, lv_vbkok, li_vbpok.


REFRESH: li_item, li_return, li_vbpok.

SELECT SINGLE vstel


INTO vbap-vstel
FROM ekpv
WHERE ebeln EQ v_vbeln.

lv_pexpe = vbap-vstel.
lv_fecha = sy-datum.

LOOP AT i_datos.

li_item-ref_doc = v_vbeln.
li_item-ref_item = i_datos-posref.
** li_item-dlv_qty = i_datos-menge.
** li_item-sales_unit = i_datos-meins.

APPEND li_item.
CLEAR li_item.

ENDLOOP.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'


EXPORTING
ship_point = lv_pexpe
due_date = lv_fecha
* DEBUG_FLG =
IMPORTING
delivery = lv_entre
* NUM_DELIVERIES =
TABLES
stock_trans_items = li_item
* SERIAL_NUMBERS =
* EXTENSION_IN =
* DELIVERIES =
* CREATED_ITEMS =
* EXTENSION_OUT =
return = li_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.
* compruebo si se ha creado la entrega
IF lv_entre IS INITIAL.
CLEAR p_v_entre.
p_v_error = 'X'.
ELSE.

* actualizo la entrega para añadir el lote y la cantidad de picking


lv_vbkok-vbeln_vl = lv_entre.
lv_vbkok-vbtyp_vl = 'J'.
lv_vbkok-vbeln = lv_entre.

SORT i_datos BY posref.


CLEAR lv_pos.
LOOP AT i_datos.
** READ TABLE i_ekpo WITH KEY matnr = i_datos-matnr.
** IF sy-subrc EQ 0.

ADD 10 TO lv_pos.
*** lv_pos = i_datos-posref.

li_vbpok-vbeln_vl = lv_entre.
li_vbpok-posnr_vl = lv_pos.
li_vbpok-vbeln = lv_entre.
li_vbpok-posnn = lv_pos.
li_vbpok-charg = i_datos-charg.
*EROJO 01/07/22 Clase de valoración para bobinas gestionado con categoria de
valoracion por lote
* select single from mbew
* where bwtty = 'X' AND li_vbpok-matnr.
* endselect.
* read table mbew with table key matnr = li_vbpok-matnr bwtty = 'X'
* TRANSPORTING NO FIELDS.
*
* if sy-subrc = 0.
* li_vbpok-bwtar = i_datos-charg.
* endif.

*FIN EROJO
li_vbpok-lfimg = i_datos-menge. ""
li_vbpok-pikmg = i_datos-menge.
li_vbpok-lianp = 'X'.
APPEND li_vbpok.
CLEAR li_vbpok.
** ENDIF.
ENDLOOP.

CALL FUNCTION 'WS_DELIVERY_UPDATE'


EXPORTING
vbkok_wa = lv_vbkok
* SYNCHRON = ' '
* NO_MESSAGES_UPDATE = ' '
commit = 'X'
delivery = lv_entre
update_picking = 'X'
* NICHT_SPERREN = ' '
* IF_CONFIRM_CENTRAL = ' '
* IF_WMPP = ' '
* IF_GET_DELIVERY_BUFFERED = ' '
* IF_NO_GENERIC_SYSTEM_SERVICE = ' '
* IF_DATABASE_UPDATE = '1'
* IF_NO_INIT = ' '
* IF_NO_READ = ' '
* IF_ERROR_MESSAGES_SEND_0 = 'X'
* IF_NO_BUFFER_REFRESH = ' '
* IT_PARTNER_UPDATE =
* IT_SERNR_UPDATE =
* IF_NO_REMOTE_CHG = ' '
* IF_NO_MES_UPD_PACK = ' '
* IF_LATE_DELIVERY_UPD = ' '
* IMPORTING
* EF_ERROR_ANY_0 =
* EF_ERROR_IN_ITEM_DELETION_0 =
* EF_ERROR_IN_POD_UPDATE_0 =
* EF_ERROR_IN_INTERFACE_0 =
* EF_ERROR_IN_GOODS_ISSUE_0 =
* EF_ERROR_IN_FINAL_CHECK_0 =
* EF_ERROR_PARTNER_UPDATE =
* EF_ERROR_SERNR_UPDATE =
TABLES
vbpok_tab = li_vbpok
prot = li_prot
* VERKO_TAB =
* VERPO_TAB =
* VBSUPCON_TAB =
* IT_VERPO_SERNR =
* IT_PACKING =
* IT_PACKING_SERNR =
* IT_REPACK =
* IT_HANDLING_UNITS =
* IT_OBJECTS =
* ET_CREATED_HUS =
* TVPOD_TAB =
* IT_TMSTMP =
.

COMMIT WORK AND WAIT.


WAIT UP TO 2 SECONDS.

DATA: lv_header_d LIKE bapiobdlvhdrchg,


lv_header_c LIKE bapiobdlvhdrctrlchg,
lv_control LIKE bapidlvcontrol.

DATA: BEGIN OF li_itemd OCCURS 0.


INCLUDE STRUCTURE bapiobdlvitemchg.
DATA: END OF li_itemd.

DATA: BEGIN OF li_itemc OCCURS 0.


INCLUDE STRUCTURE bapiobdlvitemctrlchg.
DATA: END OF li_itemc.

lv_header_d-deliv_numb = lv_entre.
lv_header_c-deliv_numb = lv_entre.

lv_control-upd_ind = 'U'.

LOOP AT li_vbpok.
READ TABLE i_datos INDEX sy-tabix.
li_itemd-deliv_numb = li_vbpok-vbeln.
li_itemd-deliv_item = li_vbpok-posnn.
li_itemd-batch = li_vbpok-charg.
li_itemd-dlv_qty = li_vbpok-pikmg.

li_itemd-dlv_qty_imunit = li_vbpok-pikmg.
li_itemd-sales_unit = i_datos-meins.

li_itemd-fact_unit_nom = 1.
li_itemd-fact_unit_denom = 1.
APPEND li_itemd.
CLEAR li_itemd.

li_itemc-deliv_numb = li_vbpok-vbeln.
li_itemc-deliv_item = li_vbpok-posnn.
li_itemc-chg_delqty = 'X'.
APPEND li_itemc.
CLEAR li_itemc.

ENDLOOP.

***FJLM 270410 inicio . ID de usuario


lv_header_d-route = v_pernr.
lv_header_c-route_flg = 'U'.
***FJLM fin

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'


EXPORTING
header_data = lv_header_d
header_control = lv_header_c
delivery = lv_entre
techn_control = lv_control
* HEADER_DATA_SPL =
* HEADER_CONTROL_SPL =
* SENDER_SYSTEM =
TABLES
* HEADER_PARTNER =
* HEADER_PARTNER_ADDR =
* HEADER_DEADLINES =
item_data = li_itemd
item_control = li_itemc
* ITEM_SERIAL_NO =
* SUPPLIER_CONS_DATA =
* EXTENSION1 =
* EXTENSION2 =
return = li_return
* TOKENREFERENCE =
* ITEM_DATA_SPL =
* COLLECTIVE_CHANGE_ITEMS =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'.

WAIT UP TO 2 SECONDS.

p_v_entre = lv_entre.
CLEAR p_v_error.
ENDIF.

ENDFORM. " F_CREA_ENTREGA_TR

*&---------------------------------------------------------------------*
*& Form F_LANZA_IMPRESION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_V_ENTRE text
*----------------------------------------------------------------------*
FORM f_lanza_impresion USING p_v_entre LIKE likp-vbeln.

DATA: lv_code LIKE sy-subrc.

SELECT SINGLE *
FROM nast
WHERE objky = p_v_entre
AND kschl = 'ZLD0'.

CALL FUNCTION 'WFMC_MESSAGE_SINGLE'


EXPORTING
pi_nast = nast
IMPORTING
pe_rcode = lv_code.

ENDFORM. " F_LANZA_IMPRESION

*&---------------------------------------------------------------------*
*& Form F_CREA_501
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_crea_501 CHANGING p_v_error.

DATA: lv_header LIKE bapi2017_gm_head_01,


lv_code LIKE bapi2017_gm_code,
lv_belnr LIKE bapi2017_gm_head_ret-mat_doc,
lv_gjahr LIKE bapi2017_gm_head_ret-doc_year.

DATA: BEGIN OF li_item OCCURS 0.


INCLUDE STRUCTURE bapi2017_gm_item_create.
DATA: END OF li_item.

DATA: BEGIN OF li_return OCCURS 0.


INCLUDE STRUCTURE bapiret2.
DATA: END OF li_return.

CLEAR: lv_header, lv_code, lv_belnr, lv_gjahr, li_item, li_return.


REFRESH: li_item, li_return.

*---------movimiento 501 entrada mcia imputada pedido ----------------*


* datos de cabecera
lv_header-pstng_date = sy-datum.
lv_header-doc_date = sy-datum.
lv_code = '01'. "EM

* datos de posicion
LOOP AT i_datos.

li_item-material = i_datos-matnr.
li_item-plant = v_werks.
li_item-stge_loc = v_lgort.
li_item-batch = i_datos-charg.

li_item-move_type = '501'.
li_item-spec_stock = 'E'.

li_item-entry_qnt = i_datos-menge.
li_item-entry_uom = i_datos-meins.

SELECT SINGLE vbeln vbelp


INTO (li_item-val_sales_ord,
li_item-val_s_ord_item)
FROM ekkn
WHERE ebeln EQ v_vbeln
AND ebelp EQ i_datos-posref.
IF sy-subrc EQ 0 AND ( NOT li_item-val_sales_ord IS INITIAL AND
NOT li_item-val_s_ord_item IS INITIAL ).
APPEND li_item.
CLEAR li_item.
ENDIF.

ENDLOOP.

IF li_item[] IS INITIAL.
EXIT.
ENDIF.

* bapi
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = lv_header
goodsmvt_code = lv_code
* TESTRUN = ' '
* GOODSMVT_REF_EWM =
IMPORTING
* GOODSMVT_HEADRET =
materialdocument = lv_belnr
matdocumentyear = lv_gjahr
TABLES
goodsmvt_item = li_item
* GOODSMVT_SERIALNUMBER =
return = li_return
* GOODSMVT_SERV_PART_DATA =
* EXTENSIONIN =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'
* IMPORTING
* RETURN =
.
IF lv_belnr IS INITIAL.
p_v_error = 'X'.
EXIT.
ELSE.
p_v_error = ' '.
ENDIF.

*---------movimiento 502 descontar material ----------------*


CLEAR: lv_header, lv_code, lv_belnr, lv_gjahr, li_item, li_return.
REFRESH: li_item, li_return.

* datos de cabecera
lv_header-pstng_date = sy-datum.
lv_header-doc_date = sy-datum.

lv_code = '06'. "anular EM

* datos de posicion
LOOP AT i_datos.

li_item-material = i_datos-matnr.
li_item-plant = v_werks.
li_item-stge_loc = v_lgort.

li_item-batch = i_datos-charg.

li_item-move_type = '502'.

li_item-entry_qnt = i_datos-menge.
li_item-entry_uom = i_datos-meins.

APPEND li_item.
CLEAR li_item.

ENDLOOP.

* bapi
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = lv_header
goodsmvt_code = lv_code
* TESTRUN = ' '
* GOODSMVT_REF_EWM =
IMPORTING
* GOODSMVT_HEADRET =
materialdocument = lv_belnr
matdocumentyear = lv_gjahr
TABLES
goodsmvt_item = li_item
* GOODSMVT_SERIALNUMBER =
return = li_return
* GOODSMVT_SERV_PART_DATA =
* EXTENSIONIN =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = 'X'
* IMPORTING
* RETURN =
.

IF lv_belnr IS INITIAL.
p_v_error = 'X'.
EXIT.
ELSE.
p_v_error = ' '.
ENDIF.

ENDFORM. " F_CREA_501

*&---------------------------------------------------------------------*
*& Form F_COMPRUEBA_DISPONIB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM f_comprueba_disponib.

** DATA: seltab TYPE TABLE OF rsparams,


** seltab_wa LIKE LINE OF seltab.
**
** seltab_wa-selname = 'S_MATNR'.
** seltab_wa-sign = 'I'.
** seltab_wa-option = 'EQ'.
** seltab_wa-low = p_v_matnr.
** APPEND seltab_wa TO seltab.
**
** seltab_wa-selname = 'S_WERKS'.
** seltab_wa-sign = 'I'.
** seltab_wa-option = 'EQ'.
** seltab_wa-low = p_v_werks.
** APPEND seltab_wa TO seltab.
**
** seltab_wa-selname = 'P_SIMUL'.
** seltab_wa-sign = 'I'.
** seltab_wa-option = 'EQ'.
** seltab_wa-low = ' '.
** APPEND seltab_wa TO seltab.
**
** SUBMIT sdv03v02 WITH SELECTION-TABLE seltab
** AND RETURN.

*** call transaction a V_V2 para confirmar disponibilidad


** PERFORM bdc_dynpro USING 'SDV03V02' '1000'.
** PERFORM bdc_field USING 'BDC_OKCODE'
** '=ONLI'.
** PERFORM bdc_field USING 'S_MATNR-LOW'
** p_v_matnr.
** PERFORM bdc_field USING 'S_WERKS-LOW'
** p_v_werks.
** PERFORM bdc_field USING 'P_SDDOCS'
** 'X'.
** PERFORM bdc_field USING 'P_ITEMLV'
** 'X'.
** PERFORM bdc_field USING 'P_MACO_C'
** 'X'.
** PERFORM bdc_field USING 'P_SIMUL'
** ''.
** PERFORM bdc_field USING 'P_DOCTYP'
** '1'.
** PERFORM bdc_field USING 'P_CUSTOR'
** 'X'.
** PERFORM bdc_field USING 'P_DELPRI'
** '2'.
** PERFORM bdc_field USING 'P_DATE'
** '3'.
** PERFORM bdc_field USING 'P_DCREAT'
** 'X'.
** PERFORM bdc_field USING 'P_DOCNO'
** '4'.
** PERFORM bdc_field USING 'P_ITEMNO'
** '5'.
**
** PERFORM bdc_dynpro USING 'SAPLSPO1' '0100'.
** PERFORM bdc_field USING 'BDC_OKCODE'
** '=YES'.
**
** PERFORM bdc_transaction USING 'V_V2'.

DATA: BEGIN OF li_tab OCCURS 0.


INCLUDE STRUCTURE av03r.
DATA: END OF li_tab.

CLEAR li_tab. REFRESH li_tab.


SELECT SINGLE *
INTO CORRESPONDING FIELDS OF li_tab
FROM vbap
WHERE vbeln EQ v_vbeln
AND posnr EQ i_vbap-posnr.
IF sy-subrc EQ 0.
APPEND li_tab.
ENDIF.

CALL FUNCTION 'SD_BACKORDER_CHECK_AND_SAVE'


EXPORTING
report = 'SDV03V02'
simul = ' '
imp_tr_proc_lv = 'I'
TABLES
input = li_tab
* T_EBKN_ALL =
* T_EKKN_ALL =
* T_EKPV_ALL =
* T_PDOC =
* T_PREQ =
* IMP_T_ERROR_TAB_SELECT =
.

ENDFORM. " F_COMPRUEBA_DISPONIB

*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO

*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD

*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM bdc_transaction USING tcode.
DATA: l_mstring(480).
DATA: l_subrc LIKE sy-subrc.
DATA: ctumode LIKE ctu_params-dismode,
cupdate LIKE ctu_params-updmode.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

ctumode = 'N'.
cupdate = 'S'.

REFRESH messtab.
CALL TRANSACTION tcode USING bdcdata
MODE ctumode
UPDATE cupdate
MESSAGES INTO messtab.
l_subrc = sy-subrc.
REFRESH bdcdata.
ENDFORM. "BDC_TRANSACTION
*&---------------------------------------------------------------------*
*& Form F_COMPRUEBA_DISPONIB2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_comprueba_disponib2 .

DATA: BEGIN OF li_tab OCCURS 0.


INCLUDE STRUCTURE av03r.
DATA: END OF li_tab.

CLEAR li_tab. REFRESH li_tab.


SELECT SINGLE *
INTO CORRESPONDING FIELDS OF li_tab
FROM ekpo
WHERE ebeln EQ v_vbeln
AND ebelp EQ i_ekpo-ebelp
AND loekz EQ space.
IF sy-subrc EQ 0.
APPEND li_tab.
ENDIF.

CALL FUNCTION 'SD_BACKORDER_CHECK_AND_SAVE'


EXPORTING
report = 'SDV03V02'
simul = ' '
imp_tr_proc_lv = 'I'
TABLES
input = li_tab
* T_EBKN_ALL =
* T_EKKN_ALL =
* T_EKPV_ALL =
* T_PDOC =
* T_PREQ =
* IMP_T_ERROR_TAB_SELECT =
.

ENDFORM. " F_COMPRUEBA_DISPONIB2


*&---------------------------------------------------------------------*
*& Form MODIFICAR_UBICACION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_MARD_MATNR text
*----------------------------------------------------------------------*
FORM modificar_ubicacion USING p_matnr LIKE mard-matnr
p_werks LIKE mard-werks
p_lgort LIKE mard-lgort
p_lgpbe LIKE mard-lgpbe
CHANGING p_subrc LIKE sy-subrc.
DATA: ls_mathead TYPE bapimathead,
ls_storage_location_data TYPE bapi_mard,
ls_storage_location_datax TYPE bapi_mardx,
ls_return TYPE bapiret2,
lt_return TYPE STANDARD TABLE OF bapi_matreturn2.

CLEAR p_subrc.

ls_mathead-material = p_matnr.
ls_mathead-storage_view = 'X'.

ls_storage_location_data-plant =
ls_storage_location_datax-plant = p_werks.
ls_storage_location_data-stge_loc =
ls_storage_location_datax-stge_loc = p_lgort.

ls_storage_location_data-stge_bin = p_lgpbe.
ls_storage_location_datax-stge_bin = 'X'.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'


EXPORTING
headdata = ls_mathead
storagelocationdata = ls_storage_location_data
storagelocationdatax = ls_storage_location_datax
IMPORTING
return = ls_return
TABLES
returnmessages = lt_return.

IF ls_return-type <> 'S'.


p_subrc = 8.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
p_subrc = 0.
ENDIF.
ENDFORM. " MODIFICAR_UBICACION
*&---------------------------------------------------------------------*
*& Form INSERTAR_UB_VACIA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_V_WERKS text
* -->P_V_LGORT text
* -->P_T_ZUBIC_LGPBE text
*----------------------------------------------------------------------*
FORM insertar_ub_vacia USING p_werks LIKE mard-werks
p_lgort LIKE mard-lgort
p_lgpbe LIKE mard-lgpbe.
IF NOT p_lgpbe IS INITIAL.
SELECT * UP TO 1 ROWS FROM zubicaciones WHERE
werks = p_werks AND
lgort = p_lgort AND
lgpbe = p_lgpbe.
ENDSELECT.
IF sy-subrc NE 0.
SELECT * UP TO 1 ROWS FROM mard WHERE werks = p_werks AND
lgort = p_lgort AND
lgpbe = p_lgpbe.
ENDSELECT.
IF sy-subrc NE 0.
CLEAR zubicaciones.
zubicaciones-werks = p_werks.
zubicaciones-lgort = p_lgort.
zubicaciones-lgpbe = p_lgpbe.
INSERT zubicaciones.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " INSERTAR_UB_VACIA
*&---------------------------------------------------------------------*
*& Form BUILD_MESSAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0256 text
*----------------------------------------------------------------------*
FORM build_message USING p_msgno TYPE bdc_mid
p_msgv1
p_msgv2
p_msgv3
p_msgv4.

DATA texto TYPE char120.


DATA msgv1 TYPE bdc_vtext1.
DATA msgv2 TYPE bdc_vtext1.
DATA msgv3 TYPE bdc_vtext1.
DATA msgv4 TYPE bdc_vtext1.

PERFORM quitar_ceros USING p_msgv1 CHANGING msgv1.


PERFORM quitar_ceros USING p_msgv2 CHANGING msgv2.
PERFORM quitar_ceros USING p_msgv3 CHANGING msgv3.
PERFORM quitar_ceros USING p_msgv4 CHANGING msgv4.

CALL FUNCTION 'MESSAGE_TEXT_BUILD'


EXPORTING
msgid = 'ZRF'
msgnr = p_msgno
msgv1 = msgv1
msgv2 = msgv2
msgv3 = msgv3
msgv4 = msgv4
IMPORTING
message_text_output = texto.

v_mensaje1 = texto(30).
v_mensaje2 = texto+30(30).

ENDFORM. " BUILD_MESSAGE


*&---------------------------------------------------------------------*
*& Form QUITAR_CEROS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_MSGV1 text
* <--P_MSGV1 text
*----------------------------------------------------------------------*
FORM quitar_ceros USING p_input
CHANGING p_output.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'


EXPORTING
input = p_input
IMPORTING
output = p_output.
ENDFORM. " QUITAR_CEROS
*&---------------------------------------------------------------------*
*& Form BUILD_MESSAGE2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LS_RET_MESSAGE text
*----------------------------------------------------------------------*
FORM build_message2 USING p_texto.
v_mensaje1 = p_texto(30).
v_mensaje2 = p_texto+30(30).
ENDFORM. " BUILD_MESSAGE2

You might also like