ANS-1396 · DéVELOPPEMENT SUITESCRIPT

Comment résoudre les écarts d’arrondi lors de la création de scripts pour les paiements NetSuite ?

Résolvez les écarts d'arrondi dans les montants des transactions NetSuite dus aux modes de chargement des enregistrements SuiteScript.

Solution courte

Les problèmes d’arrondi lors du traitement des transactions par script dans NetSuite proviennent souvent de l’utilisation du mode dynamique lors du chargement des enregistrements. Pour éviter que NetSuite ne recalcule les montants et n’introduise des erreurs de précision, chargez l’enregistrement en mode statique (standard). Cela garantit la conservation des valeurs exactes et résout les erreurs d’application.

Scénario

Un utilisateur crée un script pour un paiement de transaction dont le montant total est précisément de 0,15 (résultant de 0,05 + 0,10). Alors que l’interface utilisateur de NetSuite affiche correctement le montant dû comme étant 0,15, la soumission du paiement via le script génère une erreur : « 0,1500000002 ne peut pas être appliqué ». Le débogage confirme que la valeur calculée par le script et le montant dû de la facture affiché dans l’interface utilisateur sont tous deux exactement égaux à 0,15, ce qui indique un écart survenu lors du traitement du script.

Solution

Lors du traitement des transactions via SuiteScript, l’utilisation de record.load en mode dynamique peut amener NetSuite à recalculer les montants des transactions, ce qui peut entraîner de légères erreurs de précision. Pour éviter ces recalculs et garantir le maintien des valeurs exactes, les enregistrements doivent être chargés en mode statique (standard). Cette approche résout les problèmes liés à des écarts infinitésimaux entre les montants soumis par le script et les valeurs attendues, tels que « 0,1500000002 ne peut pas être appliqué ». Pour charger un enregistrement en mode statique à l’aide de SuiteScript 2.x, définissez l’option isDynamic sur false lors de l’appel de record.load.

javascript
var recordId = 123; // Replace with actual record ID
var recordType = record.Type.VENDOR_PAYMENT; // Replace with actual record type
var paymentRecord = record.load({
    type: recordType,
    id: recordId,
    isDynamic: false // Load in static (standard) mode
});

Support expert NetSuite

Besoin d’aide pour cet enjeu NetSuite ?

Accompagnement-conseil et configuration pour Développement SuiteScript

Parler à un consultant