{"id":2745,"date":"2017-08-21T14:59:24","date_gmt":"2017-08-21T14:59:24","guid":{"rendered":"https:\/\/answers.gurussolutions.com\/answers\/how-to-hide-unit-cost-and-cost-fields-on-netsuite-project-task-assignee-sublist-2\/"},"modified":"2026-07-28T18:25:10","modified_gmt":"2026-07-28T18:25:10","slug":"comment-masquer-les-champs-cout-unitaire-et-cout-dans-la-sous-liste-des-responsables-de-taches-dun-projet-netsuite","status":"publish","type":"qa_entry","link":"https:\/\/answers.gurussolutions.com\/fr\/answers\/comment-masquer-les-champs-cout-unitaire-et-cout-dans-la-sous-liste-des-responsables-de-taches-dun-projet-netsuite\/","title":{"rendered":"Comment masquer les champs \u00ab Co\u00fbt unitaire \u00bb et \u00ab Co\u00fbt \u00bb dans la sous-liste des responsables de t\u00e2ches d&rsquo;un projet 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":"Les options de configuration natives n'\u00e9tant pas disponibles, une solution SuiteScript est n\u00e9cessaire pour g\u00e9rer la visibilit\u00e9 et les valeurs par d\u00e9faut de ces champs.","ga_short_answer":"Pour masquer les champs \u00ab Co\u00fbt unitaire \u00bb et \u00ab Co\u00fbt \u00bb dans la sous-liste \u00ab Responsable de la t\u00e2che du projet \u00bb, un script SuiteScript est n\u00e9cessaire. Ce script g\u00e8re la visibilit\u00e9 des champs en mode affichage, efface les libell\u00e9s en mode \u00e9dition et remplace les valeurs vides du co\u00fbt unitaire par z\u00e9ro lors de la validation afin d\u2019\u00e9viter les erreurs, car ces champs ne disposent pas d\u2019options de configuration natives.","ga_scenario":"Les utilisateurs de NetSuite rencontrent souvent des difficult\u00e9s lorsqu\u2019ils tentent de personnaliser la sous-liste \u00ab Responsable \u00bb des enregistrements de t\u00e2ches de projet. Plus pr\u00e9cis\u00e9ment, il n\u2019existe aucune option de configuration native permettant de masquer les champs \u00ab Co\u00fbt unitaire \u00bb ou \u00ab Co\u00fbt \u00bb. Cette limitation signifie que ces champs restent visibles par d\u00e9faut, m\u00eame lorsqu\u2019ils ne sont pas pertinents pour le flux de travail d\u2019un utilisateur ou ses besoins en mati\u00e8re de saisie de donn\u00e9es.","ga_solution":"Comme il n\u2019existe aucune option de configuration native permettant de masquer les champs \u00ab Co\u00fbt unitaire \u00bb ou \u00ab Co\u00fbt \u00bb dans la sous-liste \u00ab Responsable \u00bb de la t\u00e2che de projet, une solution par script est n\u00e9cessaire. L\u2019exemple suivant illustre une solution mise en \u0153uvre \u00e0 l\u2019aide de SuiteScript 1.0. Il est important de noter que SuiteScript 1.0 est une API h\u00e9rit\u00e9e et que la meilleure pratique actuelle de NetSuite pour les nouveaux d\u00e9veloppements est SuiteScript 2.0\/2.1. Les fonctions et les structures d\u2019objets utilis\u00e9es dans ce script sont sp\u00e9cifiques \u00e0 SuiteScript 1.0 et devraient \u00eatre r\u00e9\u00e9crites pour une impl\u00e9mentation en SuiteScript 2.x.La solution r\u00e9pond \u00e0 deux consid\u00e9rations principales : 1.  **Masquage en mode \u00e9dition :** pour masquer efficacement la colonne en mode \u00e9dition tout en garantissant la persistance de la valeur, l\u2019intitul\u00e9 du champ doit \u00eatre masqu\u00e9. 2.  **Gestion des champs obligatoires :** le champ \u00ab Co\u00fbt unitaire \u00bb est obligatoire par d\u00e9faut. Si une t\u00e2che de projet est enregistr\u00e9e avec un champ \u00ab Co\u00fbt unitaire \u00bb vide (ce qui peut se produire si le \u00ab Co\u00fbt de main-d\u2019\u0153uvre \u00bb de l\u2019employ\u00e9 affect\u00e9 est vide), une erreur inattendue se produira. Pour \u00e9viter cela, le script remplace toute valeur vide du champ \u00ab Co\u00fbt unitaire \u00bb par 0 lors de l\u2019\u00e9v\u00e9nement \u00ab avant soumission \u00bb. D\u00e9ployez le script suivant en tant que script d\u2019\u00e9v\u00e9nement utilisateur sur l\u2019enregistrement de la t\u00e2che de projet.Fonction \u00ab Avant chargement \u00bb (SuiteScript 1.0) :\n\n```\njavascript\/** * beforeLoad_hideUnitCost : Before load trigger to be deployed on * Project Task record. * * @param {string} type : the read operation type * @param {nlobjForm} form : an nlobjForm object representing the * current form * @param {nlobjRequest} request : an nlobjRequest object * representing the GET request * * @author frederic.jannelle@erpguru.com *\/function beforeLoad_hideUnitCost(type, form, request){    if (form != null) {        if ((type == 'create') || (type == 'edit')) {            \/\/ Need to make field non-mandatory to allow submission            \/\/ of sublist line with an empty unit cost            form.getSubList('assignee').getField('unitcost').setMandatory(false).setLabel('');            form.getSubList('assignee').getField('cost').setMandatory(false).setLabel('');        }        if (type == 'view') {            form.getSubList('assignee').getField('unitcost').setDisplayType('hidden');            form.getSubList('assignee').getField('cost').setDisplayType('hidden');        }    }}\n```\n\nFonction \u00ab Avant soumission \u00bb (SuiteScript 1.0) :\n\n```\njavascript\/** * beforeSubmit_hideUnitCost : Before submit trigger to be deployed * on Priject Task record. * * @param {string} type : the write operation type * * @author frederic.jannelle@erpguru.com *\/function beforeSubmit_hideUnitCost(type){    if (type == 'create' || type == 'edit') {        resetEmptyUnitCosts();    }}\n```\n\nFonction d\u2019aide (SuiteScript 1.0) :\n\n```\njavascript\/** * resetEmptyUnitCosts : Goes through the list of assignees and for * each line that has an empty unit cost resets it to 0. * * This is done to handle the cases where the Labor Cost is empty * on the employee record and therefore populated as empty on the * assignee line. This will cause an unexpected error on submission * of the project task since the field is considered mandatory. * * @author frederic.jannelle@erpguru.com *\/function resetEmptyUnitCosts(){    var numberOfLines = nlapiGetLineItemCount('assignee');    for (var i = 1; i < numberOfLines; i++) {        var unitCost = nlapiGetLineItemValue('assignee', 'unitcost', i);        if (unitCost == null || unitCost == '') {            nlapiSetLineItemValue('assignee', 'unitcost', i, 0);        }    }}\n```","ga_source_author":"","ga_source_author_email":"","ga_date_original":"2017-08-21T10:59:24-04:00","ga_date_verified":"2026-07-05","ga_source_subject":"Hiding unit cost on project task","ga_ans_id":"ANS-1006","ga_publish_decision":"publish_with_edits","ga_staleness_risk":"high","ga_review_priority":"spot_check","ga_tier2_verdict":"partially_outdated","ga_tier2_concerns":"The provided script is written in SuiteScript 1.0, which is a legacy API. NetSuite's current best practice for scripting is SuiteScript 2.0\/2.1.; The SuiteScript 1.0 functions and objects (e.g., `nlobjForm`, `nlapiGetLineItemCount`, `nlapiGetLineItemValue`, `setMandatory`, `setLabel`, `setDisplayType`) are outdated and have different equivalents in SuiteScript 2.x.; The parameter passing for user event scripts has changed from individual parameters (`type`, `form`, `request`) to a single `context` object in SuiteScript 2.x.","ga_final_category":"SuiteScript Development","footnotes":""},"ga_category":[108,23,108],"ga_audience":[10],"ga_difficulty":[94],"class_list":["post-2745","qa_entry","type-qa_entry","status-publish","hentry","ga_category-developpement-suitescript","ga_category-suitescript-development","ga_audience-developer-suitescript","ga_difficulty-avance"],"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":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\/2745","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\/2745\/revisions"}],"predecessor-version":[{"id":4665,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/qa_entry\/2745\/revisions\/4665"}],"wp:attachment":[{"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=2745"}],"wp:term":[{"taxonomy":"ga_category","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_category?post=2745"},{"taxonomy":"ga_audience","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_audience?post=2745"},{"taxonomy":"ga_difficulty","embeddable":true,"href":"https:\/\/answers.gurussolutions.com\/fr\/wp-json\/wp\/v2\/ga_difficulty?post=2745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}