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