Bom dia
É possível cancelar requisição (interna ou de compra) via pl/sql?
Obs: Oracle EBS 11.5.9
-----
Marcel
PO - Cancelar requisição via pl/sql
- madmax
- Rank: DBA Pleno
- Mensagens: 293
- Registrado em: Qua, 13 Dez 2006 5:02 pm
- Localização: São Paulo
- Contato:
________________________________
Douglas - Madmax.
Douglas - Madmax.
Olá Marcel.
Cara não aconselho fazer isso via PL/SQL e sim seguir o processo do PO, mas se não me engano existe uma package po_document_control_pub.control_document que você pode utilizar para cancelar.
Segue exemplo:
Se precisar de querys sobre PO pode acessar meu Blog rsrsrs.
http://especialistaoracleebs.blogspot.c ... -blog.html
Espero ter ajudado.
Abs..
Cara não aconselho fazer isso via PL/SQL e sim seguir o processo do PO, mas se não me engano existe uma package po_document_control_pub.control_document que você pode utilizar para cancelar.
Segue exemplo:
DECLARE
x_return_status VARCHAR2 (10);
BEGIN
fnd_global.apps_initialize (1072, 50382, 201);
po_document_control_pub.control_document (p_api_version => 1.0
, p_init_msg_list => 'T'
, p_commit => 'F'
, x_return_status => x_return_status
, p_doc_type => 'PO'
, p_doc_subtype => 'STANDARD'
, p_doc_id => 35917
, p_doc_num => '830829'
, p_release_id => NULL
, p_release_num => NULL
, p_doc_line_id => NULL
, p_doc_line_num => NULL
, p_doc_line_loc_id => NULL
, p_doc_shipment_num => NULL
, p_action => 'CANCEL'
, p_action_date => SYSDATE
, p_cancel_reason => 'TEST123'
, p_cancel_reqs_flag => 'Y'
, p_print_flag => 'N'
, p_note_to_vendor => 'TEST123'
);
dbms_output.put_line(x_return_status);
END;
Se precisar de querys sobre PO pode acessar meu Blog rsrsrs.
http://especialistaoracleebs.blogspot.c ... -blog.html
Espero ter ajudado.
Abs..
- madmax
- Rank: DBA Pleno
- Mensagens: 293
- Registrado em: Qua, 13 Dez 2006 5:02 pm
- Localização: São Paulo
- Contato:
________________________________
Douglas - Madmax.
Douglas - Madmax.
Marcel.
Ou seja a Ordem de Compra.
Mas pesquisando melhor nós temos uma API a que pode ser usado para fechar ou cancelar requisições.
Temos de passar os parâmetros como requisition_header_id, requisition_line_id, Preparer_id, document_type_code,
type_lookup_code, req_control_action, Req_control_reason e o parâmetro padrão diferente para a API.
1 - PO - Sample Script to Cancel PR Using API
2 - Script para finalmente fechar PR Usando API.sql
Espero ter ajudado.
Abs.
Doc_id = PO_HEADERS_ALL.PO_HEADER_ID
Doc_Num = PO_HEADERS_ALL.Segment1
Mas pesquisando melhor nós temos uma API a
po_reqs_control_sv.update_reqs_status
Temos de passar os parâmetros como requisition_header_id, requisition_line_id, Preparer_id, document_type_code,
type_lookup_code, req_control_action, Req_control_reason e o parâmetro padrão diferente para a API.
1 - PO - Sample Script to Cancel PR Using API
DECLARE
X_req_control_error_rc VARCHAR2 (500);
l_org_id NUMBER := 308; -- Enter the Operating_Unit Here
cnt number := 0;
CURSOR C_REQ_CANCEL is
SELECT
prh.segment1 requisition_num,
prh.requisition_header_id,
prh.org_id,
prl.requisition_line_id,
prh.preparer_id,
prh.type_lookup_code,
pdt.document_type_code,
prh.authorization_status,
prl.line_location_id
FROM
apps.po_requisition_headers_all prh,
apps.po_requisition_lines_all prl,
apps.po_document_types_all pdt
WHERE 1 = 1
AND prh.org_id = l_org_id
AND pdt.document_type_code = 'REQUISITION'
AND prh.authorization_status = 'APPROVED'
AND prl.line_location_id is null
AND prh.requisition_header_id = prl.requisition_header_id
AND prh.type_lookup_code = pdt.document_subtype
AND prh.org_id = pdt.org_id
AND prh.segment1 = '21170000909'; -- Enter The Requisition Number
BEGIN
fnd_global.apps_initialize (user_id => 2083,
resp_id => 20707,
resp_appl_id => 201);
mo_global.init ('PO');
mo_global.set_policy_context ('S', l_org_id);
FOR i IN C_REQ_CANCEL
LOOP
dbms_output.put_line (' Calling po_reqs_control_sv.update_reqs_status to cancel the Requisition=>' i.requisition_num);
dbms_output.put_line ('======================================================');
po_reqs_control_sv.update_reqs_status(
X_req_header_id => i.requisition_header_id
, X_req_line_id => i.requisition_line_id
, X_agent_id => i.preparer_id
, X_req_doc_type => i.document_type_code
, X_req_doc_subtype => i.type_lookup_code
, X_req_control_action => 'CANCEL'
, X_req_control_reason => 'CANCELLED BY API'
, X_req_action_date => SYSDATE
, X_encumbrance_flag => 'N'
, X_oe_installed_flag => 'Y'
, X_req_control_error_rc => X_req_control_error_rc);
DBMS_OUTPUT.PUT_LINE ( 'Status Found:=> ' X_req_control_error_rc);
DBMS_OUTPUT.PUT_LINE ('Requisition Number cancelled is :=>' i.Requisition_num);
cnt := cnt+1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Count is :=>' cnt);
END;
DECLARE
X_req_control_error_rc VARCHAR2 (500);
l_org_id NUMBER := 308; -- Enter the Operating_Unit Here
cnt number := 0;
CURSOR C_REQ_CLOSE is
SELECT
prh.segment1 requisition_num,
prh.requisition_header_id,
prh.org_id,
prl.requisition_line_id,
prh.preparer_id,
prh.type_lookup_code,
pdt.document_type_code,
prh.authorization_status,
prh.closed_code
FROM
apps.po_requisition_headers_all prh,
apps.po_requisition_lines_all prl,
apps.po_document_types_all pdt
WHERE 1 = 1
AND prh.org_id = l_org_id
AND pdt.document_type_code = 'REQUISITION'
AND prh.authorization_status = 'APPROVED'
AND prl.line_location_id is null
AND prh.requisition_header_id = prl.requisition_header_id
AND prh.type_lookup_code = pdt.document_subtype
AND prh.org_id = pdt.org_id
AND prh.segment1 = '21170002264'; -- Enter The Requisition Number
BEGIN
fnd_global.apps_initialize (user_id => 2083,
resp_id => 20707,
resp_appl_id => 201);
mo_global.init ('PO');
mo_global.set_policy_context ('S', l_org_id);
FOR i IN C_REQ_CLOSE
LOOP
DBMS_OUTPUT.PUT_LINE ('Calling po_reqs_control_sv.update_reqs_status to Finally Close Requisition=>' i.requisition_num);
DBMS_OUTPUT.PUT_LINE ('=======================================================');
po_reqs_control_sv.update_reqs_status(
X_req_header_id => i.requisition_header_id
, X_req_line_id => i.requisition_line_id
, X_agent_id => i.preparer_id
, X_req_doc_type => i.document_type_code
, X_req_doc_subtype => i.type_lookup_code
, X_req_control_action => 'FINALLY CLOSE'
, X_req_control_reason => 'FINALLY CLOSED BY API'
, X_req_action_date => SYSDATE
, X_encumbrance_flag => 'N'
, X_oe_installed_flag => 'Y'
, X_req_control_error_rc => X_req_control_error_rc);
DBMS_OUTPUT.PUT_LINE ( 'Status Found: ' X_req_control_error_rc);
DBMS_OUTPUT.PUT_LINE ('Requisition Number which is Finally Closed =>' i.Requisition_num);
cnt := cnt+1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Count is :=>' cnt);
END;
Abs.
-
- Rank: Programador Pleno
- Mensagens: 30
- Registrado em: Qua, 17 Fev 2010 8:02 am
- Localização: Criciuma SC
Bom dia
Utilizei o codigo abaixo para fazer o cancelamento, mas o mesmo não está revertendo o empenho. já tentei mudar o parametro X_encumbrance_flag para N e Y, mas em nenhum dos casos o empenho foi revertido.
alguém tem o código para reverter o empenho de uma requisição?
Marcel
Utilizei o codigo abaixo para fazer o cancelamento, mas o mesmo não está revertendo o empenho. já tentei mudar o parametro X_encumbrance_flag para N e Y, mas em nenhum dos casos o empenho foi revertido.
po_reqs_control_sv.update_reqs_status
( X_req_header_id => :REQLINES.requisition_header_id
, X_req_line_id => w_req_line_id
, X_agent_id => :REQHEAD.preparer_id
, X_req_doc_type => 'REQUISITION'
, X_req_doc_subtype => :REQHEAD.type_lookup_code
, X_req_control_action => 'CANCEL'
, X_req_control_reason => 'CANCELLED BY API'
, X_req_action_date => SYSDATE
, X_encumbrance_flag => 'Y'
, X_oe_installed_flag => 'Y'
, X_req_control_error_rc => V_RETURN
);
Marcel
-
- Rank: Programador Pleno
- Mensagens: 30
- Registrado em: Qua, 17 Fev 2010 8:02 am
- Localização: Criciuma SC
Nós utilizamos a parte de Orçamento do GL.
Ela funciona assim, cada combinação contabil (ou um conjunto de combinações) possui um valor X para gastar no periodo (período do gl). Quando é feita uma requisição, o sistema reserva a quantia do orçamento correspondente a conta da requisição, isto é chamado empenho. Depois, quando é dado entrada da nota, este valor sai do empenho e vai para o realizado.
Acontece que quando é cancelada uma requisição utilizando a procedure descrita no outro post, não está estornando este valor empenhado.
Exemplo:
- Conta 1.2.2 Periodo MAI-2010 Orçamento R$ 100
- Crio uma requisição com encargo na conta 1.2.2 de R$60
- Orçamento R$100 Empenhado R$ 60 Realizado R$0 Disponível R$ 100
Neste momento, se cancelar a requisição deveria ficar assim
- Orçamento R$100 Empenhado R$ 0 Realizado R$0 Disponível R$ 100
Mas está mantendo o valor que havia empenhado
- Orçamento R$100 Empenhado R$ 60 (!) Realizado R$0 Disponível R$ 40
Ou seja, o valor disponivel fica inconsistente, não deixando que seja feita outra requisição para substituir aquela que foi cancelada.
Se ainda ficou com alguma duvida sobre o processo, fala ai.
Marcel
Ela funciona assim, cada combinação contabil (ou um conjunto de combinações) possui um valor X para gastar no periodo (período do gl). Quando é feita uma requisição, o sistema reserva a quantia do orçamento correspondente a conta da requisição, isto é chamado empenho. Depois, quando é dado entrada da nota, este valor sai do empenho e vai para o realizado.
Acontece que quando é cancelada uma requisição utilizando a procedure descrita no outro post, não está estornando este valor empenhado.
Exemplo:
- Conta 1.2.2 Periodo MAI-2010 Orçamento R$ 100
- Crio uma requisição com encargo na conta 1.2.2 de R$60
- Orçamento R$100 Empenhado R$ 60 Realizado R$0 Disponível R$ 100
Neste momento, se cancelar a requisição deveria ficar assim
- Orçamento R$100 Empenhado R$ 0 Realizado R$0 Disponível R$ 100
Mas está mantendo o valor que havia empenhado
- Orçamento R$100 Empenhado R$ 60 (!) Realizado R$0 Disponível R$ 40
Ou seja, o valor disponivel fica inconsistente, não deixando que seja feita outra requisição para substituir aquela que foi cancelada.
Se ainda ficou com alguma duvida sobre o processo, fala ai.
Marcel
- madmax
- Rank: DBA Pleno
- Mensagens: 293
- Registrado em: Qua, 13 Dez 2006 5:02 pm
- Localização: São Paulo
- Contato:
________________________________
Douglas - Madmax.
Douglas - Madmax.
Marcel.
Com certeza a API não irá extornar no empenho porque deve ser outras tabelas que não seja essas:
Acho que você devera customizar a po_reqs_control_sv para que pegue o valor do empenho da requisição e abata no valor total onde e guardado.
Abs.
Com certeza a API não irá extornar no empenho porque deve ser outras tabelas que não seja essas:
apps.po_requisition_headers_all
apps.po_requisition_lines_all
apps.po_document_types_all
Abs.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes