BAPIs SD
BAPIs SD
***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>.
CLEAR zwm_rf_log.
* IF 1 > 3.
**........Unable to process message ID number....
* MESSAGE e110 WITH i_msgid i_msgno RAISING invalid_message1.
* ENDIF.
<mess_field>+line_pos(1) = line_out+mess_pos(1).
line_pos = line_pos + 1.
mess_pos = mess_pos + 1.
ENDWHILE.
test_char = 'X'.
line_pos = line_pos - 1.
mess_pos = mess_pos - 1.
test_char = <mess_field>+line_pos(1).
ENDWHILE.
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.
ENDIF.
ENDWHILE.
*&---------------------------------------------------------------------*
*& Form f_modifica_pedido
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_modifica_pedido CHANGING p_v_error.
* datos de cabecera
lv_header_in-sd_doc_cat = 'C'.
lv_header_inx-updateflag = 'U'.
lv_header_inx-sd_doc_cat = '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.
ENDLOOP.
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'.
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'.
ENDIF.
ENDLOOP.
WAIT UP TO 2 SECONDS.
ENDIF.
*&---------------------------------------------------------------------*
*& Form F_CREA_ENTREGA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_crea_entrega CHANGING p_v_error
p_v_entre LIKE likp-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.
CLEAR lv_pos.
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.
******************************MODIFICAR********************************************
**************************************
WAIT UP TO 2 SECONDS.
******************************MODIFICAR********************************************
**************************************
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.
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.
REFRESH li_prot.
li_vbkok-vbeln_vl = p_v_entre.
li_vbkok-wabuc = 'X'.
*&---------------------------------------------------------------------*
*& Form F_MODIFICA_PEDIDO_COMPRA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_modifica_pedido_compra CHANGING p_v_error.
** 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.
ADD 10 TO lv_ebelp.
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.
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.
ENDLOOP.
WAIT UP TO 2 SECONDS.
*&---------------------------------------------------------------------*
*& Form F_MODIFICA_PEDIDO_COMPRA_TRAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_modifica_pedido_compra_tras CHANGING p_v_error.
** 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.
ADD 10 TO lv_ebelp.
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.
ENDLOOP.
WAIT UP TO 2 SECONDS.
*&---------------------------------------------------------------------*
*& Form F_CREAR_ENTRADA_MERC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_crear_entrada_merc CHANGING p_v_error.
* 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_c-gm_code = '01'.
* datos posicion
LOOP AT i_datos.
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.
*&---------------------------------------------------------------------*
*& 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.
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.
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.
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.
WAIT UP TO 2 SECONDS.
p_v_entre = lv_entre.
CLEAR p_v_error.
ENDIF.
*&---------------------------------------------------------------------*
*& Form F_LANZA_IMPRESION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_V_ENTRE text
*----------------------------------------------------------------------*
FORM f_lanza_impresion USING p_v_entre LIKE likp-vbeln.
SELECT SINGLE *
FROM nast
WHERE objky = p_v_entre
AND kschl = 'ZLD0'.
*&---------------------------------------------------------------------*
*& Form F_CREA_501
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_V_ERROR text
*----------------------------------------------------------------------*
FORM f_crea_501 CHANGING p_v_error.
* 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.
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 =
.
* datos de cabecera
lv_header-pstng_date = sy-datum.
lv_header-doc_date = sy-datum.
* 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 =
.
IF lv_belnr IS INITIAL.
p_v_error = 'X'.
EXIT.
ELSE.
p_v_error = ' '.
ENDIF.
*&---------------------------------------------------------------------*
*& Form F_COMPRUEBA_DISPONIB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM 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 .
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'.
v_mensaje1 = texto(30).
v_mensaje2 = texto+30(30).