{"id":2895,"date":"2017-08-21T14:58:34","date_gmt":"2017-08-21T14:58:34","guid":{"rendered":"https:\/\/answers.gurussolutions.com\/answers\/how-to-programmatically-close-a-sales-order-in-netsuite-via-suitescript-2\/"},"modified":"2026-07-28T18:25:18","modified_gmt":"2026-07-28T18:25:18","slug":"comment-cloturer-une-commande-client-par-programmation-dans-netsuite-via-suitescript","status":"publish","type":"qa_entry","link":"https:\/\/answers.gurussolutions.com\/fr\/answers\/comment-cloturer-une-commande-client-par-programmation-dans-netsuite-via-suitescript\/","title":{"rendered":"Comment cl\u00f4turer une commande client par programmation dans NetSuite via SuiteScript ?"},"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":"D\u00e9couvrez la m\u00e9thode SuiteScript recommand\u00e9e pour cl\u00f4turer efficacement les commandes client en mettant \u00e0 jour le statut des lignes de commande, ce qui garantit une gestion ad\u00e9quate des commandes.","ga_short_answer":"Pour cl\u00f4turer par programmation une commande client dans NetSuite, parcourez toutes ses lignes de commande et d\u00e9finissez la valeur du champ \u00ab isclosed \u00bb sur \u00ab true \u00bb pour chacune d\u2019entre elles. Cette action met \u00e0 jour le statut de la commande client sur \u00ab Cl\u00f4tur\u00e9e \u00bb, ce qui constitue la m\u00e9thode prise en charge pour emp\u00eacher efficacement tout traitement ult\u00e9rieur d\u2019une commande via SuiteScript.","ga_scenario":"Les utilisateurs cherchent souvent \u00e0 modifier par programmation le statut d\u2019une commande client pour le faire passer \u00e0 \u00ab Annul\u00e9e \u00bb \u00e0 l\u2019aide de SuiteScript. Bien que l\u2019annulation directe vers le statut \u00ab Annul\u00e9e \u00bb pour les commandes approuv\u00e9es ne soit pas officiellement prise en charge par le script, l\u2019exigence m\u00e9tier consiste \u00e0 emp\u00eacher la poursuite du traitement d\u2019une commande.","ga_solution":"La m\u00e9thode recommand\u00e9e et prise en charge pour \u00ab annuler \u00bb efficacement une commande client via SuiteScript, en particulier pour les commandes qui ne sont plus dans l\u2019\u00e9tat \u00ab En attente d\u2019approbation \u00bb, consiste \u00e0 \u00ab cl\u00f4turer \u00bb la commande. Pour ce faire, il faut attribuer le statut \u00ab Cl\u00f4tur\u00e9 \u00bb \u00e0 tous les postes individuels de la commande client. Lorsque toutes les lignes sont cl\u00f4tur\u00e9es, le statut global de la commande client indique \u00ab Cl\u00f4tur\u00e9 \u00bb. Ce processus implique g\u00e9n\u00e9ralement :\n1. <a class=\"ga-interlink\" href=\"https:\/\/answers.gurussolutions.com\/fr\/answers\/can-you-load-netsuite-records-with-view-permissions-in-suitescript\/\">Le chargement de l\u2019enregistrement de la commande client<\/a>\n\n.\n2. Le parcours de chaque ligne de la sous-liste (par exemple, la sous-liste \u00ab article \u00bb).\n3. D\u00e9finir la valeur du champ \u00ab isclosed \u00bb sur \u00ab true \u00bb pour chaque ligne.\n4. <a class=\"ga-interlink\" href=\"https:\/\/answers.gurussolutions.com\/fr\/answers\/how-netsuites-approve-button-triggers-scripts-and-handles-record-changes\/\">Enregistrer l\u2019enregistrement de la commande client mis \u00e0 jour<\/a>\n\n. Exemple de code SuiteScript (SuiteScript 2.x recommand\u00e9 pour les versions actuelles de NetSuite) permettant de cl\u00f4turer toutes les lignes d\u2019une commande client :\n\n```\njavascript\/** * @NApiVersion 2.x * @NModuleScope SameAccount *\/define(['N\/record', 'N\/log'], function(record, log) {    function closeSalesOrderLines(salesOrderId) {        try {            var salesOrder = record.load({                type: record.Type.SALES_ORDER,                id: salesOrderId,                isDynamic: false            });            var lineCount = salesOrder.getLineCount({                sublistId: 'item'            });            for (var i = 0; i < lineCount; i++) {                salesOrder.setSublistValue({                    sublistId: 'item',                    fieldId: 'isclosed',                    line: i,                    value: true                });            }            var updatedRecordId = salesOrder.save();            log.debug('Sales Order Closed', 'Sales Order ' + updatedRecordId + ' has been closed by setting all lines to isclosed: true.');            return updatedRecordId;        } catch (e) {            log.error('Error Closing Sales Order', 'Could not close sales order ' + salesOrderId + ': ' + e.message);            return null;        }    }    return {        closeSalesOrderLines: closeSalesOrderLines    };});\n```\n\nIl est important de noter que l\u2019appel direct de fonctions non document\u00e9es telles que \u00ab cancel_approve_order() \u00bb ou la manipulation d\u2019URL telles que \u00ab salesordermanager.nl \u00bb avec \u00ab optype=cancel \u00bb constituent des m\u00e9thodes non prises en charge. Ces approches ne sont pas recommand\u00e9es, car elles peuvent entra\u00eener un comportement impr\u00e9visible ou cesser de fonctionner avec les futures mises \u00e0 jour de NetSuite. Le statut \u00ab Annul\u00e9 \u00bb est g\u00e9n\u00e9ralement r\u00e9serv\u00e9 aux commandes client qui se trouvent encore dans un \u00e9tat \u00ab En attente d\u2019approbation \u00bb, pour lesquelles un processus d\u2019annulation formel peut \u00eatre disponible.","ga_source_author":"","ga_source_author_email":"","ga_date_original":"2017-08-21T10:58:34-04:00","ga_date_verified":"2026-07-05","ga_source_subject":"set Sales Order status to canceled through script","ga_ans_id":"ANS-1156","ga_publish_decision":"publish_with_edits","ga_staleness_risk":"high","ga_review_priority":"spot_check","ga_tier2_verdict":"partially_outdated","ga_tier2_concerns":"The `cancel_approve_order()` function is an undocumented SuiteScript 1.0 function and not a supported API for programmatic cancellation.; Directly calling the `salesordermanager.nl` URL with `optype=cancel` is considered an unsupported 'hack' and is not the recommended or reliable method for canceling sales orders via script in current NetSuite versions.; The current recommended approach for scripting the cancellation of a sales order is to 'close' the order by setting all its line items to 'closed' (`isclosed: true`), which results in a 'Closed' status, not 'Canceled'. The 'Canceled' status is typically reserved for sales orders that are still in a 'Pending Approval' state.","ga_final_category":"SuiteScript Development","footnotes":""},"ga_category":[108,23,108],"ga_audience":[10],"ga_difficulty":[92],"class_list":["post-2895","qa_entry","type-qa_entry","status-publish","hentry","ga_category-developpement-suitescript","ga_category-suitescript-development","ga_audience-developer-suitescript","ga_difficulty-niveau-intermediaire"],"taxonomy_info":{"ga_category":[{"value":108,"label":"D\u00e9veloppement SuiteScript"},{"value":23,"label":"SuiteScript Development"},{"value":108,"label":"D\u00e9veloppement SuiteScript"}],"ga_audience":[{"value":10,"label":"Developer\/SuiteScript"}],"ga_difficulty":[{"value":92,"label":"Niveau interm\u00e9diaire"}]},"featured_image_src_large":[],"author_info":[],"comment_info":"","_links":{"self":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2895","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\/2895\/revisions"}],"predecessor-version":[{"id":4815,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2895\/revisions\/4815"}],"wp:attachment":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=2895"}],"wp:term":[{"taxonomy":"ga_category","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_category?post=2895"},{"taxonomy":"ga_audience","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_audience?post=2895"},{"taxonomy":"ga_difficulty","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_difficulty?post=2895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}