Posted: Sun Aug 24, 2008 1:18 pm Post subject: Create Invoice with reference to delivery
In MV50AFZ1 Exit:
Code:
If sy-UCOMM = 'WABU'
OR sy-UCOMM = 'WABU_T'.
If likp-expkz = 'X'.
CALL FUNCTION 'Z_FAKTURA_ANLEGEN'
STARTING NEW TASK 'Z_FAKT_ANL'
EXPORTING
I_VBELN = likp-vbeln
I_MJAHR = emkpf-mjahr
I_MBLNR = emkpf-mblnr.
Endif.
Endif.
Function block "Z_FAKTURA_ANLEGEN":
Code:
FUNCTION Z_FAKTURA_ANLEGEN.
*"------------------------------------------------ ----------------------
* "*" Local Interface:
*" IMPORTING
*" VALUE(I_VBELN) LIKE LIKP-VBELN
*" VALUE(I_FKART) TYPE FKART DEFAULT 'ZF8D'
*" VALUE(I_MJAHR) TYPE MKPF-MJAHR OPTIONAL
*" VALUE(I_MBLNR) TYPE MKPF-MBLNR OPTIONAL
*" EXPORTING
*" VALUE(E_VBELN) TYPE VBELN_VF
*"----------------------------------------------------------------------
* USE FuBa of:
* FuBa is userexit form userexit_save_document (MV50AFZ1)
* Called. (Transaction VL02N)
*
* FUNCTIONALITY:
* 1) The update will wait
* 2) After recording the billing is created (V01)
*__________________________________________________
data: l_mode type char1 value 'N',
l_subrc like sy-subrc,
l_errmail type flag.
field-symbols: <fs_msg> TYPE BDCMSGCOLL.
*__________________________________________________
refresh: gt_msg, gt_mail.
*** (First wait for the update, and then examine the table KNA1)
PERFORM wait_for_update_of_bel1
USING i_vbeln i_mblnr i_mjahr
CHANGING l_subrc.
if l_subrc ne 0.
* Raise NOCH_NICHT_VERBUCHT. "--- Update is not yet finished
message e398 (00) with 'update was not finished.' (010)
into gs_mail.
append gs_mail to gt_mail.
endif.
if l_subrc is initial.
perform faktura_anlegen_fubas using i_fkart
changing i_vbeln gt_mail[] l_errmail
e_VBELN.
endif.
if not l_errmail is initial.
perform sendmail_fehlerlist using i_vbeln i_fkart
gt_mail[].
endif.
ENDFUNCTION.
Form "WAIT_FOR_UPDATE_OF_BEL1":
Code:
*&---------------------------------------------------------------------
*& Form WAIT_FOR_UPDATE_OF_BEL1
*&---------------------------------------------------------------------
FORM wait_for_update_of_bel1 USING p_vbeln TYPE likp-vbeln
p_mblnr TYPE mkpf-mblnr
p_mjahr TYPE mkpf-mjahr
* p_wait_up_to_seconds TYPE i
CHANGING p_subrc TYPE sy-subrc.
DATA: l_garg TYPE seqg3-garg,
lt_enq TYPE STANDARD TABLE OF seqg3,
l_start_time TYPE sy-uzeit,
l_runtime TYPE i,
p_wait_up_to_seconds TYPE i value 15,
l_subrc TYPE sy-subrc.
*______________________________________________________________________
* First wait for the update, and then examine the table KNA1
* Update wait (barring read)
CONCATENATE sy-mandt p_vbeln INTO l_garg.
MOVE sy-uzeit TO l_start_time.
APPEND INITIAL LINE TO lt_enq[].
WHILE l_subrc = 0 AND NOT lt_enq[] IS INITIAL
AND l_runtime =< p_wait_up_to_seconds.
REFRESH lt_enq.
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
* GCLIENT = SY-MANDT
gname = 'LIKP'
garg = l_garg
* GUNAME = SY-UNAME
* LOCAL = ' '
IMPORTING
* NUMBER =
subrc = l_subrc
TABLES
enq = lt_enq[]
* EXCEPTIONS
* COMMUNICATION_FAILURE = 1
* SYSTEM_FAILURE = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
l_runtime = sy-uzeit - l_start_time.
ENDWHILE.
* Check update: MKPF read until there is proof.
MOVE sy-uzeit TO l_start_time.
SELECT SINGLE COUNT( * ) FROM mkpf WHERE mblnr = p_mblnr
AND mjahr = p_mjahr.
WHILE sy-subrc = 4 AND l_runtime =< p_wait_up_to_seconds.
WAIT UP TO 1 SECONDS.
l_runtime = sy-uzeit - l_start_time.
SELECT SINGLE COUNT( * ) FROM mkpf WHERE mblnr = p_mblnr
AND mjahr = p_mjahr.
ENDWHILE.
* Either everything in order or waiting period has expired.
IF lt_enq[] IS INITIAL AND sy-subrc = 0.
* Customer Equip: Updates right expired and customer data are there.
CLEAR p_subrc.
ELSEIF NOT lt_enq[] IS INITIAL AND sy-subrc = 0.
* Customer Change: Updates not yet expired,
p_subrc = 2.
ELSEIF lt_enq[] IS INITIAL AND sy-subrc <> 0.
* Update already expired,
* Workforce but are still not there (update canceled?).
p_subrc = 4.
ELSEIF NOT lt_enq[] IS INITIAL AND sy-subrc <> 0.
* Update has not yet expired
* Document is still not there (delay?).
p_subrc = 8.
ENDIF.
* START TEST: In the event of errors, notify the competent persons
IF p_subrc <> 0.
ENDIF.
* START TEST: In the event of errors, notify the competent persons
ENDFORM. " WAIT_FOR_UPDATE_OF_BEL1
Form "FAKTURA_ANLEGEN_FUBAS":
Code:
*&---------------------------------------------------------------------*
*& Form FAKTURA_ANLEGEN_FUBAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form faktura_anlegen_fubas using i_fkart TYPE FKART
changing i_vbeln like LIKP-VBELN
it_mail type tt_mail
i_errmail type flag
E_VBELN_vf TYPE VBELN_VF.
* Kommumikationstabelle XKOMFK
DATA: BEGIN OF XKOMFK OCCURS 0.
INCLUDE STRUCTURE KOMFK.
DATA: END OF XKOMFK.
DATA: BEGIN OF XTHEAD OCCURS 50. "aktueller Tabellenstand
INCLUDE STRUCTURE THEADVB.
DATA: END OF XTHEAD.
* Current status table VBFS
DATA: BEGIN OF XVBFS OCCURS 20.
INCLUDE STRUCTURE VBFS.
DATA: END OF XVBFS.
* Current status table VBSS
DATA: BEGIN OF XVBSS OCCURS 10.
INCLUDE STRUCTURE VBSS.
DATA: END OF XVBSS.
* Current status table
DATA: BEGIN OF XVBRK OCCURS 10.
INCLUDE STRUCTURE VBRKVB.
DATA: END OF XVBRK.
* Current status table
DATA: BEGIN OF XVBRP OCCURS 100.
INCLUDE STRUCTURE VBRPVB.
DATA: END OF XVBRP.
* Staff Partners Table: Current status table
DATA: BEGIN OF XVBPA OCCURS 0.
INCLUDE STRUCTURE VBPAVB.
DATA: END OF XVBPA.
DATA: BEGIN OF XKOMV OCCURS 50.
INCLUDE STRUCTURE KOMV.
DATA: END OF XKOMV.
* Messages in the mail table collect
loop at xvbfs.
MESSAGE ID xvbfs-msgid TYPE xvbfs-msgty
NUMBER xvbfs-msgno
WITH xvbfs-msgv1 xvbfs-msgv2 xvbfs-msgv3 xvbfs-msgv4
into gs_mail-text.
append gs_mail to it_mail.
endloop.
* Error when creating the document? --> FehlerKz set (for mail)
read table xvbfs with key msgty = 'E' transporting no fields.
check not sy-subrc is initial. "Kein Fehler aufgetreten
* Error when creating the document? --> FehlerKz set (for mail)
* Messages in the mail table collect
if not xvbfs[] is initial.
loop at xvbfs.
"--- Billing document number over ---"
if xvbfs-msgty = 'S' and xvbfs-msgid = 'VF'
and xvbfs-msgno = '311'.
move xvbfs-msgv1 to E_VBELN_vf. "---Fakturabelegnummer
clear i_errmail.
endif.
MESSAGE ID xvbfs-msgid TYPE xvbfs-msgty
NUMBER xvbfs-msgno
WITH xvbfs-msgv1 xvbfs-msgv2 xvbfs-msgv3 xvbfs-msgv4
into gs_mail-text.
append gs_mail to it_mail.
endloop.
else.
if xvbfs-msgty = 'S' and xvbfs-msgid = 'VF' and xvbfs-msgno = '311'.
clear i_errmail.
move xvbfs-msgv1 to E_VBELN_vf. "billing document number ---
MESSAGE ID xvbfs-msgid TYPE xvbfs-msgty
NUMBER xvbfs-msgno
WITH xvbfs-msgv1 xvbfs-msgv2 xvbfs-msgv3 xvbfs-msgv4
into gs_mail-text.
append gs_mail to it_mail.
else.
"- Messageb need not hingefügt ...?
endif.
endif.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.