Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

FM or BAPI to add serial numbers to a delivery...

0 Kudos

Hi:

I am trying to add new serial numbers to a delivery....

Following is the code... I am not sure, what parameters are needed for the function 'SERIAL_LISTE_POST_LS'. If, I try to pass no parameters, I get a dump...

call function 'SERNR_ADD_TO_LS'

exporting

profile = wa_lips_tab-serail

material = delivery_data_in-material_number

  • M_CHARGE =

quantity = quantity_in

j_vorgang = 'PMS3'

  • KMATNR =

  • CUOBJ =

document = delivery_data_in-delivery_number

item = delivery_data_in-item_number

debitor = es_likp-kunnr

vbtyp = es_likp-vbtyp

bwart = wa_lips_tab-bwart

  • SNBWG =

importing

anzsn = anzsn

zeilen_id = zeilen_id

serial_commit = serial_commit

tables

sernos = sernos_in

exceptions

konfigurations_error = 1

serialnumber_errors = 2

serialnumber_warnings = 3

no_profile_operation = 4

others = 5

.

if sy-subrc <> 0.

message id sy-msgid type sy-msgty number sy-msgno

with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

else.

CALL FUNCTION 'SERIAL_LISTE_POST_LS'.

COMMIT WORK.

Also, there is another function SERIALPROFILE_CHECK.. this is what SAP transaction VL02N uses, but I am not able to figure out how to suppress the pop-up window, so that I can use it in non-interactive mode..

Any help will be apprecaited..Thanks.

1 REPLY 1

aw_mostert
Explorer
0 Kudos

Try using this code....

FUNCTION zadd_serie_to_delivery.

*"----


""Local Interface:

*" IMPORTING

*" REFERENCE(I_VBELN) TYPE VBELN_VL

*" REFERENCE(I_REFRESH) TYPE CHAR1 DEFAULT SPACE

*" EXPORTING

*" REFERENCE(E_SUBRC) TYPE SYSUBRC

*"----


DATA: lf_vbeln TYPE vbeln_vl,

lt_zserial_deliv TYPE TABLE OF zserial_deliv,

lw_zserial_deliv TYPE zserial_deliv,

lt_posnr TYPE TABLE OF posnr_vl,

lf_posnr TYPE posnr_vl,

lw_header_data TYPE bapiobdlvhdrchg,

lw_header_control TYPE bapiobdlvhdrctrlchg,

lt_serial TYPE TABLE OF bapidlvitmserno,

lw_serial TYPE bapidlvitmserno,

lt_return TYPE TABLE OF bapiret2,

lw_return TYPE bapiret2,

lt_iserls TYPE TABLE OF riserls,

lw_iserls TYPE riserls.

e_subrc = 0.

*-Toevoegen voorloopnullen aan leveringsnummer.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = i_vbeln

IMPORTING

output = lf_vbeln.

*-Opschonen oude data.

CLEAR: lt_zserial_deliv[],

lt_posnr[].

*-Ophalen leveringsposities met serienummers

SELECT DISTINCT posnr INTO TABLE lt_posnr

FROM zserial_deliv

WHERE vbeln = lf_vbeln.

IF lt_posnr[] IS INITIAL.

MESSAGE s000(38) WITH 'Geen serienummers' 'geregistreerd voor' 'deze levering'.

e_subrc = 4.

EXIT.

ENDIF.

*-verwerken gevonden leveringsposities.

LOOP AT lt_posnr INTO lf_posnr.

*- Ophalen geregistreerde serienummers voor levering.

SELECT * INTO TABLE lt_zserial_deliv

FROM zserial_deliv

WHERE vbeln = lf_vbeln

AND posnr = lf_posnr.

IF i_refresh NE 'X'.

*- Zoek naar serienummers die geen status 'Added to delivery'.

LOOP AT lt_zserial_deliv INTO lw_zserial_deliv WHERE status NE '1'.

EXIT.

ENDLOOP.

IF sy-subrc NE 0.

CONTINUE.

ENDIF.

ENDIF.

*- Ophalen serienummers die in de levering staan.

CLEAR lt_iserls[].

CALL FUNCTION 'SERIAL_LS_PRINT'

EXPORTING

vbeln = lf_vbeln

posnr = lf_posnr

TABLES

iserls = lt_iserls.

  • LOOP AT lt_iserls INTO lw_iserls.

  • READ TABLE lt_zserial_deliv INTO lw_zserial_deliv WITH KEY sernr = lw_iserls-sernr.

  • IF sy-subrc NE 0.

**- Serienummer in levering bestaat niet in ZSERIAL_DELIV.

  • BREAK-POINT.

  • ENDIF.

  • ENDLOOP.

LOOP AT lt_zserial_deliv INTO lw_zserial_deliv.

lw_serial-deliv_numb = lw_zserial_deliv-vbeln.

lw_serial-itm_number = lw_zserial_deliv-posnr.

lw_serial-serialno = lw_zserial_deliv-sernr.

APPEND lw_serial TO lt_serial.

ENDLOOP.

ENDLOOP.

**- Controleren of ingevoerde nummer al reeds ingevoerd is

  • READ TABLE lt_serial INTO lw_serial WITH KEY serialno = gf_serienr.

  • IF sy-subrc = 0.

  • MESSAGE s000(38) WITH 'Serie nummer reeds ingevoerd'.

  • p_error = 4.

  • EXIT.

  • ENDIF.

lw_header_data-deliv_numb = lw_zserial_deliv-vbeln.

lw_header_control-deliv_numb = lw_zserial_deliv-vbeln.

DO 30 TIMES.

*- Levering Locken

CALL FUNCTION 'ENQUEUE_EVVBLKE'

EXPORTING

mode_likp = 'E'

mandt = sy-mandt

vbeln = lw_zserial_deliv-vbeln

x_vbeln = ' '

_scope = '2'

_wait = ' '

_collect = ' '

EXCEPTIONS

foreign_lock = 1

system_failure = 2

OTHERS = 3.

IF sy-subrc <> 0.

**- Levering is al gelock door iemand anders.

**- Bewaar username voor foutmelding.

  • gf_text1 = sy-msgv1.

  • MESSAGE s000(38) WITH 'Levering' gw_leveringen-vbeln 'is momenteel geblokeerd door' gf_text1.

  • LEAVE TO SCREEN 400.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

percentage = sy-index

text = 'Wacht op levering'.

WAIT UP TO 2 SECONDS.

ELSE.

CALL FUNCTION 'DEQUEUE_EVVBLKE'

EXPORTING

mode_likp = 'E'

mandt = sy-mandt

vbeln = lw_zserial_deliv-vbeln

x_vbeln = ' '

_scope = '3'

_synchron = ' '

_collect = ' '.

EXIT.

ENDIF.

ENDDO.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'

EXPORTING

header_data = lw_header_data

header_control = lw_header_control

delivery = gw_ltak-vbeln

  • TECHN_CONTROL =

  • HEADER_DATA_SPL =

  • HEADER_CONTROL_SPL =

  • SENDER_SYSTEM =

TABLES

  • HEADER_PARTNER =

  • HEADER_PARTNER_ADDR =

  • HEADER_DEADLINES =

  • ITEM_DATA =

  • ITEM_CONTROL =

item_serial_no = lt_serial

  • SUPPLIER_CONS_DATA =

  • EXTENSION1 =

  • EXTENSION2 =

return = lt_return

  • TOKENREFERENCE =

  • ITEM_DATA_SPL =

  • COLLECTIVE_CHANGE_ITEMS =

EXCEPTIONS

error_message.

LOOP AT lt_return INTO lw_return.

*- Let's display last message.

ENDLOOP.

IF lw_return-type = 'E'.

DELETE gt_serial WHERE serialno = lw_serial-serialno.

MESSAGE ID lw_return-id TYPE 'S' NUMBER lw_return-number

WITH lw_return-message_v1

lw_return-message_v2

lw_return-message_v3

lw_return-message_v4.

e_subrc = 4.

update zserial_deliv set status = '2' where vbeln = lw_zserial_deliv-vbeln.

commit work and wait.

EXIT.

ENDIF.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'

IMPORTING

return = lw_return.

update zserial_deliv set status = '1' where vbeln = lw_zserial_deliv-vbeln.

commit work and wait.

ENDFUNCTION.