Difference between revisions of "SAP SD BAPI"
From SapWiki
Line 75: | Line 75: | ||
endif. | endif. | ||
p_return[] = lt_return[]. | p_return[] = lt_return[]. | ||
+ | |||
+ | ENDFORM.</nowiki> | ||
+ | |||
+ | ==Contabilizar SM - VL02N->Contabilizar SM== | ||
+ | <nowiki> FUNCTION Z_SD_CONT_SAL_MERC. | ||
+ | *"---------------------------------------------------------------------- | ||
+ | *"*"Interfase local | ||
+ | *" IMPORTING | ||
+ | *" REFERENCE(I_VBELN) TYPE LIKP-VBELN | ||
+ | *" EXPORTING | ||
+ | *" REFERENCE(E_VBELN) TYPE LIKP-VBELN | ||
+ | *" REFERENCE(E_RETURN) TYPE BAPIRET2_T | ||
+ | *"---------------------------------------------------------------------- | ||
+ | CLEAR: e_RETURN[], | ||
+ | bdcdata[], | ||
+ | lt_mtxt[], | ||
+ | e_vbeln. | ||
+ | |||
+ | perFORM cont_sm USING i_vbeln CHANGING e_return. | ||
+ | |||
+ | ENDFUNCTION. | ||
+ | |||
+ | FORM cont_sm USING p_vbeln CHANGING p_return type bapiret2_t. | ||
+ | DATA: ls_likp TYPE likp, | ||
+ | ls_vbkok TYPE vbkok, | ||
+ | lv_fail, | ||
+ | lt_prott TYPE STANDARD TABLE OF prott | ||
+ | WITH HEADER LINE. | ||
+ | |||
+ | data ls_return type bapiret2. | ||
+ | |||
+ | SELECT SINGLE * INTO ls_likp FROM likp | ||
+ | WHERE vbeln = p_vbeln. | ||
+ | |||
+ | CHECK NOT ls_likp IS INITIAL. | ||
+ | |||
+ | ls_vbkok-vbeln_vl = ls_likp-vbeln. | ||
+ | ls_vbkok-wabuc = 'X'. | ||
+ | SET UPDATE TASK LOCAL. | ||
+ | |||
+ | CALL FUNCTION 'WS_DELIVERY_UPDATE' | ||
+ | EXPORTING | ||
+ | vbkok_wa = ls_vbkok | ||
+ | synchron = 'X' | ||
+ | no_messages_update = ' ' | ||
+ | update_picking = 'X' | ||
+ | COMMIT = ' ' | ||
+ | delivery = ls_likp-vbeln | ||
+ | nicht_sperren = 'X' | ||
+ | if_error_messages_send_0 = 'X' | ||
+ | TABLES | ||
+ | prot = lt_prott | ||
+ | EXCEPTIONS | ||
+ | error_message = 1 | ||
+ | OTHERS = 2. | ||
+ | |||
+ | IF sy-subrc <> 0. | ||
+ | ROLLBACK WORK. | ||
+ | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno | ||
+ | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_return-message. | ||
+ | append ls_return to p_return. | ||
+ | EXIT. | ||
+ | ELSE. | ||
+ | LOOP AT lt_prott. | ||
+ | CHECK lt_prott-msgty = 'E' OR | ||
+ | lt_prott-msgty = 'A'. | ||
+ | lv_fail = 'X'. | ||
+ | ENDLOOP. | ||
+ | IF lv_fail IS INITIAL. | ||
+ | COMMIT WORK AND WAIT. | ||
+ | ELSE. | ||
+ | ROLLBACK WORK. | ||
+ | MOVE lt_prott-msgid TO ls_return-ID. | ||
+ | MOVE lt_prott-msgty TO ls_return-TYPE. | ||
+ | MOVE lt_prott-msgno TO ls_return-NUMBER. | ||
+ | MOVE lt_prott-msgv1 TO ls_return-MESSAGE_v1. | ||
+ | MOVE lt_prott-msgv2 TO ls_return-MESSAGE_v2. | ||
+ | MOVE lt_prott-msgv3 TO ls_return-MESSAGE_v3. | ||
+ | MOVE lt_prott-msgv4 TO ls_return-MESSAGE_v4. | ||
+ | |||
+ | MESSAGE ID lt_prott-MSGID TYPE lt_prott-MSGTY NUMBER lt_prott-MSGNo | ||
+ | WITH lt_prott-MSGV1 lt_prott-MSGV2 lt_prott-MSGV3 lt_prott-MSGV4 | ||
+ | INTO ls_return-MESSAGE. | ||
+ | |||
+ | APPEND ls_return TO p_return. | ||
+ | EXIT. | ||
+ | ENDIF. | ||
+ | ENDIF. | ||
ENDFORM.</nowiki> | ENDFORM.</nowiki> |
Revision as of 16:01, 4 April 2020
Crear Factura VF01
FUNCTION z_sd_crea_factura. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(I_VBELN) TYPE LIKP-VBELN *" REFERENCE(I_FKART) TYPE RV60A-FKART *" REFERENCE(I_REF_DOC_CA) TYPE VBTYP_V *" REFERENCE(I_DOC_TYPE) TYPE AUART *" EXPORTING *" REFERENCE(E_VBELN) TYPE VBRK-VBELN *" REFERENCE(E_RETURN) TYPE BAPIRET2_T *"---------------------------------------------------------------------- data lt_return1 type bapiret1_tab. DATA ld_mode(1) VALUE 'A'. " 'N'. DATA lt_mtxt LIKE TABLE OF bdcmsgcoll WITH HEADER LINE. DATA ls_return TYPE bapiret2. DATA ls_return1 TYPE bapiret1. CLEAR: e_return[], bdcdata[], lt_mtxt[], e_vbeln. PERFORM crea_factura USING i_fkart i_vbeln i_ref_doc_ca i_doc_type CHANGING e_vbeln lt_return1[]. loop at lt_return1 into ls_return1. MOVE-CORRESPONDING ls_return1 TO ls_return. APPEND ls_return TO e_return. ENDLOOP. ENDFUNCTION. FORM crea_factura USING p_fkart p_vbeln p_ref_doc_ca p_doc_type CHANGING p_vbeln_factuta p_return TYPE bapiret1_tab. DATA lt_datain TYPE STANDARD TABLE OF bapivbrk WITH HEADER LINE. DATA lt_return TYPE STANDARD TABLE OF bapiret1 WITH HEADER LINE. DATA lt_success TYPE STANDARD TABLE OF bapivbrksuccess WITH HEADER LINE. CLEAR: lt_datain, lt_datain[], lt_return, lt_return[], lt_success, lt_success[]. lt_datain-ref_doc = p_vbeln. lt_datain-ref_doc_ca = p_ref_doc_ca. " ls_likp-vbtyp. lt_datain-doc_type = p_doc_type. "ls_likp-lfart. lt_datain-ordbilltyp = p_fkart. APPEND lt_datain. CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE' TABLES billingdatain = lt_datain return = lt_return success = lt_success. READ TABLE lt_success INDEX 1. IF sy-subrc = 0. p_vbeln_factuta = lt_success-bill_doc. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X' . endif. p_return[] = lt_return[]. ENDFORM.
Contabilizar SM - VL02N->Contabilizar SM
FUNCTION Z_SD_CONT_SAL_MERC. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(I_VBELN) TYPE LIKP-VBELN *" EXPORTING *" REFERENCE(E_VBELN) TYPE LIKP-VBELN *" REFERENCE(E_RETURN) TYPE BAPIRET2_T *"---------------------------------------------------------------------- CLEAR: e_RETURN[], bdcdata[], lt_mtxt[], e_vbeln. perFORM cont_sm USING i_vbeln CHANGING e_return. ENDFUNCTION. FORM cont_sm USING p_vbeln CHANGING p_return type bapiret2_t. DATA: ls_likp TYPE likp, ls_vbkok TYPE vbkok, lv_fail, lt_prott TYPE STANDARD TABLE OF prott WITH HEADER LINE. data ls_return type bapiret2. SELECT SINGLE * INTO ls_likp FROM likp WHERE vbeln = p_vbeln. CHECK NOT ls_likp IS INITIAL. ls_vbkok-vbeln_vl = ls_likp-vbeln. ls_vbkok-wabuc = 'X'. SET UPDATE TASK LOCAL. CALL FUNCTION 'WS_DELIVERY_UPDATE' EXPORTING vbkok_wa = ls_vbkok synchron = 'X' no_messages_update = ' ' update_picking = 'X' COMMIT = ' ' delivery = ls_likp-vbeln nicht_sperren = 'X' if_error_messages_send_0 = 'X' TABLES prot = lt_prott EXCEPTIONS error_message = 1 OTHERS = 2. IF sy-subrc <> 0. ROLLBACK WORK. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_return-message. append ls_return to p_return. EXIT. ELSE. LOOP AT lt_prott. CHECK lt_prott-msgty = 'E' OR lt_prott-msgty = 'A'. lv_fail = 'X'. ENDLOOP. IF lv_fail IS INITIAL. COMMIT WORK AND WAIT. ELSE. ROLLBACK WORK. MOVE lt_prott-msgid TO ls_return-ID. MOVE lt_prott-msgty TO ls_return-TYPE. MOVE lt_prott-msgno TO ls_return-NUMBER. MOVE lt_prott-msgv1 TO ls_return-MESSAGE_v1. MOVE lt_prott-msgv2 TO ls_return-MESSAGE_v2. MOVE lt_prott-msgv3 TO ls_return-MESSAGE_v3. MOVE lt_prott-msgv4 TO ls_return-MESSAGE_v4. MESSAGE ID lt_prott-MSGID TYPE lt_prott-MSGTY NUMBER lt_prott-MSGNo WITH lt_prott-MSGV1 lt_prott-MSGV2 lt_prott-MSGV3 lt_prott-MSGV4 INTO ls_return-MESSAGE. APPEND ls_return TO p_return. EXIT. ENDIF. ENDIF. ENDFORM.