ANS-1389 · CONFIGURATION COMPTABLE ET FINANCIèRE
Comment optimiser le traitement des paiements clients dans NetSuite
Simplifiez le processus de comptabilisation des paiements et des avoirs clients en permettant la saisie rapide du numéro de transaction directement dans l'enregistrement de paiement.
Solution courte
Pour optimiser la demande de paiement client, créez trois champs de texte libre personnalisés dans la fiche « Paiement client ». Personnalisez le formulaire de paiement afin de placer ces champs sous l’onglet « Appliquer ». Déployez un script SuiteScript 2.x côté client avec un point d’entrée « fieldChanged » pour rechercher et appliquer automatiquement les transactions en fonction des chiffres saisis, ce qui réduit considérablement le travail manuel.
Scénario
Les utilisateurs sont souvent confrontés à un processus manuel fastidieux lorsqu’ils enregistrent les paiements ou les avoirs des clients dans NetSuite, ce qui les oblige fréquemment à parcourir plusieurs pages pour faire correspondre les transactions. Ce manque d’efficacité entraîne un allongement des délais de traitement et un risque accru d’erreurs.
Solution
La solution consiste à créer des champs personnalisés, à personnaliser le formulaire de paiement client et à mettre en œuvre un script SuiteScript 2.x côté client afin d’automatiser l’application des paiements et des avoirs.
Créez trois nouveaux champs personnalisés dans l’enregistrement « Paiement client » :
- Numéro de transaction (alerte) avec l’identifiant interne
custbody_tran_number_alert(texte libre) - Numéro de transaction (avoir) avec l’identifiant interne
custbody_tran_number_credit(texte libre) - Numéro de transaction (Appliquer) avec l’identifiant interne
custbody_tran_number_apply(Texte libre) Assurez-vous que l’option « Stocker la valeur » de ces champs est définie sur GA_KEEP_0004, car leurs valeurs ne sont utilisées que pour l’interaction avec l’interface utilisateur.
- Numéro de transaction (alerte) avec l’identifiant interne
Personnalisez les formulaires de paiement client :
Déplacez les champs personnalisés nouvellement créés afin qu’ils soient visibles dans le sous-onglet « Appliquer » des formulaires de paiement client concernés.
Créez et déployez un script SuiteScript 2.x côté client sur l’enregistrement de paiement client :
Le script se déclenchera lors de modifications des champs afin de rechercher et d’appliquer automatiquement les transactions en fonction des numéros saisis dans les champs personnalisés.
javascript/** * @NApiVersion 2.x * @NScriptType ClientScript * @NModuleScope SameAccount */define(['N/record'], function(record) { /** * Function to be executed when field is changed. * * @param {object} scriptContext * @param {record.Record} scriptContext.currentRecord - Current form record * @param {string} scriptContext.sublistId - Sublist name * @param {string} scriptContext.fieldId - Field name * @param {number} scriptContext.lineNum - Line number in sublist * @param {number} scriptContext.columnNum - Column number in matrix sublist * * @since 2015.2 */ function fieldChanged(scriptContext) { var currentRecord = scriptContext.currentRecord; var fieldId = scriptContext.fieldId; if (fieldId === 'custbody_tran_number_apply') { findAndApply(currentRecord, fieldId, 'apply', 'custbody_tran_number_alert'); currentRecord.setValue({fieldId: fieldId, value: '', ignoreFieldChange: true}); } if (fieldId === 'custbody_tran_number_credit') { findAndApply(currentRecord, fieldId, 'credit', 'custbody_tran_number_alert'); currentRecord.setValue({fieldId: fieldId, value: '', ignoreFieldChange: true}); } } /** * findAndApply : Gets the transaction number value given the * transaction number field name, * iterates through a given sublist (sublist name), finds the related * transaction, applies and * sets the amount to the amount due. * * When the transaction number cannot be found an alert message is displayed. * * This is done to optimize apply/credit matching (no need to switch * pages and go through the * lengthy manual process; you can just input the numbers in the two * text fields) * * @param {record.Record} currentRecord : The current record object. * @param {string} transactionNumberFieldName : transaction number field id * @param {string} sublistName : sublist id ('apply' or 'credit') * @param {string} alertFieldName : alert field id * * @author frederic.jannelle@erpguru.com */ function findAndApply(currentRecord, transactionNumberFieldName, sublistName, alertFieldName) { var transactionNumberToApply = currentRecord.getValue({fieldId: transactionNumberFieldName}); if (transactionNumberToApply !== null && transactionNumberToApply !== '') { var numberOfLines = currentRecord.getLineCount({sublistId: sublistName}); var lineFound = false; for (var i = 0; i < numberOfLines && !lineFound; i++) { var refNumber = currentRecord.getSublistValue({sublistId: sublistName, fieldId: 'refnum', line: i}); if (refNumber === transactionNumberToApply) { var amountDue = currentRecord.getSublistValue({sublistId: sublistName, fieldId: 'due', line: i}); // Need to select line and commit, otherwise the application // is not triggered in the UI (ie: payment amount, // applied, unapplied are not updated) currentRecord.selectLine({sublistId: sublistName, line: i}); currentRecord.setCurrentSublistValue({sublistId: sublistName, fieldId: 'apply', value: true}); currentRecord.setCurrentSublistValue({sublistId: sublistName, fieldId: 'amount', value: amountDue}); currentRecord.commitLine({sublistId: sublistName}); currentRecord.setValue({fieldId: alertFieldName, value: '', ignoreFieldChange: true}); lineFound = true; } } if (!lineFound) { currentRecord.setValue({fieldId: alertFieldName, value: transactionNumberToApply + ' not found.', ignoreFieldChange: true}); } } } return { fieldChanged: fieldChanged };});Le script définit un point d’entrée fieldChanged qui surveille les champs de numéro de transaction personnalisés. Lorsqu’un numéro est saisi, la fonction findAndApply est appelée. Cette fonction parcourt la sous-liste concernée (soit « apply » pour les paiements, soit « credit » pour les avoirs), recherche un numéro de référence de transaction correspondant, puis sélectionne automatiquement la ligne, coche la case « Apply » et remplit le champ « Amount » avec le « Montant dû ». Si la transaction n’est pas trouvée, un message d’alerte s’affiche dans le champ custbody_tran_number_alert.
Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Configuration comptable et financière
