Olá pessoal, caso você queira fazer mudanças dentro de uma OC, a Oracle disponibiliza API e packages que podem lhe ajudar nesse trabalho. Hoje irei repassar o código para fazer modificações dentro de uma OC.
— Cancelar uma Linha de OC
DECLARE l_user_id NUMBER; l_resp_id NUMBER; l_appl_id NUMBER; l_result NUMBER; l_api_errors po_api_errors_rec_type; l_revision_num NUMBER; v_shipment_number NUMBER; v_org_id NUMBER; v_type_lookup_code VARCHAR2(400); v_return_status VARCHAR2(400); v_header_id NUMBER; v_line_id NUMBER; v_line_location_id NUMBER; v_razao VARCHAR2(400); BEGIN fnd_global.apps_initialize (l_user_id, l_resp_id, l_appl_id); mo_global.set_policy_context('S', v_org_id ); mo_global.init('PO'); PO_DOCUMENT_CONTROL_PUB.CONTROL_DOCUMENT ( p_api_version => 1.0, p_init_msg_list => fnd_api.g_true, p_commit => fnd_api.g_false, x_return_status => v_return_status, p_doc_type => 'PO', p_doc_subtype => v_type_lookup_code, -- BLANKET OR STANDARD p_doc_id => v_header_id, -- po_header_Id p_doc_num => NULL, p_release_id => NULL, p_release_num => NULL, p_doc_line_id => v_line_id, -- po_line_id p_doc_line_num => NULL, p_doc_line_loc_id => v_line_location_id, -- po_line_location_id p_doc_shipment_num => NULL, p_action => 'CANCEL', p_action_date => v_data_cancelamento, p_cancel_reason => v_razao, p_cancel_reqs_flag => 'N', p_print_flag => NULL, p_note_to_vendor => NULL, p_use_gldate => NULL, p_org_id => v_org_id); END;
— Fechar uma Linha de OC
DECLARE l_user_id NUMBER; l_resp_id NUMBER; l_appl_id NUMBER; l_result NUMBER; l_api_errors po_api_errors_rec_type; l_revision_num NUMBER; v_shipment_number NUMBER; v_org_id NUMBER; v_type_lookup_code VARCHAR2(400); v_return_status VARCHAR2(400); v_header_id NUMBER; v_line_id NUMBER; v_line_location_id NUMBER; v_razao VARCHAR2(400); BEGIN fnd_global.apps_initialize (l_user_id, l_resp_id, l_appl_id); mo_global.set_policy_context('S', v_org_id ); mo_global.init('PO'); v_result := po_actions.close_po(p_docid => v_header_id, p_doctyp => 'PO', p_docsubtyp => v_type_lookup_code, p_lineid => v_line_id, p_shipid => v_line_location_id, p_action => 'CLOSED', p_reason => 'Fechamento Automático', p_calling_mode => 'PO', p_conc_flag => 'N', p_return_code => v_return_status, p_auto_close => 'N', p_action_date => SYSDATE); END;
— Alterar informações as linhas das OC
DECLARE l_user_id NUMBER; l_resp_id NUMBER; l_appl_id NUMBER; l_result NUMBER; l_api_errors po_api_errors_rec_type; l_revision_num NUMBER; v_shipment_number NUMBER; BEGIN fnd_global.apps_initialize (l_user_id, l_resp_id, l_appl_id); mo_global.set_policy_context('S', pi_org_id ); mo_global.init('PO'); l_result := po_change_api1_s.update_po (x_po_number => pi_order_number, --ordem de compra x_release_number => pi_release_num, -- liberação x_revision_number => l_revision_num, -- revisão da OC ou da liberação x_line_number => pi_line_num, -- linha da OC x_shipment_number => v_shipment_number, -- numero da entrega new_quantity => pi_quantidade, -- quantidade new_price => pi_novo_preco, -- novo preco new_promised_date => pi_nova_data_promessa, -- nova data de promessa new_need_by_date => NULL, -- nova data de necessidade launch_approvals_flag => 'Y', update_source => NULL, version => 1.0, x_override_date => NULL, x_api_errors => l_api_errors, p_buyer_name => NULL, p_secondary_quantity => NULL, p_preferred_grade => NULL, p_org_id => pi_org_id); -- unidade operacional IF (l_result = 1) THEN po_retorno := NULL; END IF; IF (l_result <> 1) THEN FOR j IN 1 .. l_api_errors.MESSAGE_TEXT.COUNT LOOP po_retorno := l_api_errors.MESSAGE_TEXT (j); END LOOP; END IF; END;
Deixe uma resposta