Exécuter le script correctif pour Opérations de comptes fournisseurs

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 2 minutes de lecture
  • 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 commande gr.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

    1. Accédez à la Tous > Définition du système > Scripts correctifs.
    2. Cliquez sur Nouveau.
      Un nouvel enregistrement de script correctif s’ouvre.Enregistrement du script correctif.
    3. Dans le champ Nom , saisissez le nom Mettre à jour les montants facturés des bons de commande pour APO.
    4. Dans le champ Script , copiez-collez le script mentionné ci-dessous.
    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. Cliquez sur Envoyer.
    2. Dans la vue de liste des scripts correctifs, recherchez et sélectionnez Mettre à jour les montants facturés des bons de commande pour le script de correction APO.
      Le script Mettre à jour les montants facturés des bons de commande pour le correctif APO s’ouvre.
    3. Sélectionnez Exécuter le script correctif.
      Une fenêtre contextuelle apparaît avec les options Annuler, Continuer et Continuer en arrière-plan.
    4. Cliquez sur Continuer en arrière-plan.