{"id":3032,"date":"2018-02-15T21:41:06","date_gmt":"2018-02-15T21:41:06","guid":{"rendered":"https:\/\/answers.gurussolutions.com\/answers\/comment-integrer-les-donnees-danciennete-des-clients-dans-les-modeles-de-factures-pdf-html-avances-de-netsuite\/"},"modified":"2026-07-28T18:25:25","modified_gmt":"2026-07-28T18:25:25","slug":"comment-integrer-les-donnees-danciennete-des-clients-dans-les-modeles-de-factures-pdf-html-avances-de-netsuite","status":"publish","type":"qa_entry","link":"https:\/\/answers.gurussolutions.com\/fr\/answers\/comment-integrer-les-donnees-danciennete-des-clients-dans-les-modeles-de-factures-pdf-html-avances-de-netsuite\/","title":{"rendered":"Comment int\u00e9grer les donn\u00e9es d&rsquo;anciennet\u00e9 des clients dans les mod\u00e8les de factures PDF\/HTML avanc\u00e9s de NetSuite ?"},"content":{"rendered":"","protected":false},"template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","ga_subtitle":"Ce guide propose une solution de contournement bas\u00e9e sur un script permettant d\u2019extraire les informations relatives \u00e0 l\u2019anciennet\u00e9 des clients \u00e0 partir des mod\u00e8les de formulaire de transaction de base et de les int\u00e9grer dans des mod\u00e8les de factures PDF\/HTML avanc\u00e9s personnalis\u00e9s.","ga_short_answer":"Pour ajouter un tableau d'anciennet\u00e9 \u00e0 un mod\u00e8le de facture PDF\/HTML avanc\u00e9, personnalisez une mise en page HTML de formulaire de transaction de base en y int\u00e9grant un marqueur pour la balise <NLAGING>. Cr\u00e9ez un formulaire de transaction personnalis\u00e9 \u00e0 l'aide de cette mise en page pour la g\u00e9n\u00e9ration HTML. Un script Suitelet extrait ensuite le tableau d'anciennet\u00e9 du code HTML g\u00e9n\u00e9r\u00e9 et l'int\u00e8gre \u00e0 votre mod\u00e8le PDF\/HTML avanc\u00e9 avant de g\u00e9n\u00e9rer le PDF final.","ga_scenario":"Les utilisateurs de NetSuite ont souvent besoin d\u2019int\u00e9grer les informations relatives \u00e0 l\u2019anciennet\u00e9 des cr\u00e9ances clients directement dans leurs mod\u00e8les de factures PDF\/HTML avanc\u00e9s. Bien que ces mod\u00e8les offrent des possibilit\u00e9s de personnalisation \u00e9tendues, l\u2019acc\u00e8s direct \u00e0 la balise <NLAGING> ou \u00e0 des champs de donn\u00e9es similaires relatifs \u00e0 l\u2019anciennet\u00e9 des cr\u00e9ances n\u2019est pas disponible en natif pour une insertion dynamique. Cela repr\u00e9sente un d\u00e9fi pour les entreprises qui ont besoin de mises en page de factures compl\u00e8tes.","ga_solution":"1. Personnalisez une mise en page HTML de formulaire de transaction \u00ab Basic \u00bb pour ajouter un marqueur. Bien que NetSuite recommande l\u2019utilisation de mod\u00e8les PDF\/HTML avanc\u00e9s pour l\u2019impression et pr\u00e9cise que les mises en page \u00ab Basic \u00bb seront obsol\u00e8tes, cette solution de contournement exploite une mise en page \u00ab Basic \u00bb pour l\u2019extraction des donn\u00e9es.nn   \n1. Acc\u00e9dez \u00e0 Personnalisation > Formulaires > Mises en page HTML des formulaires de transaction, puis cliquez sur Personnaliser dans \u00ab Mise en page HTML classique des transactions \u00bb.n   \n2. Sous l\u2019onglet Mod\u00e8les, dans le champ BODY, rep\u00e9rez la balise <NLAGING>. Cette balise est utilis\u00e9e par NetSuite pour r\u00e9cup\u00e9rer les donn\u00e9es d\u2019anciennet\u00e9 \u00e0 partir de la fiche client ; son m\u00e9canisme interne n\u2019est pas accessible.n   \n3. La balise <NLAGING> est g\u00e9n\u00e9ralement encadr\u00e9e par une balise <table>. Identifiez ce tableau et ins\u00e9rez \u00ab Aging \u00bb ou toute autre cha\u00eene unique qui servira ult\u00e9rieurement dans votre script \u00e0 identifier et extraire ce tableau.n   \n4. Enregistrez la mise en page.nn\n2. Cr\u00e9ez un formulaire de transaction personnalis\u00e9 qui utilise la mise en page cr\u00e9\u00e9e ci-dessus pour la g\u00e9n\u00e9ration HTML. Notez que la s\u00e9lection de \u00ab Basic \u00bb pour le \u00ab Type d\u2019impression \u00bb fait partie d\u2019une m\u00e9thodologie obsol\u00e8te pour l\u2019impression g\u00e9n\u00e9rale de documents ; toutefois, elle est utilis\u00e9e ici pour g\u00e9n\u00e9rer le flux HTML contenant les donn\u00e9es d\u2019anciennet\u00e9.nn   \n1. Acc\u00e9dez \u00e0 Personnalisation > Formulaires > Formulaires de transaction, puis cliquez sur Personnaliser sur n\u2019importe quel formulaire de facture standard.n   \n2. S\u00e9lectionnez \u00ab Basique \u00bb pour le \u00ab Type d\u2019impression \u00bb.n   \n3. S\u00e9lectionnez la mise en page cr\u00e9\u00e9e \u00e0 l\u2019\u00e9tape 1 pour \u00ab Mise en page HTML \u00bb.n   \n4. Enregistrez le formulaire de transaction personnalis\u00e9.nn\n3. T\u00e9l\u00e9chargez votre mod\u00e8le HTML\/PDF avanc\u00e9 pour les factures dans le Classement de fichiers.nn   \n1. Acc\u00e9dez \u00e0 Personnalisation > Formulaires > Mod\u00e8les PDF\/HTML avanc\u00e9s.n   \n2. Cliquez sur Modifier sur le mod\u00e8le de votre choix.n   \n3. En mode Code source, ajoutez un marqueur de cha\u00eene (par exemple, \u00ab \u00c9ch\u00e9ancier \u00bb) \u00e0 l\u2019endroit o\u00f9 vous souhaitez ins\u00e9rer le tableau d\u2019\u00e9ch\u00e9ancier.n   \n4. Copiez l\u2019int\u00e9gralit\u00e9 du code source du mod\u00e8le et cr\u00e9ez un fichier .html contenant ce code.n   \n5. Acc\u00e9dez \u00e0 Documents > Fichiers > Armoire de fichiers, puis t\u00e9l\u00e9chargez le fichier .html.nn   Remarque : si le mod\u00e8le contient une URL comportant un signe \u00ab & \u00bb (ampersand), celui-ci doit \u00eatre remplac\u00e9 par \u00ab &amp; \u00bb afin d\u2019\u00e9viter toute erreur. Par exemple, une balise img correspondant au logo d\u2019une entreprise pourrait n\u00e9cessiter une modification :n   <img src=\"${companyInformation.logoUrl}\" style=\"float: left; margin: 7px\" \/>n   Modifiez la ligne comme suit :n   <img src=\"${companyInformation.logoUrl?replace('&', '&amp;')}\" style=\"float: left; margin: 7px\" \/>nn\n4. Script SuiteScript. Le script suivant est fourni en SuiteScript 2.x, qui est la version recommand\u00e9e par NetSuite pour les nouveaux d\u00e9veloppements. L\u2019approche d\u2019origine utilisait les fonctions de SuiteScript 1.0, mais cette version a \u00e9t\u00e9 mise \u00e0 jour afin de s\u2019aligner sur les meilleures pratiques actuelles.nn\n\n```\njavascriptn\/**n * @NApiVersion 2.xn * @NScriptType Suiteletn *\/ndefine(['N\/render', 'N\/file', 'N\/record', 'N\/http'], function(render, file, record, http) {nn    function onRequest(context) {n        if (context.request.method === 'GET') {n            var invoiceId = 344150; \/\/ Invoice to printn            var customFormId = 184; \/\/ Internal ID of Custom form created in Step 2n            var advancedTemplateFileId = 1045754; \/\/ Internal ID of your advanced template file uploaded to File Cabinetnn            try {n                \/\/ Generate HTML stream from the custom transaction form (Basic layout)n                var htmlFile = render.print({n                    entityId: invoiceId,n                    printMode: render.PrintMode.HTML,n                    formId: customFormId,n                    recordType: record.Type.INVOICEn                });n                var stream = htmlFile.getContents();nn                \/\/ Slice Aging table out using the string markern                stream = stream.slice(stream.indexOf('Aging'), stream.length);n                var agingTable = stream.slice(stream.indexOf('<table'), stream.indexOf('<\/table>') + '<\/table>'.length);nn                \/\/ Replace some properties as they are not quotedn                var graytext = \/class=smallgraytext\/gi;n                var printtext = \/class=printtexttable\/gi;n                var alignProp = \/right\/gi;n                agingTable = agingTable.table.replace(graytext, '');n                agingTable = agingTable.replace(printtext, '');n                agingTable = agingTable.replace(alignProp, '\"center\"');nn                \/\/ Load the Advanced PDF\/HTML template filen                var templateFile = file.load({n                    id: advancedTemplateFileIdn                });n                var templateString = templateFile.getContents();nn                \/\/ Insert Aging table into the Advanced templaten                if (templateString.indexOf('Aging') !== -1) {n                    var temp1 = templateString.slice(0, templateString.indexOf('Aging'));n                    var temp2 = templateString.slice(templateString.indexOf('Aging') + 'Aging'.length, templateString.length);n                    templateString = temp1.concat(agingTable, temp2);n                }nn                \/\/ Render the final PDFn                var renderer = render.create();n                renderer.templateContent = templateString;n                renderer.addRecord({n                    name: 'record',n                    record: record.load({n                        type: record.Type.INVOICE,n                        id: invoiceIdn                    })n                });nn                var pdfFile = renderer.renderAsPdf();nn                context.response.setHeader({n                    name: 'Content-Type',n                    value: 'application\/pdf'n                });n                context.response.writeFile(pdfFile);nn            } catch (e) {n                log.error({n                    title: 'Error printing invoice',n                    details: en                });n                context.response.write('Error: ' + e.message);n            }n        }n    }nn    return {n        onRequest: onRequestn    };n});n\n```","ga_source_author":"Seonmi (Suhn) Kim","ga_source_author_email":"","ga_date_original":"2018-02-15T13:41:06-08:00","ga_date_verified":"2026-07-05","ga_source_subject":"How can we add Aging table in Advanced HTML\/PDF template for Invoice from Basic Transaction Form Layouts?","ga_ans_id":"ANS-1293","ga_publish_decision":"publish_with_edits","ga_staleness_risk":"high","ga_review_priority":"verify_first","ga_tier2_verdict":"partially_outdated","ga_tier2_concerns":"The original answer relies on customizing 'Basic Transaction Form HTML Layouts' and setting 'Basic' for 'Printing Type'. NetSuite documentation explicitly states that 'Basic layouts will be deprecated in a future release' and encourages the use of 'Advanced PDF\/HTML Templates' instead, as new features are added exclusively to advanced printing.; The Suitelet script provided uses SuiteScript 1.0 functions (e.g., `nlapiPrintRecord`, `nlapiLoadFile`). While SuiteScript 1.0 is still supported, NetSuite strongly recommends using SuiteScript 2.x for any new or substantially revised scripts, as SuiteScript 1.0 functionality is no longer being updated, and new feature development is exclusive to SuiteScript 2.x.","ga_final_category":"Printing, PDF & Email Templates","footnotes":""},"ga_category":[95,19,95],"ga_audience":[10],"ga_difficulty":[94],"class_list":["post-3032","qa_entry","type-qa_entry","status-publish","hentry","ga_category-impression-pdf-et-modeles-de-mails","ga_category-printing-pdf-email-templates","ga_audience-developer-suitescript","ga_difficulty-avance"],"taxonomy_info":{"ga_category":[{"value":95,"label":"Impression, PDF et mod\u00e8les d\u2019e-mails"},{"value":19,"label":"Printing, PDF & Email Templates"},{"value":95,"label":"Impression, PDF et mod\u00e8les d\u2019e-mails"}],"ga_audience":[{"value":10,"label":"Developer\/SuiteScript"}],"ga_difficulty":[{"value":94,"label":"Avanc\u00e9"}]},"featured_image_src_large":[],"author_info":[],"comment_info":"","_links":{"self":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/3032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry"}],"about":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/types\/qa_entry"}],"version-history":[{"count":1,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/3032\/revisions"}],"predecessor-version":[{"id":4952,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/3032\/revisions\/4952"}],"wp:attachment":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=3032"}],"wp:term":[{"taxonomy":"ga_category","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_category?post=3032"},{"taxonomy":"ga_audience","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_audience?post=3032"},{"taxonomy":"ga_difficulty","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_difficulty?post=3032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}