顯示具有 EBS [PO] 標籤的文章。 顯示所有文章
顯示具有 EBS [PO] 標籤的文章。 顯示所有文章

2020/08/18

[IBY] iby_ext_bankacct_pub.get_ext_bank_acct

 DECLARE

  vBankAccountId iby_ext_bank_accounts.ext_bank_account_id%TYPE := 00;

  vInitMsgList   VARCHAR2(1) := fnd_api.g_false;

  xRetrunStatus  VARCHAR2(1);

  xMsgCount      NUMBER;

  xMsgData       VARCHAR2(2000);

  xBankAccount   iby_ext_bankacct_pub.extbankacct_rec_type;

  xResponse      iby_fndcpt_common_pub.result_rec_type;

  vCount         NUMBER := 0;

BEGIN

  iby_ext_bankacct_pub.get_ext_bank_acct(p_api_version => 1.0,

                                         p_init_msg_list => vInitMsgList,

                                         p_bankacct_id => vBankAccountId,

                                         x_return_status => xRetrunStatus,

                                         x_msg_count => xMsgCount,

                                         x_msg_data => xMsgData,

                                         x_bankacct => xBankAccount,

                                         x_response => xResponse);


  dbms_output.put_line('API Return => ' || xRetrunStatus);

  dbms_output.put_line('Bank Account Number : ' || xBankAccount.bank_account_num);

  dbms_output.put_line('Bank Account Name   : ' || xBankAccount.bank_account_name);

  IF xRetrunStatus <> fnd_api.g_ret_sts_success THEN

    IF xMsgCount = 1 THEN

      DBMS_OUTPUT.put_line('Error =>' || xMsgData);

    ELSE

      LOOP

        vCount   := vCount + 1;

        xMsgData := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);

        IF xMsgData IS NULL THEN

          EXIT;

        END IF;

        DBMS_OUTPUT.put_line('Error' || vCount || '=>' || xMsgData);

      END LOOP;

    END IF;

  END IF;

END;


2020/08/12

[Script] Outsource Processing WIP & PO

 範例 : 

WITH job AS

 (SELECT wdj.wip_entity_name,

         wdj.wip_entity_id,

         wo.operation_seq_num,

         wdj.status_type_disp

  FROM   wip_discrete_jobs_v wdj,

         wip_operations_v    wo

  WHERE  wdj.organization_id = 00

  AND    wdj.class_code = 'XX'

  AND    wdj.wip_entity_id = wo.wip_entity_id),

po AS

 (SELECT pd.wip_entity_id,

         pd.wip_operation_seq_num,

         poh.segment1,

         poh.terms_id,

         poh.vendor_id,

         poh.vendor_site_id,

         poh.currency_code,

         poh.po_header_id,

         poh.type_lookup_code,

         poh.approved_flag,

         poh.closed_code,

         pol.closed_code          line_closed_code,

         pll.cancel_flag          line_cancel_flag,

         poh.frozen_flag,

         poh.user_hold_flag,

         pol.expiration_date,

         pol.cancel_flag

  FROM   po_distributions_all  pd,

         po_line_locations_all pll,

         po_lines_all          pol,

         po_headers_all        poh

  WHERE  pd.line_location_id = pll.line_location_id

  AND    pll.po_line_id = pol.po_line_id

  AND    pol.po_header_id = poh.po_header_id)

SELECT job.wip_entity_name "Job Number",

       job.status_type_disp "Job Status",

       po.currency_code "Currency",

       po_totals_po_sv.get_po_total(X_header_id => po.po_header_id) "Total Amout",

       wip_osp.is_order_open(approved_flag => po.approved_flag,

                             closed_code => po.closed_code,

                             line_closed_status => po.closed_code,

                             cancel_flag => po.cancel_flag,

                             frozen_flag => po.frozen_flag,

                             user_hold_flag => po.user_hold_flag,

                             line_expiration_date => po.expiration_date,

                             line_cancel_flag => po.cancel_flag) "Purchase is opened?"


FROM   job,

       po

WHERE  job.wip_entity_id = po.wip_entity_id(+)

AND    job.operation_seq_num = po.wip_operation_seq_num(+)


2020/08/10

[PO] Close PO => Header / Line / Shipment

 DECLARE

  xReturnStatus VARCHAR2(1);

  xResult       BOOLEAN;

BEGIN

  fnd_global.apps_initialize(user_id => 00, resp_id => 00,resp_appl_id => 00);

  xResult := po_actions.close_po(p_docid => 00,

                                  p_doctyp => 'PO',

                                  p_docsubtyp => 'STANDARD',

                                  p_lineid => null, -- if want to close line

                                  p_shipid => null, -- if want to close shipment

                                  p_action => 'CLOSE',

                                  p_reason => 'Test',

                                  p_calling_mode => 'PO', 

                                  p_conc_flag => 'N',

                                  p_return_code => xReturnStatus,

                                  p_auto_close => 'N',

                                  p_action_date => SYSDATE,

                                  p_origin_doc_id => null);

END;

2020/07/22

[API] Create single - Sourcing Rule

範例 : 
DECLARE
  vSession            NUMBER;
  xReturnStatus       VARCHAR2(1);
  xMsgCount           NUMBER := 0;
  xMsgData            VARCHAR2(2000);
  vCount              NUMBER;
  xErrorCount         NUMBER;
  vSourcingRuleRec    MRP_SOURCING_RULE_PUB.SOURCING_RULE_REC_TYPE;
  VSourcingRuleValRec MRP_SOURCING_RULE_PUB.SOURCING_RULE_VAL_REC_TYPE;
  vReceivingOrgTbl    MRP_SOURCING_RULE_PUB.RECEIVING_ORG_TBL_TYPE;
  vReceivingOrgValTbl MRP_SOURCING_RULE_PUB.RECEIVING_ORG_VAL_TBL_TYPE;
  vShippingOrgTbl     MRP_SOURCING_RULE_PUB.SHIPPING_ORG_TBL_TYPE;
  vShippingOrgValTbl  MRP_SOURCING_RULE_PUB.SHIPPING_ORG_VAL_TBL_TYPE;
  xSourcingRuleRec    MRP_SOURCING_RULE_PUB.SOURCING_RULE_REC_TYPE;
  xSourcingRuleValRec MRP_SOURCING_RULE_PUB.SOURCING_RULE_VAL_REC_TYPE;
  xReceivingOrgTbl    MRP_SOURCING_RULE_PUB.RECEIVING_ORG_TBL_TYPE;
  xReceivingOrgValTbl MRP_SOURCING_RULE_PUB.RECEIVING_ORG_VAL_TBL_TYPE;
  xShippingOrgTbl     MRP_SOURCING_RULE_PUB.SHIPPING_ORG_TBL_TYPE;
  xShippingOrgValTbl  MRP_SOURCING_RULE_PUB.SHIPPING_ORG_VAL_TBL_TYPE;
BEGIN
  fnd_message.clear;
  vSourcingRuleRec                    := MRP_SOURCING_RULE_PUB.G_MISS_SOURCING_RULE_REC;
  vSourcingRuleRec.sourcing_rule_name := 'CAMEO RULE'; --SR Name
  vSourcingRuleRec.Organization_Id    := 954;
  vSourcingRuleRec.planning_active    := 1;
  vSourcingRuleRec.status             := 1; -- Update New record
  vSourcingRuleRec.sourcing_rule_type := 1; -- (1) Sourcing Rule  (2) Bill of
  vSourcingRuleRec.operation          := 'CREATE'; --Create / Update / Delete 
  vReceivingOrgTbl                    := MRP_SOURCING_RULE_PUB.G_MISS_RECEIVING_ORG_TBL;
  vShippingOrgTbl                     := MRP_SOURCING_RULE_PUB.G_MISS_SHIPPING_ORG_TBL;

  vReceivingOrgTbl(1).effective_date := trunc(SYSDATE);
  vReceivingOrgTbl(1).disable_date := trunc(SYSDATE) + 7;
  vReceivingOrgTbl(1).receipt_organization_id := 00;
  vReceivingOrgTbl(1).operation := 'CREATE';

  vShippingOrgTbl(1).rank := 1;
  vShippingOrgTbl(1).allocation_percent := 100;
  vShippingOrgTbl(1).source_type := 3; -- Make / Transfer / Buy
  vShippingOrgTbl(1).vendor_id := 00;
  vShippingOrgTbl(1).receiving_org_index := 1;  --Foreign key to the receipt organization PL/SQL table , Default Value: FND_API.G_MISS_NUM
  vShippingOrgTbl(1).operation := 'CREATE';
  
  dbms_output.put_line('Before call');
  dbms_output.put_line('Operation before call => ' || vSourcingRuleRec.operation);

  mrp_sourcing_rule_pub.process_sourcing_rule(p_api_version_number => 1.0,
                                              p_init_msg_list => fnd_api.g_true,
                                              p_commit => fnd_api.g_true,
                                              x_return_status => xReturnStatus,
                                              x_msg_count => xMsgCount,
                                              x_msg_data => xMsgData,
                                              p_sourcing_rule_rec => vSourcingRuleRec,
                                              p_sourcing_rule_val_rec => VSourcingRuleValRec,
                                              p_receiving_org_tbl => vReceivingOrgTbl,
                                              p_receiving_org_val_tbl => vReceivingOrgValTbl,
                                              p_shipping_org_tbl => vShippingOrgTbl,
                                              p_shipping_org_val_tbl => vShippingOrgValTbl,
                                              x_sourcing_rule_rec => xSourcingRuleRec,
                                              x_sourcing_rule_val_rec => xSourcingRuleValRec,
                                              x_receiving_org_tbl => xReceivingOrgTbl,
                                              x_receiving_org_val_tbl => xReceivingOrgValTbl,
                                              x_shipping_org_tbl => xShippingOrgTbl,
                                              x_shipping_org_val_tbl => xShippingOrgValTbl);
  dbms_output.put_line('API Retrun Status => ' || xReturnStatus); 
  IF xReturnStatus = fnd_api.g_ret_sts_success THEN
    dbms_output.put_line('Success!');
    dbms_output.put_line('Source Rule ID => ' || xSourcingRuleRec.Sourcing_Rule_Id);
  ELSE
    dbms_output.put_line('Error Count:' || xMsgCount);
    IF xMsgCount > 0 THEN
      FOR l_index IN 1 .. xMsgCount
      LOOP
        xMsgData := fnd_msg_pub.get(p_msg_index => l_index,
                                      p_encoded => FND_API.G_FALSE);
        dbms_output.put_line(substr(xMsgData, 1, 250));
      END LOOP;
    END IF;
    dbms_output.put_line('Failure!');
  END IF;
END;

2020/07/16

[API] 取消採購單

範例 : 
DECLARE
  vReturnStatus   VARCHAR2(1);
  vMsgData        VARCHAR2(200);
  vOrgId          po_headers_all.org_id%TYPE := 00;
  vPoHeaderId     po_headers_all.po_header_id%TYPE := 11;
  vDocSubtype     po_headers_all.type_lookup_code%TYPE := 'STANDARD';
  vDocType        VARCHAR2(2) := 'PO';
  vCancelReqsFlag VARCHAR2(1) := 'N';
  vCancelReason   VARCHAR2(200) := 'TEST';
  vAction         VARCHAR2(10) := 'CANCEL';
  vActionDate     DATE := SYSDATE;
BEGIN

  fnd_global.apps_initialize(user_id => 00, resp_id => 00,resp_appl_id => 00);
  mo_global.init('PO');
  mo_global.set_policy_context('S',vOrgId); 
  dbms_output.put_line('Calling API For Cancelling Documents');

  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 => vReturnStatus,
                                           p_doc_type => vDocType,
                                           p_doc_subtype => vDocSubtype,
                                           p_doc_id => vPoHeaderId,
                                           p_doc_num => NULL,
                                           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 => vAction,
                                           p_action_date => vActionDate,
                                           p_cancel_reason => NULL,
                                           p_cancel_reqs_flag => vCancelReqsFlag,
                                           p_print_flag => NULL,
                                           p_note_to_vendor => NULL,
                                           p_use_gldate => NULL,
                                           p_org_id => vOrgId);

  DBMS_OUTPUT.PUT_LINE('The Return Status of the API : ' || vReturnStatus);
  IF vReturnStatus = fnd_api.g_ret_sts_success THEN
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('Cancellation of PO is Sucessfull : ' ||
                         vPoHeaderId);
  ELSE
    DBMS_OUTPUT.PUT_LINE('Cancellation of PO Failed ');
    ROLLBACK;
    FOR i IN 1 .. FND_MSG_PUB.COUNT_MSG
    LOOP
      vMsgData := FND_MSG_PUB.GET(p_msg_index => i, p_encoded => 'F');
      DBMS_OUTPUT.PUT_LINE(i || ') ' || vMsgData);
    END LOOP;
  END IF;
END;

2020/07/14

[API] 新增採購出貨行

DECLARE
  vLineLocationId po_line_locations_all.line_location_id%TYPE := 1000000;
  vShipment       po_line_locations_all%ROWTYPE;
  vNewShipmentNum po_line_locations_all.shipment_num%TYPE;

  vChange          po_changes_rec_type;
  vShipmentChanges Po_Shipments_Rec_Type;

  vPoLineLocationId Po_Tbl_Number := Po_Tbl_Number();
  vQuantity         Po_Tbl_Number := Po_Tbl_Number();
  vNeedByDate       Po_Tbl_Date := Po_Tbl_Date();
  vPriceOverride    Po_Tbl_Number := Po_Tbl_Number();
  vPromisedDate     Po_Tbl_Date := Po_Tbl_Date();

  vReturnStatus VARCHAR2(1);
  vMsgData      VARCHAR2(2000);
  vErrors       Po_Api_Errors_Rec_Type;
BEGIN
  SELECT *
  INTO   vShipment
  FROM   po_line_locations_all
  WHERE  line_location_id = vLineLocationId;

  vNewShipmentNum := po_line_locations_pkg_s3.get_max_shipment_num(X_po_line_id => vShipment.Po_Line_Id,
                                                                   X_po_release_id => vShipment.Po_Release_Id,
                                                                   X_shipment_type => vShipment.Shipment_Type) + 1;
  --initial 
  mo_global.init('PO');
  mo_global.set_policy_context('S', 00);
  fnd_global.apps_initialize(user_id => 00, resp_id => 00,resp_appl_id => 201);

  vPoLineLocationId := Po_Tbl_Number(NULL);
  vQuantity         := Po_Tbl_Number(1000);
  vPriceOverride    := Po_Tbl_Number(NULL);
  vPromisedDate     := Po_Tbl_Date(NULL);
  vNeedByDate       := Po_Tbl_Date(SYSDATE);

  vShipmentChanges := Po_Shipments_Rec_Type.Create_Object(p_Po_Line_Location_Id => vPoLineLocationId,
                                                          p_Quantity => vQuantity,
                                                          p_Promised_Date => vPromisedDate,
                                                          p_Price_Override => vPriceOverride,
                                                          p_Parent_Line_Location_Id => Po_Tbl_Number(vLineLocationId),
                                                          p_Split_Shipment_Num => Po_Tbl_Number(vNewShipmentNum),
                                                          p_Need_By_Date => vNeedByDate);

  vChange := Po_Changes_Rec_Type.Create_Object(p_Po_Header_Id => vShipment.Po_Header_Id,
                                               p_Po_Release_Id => vShipment.Po_Release_Id,
                                               p_Shipment_Changes => vShipmentChanges);

  Po_Document_Update_Grp.Update_Document(p_Api_Version => 1.0,
                                         p_Init_Msg_List => Fnd_Api.g_True,
                                         x_Return_Status => vReturnStatus,
                                         p_Changes => vChange,
                                         p_Run_Submission_Checks => Fnd_Api.g_False,
                                         p_Launch_Approvals_Flag => Fnd_Api.g_False,
                                         p_Buyer_Id => NULL,
                                         p_Update_Source => NULL,
                                         p_Override_Date => NULL,
                                         x_Api_Errors => vErrors,
                                         p_Mass_Update_Releases => NULL);
  dbms_output.put_line('Update Status:' || vReturnStatus);
  IF vErrors IS NOT NULL THEN
    FOR i IN 1 .. vErrors.Message_Text.Count
    LOOP
      vMsgData := vErrors.Message_Text(i) || ' - ' ||
                  vErrors.Message_Name(i) || '; ' || vMsgData;
    END LOOP;
    Dbms_Output.Put_Line('Error Message:' || vMsgData);
  END IF;
END;