10-02-2007 9:51 PM
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.
10-10-2008 10:27 AM
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.