Sunteți pe pagina 1din 6

RFC com BAPI para crier requisio de Compra: Lgica: Recebe uma tabela com N dados e efetua o processamento

utilizando a BAPI BAPI_REQUISITION_CREATE com os seguintes parmetros. Cdigo:


*----------------------------------------------------------------------* Empresa..: Votorantim Cimentos - VC. * ID.......: [5500] * Programa.: ZVCFMM45500_RFC_REQ_COMPRA * Tipo.....: Funo - RFC * Mdulo...: MM * Transao: * Descrio: Requisies de Compra (RCs) para Servios-VC * Autor....: Luiz Carlos dos Santos (Equipe TIVIT) * Data.....: 21/07/2006 * [HISTRICO] * ======== ========== ========== ======================================= * Data Autor Request Descrio * ======== ========== ========== ======================================= * 21/7/06 T3LUIZCS E03K956934 Desenvolvimento Inicial * ======== ========== ========== ======================================= *"---------------------------------------------------------------------FUNCTION zvcfmm45500_rfc_req_compra. *"---------------------------------------------------------------------*"*"Interface local: *" TABLES *" T_SAIDA_PENDENTE STRUCTURE ZTBMM_SAIDA_PEND *" T_MENSAGEM_LOG STRUCTURE ZTBMM_LOG_SAIDA *"---------------------------------------------------------------------* Limpa tabelas que ser utilizadas e verificando se a tabela vem * carregada. CLEAR: v_banfn, v_cont, t_return, t_return[], t_req_item, t_req_item[], t_req_rm, t_req_rm[], t_req_serv, t_req_serv[]. IF t_saida_pendente[] IS NOT INITIAL. SORT t_saida_pendente BY banfn bnfpo. READ TABLE t_saida_pendente INDEX 1. v_banfn = t_saida_pendente-banfn. LOOP AT t_saida_pendente. SELECT pstyp UP TO 1 ROWS

INTO v_t_item FROM t163y WHERE spras = sy-langu AND epstp = t_saida_pendente-pstyp. ENDSELECT. IF t_saida_pendente-banfn = v_banfn. MOVE: t_saida_pendente-bsart TO t_req_item-doc_type, t_saida_pendente-banfn TO t_req_item-preq_no, t_saida_pendente-bnfpo TO t_req_item-preq_item, v_t_item TO t_req_item-item_cat, t_saida_pendente-knttp TO t_req_item-acctasscat, t_saida_pendente-txz01 TO t_req_item-short_text, t_saida_pendente-lfdat TO t_req_item-deliv_date, t_saida_pendente-matkl TO t_req_item-mat_grp, t_saida_pendente-werks TO t_req_item-plant, t_saida_pendente-ekgrp TO t_req_item-pur_group, t_saida_pendente-afnam TO t_req_item-preq_name, t_saida_pendente-lifnr TO t_req_item-des_vendor, t_saida_pendente-meins TO t_req_item-unit, c_1 TO t_req_item-pckg_no. APPEND t_req_item. MOVE: t_saida_pendente-kostl t_saida_pendente-aufnr t_saida_pendente-banfn t_saida_pendente-bnfpo APPEND t_req_rm. TO t_req_rm-cost_ctr, TO t_req_rm-order_no, TO t_req_rm-preq_no, TO t_req_rm-preq_item.

ADD 1 TO v_cont. IF v_cont = 1. MOVE: c_1 TO t_req_serv-pckg_no, v_cont TO t_req_serv-line_no, c_1 TO t_req_serv-from_line, c_x TO t_req_serv-outl_ind, c_2 TO t_req_serv-subpckg_no. APPEND t_req_serv. ADD 1 TO v_cont. ENDIF. "if v_cont_reg = 1. MOVE: t_saida_pendente-meins TO t_req_serv-base_uom, t_saida_pendente-userf1_txt TO t_req_serv-userf1_txt, t_saida_pendente-extrow TO t_req_serv-ext_line, t_saida_pendente-srvpos TO t_req_serv-service, t_saida_pendente-menge TO t_req_serv-quantity, t_saida_pendente-tbtwr TO t_req_serv-gr_price, c_2 TO t_req_serv-pckg_no , v_cont TO t_req_serv-line_no, c_null TO t_req_serv-outl_ind, c_null TO t_req_serv-subpckg_no, c_62 TO t_req_serv-uom_iso, c_1 TO t_req_serv-price_unit. APPEND t_req_serv. MOVE: c_2 TO t_req_line-pckg_no,

v_cont TO t_req_line-line_no, c_100 TO t_req_line-percentage, c_1 TO t_req_line-serial_no, t_saida_pendente-menge TO t_req_line-quantity, c_100 TO t_req_line-net_value. APPEND t_req_line. CLEAR v_control. ELSE. "IF t_saida_pendente-banfn = v_banfn. v_control = c_x. SORT t_req_item BY preq_no preq_item. DELETE ADJACENT DUPLICATES FROM t_req_item COMPARING preq_no preq_item. SORT t_req_rm BY preq_no preq_item. DELETE ADJACENT DUPLICATES FROM t_req_rm COMPARING preq_no preq_item. SORT: t_req_item BY preq_no preq_item, t_req_rm BY preq_no preq_item. CALL FUNCTION 'BAPI_REQUISITION_CREATE' IMPORTING number = v_banfn TABLES requisition_items = t_req_item[] requisition_account_assignment = t_req_rm[] requisition_services = t_req_serv[] requisition_srv_accass_values = t_req_line[] return = t_return[]. IF t_return[] IS INITIAL. MOVE: t_req_item-preq_no TO t_mensagem_log-banfn, t_req_item-preq_item TO t_mensagem_log-bnfpo, t_saida_pendente-extrow TO t_mensagem_log-extrow, text-001 TO t_mensagem_log-message, c_s TO t_mensagem_log-flag. APPEND t_mensagem_log. ELSE. LOOP AT t_return. MOVE: t_req_item-preq_no TO t_mensagem_log-banfn, t_saida_pendente-extrow TO t_mensagem_log-extrow, t_return-message TO t_mensagem_log-message, c_e TO t_mensagem_log-flag. APPEND t_mensagem_log. ENDLOOP. ENDIF. CLEAR: v_cont,

t_return, t_return[], t_req_item, t_req_item[], t_req_rm, t_req_rm[], t_req_serv, t_req_serv[], t_req_line, t_req_line[]. v_banfn = t_saida_pendente-banfn. MOVE: t_saida_pendente-bsart TO t_req_item-doc_type, t_saida_pendente-banfn TO t_req_item-preq_no, t_saida_pendente-bnfpo TO t_req_item-preq_item, v_t_item TO t_req_item-item_cat, t_saida_pendente-knttp TO t_req_item-acctasscat, t_saida_pendente-txz01 TO t_req_item-short_text, t_saida_pendente-lfdat TO t_req_item-deliv_date, t_saida_pendente-matkl TO t_req_item-mat_grp, t_saida_pendente-werks TO t_req_item-plant, t_saida_pendente-ekgrp TO t_req_item-pur_group, t_saida_pendente-afnam TO t_req_item-preq_name, t_saida_pendente-lifnr TO t_req_item-des_vendor, t_saida_pendente-meins TO t_req_item-unit, c_1 TO t_req_item-pckg_no. APPEND t_req_item. MOVE: t_saida_pendente-kostl t_saida_pendente-aufnr t_saida_pendente-banfn t_saida_pendente-bnfpo APPEND t_req_rm. TO t_req_rm-cost_ctr, TO t_req_rm-order_no, TO t_req_rm-preq_no, TO t_req_rm-preq_item.

ADD 1 TO v_cont. IF v_cont = 1. MOVE: c_1 TO t_req_serv-pckg_no, v_cont TO t_req_serv-line_no, c_1 TO t_req_serv-from_line, c_x TO t_req_serv-outl_ind, c_2 TO t_req_serv-subpckg_no. APPEND t_req_serv. ADD 1 TO v_cont. ENDIF. "if v_cont_reg = 1. MOVE: t_saida_pendente-meins TO t_req_serv-base_uom, t_saida_pendente-userf1_txt TO t_req_serv-userf1_txt, t_saida_pendente-extrow TO t_req_serv-ext_line, t_saida_pendente-srvpos TO t_req_serv-service, t_saida_pendente-menge TO t_req_serv-quantity, t_saida_pendente-tbtwr TO t_req_serv-gr_price, c_2 TO t_req_serv-pckg_no , v_cont TO t_req_serv-line_no, c_null TO t_req_serv-outl_ind, c_null TO t_req_serv-subpckg_no, c_62 TO t_req_serv-uom_iso, c_1 TO t_req_serv-price_unit. APPEND t_req_serv. MOVE: c_2 v_cont TO t_req_line-pckg_no, TO t_req_line-line_no,

c_100 TO t_req_line-percentage, c_1 TO t_req_line-serial_no, t_saida_pendente-menge TO t_req_line-quantity, c_100 TO t_req_line-net_value. APPEND t_req_line. ENDIF. "IF t_saida_pendente-banfn = v_banfn. ENDLOOP. IF v_control IS INITIAL. SORT t_req_item BY preq_no preq_item. DELETE ADJACENT DUPLICATES FROM t_req_item COMPARING preq_no preq_item. SORT t_req_rm BY preq_no preq_item. DELETE ADJACENT DUPLICATES FROM t_req_rm COMPARING preq_no preq_item. SORT: t_req_item BY preq_no preq_item, t_req_rm BY preq_no preq_item. CALL FUNCTION 'BAPI_REQUISITION_CREATE' IMPORTING number = v_banfn TABLES requisition_items = t_req_item[] requisition_account_assignment = t_req_rm[] requisition_services = t_req_serv[] requisition_srv_accass_values = t_req_line[] return = t_return[]. IF t_return[] IS INITIAL. MOVE: t_req_item-preq_no TO t_mensagem_log-banfn, t_req_item-preq_item TO t_mensagem_log-bnfpo, t_saida_pendente-extrow TO t_mensagem_log-extrow, text-001 TO t_mensagem_log-message, c_s TO t_mensagem_log-flag. APPEND t_mensagem_log. ELSE. LOOP AT t_return. MOVE: t_req_item-preq_no TO t_mensagem_log-banfn, t_saida_pendente-extrow TO t_mensagem_log-extrow, t_return-message TO t_mensagem_log-message, c_e TO t_mensagem_log-flag. APPEND t_mensagem_log. ENDLOOP. ENDIF. ENDIF. "IF v_control ENDIF. "IF t_saida_pendente[] IS NOT INITIAL.

CLEAR: v_cont, v_banfn, v_control, t_return, t_return[], t_req_item, t_req_item[], t_req_rm, t_req_rm[], t_req_serv, t_req_serv[], t_req_line, t_req_line[]. ENDFUNCTION.

S-ar putea să vă placă și