Exécuter le script correctif pour Opérations de comptes fournisseurs
Exécutez le script correctif pour une installation réussie de Opérations de comptes fournisseurs.
Avant de commencer
- Installez le module d’extension Traitement
des factures des comptes fournisseurs. - Exécuter le script de correctif pour l’exception Fonds insuffisants (écart du montant de l’en-tête) pour fonctionner.
- Définissez le périmètre de l’application sur Architecture commune Source-to-Pay.
- Toutes les factures associées au bon de commande doivent être disponibles dans le système pour l’exception de fonds insuffisants (écart de montant d’en-tête) pour fonctionner.
- Assurez-vous que les factures ont la même devise que celle associée à la devise du bon de commande pour que l’exception s’exécute correctement.
- Vous pouvez exécuter le script correctif par lots en ajoutant la commande
gr.setLimit(100000)après la ligne de commandegr.addEncodedQuery(« in_process_invoiced_amountISEMPTY ». Exécutez le script par lots de 100k ou 200k. - Assurez-vous que les bons de commande sont mis à jour avec les champs Montant de facture en cours de traitementet Montant de facture .Remarque :Si le script correctif n’est pas exécuté pour les bons de commande, l’exception de fonds insuffisants (écart de montant d’en-tête) associée à une facture ne fonctionne pas.
Rôle requis : admin
Procédure
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;
}