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

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기5분
  • 의 성공적인 설치를 외상 매입금 운영위해 수정 스크립트를 실행합니다.

    시작하기 전에

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

    필요한 역할: admin

    프로시저

    1. 다음으로 이동 모두 > 시스템 정의 > 수정 스크립트레이블이 표시됩니다.
    2. 새로 만들기를 클릭합니다.
      새 수정 스크립트 기록이 열립니다.
    3. 이름 필드에 이름을 Update PO Invoiced Amount for API(API에 대한 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. 수정 스크립트 실행을 선택합니다.
      취소(Cancel), 계속 진행(Proceed) 및 백그라운드에서 계속 진행(Proceed in Background) 옵션이 있는 팝업 창이 나타납니다.
    4. 백그라운드로 진행을 클릭합니다.