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