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

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

    시작하기 전에

    • 외상 매입금 송장 처리 플러그인을 설치합니다.
    • 자금 부족(헤더 금액 편차) 예외에 대한 수정 스크립트를 실행하여 작동합니다.
    • 애플리케이션 범위를Source-to-Pay Common Architecture로 설정합니다.
    • 구매 주문서와 연결된 모든 송장은 자금 부족(헤더 금액 편차) 예외가 작동하려면 시스템에서 사용할 수 있어야 합니다.
    • 예외가 성공적으로 실행되려면 송장의 통화가 구매 주문서 통화와 관련된 통화와 동일한지 확인합니다.
    • 명령줄 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. 백그라운드로 진행을 클릭합니다.