외상 매입금 운영에 대한 수정 스크립트 실행

  • 릴리스 버전: Australia
  • 업데이트 날짜 2026년 03월 12일
  • 소요 시간: 5분
  • 의 성공적인 설치 외상 매입금 운영를 위해 수정 스크립트를 실행합니다.

    시작하기 전에

    • 상 매입금 송장 처리 플러그인을 설치합니다.
    • 자금 부족(헤더 금액 편차) 예외가 작동하도록 수정 스크립트를 실행합니다.
    • 애플리케이션 범위를소싱-지급(S2P) 공통 아키텍처로 설정합니다.
    • 구매 주문서와 연결된 모든 송장은 자금 부족(헤더 금액 편차) 예외가 작동하기 위해 시스템에서 사용할 수 있어야 합니다.
    • 예외가 성공적으로 실행되려면 송장의 통화가 구매 주문서 통화와 관련된 통화와 같은지 확인합니다.
    • 명령줄 gr.addEncodedQuery("in_process_invoiced_amountISEMPTY" 뒤에 gr.setLimit(100000) 명령을 추가하여 수정 스크립트를 일괄적으로 실행할 수 있습니다. 스크립트를 100k 또는 200k 단위로 실행합니다.
    • PO가 처리 중인 송장 금액송장 금액 필드로 업데이트되었는지 확인합니다.
      주:
      PO에 대해 수정 스크립트가 실행되지 않으면 송장과 관련된 자금 부족(헤더 금액 편차) 예외가 작동하지 않습니다.

    필요한 역할: 관리자

    프로시저

    1. 다음으로 이동 모두 > 시스템 정의 > 스크립트 수정.
    2. 새로 만들기를 클릭합니다.
      새 수정 스크립트 기록이 열립니다.스크립트 기록을 수정합니다.
    3. 이름 필드에 이름을 APO에 대한 PO 송장 금액 업데이트로 입력합니다.
    4. 스크립트 필드에 아래에 언급된 스크립트를 복사하여 붙여넣습니다.
    updatePOInvoicedAmounts();
    
    function updatePOInvoicedAmounts() {
        var sessionCurrency = new sn_currency.GlideCurrencyConfig().getSessionCurrency();
        var gr = new GlideRecord("sn_shop_purchase_order");
        gr.addEncodedQuery('in_process_invoiced_amountISEMPTY');
        gr.query();
        while (gr.next()) {
            var poSysID = gr.getValue('sys_id');
            var inProcessInvoiceAmt = getInProcessInvoicedAmount(poSysID);
            var invoicedAmount = getInvoicedAmount(poSysID);
            var poCurrency = !gs.nil(gr.total_amount) ? gr.total_amount.currency : sessionCurrency;
            var amtUpdated = false;
            if (!gs.nil(inProcessInvoiceAmt)) {
                inProcessInvoiceAmt = poCurrency + ';' + inProcessInvoiceAmt;
                gr.getElement('in_process_invoiced_amount').setDisplayValue(inProcessInvoiceAmt);
                amtUpdated = true;
            }
            if (!gs.nil(invoicedAmount)) {
                invoicedAmount = poCurrency + ';' + invoicedAmount;
                gr.getElement('invoiced_amount').setDisplayValue(invoicedAmount);
                amtUpdated = true;
            }
            if (amtUpdated)
                gr.update();
        }
    }
     
    function getInProcessInvoicedAmount(poSysId) {
        var query = 'invoice_amountISNOTEMPTY,^invoice_amount.amount!=0^stateINpo_matching_completed,exceptions_found,no_exceptions_found,pending_approval,approval_recalled,approved';
        var gr = new GlideAggregate('sn_shop_invoice');
        gr.addNotNullQuery('purchase_order');
        gr.addQuery('purchase_order', poSysId);
        gr.addEncodedQuery(query);
        gr.addAggregate('SUM', 'invoice_amount.amount');
        gr.groupBy('purchase_order');
        gr.query();
        if (gr.next()) {
            var inProcessInvoicedAmt = gr.getAggregate('SUM', 'invoice_amount.amount');
            return inProcessInvoicedAmt;
        }
        return 0;
    }
     
    function getInvoicedAmount(poSysId) {
        var query = 'invoice_amountISNOTEMPTY,^invoice_amount.amount!=0^stateINpending_payment,paid';
        var gr = new GlideAggregate('sn_shop_invoice');
        gr.addNotNullQuery('purchase_order');
        gr.addQuery('purchase_order', poSysId);
        gr.addEncodedQuery(query);
        gr.addAggregate('SUM', 'invoice_amount.amount');
        gr.groupBy('purchase_order');
        gr.query();
        if (gr.next()) {
            var invoicedAmt = gr.getAggregate('SUM', 'invoice_amount.amount');
            return invoicedAmt;
        }
        return 0;
    }
    1. 제출을 클릭합니다.
    2. 수정 스크립트 목록 뷰에서 APO 수정 스크립트에 대한 PO 송장 금액 업데이트를 검색하여 선택합니다.
      APO 수정에 대한 PO 송장 금액 업데이트 스크립트가 열립니다.
    3. 수정 스크립트 실행을 선택합니다.
      취소,계속 진행백그라운드에서 계속 진행 옵션이 포함된 팝업 창이 나타납니다.
    4. 그라운드에서 진행을 클릭합니다.