Alterar/Fechar/Cancelar Linhas de Compra

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.

1

— 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;

 

2

— 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

Powered by WordPress.com. Tema: Baskerville 2 por Anders Noren

Acima ↑

%d blogueiros gostam disto: